explicitly run backup in foreground service

Daniel Gultsch created

Change summary

src/main/AndroidManifest.xml                                                |  4 
src/main/java/eu/siacs/conversations/receiver/WorkManagerEventReceiver.java | 32 
src/main/java/eu/siacs/conversations/worker/ExportBackupWorker.java         | 23 
3 files changed, 10 insertions(+), 49 deletions(-)

Detailed changes

src/main/AndroidManifest.xml 🔗

@@ -142,10 +142,6 @@
             </intent-filter>
         </service>
 
-        <receiver
-            android:name=".receiver.WorkManagerEventReceiver"
-            android:exported="false" />
-
         <receiver
             android:name=".receiver.SystemEventReceiver"
             android:exported="false">

src/main/java/eu/siacs/conversations/receiver/WorkManagerEventReceiver.java 🔗

@@ -1,32 +0,0 @@
-package eu.siacs.conversations.receiver;
-
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.util.Log;
-
-import androidx.work.WorkManager;
-
-import com.google.common.base.Strings;
-
-import eu.siacs.conversations.Config;
-import eu.siacs.conversations.ui.fragment.settings.BackupSettingsFragment;
-
-public class WorkManagerEventReceiver extends BroadcastReceiver {
-
-    public static final String ACTION_STOP_BACKUP = "eu.siacs.conversations.receiver.STOP_BACKUP";
-
-    @Override
-    public void onReceive(final Context context, final Intent intent) {
-        final var action = Strings.nullToEmpty(intent == null ? null : intent.getAction());
-        if (action.equals(ACTION_STOP_BACKUP)) {
-            stopBackup(context);
-        }
-    }
-
-    private void stopBackup(final Context context) {
-        Log.d(Config.LOGTAG, "trying to stop one-off backup worker");
-        final var workManager = WorkManager.getInstance(context);
-        workManager.cancelUniqueWork(BackupSettingsFragment.CREATE_ONE_OFF_BACKUP);
-    }
-}

src/main/java/eu/siacs/conversations/worker/ExportBackupWorker.java 🔗

@@ -17,6 +17,7 @@ import android.util.Log;
 import androidx.annotation.NonNull;
 import androidx.core.app.NotificationCompat;
 import androidx.work.ForegroundInfo;
+import androidx.work.WorkManager;
 import androidx.work.Worker;
 import androidx.work.WorkerParameters;
 
@@ -33,7 +34,6 @@ import eu.siacs.conversations.entities.Conversation;
 import eu.siacs.conversations.entities.Message;
 import eu.siacs.conversations.persistance.DatabaseBackend;
 import eu.siacs.conversations.persistance.FileBackend;
-import eu.siacs.conversations.receiver.WorkManagerEventReceiver;
 import eu.siacs.conversations.utils.BackupFileHeader;
 import eu.siacs.conversations.utils.Compatibility;
 
@@ -95,6 +95,7 @@ public class ExportBackupWorker extends Worker {
     @NonNull
     @Override
     public Result doWork() {
+        setForegroundAsync(getForegroundInfo());
         final List<File> files;
         try {
             files = export();
@@ -223,18 +224,14 @@ public class ExportBackupWorker extends Worker {
                         IV,
                         salt);
         final var notification = getNotification();
-        if (!recurringBackup) {
-            final var cancel = new Intent(context, WorkManagerEventReceiver.class);
-            cancel.setAction(WorkManagerEventReceiver.ACTION_STOP_BACKUP);
-            final var cancelPendingIntent =
-                    PendingIntent.getBroadcast(context, 197, cancel, PENDING_INTENT_FLAGS);
-            notification.addAction(
-                    new NotificationCompat.Action.Builder(
-                                    R.drawable.ic_cancel_24dp,
-                                    context.getString(R.string.cancel),
-                                    cancelPendingIntent)
-                            .build());
-        }
+        final var cancelPendingIntent =
+                WorkManager.getInstance(context).createCancelPendingIntent(getId());
+        notification.addAction(
+                new NotificationCompat.Action.Builder(
+                                R.drawable.ic_cancel_24dp,
+                                context.getString(R.string.cancel),
+                                cancelPendingIntent)
+                        .build());
         final Progress progress = new Progress(notification, max, count);
         final File directory = file.getParentFile();
         if (directory != null && directory.mkdirs()) {