diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreen.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreen.kt index 9357781f47..762e6c4240 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreen.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreen.kt @@ -18,6 +18,7 @@ import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource +import androidx.core.net.toUri import androidx.hilt.navigation.compose.hiltViewModel import androidx.lifecycle.compose.collectAsStateWithLifecycle import com.x8bit.bitwarden.R @@ -34,7 +35,9 @@ import com.x8bit.bitwarden.ui.platform.components.BitwardenTopAppBar import com.x8bit.bitwarden.ui.platform.components.BitwardenTwoButtonDialog import com.x8bit.bitwarden.ui.platform.components.LoadingDialogState import com.x8bit.bitwarden.ui.platform.components.OverflowMenuItemData +import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager import com.x8bit.bitwarden.ui.platform.manager.permissions.PermissionsManager +import com.x8bit.bitwarden.ui.platform.theme.LocalIntentManager import com.x8bit.bitwarden.ui.platform.theme.LocalPermissionsManager import com.x8bit.bitwarden.ui.platform.util.persistentListOfNotNull import com.x8bit.bitwarden.ui.tools.feature.generator.model.GeneratorMode @@ -54,6 +57,7 @@ fun VaultAddEditScreen( onNavigateToQrCodeScanScreen: () -> Unit, viewModel: VaultAddEditViewModel = hiltViewModel(), permissionsManager: PermissionsManager = LocalPermissionsManager.current, + intentManager: IntentManager = LocalIntentManager.current, onNavigateToManualCodeEntryScreen: () -> Unit, onNavigateToGeneratorModal: (GeneratorMode.Modal) -> Unit, onNavigateToAttachments: (cipherId: String) -> Unit, @@ -91,6 +95,12 @@ fun VaultAddEditScreen( } VaultAddEditEvent.NavigateBack -> onNavigateBack.invoke() + + is VaultAddEditEvent.NavigateToTooltipUri -> { + intentManager.launchUri( + "https://bitwarden.com/help/managing-items/#protect-individual-items".toUri(), + ) + } } } diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt index 1c042f5eac..e6796a1b60 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt @@ -502,12 +502,7 @@ class VaultAddEditViewModel @Inject constructor( } private fun handleTooltipClick() { - // TODO Add the text for the prompt (BIT-1079) - sendEvent( - event = VaultAddEditEvent.ShowToast( - message = "Not yet implemented".asText(), - ), - ) + sendEvent(VaultAddEditEvent.NavigateToTooltipUri) } @Suppress("MaxLineLength") @@ -1735,6 +1730,12 @@ sealed class VaultAddEditEvent { val cipherId: String, ) : VaultAddEditEvent() + /** + * Navigate the user to the tooltip URI. + */ + data object NavigateToTooltipUri : + VaultAddEditEvent() + /** * Navigate to the QR code scan screen. */ diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt index ea0fa61e80..d29b015f25 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt @@ -29,11 +29,13 @@ import androidx.compose.ui.test.performScrollTo import androidx.compose.ui.test.performTextClearance import androidx.compose.ui.test.performTextInput import androidx.compose.ui.test.performTouchInput +import androidx.core.net.toUri import com.bitwarden.core.UriMatchType import com.x8bit.bitwarden.data.platform.repository.util.bufferedMutableSharedFlow import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCipherView import com.x8bit.bitwarden.ui.platform.base.BaseComposeTest import com.x8bit.bitwarden.ui.platform.base.util.asText +import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager import com.x8bit.bitwarden.ui.platform.manager.permissions.FakePermissionManager import com.x8bit.bitwarden.ui.tools.feature.generator.model.GeneratorMode import com.x8bit.bitwarden.ui.util.assertNoDialogExists @@ -50,7 +52,9 @@ import com.x8bit.bitwarden.ui.vault.model.VaultCardBrand import com.x8bit.bitwarden.ui.vault.model.VaultCardExpirationMonth import com.x8bit.bitwarden.ui.vault.model.VaultIdentityTitle import io.mockk.every +import io.mockk.just import io.mockk.mockk +import io.mockk.runs import io.mockk.verify import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.update @@ -79,6 +83,10 @@ class VaultAddEditScreenTest : BaseComposeTest() { every { stateFlow } returns mutableStateFlow } + private val intentManager: IntentManager = mockk { + every { launchUri(any()) } just runs + } + @Before fun setup() { composeTestRule.setContent { @@ -93,6 +101,7 @@ class VaultAddEditScreenTest : BaseComposeTest() { onNavigateToMoveToOrganization = { id, _ -> onNavigateToMoveToOrganizationId = id }, viewModel = viewModel, permissionsManager = fakePermissionManager, + intentManager = intentManager, ) } } @@ -103,6 +112,16 @@ class VaultAddEditScreenTest : BaseComposeTest() { assertTrue(onNavigateBackCalled) } + @Test + fun `on NavigateToTooltipUri Event should invoke IntentManager`() { + mutableEventFlow.tryEmit(VaultAddEditEvent.NavigateToTooltipUri) + verify { + intentManager.launchUri( + "https://bitwarden.com/help/managing-items/#protect-individual-items".toUri(), + ) + } + } + @Suppress("MaxLineLength") @Test fun `on NavigateToQrCodeScan event should invoke NavigateToQrCodeScan`() { diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt index c9760b45a5..2391a5bde8 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt @@ -1170,7 +1170,6 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { assertEquals( expectedState, viewModel.stateFlow.value, - ) } } @@ -2025,17 +2024,11 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { } @Test - fun `TooltipClick should emit ShowToast with 'Tooltip' message`() = runTest { + fun `TooltipClick should emit NavigateToToolTipUri`() = runTest { viewModel.eventFlow.test { - viewModel - .actionChannel - .trySend( - VaultAddEditAction.Common.TooltipClick, - ) + viewModel.trySendAction(VaultAddEditAction.Common.TooltipClick) assertEquals( - VaultAddEditEvent.ShowToast( - "Not yet implemented".asText(), - ), + VaultAddEditEvent.NavigateToTooltipUri, awaitItem(), ) }