diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/CryptoManager.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/CryptoManager.kt index d52a457c9d..9f92ff3671 100755 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/CryptoManager.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/CryptoManager.kt @@ -21,7 +21,6 @@ package im.vector.matrix.android.internal.crypto import android.content.Context import android.os.Handler import android.os.Looper -import android.text.TextUtils import arrow.core.Try import com.squareup.moshi.Types import com.zhuinden.monarchy.Monarchy @@ -83,7 +82,7 @@ import timber.log.Timber import java.util.* import java.util.concurrent.atomic.AtomicBoolean import javax.inject.Inject -import kotlin.coroutines.EmptyCoroutineContext +import kotlin.math.max /** * A `CryptoService` class instance manages the end-to-end crypto for a session. @@ -248,7 +247,7 @@ internal class CryptoManager @Inject constructor( return } isStarting.set(true) - CoroutineScope(coroutineDispatchers.crypto).launch { + GlobalScope.launch(coroutineDispatchers.crypto) { internalStart(isInitialSync) } } @@ -315,7 +314,7 @@ internal class CryptoManager @Inject constructor( * @param syncResponse the syncResponse */ fun onSyncCompleted(syncResponse: SyncResponse) { - CoroutineScope(coroutineDispatchers.crypto).launch { + GlobalScope.launch(coroutineDispatchers.crypto) { if (syncResponse.deviceLists != null) { deviceListManager.handleDeviceListsChanges(syncResponse.deviceLists.changed, syncResponse.deviceLists.left) } @@ -535,7 +534,7 @@ internal class CryptoManager @Inject constructor( eventType: String, roomId: String, callback: MatrixCallback) { - CoroutineScope(coroutineDispatchers.crypto).launch { + GlobalScope.launch(coroutineDispatchers.crypto) { if (!isStarted()) { Timber.v("## encryptEventContent() : wait after e2e init") internalStart(false) @@ -601,7 +600,7 @@ internal class CryptoManager @Inject constructor( * @param callback the callback to return data or null */ override fun decryptEventAsync(event: Event, timeline: String, callback: MatrixCallback) { - GlobalScope.launch(EmptyCoroutineContext) { + GlobalScope.launch { val result = withContext(coroutineDispatchers.crypto) { internalDecryptEvent(event, timeline) } @@ -649,7 +648,7 @@ internal class CryptoManager @Inject constructor( * @param event the event */ fun onToDeviceEvent(event: Event) { - CoroutineScope(coroutineDispatchers.crypto).launch { + GlobalScope.launch(coroutineDispatchers.crypto) { when (event.getClearType()) { EventType.ROOM_KEY, EventType.FORWARDED_ROOM_KEY -> { onRoomKeyEvent(event) @@ -689,7 +688,7 @@ internal class CryptoManager @Inject constructor( * @param event the encryption event. */ private fun onRoomEncryptionEvent(roomId: String, event: Event) { - CoroutineScope(coroutineDispatchers.crypto).launch { + GlobalScope.launch(coroutineDispatchers.crypto) { val params = LoadRoomMembersTask.Params(roomId) loadRoomMembersTask .execute(params) @@ -879,7 +878,7 @@ internal class CryptoManager @Inject constructor( */ fun checkUnknownDevices(userIds: List, callback: MatrixCallback) { // force the refresh to ensure that the devices list is up-to-date - CoroutineScope(coroutineDispatchers.crypto).launch { + GlobalScope.launch(coroutineDispatchers.crypto) { deviceListManager .downloadKeys(userIds, true) .fold( @@ -1047,7 +1046,7 @@ internal class CryptoManager @Inject constructor( } override fun downloadKeys(userIds: List, forceDownload: Boolean, callback: MatrixCallback>) { - CoroutineScope(coroutineDispatchers.crypto).launch { + GlobalScope.launch(coroutineDispatchers.crypto) { deviceListManager .downloadKeys(userIds, forceDownload) .foldToCallback(callback) diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/algorithms/megolm/MXMegolmDecryption.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/algorithms/megolm/MXMegolmDecryption.kt index 180b7aa669..dfea1f86f2 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/algorithms/megolm/MXMegolmDecryption.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/algorithms/megolm/MXMegolmDecryption.kt @@ -29,7 +29,6 @@ import im.vector.matrix.android.internal.crypto.actions.EnsureOlmSessionsForDevi import im.vector.matrix.android.internal.crypto.actions.MessageEncrypter import im.vector.matrix.android.internal.crypto.algorithms.IMXDecrypting import im.vector.matrix.android.internal.crypto.keysbackup.KeysBackup -import im.vector.matrix.android.internal.crypto.model.MXDeviceInfo import im.vector.matrix.android.internal.crypto.model.MXUsersDevicesMap import im.vector.matrix.android.internal.crypto.model.event.EncryptedEventContent import im.vector.matrix.android.internal.crypto.model.event.RoomKeyContent @@ -38,7 +37,7 @@ import im.vector.matrix.android.internal.crypto.model.rest.RoomKeyRequestBody import im.vector.matrix.android.internal.crypto.store.IMXCryptoStore import im.vector.matrix.android.internal.crypto.tasks.SendToDeviceTask import im.vector.matrix.android.internal.util.MatrixCoroutineDispatchers -import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import timber.log.Timber import java.util.* @@ -312,7 +311,7 @@ internal class MXMegolmDecryption(private val credentials: Credentials, return } val userId = request.userId ?: return - CoroutineScope(coroutineDispatchers.crypto).launch { + GlobalScope.launch(coroutineDispatchers.crypto) { deviceListManager .downloadKeys(listOf(userId), false) .flatMap { diff --git a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/DefaultSasVerificationService.kt b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/DefaultSasVerificationService.kt index 33e33ee0ae..54a4e14dc8 100644 --- a/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/DefaultSasVerificationService.kt +++ b/matrix-sdk-android/src/main/java/im/vector/matrix/android/internal/crypto/verification/DefaultSasVerificationService.kt @@ -40,7 +40,7 @@ import im.vector.matrix.android.internal.session.SessionScope import im.vector.matrix.android.internal.task.TaskExecutor import im.vector.matrix.android.internal.task.configureWith import im.vector.matrix.android.internal.util.MatrixCoroutineDispatchers -import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.launch import timber.log.Timber import java.util.* @@ -71,7 +71,7 @@ internal class DefaultSasVerificationService @Inject constructor(private val cre // Event received from the sync fun onToDeviceEvent(event: Event) { - CoroutineScope(coroutineDispatchers.crypto).launch { + GlobalScope.launch(coroutineDispatchers.crypto) { when (event.getClearType()) { EventType.KEY_VERIFICATION_START -> { onStartRequestReceived(event)