mirror of
https://github.com/bitwarden/android.git
synced 2025-02-17 04:19:54 +03:00
Changing Add Login Type methods to be more specific, and changing some values to be Text instead of Strings. (#346)
This commit is contained in:
parent
446b0f9da4
commit
1560241a13
6 changed files with 61 additions and 67 deletions
|
@ -167,8 +167,8 @@ fun LazyListScope.addEditLoginItems(
|
|||
Spacer(modifier = Modifier.height(8.dp))
|
||||
BitwardenMultiSelectButton(
|
||||
label = stringResource(id = R.string.folder),
|
||||
options = state.availableFolders.toImmutableList(),
|
||||
selectedOption = state.folder,
|
||||
options = state.availableFolders.map { it.invoke() }.toImmutableList(),
|
||||
selectedOption = state.folderName.invoke(),
|
||||
onOptionSelected = loginItemTypeHandlers.onFolderTextChange,
|
||||
modifier = Modifier.padding(horizontal = 16.dp),
|
||||
)
|
||||
|
|
|
@ -167,76 +167,76 @@ class VaultAddItemViewModel @Inject constructor(
|
|||
) {
|
||||
when (action) {
|
||||
is VaultAddItemAction.ItemType.LoginType.NameTextChange -> {
|
||||
handleNameTextInputChange(action)
|
||||
handleLoginNameTextInputChange(action)
|
||||
}
|
||||
|
||||
is VaultAddItemAction.ItemType.LoginType.UsernameTextChange -> {
|
||||
handleUsernameTextInputChange(action)
|
||||
handleLoginUsernameTextInputChange(action)
|
||||
}
|
||||
|
||||
is VaultAddItemAction.ItemType.LoginType.PasswordTextChange -> {
|
||||
handlePasswordTextInputChange(action)
|
||||
handleLoginPasswordTextInputChange(action)
|
||||
}
|
||||
|
||||
is VaultAddItemAction.ItemType.LoginType.UriTextChange -> {
|
||||
handleURITextInputChange(action)
|
||||
handleLoginURITextInputChange(action)
|
||||
}
|
||||
|
||||
is VaultAddItemAction.ItemType.LoginType.FolderChange -> {
|
||||
handleFolderTextInputChange(action)
|
||||
handleLoginFolderTextInputChange(action)
|
||||
}
|
||||
|
||||
is VaultAddItemAction.ItemType.LoginType.ToggleFavorite -> {
|
||||
handleToggleFavorite(action)
|
||||
handleLoginToggleFavorite(action)
|
||||
}
|
||||
|
||||
is VaultAddItemAction.ItemType.LoginType.ToggleMasterPasswordReprompt -> {
|
||||
handleToggleMasterPasswordReprompt(action)
|
||||
handleLoginToggleMasterPasswordReprompt(action)
|
||||
}
|
||||
|
||||
is VaultAddItemAction.ItemType.LoginType.NotesTextChange -> {
|
||||
handleNotesTextInputChange(action)
|
||||
handleLoginNotesTextInputChange(action)
|
||||
}
|
||||
|
||||
is VaultAddItemAction.ItemType.LoginType.OwnershipChange -> {
|
||||
handleOwnershipTextInputChange(action)
|
||||
handleLoginOwnershipTextInputChange(action)
|
||||
}
|
||||
|
||||
is VaultAddItemAction.ItemType.LoginType.OpenUsernameGeneratorClick -> {
|
||||
handleOpenUsernameGeneratorClick()
|
||||
handleLoginOpenUsernameGeneratorClick()
|
||||
}
|
||||
|
||||
is VaultAddItemAction.ItemType.LoginType.PasswordCheckerClick -> {
|
||||
handlePasswordCheckerClick()
|
||||
handleLoginPasswordCheckerClick()
|
||||
}
|
||||
|
||||
is VaultAddItemAction.ItemType.LoginType.OpenPasswordGeneratorClick -> {
|
||||
handleOpenPasswordGeneratorClick()
|
||||
handleLoginOpenPasswordGeneratorClick()
|
||||
}
|
||||
|
||||
is VaultAddItemAction.ItemType.LoginType.SetupTotpClick -> {
|
||||
handleSetupTotpClick()
|
||||
handleLoginSetupTotpClick()
|
||||
}
|
||||
|
||||
is VaultAddItemAction.ItemType.LoginType.UriSettingsClick -> {
|
||||
handleUriSettingsClick()
|
||||
handleLoginUriSettingsClick()
|
||||
}
|
||||
|
||||
is VaultAddItemAction.ItemType.LoginType.AddNewUriClick -> {
|
||||
handleAddNewUriClick()
|
||||
handleLoginAddNewUriClick()
|
||||
}
|
||||
|
||||
is VaultAddItemAction.ItemType.LoginType.TooltipClick -> {
|
||||
handleTooltipClick()
|
||||
handleLoginTooltipClick()
|
||||
}
|
||||
|
||||
is VaultAddItemAction.ItemType.LoginType.AddNewCustomFieldClick -> {
|
||||
handleAddNewCustomFieldClick()
|
||||
handleLoginAddNewCustomFieldClick()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleNameTextInputChange(
|
||||
private fun handleLoginNameTextInputChange(
|
||||
action: VaultAddItemAction.ItemType.LoginType.NameTextChange,
|
||||
) {
|
||||
updateLoginType { loginType ->
|
||||
|
@ -244,7 +244,7 @@ class VaultAddItemViewModel @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
private fun handleUsernameTextInputChange(
|
||||
private fun handleLoginUsernameTextInputChange(
|
||||
action: VaultAddItemAction.ItemType.LoginType.UsernameTextChange,
|
||||
) {
|
||||
updateLoginType { loginType ->
|
||||
|
@ -252,7 +252,7 @@ class VaultAddItemViewModel @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
private fun handlePasswordTextInputChange(
|
||||
private fun handleLoginPasswordTextInputChange(
|
||||
action: VaultAddItemAction.ItemType.LoginType.PasswordTextChange,
|
||||
) {
|
||||
updateLoginType { loginType ->
|
||||
|
@ -260,7 +260,7 @@ class VaultAddItemViewModel @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
private fun handleURITextInputChange(
|
||||
private fun handleLoginURITextInputChange(
|
||||
action: VaultAddItemAction.ItemType.LoginType.UriTextChange,
|
||||
) {
|
||||
updateLoginType { loginType ->
|
||||
|
@ -268,15 +268,15 @@ class VaultAddItemViewModel @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
private fun handleFolderTextInputChange(
|
||||
private fun handleLoginFolderTextInputChange(
|
||||
action: VaultAddItemAction.ItemType.LoginType.FolderChange,
|
||||
) {
|
||||
updateLoginType { loginType ->
|
||||
loginType.copy(folder = action.folder)
|
||||
loginType.copy(folderName = action.folder)
|
||||
}
|
||||
}
|
||||
|
||||
private fun handleToggleFavorite(
|
||||
private fun handleLoginToggleFavorite(
|
||||
action: VaultAddItemAction.ItemType.LoginType.ToggleFavorite,
|
||||
) {
|
||||
updateLoginType { loginType ->
|
||||
|
@ -284,7 +284,7 @@ class VaultAddItemViewModel @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
private fun handleToggleMasterPasswordReprompt(
|
||||
private fun handleLoginToggleMasterPasswordReprompt(
|
||||
action: VaultAddItemAction.ItemType.LoginType.ToggleMasterPasswordReprompt,
|
||||
) {
|
||||
updateLoginType { loginType ->
|
||||
|
@ -292,7 +292,7 @@ class VaultAddItemViewModel @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
private fun handleNotesTextInputChange(
|
||||
private fun handleLoginNotesTextInputChange(
|
||||
action: VaultAddItemAction.ItemType.LoginType.NotesTextChange,
|
||||
) {
|
||||
updateLoginType { loginType ->
|
||||
|
@ -300,7 +300,7 @@ class VaultAddItemViewModel @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
private fun handleOwnershipTextInputChange(
|
||||
private fun handleLoginOwnershipTextInputChange(
|
||||
action: VaultAddItemAction.ItemType.LoginType.OwnershipChange,
|
||||
) {
|
||||
updateLoginType { loginType ->
|
||||
|
@ -308,7 +308,7 @@ class VaultAddItemViewModel @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
private fun handleOpenUsernameGeneratorClick() {
|
||||
private fun handleLoginOpenUsernameGeneratorClick() {
|
||||
viewModelScope.launch {
|
||||
sendEvent(
|
||||
event = VaultAddItemEvent.ShowToast(
|
||||
|
@ -318,7 +318,7 @@ class VaultAddItemViewModel @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
private fun handlePasswordCheckerClick() {
|
||||
private fun handleLoginPasswordCheckerClick() {
|
||||
viewModelScope.launch {
|
||||
sendEvent(
|
||||
event = VaultAddItemEvent.ShowToast(
|
||||
|
@ -328,7 +328,7 @@ class VaultAddItemViewModel @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
private fun handleOpenPasswordGeneratorClick() {
|
||||
private fun handleLoginOpenPasswordGeneratorClick() {
|
||||
viewModelScope.launch {
|
||||
sendEvent(
|
||||
event = VaultAddItemEvent.ShowToast(
|
||||
|
@ -338,7 +338,7 @@ class VaultAddItemViewModel @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
private fun handleSetupTotpClick() {
|
||||
private fun handleLoginSetupTotpClick() {
|
||||
viewModelScope.launch {
|
||||
sendEvent(
|
||||
event = VaultAddItemEvent.ShowToast(
|
||||
|
@ -348,7 +348,7 @@ class VaultAddItemViewModel @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
private fun handleUriSettingsClick() {
|
||||
private fun handleLoginUriSettingsClick() {
|
||||
viewModelScope.launch {
|
||||
sendEvent(
|
||||
event = VaultAddItemEvent.ShowToast(
|
||||
|
@ -358,7 +358,7 @@ class VaultAddItemViewModel @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
private fun handleAddNewUriClick() {
|
||||
private fun handleLoginAddNewUriClick() {
|
||||
viewModelScope.launch {
|
||||
sendEvent(
|
||||
event = VaultAddItemEvent.ShowToast(
|
||||
|
@ -368,7 +368,7 @@ class VaultAddItemViewModel @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
private fun handleTooltipClick() {
|
||||
private fun handleLoginTooltipClick() {
|
||||
viewModelScope.launch {
|
||||
sendEvent(
|
||||
event = VaultAddItemEvent.ShowToast(
|
||||
|
@ -378,7 +378,7 @@ class VaultAddItemViewModel @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
private fun handleAddNewCustomFieldClick() {
|
||||
private fun handleLoginAddNewCustomFieldClick() {
|
||||
viewModelScope.launch {
|
||||
sendEvent(
|
||||
event = VaultAddItemEvent.ShowToast(
|
||||
|
@ -613,11 +613,13 @@ data class VaultAddItemState(
|
|||
* @property username The username required for the login item.
|
||||
* @property password The password required for the login item.
|
||||
* @property uri The URI associated with the login item.
|
||||
* @property folder The folder used for the login item
|
||||
* @property folderName The folder used for the login item
|
||||
* @property favorite Indicates whether this login item is marked as a favorite.
|
||||
* @property masterPasswordReprompt Indicates if a master password reprompt is required.
|
||||
* @property notes Any additional notes or comments associated with the login item.
|
||||
* @property ownership The ownership email associated with the login item.
|
||||
* @property availableFolders Retrieves a list of available folders.
|
||||
* @property availableOwners Retrieves a list of available owners.
|
||||
*/
|
||||
@Parcelize
|
||||
data class Login(
|
||||
|
@ -625,35 +627,25 @@ data class VaultAddItemState(
|
|||
val username: String = "",
|
||||
val password: String = "",
|
||||
val uri: String = "",
|
||||
val folder: String = DEFAULT_FOLDER,
|
||||
val folderName: Text = DEFAULT_FOLDER,
|
||||
val favorite: Boolean = false,
|
||||
val masterPasswordReprompt: Boolean = false,
|
||||
val notes: String = "",
|
||||
val ownership: String = DEFAULT_OWNERSHIP,
|
||||
// TODO: Update this property to pull available owners from the data layer. (BIT-501)
|
||||
val availableFolders: List<Text> = listOf(
|
||||
"Folder 1".asText(),
|
||||
"Folder 2".asText(),
|
||||
"Folder 3".asText(),
|
||||
),
|
||||
// TODO: Update this property to pull available owners from the data layer. (BIT-501)
|
||||
val availableOwners: List<String> = listOf("a@b.com", "c@d.com"),
|
||||
) : ItemType() {
|
||||
override val displayStringResId: Int
|
||||
get() = ItemTypeOption.LOGIN.labelRes
|
||||
|
||||
/**
|
||||
* Retrieves a list of available folders.
|
||||
*
|
||||
* TODO(BIT-501): Update this property to pull available folders from the data layer.
|
||||
* Currently, it returns a hardcoded list of folders.
|
||||
*/
|
||||
val availableFolders: List<String>
|
||||
get() = listOf("Folder 1", "Folder 2", "Folder 3")
|
||||
|
||||
/**
|
||||
* Retrieves a list of available owners.
|
||||
*
|
||||
* TODO(BIT-501): Update this property to pull available owners from the data layer.
|
||||
* Currently, it returns a hardcoded list of email addresses.
|
||||
*/
|
||||
val availableOwners: List<String>
|
||||
get() = listOf("a@b.com", "c@d.com")
|
||||
|
||||
companion object {
|
||||
private const val DEFAULT_FOLDER: String = "No Folder"
|
||||
private val DEFAULT_FOLDER: Text = R.string.folder_none.asText()
|
||||
private const val DEFAULT_OWNERSHIP: String = "placeholder@email.com"
|
||||
}
|
||||
}
|
||||
|
@ -795,7 +787,7 @@ sealed class VaultAddItemAction {
|
|||
*
|
||||
* @property folder The new folder text.
|
||||
*/
|
||||
data class FolderChange(val folder: String) : LoginType()
|
||||
data class FolderChange(val folder: Text) : LoginType()
|
||||
|
||||
/**
|
||||
* Fired when the Favorite toggle is changed.
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package com.x8bit.bitwarden.ui.vault.feature.additem
|
||||
|
||||
import com.x8bit.bitwarden.ui.platform.base.util.asText
|
||||
|
||||
/**
|
||||
* A collection of handler functions specifically tailored for managing actions
|
||||
* within the context of adding login items to a vault.
|
||||
|
@ -81,7 +83,7 @@ class VaultAddLoginItemTypeHandlers(
|
|||
},
|
||||
onFolderTextChange = { newFolder ->
|
||||
viewModel.trySendAction(
|
||||
VaultAddItemAction.ItemType.LoginType.FolderChange(newFolder),
|
||||
VaultAddItemAction.ItemType.LoginType.FolderChange(newFolder.asText()),
|
||||
)
|
||||
},
|
||||
onToggleFavorite = { isFavorite ->
|
||||
|
|
|
@ -395,7 +395,7 @@ class VaultAddItemScreenTest : BaseComposeTest() {
|
|||
|
||||
verify {
|
||||
viewModel.trySendAction(
|
||||
VaultAddItemAction.ItemType.LoginType.FolderChange("Folder 1"),
|
||||
VaultAddItemAction.ItemType.LoginType.FolderChange("Folder 1".asText()),
|
||||
)
|
||||
}
|
||||
}
|
||||
|
@ -411,7 +411,7 @@ class VaultAddItemScreenTest : BaseComposeTest() {
|
|||
.assertIsDisplayed()
|
||||
|
||||
mutableStateFlow.update { currentState ->
|
||||
updateLoginType(currentState) { copy(folder = "Folder 2") }
|
||||
updateLoginType(currentState) { copy(folderName = "Folder 2".asText()) }
|
||||
}
|
||||
|
||||
composeTestRule
|
||||
|
|
|
@ -152,13 +152,13 @@ class VaultAddItemViewModelTest : BaseViewModelTest() {
|
|||
@Test
|
||||
fun `FolderChange should update folder in LoginItem`() = runTest {
|
||||
val viewModel = createAddVaultItemViewModel()
|
||||
val action = VaultAddItemAction.ItemType.LoginType.FolderChange("newFolder")
|
||||
val action = VaultAddItemAction.ItemType.LoginType.FolderChange("newFolder".asText())
|
||||
|
||||
viewModel.actionChannel.trySend(action)
|
||||
|
||||
val expectedLoginItem =
|
||||
(initialState.selectedType as VaultAddItemState.ItemType.Login)
|
||||
.copy(folder = "newFolder")
|
||||
.copy(folderName = "newFolder".asText())
|
||||
|
||||
val expectedState = initialState.copy(selectedType = expectedLoginItem)
|
||||
|
||||
|
@ -500,7 +500,7 @@ class VaultAddItemViewModelTest : BaseViewModelTest() {
|
|||
username: String = "",
|
||||
password: String = "",
|
||||
uri: String = "",
|
||||
folder: String = "No Folder",
|
||||
folder: Text = "No Folder".asText(),
|
||||
favorite: Boolean = false,
|
||||
masterPasswordReprompt: Boolean = false,
|
||||
notes: String = "",
|
||||
|
@ -512,7 +512,7 @@ class VaultAddItemViewModelTest : BaseViewModelTest() {
|
|||
username = username,
|
||||
password = password,
|
||||
uri = uri,
|
||||
folder = folder,
|
||||
folderName = folder,
|
||||
favorite = favorite,
|
||||
masterPasswordReprompt = masterPasswordReprompt,
|
||||
notes = notes,
|
||||
|
|
|
@ -112,7 +112,7 @@ class VaultDataExtensionsTest {
|
|||
username = "mockUsername-1",
|
||||
password = "mockPassword-1",
|
||||
uri = "mockUri-1",
|
||||
folder = "mockFolder-1",
|
||||
folderName = "mockFolder-1".asText(),
|
||||
favorite = false,
|
||||
masterPasswordReprompt = false,
|
||||
notes = "mockNotes-1",
|
||||
|
|
Loading…
Add table
Reference in a new issue