mirror of
https://github.com/bitwarden/android.git
synced 2025-03-16 19:28:44 +03:00
Create package for add send feature (#472)
This commit is contained in:
parent
6e69e00d96
commit
9bf07f0693
13 changed files with 146 additions and 144 deletions
|
@ -12,8 +12,8 @@ import com.x8bit.bitwarden.ui.platform.feature.vaultunlockednavbar.VAULT_UNLOCKE
|
|||
import com.x8bit.bitwarden.ui.platform.feature.vaultunlockednavbar.vaultUnlockedNavBarDestination
|
||||
import com.x8bit.bitwarden.ui.tools.feature.generator.passwordhistory.navigateToPasswordHistory
|
||||
import com.x8bit.bitwarden.ui.tools.feature.generator.passwordhistory.passwordHistoryDestination
|
||||
import com.x8bit.bitwarden.ui.tools.feature.send.navigateToNewSend
|
||||
import com.x8bit.bitwarden.ui.tools.feature.send.newSendDestination
|
||||
import com.x8bit.bitwarden.ui.tools.feature.send.addsend.addSendDestination
|
||||
import com.x8bit.bitwarden.ui.tools.feature.send.addsend.navigateToAddSend
|
||||
import com.x8bit.bitwarden.ui.vault.feature.additem.navigateToVaultAddEditItem
|
||||
import com.x8bit.bitwarden.ui.vault.feature.additem.vaultAddEditItemDestination
|
||||
import com.x8bit.bitwarden.ui.vault.feature.item.navigateToVaultItem
|
||||
|
@ -48,7 +48,7 @@ fun NavGraphBuilder.vaultUnlockedGraph(
|
|||
onNavigateToVaultEditItem = {
|
||||
navController.navigateToVaultAddEditItem(VaultAddEditType.EditItem(it))
|
||||
},
|
||||
onNavigateToNewSend = { navController.navigateToNewSend() },
|
||||
onNavigateToAddSend = { navController.navigateToAddSend() },
|
||||
onNavigateToDeleteAccount = { navController.navigateToDeleteAccount() },
|
||||
onNavigateToPasswordHistory = { navController.navigateToPasswordHistory() },
|
||||
)
|
||||
|
@ -60,7 +60,7 @@ fun NavGraphBuilder.vaultUnlockedGraph(
|
|||
navController.navigateToVaultAddEditItem(VaultAddEditType.EditItem(it))
|
||||
},
|
||||
)
|
||||
newSendDestination(onNavigateBack = { navController.popBackStack() })
|
||||
addSendDestination(onNavigateBack = { navController.popBackStack() })
|
||||
passwordHistoryDestination(onNavigateBack = { navController.popBackStack() })
|
||||
foldersDestination(onNavigateBack = { navController.popBackStack() })
|
||||
}
|
||||
|
|
|
@ -25,7 +25,7 @@ fun NavGraphBuilder.vaultUnlockedNavBarDestination(
|
|||
onNavigateToVaultAddItem: () -> Unit,
|
||||
onNavigateToVaultItem: (vaultItemId: String) -> Unit,
|
||||
onNavigateToVaultEditItem: (vaultItemId: String) -> Unit,
|
||||
onNavigateToNewSend: () -> Unit,
|
||||
onNavigateToAddSend: () -> Unit,
|
||||
onNavigateToDeleteAccount: () -> Unit,
|
||||
onNavigateToFolders: () -> Unit,
|
||||
onNavigateToPasswordHistory: () -> Unit,
|
||||
|
@ -37,7 +37,7 @@ fun NavGraphBuilder.vaultUnlockedNavBarDestination(
|
|||
onNavigateToVaultAddItem = onNavigateToVaultAddItem,
|
||||
onNavigateToVaultItem = onNavigateToVaultItem,
|
||||
onNavigateToVaultEditItem = onNavigateToVaultEditItem,
|
||||
onNavigateToNewSend = onNavigateToNewSend,
|
||||
onNavigateToAddSend = onNavigateToAddSend,
|
||||
onNavigateToDeleteAccount = onNavigateToDeleteAccount,
|
||||
onNavigateToFolders = onNavigateToFolders,
|
||||
onNavigateToPasswordHistory = onNavigateToPasswordHistory,
|
||||
|
|
|
@ -70,7 +70,7 @@ fun VaultUnlockedNavBarScreen(
|
|||
onNavigateToVaultAddItem: () -> Unit,
|
||||
onNavigateToVaultItem: (vaultItemId: String) -> Unit,
|
||||
onNavigateToVaultEditItem: (vaultItemId: String) -> Unit,
|
||||
onNavigateToNewSend: () -> Unit,
|
||||
onNavigateToAddSend: () -> Unit,
|
||||
onNavigateToDeleteAccount: () -> Unit,
|
||||
onNavigateToFolders: () -> Unit,
|
||||
onNavigateToPasswordHistory: () -> Unit,
|
||||
|
@ -102,7 +102,7 @@ fun VaultUnlockedNavBarScreen(
|
|||
onNavigateToVaultItem = onNavigateToVaultItem,
|
||||
onNavigateToVaultEditItem = onNavigateToVaultEditItem,
|
||||
navigateToVaultAddItem = onNavigateToVaultAddItem,
|
||||
navigateToNewSend = onNavigateToNewSend,
|
||||
navigateToAddSend = onNavigateToAddSend,
|
||||
navigateToDeleteAccount = onNavigateToDeleteAccount,
|
||||
navigateToFolders = onNavigateToFolders,
|
||||
navigateToPasswordHistory = onNavigateToPasswordHistory,
|
||||
|
@ -135,7 +135,7 @@ private fun VaultUnlockedNavBarScaffold(
|
|||
navigateToVaultAddItem: () -> Unit,
|
||||
onNavigateToVaultItem: (vaultItemId: String) -> Unit,
|
||||
onNavigateToVaultEditItem: (vaultItemId: String) -> Unit,
|
||||
navigateToNewSend: () -> Unit,
|
||||
navigateToAddSend: () -> Unit,
|
||||
navigateToDeleteAccount: () -> Unit,
|
||||
navigateToFolders: () -> Unit,
|
||||
navigateToPasswordHistory: () -> Unit,
|
||||
|
@ -197,7 +197,7 @@ private fun VaultUnlockedNavBarScaffold(
|
|||
shouldDimNavBar = shouldDim
|
||||
},
|
||||
)
|
||||
sendGraph(onNavigateToNewSend = navigateToNewSend)
|
||||
sendGraph(onNavigateToAddSend = navigateToAddSend)
|
||||
generatorDestination(
|
||||
onNavigateToPasswordHistory = { navigateToPasswordHistory() },
|
||||
)
|
||||
|
|
|
@ -11,13 +11,13 @@ const val SEND_GRAPH_ROUTE: String = "send_graph"
|
|||
* Add send destination to the nav graph.
|
||||
*/
|
||||
fun NavGraphBuilder.sendGraph(
|
||||
onNavigateToNewSend: () -> Unit,
|
||||
onNavigateToAddSend: () -> Unit,
|
||||
) {
|
||||
navigation(
|
||||
startDestination = SEND_ROUTE,
|
||||
route = SEND_GRAPH_ROUTE,
|
||||
) {
|
||||
sendDestination(onNavigateToNewSend = onNavigateToNewSend)
|
||||
sendDestination(onNavigateToAddSend = onNavigateToAddSend)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -11,13 +11,13 @@ const val SEND_ROUTE: String = "send"
|
|||
* Add send destination to the nav graph.
|
||||
*/
|
||||
fun NavGraphBuilder.sendDestination(
|
||||
onNavigateToNewSend: () -> Unit,
|
||||
onNavigateToAddSend: () -> Unit,
|
||||
) {
|
||||
composableWithRootPushTransitions(
|
||||
route = SEND_ROUTE,
|
||||
) {
|
||||
SendScreen(
|
||||
onNavigateNewSend = onNavigateToNewSend,
|
||||
onNavigateAddSend = onNavigateToAddSend,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -43,7 +43,7 @@ import kotlinx.collections.immutable.persistentListOf
|
|||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun SendScreen(
|
||||
onNavigateNewSend: () -> Unit,
|
||||
onNavigateAddSend: () -> Unit,
|
||||
viewModel: SendViewModel = hiltViewModel(),
|
||||
intentHandler: IntentHandler = IntentHandler(context = LocalContext.current),
|
||||
) {
|
||||
|
@ -51,7 +51,7 @@ fun SendScreen(
|
|||
val context = LocalContext.current
|
||||
EventsEffect(viewModel = viewModel) { event ->
|
||||
when (event) {
|
||||
is SendEvent.NavigateNewSend -> onNavigateNewSend()
|
||||
is SendEvent.NavigateNewSend -> onNavigateAddSend()
|
||||
|
||||
is SendEvent.NavigateToAboutSend -> {
|
||||
intentHandler.launchUri("https://bitwarden.com/products/send".toUri())
|
||||
|
|
|
@ -1,28 +1,28 @@
|
|||
package com.x8bit.bitwarden.ui.tools.feature.send
|
||||
package com.x8bit.bitwarden.ui.tools.feature.send.addsend
|
||||
|
||||
import androidx.navigation.NavController
|
||||
import androidx.navigation.NavGraphBuilder
|
||||
import androidx.navigation.NavOptions
|
||||
import com.x8bit.bitwarden.ui.platform.base.util.composableWithSlideTransitions
|
||||
|
||||
private const val NEW_SEND_ROUTE = "new_send"
|
||||
private const val ADD_SEND_ROUTE = "add_send"
|
||||
|
||||
/**
|
||||
* Add the new send screen to the nav graph.
|
||||
*/
|
||||
fun NavGraphBuilder.newSendDestination(
|
||||
fun NavGraphBuilder.addSendDestination(
|
||||
onNavigateBack: () -> Unit,
|
||||
) {
|
||||
composableWithSlideTransitions(
|
||||
route = NEW_SEND_ROUTE,
|
||||
route = ADD_SEND_ROUTE,
|
||||
) {
|
||||
NewSendScreen(onNavigateBack = onNavigateBack)
|
||||
AddSendScreen(onNavigateBack = onNavigateBack)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Navigate to the new send screen.
|
||||
*/
|
||||
fun NavController.navigateToNewSend(navOptions: NavOptions? = null) {
|
||||
navigate(NEW_SEND_ROUTE, navOptions)
|
||||
fun NavController.navigateToAddSend(navOptions: NavOptions? = null) {
|
||||
navigate(ADD_SEND_ROUTE, navOptions)
|
||||
}
|
|
@ -1,4 +1,4 @@
|
|||
package com.x8bit.bitwarden.ui.tools.feature.send
|
||||
package com.x8bit.bitwarden.ui.tools.feature.send.addsend
|
||||
|
||||
import android.widget.Toast
|
||||
import androidx.compose.animation.AnimatedVisibility
|
||||
|
@ -54,6 +54,8 @@ import com.x8bit.bitwarden.ui.platform.components.BitwardenTextField
|
|||
import com.x8bit.bitwarden.ui.platform.components.BitwardenTopAppBar
|
||||
import com.x8bit.bitwarden.ui.platform.components.BitwardenWideSwitch
|
||||
import com.x8bit.bitwarden.ui.platform.components.SegmentedButtonState
|
||||
import com.x8bit.bitwarden.ui.tools.feature.send.SendDeletionDateChooser
|
||||
import com.x8bit.bitwarden.ui.tools.feature.send.SendExpirationDateChooser
|
||||
|
||||
/**
|
||||
* Displays new send UX.
|
||||
|
@ -61,7 +63,7 @@ import com.x8bit.bitwarden.ui.platform.components.SegmentedButtonState
|
|||
@Suppress("LongMethod")
|
||||
@OptIn(ExperimentalMaterial3Api::class)
|
||||
@Composable
|
||||
fun NewSendScreen(
|
||||
fun AddSendScreen(
|
||||
viewModel: NewSendViewModel = hiltViewModel(),
|
||||
onNavigateBack: () -> Unit,
|
||||
) {
|
||||
|
@ -71,8 +73,8 @@ fun NewSendScreen(
|
|||
|
||||
EventsEffect(viewModel = viewModel) { event ->
|
||||
when (event) {
|
||||
is NewSendEvent.NavigateBack -> onNavigateBack()
|
||||
is NewSendEvent.ShowToast -> {
|
||||
is AddSendEvent.NavigateBack -> onNavigateBack()
|
||||
is AddSendEvent.ShowToast -> {
|
||||
Toast.makeText(context, event.message, Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
|
@ -88,14 +90,14 @@ fun NewSendScreen(
|
|||
navigationIcon = painterResource(id = R.drawable.ic_close),
|
||||
navigationIconContentDescription = stringResource(id = R.string.close),
|
||||
onNavigationIconClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(NewSendAction.CloseClick) }
|
||||
{ viewModel.trySendAction(AddSendAction.CloseClick) }
|
||||
},
|
||||
scrollBehavior = scrollBehavior,
|
||||
actions = {
|
||||
BitwardenTextButton(
|
||||
label = stringResource(id = R.string.save),
|
||||
onClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(NewSendAction.SaveClick) }
|
||||
{ viewModel.trySendAction(AddSendAction.SaveClick) }
|
||||
},
|
||||
)
|
||||
},
|
||||
|
@ -115,7 +117,7 @@ fun NewSendScreen(
|
|||
hint = stringResource(id = R.string.name_info),
|
||||
value = state.name,
|
||||
onValueChange = remember(viewModel) {
|
||||
{ viewModel.trySendAction(NewSendAction.NameChange(it)) }
|
||||
{ viewModel.trySendAction(AddSendAction.NameChange(it)) }
|
||||
},
|
||||
)
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
|
@ -132,22 +134,22 @@ fun NewSendScreen(
|
|||
SegmentedButtonState(
|
||||
text = stringResource(id = R.string.file),
|
||||
onClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(NewSendAction.FileTypeClick) }
|
||||
{ viewModel.trySendAction(AddSendAction.FileTypeClick) }
|
||||
},
|
||||
isChecked = state.selectedType is NewSendState.SendType.File,
|
||||
isChecked = state.selectedType is AddSendState.SendType.File,
|
||||
),
|
||||
SegmentedButtonState(
|
||||
text = stringResource(id = R.string.text),
|
||||
onClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(NewSendAction.TextTypeClick) }
|
||||
{ viewModel.trySendAction(AddSendAction.TextTypeClick) }
|
||||
},
|
||||
isChecked = state.selectedType is NewSendState.SendType.Text,
|
||||
isChecked = state.selectedType is AddSendState.SendType.Text,
|
||||
),
|
||||
),
|
||||
)
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
when (val type = state.selectedType) {
|
||||
is NewSendState.SendType.File -> {
|
||||
is AddSendState.SendType.File -> {
|
||||
BitwardenListHeaderText(
|
||||
label = stringResource(id = R.string.file),
|
||||
modifier = Modifier.padding(horizontal = 16.dp),
|
||||
|
@ -163,7 +165,7 @@ fun NewSendScreen(
|
|||
BitwardenFilledTonalButton(
|
||||
label = stringResource(id = R.string.choose_file),
|
||||
onClick = remember(viewModel) {
|
||||
{ viewModel.trySendAction(NewSendAction.ChooseFileClick) }
|
||||
{ viewModel.trySendAction(AddSendAction.ChooseFileClick) }
|
||||
},
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
|
@ -185,14 +187,14 @@ fun NewSendScreen(
|
|||
)
|
||||
}
|
||||
|
||||
is NewSendState.SendType.Text -> {
|
||||
is AddSendState.SendType.Text -> {
|
||||
BitwardenTextField(
|
||||
modifier = Modifier.padding(horizontal = 16.dp),
|
||||
label = stringResource(id = R.string.text),
|
||||
hint = stringResource(id = R.string.type_text_info),
|
||||
value = type.input,
|
||||
onValueChange = remember(viewModel) {
|
||||
{ viewModel.trySendAction(NewSendAction.TextChange(it)) }
|
||||
{ viewModel.trySendAction(AddSendAction.TextChange(it)) }
|
||||
},
|
||||
)
|
||||
Spacer(modifier = Modifier.height(16.dp))
|
||||
|
@ -201,7 +203,7 @@ fun NewSendScreen(
|
|||
label = stringResource(id = R.string.hide_text_by_default),
|
||||
isChecked = type.isHideByDefaultChecked,
|
||||
onCheckedChange = remember(viewModel) {
|
||||
{ viewModel.trySendAction(NewSendAction.HideByDefaultToggle(it)) }
|
||||
{ viewModel.trySendAction(AddSendAction.HideByDefaultToggle(it)) }
|
||||
},
|
||||
)
|
||||
}
|
||||
|
@ -210,19 +212,19 @@ fun NewSendScreen(
|
|||
NewSendOptions(
|
||||
state = state,
|
||||
onMaxAccessCountChange = remember(viewModel) {
|
||||
{ viewModel.trySendAction(NewSendAction.MaxAccessCountChange(it)) }
|
||||
{ viewModel.trySendAction(AddSendAction.MaxAccessCountChange(it)) }
|
||||
},
|
||||
onPasswordChange = remember(viewModel) {
|
||||
{ viewModel.trySendAction(NewSendAction.PasswordChange(it)) }
|
||||
{ viewModel.trySendAction(AddSendAction.PasswordChange(it)) }
|
||||
},
|
||||
onNoteChange = remember(viewModel) {
|
||||
{ viewModel.trySendAction(NewSendAction.NoteChange(it)) }
|
||||
{ viewModel.trySendAction(AddSendAction.NoteChange(it)) }
|
||||
},
|
||||
onHideEmailChecked = remember(viewModel) {
|
||||
{ viewModel.trySendAction(NewSendAction.HideMyEmailToggle(it)) }
|
||||
{ viewModel.trySendAction(AddSendAction.HideMyEmailToggle(it)) }
|
||||
},
|
||||
onDeactivateSendChecked = remember(viewModel) {
|
||||
{ viewModel.trySendAction(NewSendAction.DeactivateThisSendToggle(it)) }
|
||||
{ viewModel.trySendAction(AddSendAction.DeactivateThisSendToggle(it)) }
|
||||
},
|
||||
)
|
||||
Spacer(modifier = Modifier.height(24.dp))
|
||||
|
@ -244,7 +246,7 @@ fun NewSendScreen(
|
|||
@Suppress("LongMethod")
|
||||
@Composable
|
||||
private fun NewSendOptions(
|
||||
state: NewSendState,
|
||||
state: AddSendState,
|
||||
onMaxAccessCountChange: (Int) -> Unit,
|
||||
onPasswordChange: (String) -> Unit,
|
||||
onNoteChange: (String) -> Unit,
|
|
@ -1,4 +1,4 @@
|
|||
package com.x8bit.bitwarden.ui.tools.feature.send
|
||||
package com.x8bit.bitwarden.ui.tools.feature.send.addsend
|
||||
|
||||
import android.os.Parcelable
|
||||
import androidx.lifecycle.SavedStateHandle
|
||||
|
@ -20,15 +20,15 @@ private const val KEY_STATE = "state"
|
|||
@HiltViewModel
|
||||
class NewSendViewModel @Inject constructor(
|
||||
savedStateHandle: SavedStateHandle,
|
||||
) : BaseViewModel<NewSendState, NewSendEvent, NewSendAction>(
|
||||
initialState = savedStateHandle[KEY_STATE] ?: NewSendState(
|
||||
) : BaseViewModel<AddSendState, AddSendEvent, AddSendAction>(
|
||||
initialState = savedStateHandle[KEY_STATE] ?: AddSendState(
|
||||
name = "",
|
||||
maxAccessCount = null,
|
||||
passwordInput = "",
|
||||
noteInput = "",
|
||||
isHideEmailChecked = false,
|
||||
isDeactivateChecked = false,
|
||||
selectedType = NewSendState.SendType.Text(
|
||||
selectedType = AddSendState.SendType.Text(
|
||||
input = "",
|
||||
isHideByDefaultChecked = false,
|
||||
),
|
||||
|
@ -41,51 +41,51 @@ class NewSendViewModel @Inject constructor(
|
|||
.launchIn(viewModelScope)
|
||||
}
|
||||
|
||||
override fun handleAction(action: NewSendAction): Unit = when (action) {
|
||||
is NewSendAction.CloseClick -> handleCloseClick()
|
||||
is NewSendAction.SaveClick -> handleSaveClick()
|
||||
is NewSendAction.FileTypeClick -> handleFileTypeClick()
|
||||
is NewSendAction.TextTypeClick -> handleTextTypeClick()
|
||||
is NewSendAction.ChooseFileClick -> handleChooseFileClick()
|
||||
is NewSendAction.NameChange -> handleNameChange(action)
|
||||
is NewSendAction.MaxAccessCountChange -> handleMaxAccessCountChange(action)
|
||||
is NewSendAction.TextChange -> handleTextChange(action)
|
||||
is NewSendAction.NoteChange -> handleNoteChange(action)
|
||||
is NewSendAction.PasswordChange -> handlePasswordChange(action)
|
||||
is NewSendAction.HideByDefaultToggle -> handleHideByDefaultToggle(action)
|
||||
is NewSendAction.DeactivateThisSendToggle -> handleDeactivateThisSendToggle(action)
|
||||
is NewSendAction.HideMyEmailToggle -> handleHideMyEmailToggle(action)
|
||||
override fun handleAction(action: AddSendAction): Unit = when (action) {
|
||||
is AddSendAction.CloseClick -> handleCloseClick()
|
||||
is AddSendAction.SaveClick -> handleSaveClick()
|
||||
is AddSendAction.FileTypeClick -> handleFileTypeClick()
|
||||
is AddSendAction.TextTypeClick -> handleTextTypeClick()
|
||||
is AddSendAction.ChooseFileClick -> handleChooseFileClick()
|
||||
is AddSendAction.NameChange -> handleNameChange(action)
|
||||
is AddSendAction.MaxAccessCountChange -> handleMaxAccessCountChange(action)
|
||||
is AddSendAction.TextChange -> handleTextChange(action)
|
||||
is AddSendAction.NoteChange -> handleNoteChange(action)
|
||||
is AddSendAction.PasswordChange -> handlePasswordChange(action)
|
||||
is AddSendAction.HideByDefaultToggle -> handleHideByDefaultToggle(action)
|
||||
is AddSendAction.DeactivateThisSendToggle -> handleDeactivateThisSendToggle(action)
|
||||
is AddSendAction.HideMyEmailToggle -> handleHideMyEmailToggle(action)
|
||||
}
|
||||
|
||||
private fun handlePasswordChange(action: NewSendAction.PasswordChange) {
|
||||
private fun handlePasswordChange(action: AddSendAction.PasswordChange) {
|
||||
mutableStateFlow.update {
|
||||
it.copy(passwordInput = action.input)
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleNoteChange(action: NewSendAction.NoteChange) {
|
||||
private fun handleNoteChange(action: AddSendAction.NoteChange) {
|
||||
mutableStateFlow.update {
|
||||
it.copy(noteInput = action.input)
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleHideMyEmailToggle(action: NewSendAction.HideMyEmailToggle) {
|
||||
private fun handleHideMyEmailToggle(action: AddSendAction.HideMyEmailToggle) {
|
||||
mutableStateFlow.update {
|
||||
it.copy(isHideEmailChecked = action.isChecked)
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleDeactivateThisSendToggle(action: NewSendAction.DeactivateThisSendToggle) {
|
||||
private fun handleDeactivateThisSendToggle(action: AddSendAction.DeactivateThisSendToggle) {
|
||||
mutableStateFlow.update {
|
||||
it.copy(isDeactivateChecked = action.isChecked)
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleCloseClick() = sendEvent(NewSendEvent.NavigateBack)
|
||||
private fun handleCloseClick() = sendEvent(AddSendEvent.NavigateBack)
|
||||
|
||||
private fun handleSaveClick() = sendEvent(NewSendEvent.ShowToast("Save Not Implemented"))
|
||||
private fun handleSaveClick() = sendEvent(AddSendEvent.ShowToast("Save Not Implemented"))
|
||||
|
||||
private fun handleNameChange(action: NewSendAction.NameChange) {
|
||||
private fun handleNameChange(action: AddSendAction.NameChange) {
|
||||
mutableStateFlow.update {
|
||||
it.copy(name = action.input)
|
||||
}
|
||||
|
@ -93,27 +93,27 @@ class NewSendViewModel @Inject constructor(
|
|||
|
||||
private fun handleFileTypeClick() {
|
||||
mutableStateFlow.update {
|
||||
it.copy(selectedType = NewSendState.SendType.File)
|
||||
it.copy(selectedType = AddSendState.SendType.File)
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleTextTypeClick() {
|
||||
mutableStateFlow.update {
|
||||
it.copy(selectedType = NewSendState.SendType.Text("", isHideByDefaultChecked = false))
|
||||
it.copy(selectedType = AddSendState.SendType.Text("", isHideByDefaultChecked = false))
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleTextChange(action: NewSendAction.TextChange) {
|
||||
private fun handleTextChange(action: AddSendAction.TextChange) {
|
||||
val currentSendInput =
|
||||
mutableStateFlow.value.selectedType as? NewSendState.SendType.Text ?: return
|
||||
mutableStateFlow.value.selectedType as? AddSendState.SendType.Text ?: return
|
||||
mutableStateFlow.update {
|
||||
it.copy(selectedType = currentSendInput.copy(input = action.input))
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleHideByDefaultToggle(action: NewSendAction.HideByDefaultToggle) {
|
||||
private fun handleHideByDefaultToggle(action: AddSendAction.HideByDefaultToggle) {
|
||||
val currentSendInput =
|
||||
mutableStateFlow.value.selectedType as? NewSendState.SendType.Text ?: return
|
||||
mutableStateFlow.value.selectedType as? AddSendState.SendType.Text ?: return
|
||||
mutableStateFlow.update {
|
||||
it.copy(selectedType = currentSendInput.copy(isHideByDefaultChecked = action.isChecked))
|
||||
}
|
||||
|
@ -121,10 +121,10 @@ class NewSendViewModel @Inject constructor(
|
|||
|
||||
private fun handleChooseFileClick() {
|
||||
// TODO: allow for file upload: BIT-1085
|
||||
sendEvent(NewSendEvent.ShowToast("Not Implemented: File Upload"))
|
||||
sendEvent(AddSendEvent.ShowToast("Not Implemented: File Upload"))
|
||||
}
|
||||
|
||||
private fun handleMaxAccessCountChange(action: NewSendAction.MaxAccessCountChange) {
|
||||
private fun handleMaxAccessCountChange(action: AddSendAction.MaxAccessCountChange) {
|
||||
mutableStateFlow.update {
|
||||
it.copy(maxAccessCount = action.value)
|
||||
}
|
||||
|
@ -135,7 +135,7 @@ class NewSendViewModel @Inject constructor(
|
|||
* Models state for the new send screen.
|
||||
*/
|
||||
@Parcelize
|
||||
data class NewSendState(
|
||||
data class AddSendState(
|
||||
val name: String,
|
||||
val selectedType: SendType,
|
||||
// Null here means "not set"
|
||||
|
@ -170,85 +170,85 @@ data class NewSendState(
|
|||
/**
|
||||
* Models events for the new send screen.
|
||||
*/
|
||||
sealed class NewSendEvent {
|
||||
sealed class AddSendEvent {
|
||||
/**
|
||||
* Navigate back.
|
||||
*/
|
||||
data object NavigateBack : NewSendEvent()
|
||||
data object NavigateBack : AddSendEvent()
|
||||
|
||||
/**
|
||||
* Show Toast.
|
||||
*/
|
||||
data class ShowToast(val message: String) : NewSendEvent()
|
||||
data class ShowToast(val message: String) : AddSendEvent()
|
||||
}
|
||||
|
||||
/**
|
||||
* Models actions for the new send screen.
|
||||
*/
|
||||
sealed class NewSendAction {
|
||||
sealed class AddSendAction {
|
||||
|
||||
/**
|
||||
* User clicked the close button.
|
||||
*/
|
||||
data object CloseClick : NewSendAction()
|
||||
data object CloseClick : AddSendAction()
|
||||
|
||||
/**
|
||||
* User clicked the save button.
|
||||
*/
|
||||
data object SaveClick : NewSendAction()
|
||||
data object SaveClick : AddSendAction()
|
||||
|
||||
/**
|
||||
* Value of the name field was updated.
|
||||
*/
|
||||
data class NameChange(val input: String) : NewSendAction()
|
||||
data class NameChange(val input: String) : AddSendAction()
|
||||
|
||||
/**
|
||||
* User clicked the file type segmented button.
|
||||
*/
|
||||
data object FileTypeClick : NewSendAction()
|
||||
data object FileTypeClick : AddSendAction()
|
||||
|
||||
/**
|
||||
* User clicked the text type segmented button.
|
||||
*/
|
||||
data object TextTypeClick : NewSendAction()
|
||||
data object TextTypeClick : AddSendAction()
|
||||
|
||||
/**
|
||||
* Value of the send text field updated.
|
||||
*/
|
||||
data class TextChange(val input: String) : NewSendAction()
|
||||
data class TextChange(val input: String) : AddSendAction()
|
||||
|
||||
/**
|
||||
* Value of the password field updated.
|
||||
*/
|
||||
data class PasswordChange(val input: String) : NewSendAction()
|
||||
data class PasswordChange(val input: String) : AddSendAction()
|
||||
|
||||
/**
|
||||
* Value of the note text field updated.
|
||||
*/
|
||||
data class NoteChange(val input: String) : NewSendAction()
|
||||
data class NoteChange(val input: String) : AddSendAction()
|
||||
|
||||
/**
|
||||
* User clicked the choose file button.
|
||||
*/
|
||||
data object ChooseFileClick : NewSendAction()
|
||||
data object ChooseFileClick : AddSendAction()
|
||||
|
||||
/**
|
||||
* User toggled the "hide text by default" toggle.
|
||||
*/
|
||||
data class HideByDefaultToggle(val isChecked: Boolean) : NewSendAction()
|
||||
data class HideByDefaultToggle(val isChecked: Boolean) : AddSendAction()
|
||||
|
||||
/**
|
||||
* User incremented the max access count.
|
||||
*/
|
||||
data class MaxAccessCountChange(val value: Int) : NewSendAction()
|
||||
data class MaxAccessCountChange(val value: Int) : AddSendAction()
|
||||
|
||||
/**
|
||||
* User toggled the "hide my email" toggle.
|
||||
*/
|
||||
data class HideMyEmailToggle(val isChecked: Boolean) : NewSendAction()
|
||||
data class HideMyEmailToggle(val isChecked: Boolean) : AddSendAction()
|
||||
|
||||
/**
|
||||
* User toggled the "deactivate this send" toggle.
|
||||
*/
|
||||
data class DeactivateThisSendToggle(val isChecked: Boolean) : NewSendAction()
|
||||
data class DeactivateThisSendToggle(val isChecked: Boolean) : AddSendAction()
|
||||
}
|
|
@ -44,7 +44,7 @@ class VaultUnlockedNavBarScreenTest : BaseComposeTest() {
|
|||
onNavigateToVaultAddItem = {},
|
||||
onNavigateToVaultItem = {},
|
||||
onNavigateToVaultEditItem = {},
|
||||
onNavigateToNewSend = {},
|
||||
onNavigateToAddSend = {},
|
||||
onNavigateToDeleteAccount = {},
|
||||
onNavigateToFolders = {},
|
||||
onNavigateToPasswordHistory = {},
|
||||
|
|
|
@ -39,7 +39,7 @@ class SendScreenTest : BaseComposeTest() {
|
|||
composeTestRule.setContent {
|
||||
SendScreen(
|
||||
viewModel = viewModel,
|
||||
onNavigateNewSend = { onNavigateToNewSendCalled = true },
|
||||
onNavigateAddSend = { onNavigateToNewSendCalled = true },
|
||||
intentHandler = intentHandler,
|
||||
)
|
||||
}
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package com.x8bit.bitwarden.ui.tools.feature.send
|
||||
package com.x8bit.bitwarden.ui.tools.feature.send.addsend
|
||||
|
||||
import androidx.compose.ui.test.assertIsOff
|
||||
import androidx.compose.ui.test.assertIsOn
|
||||
|
@ -22,10 +22,10 @@ import kotlinx.coroutines.test.runTest
|
|||
import org.junit.Before
|
||||
import org.junit.Test
|
||||
|
||||
class NewSendScreenTest : BaseComposeTest() {
|
||||
class AddSendScreenTest : BaseComposeTest() {
|
||||
|
||||
private var onNavigateBackCalled = false
|
||||
private val mutableEventFlow = MutableSharedFlow<NewSendEvent>(
|
||||
private val mutableEventFlow = MutableSharedFlow<AddSendEvent>(
|
||||
extraBufferCapacity = Int.MAX_VALUE,
|
||||
)
|
||||
private val mutableStateFlow = MutableStateFlow(DEFAULT_STATE)
|
||||
|
@ -37,7 +37,7 @@ class NewSendScreenTest : BaseComposeTest() {
|
|||
@Before
|
||||
fun setUp() {
|
||||
composeTestRule.setContent {
|
||||
NewSendScreen(
|
||||
AddSendScreen(
|
||||
viewModel = viewModel,
|
||||
onNavigateBack = { onNavigateBackCalled = true },
|
||||
)
|
||||
|
@ -46,7 +46,7 @@ class NewSendScreenTest : BaseComposeTest() {
|
|||
|
||||
@Test
|
||||
fun `on NavigateBack should call onNavigateBack`() {
|
||||
mutableEventFlow.tryEmit(NewSendEvent.NavigateBack)
|
||||
mutableEventFlow.tryEmit(AddSendEvent.NavigateBack)
|
||||
assert(onNavigateBackCalled)
|
||||
}
|
||||
|
||||
|
@ -55,7 +55,7 @@ class NewSendScreenTest : BaseComposeTest() {
|
|||
composeTestRule
|
||||
.onNodeWithContentDescription("Close")
|
||||
.performClick()
|
||||
verify { viewModel.trySendAction(NewSendAction.CloseClick) }
|
||||
verify { viewModel.trySendAction(AddSendAction.CloseClick) }
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -63,7 +63,7 @@ class NewSendScreenTest : BaseComposeTest() {
|
|||
composeTestRule
|
||||
.onNodeWithText("Save")
|
||||
.performClick()
|
||||
verify { viewModel.trySendAction(NewSendAction.SaveClick) }
|
||||
verify { viewModel.trySendAction(AddSendAction.SaveClick) }
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -71,7 +71,7 @@ class NewSendScreenTest : BaseComposeTest() {
|
|||
composeTestRule
|
||||
.onNodeWithText("Name")
|
||||
.performTextInput("input")
|
||||
verify { viewModel.trySendAction(NewSendAction.NameChange("input")) }
|
||||
verify { viewModel.trySendAction(AddSendAction.NameChange("input")) }
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -101,7 +101,7 @@ class NewSendScreenTest : BaseComposeTest() {
|
|||
composeTestRule
|
||||
.onNodeWithText("File")
|
||||
.performClick()
|
||||
verify { viewModel.trySendAction(NewSendAction.FileTypeClick) }
|
||||
verify { viewModel.trySendAction(AddSendAction.FileTypeClick) }
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -109,19 +109,19 @@ class NewSendScreenTest : BaseComposeTest() {
|
|||
composeTestRule
|
||||
.onAllNodesWithText("Text")[0]
|
||||
.performClick()
|
||||
verify { viewModel.trySendAction(NewSendAction.TextTypeClick) }
|
||||
verify { viewModel.trySendAction(AddSendAction.TextTypeClick) }
|
||||
}
|
||||
|
||||
@Test
|
||||
fun `Choose file button click should send ChooseFileClick`() {
|
||||
mutableStateFlow.value = DEFAULT_STATE.copy(
|
||||
selectedType = NewSendState.SendType.File,
|
||||
selectedType = AddSendState.SendType.File,
|
||||
)
|
||||
composeTestRule
|
||||
.onNodeWithText("Choose file")
|
||||
.performScrollTo()
|
||||
.performClick()
|
||||
verify { viewModel.trySendAction(NewSendAction.ChooseFileClick) }
|
||||
verify { viewModel.trySendAction(AddSendAction.ChooseFileClick) }
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -129,7 +129,7 @@ class NewSendScreenTest : BaseComposeTest() {
|
|||
composeTestRule
|
||||
.onAllNodesWithText("Text")[1]
|
||||
.performTextInput("input")
|
||||
viewModel.trySendAction(NewSendAction.TextChange("input"))
|
||||
viewModel.trySendAction(AddSendAction.TextChange("input"))
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -145,7 +145,7 @@ class NewSendScreenTest : BaseComposeTest() {
|
|||
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
selectedType = NewSendState.SendType.Text(
|
||||
selectedType = AddSendState.SendType.Text(
|
||||
input = "input",
|
||||
isHideByDefaultChecked = false,
|
||||
),
|
||||
|
@ -166,7 +166,7 @@ class NewSendScreenTest : BaseComposeTest() {
|
|||
composeTestRule
|
||||
.onNodeWithText(text = "When accessing the Send", substring = true)
|
||||
.performClick()
|
||||
viewModel.trySendAction(NewSendAction.HideByDefaultToggle(true))
|
||||
viewModel.trySendAction(AddSendAction.HideByDefaultToggle(true))
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -177,7 +177,7 @@ class NewSendScreenTest : BaseComposeTest() {
|
|||
|
||||
mutableStateFlow.update {
|
||||
it.copy(
|
||||
selectedType = NewSendState.SendType.Text(
|
||||
selectedType = AddSendState.SendType.Text(
|
||||
input = "",
|
||||
isHideByDefaultChecked = true,
|
||||
),
|
||||
|
@ -267,7 +267,7 @@ class NewSendScreenTest : BaseComposeTest() {
|
|||
.onNodeWithContentDescription("\u2212")
|
||||
.performScrollTo()
|
||||
.performClick()
|
||||
verify { viewModel.trySendAction(NewSendAction.MaxAccessCountChange(2)) }
|
||||
verify { viewModel.trySendAction(AddSendAction.MaxAccessCountChange(2)) }
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -301,7 +301,7 @@ class NewSendScreenTest : BaseComposeTest() {
|
|||
.onNodeWithContentDescription("+")
|
||||
.performScrollTo()
|
||||
.performClick()
|
||||
verify { viewModel.trySendAction(NewSendAction.MaxAccessCountChange(1)) }
|
||||
verify { viewModel.trySendAction(AddSendAction.MaxAccessCountChange(1)) }
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -315,7 +315,7 @@ class NewSendScreenTest : BaseComposeTest() {
|
|||
composeTestRule
|
||||
.onNodeWithText("New password")
|
||||
.performTextInput("input")
|
||||
verify { viewModel.trySendAction(NewSendAction.PasswordChange("input")) }
|
||||
verify { viewModel.trySendAction(AddSendAction.PasswordChange("input")) }
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -358,7 +358,7 @@ class NewSendScreenTest : BaseComposeTest() {
|
|||
composeTestRule
|
||||
.onNodeWithText("Notes")
|
||||
.performTextInput("input")
|
||||
verify { viewModel.trySendAction(NewSendAction.NoteChange("input")) }
|
||||
verify { viewModel.trySendAction(AddSendAction.NoteChange("input")) }
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -402,7 +402,7 @@ class NewSendScreenTest : BaseComposeTest() {
|
|||
.onNodeWithText("Hide my email address", substring = true)
|
||||
.performScrollTo()
|
||||
.performClick()
|
||||
verify { viewModel.trySendAction(NewSendAction.HideMyEmailToggle(true)) }
|
||||
verify { viewModel.trySendAction(AddSendAction.HideMyEmailToggle(true)) }
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -438,7 +438,7 @@ class NewSendScreenTest : BaseComposeTest() {
|
|||
.onNodeWithText("Deactivate this Send", substring = true)
|
||||
.performScrollTo()
|
||||
.performClick()
|
||||
verify { viewModel.trySendAction(NewSendAction.DeactivateThisSendToggle(true)) }
|
||||
verify { viewModel.trySendAction(AddSendAction.DeactivateThisSendToggle(true)) }
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -463,14 +463,14 @@ class NewSendScreenTest : BaseComposeTest() {
|
|||
}
|
||||
|
||||
companion object {
|
||||
private val DEFAULT_STATE = NewSendState(
|
||||
private val DEFAULT_STATE = AddSendState(
|
||||
name = "",
|
||||
maxAccessCount = null,
|
||||
passwordInput = "",
|
||||
noteInput = "",
|
||||
isHideEmailChecked = false,
|
||||
isDeactivateChecked = false,
|
||||
selectedType = NewSendState.SendType.Text(
|
||||
selectedType = AddSendState.SendType.Text(
|
||||
input = "",
|
||||
isHideByDefaultChecked = false,
|
||||
),
|
|
@ -1,4 +1,4 @@
|
|||
package com.x8bit.bitwarden.ui.tools.feature.send
|
||||
package com.x8bit.bitwarden.ui.tools.feature.send.addsend
|
||||
|
||||
import androidx.lifecycle.SavedStateHandle
|
||||
import app.cash.turbine.test
|
||||
|
@ -8,7 +8,7 @@ import kotlinx.coroutines.test.runTest
|
|||
import org.junit.jupiter.api.Assertions.assertEquals
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
class NewSendViewModelTest : BaseViewModelTest() {
|
||||
class AddSendViewModelTest : BaseViewModelTest() {
|
||||
|
||||
@Test
|
||||
fun `initial state should be correct`() {
|
||||
|
@ -18,7 +18,7 @@ class NewSendViewModelTest : BaseViewModelTest() {
|
|||
|
||||
@Test
|
||||
fun `initial state should read from saved state when present`() {
|
||||
val savedState = mockk<NewSendState>()
|
||||
val savedState = mockk<AddSendState>()
|
||||
val viewModel = createViewModel(
|
||||
savedStateHandle = SavedStateHandle(mapOf("state" to savedState)),
|
||||
)
|
||||
|
@ -29,8 +29,8 @@ class NewSendViewModelTest : BaseViewModelTest() {
|
|||
fun `CloseClick should emit NavigateBack`() = runTest {
|
||||
val viewModel = createViewModel()
|
||||
viewModel.eventFlow.test {
|
||||
viewModel.trySendAction(NewSendAction.CloseClick)
|
||||
assertEquals(NewSendEvent.NavigateBack, awaitItem())
|
||||
viewModel.trySendAction(AddSendAction.CloseClick)
|
||||
assertEquals(AddSendEvent.NavigateBack, awaitItem())
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -38,8 +38,8 @@ class NewSendViewModelTest : BaseViewModelTest() {
|
|||
fun `SaveClick should emit ShowToast`() = runTest {
|
||||
val viewModel = createViewModel()
|
||||
viewModel.eventFlow.test {
|
||||
viewModel.trySendAction(NewSendAction.SaveClick)
|
||||
assertEquals(NewSendEvent.ShowToast("Save Not Implemented"), awaitItem())
|
||||
viewModel.trySendAction(AddSendAction.SaveClick)
|
||||
assertEquals(AddSendEvent.ShowToast("Save Not Implemented"), awaitItem())
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -47,8 +47,8 @@ class NewSendViewModelTest : BaseViewModelTest() {
|
|||
fun `ChooseFileClick should emit ShowToast`() = runTest {
|
||||
val viewModel = createViewModel()
|
||||
viewModel.eventFlow.test {
|
||||
viewModel.trySendAction(NewSendAction.ChooseFileClick)
|
||||
assertEquals(NewSendEvent.ShowToast("Not Implemented: File Upload"), awaitItem())
|
||||
viewModel.trySendAction(AddSendAction.ChooseFileClick)
|
||||
assertEquals(AddSendEvent.ShowToast("Not Implemented: File Upload"), awaitItem())
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -57,12 +57,12 @@ class NewSendViewModelTest : BaseViewModelTest() {
|
|||
val viewModel = createViewModel()
|
||||
viewModel.stateFlow.test {
|
||||
assertEquals(DEFAULT_STATE, awaitItem())
|
||||
viewModel.trySendAction(NewSendAction.FileTypeClick)
|
||||
viewModel.trySendAction(AddSendAction.FileTypeClick)
|
||||
assertEquals(
|
||||
DEFAULT_STATE.copy(selectedType = NewSendState.SendType.File),
|
||||
DEFAULT_STATE.copy(selectedType = AddSendState.SendType.File),
|
||||
awaitItem(),
|
||||
)
|
||||
viewModel.trySendAction(NewSendAction.TextTypeClick)
|
||||
viewModel.trySendAction(AddSendAction.TextTypeClick)
|
||||
assertEquals(DEFAULT_STATE, awaitItem())
|
||||
}
|
||||
}
|
||||
|
@ -72,7 +72,7 @@ class NewSendViewModelTest : BaseViewModelTest() {
|
|||
val viewModel = createViewModel()
|
||||
viewModel.stateFlow.test {
|
||||
assertEquals(DEFAULT_STATE, awaitItem())
|
||||
viewModel.trySendAction(NewSendAction.NameChange("input"))
|
||||
viewModel.trySendAction(AddSendAction.NameChange("input"))
|
||||
assertEquals(DEFAULT_STATE.copy(name = "input"), awaitItem())
|
||||
}
|
||||
}
|
||||
|
@ -82,7 +82,7 @@ class NewSendViewModelTest : BaseViewModelTest() {
|
|||
val viewModel = createViewModel()
|
||||
viewModel.stateFlow.test {
|
||||
assertEquals(DEFAULT_STATE, awaitItem())
|
||||
viewModel.trySendAction(NewSendAction.MaxAccessCountChange(5))
|
||||
viewModel.trySendAction(AddSendAction.MaxAccessCountChange(5))
|
||||
assertEquals(DEFAULT_STATE.copy(maxAccessCount = 5), awaitItem())
|
||||
}
|
||||
}
|
||||
|
@ -92,10 +92,10 @@ class NewSendViewModelTest : BaseViewModelTest() {
|
|||
val viewModel = createViewModel()
|
||||
viewModel.stateFlow.test {
|
||||
assertEquals(DEFAULT_STATE, awaitItem())
|
||||
viewModel.trySendAction(NewSendAction.TextChange("input"))
|
||||
viewModel.trySendAction(AddSendAction.TextChange("input"))
|
||||
assertEquals(
|
||||
DEFAULT_STATE.copy(
|
||||
selectedType = NewSendState.SendType.Text(
|
||||
selectedType = AddSendState.SendType.Text(
|
||||
input = "input",
|
||||
isHideByDefaultChecked = false,
|
||||
),
|
||||
|
@ -110,7 +110,7 @@ class NewSendViewModelTest : BaseViewModelTest() {
|
|||
val viewModel = createViewModel()
|
||||
viewModel.stateFlow.test {
|
||||
assertEquals(DEFAULT_STATE, awaitItem())
|
||||
viewModel.trySendAction(NewSendAction.NoteChange("input"))
|
||||
viewModel.trySendAction(AddSendAction.NoteChange("input"))
|
||||
assertEquals(DEFAULT_STATE.copy(noteInput = "input"), awaitItem())
|
||||
}
|
||||
}
|
||||
|
@ -120,7 +120,7 @@ class NewSendViewModelTest : BaseViewModelTest() {
|
|||
val viewModel = createViewModel()
|
||||
viewModel.stateFlow.test {
|
||||
assertEquals(DEFAULT_STATE, awaitItem())
|
||||
viewModel.trySendAction(NewSendAction.PasswordChange("input"))
|
||||
viewModel.trySendAction(AddSendAction.PasswordChange("input"))
|
||||
assertEquals(DEFAULT_STATE.copy(passwordInput = "input"), awaitItem())
|
||||
}
|
||||
}
|
||||
|
@ -130,7 +130,7 @@ class NewSendViewModelTest : BaseViewModelTest() {
|
|||
val viewModel = createViewModel()
|
||||
viewModel.stateFlow.test {
|
||||
assertEquals(DEFAULT_STATE, awaitItem())
|
||||
viewModel.trySendAction(NewSendAction.DeactivateThisSendToggle(true))
|
||||
viewModel.trySendAction(AddSendAction.DeactivateThisSendToggle(true))
|
||||
assertEquals(DEFAULT_STATE.copy(isDeactivateChecked = true), awaitItem())
|
||||
}
|
||||
}
|
||||
|
@ -140,7 +140,7 @@ class NewSendViewModelTest : BaseViewModelTest() {
|
|||
val viewModel = createViewModel()
|
||||
viewModel.stateFlow.test {
|
||||
assertEquals(DEFAULT_STATE, awaitItem())
|
||||
viewModel.trySendAction(NewSendAction.HideMyEmailToggle(true))
|
||||
viewModel.trySendAction(AddSendAction.HideMyEmailToggle(true))
|
||||
assertEquals(DEFAULT_STATE.copy(isHideEmailChecked = true), awaitItem())
|
||||
}
|
||||
}
|
||||
|
@ -152,14 +152,14 @@ class NewSendViewModelTest : BaseViewModelTest() {
|
|||
)
|
||||
|
||||
companion object {
|
||||
private val DEFAULT_STATE = NewSendState(
|
||||
private val DEFAULT_STATE = AddSendState(
|
||||
name = "",
|
||||
maxAccessCount = null,
|
||||
passwordInput = "",
|
||||
noteInput = "",
|
||||
isHideEmailChecked = false,
|
||||
isDeactivateChecked = false,
|
||||
selectedType = NewSendState.SendType.Text(
|
||||
selectedType = AddSendState.SendType.Text(
|
||||
input = "",
|
||||
isHideByDefaultChecked = false,
|
||||
),
|
Loading…
Add table
Reference in a new issue