diff --git a/Core b/Core index fe92899a60..429af5bafb 160000 --- a/Core +++ b/Core @@ -1 +1 @@ -Subproject commit fe92899a60d36857c94a1990c3e221324cc9b51f +Subproject commit 429af5bafb86a96d544a896fff5398e50c67fe0a diff --git a/app/src/main/java/com/infomaniak/drive/MainApplication.kt b/app/src/main/java/com/infomaniak/drive/MainApplication.kt index 6c3084f0fd..80fac58828 100644 --- a/app/src/main/java/com/infomaniak/drive/MainApplication.kt +++ b/app/src/main/java/com/infomaniak/drive/MainApplication.kt @@ -37,7 +37,6 @@ import com.infomaniak.drive.MatomoDrive.buildTracker import com.infomaniak.drive.data.api.ErrorCode import com.infomaniak.drive.data.documentprovider.CloudStorageProvider.Companion.initRealm import com.infomaniak.drive.data.models.UiSettings -import com.infomaniak.drive.data.services.AppUpdateWorker import com.infomaniak.drive.data.services.MqttClientWrapper import com.infomaniak.drive.ui.LaunchActivity import com.infomaniak.drive.utils.AccountUtils @@ -52,6 +51,7 @@ import com.infomaniak.lib.core.utils.CoilUtils import com.infomaniak.lib.core.utils.NotificationUtilsCore.Companion.pendingIntentFlags import com.infomaniak.lib.core.utils.clearStack import com.infomaniak.lib.login.ApiToken +import com.infomaniak.lib.stores.AppUpdateScheduler import io.sentry.Sentry import io.sentry.SentryEvent import io.sentry.SentryLevel @@ -70,7 +70,7 @@ class MainApplication : Application(), ImageLoaderFactory, DefaultLifecycleObser val matomoTracker: Tracker by lazy { buildTracker() } var geniusScanIsReady = false - private val appUpdateWorkerScheduler by lazy { AppUpdateWorker.Scheduler(applicationContext) } + private val appUpdateWorkerScheduler by lazy { AppUpdateScheduler(applicationContext) } override fun onCreate() { super.onCreate() diff --git a/app/src/main/java/com/infomaniak/drive/data/services/AppUpdateWorker.kt b/app/src/main/java/com/infomaniak/drive/data/services/AppUpdateWorker.kt deleted file mode 100644 index 84a24527d1..0000000000 --- a/app/src/main/java/com/infomaniak/drive/data/services/AppUpdateWorker.kt +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Infomaniak kDrive - Android - * Copyright (C) 2023 Infomaniak Network SA - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package com.infomaniak.drive.data.services - -import android.content.Context -import androidx.concurrent.futures.CallbackToFutureAdapter -import androidx.work.* -import com.google.common.util.concurrent.ListenableFuture -import com.infomaniak.lib.core.utils.SentryLog -import com.infomaniak.lib.stores.StoreUtils -import com.infomaniak.lib.stores.StoresLocalSettings -import io.sentry.Sentry -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext -import java.util.concurrent.TimeUnit - -class AppUpdateWorker(appContext: Context, params: WorkerParameters) : ListenableWorker(appContext, params) { - - private val storesLocalSettings = StoresLocalSettings.getInstance(appContext) - - override fun startWork(): ListenableFuture { - SentryLog.i(TAG, "Work started") - - return CallbackToFutureAdapter.getFuture { completer -> - storesLocalSettings.hasAppUpdateDownloaded = false - StoreUtils.installDownloadedUpdate( - onSuccess = { completer.setResult(Result.success()) }, - onFailure = { exception -> - // This avoid the user being instantly reprompted to download update - storesLocalSettings.resetUpdateSettings() - Sentry.captureException(exception) - completer.setResult(Result.failure()) - }, - ) - } - } - - private fun CallbackToFutureAdapter.Completer.setResult(result: Result) { - set(result) - SentryLog.d(TAG, "Work finished") - } - - class Scheduler(appContext: Context) { - - private val workManager = WorkManager.getInstance(appContext) - private val storesLocalSettings = StoresLocalSettings.getInstance(appContext) - - fun scheduleWorkIfNeeded() { - if (storesLocalSettings.hasAppUpdateDownloaded) { - SentryLog.d(TAG, "Work scheduled") - - val workRequest = OneTimeWorkRequestBuilder() - .setConstraints(Constraints.Builder().setRequiresBatteryNotLow(true).build()) - // We start with a delayed duration, so that when the app quickly come back to foreground because the user - // was just switching apps, the service is not launched - .setInitialDelay(INITIAL_DELAY, TimeUnit.SECONDS) - .build() - - workManager.enqueueUniqueWork(TAG, ExistingWorkPolicy.KEEP, workRequest) - } - } - - suspend fun cancelWorkIfNeeded() = withContext(Dispatchers.IO) { - - val workInfo = workManager.getWorkInfos( - WorkQuery.Builder.fromUniqueWorkNames(listOf(TAG)) - .addStates(listOf(WorkInfo.State.BLOCKED, WorkInfo.State.ENQUEUED)) - .build(), - ).get() - - workInfo.forEach { - workManager.cancelWorkById(it.id) - SentryLog.d(TAG, "Work cancelled") - } - } - } - - companion object { - private const val TAG = "AppUpdateWorker" - private const val INITIAL_DELAY = 10L // 10s - } -} - diff --git a/app/src/main/java/com/infomaniak/drive/ui/MainActivity.kt b/app/src/main/java/com/infomaniak/drive/ui/MainActivity.kt index b02ad4f502..061466df89 100644 --- a/app/src/main/java/com/infomaniak/drive/ui/MainActivity.kt +++ b/app/src/main/java/com/infomaniak/drive/ui/MainActivity.kt @@ -85,7 +85,7 @@ import com.infomaniak.lib.core.utils.SnackbarUtils.showSnackbar import com.infomaniak.lib.core.utils.UtilsUi.generateInitialsAvatarDrawable import com.infomaniak.lib.core.utils.UtilsUi.getBackgroundColorBasedOnId import com.infomaniak.lib.core.utils.whenResultIsOk -import com.infomaniak.lib.stores.InAppUpdateManager +import com.infomaniak.lib.stores.updatemanagers.InAppUpdateManager import com.infomaniak.lib.stores.StoreUtils.launchInAppReview import io.sentry.Breadcrumb import io.sentry.Sentry