From 4d9596b56e5d67a58e42e6531a9473352e09b0be Mon Sep 17 00:00:00 2001 From: valere Date: Fri, 14 Apr 2023 16:48:24 +0200 Subject: [PATCH] do not launch in constructor --- .../android/sdk/internal/crypto/DefaultCryptoService.kt | 4 ++++ .../matrix/android/sdk/internal/crypto/DeviceListManager.kt | 6 ++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/matrix-sdk-android/src/kotlinCrypto/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt b/matrix-sdk-android/src/kotlinCrypto/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt index 4ef648a6a3..1dd02543cb 100755 --- a/matrix-sdk-android/src/kotlinCrypto/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt +++ b/matrix-sdk-android/src/kotlinCrypto/java/org/matrix/android/sdk/internal/crypto/DefaultCryptoService.kt @@ -340,6 +340,10 @@ internal class DefaultCryptoService @Inject constructor( uploadDeviceKeys() } + tryOrNull { + deviceListManager.recover() + } + oneTimeKeysUploader.maybeUploadOneTimeKeys() // this can throw if no backup tryOrNull { diff --git a/matrix-sdk-android/src/kotlinCrypto/java/org/matrix/android/sdk/internal/crypto/DeviceListManager.kt b/matrix-sdk-android/src/kotlinCrypto/java/org/matrix/android/sdk/internal/crypto/DeviceListManager.kt index 288ae8405f..d7703e7426 100755 --- a/matrix-sdk-android/src/kotlinCrypto/java/org/matrix/android/sdk/internal/crypto/DeviceListManager.kt +++ b/matrix-sdk-android/src/kotlinCrypto/java/org/matrix/android/sdk/internal/crypto/DeviceListManager.kt @@ -19,6 +19,7 @@ package org.matrix.android.sdk.internal.crypto import kotlinx.coroutines.CancellationException import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import org.matrix.android.sdk.api.MatrixConfiguration import org.matrix.android.sdk.api.MatrixCoroutineDispatchers import org.matrix.android.sdk.api.MatrixPatterns @@ -93,8 +94,9 @@ internal class DeviceListManager @Inject constructor( private val cryptoCoroutineContext = coroutineDispatchers.crypto - init { - cryptoCoroutineScope.launch(cryptoCoroutineContext) { + // Reset in progress status in case of restart + suspend fun recover() { + withContext(cryptoCoroutineContext) { var isUpdated = false val deviceTrackingStatuses = cryptoStore.getDeviceTrackingStatuses().toMutableMap() for ((userId, status) in deviceTrackingStatuses) {