mirror of
https://github.com/bitwarden/android.git
synced 2025-12-10 00:06:22 -06:00
Add email navigation param and environment repo to the TrustedDeviceViewModel (#1146)
This commit is contained in:
parent
888e079f09
commit
058c4f0dfc
@ -1,11 +1,27 @@
|
||||
package com.x8bit.bitwarden.ui.auth.feature.trusteddevice
|
||||
|
||||
import androidx.lifecycle.SavedStateHandle
|
||||
import androidx.navigation.NavController
|
||||
import androidx.navigation.NavGraphBuilder
|
||||
import androidx.navigation.NavOptions
|
||||
import androidx.navigation.NavType
|
||||
import androidx.navigation.navArgument
|
||||
import com.x8bit.bitwarden.data.platform.annotation.OmitFromCoverage
|
||||
import com.x8bit.bitwarden.ui.platform.base.util.composableWithSlideTransitions
|
||||
|
||||
private const val TRUSTED_DEVICE_ROUTE: String = "trusted_device"
|
||||
private const val EMAIL_ADDRESS: String = "email_address"
|
||||
private const val TRUSTED_DEVICE_PREFIX: String = "trusted_device"
|
||||
private const val TRUSTED_DEVICE_ROUTE: String = "$TRUSTED_DEVICE_PREFIX/{${EMAIL_ADDRESS}}"
|
||||
|
||||
/**
|
||||
* Class to retrieve trusted device arguments from the [SavedStateHandle].
|
||||
*/
|
||||
@OmitFromCoverage
|
||||
data class TrustedDeviceArgs(val emailAddress: String) {
|
||||
constructor(savedStateHandle: SavedStateHandle) : this(
|
||||
emailAddress = checkNotNull(savedStateHandle.get<String>(EMAIL_ADDRESS)),
|
||||
)
|
||||
}
|
||||
|
||||
/**
|
||||
* Add the Trusted Device Screen to the nav graph.
|
||||
@ -15,6 +31,9 @@ fun NavGraphBuilder.trustedDeviceDestination(
|
||||
) {
|
||||
composableWithSlideTransitions(
|
||||
route = TRUSTED_DEVICE_ROUTE,
|
||||
arguments = listOf(
|
||||
navArgument(EMAIL_ADDRESS) { type = NavType.StringType },
|
||||
),
|
||||
) {
|
||||
TrustedDeviceScreen(
|
||||
onNavigateBack = onNavigateBack,
|
||||
@ -25,6 +44,9 @@ fun NavGraphBuilder.trustedDeviceDestination(
|
||||
/**
|
||||
* Navigate to the Trusted Device Screen.
|
||||
*/
|
||||
fun NavController.navigateToTrustedDevice(navOptions: NavOptions? = null) {
|
||||
this.navigate(TRUSTED_DEVICE_ROUTE, navOptions)
|
||||
fun NavController.navigateToTrustedDevice(
|
||||
emailAddress: String,
|
||||
navOptions: NavOptions? = null,
|
||||
) {
|
||||
this.navigate("$TRUSTED_DEVICE_PREFIX/$emailAddress", navOptions)
|
||||
}
|
||||
|
||||
@ -2,6 +2,7 @@ package com.x8bit.bitwarden.ui.auth.feature.trusteddevice
|
||||
|
||||
import android.os.Parcelable
|
||||
import androidx.lifecycle.SavedStateHandle
|
||||
import com.x8bit.bitwarden.data.platform.repository.EnvironmentRepository
|
||||
import com.x8bit.bitwarden.ui.platform.base.BaseViewModel
|
||||
import com.x8bit.bitwarden.ui.platform.base.util.Text
|
||||
import com.x8bit.bitwarden.ui.platform.base.util.asText
|
||||
@ -18,11 +19,12 @@ private const val KEY_STATE = "state"
|
||||
@HiltViewModel
|
||||
class TrustedDeviceViewModel @Inject constructor(
|
||||
savedStateHandle: SavedStateHandle,
|
||||
environmentRepository: EnvironmentRepository,
|
||||
) : BaseViewModel<TrustedDeviceState, TrustedDeviceEvent, TrustedDeviceAction>(
|
||||
initialState = savedStateHandle[KEY_STATE]
|
||||
?: TrustedDeviceState(
|
||||
emailAddress = "",
|
||||
environmentLabel = "",
|
||||
emailAddress = TrustedDeviceArgs(savedStateHandle).emailAddress,
|
||||
environmentLabel = environmentRepository.environment.label,
|
||||
isRemembered = false,
|
||||
),
|
||||
) {
|
||||
|
||||
@ -2,6 +2,8 @@ package com.x8bit.bitwarden.ui.auth.feature.trusteddevice
|
||||
|
||||
import androidx.lifecycle.SavedStateHandle
|
||||
import app.cash.turbine.test
|
||||
import com.x8bit.bitwarden.data.platform.repository.EnvironmentRepository
|
||||
import com.x8bit.bitwarden.data.platform.repository.util.FakeEnvironmentRepository
|
||||
import com.x8bit.bitwarden.ui.platform.base.BaseViewModelTest
|
||||
import com.x8bit.bitwarden.ui.platform.base.util.asText
|
||||
import kotlinx.coroutines.test.runTest
|
||||
@ -10,6 +12,8 @@ import org.junit.jupiter.api.Test
|
||||
|
||||
class TrustedDeviceViewModelTest : BaseViewModelTest() {
|
||||
|
||||
private val environmentRepo: FakeEnvironmentRepository = FakeEnvironmentRepository()
|
||||
|
||||
@Test
|
||||
fun `on BackClick emits NavigateBack`() = runTest {
|
||||
val viewModel = createViewModel()
|
||||
@ -75,14 +79,19 @@ class TrustedDeviceViewModelTest : BaseViewModelTest() {
|
||||
|
||||
private fun createViewModel(
|
||||
state: TrustedDeviceState? = null,
|
||||
environmentRepository: EnvironmentRepository = environmentRepo,
|
||||
): TrustedDeviceViewModel =
|
||||
TrustedDeviceViewModel(
|
||||
savedStateHandle = SavedStateHandle().apply { set("state", state) },
|
||||
savedStateHandle = SavedStateHandle().apply {
|
||||
set("state", state)
|
||||
set("email_address", "email@bitwarden.com")
|
||||
},
|
||||
environmentRepository = environmentRepository,
|
||||
)
|
||||
}
|
||||
|
||||
private val DEFAULT_STATE: TrustedDeviceState = TrustedDeviceState(
|
||||
emailAddress = "",
|
||||
environmentLabel = "",
|
||||
emailAddress = "email@bitwarden.com",
|
||||
environmentLabel = "bitwarden.com",
|
||||
isRemembered = false,
|
||||
)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user