From ffaf4bd22ce285ffe1b00251589f74c09cee4166 Mon Sep 17 00:00:00 2001 From: M66B Date: Sun, 8 May 2022 18:23:28 +0200 Subject: [PATCH] Widget sync: show connected state --- .../eu/faircode/email/ServiceSynchronize.java | 18 +++++++++++++++--- .../java/eu/faircode/email/WidgetSync.java | 2 ++ 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index 05fe66c26e..c9b5a2a4a9 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -241,6 +241,7 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences liveAccountNetworkState.observeForever(new Observer>() { private boolean fts = false; + private boolean lastConnected = false; private int lastEventId = 0; private int lastQuitId = -1; private List initialized = new ArrayList<>(); @@ -264,6 +265,7 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences liveAccountNetworkState.removeObserver(this); } else { int accounts = 0; + int enabled = 0; int operations = 0; boolean event = false; boolean runService = false; @@ -275,9 +277,12 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences } if (current.accountState.shouldRun(current.enabled)) runService = true; - if (!current.accountState.isTransient(ServiceSynchronize.this) && - ("connected".equals(current.accountState.state) || current.accountState.backoff_until != null)) - accounts++; + if (!current.accountState.isTransient(ServiceSynchronize.this)) { + if (current.accountState.isEnabled(current.enabled)) + enabled++; + if ("connected".equals(current.accountState.state) || current.accountState.backoff_until != null) + accounts++; + } if (current.accountState.synchronize) operations += current.accountState.operations; @@ -382,6 +387,13 @@ public class ServiceSynchronize extends ServiceBase implements SharedPreferences } } + boolean connected = (enabled > 0 && accounts == enabled); + if (lastConnected != connected) { + lastConnected = connected; + prefs.edit().putBoolean("connected", connected).apply(); + WidgetSync.update(ServiceSynchronize.this); + } + if (event) { lastEventId++; EntityLog.log(ServiceSynchronize.this, EntityLog.Type.Scheduling, diff --git a/app/src/main/java/eu/faircode/email/WidgetSync.java b/app/src/main/java/eu/faircode/email/WidgetSync.java index 56430cff10..bb68733ff3 100644 --- a/app/src/main/java/eu/faircode/email/WidgetSync.java +++ b/app/src/main/java/eu/faircode/email/WidgetSync.java @@ -39,6 +39,7 @@ public class WidgetSync extends AppWidgetProvider { public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, final int[] appWidgetIds) { SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); boolean enabled = prefs.getBoolean("enabled", true); + boolean connected = prefs.getBoolean("connected", false); try { Intent intent = new Intent(context, ServiceSynchronize.class) @@ -62,6 +63,7 @@ public class WidgetSync extends AppWidgetProvider { views.setOnClickPendingIntent(R.id.ivSync, pi); views.setImageViewResource(R.id.ivSync, enabled ? R.drawable.twotone_sync_24 : R.drawable.twotone_sync_disabled_24); + views.setFloat(R.id.ivSync, "setAlpha", !enabled || connected ? 1.0f : Helper.LOW_LIGHT); if (!daynight && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) views.setColorStateListAttr(R.id.background, "setBackgroundTintList", 0);