From 37efbdf4b6f597fbfd4857fb1e3d6eb85e1c2d9d Mon Sep 17 00:00:00 2001 From: Igor Ganapolsky Date: Fri, 18 Sep 2015 11:42:42 -0400 Subject: [PATCH 001/137] Update gradle version. Update android library version. --- app/build.gradle | 4 ++-- build.gradle | 2 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8fedb1bc..66a94372 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,7 +1,7 @@ apply plugin: 'com.android.application' dependencies { - compile 'com.android.support:support-v13:21.0.2' + compile 'com.android.support:support-v13:23.0.1' compile 'io.reactivex:rxandroid:1.0.1' // Because RxAndroid releases are few and far between, it is recommended you also @@ -22,7 +22,7 @@ dependencies { android { compileSdkVersion 23 - buildToolsVersion '23' + buildToolsVersion '23.0.1' defaultConfig { applicationId "com.morihacky.android.rxjava" diff --git a/build.gradle b/build.gradle index 8d6e1303..ae7242c0 100644 --- a/build.gradle +++ b/build.gradle @@ -6,7 +6,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:1.3.0' + classpath 'com.android.tools.build:gradle:1.3.1' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 4bc23594..67db8c56 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -3,4 +3,4 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.4-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.7-all.zip From 3ed00ff05897a855dab4a5d6a77a85a18ab54022 Mon Sep 17 00:00:00 2001 From: Prat Date: Wed, 16 Sep 2015 20:20:13 -0400 Subject: [PATCH 002/137] Update to Retrofit 2 --- app/build.gradle | 4 +- .../fragments/PseudoCacheConcatFragment.java | 33 ++++++++---- .../fragments/PseudoCacheMergeFragment.java | 36 +++++++++---- .../RetrofitAsyncTaskDeathFragment.java | 36 +++++++++---- .../rxjava/fragments/RetrofitFragment.java | 51 ++++++++++++------- 5 files changed, 113 insertions(+), 47 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 8fedb1bc..6aef59f5 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -12,7 +12,9 @@ dependencies { compile 'com.jakewharton:butterknife:5.1.1' compile 'com.jakewharton.timber:timber:2.4.2' - compile 'com.squareup.retrofit:retrofit:1.6.1' + compile 'com.squareup.retrofit:retrofit:2.0.0-beta1' + compile 'com.squareup.retrofit:adapter-rxjava:2.0.0-beta1' + compile 'com.squareup.retrofit:converter-gson:2.0.0-beta1' compile 'com.squareup.okhttp:okhttp:2.0.0' compile 'com.squareup.okhttp:okhttp-urlconnection:2.0.0' diff --git a/app/src/main/java/com/morihacky/android/rxjava/fragments/PseudoCacheConcatFragment.java b/app/src/main/java/com/morihacky/android/rxjava/fragments/PseudoCacheConcatFragment.java index c7496074..d06a8236 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/fragments/PseudoCacheConcatFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/fragments/PseudoCacheConcatFragment.java @@ -14,11 +14,19 @@ import com.morihacky.android.rxjava.R; import com.morihacky.android.rxjava.retrofit.Contributor; import com.morihacky.android.rxjava.retrofit.GithubApi; +import com.squareup.okhttp.Interceptor; +import com.squareup.okhttp.OkHttpClient; +import com.squareup.okhttp.Request; +import com.squareup.okhttp.Response; + +import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import retrofit.RequestInterceptor; -import retrofit.RestAdapter; + +import retrofit.GsonConverterFactory; +import retrofit.Retrofit; +import retrofit.RxJavaCallAdapterFactory; import rx.Observable; import rx.Subscriber; import rx.Subscription; @@ -123,19 +131,26 @@ public Observable call(List contributors) { } private GithubApi _createGithubApi() { - - RestAdapter.Builder builder = new RestAdapter.Builder().setEndpoint( - "https://api.github.com/"); - //.setLogLevel(RestAdapter.LogLevel.FULL); + Retrofit.Builder builder =new Retrofit.Builder() + .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) + .addConverterFactory(GsonConverterFactory.create()) + .baseUrl("https://api.github.com"); final String githubToken = getResources().getString(R.string.github_oauth_token); + if (!TextUtils.isEmpty(githubToken)) { - builder.setRequestInterceptor(new RequestInterceptor() { + OkHttpClient client = new OkHttpClient(); + client.interceptors().add(new Interceptor() { @Override - public void intercept(RequestFacade request) { - request.addHeader("Authorization", format("token %s", githubToken)); + public Response intercept(Chain chain) throws IOException { + Request request = chain.request(); + Request newReq = request.newBuilder() + .addHeader("Authorization", format("token %s", githubToken)) + .build(); + return chain.proceed(newReq); } }); + builder.client(client); } return builder.build().create(GithubApi.class); diff --git a/app/src/main/java/com/morihacky/android/rxjava/fragments/PseudoCacheMergeFragment.java b/app/src/main/java/com/morihacky/android/rxjava/fragments/PseudoCacheMergeFragment.java index 17c6a6d5..720261ae 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/fragments/PseudoCacheMergeFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/fragments/PseudoCacheMergeFragment.java @@ -2,6 +2,7 @@ import android.os.Bundle; import android.support.annotation.Nullable; +import android.text.TextUtils; import android.util.Pair; import android.view.LayoutInflater; import android.view.View; @@ -14,11 +15,19 @@ import com.morihacky.android.rxjava.R; import com.morihacky.android.rxjava.retrofit.Contributor; import com.morihacky.android.rxjava.retrofit.GithubApi; +import com.squareup.okhttp.Interceptor; +import com.squareup.okhttp.OkHttpClient; +import com.squareup.okhttp.Request; +import com.squareup.okhttp.Response; + +import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; -import retrofit.RequestInterceptor; -import retrofit.RestAdapter; + +import retrofit.GsonConverterFactory; +import retrofit.Retrofit; +import retrofit.RxJavaCallAdapterFactory; import rx.Observable; import rx.Subscriber; import rx.Subscription; @@ -144,19 +153,26 @@ public Pair call(Contributor contributor) { } private GithubApi _createGithubApi() { - - RestAdapter.Builder builder = new RestAdapter.Builder().setEndpoint( - "https://api.github.com/"); - //.setLogLevel(RestAdapter.LogLevel.FULL); + Retrofit.Builder builder = new Retrofit.Builder() + .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) + .addConverterFactory(GsonConverterFactory.create()) + .baseUrl("https://api.github.com"); final String githubToken = getResources().getString(R.string.github_oauth_token); - if (!isEmpty(githubToken)) { - builder.setRequestInterceptor(new RequestInterceptor() { + + if (!TextUtils.isEmpty(githubToken)) { + OkHttpClient client = new OkHttpClient(); + client.interceptors().add(new Interceptor() { @Override - public void intercept(RequestFacade request) { - request.addHeader("Authorization", format("token %s", githubToken)); + public Response intercept(Chain chain) throws IOException { + Request request = chain.request(); + Request newReq = request.newBuilder() + .addHeader("Authorization", format("token %s", githubToken)) + .build(); + return chain.proceed(newReq); } }); + builder.client(client); } return builder.build().create(GithubApi.class); diff --git a/app/src/main/java/com/morihacky/android/rxjava/fragments/RetrofitAsyncTaskDeathFragment.java b/app/src/main/java/com/morihacky/android/rxjava/fragments/RetrofitAsyncTaskDeathFragment.java index 5e6a48c1..75b909ab 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/fragments/RetrofitAsyncTaskDeathFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/fragments/RetrofitAsyncTaskDeathFragment.java @@ -4,6 +4,7 @@ import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -16,9 +17,17 @@ import com.morihacky.android.rxjava.R; import com.morihacky.android.rxjava.retrofit.GithubApi; import com.morihacky.android.rxjava.retrofit.User; +import com.squareup.okhttp.Interceptor; +import com.squareup.okhttp.OkHttpClient; +import com.squareup.okhttp.Request; +import com.squareup.okhttp.Response; + +import java.io.IOException; import java.util.ArrayList; -import retrofit.RequestInterceptor; -import retrofit.RestAdapter; + +import retrofit.GsonConverterFactory; +import retrofit.Retrofit; +import retrofit.RxJavaCallAdapterFactory; import rx.Observer; import rx.android.schedulers.AndroidSchedulers; import rx.schedulers.Schedulers; @@ -102,19 +111,26 @@ public void onNext(User user) { // ----------------------------------------------------------------------------------- private GithubApi _createGithubApi() { - - RestAdapter.Builder builder = new RestAdapter.Builder().setEndpoint( - "https://api.github.com/"); - //.setLogLevel(RestAdapter.LogLevel.FULL); + Retrofit.Builder builder = new Retrofit.Builder() + .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) + .addConverterFactory(GsonConverterFactory.create()) + .baseUrl("https://api.github.com"); final String githubToken = getResources().getString(R.string.github_oauth_token); - if (!isEmpty(githubToken)) { - builder.setRequestInterceptor(new RequestInterceptor() { + + if (!TextUtils.isEmpty(githubToken)) { + OkHttpClient client = new OkHttpClient(); + client.interceptors().add(new Interceptor() { @Override - public void intercept(RequestFacade request) { - request.addHeader("Authorization", format("token %s", githubToken)); + public Response intercept(Chain chain) throws IOException { + Request request = chain.request(); + Request newReq = request.newBuilder() + .addHeader("Authorization", format("token %s", githubToken)) + .build(); + return chain.proceed(newReq); } }); + builder.client(client); } return builder.build().create(GithubApi.class); diff --git a/app/src/main/java/com/morihacky/android/rxjava/fragments/RetrofitFragment.java b/app/src/main/java/com/morihacky/android/rxjava/fragments/RetrofitFragment.java index 13e53c89..6727654a 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/fragments/RetrofitFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/fragments/RetrofitFragment.java @@ -1,8 +1,19 @@ package com.morihacky.android.rxjava.fragments; +import com.morihacky.android.rxjava.R; +import com.morihacky.android.rxjava.RxUtils; +import com.morihacky.android.rxjava.retrofit.Contributor; +import com.morihacky.android.rxjava.retrofit.GithubApi; +import com.morihacky.android.rxjava.retrofit.User; +import com.squareup.okhttp.Interceptor; +import com.squareup.okhttp.OkHttpClient; +import com.squareup.okhttp.Request; +import com.squareup.okhttp.Response; + import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v4.app.Fragment; +import android.text.TextUtils; import android.util.Pair; import android.view.LayoutInflater; import android.view.View; @@ -10,18 +21,17 @@ import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ListView; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + import butterknife.ButterKnife; import butterknife.InjectView; import butterknife.OnClick; -import com.morihacky.android.rxjava.R; -import com.morihacky.android.rxjava.RxUtils; -import com.morihacky.android.rxjava.retrofit.Contributor; -import com.morihacky.android.rxjava.retrofit.GithubApi; -import com.morihacky.android.rxjava.retrofit.User; -import java.util.ArrayList; -import java.util.List; -import retrofit.RequestInterceptor; -import retrofit.RestAdapter; +import retrofit.GsonConverterFactory; +import retrofit.Retrofit; +import retrofit.RxJavaCallAdapterFactory; import rx.Observable; import rx.Observer; import rx.android.schedulers.AndroidSchedulers; @@ -192,19 +202,26 @@ public void onNext(Pair pair) { // ----------------------------------------------------------------------------------- private GithubApi _createGithubApi() { - - RestAdapter.Builder builder = new RestAdapter.Builder().setEndpoint( - "https://api.github.com/"); - //.setLogLevel(RestAdapter.LogLevel.FULL); + Retrofit.Builder builder = new Retrofit.Builder() + .addCallAdapterFactory(RxJavaCallAdapterFactory.create()) + .addConverterFactory(GsonConverterFactory.create()) + .baseUrl("https://api.github.com"); final String githubToken = getResources().getString(R.string.github_oauth_token); - if (!isEmpty(githubToken)) { - builder.setRequestInterceptor(new RequestInterceptor() { + + if (!TextUtils.isEmpty(githubToken)) { + OkHttpClient client = new OkHttpClient(); + client.interceptors().add(new Interceptor() { @Override - public void intercept(RequestFacade request) { - request.addHeader("Authorization", format("token %s", githubToken)); + public Response intercept(Chain chain) throws IOException { + Request request = chain.request(); + Request newReq = request.newBuilder() + .addHeader("Authorization", format("token %s", githubToken)) + .build(); + return chain.proceed(newReq); } }); + builder.client(client); } return builder.build().create(GithubApi.class); From aa9699976eca6770db73a93a4a4dd7d235768033 Mon Sep 17 00:00:00 2001 From: Santiago Castro Date: Wed, 30 Sep 2015 01:18:48 -0300 Subject: [PATCH 003/137] Change "where when" for "so when" So it sounds better :smiley_face: --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f5ddabf0..0cee2ed3 100644 --- a/README.md +++ b/README.md @@ -55,7 +55,7 @@ The code for this example has already been written by one Mr.skehlet in the inte ### Double binding with TextViews -Auto-updating views are a pretty cool thing. If you've dealt with Angular JS before, they have a pretty nifty concept called "two-way data binding", where when an HTML element is bound to a model/entity object, it constantly "listens" to changes on that entity and auto-updates its state based on the model. Using the technique in this example, you could potentially use a pattern like the [Presentation View Model pattern](http://martinfowler.com/eaaDev/PresentationModel.html) with great ease. +Auto-updating views are a pretty cool thing. If you've dealt with Angular JS before, they have a pretty nifty concept called "two-way data binding", so when an HTML element is bound to a model/entity object, it constantly "listens" to changes on that entity and auto-updates its state based on the model. Using the technique in this example, you could potentially use a pattern like the [Presentation View Model pattern](http://martinfowler.com/eaaDev/PresentationModel.html) with great ease. While the example here is pretty rudimentary, the technique used to achieve the double binding using a `Publish Subject` is much more interesting. From 3515c6ae741736b5fc581bcc47293915de44aca5 Mon Sep 17 00:00:00 2001 From: Mitchell Date: Sun, 25 Oct 2015 14:12:22 +1100 Subject: [PATCH 004/137] update ButterKnife 5.1.1 -> 7.0.1 --- app/build.gradle | 2 +- .../android/rxjava/fragments/BufferDemoFragment.java | 8 ++++---- .../ConcurrencyWithSchedulersDemoFragment.java | 8 ++++---- .../fragments/DebounceSearchEmitterFragment.java | 8 ++++---- .../fragments/DoubleBindingTextViewFragment.java | 10 +++++----- .../rxjava/fragments/ExponentialBackoffFragment.java | 6 +++--- .../FormValidationCombineLatestFragment.java | 12 ++++++------ .../android/rxjava/fragments/MainFragment.java | 2 +- .../android/rxjava/fragments/PollingFragment.java | 6 +++--- .../rxjava/fragments/PseudoCacheConcatFragment.java | 6 +++--- .../rxjava/fragments/PseudoCacheMergeFragment.java | 6 +++--- .../fragments/RetrofitAsyncTaskDeathFragment.java | 8 ++++---- .../android/rxjava/fragments/RetrofitFragment.java | 10 +++++----- .../rxjava/fragments/RotationPersist1Fragment.java | 6 +++--- .../rxjava/fragments/RotationPersist2Fragment.java | 6 +++--- .../rxjava/fragments/TimeoutDemoFragment.java | 6 +++--- .../android/rxjava/fragments/TimingDemoFragment.java | 6 +++--- .../android/rxjava/rxbus/RxBusDemoFragment.java | 2 +- .../rxjava/rxbus/RxBusDemo_Bottom1Fragment.java | 6 +++--- .../rxjava/rxbus/RxBusDemo_Bottom2Fragment.java | 8 ++++---- .../rxjava/rxbus/RxBusDemo_Bottom3Fragment.java | 8 ++++---- .../android/rxjava/rxbus/RxBusDemo_TopFragment.java | 2 +- 22 files changed, 71 insertions(+), 71 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 66a94372..d11bcaa8 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,7 +10,7 @@ dependencies { compile 'io.reactivex:rxjava-math:1.0.0' compile 'com.jakewharton.rxbinding:rxbinding:0.2.0' - compile 'com.jakewharton:butterknife:5.1.1' + compile 'com.jakewharton:butterknife:7.0.1' compile 'com.jakewharton.timber:timber:2.4.2' compile 'com.squareup.retrofit:retrofit:1.6.1' compile 'com.squareup.okhttp:okhttp:2.0.0' diff --git a/app/src/main/java/com/morihacky/android/rxjava/fragments/BufferDemoFragment.java b/app/src/main/java/com/morihacky/android/rxjava/fragments/BufferDemoFragment.java index 6a91aec5..35447497 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/fragments/BufferDemoFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/fragments/BufferDemoFragment.java @@ -10,7 +10,7 @@ import android.widget.Button; import android.widget.ListView; import butterknife.ButterKnife; -import butterknife.InjectView; +import butterknife.Bind; import com.jakewharton.rxbinding.view.RxView; import com.jakewharton.rxbinding.view.ViewClickEvent; import com.morihacky.android.rxjava.R; @@ -41,8 +41,8 @@ public class BufferDemoFragment extends BaseFragment { - @InjectView(R.id.list_threading_log) ListView _logsList; - @InjectView(R.id.btn_start_operation) Button _tapBtn; + @Bind(R.id.list_threading_log) ListView _logsList; + @Bind(R.id.btn_start_operation) Button _tapBtn; private LogAdapter _adapter; private List _logs; @@ -72,7 +72,7 @@ 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); + ButterKnife.bind(this, layout); return layout; } diff --git a/app/src/main/java/com/morihacky/android/rxjava/fragments/ConcurrencyWithSchedulersDemoFragment.java b/app/src/main/java/com/morihacky/android/rxjava/fragments/ConcurrencyWithSchedulersDemoFragment.java index 292827ca..314e3af0 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/fragments/ConcurrencyWithSchedulersDemoFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/fragments/ConcurrencyWithSchedulersDemoFragment.java @@ -12,7 +12,7 @@ import android.widget.ListView; import android.widget.ProgressBar; import butterknife.ButterKnife; -import butterknife.InjectView; +import butterknife.Bind; import butterknife.OnClick; import com.morihacky.android.rxjava.R; import java.util.ArrayList; @@ -28,8 +28,8 @@ public class ConcurrencyWithSchedulersDemoFragment extends BaseFragment { - @InjectView(R.id.progress_operation_running) ProgressBar _progress; - @InjectView(R.id.list_threading_log) ListView _logsList; + @Bind(R.id.progress_operation_running) ProgressBar _progress; + @Bind(R.id.list_threading_log) ListView _logsList; private LogAdapter _adapter; private List _logs; @@ -54,7 +54,7 @@ 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); + ButterKnife.bind(this, layout); return layout; } diff --git a/app/src/main/java/com/morihacky/android/rxjava/fragments/DebounceSearchEmitterFragment.java b/app/src/main/java/com/morihacky/android/rxjava/fragments/DebounceSearchEmitterFragment.java index 139a654d..e6090dd8 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/fragments/DebounceSearchEmitterFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/fragments/DebounceSearchEmitterFragment.java @@ -12,7 +12,7 @@ import android.widget.EditText; import android.widget.ListView; import butterknife.ButterKnife; -import butterknife.InjectView; +import butterknife.Bind; import butterknife.OnClick; import com.jakewharton.rxbinding.widget.RxTextView; import com.jakewharton.rxbinding.widget.TextViewTextChangeEvent; @@ -30,8 +30,8 @@ public class DebounceSearchEmitterFragment extends BaseFragment { - @InjectView(R.id.list_threading_log) ListView _logsList; - @InjectView(R.id.input_txt_debounce) EditText _inputSearchText; + @Bind(R.id.list_threading_log) ListView _logsList; + @Bind(R.id.input_txt_debounce) EditText _inputSearchText; private LogAdapter _adapter; private List _logs; @@ -51,7 +51,7 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View layout = inflater.inflate(R.layout.fragment_debounce, container, false); - ButterKnife.inject(this, layout); + ButterKnife.bind(this, layout); return layout; } diff --git a/app/src/main/java/com/morihacky/android/rxjava/fragments/DoubleBindingTextViewFragment.java b/app/src/main/java/com/morihacky/android/rxjava/fragments/DoubleBindingTextViewFragment.java index fe305d77..df6e1c7f 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/fragments/DoubleBindingTextViewFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/fragments/DoubleBindingTextViewFragment.java @@ -8,7 +8,7 @@ import android.widget.EditText; import android.widget.TextView; import butterknife.ButterKnife; -import butterknife.InjectView; +import butterknife.Bind; import butterknife.OnTextChanged; import com.morihacky.android.rxjava.R; import rx.Subscription; @@ -20,9 +20,9 @@ public class DoubleBindingTextViewFragment 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; + @Bind(R.id.double_binding_num1) EditText _number1; + @Bind(R.id.double_binding_num2) EditText _number2; + @Bind(R.id.double_binding_result) TextView _result; Subscription _subscription; PublishSubject _resultEmitterSubject; @@ -32,7 +32,7 @@ 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); + ButterKnife.bind(this, layout); _resultEmitterSubject = PublishSubject.create(); _subscription = _resultEmitterSubject.asObservable().subscribe(new Action1() { diff --git a/app/src/main/java/com/morihacky/android/rxjava/fragments/ExponentialBackoffFragment.java b/app/src/main/java/com/morihacky/android/rxjava/fragments/ExponentialBackoffFragment.java index df860315..e8f74361 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/fragments/ExponentialBackoffFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/fragments/ExponentialBackoffFragment.java @@ -8,7 +8,7 @@ import android.view.ViewGroup; import android.widget.ListView; import butterknife.ButterKnife; -import butterknife.InjectView; +import butterknife.Bind; import butterknife.OnClick; import com.morihacky.android.rxjava.R; import com.morihacky.android.rxjava.RxUtils; @@ -29,7 +29,7 @@ public class ExponentialBackoffFragment extends BaseFragment { - @InjectView(R.id.list_threading_log) ListView _logList; + @Bind(R.id.list_threading_log) ListView _logList; private LogAdapter _adapter; private List _logs; @@ -52,7 +52,7 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View layout = inflater.inflate(R.layout.fragment_exponential_backoff, container, false); - ButterKnife.inject(this, layout); + ButterKnife.bind(this, layout); return layout; } diff --git a/app/src/main/java/com/morihacky/android/rxjava/fragments/FormValidationCombineLatestFragment.java b/app/src/main/java/com/morihacky/android/rxjava/fragments/FormValidationCombineLatestFragment.java index fa389b25..acc8d964 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/fragments/FormValidationCombineLatestFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/fragments/FormValidationCombineLatestFragment.java @@ -8,7 +8,7 @@ import android.widget.EditText; import android.widget.TextView; import butterknife.ButterKnife; -import butterknife.InjectView; +import butterknife.Bind; import com.jakewharton.rxbinding.widget.RxTextView; import com.morihacky.android.rxjava.R; import rx.Observable; @@ -23,10 +23,10 @@ public class FormValidationCombineLatestFragment 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; + @Bind(R.id.btn_demo_form_valid) TextView _btnValidIndicator; + @Bind(R.id.demo_combl_email) EditText _email; + @Bind(R.id.demo_combl_password) EditText _password; + @Bind(R.id.demo_combl_num) EditText _number; private Observable _emailChangeObservable; private Observable _passwordChangeObservable; @@ -41,7 +41,7 @@ public View onCreateView(LayoutInflater inflater, View layout = inflater.inflate(R.layout.fragment_form_validation_comb_latest, container, false); - ButterKnife.inject(this, layout); + ButterKnife.bind(this, layout); _emailChangeObservable = RxTextView.textChanges(_email).skip(1); _passwordChangeObservable = RxTextView.textChanges(_password).skip(1); diff --git a/app/src/main/java/com/morihacky/android/rxjava/fragments/MainFragment.java b/app/src/main/java/com/morihacky/android/rxjava/fragments/MainFragment.java index d271bc3b..030e9503 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/fragments/MainFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/fragments/MainFragment.java @@ -20,7 +20,7 @@ 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); + ButterKnife.bind(this, layout); return layout; } diff --git a/app/src/main/java/com/morihacky/android/rxjava/fragments/PollingFragment.java b/app/src/main/java/com/morihacky/android/rxjava/fragments/PollingFragment.java index fc52780a..f3c36d2b 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/fragments/PollingFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/fragments/PollingFragment.java @@ -11,7 +11,7 @@ import android.widget.ArrayAdapter; import android.widget.ListView; import butterknife.ButterKnife; -import butterknife.InjectView; +import butterknife.Bind; import butterknife.OnClick; import com.morihacky.android.rxjava.R; import java.util.ArrayList; @@ -30,7 +30,7 @@ public class PollingFragment public static final int INITIAL_DELAY = 0; public static final int POLLING_INTERVAL = 1000; - @InjectView(R.id.list_threading_log) ListView _logsList; + @Bind(R.id.list_threading_log) ListView _logsList; private LogAdapter _adapter; private List _logs; @@ -55,7 +55,7 @@ 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); + ButterKnife.bind(this, layout); return layout; } diff --git a/app/src/main/java/com/morihacky/android/rxjava/fragments/PseudoCacheConcatFragment.java b/app/src/main/java/com/morihacky/android/rxjava/fragments/PseudoCacheConcatFragment.java index c7496074..34a1a9a6 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/fragments/PseudoCacheConcatFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/fragments/PseudoCacheConcatFragment.java @@ -9,7 +9,7 @@ import android.widget.ArrayAdapter; import android.widget.ListView; import butterknife.ButterKnife; -import butterknife.InjectView; +import butterknife.Bind; import butterknife.OnClick; import com.morihacky.android.rxjava.R; import com.morihacky.android.rxjava.retrofit.Contributor; @@ -31,7 +31,7 @@ public class PseudoCacheConcatFragment extends BaseFragment { - @InjectView(R.id.log_list) ListView _resultList; + @Bind(R.id.log_list) ListView _resultList; private Subscription _subscription = null; private HashMap _contributionMap = null; @@ -42,7 +42,7 @@ 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); + ButterKnife.bind(this, layout); _initializeCache(); return layout; } diff --git a/app/src/main/java/com/morihacky/android/rxjava/fragments/PseudoCacheMergeFragment.java b/app/src/main/java/com/morihacky/android/rxjava/fragments/PseudoCacheMergeFragment.java index 17c6a6d5..43344775 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/fragments/PseudoCacheMergeFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/fragments/PseudoCacheMergeFragment.java @@ -9,7 +9,7 @@ import android.widget.ArrayAdapter; import android.widget.ListView; import butterknife.ButterKnife; -import butterknife.InjectView; +import butterknife.Bind; import butterknife.OnClick; import com.morihacky.android.rxjava.R; import com.morihacky.android.rxjava.retrofit.Contributor; @@ -32,7 +32,7 @@ public class PseudoCacheMergeFragment extends BaseFragment { - @InjectView(R.id.log_list) ListView _resultList; + @Bind(R.id.log_list) ListView _resultList; private Subscription _subscription = null; private HashMap _contributionMap = null; @@ -44,7 +44,7 @@ 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); + ButterKnife.bind(this, layout); _initializeCache(); return layout; } diff --git a/app/src/main/java/com/morihacky/android/rxjava/fragments/RetrofitAsyncTaskDeathFragment.java b/app/src/main/java/com/morihacky/android/rxjava/fragments/RetrofitAsyncTaskDeathFragment.java index 5e6a48c1..a5008019 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/fragments/RetrofitAsyncTaskDeathFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/fragments/RetrofitAsyncTaskDeathFragment.java @@ -11,7 +11,7 @@ import android.widget.EditText; import android.widget.ListView; import butterknife.ButterKnife; -import butterknife.InjectView; +import butterknife.Bind; import butterknife.OnClick; import com.morihacky.android.rxjava.R; import com.morihacky.android.rxjava.retrofit.GithubApi; @@ -29,8 +29,8 @@ public class RetrofitAsyncTaskDeathFragment extends Fragment { - @InjectView(R.id.btn_demo_retrofit_async_death_username) EditText _username; - @InjectView(R.id.log_list) ListView _resultList; + @Bind(R.id.btn_demo_retrofit_async_death_username) EditText _username; + @Bind(R.id.log_list) ListView _resultList; private GithubApi _api; private ArrayAdapter _adapter; @@ -49,7 +49,7 @@ public View onCreateView(LayoutInflater inflater, View layout = inflater.inflate(R.layout.fragment_retrofit_async_task_death, container, false); - ButterKnife.inject(this, layout); + ButterKnife.bind(this, layout); _adapter = new ArrayAdapter<>(getActivity(), R.layout.item_log, diff --git a/app/src/main/java/com/morihacky/android/rxjava/fragments/RetrofitFragment.java b/app/src/main/java/com/morihacky/android/rxjava/fragments/RetrofitFragment.java index 13e53c89..6092db92 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/fragments/RetrofitFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/fragments/RetrofitFragment.java @@ -11,7 +11,7 @@ import android.widget.EditText; import android.widget.ListView; import butterknife.ButterKnife; -import butterknife.InjectView; +import butterknife.Bind; import butterknife.OnClick; import com.morihacky.android.rxjava.R; import com.morihacky.android.rxjava.RxUtils; @@ -37,9 +37,9 @@ 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; + @Bind(R.id.demo_retrofit_contributors_username) EditText _username; + @Bind(R.id.demo_retrofit_contributors_repository) EditText _repo; + @Bind(R.id.log_list) ListView _resultList; private GithubApi _api; private ArrayAdapter _adapter; @@ -70,7 +70,7 @@ public View onCreateView(LayoutInflater inflater, @Nullable Bundle savedInstanceState) { View layout = inflater.inflate(R.layout.fragment_retrofit, container, false); - ButterKnife.inject(this, layout); + ButterKnife.bind(this, layout); _adapter = new ArrayAdapter<>(getActivity(), R.layout.item_log, diff --git a/app/src/main/java/com/morihacky/android/rxjava/fragments/RotationPersist1Fragment.java b/app/src/main/java/com/morihacky/android/rxjava/fragments/RotationPersist1Fragment.java index 54a7d14c..36fa72d2 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/fragments/RotationPersist1Fragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/fragments/RotationPersist1Fragment.java @@ -9,7 +9,7 @@ import android.view.ViewGroup; import android.widget.ListView; import butterknife.ButterKnife; -import butterknife.InjectView; +import butterknife.Bind; import butterknife.OnClick; import com.morihacky.android.rxjava.R; import com.morihacky.android.rxjava.RxUtils; @@ -30,7 +30,7 @@ public class RotationPersist1Fragment public static final String FRAG_TAG = RotationPersist1WorkerFragment.class.getName(); - @InjectView(R.id.list_threading_log) ListView _logList; + @Bind(R.id.list_threading_log) ListView _logList; private LogAdapter _adapter; private List _logs; @@ -106,7 +106,7 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View layout = inflater.inflate(R.layout.fragment_rotation_persist, container, false); - ButterKnife.inject(this, layout); + ButterKnife.bind(this, layout); return layout; } diff --git a/app/src/main/java/com/morihacky/android/rxjava/fragments/RotationPersist2Fragment.java b/app/src/main/java/com/morihacky/android/rxjava/fragments/RotationPersist2Fragment.java index 49e7128e..6be49d52 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/fragments/RotationPersist2Fragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/fragments/RotationPersist2Fragment.java @@ -9,7 +9,7 @@ import android.view.ViewGroup; import android.widget.ListView; import butterknife.ButterKnife; -import butterknife.InjectView; +import butterknife.Bind; import butterknife.OnClick; import com.morihacky.android.rxjava.R; import com.morihacky.android.rxjava.RxUtils; @@ -30,7 +30,7 @@ public class RotationPersist2Fragment public static final String FRAG_TAG = RotationPersist2WorkerFragment.class.getName(); - @InjectView(R.id.list_threading_log) ListView _logList; + @Bind(R.id.list_threading_log) ListView _logList; private LogAdapter _adapter; private List _logs; @@ -105,7 +105,7 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View layout = inflater.inflate(R.layout.fragment_rotation_persist, container, false); - ButterKnife.inject(this, layout); + ButterKnife.bind(this, layout); return layout; } diff --git a/app/src/main/java/com/morihacky/android/rxjava/fragments/TimeoutDemoFragment.java b/app/src/main/java/com/morihacky/android/rxjava/fragments/TimeoutDemoFragment.java index bebfbe16..b7a587c0 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/fragments/TimeoutDemoFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/fragments/TimeoutDemoFragment.java @@ -9,7 +9,7 @@ import android.view.ViewGroup; import android.widget.ListView; import butterknife.ButterKnife; -import butterknife.InjectView; +import butterknife.Bind; import butterknife.OnClick; import com.morihacky.android.rxjava.R; import com.morihacky.android.rxjava.wiring.LogAdapter; @@ -27,7 +27,7 @@ public class TimeoutDemoFragment extends BaseFragment { - @InjectView(R.id.list_threading_log) ListView _logsList; + @Bind(R.id.list_threading_log) ListView _logsList; private LogAdapter _adapter; private List _logs; @@ -51,7 +51,7 @@ 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); + ButterKnife.bind(this, layout); return layout; } diff --git a/app/src/main/java/com/morihacky/android/rxjava/fragments/TimingDemoFragment.java b/app/src/main/java/com/morihacky/android/rxjava/fragments/TimingDemoFragment.java index 68d3b16c..cd0ae184 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/fragments/TimingDemoFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/fragments/TimingDemoFragment.java @@ -8,7 +8,7 @@ import android.view.ViewGroup; import android.widget.ListView; import butterknife.ButterKnife; -import butterknife.InjectView; +import butterknife.Bind; import butterknife.OnClick; import com.morihacky.android.rxjava.R; import com.morihacky.android.rxjava.wiring.LogAdapter; @@ -28,7 +28,7 @@ public class TimingDemoFragment extends BaseFragment { - @InjectView(R.id.list_threading_log) ListView _logsList; + @Bind(R.id.list_threading_log) ListView _logsList; private LogAdapter _adapter; private List _logs; @@ -47,7 +47,7 @@ public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View layout = inflater.inflate(R.layout.fragment_demo_timing, container, false); - ButterKnife.inject(this, layout); + ButterKnife.bind(this, layout); return layout; } 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 ad1ad6ff..8eac88b7 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 @@ -17,7 +17,7 @@ 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); + ButterKnife.bind(this, layout); return layout; } 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 7b7308fc..338443c6 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 @@ -8,7 +8,7 @@ import android.view.ViewGroup; import android.widget.TextView; import butterknife.ButterKnife; -import butterknife.InjectView; +import butterknife.Bind; import com.morihacky.android.rxjava.MainActivity; import com.morihacky.android.rxjava.R; import com.morihacky.android.rxjava.fragments.BaseFragment; @@ -18,7 +18,7 @@ public class RxBusDemo_Bottom1Fragment extends BaseFragment { - @InjectView(R.id.demo_rxbus_tap_txt) TextView _tapEventTxtShow; + @Bind(R.id.demo_rxbus_tap_txt) TextView _tapEventTxtShow; private RxBus _rxBus; private CompositeSubscription _subscriptions; @@ -27,7 +27,7 @@ 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); + ButterKnife.bind(this, layout); return layout; } 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 3098ecc3..5d66ec51 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 @@ -8,7 +8,7 @@ import android.view.ViewGroup; import android.widget.TextView; import butterknife.ButterKnife; -import butterknife.InjectView; +import butterknife.Bind; import com.morihacky.android.rxjava.MainActivity; import com.morihacky.android.rxjava.R; import com.morihacky.android.rxjava.fragments.BaseFragment; @@ -22,8 +22,8 @@ public class RxBusDemo_Bottom2Fragment extends BaseFragment { - @InjectView(R.id.demo_rxbus_tap_txt) TextView _tapEventTxtShow; - @InjectView(R.id.demo_rxbus_tap_count) TextView _tapEventCountShow; + @Bind(R.id.demo_rxbus_tap_txt) TextView _tapEventTxtShow; + @Bind(R.id.demo_rxbus_tap_count) TextView _tapEventCountShow; private RxBus _rxBus; private CompositeSubscription _subscriptions; @@ -32,7 +32,7 @@ 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); + ButterKnife.bind(this, layout); return layout; } 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 2f75f165..775f5d1d 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 @@ -8,7 +8,7 @@ import android.view.ViewGroup; import android.widget.TextView; import butterknife.ButterKnife; -import butterknife.InjectView; +import butterknife.Bind; import com.morihacky.android.rxjava.MainActivity; import com.morihacky.android.rxjava.R; import com.morihacky.android.rxjava.fragments.BaseFragment; @@ -24,8 +24,8 @@ public class RxBusDemo_Bottom3Fragment extends BaseFragment { - @InjectView(R.id.demo_rxbus_tap_txt) TextView _tapEventTxtShow; - @InjectView(R.id.demo_rxbus_tap_count) TextView _tapEventCountShow; + @Bind(R.id.demo_rxbus_tap_txt) TextView _tapEventTxtShow; + @Bind(R.id.demo_rxbus_tap_count) TextView _tapEventCountShow; private RxBus _rxBus; private CompositeSubscription _subscriptions; @@ -34,7 +34,7 @@ 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); + ButterKnife.bind(this, layout); return layout; } 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 568244ca..bab619fd 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 @@ -21,7 +21,7 @@ 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); + ButterKnife.bind(this, layout); return layout; } From 51acf73f4c1c9f4c989eaa22f1f2225104700665 Mon Sep 17 00:00:00 2001 From: Kaushik Gopal Date: Fri, 20 Nov 2015 20:22:25 -0800 Subject: [PATCH 005/137] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 0cee2ed3..5ffe76ee 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,8 @@ Learning RxJava for Android by example This is a repository with real-world useful examples of using RxJava with Android. [It usually will be in a constant state of "Work in Progress" (WIP)](http://nerds.weddingpartyapp.com/tech/2014/09/15/learning-rxjava-with-android-by-example/). +I also gave a talk at a local meetup about warming up to RxJava here. Here's a link to the [video and slides](https://newcircle.com/s/post/1744/2015/06/29/learning-rxjava-for-android-by-example). + ## Examples: ### Concurrency using schedulers From ddcbefc198f95696f50df6d5614b7513e29b5925 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E8=A5=BF=E6=B6=9B?= Date: Wed, 30 Dec 2015 15:44:47 +0800 Subject: [PATCH 006/137] volley rx demo --- app/build.gradle | 4 +- .../com/morihacky/android/rxjava/MyApp.java | 5 + .../rxjava/fragments/MainFragment.java | 11 +- .../rxjava/fragments/VolleyDemoFragment.java | 189 ++++++++++++++++++ .../android/rxjava/wiring/MyVolley.java | 63 ++++++ app/src/main/res/layout/fragment_main.xml | 6 + app/src/main/res/layout/fragment_volley.xml | 34 ++++ app/src/main/res/values/strings.xml | 3 +- 8 files changed, 311 insertions(+), 4 deletions(-) create mode 100644 app/src/main/java/com/morihacky/android/rxjava/fragments/VolleyDemoFragment.java create mode 100644 app/src/main/java/com/morihacky/android/rxjava/wiring/MyVolley.java create mode 100644 app/src/main/res/layout/fragment_volley.xml diff --git a/app/build.gradle b/app/build.gradle index d11bcaa8..164fdf86 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -18,6 +18,8 @@ dependencies { debugCompile 'com.squareup.leakcanary:leakcanary-android:1.3' releaseCompile 'com.squareup.leakcanary:leakcanary-android-no-op:1.3' + compile 'com.mcxiaoke.volley:library:1.0.19' + } android { @@ -37,4 +39,4 @@ android { proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } -} \ No newline at end of file +} 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 b66f855f..f6f18c97 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/MyApp.java +++ b/app/src/main/java/com/morihacky/android/rxjava/MyApp.java @@ -1,6 +1,8 @@ package com.morihacky.android.rxjava; import android.app.Application; + +import com.morihacky.android.rxjava.wiring.MyVolley; import com.squareup.leakcanary.LeakCanary; import com.squareup.leakcanary.RefWatcher; import timber.log.Timber; @@ -27,5 +29,8 @@ public void onCreate() { _refWatcher = LeakCanary.install(this); Timber.plant(new Timber.DebugTree()); + + //volley init + MyVolley.init(this); } } diff --git a/app/src/main/java/com/morihacky/android/rxjava/fragments/MainFragment.java b/app/src/main/java/com/morihacky/android/rxjava/fragments/MainFragment.java index 030e9503..05efda07 100644 --- a/app/src/main/java/com/morihacky/android/rxjava/fragments/MainFragment.java +++ b/app/src/main/java/com/morihacky/android/rxjava/fragments/MainFragment.java @@ -7,11 +7,13 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import butterknife.ButterKnife; -import butterknife.OnClick; + import com.morihacky.android.rxjava.R; import com.morihacky.android.rxjava.rxbus.RxBusDemoFragment; +import butterknife.ButterKnife; +import butterknife.OnClick; + public class MainFragment extends BaseFragment { @@ -80,6 +82,11 @@ void demoRotationPersist() { //clickedOn(new RotationPersist1Fragment()); } + @OnClick(R.id.btn_demo_volley) + void demoVolleyRequest() { + clickedOn(new VolleyDemoFragment()); + } + private void clickedOn(@NonNull Fragment fragment) { final String tag = fragment.getClass().toString(); getActivity().getSupportFragmentManager() diff --git a/app/src/main/java/com/morihacky/android/rxjava/fragments/VolleyDemoFragment.java b/app/src/main/java/com/morihacky/android/rxjava/fragments/VolleyDemoFragment.java new file mode 100644 index 00000000..a37f1810 --- /dev/null +++ b/app/src/main/java/com/morihacky/android/rxjava/fragments/VolleyDemoFragment.java @@ -0,0 +1,189 @@ +package com.morihacky.android.rxjava.fragments; + +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; +import android.support.annotation.Nullable; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.ListView; + +import com.android.volley.Request; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonObjectRequest; +import com.android.volley.toolbox.RequestFuture; +import com.morihacky.android.rxjava.R; +import com.morihacky.android.rxjava.wiring.LogAdapter; +import com.morihacky.android.rxjava.wiring.MyVolley; + +import org.json.JSONObject; + +import java.nio.charset.Charset; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.ExecutionException; + +import butterknife.Bind; +import butterknife.ButterKnife; +import butterknife.OnClick; +import rx.Observable; +import rx.Observer; +import rx.android.schedulers.AndroidSchedulers; +import rx.functions.Func0; +import rx.schedulers.Schedulers; +import rx.subscriptions.CompositeSubscription; +import timber.log.Timber; + +/** + * Created by zhangxitao on 15/12/30. + */ + +public class VolleyDemoFragment + extends BaseFragment { + public static final String TAG = "VolleyDemoFragment"; + + @Bind(R.id.list_threading_log) + ListView _logsList; + @Bind(R.id.btn_start_operation) + Button _tapBtn; + + private LogAdapter _adapter; + private List _logs; + + private CompositeSubscription mCompositeSubscription = new CompositeSubscription(); + + @OnClick(R.id.btn_start_operation) + void startRequest() { + startVolleyRequest(); + } + + + @Override + public void onStart() { + super.onStart(); + + /** + * @condition: RxJava future request with volley + */ + } + + @Override + public void onPause() { + super.onPause(); + mCompositeSubscription.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_volley, container, false); + ButterKnife.bind(this, layout); + return layout; + } + + private void startVolleyRequest() { + mCompositeSubscription.add(newGetRouteData() + .subscribeOn(Schedulers.io()) + .observeOn(AndroidSchedulers.mainThread()) + .subscribe(new Observer() { + @Override + public void onCompleted() { + Log.e(TAG, "onCompleted"); + Timber.d("----- onCompleted"); + _log("onCompleted "); + } + + @Override + public void onError(Throwable e) { + VolleyError cause = (VolleyError) e.getCause(); + String s = new String(cause.networkResponse.data, Charset.forName("UTF-8")); + Log.e(TAG, s); + Log.e(TAG, cause.toString()); + _log("onError " + s); + + } + + @Override + public void onNext(JSONObject jsonObject) { + Log.e(TAG, "onNext " + jsonObject.toString()); + _log("onNext " + jsonObject.toString()); + + } + })); + } + + + /** + * @use handle response from future request, in my case JsonObject. + */ + private JSONObject getRouteData() throws ExecutionException, InterruptedException { + RequestFuture future = RequestFuture.newFuture(); + String url = "http://www.weather.com.cn/adat/sk/101010100.html"; + final Request.Priority priority = Request.Priority.IMMEDIATE; + JsonObjectRequest req = new JsonObjectRequest(Request.Method.GET, url, future, future); + MyVolley.getRequestQueue().add(req); + return future.get(); + } + + /** + * @use the observable, same type data Jsob Object + */ + public Observable newGetRouteData() { + return Observable.defer(new Func0>() { + @Override + public Observable call() { + Exception exception; + try { + return Observable.just(getRouteData()); + } catch (InterruptedException | ExecutionException e) { + Log.e("routes", e.getMessage()); + return Observable.error(e); + } + } + }); + } + + // ----------------------------------------------------------------------------------- + // 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); + } + }); + } + } + + private boolean _isCurrentlyOnMainThread() { + return Looper.myLooper() == Looper.getMainLooper(); + } +} diff --git a/app/src/main/java/com/morihacky/android/rxjava/wiring/MyVolley.java b/app/src/main/java/com/morihacky/android/rxjava/wiring/MyVolley.java new file mode 100644 index 00000000..9f2a2534 --- /dev/null +++ b/app/src/main/java/com/morihacky/android/rxjava/wiring/MyVolley.java @@ -0,0 +1,63 @@ +package com.morihacky.android.rxjava.wiring; + +/** + * Created by zhangxitao on 15/9/7. + */ + +import android.app.ActivityManager; +import android.content.Context; + +import com.android.volley.RequestQueue; +import com.android.volley.toolbox.ImageLoader; +import com.android.volley.toolbox.Volley; + +/** + * Helper class that is used to provide references to initialized RequestQueue(s) and ImageLoader(s) + * + * @author Ognyan Bankov + */ +public class MyVolley { + private static RequestQueue mRequestQueue; + private static ImageLoader mImageLoader; + + + private MyVolley() { + // no instances + } + + + public static void init(Context context) { + mRequestQueue = Volley.newRequestQueue(context); + + int memClass = ((ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE)) + .getMemoryClass(); + // Use 1/8th of the available memory for this memory cache. + int cacheSize = 1024 * 1024 * memClass / 8; +// mImageLoader = new ImageLoader(mRequestQueue, new BitmapLruCache(cacheSize)); + } + + + public static RequestQueue getRequestQueue() { + if (mRequestQueue != null) { + return mRequestQueue; + } else { + throw new IllegalStateException("RequestQueue not initialized"); + } + } + + + /** + * Returns instance of ImageLoader initialized with {@see FakeImageCache} which effectively means + * that no memory caching is used. This is useful for images that you know that will be show + * only once. + * + * @return + */ + public static ImageLoader getImageLoader() { + if (mImageLoader != null) { + return mImageLoader; + } else { + throw new IllegalStateException("ImageLoader not initialized"); + } + } +} diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml index 0f06a098..aba0cd1d 100644 --- a/app/src/main/res/layout/fragment_main.xml +++ b/app/src/main/res/layout/fragment_main.xml @@ -100,5 +100,11 @@ android:layout_width="match_parent" android:text="@string/btn_demo_rotation_persist" /> +