Hadi Satrio
Hadi Satrio

Reputation: 4292

How to create an Observable based on framework callback events?

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

Answers (1)

AndroidEx
AndroidEx

Reputation: 15824

You can use Subjects 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

Related Questions