diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index 5c64f92e..a6bccadd 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -122,6 +122,7 @@ import androidx.localbroadcastmanager.content.LocalBroadcastManager; import static android.os.Process.THREAD_PRIORITY_BACKGROUND; public class ServiceSynchronize extends LifecycleService { + private TupleAccountStats stats = null; private final Object lock = new Object(); private ServiceManager serviceManager = new ServiceManager(); @@ -146,7 +147,6 @@ public class ServiceSynchronize extends LifecycleService { public void onCreate() { Log.i(Helper.TAG, "Service create version=" + BuildConfig.VERSION_NAME); super.onCreate(); - startForeground(NOTIFICATION_SYNCHRONIZE, getNotificationService(0, 0, 0).build()); // Listen for network changes ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); @@ -155,18 +155,46 @@ public class ServiceSynchronize extends LifecycleService { // Removed because of Android VPN service // builder.addCapability(NetworkCapabilities.NET_CAPABILITY_VALIDATED); cm.registerNetworkCallback(builder.build(), serviceManager); + } + + @Override + public void onDestroy() { + Log.i(Helper.TAG, "Service destroy"); + + ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); + cm.unregisterNetworkCallback(serviceManager); + + serviceManager.onLost(null); + + stopForeground(true); + + NotificationManager nm = getSystemService(NotificationManager.class); + nm.cancel(NOTIFICATION_SYNCHRONIZE); + + super.onDestroy(); + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + Log.i(Helper.TAG, "Service command intent=" + intent); + super.onStartCommand(intent, flags, startId); + + startForeground(NOTIFICATION_SYNCHRONIZE, getNotificationService(0, 0, 0).build()); DB db = DB.getInstance(this); + db.account().liveStats().removeObservers(this); db.account().liveStats().observe(this, new Observer() { @Override public void onChanged(@Nullable TupleAccountStats stats) { + ServiceSynchronize.this.stats = stats; NotificationManager nm = getSystemService(NotificationManager.class); nm.notify(NOTIFICATION_SYNCHRONIZE, getNotificationService(stats.accounts, stats.operations, stats.unsent).build()); } }); + db.message().liveUnseenUnified().removeObservers(this); db.message().liveUnseenUnified().observe(this, new Observer>() { private List notifying = new ArrayList<>(); @@ -204,29 +232,6 @@ public class ServiceSynchronize extends LifecycleService { notifying = all; } }); - } - - @Override - public void onDestroy() { - Log.i(Helper.TAG, "Service destroy"); - - ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE); - cm.unregisterNetworkCallback(serviceManager); - - serviceManager.onLost(null); - - stopForeground(true); - - NotificationManager nm = getSystemService(NotificationManager.class); - nm.cancel(NOTIFICATION_SYNCHRONIZE); - - super.onDestroy(); - } - - @Override - public int onStartCommand(Intent intent, int flags, int startId) { - Log.i(Helper.TAG, "Service command intent=" + intent); - super.onStartCommand(intent, flags, startId); if (intent != null) { String action = intent.getAction();