From 7a3e0e0586b6baf5198caae1e978a4e35f47c35e Mon Sep 17 00:00:00 2001 From: Kaushik Gopal Date: Wed, 6 Aug 2014 08:58:48 -0700 Subject: [PATCH 001/260] fix: buffer implementation for accumulation --- .../android/rxjava/BufferDemoFragment.java | 69 ++++++++++++------- 1 file changed, 44 insertions(+), 25 deletions(-) diff --git a/app/src/main/java/com/morihacky/android/rxjava/BufferDemoFragment.java b/app/src/main/java/com/morihacky/android/rxjava/BufferDemoFragment.java index 55bfd879..a1f43ac6 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/BufferDemoFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/BufferDemoFragment.java @@ -10,6 +10,7 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; +import android.widget.Button; import android.widget.ListView; import com.morihacky.android.rxjava.app.R; @@ -20,59 +21,70 @@ import butterknife.ButterKnife; import butterknife.InjectView; -import butterknife.OnClick; import rx.Observable; import rx.Observer; import rx.Subscriber; +import rx.Subscription; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; import timber.log.Timber; +/** + * credit to @tomrozb for this implementation: + * http://stackoverflow.com/questions/24922610/incorrect-understanding-of-buffer-in-rxjava + * + * An alternate mechanism of achieving the same result would be to use a {@link rx.subjects.PublishSubject} + * as demonstrated in the case of {@link com.morihacky.android.rxjava.SubjectDebounceSearchEmitterFragment} + */ public class BufferDemoFragment extends Fragment { @InjectView(R.id.list_threading_log) ListView _logsList; + @InjectView(R.id.btn_start_operation) Button _tapBtn; private LogAdapter _adapter; private List _logs; private int _tapCount = 0; - private Observable> _bufferedObservable; - private Observer> _observer; + private Subscription _subscription; @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - _setupLogger(); - - _bufferedObservable = _getBufferedObservable(); - _observer = _getObserver(); + public void onResume() { + super.onResume(); + _subscription = _getBufferedObservable().subscribe(_getObserver()); } - - @OnClick(R.id.btn_start_operation) - public void onButtonTapped() { - Timber.d("--------- GOT A TAP"); - _tapCount += 1; - _log("GOT A TAP"); - _bufferedObservable.subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(_observer); + @Override + public void onPause() { + super.onPause(); + _subscription.unsubscribe(); } // ----------------------------------------------------------------------------------- // Main Rx entities private Observable> _getBufferedObservable() { + return Observable.create(new Observable.OnSubscribe() { @Override public void call(Subscriber subscriber) { - subscriber.onNext(1); - } + _tapBtn.setOnClickListener(new View.OnClickListener() { - }).buffer(2, TimeUnit.SECONDS); + + @Override + public void onClick(View v) { + Timber.d("--------- GOT A TAP"); + _tapCount += 1; + _log("GOT A TAP"); + } + }); + } + }) + .buffer(2, TimeUnit.SECONDS) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()); } private Observer> _getObserver() { @@ -81,8 +93,10 @@ private Observer> _getObserver() { @Override public void onCompleted() { - _log(String.format("%d taps", _tapCount)); - _tapCount = 0; + if (_tapCount > 0) { + _log(String.format("%d taps", _tapCount)); + _tapCount = 0; + } } @Override @@ -94,15 +108,14 @@ public void onError(Throwable e) { @Override public void onNext(List integers) { Timber.d("--------- onNext"); - if (integers.size() > 0) { for (int i : integers) { _tapCount += i; } - onCompleted(); } else { Timber.d("--------- No taps received "); } + onCompleted(); } }; } @@ -110,6 +123,12 @@ public void onNext(List integers) { // ----------------------------------------------------------------------------------- // Method that help wiring up the example (irrelevant to RxJava) + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + _setupLogger(); + } + @Override public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, From 9159200f2caada86afc3a94918aa35eb905f9a83 Mon Sep 17 00:00:00 2001 From: Kaushik Gopal Date: Wed, 6 Aug 2014 08:59:01 -0700 Subject: [PATCH 002/260] fix: layout equal buttons --- app/src/main/res/layout/fragment_main.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml index 3ad346a4..c4e63087 100644 --- a/app/src/main/res/layout/fragment_main.xml +++ b/app/src/main/res/layout/fragment_main.xml @@ -13,19 +13,19 @@