Guest User

Untitled

a guest
Dec 19th, 2018
177
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.69 KB | None | 0 0
  1. class WidgetClickBroadcastReceiver : BroadcastReceiver() {
  2.  
  3. override fun onReceive(context: Context?, intent: Intent?) {
  4. if (context == null || intent == null) return
  5.  
  6. Log.i("Sira", "onReceive called")
  7.  
  8. val pendingResult = goAsync()
  9. Observable.just(true).delay(3, TimeUnit.SECONDS)
  10. .subscribeOn(Schedulers.io())
  11. .observeOn(AndroidSchedulers.mainThread())
  12. .subscribe {
  13. Log.i("Sira", "Fake completion of network call")
  14. pendingResult.finish()
  15. }
  16. }
  17.  
  18. }
  19.  
  20. package com.exmplae.testbroadcastreceiver;
  21.  
  22. import android.content.BroadcastReceiver;
  23. import android.content.Context;
  24. import android.content.Intent;
  25. import android.content.IntentFilter;
  26.  
  27. import java.util.ArrayList;
  28. import java.util.concurrent.TimeUnit;
  29.  
  30. import io.reactivex.Observable;
  31. import io.reactivex.Observer;
  32. import io.reactivex.android.schedulers.AndroidSchedulers;
  33. import io.reactivex.disposables.Disposable;
  34. import io.reactivex.schedulers.Schedulers;
  35.  
  36. public class SelfRegisteringBroadcastReceiver extends BroadcastReceiver {
  37.  
  38. private static final String TAG = "SelfRegisteringBR";
  39. public static final String TEST_ACTION1 = "TEST_ACTION1";
  40. public static final String TEST_ACTION2 = "TEST_ACTION2";
  41. private final ArrayList<String> registeredActions = new ArrayList<>();
  42. private final ILogListener logListener;
  43. private final Object registeringLock = new Object();
  44.  
  45. public static IntentFilter getIntentFilter() {
  46. IntentFilter intentFilter = new IntentFilter();
  47. intentFilter.addAction(TEST_ACTION1);
  48. intentFilter.addAction(TEST_ACTION2);
  49.  
  50. return intentFilter;
  51. }
  52.  
  53. public SelfRegisteringBroadcastReceiver(ILogListener logListener) {
  54. this.logListener = logListener;
  55. registeredActions.add(TEST_ACTION1);
  56. registeredActions.add(TEST_ACTION2);
  57. }
  58.  
  59. private void register(Context context, String action) {
  60. synchronized (registeringLock) {
  61. if (!registeredActions.contains(action)) {
  62. registeredActions.add(action);
  63. context.unregisterReceiver(this);
  64. register(context);
  65. }
  66. }
  67. }
  68.  
  69. private void register(Context context) {
  70. IntentFilter intentFilter = new IntentFilter();
  71. for (String action : registeredActions) {
  72. intentFilter.addAction(action);
  73. }
  74.  
  75. context.registerReceiver(this, intentFilter);
  76. }
  77.  
  78. private void unregister(Context context, String action) {
  79. synchronized (registeringLock) {
  80. if (registeredActions.contains(action)) {
  81. registeredActions.remove(action);
  82. context.unregisterReceiver(this);
  83. register(context);
  84. }
  85. }
  86. }
  87.  
  88. @Override
  89. public void onReceive(Context context, Intent intent) {
  90. logListener.d(TAG, "onReceive");
  91. if (intent == null) {
  92. logListener.e(TAG, "intent = null");
  93. return;
  94. }
  95.  
  96. String action = intent.getAction();
  97. if (action == null) {
  98. logListener.e(TAG, "action = null");
  99. return;
  100. }
  101.  
  102. //noinspection IfCanBeSwitch
  103. if (action.equals(TEST_ACTION1)) {
  104. doAction1(context, TEST_ACTION1);
  105. } else if (action.equals(TEST_ACTION2)) {
  106. doAction2();
  107. } else {
  108. logListener.e(TAG, "Received unknown action: " + action);
  109. }
  110. }
  111.  
  112. private void doAction1(final Context context, final String actionName) {
  113. logListener.d(TAG, "doAction1 start (and unregister)");
  114. unregister(context, actionName);
  115. Observable.just(true).delay(10, TimeUnit.SECONDS)
  116. .subscribeOn(Schedulers.io())
  117. .observeOn(AndroidSchedulers.mainThread())
  118. .subscribe(new Observer<Boolean>() {
  119. @Override
  120. public void onSubscribe(Disposable d) {
  121. logListener.d(TAG, "doAction1 - onSubscribe");
  122. }
  123.  
  124. @Override
  125. public void onNext(Boolean aBoolean) {
  126. logListener.d(TAG, "doAction1 - onNext");
  127. }
  128.  
  129. @Override
  130. public void onError(Throwable e) {
  131. logListener.e(TAG, "doAction1 - onError");
  132. }
  133.  
  134. @Override
  135. public void onComplete() {
  136. logListener.d(TAG, "doAction1 - onComplete (and register)");
  137. register(context, actionName);
  138. }
  139. });
  140.  
  141. logListener.d(TAG, "doAction1 end");
  142. }
  143.  
  144. private void doAction2() {
  145. logListener.d(TAG, "doAction2 start");
  146. Observable.just(true).delay(3, TimeUnit.SECONDS)
  147. .subscribeOn(Schedulers.io())
  148. .observeOn(AndroidSchedulers.mainThread())
  149. .subscribe(new Observer<Boolean>() {
  150. @Override
  151. public void onSubscribe(Disposable d) {
  152. logListener.d(TAG, "doAction2 - onSubscribe");
  153. }
  154.  
  155. @Override
  156. public void onNext(Boolean aBoolean) {
  157. logListener.d(TAG, "doAction2 - onNext");
  158. }
  159.  
  160. @Override
  161. public void onError(Throwable e) {
  162. logListener.e(TAG, "doAction2 - onError");
  163. }
  164.  
  165. @Override
  166. public void onComplete() {
  167. logListener.d(TAG, "doAction2 - onComplete");
  168. }
  169. });
  170.  
  171. logListener.d(TAG, "doAction2 end");
  172. }
  173.  
  174. }
Add Comment
Please, Sign In to add comment