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