diff --git a/Core b/Core index e57d06f688..799eddcd13 160000 --- a/Core +++ b/Core @@ -1 +1 @@ -Subproject commit e57d06f68869974737aa71daaffb933b3c8319fa +Subproject commit 799eddcd13dd4471553eee6b32d54633cb535320 diff --git a/app/src/androidTest/java/com/infomaniak/drive/KDriveTest.kt b/app/src/androidTest/java/com/infomaniak/drive/KDriveTest.kt index 648d7819c6..85b32d71c8 100644 --- a/app/src/androidTest/java/com/infomaniak/drive/KDriveTest.kt +++ b/app/src/androidTest/java/com/infomaniak/drive/KDriveTest.kt @@ -103,7 +103,7 @@ open class KDriveTest { if (!uiRealm.isClosed) uiRealm.close() Realm.deleteRealm(FileController.getRealmConfiguration(userDrive)) if (!Env.USE_CURRENT_USER) { - runBlocking { AccountUtils.removeUser(context, user) } + runBlocking { AccountUtils.removeUser(user.id) } } } diff --git a/app/src/androidTest/java/com/infomaniak/drive/ui/MenuUiTest.kt b/app/src/androidTest/java/com/infomaniak/drive/ui/MenuUiTest.kt index bd19196b3a..e93cfaaca2 100644 --- a/app/src/androidTest/java/com/infomaniak/drive/ui/MenuUiTest.kt +++ b/app/src/androidTest/java/com/infomaniak/drive/ui/MenuUiTest.kt @@ -45,7 +45,7 @@ class MenuUiTest : KDriveUiTest() { @DisplayName("Check UI to add a new kdrive user then log him off") fun testAddUser() { // Remove the other user if he's already in the database - runBlocking { AccountUtils.getUserById(Env.NEW_USER_ID)?.let { removeUser(context, it) } } + runBlocking { AccountUtils.getUserById(Env.NEW_USER_ID)?.let { removeUser(it.id) } } swipeDownNestedScrollView() getDeviceViewById("changeUserIcon").clickAndWaitForNewWindow() getDeviceViewById("addUser").clickAndWaitForNewWindow() diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 5ad795bd5f..815bad06bb 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -78,10 +78,10 @@ + when (state) { + RestoreFromBackupManager.State.RestoringFromBackup -> { + setContentView(binding.root) + } + is RestoreFromBackupManager.State.RestoringFromBackupFailed -> { + setContent { MaterialThemeFromXml { RestoringFromBackupFailedScreen(state) } } + } + RestoreFromBackupManager.State.Settled -> emit(Unit) + } + }.first() + } + private suspend fun handleLaunchArgs() { when (val type = LaunchArgsType.from(navigationArgs, intent)) { is Deeplink -> handleDeeplink(type) diff --git a/app/src/main/java/com/infomaniak/drive/ui/menu/settings/SyncSettingsActivity.kt b/app/src/main/java/com/infomaniak/drive/ui/menu/settings/SyncSettingsActivity.kt index 2cb73f5cae..56ecddb0c5 100644 --- a/app/src/main/java/com/infomaniak/drive/ui/menu/settings/SyncSettingsActivity.kt +++ b/app/src/main/java/com/infomaniak/drive/ui/menu/settings/SyncSettingsActivity.kt @@ -34,10 +34,10 @@ import androidx.lifecycle.lifecycleScope import com.google.android.material.datepicker.CalendarConstraints import com.google.android.material.datepicker.DateValidatorPointBackward import com.google.android.material.datepicker.MaterialDatePicker +import com.infomaniak.core.common.extensions.isNightModeEnabled import com.infomaniak.core.common.utils.FORMAT_DATE_CLEAR_MONTH import com.infomaniak.core.common.utils.format import com.infomaniak.core.common.utils.startOfTheDay -import com.infomaniak.core.common.extensions.isNightModeEnabled import com.infomaniak.core.legacy.utils.context import com.infomaniak.core.legacy.utils.startAppSettingsConfig import com.infomaniak.core.legacy.utils.whenResultIsOk @@ -453,7 +453,7 @@ class SyncSettingsActivity : BaseActivity() { SentryLog.i(TAG, "appSettings updated") if (oldSyncSettings?.driveId != syncSettings.driveId) { UploadFile.deleteAllSyncFile() - applicationContext.cancelPeriodicSync() + cancelPeriodicSync() SentryLog.i(TAG, "New drive detected -> old sync files has been deleted") } applicationContext.activateAutoSync(syncSettings) diff --git a/app/src/main/java/com/infomaniak/drive/utils/AccountUtils.kt b/app/src/main/java/com/infomaniak/drive/utils/AccountUtils.kt index f204169db3..1f886be728 100644 --- a/app/src/main/java/com/infomaniak/drive/utils/AccountUtils.kt +++ b/app/src/main/java/com/infomaniak/drive/utils/AccountUtils.kt @@ -59,9 +59,12 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext import okhttp3.OkHttpClient +import splitties.init.appCtx import com.infomaniak.core.network.networking.HttpClient.okHttpClient as unauthenticatedHttpClient -object AccountUtils : CredentialManager() { +object AccountUtils : CredentialManager( + userDataCleanableList = { MainApplication.userDataCleanableList } +) { private const val DISABLE_AUTO_SYNC = "AccountUtils: disableAutoSync" @@ -113,12 +116,10 @@ object AccountUtils : CredentialManager() { return currentUser } - suspend fun addUser(user: User) { + override suspend fun addUser(user: User) { currentDriveId = -1 currentUser = user - val userId = user.id.toLong() - MainApplication.userDataCleanableList.forEach { it.resetForUser(userId) } - userDatabase.userDao().insert(user) + super.addUser(user) } suspend fun updateCurrentUserAndDrives( @@ -165,7 +166,7 @@ object AccountUtils : CredentialManager() { for (driveRemoved in driveRemovedList) { if (appSyncSettings?.userId == user.id && appSyncSettings.driveId == driveRemoved.id) { Sentry.captureMessage(DISABLE_AUTO_SYNC) - context.disableAutoSync() + disableAutoSync() } if (currentDriveId == driveRemoved.id) { getFirstDrive() @@ -220,31 +221,29 @@ object AccountUtils : CredentialManager() { } } - MyKSuiteDataUtils.deleteData(user.id) - removeUser(context, user) + removeUser(user.id) } - suspend fun removeUser(context: Context, user: User) { - val userId = user.id.toLong() - MainApplication.userDataCleanableList.forEach { it.resetForUser(userId) } - userDatabase.userDao().delete(user) - FileController.deleteUserDriveFiles(user.id) + override suspend fun removeUser(userId: Int) { + MyKSuiteDataUtils.deleteData(userId) + super.removeUser(userId) + FileController.deleteUserDriveFiles(userId) - if (UploadFile.getAppSyncSettings()?.userId == user.id) { + if (UploadFile.getAppSyncSettings()?.userId == userId) { Sentry.captureMessage(DISABLE_AUTO_SYNC) - context.disableAutoSync() + disableAutoSync() } - if (currentUserId == user.id) { + if (currentUserId == userId) { requestCurrentUser() currentDriveId = -1 - resetApp(context) + resetApp(appCtx) scope.launch(Dispatchers.Main) { reloadApp?.invoke(bundleOf()) } - CloudStorageProvider.notifyRootsChanged(context) + CloudStorageProvider.notifyRootsChanged(appCtx) } } @@ -281,7 +280,7 @@ object AccountUtils : CredentialManager() { if (isEnableAppSync()) { Sentry.captureMessage(DISABLE_AUTO_SYNC) - context.disableAutoSync() + disableAutoSync() } // Delete all app data diff --git a/app/src/main/java/com/infomaniak/drive/utils/SyncUtils.kt b/app/src/main/java/com/infomaniak/drive/utils/SyncUtils.kt index becfb86975..89ba673ef2 100644 --- a/app/src/main/java/com/infomaniak/drive/utils/SyncUtils.kt +++ b/app/src/main/java/com/infomaniak/drive/utils/SyncUtils.kt @@ -32,6 +32,7 @@ import com.infomaniak.drive.data.services.PeriodicUploadWorker import com.infomaniak.drive.data.services.UploadWorker import com.infomaniak.drive.data.sync.MediaObserverWorker import kotlinx.coroutines.flow.first +import splitties.init.appCtx object SyncUtils { @@ -89,9 +90,9 @@ object SyncUtils { } } - fun Context.cancelPeriodicSync() { - WorkManager.getInstance(this).cancelUniqueWork(UploadWorker.TAG) - WorkManager.getInstance(this).cancelUniqueWork(PeriodicUploadWorker.TAG) + fun cancelPeriodicSync() { + WorkManager.getInstance(appCtx).cancelUniqueWork(UploadWorker.TAG) + WorkManager.getInstance(appCtx).cancelUniqueWork(PeriodicUploadWorker.TAG) } suspend fun Context.activateSyncIfNeeded() { @@ -112,8 +113,8 @@ object SyncUtils { } } - private fun Context.cancelContentObserver() { - MediaObserverWorker.cancelWork(applicationContext) + private fun cancelContentObserver() { + MediaObserverWorker.cancelWork(appCtx) } suspend fun Context.activateAutoSync(syncSettings: SyncSettings) { @@ -122,7 +123,7 @@ object SyncUtils { startPeriodicSync(context = this, syncSettings.syncInterval) } - fun Context.disableAutoSync() { + fun disableAutoSync() { UploadFile.removeAppSyncSettings() MediaFolder.deleteAll() cancelContentObserver() diff --git a/app/src/main/res/xml/backup_rules.xml b/app/src/main/res/xml/backup_rules.xml new file mode 100644 index 0000000000..850533ab12 --- /dev/null +++ b/app/src/main/res/xml/backup_rules.xml @@ -0,0 +1,21 @@ + + + + + diff --git a/app/src/main/res/xml/data_extraction_rules.xml b/app/src/main/res/xml/data_extraction_rules.xml index f87bbaca7a..665fc2d0dc 100644 --- a/app/src/main/res/xml/data_extraction_rules.xml +++ b/app/src/main/res/xml/data_extraction_rules.xml @@ -17,17 +17,18 @@ --> - - - - - + + + - - - - - + + + + + + + +