Skip to content

Commit 605e493

Browse files
author
Kaushik Gopal
committed
fix: search debounce - what was i thinking with the previous code?
1 parent fa10cda commit 605e493

File tree

1 file changed

+14
-32
lines changed

1 file changed

+14
-32
lines changed

app/src/main/java/com/morihacky/android/rxjava/SubjectDebounceSearchEmitterFragment.java

Lines changed: 14 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -13,20 +13,18 @@
1313
import butterknife.ButterKnife;
1414
import butterknife.InjectView;
1515
import butterknife.OnTextChanged;
16-
import com.morihacky.android.rxjava.R;
1716
import java.util.ArrayList;
1817
import java.util.List;
1918
import java.util.concurrent.TimeUnit;
20-
import rx.Observable;
2119
import rx.Observer;
22-
import rx.Subscriber;
2320
import rx.Subscription;
24-
import rx.android.app.AppObservable;
2521
import rx.android.schedulers.AndroidSchedulers;
2622
import rx.schedulers.Schedulers;
2723
import rx.subjects.PublishSubject;
2824
import 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

Comments
 (0)