diff --git a/app/src/main/kotlin/com/wire/android/di/CoreLogicModule.kt b/app/src/main/kotlin/com/wire/android/di/CoreLogicModule.kt index 117c1a6fe55..adb00a9d3f5 100644 --- a/app/src/main/kotlin/com/wire/android/di/CoreLogicModule.kt +++ b/app/src/main/kotlin/com/wire/android/di/CoreLogicModule.kt @@ -33,12 +33,15 @@ import com.wire.kalium.logic.feature.analytics.GetCurrentAnalyticsTrackingIdenti import com.wire.kalium.logic.feature.auth.AddAuthenticatedUserUseCase import com.wire.kalium.logic.feature.auth.LogoutUseCase import com.wire.kalium.logic.feature.auth.sso.ValidateSSOCodeUseCase +import com.wire.kalium.logic.feature.client.MLSClientManager import com.wire.kalium.logic.feature.connection.BlockUserUseCase import com.wire.kalium.logic.feature.connection.UnblockUserUseCase import com.wire.kalium.logic.feature.conversation.ObserveOtherUserSecurityClassificationLabelUseCase import com.wire.kalium.logic.feature.conversation.ObserveSecurityClassificationLabelUseCase +import com.wire.kalium.logic.feature.conversation.keyingmaterials.KeyingMaterialsManager import com.wire.kalium.logic.feature.e2ei.usecase.FetchConversationMLSVerificationStatusUseCase import com.wire.kalium.logic.feature.featureConfig.ObserveIsAppLockEditableUseCase +import com.wire.kalium.logic.feature.mlsmigration.MLSMigrationManager import com.wire.kalium.logic.feature.selfDeletingMessages.ObserveSelfDeletionTimerSettingsForConversationUseCase import com.wire.kalium.logic.feature.selfDeletingMessages.ObserveTeamSettingsSelfDeletingStatusUseCase import com.wire.kalium.logic.feature.selfDeletingMessages.PersistNewSelfDeletionTimerUseCase @@ -202,6 +205,30 @@ class UseCaseModule { fun provideValidateSSOCodeUseCase(@KaliumCoreLogic coreLogic: CoreLogic): ValidateSSOCodeUseCase = coreLogic.getGlobalScope().validateSSOCodeUseCase + @ViewModelScoped + @Provides + fun provideMLSMigrationManager( + @KaliumCoreLogic coreLogic: CoreLogic, + @CurrentAccount currentAccount: UserId + ): MLSMigrationManager = + coreLogic.getSessionScope(currentAccount).mlsMigrationManager + + @ViewModelScoped + @Provides + fun provideMLSClientManager( + @KaliumCoreLogic coreLogic: CoreLogic, + @CurrentAccount currentAccount: UserId + ): MLSClientManager = + coreLogic.getSessionScope(currentAccount).mlsClientManager + + @ViewModelScoped + @Provides + fun provideKeyingMaterialsManager( + @KaliumCoreLogic coreLogic: CoreLogic, + @CurrentAccount currentAccount: UserId + ): KeyingMaterialsManager = + coreLogic.getSessionScope(currentAccount).keyingMaterialsManager + @ViewModelScoped @Provides fun provideValidatePasswordUseCase(@KaliumCoreLogic coreLogic: CoreLogic) = diff --git a/app/src/main/kotlin/com/wire/android/ui/home/AppSyncViewModel.kt b/app/src/main/kotlin/com/wire/android/ui/home/AppSyncViewModel.kt index cf9839278b4..857285c47f8 100644 --- a/app/src/main/kotlin/com/wire/android/ui/home/AppSyncViewModel.kt +++ b/app/src/main/kotlin/com/wire/android/ui/home/AppSyncViewModel.kt @@ -20,9 +20,12 @@ package com.wire.android.ui.home import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import com.wire.android.appLogger +import com.wire.kalium.logic.feature.client.MLSClientManager +import com.wire.kalium.logic.feature.conversation.keyingmaterials.KeyingMaterialsManager import com.wire.kalium.logic.feature.e2ei.SyncCertificateRevocationListUseCase import com.wire.kalium.logic.feature.e2ei.usecase.ObserveCertificateRevocationForSelfClientUseCase import com.wire.kalium.logic.feature.featureConfig.FeatureFlagsSyncWorker +import com.wire.kalium.logic.feature.mlsmigration.MLSMigrationManager import com.wire.kalium.logic.feature.server.UpdateApiVersionsUseCase import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Job @@ -39,8 +42,11 @@ class AppSyncViewModel @Inject constructor( private val syncCertificateRevocationListUseCase: SyncCertificateRevocationListUseCase, private val observeCertificateRevocationForSelfClient: ObserveCertificateRevocationForSelfClientUseCase, private val featureFlagsSyncWorker: FeatureFlagsSyncWorker, - private val updateApiVersions: UpdateApiVersionsUseCase -) : ViewModel() { + private val updateApiVersions: UpdateApiVersionsUseCase, + private val mLSMigrationManager: MLSMigrationManager, + private val keyingMaterialsManager: KeyingMaterialsManager, + private val mLSClientManager: MLSClientManager, + ) : ViewModel() { private val minIntervalBetweenPulls: Duration = MIN_INTERVAL_BETWEEN_PULLS @@ -77,6 +83,9 @@ class AppSyncViewModel @Inject constructor( viewModelScope.launch { featureFlagsSyncWorker.execute() }, viewModelScope.launch { observeCertificateRevocationForSelfClient.invoke() }, viewModelScope.launch { updateApiVersions() }, + viewModelScope.launch { mLSClientManager() }, + viewModelScope.launch { mLSMigrationManager() }, + viewModelScope.launch { keyingMaterialsManager() }, ).joinAll() } catch (e: Exception) { appLogger.e("Error while syncing app config", e) diff --git a/app/src/test/kotlin/com/wire/android/ui/home/AppSyncViewModelTest.kt b/app/src/test/kotlin/com/wire/android/ui/home/AppSyncViewModelTest.kt index 531731fc301..14364a3839c 100644 --- a/app/src/test/kotlin/com/wire/android/ui/home/AppSyncViewModelTest.kt +++ b/app/src/test/kotlin/com/wire/android/ui/home/AppSyncViewModelTest.kt @@ -18,15 +18,17 @@ package com.wire.android.ui.home import com.wire.android.config.CoroutineTestExtension +import com.wire.kalium.logic.feature.client.MLSClientManager +import com.wire.kalium.logic.feature.conversation.keyingmaterials.KeyingMaterialsManager import com.wire.kalium.logic.feature.e2ei.SyncCertificateRevocationListUseCase import com.wire.kalium.logic.feature.e2ei.usecase.ObserveCertificateRevocationForSelfClientUseCase import com.wire.kalium.logic.feature.featureConfig.FeatureFlagsSyncWorker +import com.wire.kalium.logic.feature.mlsmigration.MLSMigrationManager import com.wire.kalium.logic.feature.server.UpdateApiVersionsUseCase import io.mockk.MockKAnnotations import io.mockk.coEvery import io.mockk.coVerify import io.mockk.impl.annotations.MockK -import kotlinx.coroutines.InternalCoroutinesApi import kotlinx.coroutines.delay import kotlinx.coroutines.test.advanceUntilIdle import kotlinx.coroutines.test.runTest @@ -42,6 +44,9 @@ class AppSyncViewModelTest { withFeatureFlagsSyncWorker() withSyncCertificateRevocationListUseCase() withUpdateApiVersions() + withMlsClientManager() + withMlsMigrationManager() + withKeyingMaterialsManager() } viewModel.startSyncingAppConfig() @@ -51,6 +56,9 @@ class AppSyncViewModelTest { coVerify { arrangement.syncCertificateRevocationListUseCase.invoke() } coVerify { arrangement.featureFlagsSyncWorker.execute() } coVerify { arrangement.updateApiVersions() } + coVerify { arrangement.mlsClientManager() } + coVerify { arrangement.mlsMigrationManager() } + coVerify { arrangement.keyingMaterialsManager() } } @Test @@ -60,6 +68,9 @@ class AppSyncViewModelTest { withFeatureFlagsSyncWorker(1000) withSyncCertificateRevocationListUseCase(1000) withUpdateApiVersions(1000) + withMlsClientManager(1000) + withMlsMigrationManager(1000) + withKeyingMaterialsManager(1000) } viewModel.startSyncingAppConfig() @@ -71,6 +82,9 @@ class AppSyncViewModelTest { coVerify(exactly = 1) { arrangement.syncCertificateRevocationListUseCase.invoke() } coVerify(exactly = 1) { arrangement.featureFlagsSyncWorker.execute() } coVerify(exactly = 1) { arrangement.updateApiVersions() } + coVerify(exactly = 1) { arrangement.mlsClientManager() } + coVerify(exactly = 1) { arrangement.mlsMigrationManager() } + coVerify(exactly = 1) { arrangement.keyingMaterialsManager() } } private class Arrangement { @@ -87,6 +101,15 @@ class AppSyncViewModelTest { @MockK lateinit var updateApiVersions: UpdateApiVersionsUseCase + @MockK + lateinit var mlsClientManager: MLSClientManager + + @MockK + lateinit var mlsMigrationManager: MLSMigrationManager + + @MockK + lateinit var keyingMaterialsManager: KeyingMaterialsManager + init { MockKAnnotations.init(this) } @@ -95,10 +118,12 @@ class AppSyncViewModelTest { syncCertificateRevocationListUseCase, observeCertificateRevocationForSelfClient, featureFlagsSyncWorker, - updateApiVersions + updateApiVersions, + mLSClientManager = mlsClientManager, + mLSMigrationManager = mlsMigrationManager, + keyingMaterialsManager = keyingMaterialsManager ) - @OptIn(InternalCoroutinesApi::class) fun withObserveCertificateRevocationForSelfClient(delayMs: Long = 0) { coEvery { observeCertificateRevocationForSelfClient.invoke() } coAnswers { delay(delayMs) @@ -123,6 +148,24 @@ class AppSyncViewModelTest { } } + fun withMlsClientManager(delayMs: Long = 0) { + coEvery { mlsClientManager() } coAnswers { + delay(delayMs) + } + } + + fun withMlsMigrationManager(delayMs: Long = 0) { + coEvery { mlsMigrationManager() } coAnswers { + delay(delayMs) + } + } + + fun withKeyingMaterialsManager(delayMs: Long = 0) { + coEvery { keyingMaterialsManager() } coAnswers { + delay(delayMs) + } + } + fun arrange(block: Arrangement.() -> Unit) = apply(block).let { this to viewModel } diff --git a/kalium b/kalium index a80946f8bba..cd054fa4afe 160000 --- a/kalium +++ b/kalium @@ -1 +1 @@ -Subproject commit a80946f8bba2333f65378632497a918d657b3f0e +Subproject commit cd054fa4afe873a2ab82245e7262d38b1ef0906b