Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: Some workers not running when persistent websocket is enabled (WPB-7213) #2803

Merged
Original file line number Diff line number Diff line change
Expand Up @@ -26,10 +26,13 @@ import com.wire.kalium.logic.feature.asset.GetAssetSizeLimitUseCase
import com.wire.kalium.logic.feature.asset.GetAvatarAssetUseCase
import com.wire.kalium.logic.feature.client.FinalizeMLSClientAfterE2EIEnrollment
import com.wire.kalium.logic.feature.conversation.GetAllContactsNotInConversationUseCase
import com.wire.kalium.logic.feature.e2ei.CertificateRevocationListCheckWorker
import com.wire.kalium.logic.feature.e2ei.usecase.GetE2eiCertificateUseCase
import com.wire.kalium.logic.feature.e2ei.usecase.GetMembersE2EICertificateStatusesUseCase
import com.wire.kalium.logic.feature.e2ei.usecase.GetUserE2eiCertificateStatusUseCase
import com.wire.kalium.logic.feature.e2ei.usecase.GetUserE2eiCertificatesUseCase
import com.wire.kalium.logic.feature.e2ei.usecase.ObserveCertificateRevocationForSelfClientUseCase
import com.wire.kalium.logic.feature.featureConfig.FeatureFlagsSyncWorker
import com.wire.kalium.logic.feature.publicuser.GetAllContactsUseCase
import com.wire.kalium.logic.feature.publicuser.GetKnownUserUseCase
import com.wire.kalium.logic.feature.publicuser.RefreshUsersWithoutMetadataUseCase
Expand Down Expand Up @@ -226,4 +229,19 @@ class UserModule {
@Provides
fun provideGetUserE2eiCertificates(userScope: UserScope): GetUserE2eiCertificatesUseCase =
userScope.getUserE2eiCertificates

@ViewModelScoped
@Provides
fun provideCertificateRevocationListCheckWorker(userScope: UserScope): CertificateRevocationListCheckWorker =
userScope.certificateRevocationListCheckWorker

@ViewModelScoped
@Provides
fun provideFeatureFlagsSyncWorker(userScope: UserScope): FeatureFlagsSyncWorker =
userScope.featureFlagsSyncWorker

@ViewModelScoped
@Provides
fun provideObserveCertificateRevocationForSelfClientUseCase(userScope: UserScope): ObserveCertificateRevocationForSelfClientUseCase =
userScope.observeCertificateRevocationForSelfClient
}
49 changes: 49 additions & 0 deletions app/src/main/kotlin/com/wire/android/ui/home/AppSyncViewModel.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
/*
* Wire
* Copyright (C) 2024 Wire Swiss GmbH
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see http://www.gnu.org/licenses/.
*/
package com.wire.android.ui.home

import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.viewModelScope
import com.wire.android.navigation.SavedStateViewModel
import com.wire.kalium.logic.feature.e2ei.CertificateRevocationListCheckWorker
import com.wire.kalium.logic.feature.e2ei.usecase.ObserveCertificateRevocationForSelfClientUseCase
import com.wire.kalium.logic.feature.featureConfig.FeatureFlagsSyncWorker
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import javax.inject.Inject

@HiltViewModel
class AppSyncViewModel @Inject constructor(
override val savedStateHandle: SavedStateHandle,
private val certificateRevocationListCheckWorker: CertificateRevocationListCheckWorker,
private val observeCertificateRevocationForSelfClient: ObserveCertificateRevocationForSelfClientUseCase,
private val featureFlagsSyncWorker: FeatureFlagsSyncWorker
) : SavedStateViewModel(savedStateHandle) {

Check warning on line 36 in app/src/main/kotlin/com/wire/android/ui/home/AppSyncViewModel.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/ui/home/AppSyncViewModel.kt#L32-L36

Added lines #L32 - L36 were not covered by tests

fun startSyncingAppConfig() {
viewModelScope.launch {
certificateRevocationListCheckWorker.execute()

Check warning on line 40 in app/src/main/kotlin/com/wire/android/ui/home/AppSyncViewModel.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/ui/home/AppSyncViewModel.kt#L39-L40

Added lines #L39 - L40 were not covered by tests
}
viewModelScope.launch {
observeCertificateRevocationForSelfClient.invoke()

Check warning on line 43 in app/src/main/kotlin/com/wire/android/ui/home/AppSyncViewModel.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/ui/home/AppSyncViewModel.kt#L42-L43

Added lines #L42 - L43 were not covered by tests
}
viewModelScope.launch {
featureFlagsSyncWorker.execute()
}
}

Check warning on line 48 in app/src/main/kotlin/com/wire/android/ui/home/AppSyncViewModel.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/ui/home/AppSyncViewModel.kt#L45-L48

Added lines #L45 - L48 were not covered by tests
}
23 changes: 22 additions & 1 deletion app/src/main/kotlin/com/wire/android/ui/home/HomeScreen.kt
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ import androidx.compose.material3.ModalDrawerSheet
import androidx.compose.material3.ModalNavigationDrawer
import androidx.compose.material3.SnackbarHostState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
Expand All @@ -52,6 +53,7 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.min
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleEventObserver
import com.google.accompanist.navigation.material.ExperimentalMaterialNavigationApi
import com.ramcosta.composedestinations.DestinationsNavHost
import com.ramcosta.composedestinations.animations.defaults.RootNavGraphDefaultAnimations
Expand Down Expand Up @@ -96,6 +98,7 @@ import kotlinx.coroutines.launch
fun HomeScreen(
navigator: Navigator,
homeViewModel: HomeViewModel = hiltViewModel(),
appSyncViewModel: AppSyncViewModel = hiltViewModel(),
homeDrawerViewModel: HomeDrawerViewModel = hiltViewModel(),
conversationListViewModel: ConversationListViewModel = hiltViewModel(), // TODO: move required elements from this one to HomeViewModel?,
groupDetailsScreenResultRecipient: ResultRecipient<ConversationScreenDestination, GroupConversationDetailsNavBackArgs>,
Expand All @@ -106,6 +109,21 @@ fun HomeScreen(
val showNotificationsFlow = rememberRequestPushNotificationsPermissionFlow(
onPermissionDenied = { /** TODO: Show a dialog rationale explaining why the permission is needed **/ })

val lifecycleOwner = LocalLifecycleOwner.current

DisposableEffect(lifecycleOwner) {
val observer = LifecycleEventObserver { source, event ->
if (event == Lifecycle.Event.ON_RESUME) {
appSyncViewModel.startSyncingAppConfig()
}
}
lifecycleOwner.lifecycle.addObserver(observer)

onDispose {
lifecycleOwner.lifecycle.removeObserver(observer)
}
}

LaunchedEffect(homeViewModel.savedStateHandle) {
showNotificationsFlow.launch()
}
Expand Down Expand Up @@ -300,7 +318,10 @@ fun HomeContent(
contentScale = ContentScale.FillBounds,
colorFilter = ColorFilter.tint(MaterialTheme.colorScheme.onPrimary),
modifier = Modifier
.padding(start = dimensions().spacing4x, top = dimensions().spacing2x)
.padding(
start = dimensions().spacing4x,
top = dimensions().spacing2x
)
.size(dimensions().fabIconSize)
)
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import com.wire.android.navigation.SavedStateViewModel
import com.wire.android.util.ui.WireSessionImageLoader
import com.wire.kalium.logic.feature.client.NeedsToRegisterClientUseCase
import com.wire.kalium.logic.feature.e2ei.CertificateRevocationListCheckWorker
import com.wire.kalium.logic.feature.user.GetSelfUserUseCase
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.first
Expand All @@ -43,14 +44,18 @@
private val getSelf: GetSelfUserUseCase,
private val needsToRegisterClient: NeedsToRegisterClientUseCase,
private val wireSessionImageLoader: WireSessionImageLoader,
private val shouldTriggerMigrationForUser: ShouldTriggerMigrationForUserUserCase
private val shouldTriggerMigrationForUser: ShouldTriggerMigrationForUserUserCase,
private val certificateRevocationListCheckWorker: CertificateRevocationListCheckWorker
) : SavedStateViewModel(savedStateHandle) {

var homeState by mutableStateOf(HomeState())
private set

init {
loadUserAvatar()
viewModelScope.launch {
certificateRevocationListCheckWorker.execute()

Check warning on line 57 in app/src/main/kotlin/com/wire/android/ui/home/HomeViewModel.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/ui/home/HomeViewModel.kt#L56-L57

Added lines #L56 - L57 were not covered by tests
}
}

fun checkRequirements(onRequirement: (HomeRequirement) -> Unit) {
Expand Down