diff --git a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt index c19793fb8d..6a85cf45f5 100644 --- a/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt +++ b/libraries/matrix/api/src/main/kotlin/io/element/android/libraries/matrix/api/MatrixClient.kt @@ -42,10 +42,9 @@ import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.map -import java.io.Closeable import java.util.Optional -interface MatrixClient : Closeable { +interface MatrixClient { val sessionId: SessionId val deviceId: DeviceId val userProfile: StateFlow diff --git a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt index 6a69511fd3..d3a004115f 100644 --- a/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt +++ b/libraries/matrix/impl/src/main/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClient.kt @@ -476,16 +476,13 @@ class RustMatrixClient( override fun roomDirectoryService(): RoomDirectoryService = roomDirectoryService - override fun close() { + internal suspend fun destroy() { innerNotificationClient.close() - appCoroutineScope.launch { - roomFactory.destroy() - rustSyncService.destroy() - notificationSettingsService.destroy() - // This is sync, but it can destroy the `Client` instance and block stopping the sync service - notificationProcessSetup.destroy() - } + roomFactory.destroy() + rustSyncService.destroy() + notificationSettingsService.destroy() + notificationProcessSetup.destroy() sessionCoroutineScope.cancel() clientDelegateTaskHandle?.cancelAndDestroy() @@ -504,7 +501,7 @@ class RustMatrixClient( override suspend fun clearCache() { innerClient.clearCaches() - close() + destroy() } override suspend fun logout(userInitiated: Boolean, ignoreSdkError: Boolean) { @@ -527,7 +524,7 @@ class RustMatrixClient( } } } - close() + destroy() deleteSessionDirectory() if (userInitiated) { @@ -577,7 +574,7 @@ class RustMatrixClient( throw it } } - close() + destroy() deleteSessionDirectory() sessionStore.removeSession(sessionId.value) }.onFailure { diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactoryTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactoryTest.kt index 887155e5d7..c051aebbac 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactoryTest.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientFactoryTest.kt @@ -31,7 +31,7 @@ class RustMatrixClientFactoryTest { val sut = createRustMatrixClientFactory() val result = sut.create(aSessionData()) assertThat(result.sessionId).isEqualTo(SessionId("@alice:server.org")) - result.close() + result.destroy() } } diff --git a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientTest.kt b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientTest.kt index 33f943cf53..f9a1afb656 100644 --- a/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientTest.kt +++ b/libraries/matrix/impl/src/test/kotlin/io/element/android/libraries/matrix/impl/RustMatrixClientTest.kt @@ -28,9 +28,10 @@ import java.io.File class RustMatrixClientTest { @Test fun `ensure that sessionId and deviceId can be retrieved from the client`() = runTest { - createRustMatrixClient().use { sut -> - assertThat(sut.sessionId).isEqualTo(A_USER_ID) - assertThat(sut.deviceId).isEqualTo(A_DEVICE_ID) + createRustMatrixClient().run { + assertThat(sessionId).isEqualTo(A_USER_ID) + assertThat(deviceId).isEqualTo(A_DEVICE_ID) + destroy() } } @@ -38,16 +39,16 @@ class RustMatrixClientTest { fun `clear cache invokes the method clearCaches from the client and close it`() = runTest { val clearCachesResult = lambdaRecorder { } val closeResult = lambdaRecorder { } - createRustMatrixClient( + val client = createRustMatrixClient( client = FakeRustClient( clearCachesResult = clearCachesResult, closeResult = closeResult, ) - ).use { sut -> - sut.clearCache() - clearCachesResult.assertions().isCalledOnce() - closeResult.assertions().isCalledOnce() - } + ) + client.clearCache() + clearCachesResult.assertions().isCalledOnce() + closeResult.assertions().isCalledOnce() + client.destroy() } private fun TestScope.createRustMatrixClient( diff --git a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt index 8a77a60975..446a039bd9 100644 --- a/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt +++ b/libraries/matrix/test/src/main/kotlin/io/element/android/libraries/matrix/test/FakeMatrixClient.kt @@ -181,8 +181,6 @@ class FakeMatrixClient( deactivateAccountResult(password, eraseData) } - override fun close() = Unit - override suspend fun getUserProfile(): Result = simulateLongTask { val result = getProfileResults[sessionId]?.getOrNull() ?: MatrixUser(sessionId, userDisplayName, userAvatarUrl) _userProfile.tryEmit(result)