From 952d93bf17c67f9f84b8129779700b2a2520f12f Mon Sep 17 00:00:00 2001 From: M66B Date: Sat, 3 Aug 2019 15:36:51 +0200 Subject: [PATCH] Keep cleanup --- .../java/eu/faircode/email/ApplicationEx.java | 10 ++----- .../eu/faircode/email/ReceiverAutoStart.java | 16 +---------- .../eu/faircode/email/ServiceSynchronize.java | 4 --- .../java/eu/faircode/email/WorkerCleanup.java | 28 +++++++++++++++++-- 4 files changed, 29 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/eu/faircode/email/ApplicationEx.java b/app/src/main/java/eu/faircode/email/ApplicationEx.java index 8b1e6419e3..b333e8072e 100644 --- a/app/src/main/java/eu/faircode/email/ApplicationEx.java +++ b/app/src/main/java/eu/faircode/email/ApplicationEx.java @@ -106,14 +106,8 @@ public class ApplicationEx extends Application { MessageHelper.setSystemProperties(this); ContactInfo.init(this); - try { - WorkerWatchdog.init(this); - } catch (Throwable ex) { - // Incorrect: - // java.lang.RuntimeException: Unable to create application eu.faircode.email.ApplicationEx: - // java.lang.IllegalStateException: WorkManager is not initialized properly. - Log.e(ex); - } + WorkerWatchdog.init(this); + WorkerCleanup.queue(this); } @Override diff --git a/app/src/main/java/eu/faircode/email/ReceiverAutoStart.java b/app/src/main/java/eu/faircode/email/ReceiverAutoStart.java index da4f1fb8bb..bfbd6c8d35 100644 --- a/app/src/main/java/eu/faircode/email/ReceiverAutoStart.java +++ b/app/src/main/java/eu/faircode/email/ReceiverAutoStart.java @@ -26,8 +26,6 @@ import android.content.SharedPreferences; import androidx.preference.PreferenceManager; -import static android.os.Process.THREAD_PRIORITY_BACKGROUND; - public class ReceiverAutoStart extends BroadcastReceiver { @Override public void onReceive(final Context context, Intent intent) { @@ -40,19 +38,7 @@ public class ReceiverAutoStart extends BroadcastReceiver { ServiceSynchronize.boot(context); ServiceSend.boot(context); - - Thread cleanup = new Thread(new Runnable() { - @Override - public void run() { - try { - WorkerCleanup.cleanup(context, true); - } catch (Throwable ex) { - Log.e(ex); - } - } - }); - cleanup.setPriority(THREAD_PRIORITY_BACKGROUND); - cleanup.start(); + WorkerCleanup.queueOnce(context); } } } diff --git a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java index fee4963651..46e1ee6a3f 100644 --- a/app/src/main/java/eu/faircode/email/ServiceSynchronize.java +++ b/app/src/main/java/eu/faircode/email/ServiceSynchronize.java @@ -223,8 +223,6 @@ public class ServiceSynchronize extends ServiceBase { WidgetUnified.update(ServiceSynchronize.this); } }); - - WorkerCleanup.queue(this); } @Override @@ -241,8 +239,6 @@ public class ServiceSynchronize extends ServiceBase { Core.notifyReset(this); - WorkerCleanup.cancel(this); - stopForeground(true); NotificationManager nm = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); diff --git a/app/src/main/java/eu/faircode/email/WorkerCleanup.java b/app/src/main/java/eu/faircode/email/WorkerCleanup.java index 7a84235a0c..23bec5480b 100644 --- a/app/src/main/java/eu/faircode/email/WorkerCleanup.java +++ b/app/src/main/java/eu/faircode/email/WorkerCleanup.java @@ -24,7 +24,9 @@ import android.content.SharedPreferences; import androidx.annotation.NonNull; import androidx.preference.PreferenceManager; +import androidx.work.Data; import androidx.work.ExistingPeriodicWorkPolicy; +import androidx.work.OneTimeWorkRequest; import androidx.work.PeriodicWorkRequest; import androidx.work.WorkManager; import androidx.work.Worker; @@ -37,6 +39,8 @@ import java.util.Date; import java.util.List; import java.util.concurrent.TimeUnit; +import static android.os.Process.THREAD_PRIORITY_BACKGROUND; + public class WorkerCleanup extends Worker { private static final int CLEANUP_INTERVAL = 4; // hours private static final long KEEP_FILES_DURATION = 3600 * 1000L; // milliseconds @@ -53,7 +57,7 @@ public class WorkerCleanup extends Worker { @Override public Result doWork() { Log.i("Running " + getName()); - cleanup(getApplicationContext(), false); + cleanup(getApplicationContext(), getInputData().getBoolean("manual", false)); return Result.success(); } @@ -61,6 +65,7 @@ public class WorkerCleanup extends Worker { DB db = DB.getInstance(context); try { Log.i("Start cleanup manual=" + manual); + Thread.currentThread().setPriority(THREAD_PRIORITY_BACKGROUND); if (manual) { // Check message files @@ -175,9 +180,10 @@ public class WorkerCleanup extends Worker { PeriodicWorkRequest workRequest = new PeriodicWorkRequest.Builder(WorkerCleanup.class, CLEANUP_INTERVAL, TimeUnit.HOURS) + .setInitialDelay(CLEANUP_INTERVAL, TimeUnit.HOURS) .build(); WorkManager.getInstance(context) - .enqueueUniquePeriodicWork(getName(), ExistingPeriodicWorkPolicy.REPLACE, workRequest); + .enqueueUniquePeriodicWork(getName(), ExistingPeriodicWorkPolicy.KEEP, workRequest); Log.i("Queued " + getName()); } catch (IllegalStateException ex) { @@ -186,6 +192,24 @@ public class WorkerCleanup extends Worker { } } + static void queueOnce(Context context) { + try { + Log.i("Queuing " + getName() + " once"); + + Data data = new Data.Builder().putBoolean("manual", true).build(); + + OneTimeWorkRequest workRequest = new OneTimeWorkRequest.Builder(WorkerCleanup.class) + .setInputData(data) + .build(); + WorkManager.getInstance(context).enqueue(workRequest); + + Log.i("Queued " + getName() + " once"); + } catch (IllegalStateException ex) { + // https://issuetracker.google.com/issues/138465476 + Log.w(ex); + } + } + static void cancel(Context context) { try { Log.i("Cancelling " + getName());