Niedzielski has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/356955 )

Change subject: Hygiene: refactor event bus thread concerns to separate class
......................................................................

Hygiene: refactor event bus thread concerns to separate class

Change-Id: I88f2a27706ed242e1fb04251cd0096b52a3f17c3
---
M app/src/main/java/org/wikipedia/WikipediaApp.java
A app/src/main/java/org/wikipedia/concurrency/ThreadSafeBus.java
M app/src/main/java/org/wikipedia/readinglist/sync/ReadingListSynchronizer.java
3 files changed, 38 insertions(+), 7 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia 
refs/changes/55/356955/1

diff --git a/app/src/main/java/org/wikipedia/WikipediaApp.java 
b/app/src/main/java/org/wikipedia/WikipediaApp.java
index 57cc363..c6ca95d 100644
--- a/app/src/main/java/org/wikipedia/WikipediaApp.java
+++ b/app/src/main/java/org/wikipedia/WikipediaApp.java
@@ -23,6 +23,7 @@
 import org.wikipedia.analytics.FunnelManager;
 import org.wikipedia.analytics.SessionFunnel;
 import org.wikipedia.auth.AccountUtil;
+import org.wikipedia.concurrency.ThreadSafeBus;
 import org.wikipedia.connectivity.NetworkConnectivityReceiver;
 import org.wikipedia.crash.CrashReporter;
 import org.wikipedia.crash.hockeyapp.HockeyAppCrashReporter;
@@ -148,7 +149,7 @@
         // See Javadocs and 
http://developer.android.com/tools/support-library/index.html#rev23-4-0
         AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
 
-        bus = new Bus();
+        bus = new ThreadSafeBus();
 
         ViewAnimations.init(getResources());
         currentTheme = unmarshalCurrentTheme();
diff --git a/app/src/main/java/org/wikipedia/concurrency/ThreadSafeBus.java 
b/app/src/main/java/org/wikipedia/concurrency/ThreadSafeBus.java
new file mode 100644
index 0000000..568b771
--- /dev/null
+++ b/app/src/main/java/org/wikipedia/concurrency/ThreadSafeBus.java
@@ -0,0 +1,32 @@
+package org.wikipedia.concurrency;
+
+import android.os.Handler;
+import android.os.Looper;
+import android.support.annotation.NonNull;
+
+import com.squareup.otto.Bus;
+
+// https://github.com/square/otto/issues/38
+public class ThreadSafeBus extends Bus {
+    private final Handler handler = new Handler(Looper.getMainLooper());
+
+    public ThreadSafeBus() {
+        super();
+    }
+
+    public ThreadSafeBus(String identifier) {
+        super(identifier);
+    }
+
+    @Override public void post(@NonNull final Object event) {
+        if (Looper.myLooper() == Looper.getMainLooper()) {
+            super.post(event);
+        } else {
+            handler.post(new Runnable() {
+                @Override public void run() {
+                    ThreadSafeBus.super.post(event);
+                }
+            });
+        }
+    }
+}
diff --git 
a/app/src/main/java/org/wikipedia/readinglist/sync/ReadingListSynchronizer.java 
b/app/src/main/java/org/wikipedia/readinglist/sync/ReadingListSynchronizer.java
index 80fc7d9..74af9a0 100644
--- 
a/app/src/main/java/org/wikipedia/readinglist/sync/ReadingListSynchronizer.java
+++ 
b/app/src/main/java/org/wikipedia/readinglist/sync/ReadingListSynchronizer.java
@@ -125,12 +125,10 @@
         Prefs.setReadingListSyncRev(Prefs.getReadingListSyncRev() + 1);
     }
 
-    private void postEvent(@NonNull final Object event) {
-        new Handler(Looper.getMainLooper()).post(new Runnable() {
-            @Override public void run() {
-                WikipediaApp.getInstance().getBus().post(event);
-            }
-        });
+    private void postEvent(@NonNull Object event) {
+        // Note: this method posts from a background thread but subscribers 
expect events to be
+        // received on the main thead.
+        WikipediaApp.getInstance().getBus().post(event);
     }
 
     private void reconcileAsRightJoin(@NonNull RemoteReadingLists 
remoteReadingLists) {

-- 
To view, visit https://gerrit.wikimedia.org/r/356955
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I88f2a27706ed242e1fb04251cd0096b52a3f17c3
Gerrit-PatchSet: 1
Gerrit-Project: apps/android/wikipedia
Gerrit-Branch: master
Gerrit-Owner: Niedzielski <sniedziel...@wikimedia.org>
Gerrit-Reviewer: Sniedzielski <sniedziel...@wikimedia.org>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to