Reputation: 4292
Making an Observable
based on events that took place within our control is easy enough; be it from views (button clicks, attach/detach events) or non-views (REST requests), wrapping an Observable
around is relatively easy and straight-forward.
But how about when it comes to framework events?
As an example, say I want to create an Observable
that will emit each Back button press to its subscriber, how could I do it?
The two ways to handle Back button presses that I've come to know come in the form of callback method from Activity
:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
// do something on back.
return true;
}
return super.onKeyDown(keyCode, event);
}
and
@Override
public void onBackPressed() {
// do something on back.
return;
}
How could I transform this into an Observable
?
Upvotes: 0
Views: 295
Reputation: 15824
You can use Subject
s for this purpose. For example:
class MainActivity extends Activity {
private final Subject<Void, Void> subject = PublishSubject.create();
@Override
public void onBackPressed() {
subject.onNext(null);
super.onBackPressed();
}
public Observable<Void> listenToBackPress() {
return subject;
}
}
Upvotes: 3