Guest User

Untitled

a guest
Oct 24th, 2016
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.86 KB | None | 0 0
  1. import android.content.BroadcastReceiver;
  2. import android.content.Context;
  3. import android.content.Intent;
  4. import android.content.IntentFilter;
  5. import android.net.ConnectivityManager;
  6. import android.net.NetworkInfo;
  7. import android.os.Looper;
  8.  
  9. import rx.Observable;
  10. import rx.Scheduler;
  11. import rx.Subscriber;
  12. import rx.Subscription;
  13. import rx.android.schedulers.AndroidSchedulers;
  14. import rx.functions.Action0;
  15. import rx.subscriptions.Subscriptions;
  16.  
  17. public class BroadcastObservable implements Observable.OnSubscribe<Boolean> {
  18.  
  19. private final Context context;
  20.  
  21. public static Observable<Boolean> fromConnectivityManager(Context context) {
  22. return Observable.create(new BroadcastObservable(context))
  23. .share();
  24. }
  25.  
  26. public BroadcastObservable(Context context) {
  27. this.context = context;
  28. }
  29.  
  30. @Override
  31. public void call(Subscriber<? super Boolean> subscriber) {
  32. BroadcastReceiver receiver = new BroadcastReceiver() {
  33. @Override
  34. public void onReceive(Context context, Intent intent) {
  35. subscriber.onNext(isConnectedToInternet());
  36. }
  37. };
  38.  
  39. context.registerReceiver(receiver, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
  40.  
  41. subscriber.add(unsubscribeInUiThread(() -> context.unregisterReceiver(receiver)));
  42. }
  43.  
  44. private boolean isConnectedToInternet() {
  45. ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
  46. NetworkInfo networkInfo = manager.getActiveNetworkInfo();
  47. return networkInfo != null && networkInfo.isConnected();
  48. }
  49.  
  50. private static Subscription unsubscribeInUiThread(final Action0 unsubscribe) {
  51. return Subscriptions.create(() -> {
  52. if (Looper.getMainLooper() == Looper.myLooper()) {
  53. unsubscribe.call();
  54. } else {
  55. final Scheduler.Worker inner = AndroidSchedulers.mainThread().createWorker();
  56. inner.schedule(() -> {
  57. unsubscribe.call();
  58. inner.unsubscribe();
  59. });
  60. }
  61. });
  62. }
  63.  
  64. }
Add Comment
Please, Sign In to add comment