Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
/*
* Wire
* Copyright (C) 2025 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.di

import com.wire.kalium.logic.CoreLogic
import com.wire.kalium.logic.data.user.UserId
import com.wire.kalium.logic.feature.client.IsProfileQRCodeEnabledUseCase
import dagger.assisted.Assisted
import dagger.assisted.AssistedFactory
import dagger.assisted.AssistedInject

class IsProfileQRCodeEnabledUseCaseProvider @AssistedInject constructor(
@KaliumCoreLogic private val coreLogic: CoreLogic,
@Assisted private val userId: UserId
) {

val isProfileQRCodeEnabled: IsProfileQRCodeEnabledUseCase
get() = coreLogic.getSessionScope(userId).users.isProfileQRCodeEnabled

@AssistedFactory
interface Factory {
fun create(userId: UserId): IsProfileQRCodeEnabledUseCaseProvider
}
}
14 changes: 8 additions & 6 deletions app/src/main/kotlin/com/wire/android/ui/WireActivityViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@
import com.wire.android.R
import com.wire.android.appLogger
import com.wire.android.datastore.GlobalDataStore
import com.wire.android.di.IsProfileQRCodeEnabledUseCaseProvider
import com.wire.android.di.KaliumCoreLogic
import com.wire.android.di.ObserveIfE2EIRequiredDuringLoginUseCaseProvider
import com.wire.android.di.ObserveScreenshotCensoringConfigUseCaseProvider
Expand Down Expand Up @@ -64,7 +65,6 @@
import com.wire.kalium.logic.data.user.UserId
import com.wire.kalium.logic.feature.appVersioning.ObserveIfAppUpdateRequiredUseCase
import com.wire.kalium.logic.feature.client.ClearNewClientsForUserUseCase
import com.wire.kalium.logic.feature.client.IsProfileQRCodeEnabledUseCase
import com.wire.kalium.logic.feature.client.NewClientResult
import com.wire.kalium.logic.feature.client.ObserveNewClientsUseCase
import com.wire.kalium.logic.feature.conversation.CheckConversationInviteCodeUseCase
Expand Down Expand Up @@ -123,7 +123,7 @@
private val globalDataStore: Lazy<GlobalDataStore>,
private val observeIfE2EIRequiredDuringLoginUseCaseProviderFactory: ObserveIfE2EIRequiredDuringLoginUseCaseProvider.Factory,
private val workManager: Lazy<WorkManager>,
private val isProfileQRCodeEnabled: IsProfileQRCodeEnabledUseCase,
private val isProfileQRCodeEnabledFactory: IsProfileQRCodeEnabledUseCaseProvider.Factory,
) : ActionsViewModel<WireActivityViewAction>() {

var globalAppState: GlobalAppState by mutableStateOf(GlobalAppState())
Expand Down Expand Up @@ -517,10 +517,12 @@
}

private fun onOpenUserProfileDeepLink(result: DeepLinkResult.OpenOtherUserProfile) = viewModelScope.launch {
if (isProfileQRCodeEnabled()) {
sendAction(OnOpenUserProfile(result))
} else {
sendAction(ShowToast(R.string.profile_deeplink_feature_unavailable_title_alert))
observeCurrentValidUserId.first()?.let { userId ->
if (isProfileQRCodeEnabledFactory.create(userId).isProfileQRCodeEnabled()) {
sendAction(OnOpenUserProfile(result))
} else {
sendAction(ShowToast(R.string.profile_deeplink_feature_unavailable_title_alert))

Check warning on line 524 in app/src/main/kotlin/com/wire/android/ui/WireActivityViewModel.kt

View check run for this annotation

Codecov / codecov/patch

app/src/main/kotlin/com/wire/android/ui/WireActivityViewModel.kt#L524

Added line #L524 was not covered by tests
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ import com.wire.android.config.CoroutineTestExtension
import com.wire.android.config.TestDispatcherProvider
import com.wire.android.config.mockUri
import com.wire.android.datastore.GlobalDataStore
import com.wire.android.di.IsProfileQRCodeEnabledUseCaseProvider
import com.wire.android.di.ObserveIfE2EIRequiredDuringLoginUseCaseProvider
import com.wire.android.di.ObserveScreenshotCensoringConfigUseCaseProvider
import com.wire.android.di.ObserveSyncStateUseCaseProvider
Expand Down Expand Up @@ -846,7 +847,7 @@ class WireActivityViewModelTest {
lateinit var observeEstablishedCalls: ObserveEstablishedCallsUseCase

@MockK
lateinit var isProfileQRCodeEnabled: IsProfileQRCodeEnabledUseCase
lateinit var isProfileQRCodeEnabledFactory: IsProfileQRCodeEnabledUseCaseProvider.Factory

private val viewModel by lazy {
WireActivityViewModel(
Expand All @@ -868,7 +869,7 @@ class WireActivityViewModelTest {
globalDataStore = { globalDataStore },
observeIfE2EIRequiredDuringLoginUseCaseProviderFactory = observeIfE2EIRequiredDuringLoginUseCaseProviderFactory,
workManager = { workManager },
isProfileQRCodeEnabled = isProfileQRCodeEnabled,
isProfileQRCodeEnabledFactory = isProfileQRCodeEnabledFactory,
)
}

Expand Down Expand Up @@ -989,7 +990,9 @@ class WireActivityViewModelTest {
}

suspend fun withProfileQRCodeEnabled(isEnabled: Boolean = true) = apply {
coEvery { isProfileQRCodeEnabled() } returns isEnabled
val useCase = mockk<IsProfileQRCodeEnabledUseCase>()
coEvery { isProfileQRCodeEnabledFactory.create(any()).isProfileQRCodeEnabled } returns useCase
coEvery { useCase() } returns isEnabled
}

fun arrange() = this to viewModel
Expand Down