diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index 417deb4712..34c7dab15c 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -607,21 +607,41 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences final TwoStateOwner cowner = new TwoStateOwner(this, "liveUnseenNotify"); db.folder().liveSynchronizing().observe(this, new Observer>() { + private List lastAccounts = new ArrayList<>(); + private List lastFolders = new ArrayList<>(); + @Override public void onChanged(List syncs) { int syncing = 0; + boolean changed = false; List accounts = new ArrayList<>(); List folders = new ArrayList<>(); if (syncs != null) for (TupleFolderSync sync : syncs) { if ("syncing".equals(sync.sync_state)) syncing++; - if (sync.unified && !accounts.contains(sync.account)) + + if (sync.unified && !accounts.contains(sync.account)) { accounts.add(sync.account); + if (lastAccounts.contains(sync.account)) + lastAccounts.remove(sync.account); // same + else + changed = true; // new + } + folders.add(sync.folder); + if (lastFolders.contains(sync.folder)) + lastFolders.remove(sync.folder); // same + else + changed = true; // new } - Log.i("Syncing=" + syncing + + changed = (changed || lastAccounts.size() > 0 || lastFolders.size() > 0); // deleted + lastAccounts = accounts; + lastFolders = folders; + + Log.i("Changed=" + changed + + " syncing=" + syncing + " folders=" + folders.size() + " accounts=" + accounts.size()); @@ -630,6 +650,9 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences else cowner.stop(); + if (!changed) + return; + for (String _key : prefs.getAll().keySet()) if (_key.startsWith("widget.") && _key.endsWith(".refresh") && prefs.getBoolean(_key, false)) {