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

Commit f8151116 authored by Fahim Salam Chowdhury's avatar Fahim Salam Chowdhury 👽
Browse files

fix: workers not initialize on boot complete

On os update, workers are not initialize by itself. We have to init the
workers on successful boot.

issue: e/backlog#7578, e/backlog#7740
parent 4592bab3
Loading
Loading
Loading
Loading
+4 −47
Original line number Original line Diff line number Diff line
@@ -12,15 +12,11 @@ import android.content.BroadcastReceiver
import android.content.Context
import android.content.Context
import android.content.Intent
import android.content.Intent
import android.content.SharedPreferences
import android.content.SharedPreferences
import androidx.work.OneTimeWorkRequest
import androidx.work.WorkManager
import foundation.e.drive.R
import foundation.e.drive.R
import foundation.e.drive.models.SyncedFolder
import foundation.e.drive.utils.AccountUtils
import foundation.e.drive.utils.AppConstants
import foundation.e.drive.utils.AppConstants
import foundation.e.drive.utils.CommonUtils
import foundation.e.drive.utils.CommonUtils
import foundation.e.drive.utils.DavClientProvider
import foundation.e.drive.utils.WorkerUtils
import foundation.e.drive.utils.RootSyncedFolderProvider
import foundation.e.drive.work.WorkRequestFactory.*
import timber.log.Timber
import timber.log.Timber


/**
/**
@@ -48,11 +44,7 @@ class AccountAddedReceiver() : BroadcastReceiver() {
            .putString(AccountManager.KEY_ACCOUNT_NAME, accountName)
            .putString(AccountManager.KEY_ACCOUNT_NAME, accountName)
            .apply()
            .apply()


        if (registerSetupWorkers(context)) {
        WorkerUtils.registerSetupWorkers(context)
            DavClientProvider.getInstance().cleanUp()

            CommonUtils.registerPeriodicUserInfoChecking(WorkManager.getInstance(context))
        }
}
}


    /**
    /**
@@ -68,7 +60,7 @@ class AccountAddedReceiver() : BroadcastReceiver() {
        prefs: SharedPreferences,
        prefs: SharedPreferences,
        context: Context
        context: Context
    ): Boolean {
    ): Boolean {
        if (isSetupAlreadyDone(prefs)) {
        if (AccountUtils.isSetupAlreadyDone(prefs)) {
            return false
            return false
        }
        }


@@ -92,44 +84,9 @@ class AccountAddedReceiver() : BroadcastReceiver() {
        return accountType != validAccountType
        return accountType != validAccountType
    }
    }


    private fun isSetupAlreadyDone(prefs: SharedPreferences): Boolean {
        return prefs.getBoolean(AppConstants.SETUP_COMPLETED, false)
    }

    private fun isExistingAccount(accountName: String, accountType: String, context: Context): Boolean {
    private fun isExistingAccount(accountName: String, accountType: String, context: Context): Boolean {
        val account = CommonUtils.getAccount(accountName, accountType, AccountManager.get(context))
        val account = CommonUtils.getAccount(accountName, accountType, AccountManager.get(context))
        return account != null
        return account != null
    }
    }


    private fun registerSetupWorkers(context: Context): Boolean {
        val rootFolderSetupWorkers = generateRootFolderSetupWorkers(context) ?: return false
        val getUserInfoRequest = getOneTimeWorkRequest(WorkType.ONE_TIME_USER_INFO, null)
        val finishSetupRequest = getOneTimeWorkRequest(WorkType.ONE_TIME_FINISH_SETUP, null)
        val workManager = WorkManager.getInstance(context)

        workManager.beginWith(getUserInfoRequest)
            .then(rootFolderSetupWorkers)
            .then(finishSetupRequest)
            .enqueue()
        return true
    }

    private fun generateRootFolderSetupWorkers(context: Context): MutableList<OneTimeWorkRequest>? {
        val rootSyncedFolderList: List<SyncedFolder> =
            RootSyncedFolderProvider.getSyncedFolderRoots(context)

        if (rootSyncedFolderList.isNullOrEmpty()) {
            return null
        }

        val workRequests: MutableList<OneTimeWorkRequest> = ArrayList()
        for (folder in rootSyncedFolderList) {
            val rootFolderSetupWorkRequest = getOneTimeWorkRequest(
                WorkType.ONE_TIME_ROOT_FOLDER_SETUP,
                folder
            )
            workRequests.add(rootFolderSetupWorkRequest)
        }
        return workRequests
    }
}
}
 No newline at end of file
+3 −0
Original line number Original line Diff line number Diff line
@@ -27,6 +27,7 @@ import androidx.work.WorkerParameters;
import foundation.e.drive.periodicScan.FullScanWorker;
import foundation.e.drive.periodicScan.FullScanWorker;
import foundation.e.drive.periodicScan.PeriodicScanWorker;
import foundation.e.drive.periodicScan.PeriodicScanWorker;
import foundation.e.drive.utils.AppConstants;
import foundation.e.drive.utils.AppConstants;
import foundation.e.drive.utils.CommonUtils;
import foundation.e.drive.work.WorkRequestFactory;
import foundation.e.drive.work.WorkRequestFactory;
import timber.log.Timber;
import timber.log.Timber;


@@ -71,6 +72,8 @@ public class FinishSetupWorker extends Worker {
        enqueueAppListGenerationWorker(workManager);
        enqueueAppListGenerationWorker(workManager);
        enqueueFullScanWorker(workManager);
        enqueueFullScanWorker(workManager);
        enqueuePeriodicFileScanWorker(workManager);
        enqueuePeriodicFileScanWorker(workManager);

        CommonUtils.registerPeriodicUserInfoChecking(workManager);
    }
    }


    private void enqueueFullScanWorker(@NonNull final WorkManager workManager) {
    private void enqueueFullScanWorker(@NonNull final WorkManager workManager) {
+13 −3
Original line number Original line Diff line number Diff line
@@ -20,8 +20,10 @@ import androidx.annotation.NonNull;
import foundation.e.drive.BuildConfig;
import foundation.e.drive.BuildConfig;
import foundation.e.drive.database.DbHelper;
import foundation.e.drive.database.DbHelper;
import foundation.e.drive.synchronization.SyncProxy;
import foundation.e.drive.synchronization.SyncProxy;
import foundation.e.drive.utils.AccountUtils;
import foundation.e.drive.utils.AppConstants;
import foundation.e.drive.utils.AppConstants;
import foundation.e.drive.utils.CommonUtils;
import foundation.e.drive.utils.CommonUtils;
import foundation.e.drive.utils.WorkerUtils;
import timber.log.Timber;
import timber.log.Timber;


/**
/**
@@ -31,10 +33,11 @@ import timber.log.Timber;
public class BootCompletedReceiver extends BroadcastReceiver {
public class BootCompletedReceiver extends BroadcastReceiver {
    private static final String DATE_SYSTEM_PROPERTY = "ro.build.date";
    private static final String DATE_SYSTEM_PROPERTY = "ro.build.date";
    private static final String PREF_VERSION_CODE = "VERSION_CODE";
    private static final String PREF_VERSION_CODE = "VERSION_CODE";

    @Override
    @Override
    public void onReceive(@NonNull Context context, @NonNull Intent intent) {
    public void onReceive(@NonNull Context context, @NonNull Intent intent) {
        final String action = intent.getAction();
        final String action = intent.getAction();
        Timber.tag(BootCompletedReceiver.class.getSimpleName()).v("onReceive(...)");
        Timber.v("onReceive(...)");
        final SharedPreferences pref = context.getSharedPreferences(AppConstants.SHARED_PREFERENCE_NAME, Context.MODE_PRIVATE);
        final SharedPreferences pref = context.getSharedPreferences(AppConstants.SHARED_PREFERENCE_NAME, Context.MODE_PRIVATE);


        if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {
        if (Intent.ACTION_BOOT_COMPLETED.equals(action)) {
@@ -44,8 +47,10 @@ public class BootCompletedReceiver extends BroadcastReceiver {
                handleOsUpdate(context);
                handleOsUpdate(context);
            }
            }


            if (pref.getBoolean(AppConstants.SETUP_COMPLETED, false)
            final boolean isSetupDone = AccountUtils.isSetupAlreadyDone(pref);
                    && BuildConfig.VERSION_CODE > pref.getInt(PREF_VERSION_CODE, 1002000)) {
            final boolean isAccountPresent = AccountUtils.isAccountPresent(context);

            if (isSetupDone && BuildConfig.VERSION_CODE > pref.getInt(PREF_VERSION_CODE, 1002000)) {
                pref.edit().putInt(PREF_VERSION_CODE, BuildConfig.VERSION_CODE).apply();
                pref.edit().putInt(PREF_VERSION_CODE, BuildConfig.VERSION_CODE).apply();
                try {
                try {
                    DbHelper.cleanSyncedFileStateTableAfterUpdate(context);
                    DbHelper.cleanSyncedFileStateTableAfterUpdate(context);
@@ -54,6 +59,10 @@ public class BootCompletedReceiver extends BroadcastReceiver {
                }
                }
            }
            }


            if (isAccountPresent) {
                WorkerUtils.INSTANCE.registerSetupWorkers(context.getApplicationContext());
            }

            SyncProxy.INSTANCE.startListeningFiles((Application) context.getApplicationContext());
            SyncProxy.INSTANCE.startListeningFiles((Application) context.getApplicationContext());
        }
        }
    }
    }
@@ -66,6 +75,7 @@ public class BootCompletedReceiver extends BroadcastReceiver {
    /**
    /**
     * Force reinitialization, upgrade of DB in case of OS update
     * Force reinitialization, upgrade of DB in case of OS update
     * todo remove when setPersistentFlag=true will be removed
     * todo remove when setPersistentFlag=true will be removed
     *
     * @param context Context used to start InitializationService
     * @param context Context used to start InitializationService
     */
     */
    private void handleOsUpdate(@NonNull Context context) {
    private void handleOsUpdate(@NonNull Context context) {
+14 −0
Original line number Original line Diff line number Diff line
@@ -20,6 +20,8 @@ import static foundation.e.drive.utils.AppConstants.ACCOUNT_DATA_GROUPS;


import android.accounts.Account;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.accounts.AccountManager;
import android.content.Context;
import android.content.SharedPreferences;


import androidx.annotation.NonNull;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.Nullable;
@@ -27,6 +29,8 @@ import androidx.annotation.Nullable;
import java.util.Arrays;
import java.util.Arrays;
import java.util.Optional;
import java.util.Optional;


import foundation.e.drive.R;

public class AccountUtils {
public class AccountUtils {




@@ -48,4 +52,14 @@ public class AccountUtils {
                .filter(group -> group.contains("premium-"))
                .filter(group -> group.contains("premium-"))
                .findFirst();
                .findFirst();
    }
    }

    public static boolean isSetupAlreadyDone(@NonNull SharedPreferences preferences) {
        return preferences.getBoolean(AppConstants.SETUP_COMPLETED, false);
    }

    public static boolean isAccountPresent(@NonNull Context context) {
        AccountManager accountManager = AccountManager.get(context.getApplicationContext());
        Account[] accountList = accountManager.getAccountsByType(context.getString(R.string.eelo_account_type));
        return accountList != null && accountList.length > 0;
    }
}
}
+1 −1
Original line number Original line Diff line number Diff line
@@ -38,7 +38,7 @@ object RootSyncedFolderProvider {
    private val REMOTE_ROM_SETTINGS_PATH = PATH_SEPARATOR + "Devices" + PATH_SEPARATOR + BRAND + "_" + MODEL + "_" + Build.getSerial() + "/rom_settings/"
    private val REMOTE_ROM_SETTINGS_PATH = PATH_SEPARATOR + "Devices" + PATH_SEPARATOR + BRAND + "_" + MODEL + "_" + Build.getSerial() + "/rom_settings/"
    private val REMOTE_APP_LIST_PATH = REMOTE_ROM_SETTINGS_PATH + "app_list/"
    private val REMOTE_APP_LIST_PATH = REMOTE_ROM_SETTINGS_PATH + "app_list/"


    fun getSyncedFolderRoots(context : Context): ArrayList<SyncedFolder> {
    fun getSyncedFolderRoots(context : Context): List<SyncedFolder> {
        val syncedFolders = ArrayList<SyncedFolder>()
        val syncedFolders = ArrayList<SyncedFolder>()
        val categories = getSyncableCategories()
        val categories = getSyncableCategories()


Loading