Skip to content

Instantly share code, notes, and snippets.

@pwittchen
Forked from zsxwing/RxBroadcastReceiver.java
Last active August 29, 2015 14:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pwittchen/2ecb66aca44e80a5e0eb to your computer and use it in GitHub Desktop.
Save pwittchen/2ecb66aca44e80a5e0eb to your computer and use it in GitHub Desktop.
package rx.android.observables;
import rx.Observable;
import rx.Observable.OnSubscribe;
import rx.Subscriber;
import rx.android.subscriptions.AndroidSubscriptions;
import rx.functions.Action0;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
public final class RxBroadcastReceiver {
public static class IntentWithContext {
private Context context;
private Intent intent;
public IntentWithContext(Context context, Intent intent) {
this.context = context;
this.intent = intent;
}
public Context getContext() {
return context;
}
public Intent getIntent() {
return intent;
}
}
public static Observable<IntentWithContext> fromBroadcast(final Context context, final IntentFilter filter) {
return Observable.create(new OnSubscribe<IntentWithContext>() {
@Override
public void call(final Subscriber<? super IntentWithContext> subscriber) {
ViewObservable.assertUiThread();
final BroadcastReceiver receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
subscriber.onNext(new IntentWithContext(context, intent));
}
};
context.registerReceiver(receiver, filter);
subscriber.add(AndroidSubscriptions.unsubscribeInUiThread(new Action0() {
@Override
public void call() {
context.unregisterReceiver(receiver);
}
}));
}
});
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment