From abcb14e4d39dbdcdcec7810b966f0494103e50d1 Mon Sep 17 00:00:00 2001 From: "Sherif S. Makhlouf" Date: Thu, 7 May 2015 09:57:24 +0300 Subject: [PATCH 001/206] Fixing the configuration changes issue in MainActivity --- .../com/morihacky/android/rxjava/MainActivity.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/app/src/main/java/com/morihacky/android/rxjava/MainActivity.java b/app/src/main/java/com/morihacky/android/rxjava/MainActivity.java index 07204647..e81137d2 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/MainActivity.java +++ b/app/src/main/java/com/morihacky/android/rxjava/MainActivity.java @@ -17,11 +17,13 @@ protected void onCreate(Bundle savedInstanceState) { setContentView(R.layout.activity_main); Timber.plant(new Timber.DebugTree()); - - getSupportFragmentManager().beginTransaction() - .addToBackStack(this.toString()) - .replace(R.id.activity_main, new MainFragment(), this.toString()) - .commit(); + + if(savedInstanceState == null){ + getSupportFragmentManager().beginTransaction() + .addToBackStack(this.toString()) + .replace(R.id.activity_main, new MainFragment(), this.toString()) + .commit(); + } } // This is better done with a DI Library like Dagger From bb90bb7fd2e3051b5d9fdbeb2ab26fca0eafee03 Mon Sep 17 00:00:00 2001 From: Kaushik Gopal Date: Tue, 12 May 2015 11:20:59 -0700 Subject: [PATCH 002/206] chore: Add LeakCanary to project --- app/build.gradle | 8 ++--- app/src/main/AndroidManifest.xml | 3 +- .../com/morihacky/android/rxjava/MyApp.java | 29 +++++++++++++++++++ .../rxjava/rxbus/RxBusDemo_TopFragment.java | 3 +- 4 files changed, 36 insertions(+), 7 deletions(-) create mode 100644 app/src/main/java/com/morihacky/android/rxjava/MyApp.java diff --git a/app/build.gradle b/app/build.gradle index 805e4007..7ff86bf2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -14,6 +14,8 @@ dependencies { compile 'com.squareup.okhttp:okhttp:2.0.0' compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0' + debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3' + releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3' } android { @@ -33,8 +35,4 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } -} - -dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) -} +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f0b3253e..f8779a75 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,8 +1,9 @@ + package="com.morihacky.android.rxjava" > Date: Tue, 12 May 2015 11:21:17 -0700 Subject: [PATCH 003/206] refactor: use BaseFragment with LeakCanary RefWatcher --- .../morihacky/android/rxjava/BaseFragment.java | 15 +++++++++++++++ .../android/rxjava/BufferDemoFragment.java | 2 +- .../ConcurrencyWithSchedulersDemoFragment.java | 2 +- .../android/rxjava/DemoTimeoutFragment.java | 2 +- .../rxjava/DoubleBindingTextViewFragment.java | 2 +- .../FormValidationCombineLatestFragment.java | 2 +- .../morihacky/android/rxjava/MainFragment.java | 2 +- .../morihacky/android/rxjava/PollingFragment.java | 2 +- .../android/rxjava/PseudoCacheConcatFragment.java | 2 +- .../SubjectDebounceSearchEmitterFragment.java | 2 +- .../android/rxjava/TimingDemoFragment.java | 2 +- .../android/rxjava/rxbus/RxBusDemoFragment.java | 3 ++- .../rxjava/rxbus/RxBusDemo_Bottom1Fragment.java | 3 ++- .../rxjava/rxbus/RxBusDemo_Bottom2Fragment.java | 3 ++- .../rxjava/rxbus/RxBusDemo_Bottom3Fragment.java | 3 ++- 15 files changed, 33 insertions(+), 14 deletions(-) create mode 100644 app/src/main/java/com/morihacky/android/rxjava/BaseFragment.java diff --git a/app/src/main/java/com/morihacky/android/rxjava/BaseFragment.java b/app/src/main/java/com/morihacky/android/rxjava/BaseFragment.java new file mode 100644 index 00000000..3d260adc --- /dev/null +++ b/app/src/main/java/com/morihacky/android/rxjava/BaseFragment.java @@ -0,0 +1,15 @@ +package com.morihacky.android.rxjava; + +import android.support.v4.app.Fragment; +import com.squareup.leakcanary.RefWatcher; + +public class BaseFragment + extends Fragment { + + @Override + public void onDestroy() { + super.onDestroy(); + RefWatcher refWatcher = MyApp.getRefWatcher(); + refWatcher.watch(this); + } +} 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 fe8c0ac0..7506b2c0 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/BufferDemoFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/BufferDemoFragment.java @@ -34,7 +34,7 @@ * as demonstrated in the case of {@link com.morihacky.android.rxjava.SubjectDebounceSearchEmitterFragment} */ public class BufferDemoFragment - extends Fragment { + extends BaseFragment { @InjectView(R.id.list_threading_log) ListView _logsList; @InjectView(R.id.btn_start_operation) Button _tapBtn; diff --git a/app/src/main/java/com/morihacky/android/rxjava/ConcurrencyWithSchedulersDemoFragment.java b/app/src/main/java/com/morihacky/android/rxjava/ConcurrencyWithSchedulersDemoFragment.java index 0abf2a8e..235964ae 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/ConcurrencyWithSchedulersDemoFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/ConcurrencyWithSchedulersDemoFragment.java @@ -28,7 +28,7 @@ import timber.log.Timber; public class ConcurrencyWithSchedulersDemoFragment - extends Fragment { + extends BaseFragment { @InjectView(R.id.progress_operation_running) ProgressBar _progress; @InjectView(R.id.list_threading_log) ListView _logsList; diff --git a/app/src/main/java/com/morihacky/android/rxjava/DemoTimeoutFragment.java b/app/src/main/java/com/morihacky/android/rxjava/DemoTimeoutFragment.java index a4e48d85..ca438fbe 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/DemoTimeoutFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/DemoTimeoutFragment.java @@ -28,7 +28,7 @@ import timber.log.Timber; public class DemoTimeoutFragment - extends Fragment { + extends BaseFragment { @InjectView(R.id.list_threading_log) ListView _logsList; diff --git a/app/src/main/java/com/morihacky/android/rxjava/DoubleBindingTextViewFragment.java b/app/src/main/java/com/morihacky/android/rxjava/DoubleBindingTextViewFragment.java index 27feb253..46788088 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/DoubleBindingTextViewFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/DoubleBindingTextViewFragment.java @@ -20,7 +20,7 @@ import rx.subjects.PublishSubject; public class DoubleBindingTextViewFragment - extends Fragment { + extends BaseFragment { @InjectView(R.id.double_binding_num1) EditText _number1; @InjectView(R.id.double_binding_num2) EditText _number2; diff --git a/app/src/main/java/com/morihacky/android/rxjava/FormValidationCombineLatestFragment.java b/app/src/main/java/com/morihacky/android/rxjava/FormValidationCombineLatestFragment.java index a7ede1fe..923bac0e 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/FormValidationCombineLatestFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/FormValidationCombineLatestFragment.java @@ -23,7 +23,7 @@ import static com.google.common.base.Strings.isNullOrEmpty; public class FormValidationCombineLatestFragment - extends Fragment { + extends BaseFragment { @InjectView(R.id.btn_demo_form_valid) TextView _btnValidIndicator; @InjectView(R.id.demo_combl_email) EditText _email; diff --git a/app/src/main/java/com/morihacky/android/rxjava/MainFragment.java b/app/src/main/java/com/morihacky/android/rxjava/MainFragment.java index 7c944392..fc1f916e 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/MainFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/MainFragment.java @@ -12,7 +12,7 @@ import com.morihacky.android.rxjava.rxbus.RxBusDemoFragment; public class MainFragment - extends Fragment { + extends BaseFragment { @Override public View onCreateView(LayoutInflater inflater, diff --git a/app/src/main/java/com/morihacky/android/rxjava/PollingFragment.java b/app/src/main/java/com/morihacky/android/rxjava/PollingFragment.java index 50c20c90..b91494c9 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/PollingFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/PollingFragment.java @@ -27,7 +27,7 @@ import timber.log.Timber; public class PollingFragment - extends Fragment { + extends BaseFragment { public static final int INITIAL_DELAY = 0; public static final int POLLING_INTERVAL = 1000; diff --git a/app/src/main/java/com/morihacky/android/rxjava/PseudoCacheConcatFragment.java b/app/src/main/java/com/morihacky/android/rxjava/PseudoCacheConcatFragment.java index d677e806..49274a0b 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/PseudoCacheConcatFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/PseudoCacheConcatFragment.java @@ -30,7 +30,7 @@ import static java.lang.String.format; public class PseudoCacheConcatFragment - extends Fragment { + extends BaseFragment { @InjectView(R.id.log_list) ListView _resultList; diff --git a/app/src/main/java/com/morihacky/android/rxjava/SubjectDebounceSearchEmitterFragment.java b/app/src/main/java/com/morihacky/android/rxjava/SubjectDebounceSearchEmitterFragment.java index 311020ad..777cd668 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/SubjectDebounceSearchEmitterFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/SubjectDebounceSearchEmitterFragment.java @@ -46,7 +46,7 @@ * incapable of debounce : this is the primary reason, since creating new observable everytime in subscription disregards debounce on subsequent calls */ public class SubjectDebounceSearchEmitterFragment - extends Fragment { + extends BaseFragment { @InjectView(R.id.list_threading_log) ListView _logsList; diff --git a/app/src/main/java/com/morihacky/android/rxjava/TimingDemoFragment.java b/app/src/main/java/com/morihacky/android/rxjava/TimingDemoFragment.java index b1b84d10..8239c4b0 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/TimingDemoFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/TimingDemoFragment.java @@ -19,7 +19,7 @@ import timber.log.Timber; public class TimingDemoFragment - extends Fragment { + extends BaseFragment { @Override public View onCreateView(LayoutInflater inflater, diff --git a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemoFragment.java b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemoFragment.java index d9dd4c10..d8fd2b52 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemoFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemoFragment.java @@ -7,10 +7,11 @@ import android.view.View; import android.view.ViewGroup; import butterknife.ButterKnife; +import com.morihacky.android.rxjava.BaseFragment; import com.morihacky.android.rxjava.app.R; public class RxBusDemoFragment - extends Fragment { + extends BaseFragment { @Override public View onCreateView(LayoutInflater inflater, diff --git a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom1Fragment.java b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom1Fragment.java index b124d534..8e843c68 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom1Fragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom1Fragment.java @@ -10,6 +10,7 @@ import android.widget.TextView; import butterknife.ButterKnife; import butterknife.InjectView; +import com.morihacky.android.rxjava.BaseFragment; import com.morihacky.android.rxjava.MainActivity; import com.morihacky.android.rxjava.app.R; import rx.functions.Action1; @@ -18,7 +19,7 @@ import static rx.android.app.AppObservable.bindFragment; public class RxBusDemo_Bottom1Fragment - extends Fragment { + extends BaseFragment { private RxBus _rxBus; private CompositeSubscription _subscriptions; diff --git a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom2Fragment.java b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom2Fragment.java index c37023a2..375711c8 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom2Fragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom2Fragment.java @@ -10,6 +10,7 @@ import android.widget.TextView; import butterknife.ButterKnife; import butterknife.InjectView; +import com.morihacky.android.rxjava.BaseFragment; import com.morihacky.android.rxjava.MainActivity; import com.morihacky.android.rxjava.app.R; import java.util.List; @@ -22,7 +23,7 @@ import static rx.android.app.AppObservable.bindFragment; public class RxBusDemo_Bottom2Fragment - extends Fragment { + extends BaseFragment { private RxBus _rxBus; private CompositeSubscription _subscriptions; diff --git a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom3Fragment.java b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom3Fragment.java index b04d84a6..ac3821f2 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom3Fragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom3Fragment.java @@ -10,6 +10,7 @@ import android.widget.TextView; import butterknife.ButterKnife; import butterknife.InjectView; +import com.morihacky.android.rxjava.BaseFragment; import com.morihacky.android.rxjava.MainActivity; import com.morihacky.android.rxjava.app.R; import java.util.List; @@ -24,7 +25,7 @@ import static rx.android.app.AppObservable.bindFragment; public class RxBusDemo_Bottom3Fragment - extends Fragment { + extends BaseFragment { private RxBus _rxBus; private CompositeSubscription _subscriptions; From c905fc4b4d5b5935854b751d7bed332417135291 Mon Sep 17 00:00:00 2001 From: Kaushik Gopal Date: Tue, 12 May 2015 11:22:45 -0700 Subject: [PATCH 004/206] refactor: mass refactor exodus according to codestyles in kg's https://github.com/kaushikgopal/jetbrains_env repo --- .../android/rxjava/BufferDemoFragment.java | 259 ++++++++------- ...ConcurrencyWithSchedulersDemoFragment.java | 251 +++++++------- .../android/rxjava/DemoTimeoutFragment.java | 306 +++++++++--------- .../rxjava/DoubleBindingTextViewFragment.java | 85 +++-- .../FormValidationCombineLatestFragment.java | 172 +++++----- .../android/rxjava/MainActivity.java | 38 +-- .../android/rxjava/MainFragment.java | 185 +++++------ .../com/morihacky/android/rxjava/MyApp.java | 1 - .../android/rxjava/PollingFragment.java | 199 ++++++------ .../rxjava/PseudoCacheConcatFragment.java | 218 ++++++------- .../android/rxjava/RetrofitFragment.java | 297 ++++++++--------- .../SubjectDebounceSearchEmitterFragment.java | 235 +++++++------- .../android/rxjava/TimingDemoFragment.java | 96 +++--- .../android/rxjava/retrofit/Contributor.java | 4 +- .../android/rxjava/retrofit/GithubApi.java | 22 +- .../android/rxjava/retrofit/User.java | 4 +- .../morihacky/android/rxjava/rxbus/RxBus.java | 26 +- .../rxjava/rxbus/RxBusDemoFragment.java | 44 +-- .../rxbus/RxBusDemo_Bottom1Fragment.java | 86 +++-- .../rxbus/RxBusDemo_Bottom2Fragment.java | 162 +++++----- .../rxbus/RxBusDemo_Bottom3Fragment.java | 168 +++++----- .../rxjava/rxbus/RxBusDemo_TopFragment.java | 41 ++- 22 files changed, 1445 insertions(+), 1454 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 7506b2c0..920896dd 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/BufferDemoFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/BufferDemoFragment.java @@ -5,7 +5,6 @@ import android.os.Handler; import android.os.Looper; import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -34,140 +33,140 @@ * as demonstrated in the case of {@link com.morihacky.android.rxjava.SubjectDebounceSearchEmitterFragment} */ public class BufferDemoFragment - extends BaseFragment { - - @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 Subscription _subscription; - - @Override - public void onResume() { - super.onResume(); - _subscription = _getBufferedObservable().subscribe(_getObserver()); - } - - @Override - public void onPause() { - super.onPause(); - _subscription.unsubscribe(); - } - - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - _setupLogger(); - } - - @Override - public View onCreateView(LayoutInflater inflater, - @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View layout = inflater.inflate(R.layout.fragment_buffer, container, false); - ButterKnife.inject(this, layout); - return layout; - } - - // ----------------------------------------------------------------------------------- - // Main Rx entities - - private Observable> _getBufferedObservable() { - - return Observable.create(new Observable.OnSubscribe() { - - @Override - public void call(Subscriber subscriber) { - _tapBtn.setOnClickListener(new View.OnClickListener() { - - @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() { - return new Observer>() { - - @Override - public void onCompleted() { - if (_tapCount > 0) { - _log(String.format("%d taps", _tapCount)); - _tapCount = 0; - } - } - - @Override - public void onError(Throwable e) { - Timber.e(e, "--------- Woops on error!"); - _log(String.format("Dang error. check your logs")); - } - - @Override - public void onNext(List integers) { - Timber.d("--------- onNext"); - if (integers.size() > 0) { - for (int i : integers) { - _tapCount += i; - } + extends BaseFragment { + + @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 Subscription _subscription; + + @Override + public void onResume() { + super.onResume(); + _subscription = _getBufferedObservable().subscribe(_getObserver()); + } + + @Override + public void onPause() { + super.onPause(); + _subscription.unsubscribe(); + } + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + _setupLogger(); + } + + @Override + public View onCreateView(LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View layout = inflater.inflate(R.layout.fragment_buffer, container, false); + ButterKnife.inject(this, layout); + return layout; + } + + // ----------------------------------------------------------------------------------- + // Main Rx entities + + private Observable> _getBufferedObservable() { + + return Observable.create(new Observable.OnSubscribe() { + + @Override + public void call(Subscriber subscriber) { + _tapBtn.setOnClickListener(new View.OnClickListener() { + + @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() { + return new Observer>() { + + @Override + public void onCompleted() { + if (_tapCount > 0) { + _log(String.format("%d taps", _tapCount)); + _tapCount = 0; + } + } + + @Override + public void onError(Throwable e) { + Timber.e(e, "--------- Woops on error!"); + _log(String.format("Dang error. check your logs")); + } + + @Override + public void onNext(List integers) { + Timber.d("--------- onNext"); + if (integers.size() > 0) { + for (int i : integers) { + _tapCount += i; + } + } else { + Timber.d("--------- No taps received "); + } + onCompleted(); + } + }; + } + + // ----------------------------------------------------------------------------------- + // Methods that help wiring up the example (irrelevant to RxJava) + + private void _setupLogger() { + _logs = new ArrayList(); + _adapter = new LogAdapter(getActivity(), new ArrayList()); + _logsList.setAdapter(_adapter); + } + + private void _log(String logMsg) { + + if (_isCurrentlyOnMainThread()) { + _logs.add(0, logMsg + " (main thread) "); + _adapter.clear(); + _adapter.addAll(_logs); } else { - Timber.d("--------- No taps received "); - } - onCompleted(); - } - }; - } - - // ----------------------------------------------------------------------------------- - // Methods that help wiring up the example (irrelevant to RxJava) - - private void _setupLogger() { - _logs = new ArrayList(); - _adapter = new LogAdapter(getActivity(), new ArrayList()); - _logsList.setAdapter(_adapter); - } - - private void _log(String logMsg) { - - if (_isCurrentlyOnMainThread()) { - _logs.add(0, logMsg + " (main thread) "); - _adapter.clear(); - _adapter.addAll(_logs); - } else { - _logs.add(0, logMsg + " (NOT main thread) "); - - // You can only do below stuff on main thread. - new Handler(Looper.getMainLooper()).post(new Runnable() { - - @Override - public void run() { - _adapter.clear(); - _adapter.addAll(_logs); + _logs.add(0, logMsg + " (NOT main thread) "); + + // You can only do below stuff on main thread. + new Handler(Looper.getMainLooper()).post(new Runnable() { + + @Override + public void run() { + _adapter.clear(); + _adapter.addAll(_logs); + } + }); } - }); } - } - private boolean _isCurrentlyOnMainThread() { - return Looper.myLooper() == Looper.getMainLooper(); - } + private boolean _isCurrentlyOnMainThread() { + return Looper.myLooper() == Looper.getMainLooper(); + } - private class LogAdapter - extends ArrayAdapter { + private class LogAdapter + extends ArrayAdapter { - public LogAdapter(Context context, List logs) { - super(context, R.layout.item_log, R.id.item_log, logs); + public LogAdapter(Context context, List logs) { + super(context, R.layout.item_log, R.id.item_log, logs); + } } - } } diff --git a/app/src/main/java/com/morihacky/android/rxjava/ConcurrencyWithSchedulersDemoFragment.java b/app/src/main/java/com/morihacky/android/rxjava/ConcurrencyWithSchedulersDemoFragment.java index 235964ae..5e801079 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/ConcurrencyWithSchedulersDemoFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/ConcurrencyWithSchedulersDemoFragment.java @@ -5,7 +5,6 @@ import android.os.Handler; import android.os.Looper; import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -28,145 +27,145 @@ import timber.log.Timber; public class ConcurrencyWithSchedulersDemoFragment - extends BaseFragment { + extends BaseFragment { - @InjectView(R.id.progress_operation_running) ProgressBar _progress; - @InjectView(R.id.list_threading_log) ListView _logsList; + @InjectView(R.id.progress_operation_running) ProgressBar _progress; + @InjectView(R.id.list_threading_log) ListView _logsList; - private LogAdapter _adapter; - private List _logs; - private Subscription _subscription; + private LogAdapter _adapter; + private List _logs; + private Subscription _subscription; - @Override - public void onDestroy() { - super.onDestroy(); - if (_subscription != null) { - _subscription.unsubscribe(); + @Override + public void onDestroy() { + super.onDestroy(); + if (_subscription != null) { + _subscription.unsubscribe(); + } + } + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + _setupLogger(); } - } - - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - _setupLogger(); - } - - @Override - public View onCreateView(LayoutInflater inflater, - @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View layout = inflater.inflate(R.layout.fragment_concurrency_schedulers, container, false); - ButterKnife.inject(this, layout); - return layout; - } - - @OnClick(R.id.btn_start_operation) - public void startLongOperation() { - - _progress.setVisibility(View.VISIBLE); - _log("Button Clicked"); - - _subscription = AppObservable.bindFragment(this, _getObservable()) // Observable - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(_getObserver()); // Observer - } - - private Observable _getObservable() { - return Observable.create(new Observable.OnSubscribe() { - - @Override - public void call(Subscriber observer) { - - _log("Within Observable"); - - _doSomeLongOperation_thatBlocksCurrentThread(); - observer.onNext(true); - observer.onCompleted(); - } - }); - } - - /** - * Observer that handles the result List from Observable - * through the 3 important actions: - * - * 1. onCompleted - * 2. onError - * 3. onNext - */ - private Observer _getObserver() { - return new Observer() { - - @Override - public void onCompleted() { - _log("On complete"); - _progress.setVisibility(View.INVISIBLE); - } - - @Override - public void onError(Throwable e) { - Timber.e(e, "Error in RxJava Demo concurrency"); - _log(String.format("Boo Error %s", e.getMessage())); - _progress.setVisibility(View.INVISIBLE); - } - - @Override - public void onNext(Boolean aBoolean) { - _log(String.format("onNext with return value \"%b\"", aBoolean)); - } - }; - } - - // ----------------------------------------------------------------------------------- - // Method that help wiring up the example (irrelevant to RxJava) - - private void _doSomeLongOperation_thatBlocksCurrentThread() { - _log("performing long operation"); - - try { - Thread.sleep(3000); - } catch (InterruptedException e) { - Timber.d("Operation was interrupted"); + + @Override + public View onCreateView(LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View layout = inflater.inflate(R.layout.fragment_concurrency_schedulers, container, false); + ButterKnife.inject(this, layout); + return layout; + } + + @OnClick(R.id.btn_start_operation) + public void startLongOperation() { + + _progress.setVisibility(View.VISIBLE); + _log("Button Clicked"); + + _subscription = AppObservable.bindFragment(this, _getObservable()) // Observable + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(_getObserver()); // Observer } - } - private void _log(String logMsg) { + private Observable _getObservable() { + return Observable.create(new Observable.OnSubscribe() { + + @Override + public void call(Subscriber observer) { - if (_isCurrentlyOnMainThread()) { - _logs.add(0, logMsg + " (main thread) "); - _adapter.clear(); - _adapter.addAll(_logs); - } else { - _logs.add(0, logMsg + " (NOT main thread) "); + _log("Within Observable"); - // You can only do below stuff on main thread. - new Handler(Looper.getMainLooper()).post(new Runnable() { + _doSomeLongOperation_thatBlocksCurrentThread(); + observer.onNext(true); + observer.onCompleted(); + } + }); + } + + /** + * Observer that handles the result List from Observable + * through the 3 important actions: + * + * 1. onCompleted + * 2. onError + * 3. onNext + */ + private Observer _getObserver() { + return new Observer() { + + @Override + public void onCompleted() { + _log("On complete"); + _progress.setVisibility(View.INVISIBLE); + } + + @Override + public void onError(Throwable e) { + Timber.e(e, "Error in RxJava Demo concurrency"); + _log(String.format("Boo Error %s", e.getMessage())); + _progress.setVisibility(View.INVISIBLE); + } + + @Override + public void onNext(Boolean aBoolean) { + _log(String.format("onNext with return value \"%b\"", aBoolean)); + } + }; + } - @Override - public void run() { - _adapter.clear(); - _adapter.addAll(_logs); + // ----------------------------------------------------------------------------------- + // Method that help wiring up the example (irrelevant to RxJava) + + private void _doSomeLongOperation_thatBlocksCurrentThread() { + _log("performing long operation"); + + try { + Thread.sleep(3000); + } catch (InterruptedException e) { + Timber.d("Operation was interrupted"); } - }); } - } - private void _setupLogger() { - _logs = new ArrayList(); - _adapter = new LogAdapter(getActivity(), new ArrayList()); - _logsList.setAdapter(_adapter); - } + private void _log(String logMsg) { + + if (_isCurrentlyOnMainThread()) { + _logs.add(0, logMsg + " (main thread) "); + _adapter.clear(); + _adapter.addAll(_logs); + } else { + _logs.add(0, logMsg + " (NOT main thread) "); - private boolean _isCurrentlyOnMainThread() { - return Looper.myLooper() == Looper.getMainLooper(); - } + // You can only do below stuff on main thread. + new Handler(Looper.getMainLooper()).post(new Runnable() { - private class LogAdapter - extends ArrayAdapter { + @Override + public void run() { + _adapter.clear(); + _adapter.addAll(_logs); + } + }); + } + } - public LogAdapter(Context context, List logs) { - super(context, R.layout.item_log, R.id.item_log, logs); + private void _setupLogger() { + _logs = new ArrayList(); + _adapter = new LogAdapter(getActivity(), new ArrayList()); + _logsList.setAdapter(_adapter); + } + + private boolean _isCurrentlyOnMainThread() { + return Looper.myLooper() == Looper.getMainLooper(); + } + + private class LogAdapter + extends ArrayAdapter { + + public LogAdapter(Context context, List logs) { + super(context, R.layout.item_log, R.id.item_log, logs); + } } - } } \ No newline at end of file diff --git a/app/src/main/java/com/morihacky/android/rxjava/DemoTimeoutFragment.java b/app/src/main/java/com/morihacky/android/rxjava/DemoTimeoutFragment.java index ca438fbe..ead3e0f4 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/DemoTimeoutFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/DemoTimeoutFragment.java @@ -5,7 +5,6 @@ import android.os.Handler; import android.os.Looper; import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -28,162 +27,163 @@ import timber.log.Timber; public class DemoTimeoutFragment - extends BaseFragment { - - @InjectView(R.id.list_threading_log) ListView _logsList; - - private LogAdapter _adapter; - private List _logs; - - private Subscription _subscription; - - @Override - public void onDestroy() { - super.onDestroy(); - _subscription.unsubscribe(); - } - - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - _setupLogger(); - } - - @Override - public View onCreateView(LayoutInflater inflater, - @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View layout = inflater.inflate(R.layout.fragment_subject_timeout, container, false); - ButterKnife.inject(this, layout); - return layout; - } - - @OnClick(R.id.btn_demo_timeout_1_2s) - public void onStart2sTask() { - _subscription = AppObservable.bindFragment(DemoTimeoutFragment.this, - _getObservableTask_2sToComplete()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(_getEventCompletionObserver()); - } - - @OnClick(R.id.btn_demo_timeout_1_5s) - public void onStart5sTask() { - _subscription = AppObservable.bindFragment(DemoTimeoutFragment.this, _getObservableFor5sTask()) - .timeout(2, TimeUnit.SECONDS, _getTimeoutObservable()) - .subscribeOn(Schedulers.computation()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(_getEventCompletionObserver()); - } - - // ----------------------------------------------------------------------------------- - // Main Rx entities - - private Observable _getObservableFor5sTask() { - return Observable.create(new Observable.OnSubscribe() { - - @Override - public void call(Subscriber subscriber) { - _log(String.format("Starting a 5s task")); - subscriber.onNext("5 s"); - try { - Thread.sleep(1200); - } catch (InterruptedException e) { - e.printStackTrace(); - } - subscriber.onCompleted(); - } - }); - } - - private Observable _getObservableTask_2sToComplete() { - return Observable.create(new Observable.OnSubscribe() { - - @Override - public void call(Subscriber subscriber) { - _log(String.format("Starting a 2s task")); - subscriber.onNext("2 s"); - try { - Thread.sleep(2000); - } catch (InterruptedException e) { - e.printStackTrace(); - } - subscriber.onCompleted(); - } - }).subscribeOn(Schedulers.computation()).timeout(3, TimeUnit.SECONDS); - } - - private Observable _getTimeoutObservable() { - return Observable.create(new Observable.OnSubscribe() { - - @Override - public void call(Subscriber subscriber) { - _log("Timing out this task ..."); - subscriber.onCompleted(); - } - }); - } - - private Observer _getEventCompletionObserver() { - return new Observer() { - - @Override - public void onCompleted() { - _log(String.format("task was completed")); - } - - @Override - public void onError(Throwable e) { - _log(String.format("Dang a task timeout")); - onCompleted(); - Timber.e(e, "Timeout Demo exception"); - } - - @Override - public void onNext(String taskType) { - _log(String.format("onNext %s task", taskType)); - } - }; - } - - // ----------------------------------------------------------------------------------- - // Method that help wiring up the example (irrelevant to RxJava) - - private void _setupLogger() { - _logs = new ArrayList(); - _adapter = new LogAdapter(getActivity(), new ArrayList()); - _logsList.setAdapter(_adapter); - } - - private void _log(String logMsg) { - - if (_isCurrentlyOnMainThread()) { - _logs.add(0, logMsg + " (main thread) "); - _adapter.clear(); - _adapter.addAll(_logs); - } else { - _logs.add(0, logMsg + " (NOT main thread) "); - - // You can only do below stuff on main thread. - new Handler(Looper.getMainLooper()).post(new Runnable() { - - @Override - public void run() { - _adapter.clear(); - _adapter.addAll(_logs); + extends BaseFragment { + + @InjectView(R.id.list_threading_log) ListView _logsList; + + private LogAdapter _adapter; + private List _logs; + + private Subscription _subscription; + + @Override + public void onDestroy() { + super.onDestroy(); + _subscription.unsubscribe(); + } + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + _setupLogger(); + } + + @Override + public View onCreateView(LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View layout = inflater.inflate(R.layout.fragment_subject_timeout, container, false); + ButterKnife.inject(this, layout); + return layout; + } + + @OnClick(R.id.btn_demo_timeout_1_2s) + public void onStart2sTask() { + _subscription = AppObservable.bindFragment(DemoTimeoutFragment.this, + _getObservableTask_2sToComplete()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(_getEventCompletionObserver()); + } + + @OnClick(R.id.btn_demo_timeout_1_5s) + public void onStart5sTask() { + _subscription = AppObservable.bindFragment(DemoTimeoutFragment.this, + _getObservableFor5sTask()) + .timeout(2, TimeUnit.SECONDS, _getTimeoutObservable()) + .subscribeOn(Schedulers.computation()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(_getEventCompletionObserver()); + } + + // ----------------------------------------------------------------------------------- + // Main Rx entities + + private Observable _getObservableFor5sTask() { + return Observable.create(new Observable.OnSubscribe() { + + @Override + public void call(Subscriber subscriber) { + _log(String.format("Starting a 5s task")); + subscriber.onNext("5 s"); + try { + Thread.sleep(1200); + } catch (InterruptedException e) { + e.printStackTrace(); + } + subscriber.onCompleted(); + } + }); + } + + private Observable _getObservableTask_2sToComplete() { + return Observable.create(new Observable.OnSubscribe() { + + @Override + public void call(Subscriber subscriber) { + _log(String.format("Starting a 2s task")); + subscriber.onNext("2 s"); + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + e.printStackTrace(); + } + subscriber.onCompleted(); + } + }).subscribeOn(Schedulers.computation()).timeout(3, TimeUnit.SECONDS); + } + + private Observable _getTimeoutObservable() { + return Observable.create(new Observable.OnSubscribe() { + + @Override + public void call(Subscriber subscriber) { + _log("Timing out this task ..."); + subscriber.onCompleted(); + } + }); + } + + private Observer _getEventCompletionObserver() { + return new Observer() { + + @Override + public void onCompleted() { + _log(String.format("task was completed")); + } + + @Override + public void onError(Throwable e) { + _log(String.format("Dang a task timeout")); + onCompleted(); + Timber.e(e, "Timeout Demo exception"); + } + + @Override + public void onNext(String taskType) { + _log(String.format("onNext %s task", taskType)); + } + }; + } + + // ----------------------------------------------------------------------------------- + // Method that help wiring up the example (irrelevant to RxJava) + + private void _setupLogger() { + _logs = new ArrayList(); + _adapter = new LogAdapter(getActivity(), new ArrayList()); + _logsList.setAdapter(_adapter); + } + + private void _log(String logMsg) { + + if (_isCurrentlyOnMainThread()) { + _logs.add(0, logMsg + " (main thread) "); + _adapter.clear(); + _adapter.addAll(_logs); + } else { + _logs.add(0, logMsg + " (NOT main thread) "); + + // You can only do below stuff on main thread. + new Handler(Looper.getMainLooper()).post(new Runnable() { + + @Override + public void run() { + _adapter.clear(); + _adapter.addAll(_logs); + } + }); } - }); } - } - private boolean _isCurrentlyOnMainThread() { - return Looper.myLooper() == Looper.getMainLooper(); - } + private boolean _isCurrentlyOnMainThread() { + return Looper.myLooper() == Looper.getMainLooper(); + } - private class LogAdapter - extends ArrayAdapter { + private class LogAdapter + extends ArrayAdapter { - public LogAdapter(Context context, List logs) { - super(context, R.layout.item_log, R.id.item_log, logs); + public LogAdapter(Context context, List logs) { + super(context, R.layout.item_log, R.id.item_log, logs); + } } - } } \ No newline at end of file diff --git a/app/src/main/java/com/morihacky/android/rxjava/DoubleBindingTextViewFragment.java b/app/src/main/java/com/morihacky/android/rxjava/DoubleBindingTextViewFragment.java index 46788088..cd711470 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/DoubleBindingTextViewFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/DoubleBindingTextViewFragment.java @@ -1,13 +1,10 @@ package com.morihacky.android.rxjava; -import android.content.Context; import android.os.Bundle; import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.view.inputmethod.InputMethodManager; import android.widget.EditText; import android.widget.TextView; import butterknife.ButterKnife; @@ -20,57 +17,57 @@ import rx.subjects.PublishSubject; public class DoubleBindingTextViewFragment - extends BaseFragment { + extends BaseFragment { - @InjectView(R.id.double_binding_num1) EditText _number1; - @InjectView(R.id.double_binding_num2) EditText _number2; - @InjectView(R.id.double_binding_result) TextView _result; + @InjectView(R.id.double_binding_num1) EditText _number1; + @InjectView(R.id.double_binding_num2) EditText _number2; + @InjectView(R.id.double_binding_result) TextView _result; - Subscription _subscription; - PublishSubject _resultEmitterSubject; + Subscription _subscription; + PublishSubject _resultEmitterSubject; - @Override - public View onCreateView(LayoutInflater inflater, - @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View layout = inflater.inflate(R.layout.fragment_double_binding_textview, container, false); - ButterKnife.inject(this, layout); + @Override + public View onCreateView(LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View layout = inflater.inflate(R.layout.fragment_double_binding_textview, container, false); + ButterKnife.inject(this, layout); - _resultEmitterSubject = PublishSubject.create(); - _subscription = _resultEmitterSubject.asObservable().subscribe(new Action1() { - @Override - public void call(Float aFloat) { - _result.setText(String.valueOf(aFloat)); - } - }); + _resultEmitterSubject = PublishSubject.create(); + _subscription = _resultEmitterSubject.asObservable().subscribe(new Action1() { + @Override + public void call(Float aFloat) { + _result.setText(String.valueOf(aFloat)); + } + }); - onNumberChanged(); - _number2.requestFocus(); + onNumberChanged(); + _number2.requestFocus(); - return layout; - } + return layout; + } - @OnTextChanged({ R.id.double_binding_num1, R.id.double_binding_num2 }) - public void onNumberChanged() { - float num1 = 0; - float num2 = 0; + @OnTextChanged({ R.id.double_binding_num1, R.id.double_binding_num2 }) + public void onNumberChanged() { + float num1 = 0; + float num2 = 0; - if (!Strings.isNullOrEmpty(_number1.getText().toString())) { - num1 = Float.parseFloat(_number1.getText().toString()); - } + if (!Strings.isNullOrEmpty(_number1.getText().toString())) { + num1 = Float.parseFloat(_number1.getText().toString()); + } - if (!Strings.isNullOrEmpty(_number2.getText().toString())) { - num2 = Float.parseFloat(_number2.getText().toString()); - } + if (!Strings.isNullOrEmpty(_number2.getText().toString())) { + num2 = Float.parseFloat(_number2.getText().toString()); + } - _resultEmitterSubject.onNext(num1 + num2); - } + _resultEmitterSubject.onNext(num1 + num2); + } - @Override - public void onDestroyView() { - super.onDestroyView(); - if (_subscription != null) { - _subscription.unsubscribe(); + @Override + public void onDestroyView() { + super.onDestroyView(); + if (_subscription != null) { + _subscription.unsubscribe(); + } } - } } diff --git a/app/src/main/java/com/morihacky/android/rxjava/FormValidationCombineLatestFragment.java b/app/src/main/java/com/morihacky/android/rxjava/FormValidationCombineLatestFragment.java index 923bac0e..0397dc50 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/FormValidationCombineLatestFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/FormValidationCombineLatestFragment.java @@ -2,7 +2,6 @@ import android.os.Bundle; import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -23,97 +22,100 @@ import static com.google.common.base.Strings.isNullOrEmpty; public class FormValidationCombineLatestFragment - extends BaseFragment { + extends BaseFragment { - @InjectView(R.id.btn_demo_form_valid) TextView _btnValidIndicator; - @InjectView(R.id.demo_combl_email) EditText _email; - @InjectView(R.id.demo_combl_password) EditText _password; - @InjectView(R.id.demo_combl_num) EditText _number; + @InjectView(R.id.btn_demo_form_valid) TextView _btnValidIndicator; + @InjectView(R.id.demo_combl_email) EditText _email; + @InjectView(R.id.demo_combl_password) EditText _password; + @InjectView(R.id.demo_combl_num) EditText _number; - private Observable _emailChangeObservable; - private Observable _passwordChangeObservable; - private Observable _numberChangeObservable; + private Observable _emailChangeObservable; + private Observable _passwordChangeObservable; + private Observable _numberChangeObservable; - private Subscription _subscription = null; + private Subscription _subscription = null; - @Override - public View onCreateView(LayoutInflater inflater, - @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View layout = inflater.inflate(R.layout.fragment_form_validation_comb_latest, container, false); - ButterKnife.inject(this, layout); + @Override + public View onCreateView(LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View layout = inflater.inflate(R.layout.fragment_form_validation_comb_latest, + container, + false); + ButterKnife.inject(this, layout); - _emailChangeObservable = WidgetObservable.text(_email); - _passwordChangeObservable = WidgetObservable.text(_password); - _numberChangeObservable = WidgetObservable.text(_number); + _emailChangeObservable = WidgetObservable.text(_email); + _passwordChangeObservable = WidgetObservable.text(_password); + _numberChangeObservable = WidgetObservable.text(_number); - _combineLatestEvents(); + _combineLatestEvents(); - return layout; - } + return layout; + } + + @Override + public void onPause() { + super.onPause(); + if (_subscription != null) { + _subscription.unsubscribe(); + } + } - @Override - public void onPause() { - super.onPause(); - if (_subscription != null) { - _subscription.unsubscribe(); + private void _combineLatestEvents() { + _subscription = Observable.combineLatest(_emailChangeObservable, + _passwordChangeObservable, + _numberChangeObservable, + new Func3() { + @Override + public Boolean call(OnTextChangeEvent onEmailChangeEvent, + OnTextChangeEvent onPasswordChangeEvent, + OnTextChangeEvent onNumberChangeEvent) { + + boolean emailValid = !isNullOrEmpty(onEmailChangeEvent.text().toString()) && + EMAIL_ADDRESS.matcher(onEmailChangeEvent.text()) + .matches(); + if (!emailValid) { + _email.setError("Invalid Email!"); + } + + boolean passValid = !isNullOrEmpty(onPasswordChangeEvent.text().toString()) && + onPasswordChangeEvent.text().length() > 8; + if (!passValid) { + _password.setError("Invalid Password!"); + } + + boolean numValid = !isNullOrEmpty(onNumberChangeEvent.text().toString()); + if (numValid) { + int num = Integer.parseInt(onNumberChangeEvent.text().toString()); + numValid = num > 0 && num <= 100; + } + if (!numValid) { + _number.setError("Invalid Number!"); + } + + return emailValid && passValid && numValid; + + } + })// + .subscribe(new Observer() { + @Override + public void onCompleted() { + Timber.d("completed"); + } + + @Override + public void onError(Throwable e) { + Timber.e(e, "there was an eroor"); + } + + @Override + public void onNext(Boolean formValid) { + if (formValid) { + _btnValidIndicator.setBackgroundColor(getResources().getColor(R.color.blue)); + } else { + _btnValidIndicator.setBackgroundColor(getResources().getColor(R.color.gray)); + } + } + }); } - } - - private void _combineLatestEvents() { - _subscription = Observable.combineLatest(_emailChangeObservable, - _passwordChangeObservable, - _numberChangeObservable, - new Func3() { - @Override - public Boolean call(OnTextChangeEvent onEmailChangeEvent, - OnTextChangeEvent onPasswordChangeEvent, - OnTextChangeEvent onNumberChangeEvent) { - - boolean emailValid = !isNullOrEmpty(onEmailChangeEvent.text().toString()) && - EMAIL_ADDRESS.matcher(onEmailChangeEvent.text()).matches(); - if (!emailValid) { - _email.setError("Invalid Email!"); - } - - boolean passValid = !isNullOrEmpty(onPasswordChangeEvent.text().toString()) && - onPasswordChangeEvent.text().length() > 8; - if (!passValid) { - _password.setError("Invalid Password!"); - } - - boolean numValid = !isNullOrEmpty(onNumberChangeEvent.text().toString()); - if (numValid) { - int num = Integer.parseInt(onNumberChangeEvent.text().toString()); - numValid = num > 0 && num <= 100; - } - if (!numValid) { - _number.setError("Invalid Number!"); - } - - return emailValid && passValid && numValid; - - } - })// - .subscribe(new Observer() { - @Override - public void onCompleted() { - Timber.d("completed"); - } - - @Override - public void onError(Throwable e) { - Timber.e(e, "there was an eroor"); - } - - @Override - public void onNext(Boolean formValid) { - if (formValid) { - _btnValidIndicator.setBackgroundColor(getResources().getColor(R.color.blue)); - } else { - _btnValidIndicator.setBackgroundColor(getResources().getColor(R.color.gray)); - } - } - }); - } } diff --git a/app/src/main/java/com/morihacky/android/rxjava/MainActivity.java b/app/src/main/java/com/morihacky/android/rxjava/MainActivity.java index 07204647..8ee623fe 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/MainActivity.java +++ b/app/src/main/java/com/morihacky/android/rxjava/MainActivity.java @@ -7,29 +7,29 @@ import timber.log.Timber; public class MainActivity - extends FragmentActivity { + extends FragmentActivity { - private RxBus _rxBus = null; + private RxBus _rxBus = null; - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_main); + // This is better done with a DI Library like Dagger + public RxBus getRxBusSingleton() { + if (_rxBus == null) { + _rxBus = new RxBus(); + } - Timber.plant(new Timber.DebugTree()); + return _rxBus; + } - getSupportFragmentManager().beginTransaction() - .addToBackStack(this.toString()) - .replace(R.id.activity_main, new MainFragment(), this.toString()) - .commit(); - } + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_main); - // This is better done with a DI Library like Dagger - public RxBus getRxBusSingleton() { - if (_rxBus == null) { - _rxBus = new RxBus(); - } + Timber.plant(new Timber.DebugTree()); - return _rxBus; - } + getSupportFragmentManager().beginTransaction() + .addToBackStack(this.toString()) + .replace(R.id.activity_main, new MainFragment(), this.toString()) + .commit(); + } } diff --git a/app/src/main/java/com/morihacky/android/rxjava/MainFragment.java b/app/src/main/java/com/morihacky/android/rxjava/MainFragment.java index fc1f916e..ba0cdd9a 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/MainFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/MainFragment.java @@ -2,7 +2,6 @@ import android.os.Bundle; import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -12,104 +11,110 @@ import com.morihacky.android.rxjava.rxbus.RxBusDemoFragment; public class MainFragment - extends BaseFragment { + extends BaseFragment { - @Override - public View onCreateView(LayoutInflater inflater, - @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View layout = inflater.inflate(R.layout.fragment_main, container, false); - ButterKnife.inject(this, layout); - return layout; - } + @Override + public View onCreateView(LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View layout = inflater.inflate(R.layout.fragment_main, container, false); + ButterKnife.inject(this, layout); + return layout; + } - @OnClick(R.id.btn_demo_schedulers) - public void demoConcurrencyWithSchedulers() { - getActivity().getSupportFragmentManager() - .beginTransaction() - .addToBackStack(this.toString()) - .replace(R.id.activity_main, new ConcurrencyWithSchedulersDemoFragment(), this.toString()) - .commit(); - } + @OnClick(R.id.btn_demo_schedulers) + public void demoConcurrencyWithSchedulers() { + getActivity().getSupportFragmentManager() + .beginTransaction() + .addToBackStack(this.toString()) + .replace(R.id.activity_main, + new ConcurrencyWithSchedulersDemoFragment(), + this.toString()) + .commit(); + } - @OnClick(R.id.btn_demo_buffer) - public void demoBuffer() { - getActivity().getSupportFragmentManager() - .beginTransaction() - .addToBackStack(this.toString()) - .replace(R.id.activity_main, new BufferDemoFragment(), this.toString()) - .commit(); - } + @OnClick(R.id.btn_demo_buffer) + public void demoBuffer() { + getActivity().getSupportFragmentManager() + .beginTransaction() + .addToBackStack(this.toString()) + .replace(R.id.activity_main, new BufferDemoFragment(), this.toString()) + .commit(); + } - @OnClick(R.id.btn_demo_subject_debounce) - public void demoThrottling() { - getActivity().getSupportFragmentManager() - .beginTransaction() - .addToBackStack(this.toString()) - .replace(R.id.activity_main, new SubjectDebounceSearchEmitterFragment(), this.toString()) - .commit(); - } + @OnClick(R.id.btn_demo_subject_debounce) + public void demoThrottling() { + getActivity().getSupportFragmentManager() + .beginTransaction() + .addToBackStack(this.toString()) + .replace(R.id.activity_main, + new SubjectDebounceSearchEmitterFragment(), + this.toString()) + .commit(); + } - @OnClick(R.id.btn_demo_retrofit) - public void demoRetrofitCalls() { - getActivity().getSupportFragmentManager() - .beginTransaction() - .addToBackStack(this.toString()) - .replace(R.id.activity_main, new RetrofitFragment(), this.toString()) - .commit(); - } + @OnClick(R.id.btn_demo_retrofit) + public void demoRetrofitCalls() { + getActivity().getSupportFragmentManager() + .beginTransaction() + .addToBackStack(this.toString()) + .replace(R.id.activity_main, new RetrofitFragment(), this.toString()) + .commit(); + } - @OnClick(R.id.btn_demo_double_binding_textview) - public void demoDoubleBindingWithPublishSubject() { - getActivity().getSupportFragmentManager() - .beginTransaction() - .addToBackStack(this.toString()) - .replace(R.id.activity_main, new DoubleBindingTextViewFragment(), this.toString()) - .commit(); - } + @OnClick(R.id.btn_demo_double_binding_textview) + public void demoDoubleBindingWithPublishSubject() { + getActivity().getSupportFragmentManager() + .beginTransaction() + .addToBackStack(this.toString()) + .replace(R.id.activity_main, new DoubleBindingTextViewFragment(), this.toString()) + .commit(); + } - @OnClick(R.id.btn_demo_polling) - public void demoPolling() { - getActivity().getSupportFragmentManager() - .beginTransaction() - .addToBackStack(this.toString()) - .replace(R.id.activity_main, new PollingFragment(), this.toString()) - .commit(); - } + @OnClick(R.id.btn_demo_polling) + public void demoPolling() { + getActivity().getSupportFragmentManager() + .beginTransaction() + .addToBackStack(this.toString()) + .replace(R.id.activity_main, new PollingFragment(), this.toString()) + .commit(); + } - @OnClick(R.id.btn_demo_rxbus) - public void demoRxBus() { - getActivity().getSupportFragmentManager() - .beginTransaction() - .addToBackStack(this.toString()) - .replace(R.id.activity_main, new RxBusDemoFragment(), this.toString()) - .commit(); - } + @OnClick(R.id.btn_demo_rxbus) + public void demoRxBus() { + getActivity().getSupportFragmentManager() + .beginTransaction() + .addToBackStack(this.toString()) + .replace(R.id.activity_main, new RxBusDemoFragment(), this.toString()) + .commit(); + } - //@OnClick(R.id.btn_demo_subject_timeout) - public void demoTimeout() { - getActivity().getSupportFragmentManager() - .beginTransaction() - .addToBackStack(this.toString()) - .replace(R.id.activity_main, new DemoTimeoutFragment(), this.toString()) - .commit(); - } + //@OnClick(R.id.btn_demo_subject_timeout) + public void demoTimeout() { + getActivity().getSupportFragmentManager() + .beginTransaction() + .addToBackStack(this.toString()) + .replace(R.id.activity_main, new DemoTimeoutFragment(), this.toString()) + .commit(); + } - @OnClick(R.id.btn_demo_form_validation_combinel) - public void formValidation() { - getActivity().getSupportFragmentManager() - .beginTransaction() - .addToBackStack(this.toString()) - .replace(R.id.activity_main, new FormValidationCombineLatestFragment(), this.toString()) - .commit(); - } + @OnClick(R.id.btn_demo_form_validation_combinel) + public void formValidation() { + getActivity().getSupportFragmentManager() + .beginTransaction() + .addToBackStack(this.toString()) + .replace(R.id.activity_main, + new FormValidationCombineLatestFragment(), + this.toString()) + .commit(); + } - @OnClick(R.id.btn_demo_pseudo_cache) - public void pseudoCacheDemo() { - getActivity().getSupportFragmentManager() - .beginTransaction() - .addToBackStack(this.toString()) - .replace(R.id.activity_main, new PseudoCacheConcatFragment(), this.toString()) - .commit(); - } + @OnClick(R.id.btn_demo_pseudo_cache) + public void pseudoCacheDemo() { + getActivity().getSupportFragmentManager() + .beginTransaction() + .addToBackStack(this.toString()) + .replace(R.id.activity_main, new PseudoCacheConcatFragment(), this.toString()) + .commit(); + } } diff --git a/app/src/main/java/com/morihacky/android/rxjava/MyApp.java b/app/src/main/java/com/morihacky/android/rxjava/MyApp.java index 3a220768..4dad4cc7 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/MyApp.java +++ b/app/src/main/java/com/morihacky/android/rxjava/MyApp.java @@ -3,7 +3,6 @@ import android.app.Application; import com.squareup.leakcanary.LeakCanary; import com.squareup.leakcanary.RefWatcher; -import timber.log.Timber; public class MyApp extends Application { diff --git a/app/src/main/java/com/morihacky/android/rxjava/PollingFragment.java b/app/src/main/java/com/morihacky/android/rxjava/PollingFragment.java index b91494c9..2dd7f7ae 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/PollingFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/PollingFragment.java @@ -5,7 +5,6 @@ import android.os.Handler; import android.os.Looper; import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -27,111 +26,111 @@ import timber.log.Timber; public class PollingFragment - extends BaseFragment { - - public static final int INITIAL_DELAY = 0; - public static final int POLLING_INTERVAL = 1000; - @InjectView(R.id.list_threading_log) ListView _logsList; - - private LogAdapter _adapter; - private List _logs; - private CompositeSubscription _subscriptions; - private int _counter = 0; - - @Override - public void onDestroy() { - super.onDestroy(); - _subscriptions.unsubscribe(); - } - - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - _subscriptions = new CompositeSubscription(); - _setupLogger(); - } - - @Override - public View onCreateView(LayoutInflater inflater, - @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View layout = inflater.inflate(R.layout.fragment_polling, container, false); - ButterKnife.inject(this, layout); - return layout; - } - - @OnClick(R.id.btn_start_simple_polling) - public void onStartSimplePollingClicked() { - _subscriptions.add(Observable.create(new Observable.OnSubscribe() { - @Override - public void call(final Subscriber observer) { - - Schedulers.newThread().createWorker() // - .schedulePeriodically(new Action0() { - @Override - public void call() { - observer.onNext(_doNetworkCallAndGetStringResult()); - } - }, INITIAL_DELAY, POLLING_INTERVAL, TimeUnit.MILLISECONDS); - } - }).take(10).subscribe(new Action1() { - @Override - public void call(String s) { - _log(String.format("String polling - %s", s)); - } - })); - } - - // ----------------------------------------------------------------------------------- - // Method that help wiring up the example (irrelevant to RxJava) - - private String _doNetworkCallAndGetStringResult() { - - try { - Thread.sleep(3000); - } catch (InterruptedException e) { - Timber.d("Operation was interrupted"); + extends BaseFragment { + + public static final int INITIAL_DELAY = 0; + public static final int POLLING_INTERVAL = 1000; + @InjectView(R.id.list_threading_log) ListView _logsList; + + private LogAdapter _adapter; + private List _logs; + private CompositeSubscription _subscriptions; + private int _counter = 0; + + @Override + public void onDestroy() { + super.onDestroy(); + _subscriptions.unsubscribe(); + } + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + _subscriptions = new CompositeSubscription(); + _setupLogger(); } - _counter++; - - return String.valueOf(_counter); - } - - private void _log(String logMsg) { - if (_isCurrentlyOnMainThread()) { - _logs.add(0, logMsg + " (main thread) "); - _adapter.clear(); - _adapter.addAll(_logs); - } else { - _logs.add(0, logMsg + " (NOT main thread) "); - - // You can only do below stuff on main thread. - new Handler(Looper.getMainLooper()).post(new Runnable() { - - @Override - public void run() { - _adapter.clear(); - _adapter.addAll(_logs); + + @Override + public View onCreateView(LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View layout = inflater.inflate(R.layout.fragment_polling, container, false); + ButterKnife.inject(this, layout); + return layout; + } + + @OnClick(R.id.btn_start_simple_polling) + public void onStartSimplePollingClicked() { + _subscriptions.add(Observable.create(new Observable.OnSubscribe() { + @Override + public void call(final Subscriber observer) { + + Schedulers.newThread().createWorker() // + .schedulePeriodically(new Action0() { + @Override + public void call() { + observer.onNext(_doNetworkCallAndGetStringResult()); + } + }, INITIAL_DELAY, POLLING_INTERVAL, TimeUnit.MILLISECONDS); + } + }).take(10).subscribe(new Action1() { + @Override + public void call(String s) { + _log(String.format("String polling - %s", s)); + } + })); + } + + // ----------------------------------------------------------------------------------- + // Method that help wiring up the example (irrelevant to RxJava) + + private String _doNetworkCallAndGetStringResult() { + + try { + Thread.sleep(3000); + } catch (InterruptedException e) { + Timber.d("Operation was interrupted"); } - }); + _counter++; + + return String.valueOf(_counter); } - } - private void _setupLogger() { - _logs = new ArrayList(); - _adapter = new LogAdapter(getActivity(), new ArrayList()); - _logsList.setAdapter(_adapter); - } + private void _log(String logMsg) { + if (_isCurrentlyOnMainThread()) { + _logs.add(0, logMsg + " (main thread) "); + _adapter.clear(); + _adapter.addAll(_logs); + } else { + _logs.add(0, logMsg + " (NOT main thread) "); + + // You can only do below stuff on main thread. + new Handler(Looper.getMainLooper()).post(new Runnable() { + + @Override + public void run() { + _adapter.clear(); + _adapter.addAll(_logs); + } + }); + } + } - private boolean _isCurrentlyOnMainThread() { - return Looper.myLooper() == Looper.getMainLooper(); - } + private void _setupLogger() { + _logs = new ArrayList(); + _adapter = new LogAdapter(getActivity(), new ArrayList()); + _logsList.setAdapter(_adapter); + } + + private boolean _isCurrentlyOnMainThread() { + return Looper.myLooper() == Looper.getMainLooper(); + } - private class LogAdapter - extends ArrayAdapter { + private class LogAdapter + extends ArrayAdapter { - public LogAdapter(Context context, List logs) { - super(context, R.layout.item_log, R.id.item_log, logs); + public LogAdapter(Context context, List logs) { + super(context, R.layout.item_log, R.id.item_log, logs); + } } - } } \ No newline at end of file diff --git a/app/src/main/java/com/morihacky/android/rxjava/PseudoCacheConcatFragment.java b/app/src/main/java/com/morihacky/android/rxjava/PseudoCacheConcatFragment.java index 49274a0b..07e702d2 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/PseudoCacheConcatFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/PseudoCacheConcatFragment.java @@ -2,7 +2,6 @@ import android.os.Bundle; import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -30,123 +29,124 @@ import static java.lang.String.format; public class PseudoCacheConcatFragment - extends BaseFragment { - - @InjectView(R.id.log_list) ListView _resultList; - - private Subscription _subscription = null; - private HashMap _contributionMap = null; - private ArrayAdapter _adapter; - - @Override - public View onCreateView(LayoutInflater inflater, - @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View layout = inflater.inflate(R.layout.fragment_pseudo_cache_concat, container, false); - ButterKnife.inject(this, layout); - _initializeCache(); - return layout; - } - - @Override - public void onPause() { - super.onPause(); - if (_subscription != null) { - _subscription.unsubscribe(); + extends BaseFragment { + + @InjectView(R.id.log_list) ListView _resultList; + + private Subscription _subscription = null; + private HashMap _contributionMap = null; + private ArrayAdapter _adapter; + + @Override + public View onCreateView(LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View layout = inflater.inflate(R.layout.fragment_pseudo_cache_concat, container, false); + ButterKnife.inject(this, layout); + _initializeCache(); + return layout; } - } - - @OnClick(R.id.btn_start_pseudo_cache) - public void onDemoPseudoCacheClicked() { - _adapter = new ArrayAdapter<>(getActivity(), - R.layout.item_log, - R.id.item_log, - new ArrayList()); - - _resultList.setAdapter(_adapter); - _initializeCache(); - - Observable.concat(_getCachedData(), _getFreshData()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Subscriber() { - @Override - public void onCompleted() { - Timber.d("done loading all data"); - } - - @Override - public void onError(Throwable e) { - Timber.e(e, "arr something went wrong"); - } - - @Override - public void onNext(Contributor contributor) { - _contributionMap.put(contributor.login, contributor.contributions); - _adapter.clear(); - _adapter.addAll(getListStringFromMap()); - } - }); - } - - private List getListStringFromMap() { - List list = new ArrayList<>(); - - for (String username : _contributionMap.keySet()) { - String rowLog = String.format("%s [%d]", username, _contributionMap.get(username)); - list.add(rowLog); + + @Override + public void onPause() { + super.onPause(); + if (_subscription != null) { + _subscription.unsubscribe(); + } + } + + @OnClick(R.id.btn_start_pseudo_cache) + public void onDemoPseudoCacheClicked() { + _adapter = new ArrayAdapter<>(getActivity(), + R.layout.item_log, + R.id.item_log, + new ArrayList()); + + _resultList.setAdapter(_adapter); + _initializeCache(); + + Observable.concat(_getCachedData(), _getFreshData()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Subscriber() { + @Override + public void onCompleted() { + Timber.d("done loading all data"); + } + + @Override + public void onError(Throwable e) { + Timber.e(e, "arr something went wrong"); + } + + @Override + public void onNext(Contributor contributor) { + _contributionMap.put(contributor.login, contributor.contributions); + _adapter.clear(); + _adapter.addAll(getListStringFromMap()); + } + }); + } + + private List getListStringFromMap() { + List list = new ArrayList<>(); + + for (String username : _contributionMap.keySet()) { + String rowLog = String.format("%s [%d]", username, _contributionMap.get(username)); + list.add(rowLog); + } + + return list; } - return list; - } + private Observable _getCachedData() { + + List list = new ArrayList<>(); - private Observable _getCachedData() { + for (String username : _contributionMap.keySet()) { + Contributor c = new Contributor(); + c.login = username; + c.contributions = _contributionMap.get(username); + list.add(c); + } - List list = new ArrayList<>(); + return Observable.from(list); + } - for (String username : _contributionMap.keySet()) { - Contributor c = new Contributor(); - c.login = username; - c.contributions = _contributionMap.get(username); - list.add(c); + private Observable _getFreshData() { + return _createGithubApi().contributors("square", "retrofit") + .flatMap(new Func1, Observable>() { + @Override + public Observable call(List contributors) { + return Observable.from(contributors); + } + }); } - return Observable.from(list); - } - - private Observable _getFreshData() { - return _createGithubApi().contributors("square", "retrofit") - .flatMap(new Func1, Observable>() { - @Override - public Observable call(List contributors) { - return Observable.from(contributors); - } - }); - } - - private GithubApi _createGithubApi() { - - RestAdapter.Builder builder = new RestAdapter.Builder().setEndpoint("https://api.github.com/"); - //.setLogLevel(RestAdapter.LogLevel.FULL); - - final String githubToken = getResources().getString(R.string.github_oauth_token); - if (!isNullOrEmpty(githubToken)) { - builder.setRequestInterceptor(new RequestInterceptor() { - @Override - public void intercept(RequestFacade request) { - request.addHeader("Authorization", format("token %s", githubToken)); + private GithubApi _createGithubApi() { + + RestAdapter.Builder builder = new RestAdapter.Builder().setEndpoint( + "https://api.github.com/"); + //.setLogLevel(RestAdapter.LogLevel.FULL); + + final String githubToken = getResources().getString(R.string.github_oauth_token); + if (!isNullOrEmpty(githubToken)) { + builder.setRequestInterceptor(new RequestInterceptor() { + @Override + public void intercept(RequestFacade request) { + request.addHeader("Authorization", format("token %s", githubToken)); + } + }); } - }); + + return builder.build().create(GithubApi.class); } - return builder.build().create(GithubApi.class); - } - - private void _initializeCache() { - _contributionMap = new HashMap<>(); - _contributionMap.put("JakeWharton", 0l); - _contributionMap.put("pforhan", 0l); - _contributionMap.put("edenman", 0l); - _contributionMap.put("swankjesse", 0l); - _contributionMap.put("bruceLee", 0l); - } + private void _initializeCache() { + _contributionMap = new HashMap<>(); + _contributionMap.put("JakeWharton", 0l); + _contributionMap.put("pforhan", 0l); + _contributionMap.put("edenman", 0l); + _contributionMap.put("swankjesse", 0l); + _contributionMap.put("bruceLee", 0l); + } } diff --git a/app/src/main/java/com/morihacky/android/rxjava/RetrofitFragment.java b/app/src/main/java/com/morihacky/android/rxjava/RetrofitFragment.java index 8f37a25d..f282e1e1 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/RetrofitFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/RetrofitFragment.java @@ -33,158 +33,161 @@ import static java.lang.String.format; public class RetrofitFragment - extends Fragment { - - @InjectView(R.id.demo_retrofit_contributors_username) EditText _username; - @InjectView(R.id.demo_retrofit_contributors_repository) EditText _repo; - @InjectView(R.id.log_list) ListView _resultList; - - private GithubApi _api; - private ArrayAdapter _adapter; - - @Override - public void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - _api = _createGithubApi(); - } - - @Override - public View onCreateView(LayoutInflater inflater, - @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - - View layout = inflater.inflate(R.layout.fragment_retrofit, container, false); - ButterKnife.inject(this, layout); - - _adapter = new ArrayAdapter<>(getActivity(), - R.layout.item_log, - R.id.item_log, - new ArrayList()); - //_adapter.setNotifyOnChange(true); - _resultList.setAdapter(_adapter); - - return layout; - } - - @OnClick(R.id.btn_demo_retrofit_contributors) - public void onListContributorsClicked() { - _adapter.clear(); - - _api.contributors(_username.getText().toString(), _repo.getText().toString()) - .subscribeOn(Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer>() { - @Override - public void onCompleted() { - Timber.d("Retrofit call 1 completed"); - } - - @Override - public void onError(Throwable e) { - Timber.e(e, "woops we got an error while getting the list of contributors"); - } - - @Override - public void onNext(List contributors) { - for (Contributor c : contributors) { - _adapter.add(format("%s has made %d contributions to %s", - c.login, - c.contributions, - _repo.getText().toString())); - - Timber.d("%s has made %d contributions to %s", - c.login, - c.contributions, - _repo.getText().toString()); - } - } - }); - } - - @OnClick(R.id.btn_demo_retrofit_contributors_with_user_info) - public void onListContributorsWithFullUserInfoClicked() { - _adapter.clear(); - - _api.contributors(_username.getText().toString(), _repo.getText().toString()) - .flatMap(new Func1, Observable>() { - @Override - public Observable call(List contributors) { - return Observable.from(contributors); - } - }) - .flatMap(new Func1>>() { - @Override - public Observable> call(Contributor contributor) { - Observable _userObservable = _api.user(contributor.login) - .filter(new Func1() { + extends Fragment { + + @InjectView(R.id.demo_retrofit_contributors_username) EditText _username; + @InjectView(R.id.demo_retrofit_contributors_repository) EditText _repo; + @InjectView(R.id.log_list) ListView _resultList; + + private GithubApi _api; + private ArrayAdapter _adapter; + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + _api = _createGithubApi(); + } + + @Override + public View onCreateView(LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + + View layout = inflater.inflate(R.layout.fragment_retrofit, container, false); + ButterKnife.inject(this, layout); + + _adapter = new ArrayAdapter<>(getActivity(), + R.layout.item_log, + R.id.item_log, + new ArrayList()); + //_adapter.setNotifyOnChange(true); + _resultList.setAdapter(_adapter); + + return layout; + } + + @OnClick(R.id.btn_demo_retrofit_contributors) + public void onListContributorsClicked() { + _adapter.clear(); + + _api.contributors(_username.getText().toString(), _repo.getText().toString()) + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer>() { @Override - public Boolean call(User user) { - return !isNullOrEmpty(user.name) && !isNullOrEmpty(user.email); + public void onCompleted() { + Timber.d("Retrofit call 1 completed"); } - }); - return Observable.zip(_userObservable, - Observable.just(contributor), - new Func2>() { @Override - public Pair call(User user, Contributor contributor) { - return new Pair<>(user, contributor); + public void onError(Throwable e) { + Timber.e(e, "woops we got an error while getting the list of contributors"); } - }); - } - }) - .subscribeOn(Schedulers.newThread()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(new Observer>() { - @Override - public void onCompleted() { - Timber.d("Retrofit call 2 completed "); - } - - @Override - public void onError(Throwable e) { - Timber.e(e, "error while getting the list of contributors along with full names"); - } - - @Override - public void onNext(Pair pair) { - User user = pair.first; - Contributor contributor = pair.second; - - _adapter.add(format("%s(%s) has made %d contributions to %s", - user.name, - user.email, - contributor.contributions, - _repo.getText().toString())); - - _adapter.notifyDataSetChanged(); - - Timber.d("%s(%s) has made %d contributions to %s", - user.name, - user.email, - contributor.contributions, - _repo.getText().toString()); - } - }); - } - - // ----------------------------------------------------------------------------------- - - private GithubApi _createGithubApi() { - - RestAdapter.Builder builder = new RestAdapter.Builder().setEndpoint("https://api.github.com/"); - //.setLogLevel(RestAdapter.LogLevel.FULL); - - final String githubToken = getResources().getString(R.string.github_oauth_token); - if (!isNullOrEmpty(githubToken)) { - builder.setRequestInterceptor(new RequestInterceptor() { - @Override - public void intercept(RequestFacade request) { - request.addHeader("Authorization", format("token %s", githubToken)); - } - }); + + @Override + public void onNext(List contributors) { + for (Contributor c : contributors) { + _adapter.add(format("%s has made %d contributions to %s", + c.login, + c.contributions, + _repo.getText().toString())); + + Timber.d("%s has made %d contributions to %s", + c.login, + c.contributions, + _repo.getText().toString()); + } + } + }); + } + + @OnClick(R.id.btn_demo_retrofit_contributors_with_user_info) + public void onListContributorsWithFullUserInfoClicked() { + _adapter.clear(); + + _api.contributors(_username.getText().toString(), _repo.getText().toString()) + .flatMap(new Func1, Observable>() { + @Override + public Observable call(List contributors) { + return Observable.from(contributors); + } + }) + .flatMap(new Func1>>() { + @Override + public Observable> call(Contributor contributor) { + Observable _userObservable = _api.user(contributor.login) + .filter(new Func1() { + @Override + public Boolean call(User user) { + return !isNullOrEmpty(user.name) && !isNullOrEmpty(user.email); + } + }); + + return Observable.zip(_userObservable, + Observable.just(contributor), + new Func2>() { + @Override + public Pair call(User user, + Contributor contributor) { + return new Pair<>(user, contributor); + } + }); + } + }) + .subscribeOn(Schedulers.newThread()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer>() { + @Override + public void onCompleted() { + Timber.d("Retrofit call 2 completed "); + } + + @Override + public void onError(Throwable e) { + Timber.e(e, + "error while getting the list of contributors along with full names"); + } + + @Override + public void onNext(Pair pair) { + User user = pair.first; + Contributor contributor = pair.second; + + _adapter.add(format("%s(%s) has made %d contributions to %s", + user.name, + user.email, + contributor.contributions, + _repo.getText().toString())); + + _adapter.notifyDataSetChanged(); + + Timber.d("%s(%s) has made %d contributions to %s", + user.name, + user.email, + contributor.contributions, + _repo.getText().toString()); + } + }); } - return builder.build().create(GithubApi.class); - } + // ----------------------------------------------------------------------------------- + + private GithubApi _createGithubApi() { + + RestAdapter.Builder builder = new RestAdapter.Builder().setEndpoint( + "https://api.github.com/"); + //.setLogLevel(RestAdapter.LogLevel.FULL); + + final String githubToken = getResources().getString(R.string.github_oauth_token); + if (!isNullOrEmpty(githubToken)) { + builder.setRequestInterceptor(new RequestInterceptor() { + @Override + public void intercept(RequestFacade request) { + request.addHeader("Authorization", format("token %s", githubToken)); + } + }); + } + + return builder.build().create(GithubApi.class); + } } diff --git a/app/src/main/java/com/morihacky/android/rxjava/SubjectDebounceSearchEmitterFragment.java b/app/src/main/java/com/morihacky/android/rxjava/SubjectDebounceSearchEmitterFragment.java index 777cd668..01dcbde4 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/SubjectDebounceSearchEmitterFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/SubjectDebounceSearchEmitterFragment.java @@ -5,7 +5,6 @@ import android.os.Handler; import android.os.Looper; import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -46,133 +45,133 @@ * incapable of debounce : this is the primary reason, since creating new observable everytime in subscription disregards debounce on subsequent calls */ public class SubjectDebounceSearchEmitterFragment - extends BaseFragment { + extends BaseFragment { - @InjectView(R.id.list_threading_log) ListView _logsList; + @InjectView(R.id.list_threading_log) ListView _logsList; - private LogAdapter _adapter; - private List _logs; + private LogAdapter _adapter; + private List _logs; - private Subscription _subscription; - private PublishSubject> _searchTextEmitterSubject; + private Subscription _subscription; + private PublishSubject> _searchTextEmitterSubject; - @OnTextChanged(R.id.input_txt_subject_debounce) - public void onTextEntered(CharSequence charsEntered) { - Timber.d("---------- text entered %s", charsEntered); - _searchTextEmitterSubject.onNext(_getASearchObservableFor(charsEntered.toString())); - } + @OnTextChanged(R.id.input_txt_subject_debounce) + public void onTextEntered(CharSequence charsEntered) { + Timber.d("---------- text entered %s", charsEntered); + _searchTextEmitterSubject.onNext(_getASearchObservableFor(charsEntered.toString())); + } + + @Override + public void onDestroy() { + super.onDestroy(); + if (_subscription != null) { + _subscription.unsubscribe(); + } + } + + @Override + public View onCreateView(LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View layout = inflater.inflate(R.layout.fragment_subject_debounce, container, false); + ButterKnife.inject(this, layout); + return layout; + } + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + _setupLogger(); + + _searchTextEmitterSubject = PublishSubject.create(); + _subscription = AppObservable.bindFragment(SubjectDebounceSearchEmitterFragment.this, + Observable.switchOnNext(_searchTextEmitterSubject)) + .debounce(400, TimeUnit.MILLISECONDS, Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(_getSearchObserver()); + } + + // ----------------------------------------------------------------------------------- + // Main Rx entities + + private Observer _getSearchObserver() { + return new Observer() { + + @Override + public void onCompleted() { + Timber.d("--------- onComplete"); + } + + @Override + public void onError(Throwable e) { + Timber.e(e, "--------- Woops on error!"); + _log(String.format("Dang error. check your logs")); + } + + @Override + public void onNext(String searchText) { + _log(String.format("onNext You searched for %s", searchText)); + onCompleted(); + } + }; + } - @Override - public void onDestroy() { - super.onDestroy(); - if (_subscription != null) { - _subscription.unsubscribe(); + /** + * @param searchText search text entered onTextChange + * @return a new observable which searches for text searchText, explicitly say you want subscription to be done on a a non-UI thread, otherwise it'll default to the main thread. + */ + private Observable _getASearchObservableFor(final String searchText) { + return Observable.create(new Observable.OnSubscribe() { + + @Override + public void call(Subscriber subscriber) { + + Timber.d("----------- inside the search observable"); + subscriber.onNext(searchText); + // subscriber.onCompleted(); This seems to have no effect. + } + }).subscribeOn(Schedulers.io()); } - } - - @Override - public View onCreateView(LayoutInflater inflater, - @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View layout = inflater.inflate(R.layout.fragment_subject_debounce, container, false); - ButterKnife.inject(this, layout); - return layout; - } - - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - _setupLogger(); - - _searchTextEmitterSubject = PublishSubject.create(); - _subscription = AppObservable.bindFragment(SubjectDebounceSearchEmitterFragment.this, - Observable.switchOnNext(_searchTextEmitterSubject)) - .debounce(400, TimeUnit.MILLISECONDS, Schedulers.io()) - .observeOn(AndroidSchedulers.mainThread()) - .subscribe(_getSearchObserver()); - } - - // ----------------------------------------------------------------------------------- - // Main Rx entities - - private Observer _getSearchObserver() { - return new Observer() { - - @Override - public void onCompleted() { - Timber.d("--------- onComplete"); - } - - @Override - public void onError(Throwable e) { - Timber.e(e, "--------- Woops on error!"); - _log(String.format("Dang error. check your logs")); - } - - @Override - public void onNext(String searchText) { - _log(String.format("onNext You searched for %s", searchText)); - onCompleted(); - } - }; - } - - /** - * @param searchText search text entered onTextChange - * @return a new observable which searches for text searchText, explicitly say you want subscription to be done on a a non-UI thread, otherwise it'll default to the main thread. - */ - private Observable _getASearchObservableFor(final String searchText) { - return Observable.create(new Observable.OnSubscribe() { - - @Override - public void call(Subscriber subscriber) { - - Timber.d("----------- inside the search observable"); - subscriber.onNext(searchText); - // subscriber.onCompleted(); This seems to have no effect. - } - }).subscribeOn(Schedulers.io()); - } - - // ----------------------------------------------------------------------------------- - // Method that help wiring up the example (irrelevant to RxJava) - - private void _setupLogger() { - _logs = new ArrayList(); - _adapter = new LogAdapter(getActivity(), new ArrayList()); - _logsList.setAdapter(_adapter); - } - - private void _log(String logMsg) { - - if (_isCurrentlyOnMainThread()) { - _logs.add(0, logMsg + " (main thread) "); - _adapter.clear(); - _adapter.addAll(_logs); - } else { - _logs.add(0, logMsg + " (NOT main thread) "); - - // You can only do below stuff on main thread. - new Handler(Looper.getMainLooper()).post(new Runnable() { - - @Override - public void run() { - _adapter.clear(); - _adapter.addAll(_logs); + + // ----------------------------------------------------------------------------------- + // Method that help wiring up the example (irrelevant to RxJava) + + private void _setupLogger() { + _logs = new ArrayList(); + _adapter = new LogAdapter(getActivity(), new ArrayList()); + _logsList.setAdapter(_adapter); + } + + private void _log(String logMsg) { + + if (_isCurrentlyOnMainThread()) { + _logs.add(0, logMsg + " (main thread) "); + _adapter.clear(); + _adapter.addAll(_logs); + } else { + _logs.add(0, logMsg + " (NOT main thread) "); + + // You can only do below stuff on main thread. + new Handler(Looper.getMainLooper()).post(new Runnable() { + + @Override + public void run() { + _adapter.clear(); + _adapter.addAll(_logs); + } + }); } - }); } - } - private boolean _isCurrentlyOnMainThread() { - return Looper.myLooper() == Looper.getMainLooper(); - } + private boolean _isCurrentlyOnMainThread() { + return Looper.myLooper() == Looper.getMainLooper(); + } - private class LogAdapter - extends ArrayAdapter { + private class LogAdapter + extends ArrayAdapter { - public LogAdapter(Context context, List logs) { - super(context, R.layout.item_log, R.id.item_log, logs); + public LogAdapter(Context context, List logs) { + super(context, R.layout.item_log, R.id.item_log, logs); + } } - } } \ No newline at end of file diff --git a/app/src/main/java/com/morihacky/android/rxjava/TimingDemoFragment.java b/app/src/main/java/com/morihacky/android/rxjava/TimingDemoFragment.java index 8239c4b0..d070e75f 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/TimingDemoFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/TimingDemoFragment.java @@ -2,7 +2,6 @@ import android.os.Bundle; import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -10,7 +9,6 @@ import butterknife.OnClick; import com.morihacky.android.rxjava.app.R; import java.util.concurrent.TimeUnit; -import rx.Notification; import rx.Observable; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Action0; @@ -19,56 +17,54 @@ import timber.log.Timber; public class TimingDemoFragment - extends BaseFragment { + extends BaseFragment { - @Override - public View onCreateView(LayoutInflater inflater, - @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View layout = inflater.inflate(R.layout.fragment_timing_demo, container, false); - ButterKnife.inject(this, layout); - return layout; - } + @Override + public View onCreateView(LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View layout = inflater.inflate(R.layout.fragment_timing_demo, container, false); + ButterKnife.inject(this, layout); + return layout; + } - @OnClick(R.id.btn_start_demo) - public void onStartButtonClicked() { - Timber.d("-------------------- Shutter clicked"); + @OnClick(R.id.btn_start_demo) + public void onStartButtonClicked() { + Timber.d("-------------------- Shutter clicked"); - Observable.just(1) - .flatMap(new Func1>() { - @Override - public Observable call(Integer integer) { - return _getCountdownFlashObservable(); - } - }) - .repeat(3) - .subscribe(); - } + Observable.just(1).flatMap(new Func1>() { + @Override + public Observable call(Integer integer) { + return _getCountdownFlashObservable(); + } + }).repeat(3).subscribe(); + } - private Observable _getCountdownFlashObservable() { - return Observable.interval(1, TimeUnit.SECONDS) - .map(new Func1() { - @Override - public Object call(Long aLong) { - Timber.d("-------------------- Number to show %s", String.valueOf(3l - aLong)); - return 3l - aLong; - } - }) - .take(3) - .observeOn(AndroidSchedulers.mainThread()) - .doOnNext(new Action1() { - @Override - public void call(Object o) { - Timber.d("-------------------- %s", String.valueOf(o)); - } - }) - .delay(1, TimeUnit.SECONDS) - .observeOn(AndroidSchedulers.mainThread()) - .doOnCompleted(new Action0() { - @Override - public void call() { - Timber.d("-------------------- FLASH!"); - } - }); - } + private Observable _getCountdownFlashObservable() { + return Observable.interval(1, TimeUnit.SECONDS) + .map(new Func1() { + @Override + public Object call(Long aLong) { + Timber.d("-------------------- Number to show %s", + String.valueOf(3l - aLong)); + return 3l - aLong; + } + }) + .take(3) + .observeOn(AndroidSchedulers.mainThread()) + .doOnNext(new Action1() { + @Override + public void call(Object o) { + Timber.d("-------------------- %s", String.valueOf(o)); + } + }) + .delay(1, TimeUnit.SECONDS) + .observeOn(AndroidSchedulers.mainThread()) + .doOnCompleted(new Action0() { + @Override + public void call() { + Timber.d("-------------------- FLASH!"); + } + }); + } } diff --git a/app/src/main/java/com/morihacky/android/rxjava/retrofit/Contributor.java b/app/src/main/java/com/morihacky/android/rxjava/retrofit/Contributor.java index 5bd61c7a..ad7760fc 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/retrofit/Contributor.java +++ b/app/src/main/java/com/morihacky/android/rxjava/retrofit/Contributor.java @@ -1,6 +1,6 @@ package com.morihacky.android.rxjava.retrofit; public class Contributor { - public String login; - public long contributions; + public String login; + public long contributions; } diff --git a/app/src/main/java/com/morihacky/android/rxjava/retrofit/GithubApi.java b/app/src/main/java/com/morihacky/android/rxjava/retrofit/GithubApi.java index d25a883d..9b606382 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/retrofit/GithubApi.java +++ b/app/src/main/java/com/morihacky/android/rxjava/retrofit/GithubApi.java @@ -7,16 +7,16 @@ public interface GithubApi { - /** - * See https://developer.github.com/v3/repos/#list-contributors - */ - @GET("/repos/{owner}/{repo}/contributors") - Observable> contributors(@Path("owner") String owner, - @Path("repo") String repo); + /** + * See https://developer.github.com/v3/repos/#list-contributors + */ + @GET("/repos/{owner}/{repo}/contributors") + Observable> contributors(@Path("owner") String owner, + @Path("repo") String repo); - /** - * See https://developer.github.com/v3/users/ - */ - @GET("/users/{user}") - Observable user(@Path("user") String user); + /** + * See https://developer.github.com/v3/users/ + */ + @GET("/users/{user}") + Observable user(@Path("user") String user); } \ No newline at end of file diff --git a/app/src/main/java/com/morihacky/android/rxjava/retrofit/User.java b/app/src/main/java/com/morihacky/android/rxjava/retrofit/User.java index 90f7aa3d..32fa1043 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/retrofit/User.java +++ b/app/src/main/java/com/morihacky/android/rxjava/retrofit/User.java @@ -1,6 +1,6 @@ package com.morihacky.android.rxjava.retrofit; public class User { - public String name; - public String email; + public String name; + public String email; } diff --git a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBus.java b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBus.java index afaa595c..83f61f46 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBus.java +++ b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBus.java @@ -10,21 +10,21 @@ */ public class RxBus { - //private final PublishSubject _bus = PublishSubject.create(); + //private final PublishSubject _bus = PublishSubject.create(); - // If multiple threads are going to emit events to this - // then it must be made thread-safe like this instead - private final Subject _bus = new SerializedSubject<>(PublishSubject.create()); + // If multiple threads are going to emit events to this + // then it must be made thread-safe like this instead + private final Subject _bus = new SerializedSubject<>(PublishSubject.create()); - public void send(Object o) { - _bus.onNext(o); - } + public void send(Object o) { + _bus.onNext(o); + } - public Observable toObserverable() { - return _bus; - } + public Observable toObserverable() { + return _bus; + } - public boolean hasObservers() { - return _bus.hasObservers(); - } + public boolean hasObservers() { + return _bus.hasObservers(); + } } \ No newline at end of file diff --git a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemoFragment.java b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemoFragment.java index d8fd2b52..d1512d29 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemoFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemoFragment.java @@ -2,7 +2,6 @@ import android.os.Bundle; import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -11,29 +10,30 @@ import com.morihacky.android.rxjava.app.R; public class RxBusDemoFragment - extends BaseFragment { + extends BaseFragment { - @Override - public View onCreateView(LayoutInflater inflater, - @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View layout = inflater.inflate(R.layout.fragment_rxbus_demo, container, false); - ButterKnife.inject(this, layout); - return layout; - } + @Override + public View onCreateView(LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View layout = inflater.inflate(R.layout.fragment_rxbus_demo, container, false); + ButterKnife.inject(this, layout); + return layout; + } - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); - getActivity().getSupportFragmentManager() - .beginTransaction() - .replace(R.id.demo_rxbus_frag_1, new RxBusDemo_TopFragment()) - .replace(R.id.demo_rxbus_frag_2, new RxBusDemo_Bottom3Fragment()) - //.replace(R.id.demo_rxbus_frag_2, new RxBusDemo_Bottom2Fragment()) - //.replace(R.id.demo_rxbus_frag_2, new RxBusDemo_Bottom1Fragment()) - .commit(); - } + getActivity().getSupportFragmentManager() + .beginTransaction() + .replace(R.id.demo_rxbus_frag_1, + new RxBusDemo_TopFragment()).replace(R.id.demo_rxbus_frag_2, + new RxBusDemo_Bottom3Fragment()) + //.replace(R.id.demo_rxbus_frag_2, new RxBusDemo_Bottom2Fragment()) + //.replace(R.id.demo_rxbus_frag_2, new RxBusDemo_Bottom1Fragment()) + .commit(); + } - public static class TapEvent {} + public static class TapEvent {} } \ No newline at end of file diff --git a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom1Fragment.java b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom1Fragment.java index 8e843c68..365786ce 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom1Fragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom1Fragment.java @@ -2,7 +2,6 @@ import android.os.Bundle; import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; import android.support.v4.view.ViewCompat; import android.view.LayoutInflater; import android.view.View; @@ -19,54 +18,53 @@ import static rx.android.app.AppObservable.bindFragment; public class RxBusDemo_Bottom1Fragment - extends BaseFragment { + extends BaseFragment { - private RxBus _rxBus; - private CompositeSubscription _subscriptions; + @InjectView(R.id.demo_rxbus_tap_txt) TextView _tapEventTxtShow; + private RxBus _rxBus; + private CompositeSubscription _subscriptions; - @InjectView(R.id.demo_rxbus_tap_txt) TextView _tapEventTxtShow; + @Override + public View onCreateView(LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View layout = inflater.inflate(R.layout.fragment_rxbus_bottom, container, false); + ButterKnife.inject(this, layout); + return layout; + } - @Override - public View onCreateView(LayoutInflater inflater, - @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View layout = inflater.inflate(R.layout.fragment_rxbus_bottom, container, false); - ButterKnife.inject(this, layout); - return layout; - } + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + _rxBus = ((MainActivity) getActivity()).getRxBusSingleton(); + } - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - _rxBus = ((MainActivity) getActivity()).getRxBusSingleton(); - } + @Override + public void onStart() { + super.onStart(); + _subscriptions = new CompositeSubscription(); - @Override - public void onStart() { - super.onStart(); - _subscriptions = new CompositeSubscription(); + _subscriptions// + .add(bindFragment(this, _rxBus.toObserverable())// + .subscribe(new Action1() { + @Override + public void call(Object event) { + if (event instanceof RxBusDemoFragment.TapEvent) { + _showTapText(); + } + } + })); + } - _subscriptions// - .add(bindFragment(this, _rxBus.toObserverable())// - .subscribe(new Action1() { - @Override - public void call(Object event) { - if (event instanceof RxBusDemoFragment.TapEvent) { - _showTapText(); - } - } - })); - } + @Override + public void onStop() { + super.onStop(); + _subscriptions.unsubscribe(); + } - private void _showTapText() { - _tapEventTxtShow.setVisibility(View.VISIBLE); - _tapEventTxtShow.setAlpha(1f); - ViewCompat.animate(_tapEventTxtShow).alphaBy(-1f).setDuration(400); - } - - @Override - public void onStop() { - super.onStop(); - _subscriptions.unsubscribe(); - } + private void _showTapText() { + _tapEventTxtShow.setVisibility(View.VISIBLE); + _tapEventTxtShow.setAlpha(1f); + ViewCompat.animate(_tapEventTxtShow).alphaBy(-1f).setDuration(400); + } } diff --git a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom2Fragment.java b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom2Fragment.java index 375711c8..4d7801b5 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom2Fragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom2Fragment.java @@ -2,7 +2,6 @@ import android.os.Bundle; import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; import android.support.v4.view.ViewCompat; import android.view.LayoutInflater; import android.view.View; @@ -23,85 +22,84 @@ import static rx.android.app.AppObservable.bindFragment; public class RxBusDemo_Bottom2Fragment - extends BaseFragment { - - private RxBus _rxBus; - private CompositeSubscription _subscriptions; - - @InjectView(R.id.demo_rxbus_tap_txt) TextView _tapEventTxtShow; - @InjectView(R.id.demo_rxbus_tap_count) TextView _tapEventCountShow; - - @Override - public View onCreateView(LayoutInflater inflater, - @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View layout = inflater.inflate(R.layout.fragment_rxbus_bottom, container, false); - ButterKnife.inject(this, layout); - return layout; - } - - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - _rxBus = ((MainActivity) getActivity()).getRxBusSingleton(); - } - - @Override - public void onStart() { - super.onStart(); - _subscriptions = new CompositeSubscription(); - - Observable tapEventEmitter = _rxBus.toObserverable().share(); - - _subscriptions// - .add(bindFragment(this, tapEventEmitter)// - .subscribe(new Action1() { - @Override - public void call(Object event) { - if (event instanceof RxBusDemoFragment.TapEvent) { - _showTapText(); - } - } - })); - - Observable debouncedEmitter = tapEventEmitter.debounce(1, TimeUnit.SECONDS); - Observable> debouncedBufferEmitter = tapEventEmitter.buffer(debouncedEmitter); - - _subscriptions// - .add(debouncedBufferEmitter// - .observeOn(AndroidSchedulers.mainThread())// - .subscribe(new Action1>() { - @Override - public void call(List taps) { - _showTapCount(taps.size()); - } - })); - } - - @Override - public void onStop() { - super.onStop(); - _subscriptions.unsubscribe(); - } - - // ----------------------------------------------------------------------------------- - // Helper to show the text via an animation - - private void _showTapText() { - _tapEventTxtShow.setVisibility(View.VISIBLE); - _tapEventTxtShow.setAlpha(1f); - ViewCompat.animate(_tapEventTxtShow).alphaBy(-1f).setDuration(400); - } - - private void _showTapCount(int size) { - _tapEventCountShow.setText(String.valueOf(size)); - _tapEventCountShow.setVisibility(View.VISIBLE); - _tapEventCountShow.setScaleX(1f); - _tapEventCountShow.setScaleY(1f); - ViewCompat.animate(_tapEventCountShow) - .scaleXBy(-1f) - .scaleYBy(-1f) - .setDuration(800) - .setStartDelay(100); - } + extends BaseFragment { + + @InjectView(R.id.demo_rxbus_tap_txt) TextView _tapEventTxtShow; + @InjectView(R.id.demo_rxbus_tap_count) TextView _tapEventCountShow; + private RxBus _rxBus; + private CompositeSubscription _subscriptions; + + @Override + public View onCreateView(LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View layout = inflater.inflate(R.layout.fragment_rxbus_bottom, container, false); + ButterKnife.inject(this, layout); + return layout; + } + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + _rxBus = ((MainActivity) getActivity()).getRxBusSingleton(); + } + + @Override + public void onStart() { + super.onStart(); + _subscriptions = new CompositeSubscription(); + + Observable tapEventEmitter = _rxBus.toObserverable().share(); + + _subscriptions// + .add(bindFragment(this, tapEventEmitter)// + .subscribe(new Action1() { + @Override + public void call(Object event) { + if (event instanceof RxBusDemoFragment.TapEvent) { + _showTapText(); + } + } + })); + + Observable debouncedEmitter = tapEventEmitter.debounce(1, TimeUnit.SECONDS); + Observable> debouncedBufferEmitter = tapEventEmitter.buffer(debouncedEmitter); + + _subscriptions// + .add(debouncedBufferEmitter// + .observeOn(AndroidSchedulers.mainThread())// + .subscribe(new Action1>() { + @Override + public void call(List taps) { + _showTapCount(taps.size()); + } + })); + } + + @Override + public void onStop() { + super.onStop(); + _subscriptions.unsubscribe(); + } + + // ----------------------------------------------------------------------------------- + // Helper to show the text via an animation + + private void _showTapText() { + _tapEventTxtShow.setVisibility(View.VISIBLE); + _tapEventTxtShow.setAlpha(1f); + ViewCompat.animate(_tapEventTxtShow).alphaBy(-1f).setDuration(400); + } + + private void _showTapCount(int size) { + _tapEventCountShow.setText(String.valueOf(size)); + _tapEventCountShow.setVisibility(View.VISIBLE); + _tapEventCountShow.setScaleX(1f); + _tapEventCountShow.setScaleY(1f); + ViewCompat.animate(_tapEventCountShow) + .scaleXBy(-1f) + .scaleYBy(-1f) + .setDuration(800) + .setStartDelay(100); + } } diff --git a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom3Fragment.java b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom3Fragment.java index ac3821f2..703dd370 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom3Fragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom3Fragment.java @@ -2,7 +2,6 @@ import android.os.Bundle; import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; import android.support.v4.view.ViewCompat; import android.view.LayoutInflater; import android.view.View; @@ -25,88 +24,87 @@ import static rx.android.app.AppObservable.bindFragment; public class RxBusDemo_Bottom3Fragment - extends BaseFragment { - - private RxBus _rxBus; - private CompositeSubscription _subscriptions; - - @InjectView(R.id.demo_rxbus_tap_txt) TextView _tapEventTxtShow; - @InjectView(R.id.demo_rxbus_tap_count) TextView _tapEventCountShow; - - @Override - public View onCreateView(LayoutInflater inflater, - @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View layout = inflater.inflate(R.layout.fragment_rxbus_bottom, container, false); - ButterKnife.inject(this, layout); - return layout; - } - - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - _rxBus = ((MainActivity) getActivity()).getRxBusSingleton(); - } - - @Override - public void onStart() { - super.onStart(); - _subscriptions = new CompositeSubscription(); - - ConnectableObservable tapEventEmitter = _rxBus.toObserverable().publish(); - - _subscriptions// - .add(bindFragment(this, tapEventEmitter)// - .subscribe(new Action1() { - @Override - public void call(Object event) { - if (event instanceof RxBusDemoFragment.TapEvent) { - _showTapText(); - } - } - })); - - _subscriptions// - .add(tapEventEmitter.publish(new Func1, Observable>>() { - @Override - public Observable> call(Observable stream) { - return stream.buffer(stream.debounce(1, TimeUnit.SECONDS)); - } - }).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1>() { - @Override - public void call(List taps) { - _showTapCount(taps.size()); - } - })); - - _subscriptions.add(tapEventEmitter.connect()); - - } - - @Override - public void onStop() { - super.onStop(); - _subscriptions.clear(); - } - - // ----------------------------------------------------------------------------------- - // Helper to show the text via an animation - - private void _showTapText() { - _tapEventTxtShow.setVisibility(View.VISIBLE); - _tapEventTxtShow.setAlpha(1f); - ViewCompat.animate(_tapEventTxtShow).alphaBy(-1f).setDuration(400); - } - - private void _showTapCount(int size) { - _tapEventCountShow.setText(String.valueOf(size)); - _tapEventCountShow.setVisibility(View.VISIBLE); - _tapEventCountShow.setScaleX(1f); - _tapEventCountShow.setScaleY(1f); - ViewCompat.animate(_tapEventCountShow) - .scaleXBy(-1f) - .scaleYBy(-1f) - .setDuration(800) - .setStartDelay(100); - } + extends BaseFragment { + + @InjectView(R.id.demo_rxbus_tap_txt) TextView _tapEventTxtShow; + @InjectView(R.id.demo_rxbus_tap_count) TextView _tapEventCountShow; + private RxBus _rxBus; + private CompositeSubscription _subscriptions; + + @Override + public View onCreateView(LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View layout = inflater.inflate(R.layout.fragment_rxbus_bottom, container, false); + ButterKnife.inject(this, layout); + return layout; + } + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + _rxBus = ((MainActivity) getActivity()).getRxBusSingleton(); + } + + @Override + public void onStart() { + super.onStart(); + _subscriptions = new CompositeSubscription(); + + ConnectableObservable tapEventEmitter = _rxBus.toObserverable().publish(); + + _subscriptions// + .add(bindFragment(this, tapEventEmitter)// + .subscribe(new Action1() { + @Override + public void call(Object event) { + if (event instanceof RxBusDemoFragment.TapEvent) { + _showTapText(); + } + } + })); + + _subscriptions// + .add(tapEventEmitter.publish(new Func1, Observable>>() { + @Override + public Observable> call(Observable stream) { + return stream.buffer(stream.debounce(1, TimeUnit.SECONDS)); + } + }).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1>() { + @Override + public void call(List taps) { + _showTapCount(taps.size()); + } + })); + + _subscriptions.add(tapEventEmitter.connect()); + + } + + @Override + public void onStop() { + super.onStop(); + _subscriptions.clear(); + } + + // ----------------------------------------------------------------------------------- + // Helper to show the text via an animation + + private void _showTapText() { + _tapEventTxtShow.setVisibility(View.VISIBLE); + _tapEventTxtShow.setAlpha(1f); + ViewCompat.animate(_tapEventTxtShow).alphaBy(-1f).setDuration(400); + } + + private void _showTapCount(int size) { + _tapEventCountShow.setText(String.valueOf(size)); + _tapEventCountShow.setVisibility(View.VISIBLE); + _tapEventCountShow.setScaleX(1f); + _tapEventCountShow.setScaleY(1f); + ViewCompat.animate(_tapEventCountShow) + .scaleXBy(-1f) + .scaleYBy(-1f) + .setDuration(800) + .setStartDelay(100); + } } diff --git a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_TopFragment.java b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_TopFragment.java index b7c8eaf9..e846446e 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_TopFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_TopFragment.java @@ -2,7 +2,6 @@ import android.os.Bundle; import android.support.annotation.Nullable; -import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -13,29 +12,29 @@ import com.morihacky.android.rxjava.app.R; public class RxBusDemo_TopFragment - extends BaseFragment { + extends BaseFragment { - private RxBus _rxBus; + private RxBus _rxBus; - @Override - public View onCreateView(LayoutInflater inflater, - @Nullable ViewGroup container, - @Nullable Bundle savedInstanceState) { - View layout = inflater.inflate(R.layout.fragment_rxbus_top, container, false); - ButterKnife.inject(this, layout); - return layout; - } + @Override + public View onCreateView(LayoutInflater inflater, + @Nullable ViewGroup container, + @Nullable Bundle savedInstanceState) { + View layout = inflater.inflate(R.layout.fragment_rxbus_top, container, false); + ButterKnife.inject(this, layout); + return layout; + } - @Override - public void onActivityCreated(@Nullable Bundle savedInstanceState) { - super.onActivityCreated(savedInstanceState); - _rxBus = ((MainActivity) getActivity()).getRxBusSingleton(); - } + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + _rxBus = ((MainActivity) getActivity()).getRxBusSingleton(); + } - @OnClick(R.id.btn_demo_rxbus_tap) - public void onTapButtonClicked() { - if (_rxBus.hasObservers()) { - _rxBus.send(new RxBusDemoFragment.TapEvent()); + @OnClick(R.id.btn_demo_rxbus_tap) + public void onTapButtonClicked() { + if (_rxBus.hasObservers()) { + _rxBus.send(new RxBusDemoFragment.TapEvent()); + } } - } } From 1453c4ea50b02455112c76516f1b36ff8a2d1d30 Mon Sep 17 00:00:00 2001 From: Kaushik Gopal Date: Tue, 12 May 2015 11:34:43 -0700 Subject: [PATCH 005/206] fix: changed package name to remove app --- .../java/com/morihacky/android/rxjava/BufferDemoFragment.java | 2 +- .../android/rxjava/ConcurrencyWithSchedulersDemoFragment.java | 2 +- .../java/com/morihacky/android/rxjava/DemoTimeoutFragment.java | 2 +- .../morihacky/android/rxjava/DoubleBindingTextViewFragment.java | 2 +- .../android/rxjava/FormValidationCombineLatestFragment.java | 2 +- .../main/java/com/morihacky/android/rxjava/MainActivity.java | 2 +- .../main/java/com/morihacky/android/rxjava/MainFragment.java | 2 +- .../main/java/com/morihacky/android/rxjava/PollingFragment.java | 2 +- .../com/morihacky/android/rxjava/PseudoCacheConcatFragment.java | 2 +- .../java/com/morihacky/android/rxjava/RetrofitFragment.java | 2 +- .../android/rxjava/SubjectDebounceSearchEmitterFragment.java | 2 +- .../java/com/morihacky/android/rxjava/TimingDemoFragment.java | 1 - .../com/morihacky/android/rxjava/rxbus/RxBusDemoFragment.java | 2 +- .../android/rxjava/rxbus/RxBusDemo_Bottom1Fragment.java | 2 +- .../android/rxjava/rxbus/RxBusDemo_Bottom2Fragment.java | 2 +- .../android/rxjava/rxbus/RxBusDemo_Bottom3Fragment.java | 2 +- .../morihacky/android/rxjava/rxbus/RxBusDemo_TopFragment.java | 2 +- 17 files changed, 16 insertions(+), 17 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 920896dd..16b177e7 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/BufferDemoFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/BufferDemoFragment.java @@ -13,7 +13,7 @@ import android.widget.ListView; import butterknife.ButterKnife; import butterknife.InjectView; -import com.morihacky.android.rxjava.app.R; +import com.morihacky.android.rxjava.R; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; diff --git a/app/src/main/java/com/morihacky/android/rxjava/ConcurrencyWithSchedulersDemoFragment.java b/app/src/main/java/com/morihacky/android/rxjava/ConcurrencyWithSchedulersDemoFragment.java index 5e801079..15f33371 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/ConcurrencyWithSchedulersDemoFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/ConcurrencyWithSchedulersDemoFragment.java @@ -14,7 +14,7 @@ import butterknife.ButterKnife; import butterknife.InjectView; import butterknife.OnClick; -import com.morihacky.android.rxjava.app.R; +import com.morihacky.android.rxjava.R; import java.util.ArrayList; import java.util.List; import rx.Observable; diff --git a/app/src/main/java/com/morihacky/android/rxjava/DemoTimeoutFragment.java b/app/src/main/java/com/morihacky/android/rxjava/DemoTimeoutFragment.java index ead3e0f4..d5067356 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/DemoTimeoutFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/DemoTimeoutFragment.java @@ -13,7 +13,7 @@ import butterknife.ButterKnife; import butterknife.InjectView; import butterknife.OnClick; -import com.morihacky.android.rxjava.app.R; +import com.morihacky.android.rxjava.R; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; diff --git a/app/src/main/java/com/morihacky/android/rxjava/DoubleBindingTextViewFragment.java b/app/src/main/java/com/morihacky/android/rxjava/DoubleBindingTextViewFragment.java index cd711470..7a7ce56e 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/DoubleBindingTextViewFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/DoubleBindingTextViewFragment.java @@ -11,7 +11,7 @@ import butterknife.InjectView; import butterknife.OnTextChanged; import com.google.common.base.Strings; -import com.morihacky.android.rxjava.app.R; +import com.morihacky.android.rxjava.R; import rx.Subscription; import rx.functions.Action1; import rx.subjects.PublishSubject; diff --git a/app/src/main/java/com/morihacky/android/rxjava/FormValidationCombineLatestFragment.java b/app/src/main/java/com/morihacky/android/rxjava/FormValidationCombineLatestFragment.java index 0397dc50..93bc7183 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/FormValidationCombineLatestFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/FormValidationCombineLatestFragment.java @@ -9,7 +9,7 @@ import android.widget.TextView; import butterknife.ButterKnife; import butterknife.InjectView; -import com.morihacky.android.rxjava.app.R; +import com.morihacky.android.rxjava.R; import rx.Observable; import rx.Observer; import rx.Subscription; diff --git a/app/src/main/java/com/morihacky/android/rxjava/MainActivity.java b/app/src/main/java/com/morihacky/android/rxjava/MainActivity.java index 8ee623fe..612a9444 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/MainActivity.java +++ b/app/src/main/java/com/morihacky/android/rxjava/MainActivity.java @@ -2,7 +2,7 @@ import android.os.Bundle; import android.support.v4.app.FragmentActivity; -import com.morihacky.android.rxjava.app.R; +import com.morihacky.android.rxjava.R; import com.morihacky.android.rxjava.rxbus.RxBus; import timber.log.Timber; diff --git a/app/src/main/java/com/morihacky/android/rxjava/MainFragment.java b/app/src/main/java/com/morihacky/android/rxjava/MainFragment.java index ba0cdd9a..962b2699 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/MainFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/MainFragment.java @@ -7,7 +7,7 @@ import android.view.ViewGroup; import butterknife.ButterKnife; import butterknife.OnClick; -import com.morihacky.android.rxjava.app.R; +import com.morihacky.android.rxjava.R; import com.morihacky.android.rxjava.rxbus.RxBusDemoFragment; public class MainFragment diff --git a/app/src/main/java/com/morihacky/android/rxjava/PollingFragment.java b/app/src/main/java/com/morihacky/android/rxjava/PollingFragment.java index 2dd7f7ae..6f163e26 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/PollingFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/PollingFragment.java @@ -13,7 +13,7 @@ import butterknife.ButterKnife; import butterknife.InjectView; import butterknife.OnClick; -import com.morihacky.android.rxjava.app.R; +import com.morihacky.android.rxjava.R; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; diff --git a/app/src/main/java/com/morihacky/android/rxjava/PseudoCacheConcatFragment.java b/app/src/main/java/com/morihacky/android/rxjava/PseudoCacheConcatFragment.java index 07e702d2..623d9cdd 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/PseudoCacheConcatFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/PseudoCacheConcatFragment.java @@ -10,7 +10,7 @@ import butterknife.ButterKnife; import butterknife.InjectView; import butterknife.OnClick; -import com.morihacky.android.rxjava.app.R; +import com.morihacky.android.rxjava.R; import com.morihacky.android.rxjava.retrofit.Contributor; import com.morihacky.android.rxjava.retrofit.GithubApi; import java.util.ArrayList; diff --git a/app/src/main/java/com/morihacky/android/rxjava/RetrofitFragment.java b/app/src/main/java/com/morihacky/android/rxjava/RetrofitFragment.java index f282e1e1..04195e3b 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/RetrofitFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/RetrofitFragment.java @@ -13,7 +13,7 @@ import butterknife.ButterKnife; import butterknife.InjectView; import butterknife.OnClick; -import com.morihacky.android.rxjava.app.R; +import com.morihacky.android.rxjava.R; import com.morihacky.android.rxjava.retrofit.Contributor; import com.morihacky.android.rxjava.retrofit.GithubApi; import com.morihacky.android.rxjava.retrofit.User; diff --git a/app/src/main/java/com/morihacky/android/rxjava/SubjectDebounceSearchEmitterFragment.java b/app/src/main/java/com/morihacky/android/rxjava/SubjectDebounceSearchEmitterFragment.java index 01dcbde4..6e147698 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/SubjectDebounceSearchEmitterFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/SubjectDebounceSearchEmitterFragment.java @@ -13,7 +13,7 @@ import butterknife.ButterKnife; import butterknife.InjectView; import butterknife.OnTextChanged; -import com.morihacky.android.rxjava.app.R; +import com.morihacky.android.rxjava.R; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; diff --git a/app/src/main/java/com/morihacky/android/rxjava/TimingDemoFragment.java b/app/src/main/java/com/morihacky/android/rxjava/TimingDemoFragment.java index d070e75f..3fac0ad8 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/TimingDemoFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/TimingDemoFragment.java @@ -7,7 +7,6 @@ import android.view.ViewGroup; import butterknife.ButterKnife; import butterknife.OnClick; -import com.morihacky.android.rxjava.app.R; import java.util.concurrent.TimeUnit; import rx.Observable; import rx.android.schedulers.AndroidSchedulers; diff --git a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemoFragment.java b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemoFragment.java index d1512d29..058fc66a 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemoFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemoFragment.java @@ -7,7 +7,7 @@ import android.view.ViewGroup; import butterknife.ButterKnife; import com.morihacky.android.rxjava.BaseFragment; -import com.morihacky.android.rxjava.app.R; +import com.morihacky.android.rxjava.R; public class RxBusDemoFragment extends BaseFragment { diff --git a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom1Fragment.java b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom1Fragment.java index 365786ce..332ad4dd 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom1Fragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom1Fragment.java @@ -11,7 +11,7 @@ import butterknife.InjectView; import com.morihacky.android.rxjava.BaseFragment; import com.morihacky.android.rxjava.MainActivity; -import com.morihacky.android.rxjava.app.R; +import com.morihacky.android.rxjava.R; import rx.functions.Action1; import rx.subscriptions.CompositeSubscription; diff --git a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom2Fragment.java b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom2Fragment.java index 4d7801b5..9bc91364 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom2Fragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom2Fragment.java @@ -11,7 +11,7 @@ import butterknife.InjectView; import com.morihacky.android.rxjava.BaseFragment; import com.morihacky.android.rxjava.MainActivity; -import com.morihacky.android.rxjava.app.R; +import com.morihacky.android.rxjava.R; import java.util.List; import java.util.concurrent.TimeUnit; import rx.Observable; diff --git a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom3Fragment.java b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom3Fragment.java index 703dd370..e3e144a8 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom3Fragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_Bottom3Fragment.java @@ -11,7 +11,7 @@ import butterknife.InjectView; import com.morihacky.android.rxjava.BaseFragment; import com.morihacky.android.rxjava.MainActivity; -import com.morihacky.android.rxjava.app.R; +import com.morihacky.android.rxjava.R; import java.util.List; import java.util.concurrent.TimeUnit; import rx.Observable; diff --git a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_TopFragment.java b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_TopFragment.java index e846446e..8686a161 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_TopFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/rxbus/RxBusDemo_TopFragment.java @@ -9,7 +9,7 @@ import butterknife.OnClick; import com.morihacky.android.rxjava.BaseFragment; import com.morihacky.android.rxjava.MainActivity; -import com.morihacky.android.rxjava.app.R; +import com.morihacky.android.rxjava.R; public class RxBusDemo_TopFragment extends BaseFragment { From 141ae1740a4cdecb10cc193361032d0c32c57dca Mon Sep 17 00:00:00 2001 From: Kaushik Gopal Date: Tue, 12 May 2015 11:38:45 -0700 Subject: [PATCH 006/206] refactor: mass reformat exodus as per new code style --- app/src/main/res/layout/activity_main.xml | 3 +- app/src/main/res/layout/fragment_buffer.xml | 12 ++++--- .../fragment_concurrency_schedulers.xml | 18 ++++++---- .../fragment_double_binding_textview.xml | 23 +++++++----- app/src/main/res/layout/fragment_main.xml | 33 +++++++++++------ app/src/main/res/layout/fragment_polling.xml | 18 ++++++---- app/src/main/res/layout/fragment_retrofit.xml | 35 ++++++++++++------- .../main/res/layout/fragment_rxbus_bottom.xml | 9 +++-- .../main/res/layout/fragment_rxbus_demo.xml | 9 +++-- .../main/res/layout/fragment_rxbus_frag3.xml | 6 ++-- .../main/res/layout/fragment_rxbus_top.xml | 9 +++-- .../res/layout/fragment_subject_debounce.xml | 12 ++++--- .../res/layout/fragment_subject_timeout.xml | 18 ++++++---- .../main/res/layout/fragment_timing_demo.xml | 6 ++-- app/src/main/res/layout/item_log.xml | 3 +- 15 files changed, 142 insertions(+), 72 deletions(-) diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 438a8d65..bcdf97bb 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -2,4 +2,5 @@ android:id="@+id/activity_main" android:layout_height="match_parent" android:layout_width="match_parent" - xmlns:android="http://schemas.android.com/apk/res/android" /> + xmlns:android="http://schemas.android.com/apk/res/android" + /> diff --git a/app/src/main/res/layout/fragment_buffer.xml b/app/src/main/res/layout/fragment_buffer.xml index 7839dacd..f2bbaadf 100644 --- a/app/src/main/res/layout/fragment_buffer.xml +++ b/app/src/main/res/layout/fragment_buffer.xml @@ -4,14 +4,16 @@ android:orientation="vertical" android:layout_height="match_parent" android:layout_width="match_parent" - xmlns:android="http://schemas.android.com/apk/res/android"> + xmlns:android="http://schemas.android.com/apk/res/android" + > + android:text="@string/msg_demo_buffer" + />