Skip to content

Commit

Permalink
refactor: remove not needed usage of observe self user [WPB-15414] (#…
Browse files Browse the repository at this point in the history
  • Loading branch information
MohamadJaara authored Feb 11, 2025
1 parent 61ccdfa commit 1f0c653
Show file tree
Hide file tree
Showing 9 changed files with 49 additions and 50 deletions.
7 changes: 4 additions & 3 deletions app/src/main/kotlin/com/wire/android/ui/home/HomeViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,10 @@ import com.wire.kalium.logic.feature.client.NeedsToRegisterClientUseCase
import com.wire.kalium.logic.feature.legalhold.LegalHoldStateForSelfUser
import com.wire.kalium.logic.feature.legalhold.ObserveLegalHoldStateForSelfUserUseCase
import com.wire.kalium.logic.feature.personaltoteamaccount.CanMigrateFromPersonalToTeamUseCase
import com.wire.kalium.logic.feature.user.GetSelfUserUseCase
import com.wire.kalium.logic.feature.user.ObserveSelfUserUseCase
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
import javax.inject.Inject

Expand All @@ -50,12 +50,13 @@ class HomeViewModel @Inject constructor(
override val savedStateHandle: SavedStateHandle,
private val globalDataStore: GlobalDataStore,
private val dataStore: UserDataStore,
private val getSelfUser: GetSelfUserUseCase,
private val observeSelf: ObserveSelfUserUseCase,
private val needsToRegisterClient: NeedsToRegisterClientUseCase,
private val canMigrateFromPersonalToTeam: CanMigrateFromPersonalToTeamUseCase,
private val observeLegalHoldStatusForSelfUser: ObserveLegalHoldStateForSelfUserUseCase,
private val shouldTriggerMigrationForUser: ShouldTriggerMigrationForUserUserCase,
private val analyticsManager: AnonymousAnalyticsManager
private val analyticsManager: AnonymousAnalyticsManager,
) : SavedStateViewModel(savedStateHandle) {

@VisibleForTesting
Expand Down Expand Up @@ -97,7 +98,7 @@ class HomeViewModel @Inject constructor(

fun checkRequirements(onRequirement: (HomeRequirement) -> Unit) {
viewModelScope.launch {
val selfUser = observeSelf().first()
val selfUser = getSelfUser() ?: return@launch
when {
shouldTriggerMigrationForUser(selfUser.id) ->
onRequirement(HomeRequirement.Migration(selfUser.id))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,20 +39,19 @@ import com.wire.kalium.logic.data.user.UserId
import com.wire.kalium.logic.data.user.type.UserType
import com.wire.kalium.logic.feature.conversation.CreateGroupConversationUseCase
import com.wire.kalium.logic.feature.user.GetDefaultProtocolUseCase
import com.wire.kalium.logic.feature.user.ObserveSelfUserUseCase
import com.wire.kalium.logic.feature.user.GetSelfUserUseCase
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.collections.immutable.toImmutableSet
import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.flow.dropWhile
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
import javax.inject.Inject

@Suppress("LongParameterList", "TooManyFunctions")
@HiltViewModel
class NewConversationViewModel @Inject constructor(
private val createGroupConversation: CreateGroupConversationUseCase,
private val observeSelfUser: ObserveSelfUserUseCase,
private val getSelfUser: GetSelfUserUseCase,
getDefaultProtocol: GetDefaultProtocolUseCase
) : ViewModel() {

Expand All @@ -78,16 +77,20 @@ class NewConversationViewModel @Inject constructor(
var createGroupState: CreateGroupState by mutableStateOf(CreateGroupState())

init {
setConversationCreationParam()
observeGroupNameChanges()
}

private fun setConversationCreationParam() {
viewModelScope.launch {
val selfUser = observeSelfUser().first()
val isSelfTeamMember = selfUser.teamId != null
val isSelfExternalTeamMember = selfUser.userType == UserType.EXTERNAL
val selfUser = getSelfUser()
val isSelfTeamMember = selfUser?.teamId != null
val isSelfExternalTeamMember = selfUser?.userType == UserType.EXTERNAL
newGroupState = newGroupState.copy(
isSelfTeamMember = isSelfTeamMember,
isGroupCreatingAllowed = !isSelfExternalTeamMember
)
}
observeGroupNameChanges()
}

private fun observeGroupNameChanges() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,30 +22,29 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.wire.android.ui.navArgs
import com.wire.android.util.fileDateTime
import com.wire.kalium.logic.feature.user.ObserveSelfUserUseCase
import com.wire.kalium.logic.feature.user.GetSelfUserUseCase
import com.wire.kalium.util.DateTimeUtil
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.launch
import javax.inject.Inject

@HiltViewModel
class E2eiCertificateDetailsViewModel @Inject constructor(
savedStateHandle: SavedStateHandle,
private val observerSelfUser: ObserveSelfUserUseCase,
private val getSelfUser: GetSelfUserUseCase,
) : ViewModel() {
private val navArgs: E2eiCertificateDetailsScreenNavArgs =
savedStateHandle.navArgs()

private var selfUserHandle: String? = null

init {
getSelfUserId()
getSelfUserHandle()
}

private fun getSelfUserId() {
private fun getSelfUserHandle() {
viewModelScope.launch {
selfUserHandle = observerSelfUser().first().handle
selfUserHandle = getSelfUser()?.handle
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -115,12 +115,10 @@ class ImportMediaAuthenticatedViewModel @Inject constructor(
importMediaState = importMediaState.copy(importedAssets = importMediaState.importedAssets.removeAt(index))
}

private fun loadUserAvatar() = viewModelScope.launch(dispatchers.io()) {
private fun loadUserAvatar() = viewModelScope.launch {
getSelf().collect { selfUser ->
withContext(dispatchers.main()) {
avatarAsset = selfUser.previewPicture?.let {
ImageAsset.UserAvatarAsset(it)
}
avatarAsset = selfUser.previewPicture?.let {
ImageAsset.UserAvatarAsset(it)
}
}
}
Expand Down Expand Up @@ -225,6 +223,7 @@ class ImportMediaAuthenticatedViewModel @Inject constructor(
appLogger.e("$TAG: Failed to import asset message: Unknown error")
null
}

is HandleUriAssetUseCase.Result.Success -> ImportedMediaAsset(result.assetBundle, null)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import androidx.compose.runtime.setValue
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.wire.android.di.CurrentAccount
import com.wire.android.model.ImageAsset
import com.wire.android.ui.home.conversations.details.participants.usecase.ObserveConversationRoleForUserUseCase
import com.wire.android.ui.navArgs
Expand All @@ -38,15 +39,13 @@ import com.wire.kalium.logic.feature.conversation.AddServiceToConversationUseCas
import com.wire.kalium.logic.feature.conversation.RemoveMemberFromConversationUseCase
import com.wire.kalium.logic.feature.service.GetServiceByIdUseCase
import com.wire.kalium.logic.feature.service.ObserveIsServiceMemberUseCase
import com.wire.kalium.logic.feature.user.ObserveSelfUserUseCase
import com.wire.kalium.logic.functional.Either
import com.wire.kalium.logic.functional.nullableFold
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.asSharedFlow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.first
import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.launch
Expand All @@ -57,22 +56,20 @@ import javax.inject.Inject
@HiltViewModel
class ServiceDetailsViewModel @Inject constructor(
private val dispatchers: DispatcherProvider,
private val observeSelfUser: ObserveSelfUserUseCase,
@CurrentAccount private val selfUserId: UserId,
private val getServiceById: GetServiceByIdUseCase,
private val observeIsServiceMember: ObserveIsServiceMemberUseCase,
private val observeConversationRoleForUser: ObserveConversationRoleForUserUseCase,
private val removeMemberFromConversation: RemoveMemberFromConversationUseCase,
private val addServiceToConversation: AddServiceToConversationUseCase,
private val serviceDetailsMapper: ServiceDetailsMapper,
serviceDetailsMapper: ServiceDetailsMapper,
savedStateHandle: SavedStateHandle
) : ViewModel() {

private val serviceDetailsNavArgs: ServiceDetailsNavArgs = savedStateHandle.navArgs()
private val serviceId: ServiceId = serviceDetailsMapper.fromBotServiceToServiceId(serviceDetailsNavArgs.botService)
private val conversationId: QualifiedID = serviceDetailsNavArgs.conversationId

private lateinit var selfUserId: UserId

var serviceDetailsState by mutableStateOf(ServiceDetailsState())
private val _infoMessage = MutableSharedFlow<UIText>()
val infoMessage = _infoMessage.asSharedFlow()
Expand All @@ -86,7 +83,6 @@ class ServiceDetailsViewModel @Inject constructor(
isAvatarLoading = true
)

selfUserId = observeSelfUser().first().id
getServiceDetailsAndUpdateViewState()?.let {
observeIsServiceConversationMember()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import com.wire.kalium.logic.feature.client.NeedsToRegisterClientUseCase
import com.wire.kalium.logic.feature.legalhold.LegalHoldStateForSelfUser
import com.wire.kalium.logic.feature.legalhold.ObserveLegalHoldStateForSelfUserUseCase
import com.wire.kalium.logic.feature.personaltoteamaccount.CanMigrateFromPersonalToTeamUseCase
import com.wire.kalium.logic.feature.user.GetSelfUserUseCase
import com.wire.kalium.logic.feature.user.ObserveSelfUserUseCase
import io.mockk.MockKAnnotations
import io.mockk.coEvery
Expand Down Expand Up @@ -126,7 +127,10 @@ class HomeViewModelTest {
lateinit var dataStore: UserDataStore

@MockK
lateinit var getSelf: ObserveSelfUserUseCase
lateinit var observeSelfUser: ObserveSelfUserUseCase

@MockK
lateinit var getSelf: GetSelfUserUseCase

@MockK
lateinit var needsToRegisterClient: NeedsToRegisterClientUseCase
Expand All @@ -148,12 +152,13 @@ class HomeViewModelTest {
savedStateHandle = savedStateHandle,
globalDataStore = globalDataStore,
dataStore = dataStore,
observeSelf = getSelf,
observeSelf = observeSelfUser,
needsToRegisterClient = needsToRegisterClient,
observeLegalHoldStatusForSelfUser = observeLegalHoldStatusForSelfUser,
shouldTriggerMigrationForUser = shouldTriggerMigrationForUser,
analyticsManager = analyticsManager,
canMigrateFromPersonalToTeam = canMigrateFromPersonalToTeam
canMigrateFromPersonalToTeam = canMigrateFromPersonalToTeam,
getSelfUser = getSelf,
)
}

Expand All @@ -164,7 +169,7 @@ class HomeViewModelTest {
}

fun withGetSelf(result: Flow<SelfUser>) = apply {
coEvery { getSelf.invoke() } returns result
coEvery { observeSelfUser.invoke() } returns result
}

private fun withCanMigrateFromPersonalToTeamReturning(result: Boolean) = apply {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,13 +35,12 @@ import com.wire.kalium.logic.data.user.UserAvailabilityStatus
import com.wire.kalium.logic.data.user.type.UserType
import com.wire.kalium.logic.feature.conversation.CreateGroupConversationUseCase
import com.wire.kalium.logic.feature.user.GetDefaultProtocolUseCase
import com.wire.kalium.logic.feature.user.ObserveSelfUserUseCase
import com.wire.kalium.logic.feature.user.GetSelfUserUseCase
import com.wire.kalium.logic.feature.user.IsMLSEnabledUseCase
import io.mockk.MockKAnnotations
import io.mockk.coEvery
import io.mockk.every
import io.mockk.impl.annotations.MockK
import kotlinx.coroutines.flow.flowOf
import kotlinx.datetime.Instant

internal class NewConversationViewModelArrangement {
Expand All @@ -62,7 +61,7 @@ internal class NewConversationViewModelArrangement {
lateinit var isMLSEnabledUseCase: IsMLSEnabledUseCase

@MockK
lateinit var observeSelfUserUseCase: ObserveSelfUserUseCase
lateinit var getSelf: GetSelfUserUseCase

@MockK(relaxed = true)
lateinit var onGroupCreated: (ConversationId) -> Unit
Expand Down Expand Up @@ -172,10 +171,10 @@ internal class NewConversationViewModelArrangement {
}

fun withGetSelfUser(isTeamMember: Boolean, userType: UserType = UserType.INTERNAL) = apply {
coEvery { observeSelfUserUseCase() } returns flowOf(SELF_USER.copy(
coEvery { getSelf() } returns SELF_USER.copy(
teamId = if (isTeamMember) TeamId("teamId") else null,
userType = userType,
))
)
}

fun withDefaultProtocol(supportedProtocol: SupportedProtocol) = apply {
Expand All @@ -184,7 +183,7 @@ internal class NewConversationViewModelArrangement {

fun arrange() = this to NewConversationViewModel(
createGroupConversation = createGroupConversation,
observeSelfUser = observeSelfUserUseCase,
getSelfUser = getSelf,
getDefaultProtocol = getDefaultProtocol
).also {
it.createGroupState = createGroupState
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ import com.wire.kalium.logic.feature.conversation.AddServiceToConversationUseCas
import com.wire.kalium.logic.feature.conversation.RemoveMemberFromConversationUseCase
import com.wire.kalium.logic.feature.service.GetServiceByIdUseCase
import com.wire.kalium.logic.feature.service.ObserveIsServiceMemberUseCase
import com.wire.kalium.logic.feature.user.ObserveSelfUserUseCase
import com.wire.kalium.logic.functional.Either
import io.mockk.MockKAnnotations
import io.mockk.coEvery
Expand Down Expand Up @@ -282,9 +281,6 @@ class ServiceDetailsViewModelTest {

private class Arrangement {

@MockK
lateinit var observeSelfUser: ObserveSelfUserUseCase

@MockK
lateinit var getServiceById: GetServiceByIdUseCase

Expand All @@ -305,10 +301,12 @@ class ServiceDetailsViewModelTest {
@MockK
lateinit var savedStateHandle: SavedStateHandle

private val selfUser = TestUser.SELF_USER

private val viewModel by lazy {
ServiceDetailsViewModel(
TestDispatcherProvider(),
observeSelfUser,
selfUserId = selfUser.id,
getServiceById,
observeIsServiceMember,
observeConversationRoleForUser,
Expand All @@ -322,32 +320,31 @@ class ServiceDetailsViewModelTest {
init {
MockKAnnotations.init(this, relaxUnitFun = true)
mockUri()
coEvery { observeSelfUser() } returns flowOf(TestUser.SELF_USER)
}

fun withService(service: BotService) = apply {
every { savedStateHandle.navArgs<ServiceDetailsNavArgs>() } returns ServiceDetailsNavArgs(service, CONVERSATION_ID)
}

suspend fun withConversationRoleForUser(roleData: ConversationRoleData) = apply {
fun withConversationRoleForUser(roleData: ConversationRoleData) = apply {
coEvery {
observeConversationRoleForUser.invoke(any(), any())
} returns flowOf(roleData)
}

suspend fun withServiceDetails(serviceDetails: ServiceDetails?) = apply {
fun withServiceDetails(serviceDetails: ServiceDetails?) = apply {
coEvery { getServiceById(any()) } returns serviceDetails
}

suspend fun withIsServiceMember(eitherMember: Either<StorageFailure, UserId?>) = apply {
fun withIsServiceMember(eitherMember: Either<StorageFailure, UserId?>) = apply {
coEvery { observeIsServiceMember(any(), any()) } returns flowOf(eitherMember)
}

suspend fun withRemoveService(result: RemoveMemberFromConversationUseCase.Result) = apply {
fun withRemoveService(result: RemoveMemberFromConversationUseCase.Result) = apply {
coEvery { removeMemberFromConversation(any(), any()) } returns result
}

suspend fun withAddService(result: AddServiceToConversationUseCase.Result) = apply {
fun withAddService(result: AddServiceToConversationUseCase.Result) = apply {
coEvery { addServiceToConversation(any(), any()) } returns result
}

Expand Down
2 changes: 1 addition & 1 deletion kalium
Submodule kalium updated 40 files
+3 βˆ’3 android/src/main/kotlin/com/wire/kalium/presentation/MainActivity.kt
+1 βˆ’2 cli/src/commonMain/kotlin/com/wire/kalium/cli/commands/GenerateEventsCommand.kt
+1 βˆ’0 data/src/commonMain/kotlin/com/wire/kalium/logic/data/client/ClientModel.kt
+2 βˆ’0 logic/src/commonMain/kotlin/com/wire/kalium/logic/data/client/ClientMapper.kt
+9 βˆ’4 logic/src/commonMain/kotlin/com/wire/kalium/logic/data/client/E2EIClientProvider.kt
+6 βˆ’3 logic/src/commonMain/kotlin/com/wire/kalium/logic/data/keypackage/KeyPackageRepository.kt
+4 βˆ’6 logic/src/commonMain/kotlin/com/wire/kalium/logic/data/user/UserRepository.kt
+2 βˆ’1 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/backup/CreateBackupUseCase.kt
+2 βˆ’1 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/backup/CreateObfuscatedCopyUseCase.kt
+2 βˆ’3 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/backup/RestoreBackupUseCase.kt
+0 βˆ’1 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/call/usecase/GetIncomingCallsUseCase.kt
+11 βˆ’4 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/client/ClientScope.kt
+6 βˆ’2 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/client/RegisterClientUseCase.kt
+21 βˆ’12 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/keypackage/MLSKeyPackageCountUseCase.kt
+24 βˆ’18 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/keypackage/RefillKeyPackageUseCase.kt
+5 βˆ’3 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/protocol/OneOnOneProtocolSelector.kt
+15 βˆ’17 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/team/SyncSelfTeamUseCase.kt
+2 βˆ’8 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/user/GetSelfUserUseCase.kt
+2 βˆ’7 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/user/ObserveSelfUserUseCase.kt
+2 βˆ’2 logic/src/commonMain/kotlin/com/wire/kalium/logic/feature/user/UpdateSelfUserSupportedProtocolsUseCase.kt
+6 βˆ’4 logic/src/commonTest/kotlin/com/wire/kalium/logic/client/E2EIClientProviderTest.kt
+2 βˆ’1 logic/src/commonTest/kotlin/com/wire/kalium/logic/data/conversation/ConversationRepositoryTest.kt
+3 βˆ’3 logic/src/commonTest/kotlin/com/wire/kalium/logic/data/keypackage/KeyPackageRepositoryTest.kt
+2 βˆ’1 logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/backup/CreateBackupUseCaseTest.kt
+2 βˆ’1 logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/backup/RestoreBackupUseCaseTest.kt
+2 βˆ’1 logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/client/RegisterClientUseCaseTest.kt
+45 βˆ’11 logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/keypackage/MLSKeyPackageCountUseCaseTest.kt
+46 βˆ’8 logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/keypackage/RefillKeyPackageUseCaseTest.kt
+10 βˆ’11 logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/protocol/OneOnOneProtocolSelectorTest.kt
+45 βˆ’46 logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/team/SyncSelfTeamUseCaseTest.kt
+2 βˆ’1 logic/src/commonTest/kotlin/com/wire/kalium/logic/feature/user/UpdateSupportedProtocolsUseCaseTest.kt
+4 βˆ’3 logic/src/commonTest/kotlin/com/wire/kalium/logic/util/arrangement/provider/E2EIClientProviderArrangement.kt
+3 βˆ’3 logic/src/commonTest/kotlin/com/wire/kalium/logic/util/arrangement/repository/UserRepositoryArrangement.kt
+8 βˆ’0 network-model/src/commonMain/kotlin/com/wire/kalium/network/api/authenticated/client/ClientRequest.kt
+14 βˆ’0 ...src/commonTest/kotlin/com/wire/kalium/network/api/authenticated/client/ClientCapabilityDTOSerializerTest.kt
+4 βˆ’1 network/src/commonMain/kotlin/com/wire/kalium/network/api/base/authenticated/keypackage/KeyPackageApi.kt
+1 βˆ’1 network/src/commonMain/kotlin/com/wire/kalium/network/api/v0/authenticated/ConversationApiV0.kt
+1 βˆ’1 network/src/commonMain/kotlin/com/wire/kalium/network/api/v0/authenticated/KeyPackageApiV0.kt
+9 βˆ’2 network/src/commonMain/kotlin/com/wire/kalium/network/api/v5/authenticated/KeyPackageApiV5.kt
+6 βˆ’1 network/src/commonTest/kotlin/com/wire/kalium/api/v5/KeyPackageApiV5Test.kt

0 comments on commit 1f0c653

Please sign in to comment.