From e386a405ae0847e8b68a4cd2e252e12f6bc1d637 Mon Sep 17 00:00:00 2001 From: M66B Date: Thu, 1 Aug 2019 09:19:22 +0200 Subject: [PATCH] Serialize notification processing --- app/src/main/java/eu/faircode/email/Core.java | 33 ++++--------------- .../eu/faircode/email/ServiceSynchronize.java | 30 ++++++++++------- 2 files changed, 25 insertions(+), 38 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/Core.java b/app/src/main/java/eu/faircode/email/Core.java index 3afa0758db..336ec01577 100644 --- a/app/src/main/java/eu/faircode/email/Core.java +++ b/app/src/main/java/eu/faircode/email/Core.java @@ -77,8 +77,6 @@ import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Properties; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; import java.util.regex.Pattern; @@ -121,9 +119,6 @@ class Core { private static final long YIELD_DURATION = 200L; // milliseconds private static final long MIN_HIDE = 60 * 1000L; // milliseconds - private static final ExecutorService executor = - Executors.newSingleThreadExecutor(Helper.backgroundThreadFactory); - static void processOperations( Context context, EntityAccount account, EntityFolder folder, @@ -1918,6 +1913,8 @@ class Core { } static void notifyMessages(Context context, List messages) { + if (messages == null) + messages = new ArrayList<>(); Log.i("Notify messages=" + messages.size()); NotificationManager nm = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); @@ -2018,27 +2015,11 @@ class Core { } if (remove.size() + add.size() > 0) { - final DB db = DB.getInstance(context); - - executor.submit(new Runnable() { - @Override - public void run() { - try { - db.beginTransaction(); - - for (long id : remove) - db.message().setMessageNotifying(Math.abs(id), 0); - for (long id : add) - db.message().setMessageNotifying(Math.abs(id), (int) Math.signum(id)); - - db.setTransactionSuccessful(); - } catch (Throwable ex) { - Log.e(ex); - } finally { - db.endTransaction(); - } - } - }); + DB db = DB.getInstance(context); + for (long id : remove) + db.message().setMessageNotifying(Math.abs(id), 0); + for (long id : add) + db.message().setMessageNotifying(Math.abs(id), (int) Math.signum(id)); } } } diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index 3d59d21b18..23bc5702d4 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -168,19 +168,25 @@ public class ServiceSynchronize extends ServiceBase { }); db.message().liveUnseenNotify().observe(cowner, new Observer>() { + private ExecutorService executor = + Executors.newSingleThreadExecutor(Helper.backgroundThreadFactory); + @Override - public void onChanged(List messages) { - try { - if (messages == null) - messages = new ArrayList<>(); - Core.notifyMessages(ServiceSynchronize.this, messages); - } catch (SecurityException ex) { - Log.w(ex); - SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ServiceSynchronize.this); - prefs.edit().remove("sound").apply(); - } catch (Throwable ex) { - Log.e(ex); - } + public void onChanged(final List messages) { + executor.submit(new Runnable() { + @Override + public void run() { + try { + Core.notifyMessages(ServiceSynchronize.this, messages); + } catch (SecurityException ex) { + Log.w(ex); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(ServiceSynchronize.this); + prefs.edit().remove("sound").apply(); + } catch (Throwable ex) { + Log.e(ex); + } + } + }); } });