1313import butterknife .ButterKnife ;
1414import butterknife .InjectView ;
1515import butterknife .OnTextChanged ;
16- import com .morihacky .android .rxjava .R ;
1716import java .util .ArrayList ;
1817import java .util .List ;
1918import java .util .concurrent .TimeUnit ;
20- import rx .Observable ;
2119import rx .Observer ;
22- import rx .Subscriber ;
2320import rx .Subscription ;
24- import rx .android .app .AppObservable ;
2521import rx .android .schedulers .AndroidSchedulers ;
2622import rx .schedulers .Schedulers ;
2723import rx .subjects .PublishSubject ;
2824import timber .log .Timber ;
2925
26+ import static rx .android .app .AppObservable .bindFragment ;
27+
3028/**
3129 * The reason we use a Subject for tracking the search query is because it emits observables.
3230 * Because a Subject subscribes to an Observable, it will trigger that Observable to begin emitting items
@@ -53,13 +51,7 @@ public class SubjectDebounceSearchEmitterFragment
5351 private List <String > _logs ;
5452
5553 private Subscription _subscription ;
56- private PublishSubject <Observable <String >> _searchTextEmitterSubject ;
57-
58- @ OnTextChanged (R .id .input_txt_subject_debounce )
59- public void onTextEntered (CharSequence charsEntered ) {
60- Timber .d ("---------- text entered %s" , charsEntered );
61- _searchTextEmitterSubject .onNext (_getASearchObservableFor (charsEntered .toString ()));
62- }
54+ private PublishSubject <String > _searchTextEmitterSubject ;
6355
6456 @ Override
6557 public void onDestroy () {
@@ -84,13 +76,20 @@ public void onActivityCreated(@Nullable Bundle savedInstanceState) {
8476 _setupLogger ();
8577
8678 _searchTextEmitterSubject = PublishSubject .create ();
87- _subscription = AppObservable .bindFragment (SubjectDebounceSearchEmitterFragment .this ,
88- Observable .switchOnNext (_searchTextEmitterSubject ))
89- .debounce (400 , TimeUnit .MILLISECONDS , Schedulers .io ())
90- .observeOn (AndroidSchedulers .mainThread ())
79+
80+ _subscription = bindFragment (this ,//
81+ _searchTextEmitterSubject //
82+ .debounce (400 , TimeUnit .MILLISECONDS , Schedulers .io ())//
83+ .observeOn (AndroidSchedulers .mainThread ()))//
9184 .subscribe (_getSearchObserver ());
9285 }
9386
87+ @ OnTextChanged (R .id .input_txt_subject_debounce )
88+ public void onTextEntered (CharSequence charsEntered ) {
89+ Timber .d ("---------- text entered %s" , charsEntered );
90+ _searchTextEmitterSubject .onNext (charsEntered .toString ());
91+ }
92+
9493 // -----------------------------------------------------------------------------------
9594 // Main Rx entities
9695
@@ -116,23 +115,6 @@ public void onNext(String searchText) {
116115 };
117116 }
118117
119- /**
120- * @param searchText search text entered onTextChange
121- * @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.
122- */
123- private Observable <String > _getASearchObservableFor (final String searchText ) {
124- return Observable .create (new Observable .OnSubscribe <String >() {
125-
126- @ Override
127- public void call (Subscriber <? super String > subscriber ) {
128-
129- Timber .d ("----------- inside the search observable" );
130- subscriber .onNext (searchText );
131- // subscriber.onCompleted(); This seems to have no effect.
132- }
133- }).subscribeOn (Schedulers .io ());
134- }
135-
136118 // -----------------------------------------------------------------------------------
137119 // Method that help wiring up the example (irrelevant to RxJava)
138120
0 commit comments