From 195b40a33008e76af768d3bd2fde44c69e416bf4 Mon Sep 17 00:00:00 2001 From: M66B Date: Mon, 9 Dec 2019 12:00:41 +0100 Subject: [PATCH] Ensure main thread --- .../eu/faircode/email/ServiceSynchronize.java | 24 +++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index 32bf49a72e..0d55bac68f 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -34,6 +34,7 @@ import android.net.NetworkInfo; import android.net.NetworkRequest; import android.os.Build; import android.os.Handler; +import android.os.Looper; import android.os.PowerManager; import android.service.notification.StatusBarNotification; import android.text.TextUtils; @@ -135,7 +136,26 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences post(false, lastNetworkState, lastAccountStates); } + private void postDestroy() { + postValue(null); + } + private void post(boolean reload, ConnectionHelper.NetworkState networkState, List accountStates) { + if (Looper.myLooper() == Looper.getMainLooper()) + _post(reload, networkState, accountStates); + else { + // Some Android versions call onDestroy not on the main thread + Log.e("### not main thread state=" + (accountStates == null ? null : accountStates.size())); + new Handler(Looper.getMainLooper()).post(new Runnable() { + @Override + public void run() { + _post(reload, networkState, accountStates); + } + }); + } + } + + private void _post(boolean reload, ConnectionHelper.NetworkState networkState, List accountStates) { if (networkState != null && accountStates != null) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ServiceSynchronize.this); boolean enabled = prefs.getBoolean("enabled", true); @@ -155,10 +175,6 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences postValue(result); } } - - private void postDestroy() { - postValue(null); - } } @Override