Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2ed296ca authored by Vincent Bourgmayer's avatar Vincent Bourgmayer
Browse files

Cancel all Work Enqueued when user account is removed and optimize WorkRequest registration

- Cancel all work enqueued using the work generic tag in ResetService.java
- Add method "RegisterPeriodicFullScanWorker() in CommonUtils
- Replace code in InitializerService by CommonUtils.RegisterPeriodicFullScanWorker
- Remove Remove unused import
parent e66b6083
Loading
Loading
Loading
Loading
+5 −23
Original line number Diff line number Diff line
@@ -11,10 +11,12 @@ package foundation.e.drive.services;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.app.Service;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.os.Handler;
@@ -26,17 +28,16 @@ import com.owncloud.android.lib.common.operations.OnRemoteOperationListener;
import com.owncloud.android.lib.common.operations.RemoteOperation;
import com.owncloud.android.lib.common.operations.RemoteOperationResult;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.TimeUnit;

import foundation.e.drive.models.SyncedFolder;
import foundation.e.drive.operations.CreateInitialFolderRemoteOperation;
import foundation.e.drive.receivers.ScreenOffReceiver;
import foundation.e.drive.utils.AppConstants;
import foundation.e.drive.utils.CommonUtils;

import foundation.e.drive.work.FullScanWorker;

import static com.owncloud.android.lib.resources.files.FileUtils.PATH_SEPARATOR;
@@ -45,11 +46,7 @@ import static foundation.e.drive.utils.AppConstants.MEDIA_SYNCABLE_CATEGORIES;
import static foundation.e.drive.utils.AppConstants.SETTINGS_SYNCABLE_CATEGORIES;

import androidx.annotation.Nullable;
import androidx.work.Constraints;
import androidx.work.NetworkType;
import androidx.work.PeriodicWorkRequest;
import androidx.work.WorkManager;
import androidx.work.WorkRequest;

/**
 * @author Vincent Bourgmayer
@@ -274,8 +271,7 @@ public class InitializerService extends Service implements OnRemoteOperationList
     **/
    private void doLastStep(){
        Log.i(TAG, "doLastStep()");

        Context appContext = getApplicationContext();
        final Context appContext = getApplicationContext();
        appContext.getSharedPreferences( AppConstants.SHARED_PREFERENCE_NAME,
                Context.MODE_PRIVATE )
                .edit()
@@ -283,20 +279,7 @@ public class InitializerService extends Service implements OnRemoteOperationList
                .putInt( INITIALFOLDERS_NUMBER, mSyncedFolders.size() )
                .apply();

        Constraints constraints = new Constraints.Builder()
                .setRequiredNetworkType(NetworkType.CONNECTED)
                .setRequiresBatteryNotLow(true)
                .build();

        WorkRequest periodicFullScanRequest =
                new PeriodicWorkRequest.Builder(FullScanWorker.class,
                        31, TimeUnit.MINUTES,
                        5, TimeUnit.MINUTES)
                        .setConstraints(constraints)
                        .addTag(AppConstants.WORK_GENERIC_TAG)
                        .build();

        WorkManager.getInstance(this).enqueue(periodicFullScanRequest);
        CommonUtils.registerPeriodicFullScanWorker(WorkManager.getInstance(appContext));

        //all folder have been created

@@ -311,7 +294,6 @@ public class InitializerService extends Service implements OnRemoteOperationList


        stopSelf();

    }

    @Override
+2 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import static foundation.e.drive.utils.AppConstants.INITIALFOLDERS_NUMBER;
import static foundation.e.drive.utils.AppConstants.INITIALIZATION_HAS_BEEN_DONE;

import androidx.annotation.Nullable;
import androidx.work.WorkManager;

/**
 * @author Vincent Bourgmayer
@@ -63,6 +64,7 @@ public class ResetService extends Service {
                    result = getApplicationContext().stopService( stopperIntent );
                    Log.d(TAG, "stop OperationManagerService: "+result);

                    WorkManager.getInstance(this).cancelAllWorkByTag(AppConstants.WORK_GENERIC_TAG);

                    //3. delete DB
                    result = this.deleteDatabase(DbHelper.DATABASE_NAME);
+28 −1
Original line number Diff line number Diff line
@@ -17,7 +17,6 @@ import android.content.ContentResolver;
import android.content.Context;
import android.media.MediaScannerConnection;
import android.net.ConnectivityManager;
import android.net.Network;
import android.net.NetworkInfo;
import android.net.Uri;
import android.util.Log;
@@ -31,13 +30,20 @@ import com.owncloud.android.lib.common.accounts.AccountUtils;
import com.owncloud.android.lib.resources.files.FileUtils;

import java.io.File;
import java.util.concurrent.TimeUnit;

import foundation.e.drive.receivers.ScreenOffReceiver;
import foundation.e.drive.work.FullScanWorker;

import static foundation.e.drive.utils.AppConstants.MEDIASYNC_PROVIDER_AUTHORITY;
import static foundation.e.drive.utils.AppConstants.SETTINGSYNC_PROVIDER_AUTHORITY;

import androidx.annotation.NonNull;
import androidx.work.Constraints;
import androidx.work.ExistingPeriodicWorkPolicy;
import androidx.work.NetworkType;
import androidx.work.PeriodicWorkRequest;
import androidx.work.WorkManager;


/**
@@ -293,4 +299,25 @@ public abstract class CommonUtils {
                + "\n File can be read?: " + f.canRead()
                + "\n File can be written?: " + f.canWrite();
    }

    /**
     * Enqueue a unique periodic worker to look for file to be synchronized (remote files + local files
     * @param workManager the instance of workManager
     */
    public static void registerPeriodicFullScanWorker(WorkManager workManager){
        final Constraints constraints = new Constraints.Builder()
                .setRequiredNetworkType(NetworkType.CONNECTED)
                .setRequiresBatteryNotLow(true)
                .build();

        final PeriodicWorkRequest periodicFullScanRequest =
                new PeriodicWorkRequest.Builder(FullScanWorker.class,
                        31, TimeUnit.MINUTES,
                        5, TimeUnit.MINUTES)
                        .setConstraints(constraints)
                        .addTag(AppConstants.WORK_GENERIC_TAG)
                        .build();

        workManager.enqueueUniquePeriodicWork(FullScanWorker.UNIQUE_WORK_NAME , ExistingPeriodicWorkPolicy.KEEP, periodicFullScanRequest);
    }
}
 No newline at end of file
+1 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import foundation.e.drive.services.ObserverService;
 */
public class FullScanWorker extends Worker {
    final private static String TAG = FullScanWorker.class.getSimpleName();
    final public static String UNIQUE_WORK_NAME="FullScan";

    public FullScanWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
        super(context, workerParams);