From 8c8a84b0391b0a44e12c8cd85ccd6758f7109429 Mon Sep 17 00:00:00 2001 From: Benoit Marty Date: Tue, 21 Apr 2020 20:41:10 +0200 Subject: [PATCH] Account deactivation: the task does the cleanup --- .../session/account/DeactivateAccountTask.kt | 6 +- .../session/cleanup/CleanupSession.kt | 87 +++++++++++++++++++ .../internal/session/signout/SignOutTask.kt | 67 ++------------ .../im/vector/riotx/features/MainActivity.kt | 13 ++- 4 files changed, 106 insertions(+), 67 deletions(-) create mode 100644 matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/cleanup/CleanupSession.kt diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/account/DeactivateAccountTask.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/account/DeactivateAccountTask.kt index b8b57a24a4..7052057779 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/account/DeactivateAccountTask.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/account/DeactivateAccountTask.kt @@ -21,6 +21,7 @@ import im.vector.matrix.android.internal.auth.registration.RegistrationFlowRespo import im.vector.matrix.android.internal.di.MoshiProvider import im.vector.matrix.android.internal.di.UserId import im.vector.matrix.android.internal.network.executeRequest +import im.vector.matrix.android.internal.session.cleanup.CleanupSession import im.vector.matrix.android.internal.task.Task import org.greenrobot.eventbus.EventBus import javax.inject.Inject @@ -35,7 +36,8 @@ internal interface DeactivateAccountTask : Task 0 } + ?.let { Timber.e("All realm instance for session has not been closed ($it)") } + Realm.getGlobalInstanceCount(realmCryptoConfiguration) + .takeIf { it > 0 } + ?.let { Timber.e("All realm instance for crypto has not been closed ($it)") } + } + } +} diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/signout/SignOutTask.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/signout/SignOutTask.kt index 6945ac494e..610ade5744 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/signout/SignOutTask.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/session/signout/SignOutTask.kt @@ -16,29 +16,13 @@ package im.vector.matrix.android.internal.session.signout -import im.vector.matrix.android.BuildConfig import im.vector.matrix.android.api.failure.Failure import im.vector.matrix.android.api.failure.MatrixError -import im.vector.matrix.android.internal.SessionManager -import im.vector.matrix.android.internal.auth.SessionParamsStore -import im.vector.matrix.android.internal.crypto.CryptoModule -import im.vector.matrix.android.internal.database.RealmKeysUtils -import im.vector.matrix.android.internal.di.CryptoDatabase -import im.vector.matrix.android.internal.di.SessionCacheDirectory -import im.vector.matrix.android.internal.di.SessionDatabase -import im.vector.matrix.android.internal.di.SessionFilesDirectory -import im.vector.matrix.android.internal.di.SessionId -import im.vector.matrix.android.internal.di.UserMd5 -import im.vector.matrix.android.internal.di.WorkManagerProvider import im.vector.matrix.android.internal.network.executeRequest -import im.vector.matrix.android.internal.session.SessionModule -import im.vector.matrix.android.internal.session.cache.ClearCacheTask +import im.vector.matrix.android.internal.session.cleanup.CleanupSession import im.vector.matrix.android.internal.task.Task -import io.realm.Realm -import io.realm.RealmConfiguration import org.greenrobot.eventbus.EventBus import timber.log.Timber -import java.io.File import java.net.HttpURLConnection import javax.inject.Inject @@ -49,20 +33,9 @@ internal interface SignOutTask : Task { } internal class DefaultSignOutTask @Inject constructor( - private val workManagerProvider: WorkManagerProvider, - @SessionId private val sessionId: String, private val signOutAPI: SignOutAPI, - private val sessionManager: SessionManager, - private val sessionParamsStore: SessionParamsStore, - @SessionDatabase private val clearSessionDataTask: ClearCacheTask, - @CryptoDatabase private val clearCryptoDataTask: ClearCacheTask, - @SessionFilesDirectory private val sessionFiles: File, - @SessionCacheDirectory private val sessionCache: File, - private val realmKeysUtils: RealmKeysUtils, - @SessionDatabase private val realmSessionConfiguration: RealmConfiguration, - @CryptoDatabase private val realmCryptoConfiguration: RealmConfiguration, - @UserMd5 private val userMd5: String, - private val eventBus: EventBus + private val eventBus: EventBus, + private val cleanupSession: CleanupSession ) : SignOutTask { override suspend fun execute(params: SignOutTask.Params) { @@ -87,37 +60,7 @@ internal class DefaultSignOutTask @Inject constructor( } } - Timber.d("SignOut: release session...") - sessionManager.releaseSession(sessionId) - - Timber.d("SignOut: cancel pending works...") - workManagerProvider.cancelAllWorks() - - Timber.d("SignOut: delete session params...") - sessionParamsStore.delete(sessionId) - - Timber.d("SignOut: clear session data...") - clearSessionDataTask.execute(Unit) - - Timber.d("SignOut: clear crypto data...") - clearCryptoDataTask.execute(Unit) - - Timber.d("SignOut: clear file system") - sessionFiles.deleteRecursively() - sessionCache.deleteRecursively() - - Timber.d("SignOut: clear the database keys") - realmKeysUtils.clear(SessionModule.getKeyAlias(userMd5)) - realmKeysUtils.clear(CryptoModule.getKeyAlias(userMd5)) - - // Sanity check - if (BuildConfig.DEBUG) { - Realm.getGlobalInstanceCount(realmSessionConfiguration) - .takeIf { it > 0 } - ?.let { Timber.e("All realm instance for session has not been closed ($it)") } - Realm.getGlobalInstanceCount(realmCryptoConfiguration) - .takeIf { it > 0 } - ?.let { Timber.e("All realm instance for crypto has not been closed ($it)") } - } + Timber.d("SignOut: cleanup session...") + cleanupSession.handle() } } diff --git a/vector/src/main/java/im/vector/riotx/features/MainActivity.kt b/vector/src/main/java/im/vector/riotx/features/MainActivity.kt index 9c5569f66d..a5ec0591f5 100644 --- a/vector/src/main/java/im/vector/riotx/features/MainActivity.kt +++ b/vector/src/main/java/im/vector/riotx/features/MainActivity.kt @@ -123,8 +123,15 @@ class MainActivity : VectorBaseActivity() { return } when { - args.clearCredentials -> session.signOut( - !args.isUserLoggedOut && !args.isAccountDeactivated, + args.isAccountDeactivated -> { + // Just do the local cleanup + Timber.w("Account deactivated, start app") + sessionHolder.clearActiveSession() + doLocalCleanup() + startNextActivityAndFinish() + } + args.clearCredentials -> session.signOut( + !args.isUserLoggedOut, object : MatrixCallback { override fun onSuccess(data: Unit) { Timber.w("SIGN_OUT: success, start app") @@ -137,7 +144,7 @@ class MainActivity : VectorBaseActivity() { displayError(failure) } }) - args.clearCache -> session.clearCache( + args.clearCache -> session.clearCache( object : MatrixCallback { override fun onSuccess(data: Unit) { doLocalCleanup()