Skip to content

Commit ff23dc3

Browse files
PM-25069: Update VaultAddEditViewModel toasts to snackbars (#5769)
1 parent 191ff4c commit ff23dc3

File tree

8 files changed

+103
-80
lines changed

8 files changed

+103
-80
lines changed

app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/SearchViewModel.kt

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -160,7 +160,9 @@ class SearchViewModel @Inject constructor(
160160
snackbarRelayManager
161161
.getSnackbarDataFlow(
162162
SnackbarRelay.CIPHER_DELETED,
163+
SnackbarRelay.CIPHER_DELETED_SOFT,
163164
SnackbarRelay.CIPHER_RESTORED,
165+
SnackbarRelay.CIPHER_UPDATED,
164166
SnackbarRelay.SEND_DELETED,
165167
SnackbarRelay.SEND_UPDATED,
166168
)
@@ -1329,7 +1331,7 @@ sealed class SearchAction {
13291331
*/
13301332
data class SnackbarDataReceived(
13311333
val data: BitwardenSnackbarData,
1332-
) : Internal()
1334+
) : Internal(), BackgroundEvent
13331335

13341336
/**
13351337
* Indicates a result for updating a cipher during the autofill-and-save process.

app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/manager/snackbar/SnackbarRelay.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,12 @@ import kotlinx.serialization.Serializable
99
*/
1010
@Serializable
1111
enum class SnackbarRelay {
12+
CIPHER_CREATED,
1213
CIPHER_DELETED,
14+
CIPHER_DELETED_SOFT,
1315
CIPHER_MOVED_TO_ORGANIZATION,
1416
CIPHER_RESTORED,
17+
CIPHER_UPDATED,
1518
ENVIRONMENT_SAVED,
1619
LOGIN_APPROVAL,
1720
LOGIN_SUCCESS,

app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreen.kt

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.x8bit.bitwarden.ui.vault.feature.addedit
22

3-
import android.widget.Toast
43
import androidx.compose.foundation.layout.Arrangement
54
import androidx.compose.foundation.layout.PaddingValues
65
import androidx.compose.foundation.layout.Row
@@ -29,7 +28,6 @@ import androidx.compose.runtime.setValue
2928
import androidx.compose.ui.Alignment
3029
import androidx.compose.ui.Modifier
3130
import androidx.compose.ui.input.nestedscroll.nestedScroll
32-
import androidx.compose.ui.platform.LocalContext
3331
import androidx.compose.ui.platform.testTag
3432
import androidx.compose.ui.res.painterResource
3533
import androidx.compose.ui.res.stringResource
@@ -114,8 +112,6 @@ fun VaultAddEditScreen(
114112
onNavigateToMoveToOrganization: (cipherId: String, showOnlyCollections: Boolean) -> Unit,
115113
) {
116114
val state by viewModel.stateFlow.collectAsStateWithLifecycle()
117-
val context = LocalContext.current
118-
val resources = context.resources
119115
val userVerificationHandlers = remember(viewModel) {
120116
VaultAddEditUserVerificationHandlers.create(viewModel = viewModel)
121117
}
@@ -141,10 +137,6 @@ fun VaultAddEditScreen(
141137
onNavigateToGeneratorModal(event.generatorMode)
142138
}
143139

144-
is VaultAddEditEvent.ShowToast -> {
145-
Toast.makeText(context, event.message(resources), Toast.LENGTH_SHORT).show()
146-
}
147-
148140
is VaultAddEditEvent.NavigateToAttachments -> onNavigateToAttachments(event.cipherId)
149141
is VaultAddEditEvent.NavigateToMoveToOrganization -> {
150142
onNavigateToMoveToOrganization(event.cipherId, false)

app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import androidx.credentials.provider.ProviderCreateCredentialRequest
77
import androidx.lifecycle.SavedStateHandle
88
import androidx.lifecycle.viewModelScope
99
import com.bitwarden.core.DateTime
10+
import com.bitwarden.core.data.manager.toast.ToastManager
1011
import com.bitwarden.core.data.repository.model.DataState
1112
import com.bitwarden.core.data.repository.util.takeUntilLoaded
1213
import com.bitwarden.network.model.PolicyTypeJson
@@ -114,7 +115,8 @@ private const val KEY_STATE = "state"
114115
class VaultAddEditViewModel @Inject constructor(
115116
savedStateHandle: SavedStateHandle,
116117
generatorRepository: GeneratorRepository,
117-
snackbarRelayManager: SnackbarRelayManager,
118+
private val snackbarRelayManager: SnackbarRelayManager,
119+
private val toastManager: ToastManager,
118120
private val authRepository: AuthRepository,
119121
private val clipboardManager: BitwardenClipboardManager,
120122
private val policyManager: PolicyManager,
@@ -1192,7 +1194,7 @@ class VaultAddEditViewModel @Inject constructor(
11921194
updateLoginContent { loginType ->
11931195
loginType.copy(fido2CredentialCreationDateTime = null)
11941196
}
1195-
sendEvent(event = VaultAddEditEvent.ShowToast(BitwardenString.passkey_removed.asText()))
1197+
sendEvent(event = VaultAddEditEvent.ShowSnackbar(BitwardenString.passkey_removed.asText()))
11961198
}
11971199

11981200
private fun handlePasswordVisibilityChange(
@@ -1656,10 +1658,9 @@ class VaultAddEditViewModel @Inject constructor(
16561658
if (state.shouldExitOnSave) {
16571659
sendEvent(event = VaultAddEditEvent.ExitApp)
16581660
} else {
1659-
sendEvent(
1660-
event = VaultAddEditEvent.ShowToast(
1661-
BitwardenString.new_item_created.asText(),
1662-
),
1661+
snackbarRelayManager.sendSnackbarData(
1662+
data = BitwardenSnackbarData(BitwardenString.new_item_created.asText()),
1663+
relay = SnackbarRelay.CIPHER_CREATED,
16631664
)
16641665
sendEvent(event = VaultAddEditEvent.NavigateBack)
16651666
}
@@ -1690,10 +1691,9 @@ class VaultAddEditViewModel @Inject constructor(
16901691
if (state.shouldExitOnSave) {
16911692
sendEvent(event = VaultAddEditEvent.ExitApp)
16921693
} else {
1693-
sendEvent(
1694-
event = VaultAddEditEvent.ShowToast(
1695-
BitwardenString.item_updated.asText(),
1696-
),
1694+
snackbarRelayManager.sendSnackbarData(
1695+
data = BitwardenSnackbarData(BitwardenString.item_updated.asText()),
1696+
relay = SnackbarRelay.CIPHER_UPDATED,
16971697
)
16981698
sendEvent(event = VaultAddEditEvent.NavigateBack)
16991699
}
@@ -1714,10 +1714,9 @@ class VaultAddEditViewModel @Inject constructor(
17141714

17151715
DeleteCipherResult.Success -> {
17161716
clearDialogState()
1717-
sendEvent(
1718-
VaultAddEditEvent.ShowToast(
1719-
message = BitwardenString.item_soft_deleted.asText(),
1720-
),
1717+
snackbarRelayManager.sendSnackbarData(
1718+
data = BitwardenSnackbarData(BitwardenString.item_soft_deleted.asText()),
1719+
relay = SnackbarRelay.CIPHER_DELETED_SOFT,
17211720
)
17221721
sendEvent(VaultAddEditEvent.NavigateBack)
17231722
}
@@ -1887,7 +1886,7 @@ class VaultAddEditViewModel @Inject constructor(
18871886
when (val result = action.totpResult) {
18881887
is TotpCodeResult.Success -> {
18891888
sendEvent(
1890-
event = VaultAddEditEvent.ShowToast(
1889+
event = VaultAddEditEvent.ShowSnackbar(
18911890
message = BitwardenString.authenticator_key_added.asText(),
18921891
),
18931892
)
@@ -1962,11 +1961,8 @@ class VaultAddEditViewModel @Inject constructor(
19621961
clearDialogState()
19631962
when (action.result) {
19641963
is Fido2RegisterCredentialResult.Error -> {
1965-
sendEvent(
1966-
VaultAddEditEvent.ShowToast(
1967-
BitwardenString.an_error_has_occurred.asText(),
1968-
),
1969-
)
1964+
// Use toast here because we are closing the activity.
1965+
toastManager.show(BitwardenString.an_error_has_occurred)
19701966
sendEvent(
19711967
VaultAddEditEvent.CompleteFido2Registration(
19721968
RegisterFido2CredentialResult.Error(
@@ -1977,7 +1973,8 @@ class VaultAddEditViewModel @Inject constructor(
19771973
}
19781974

19791975
is Fido2RegisterCredentialResult.Success -> {
1980-
sendEvent(VaultAddEditEvent.ShowToast(BitwardenString.item_updated.asText()))
1976+
// Use toast here because we are closing the activity.
1977+
toastManager.show(BitwardenString.item_updated)
19811978
sendEvent(
19821979
VaultAddEditEvent.CompleteFido2Registration(
19831980
RegisterFido2CredentialResult.Success(action.result.responseJson),
@@ -2804,12 +2801,21 @@ sealed class VaultAddEditEvent {
28042801
*/
28052802
data class ShowSnackbar(
28062803
val data: BitwardenSnackbarData,
2807-
) : VaultAddEditEvent(), BackgroundEvent
2808-
2809-
/**
2810-
* Shows a toast with the given [message].
2811-
*/
2812-
data class ShowToast(val message: Text) : VaultAddEditEvent()
2804+
) : VaultAddEditEvent(), BackgroundEvent {
2805+
constructor(
2806+
message: Text,
2807+
messageHeader: Text? = null,
2808+
actionLabel: Text? = null,
2809+
withDismissAction: Boolean = false,
2810+
) : this(
2811+
data = BitwardenSnackbarData(
2812+
message = message,
2813+
messageHeader = messageHeader,
2814+
actionLabel = actionLabel,
2815+
withDismissAction = withDismissAction,
2816+
),
2817+
)
2818+
}
28132819

28142820
/**
28152821
* Leave the application.

app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModel.kt

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,11 @@ class VaultItemViewModel @Inject constructor(
207207
.launchIn(viewModelScope)
208208

209209
snackbarRelayManager
210-
.getSnackbarDataFlow(SnackbarRelay.CIPHER_MOVED_TO_ORGANIZATION)
210+
.getSnackbarDataFlow(
211+
SnackbarRelay.CIPHER_DELETED_SOFT,
212+
SnackbarRelay.CIPHER_MOVED_TO_ORGANIZATION,
213+
SnackbarRelay.CIPHER_UPDATED,
214+
)
211215
.map { VaultItemAction.Internal.SnackbarDataReceived(it) }
212216
.onEach(::sendAction)
213217
.launchIn(viewModelScope)

app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModel.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,8 +218,11 @@ class VaultItemListingViewModel @Inject constructor(
218218

219219
snackbarRelayManager
220220
.getSnackbarDataFlow(
221+
SnackbarRelay.CIPHER_CREATED,
221222
SnackbarRelay.CIPHER_DELETED,
223+
SnackbarRelay.CIPHER_DELETED_SOFT,
222224
SnackbarRelay.CIPHER_RESTORED,
225+
SnackbarRelay.CIPHER_UPDATED,
223226
SnackbarRelay.SEND_DELETED,
224227
SnackbarRelay.SEND_UPDATED,
225228
)
@@ -3586,7 +3589,7 @@ sealed class VaultItemListingsAction {
35863589
*/
35873590
data class SnackbarDataReceived(
35883591
val data: BitwardenSnackbarData,
3589-
) : Internal()
3592+
) : Internal(), BackgroundEvent
35903593

35913594
/**
35923595
* Indicates that an error occurred while decrypting a cipher.

app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModel.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -173,8 +173,11 @@ class VaultViewModel @Inject constructor(
173173
delay(timeMillis = LOGIN_SUCCESS_SNACKBAR_DELAY)
174174
},
175175
snackbarRelayManager.getSnackbarDataFlow(
176+
SnackbarRelay.CIPHER_CREATED,
176177
SnackbarRelay.CIPHER_DELETED,
178+
SnackbarRelay.CIPHER_DELETED_SOFT,
177179
SnackbarRelay.CIPHER_RESTORED,
180+
SnackbarRelay.CIPHER_UPDATED,
178181
SnackbarRelay.LOGINS_IMPORTED,
179182
),
180183
)
@@ -1713,7 +1716,7 @@ sealed class VaultAction {
17131716
*/
17141717
data class SnackbarDataReceive(
17151718
val data: BitwardenSnackbarData,
1716-
) : Internal()
1719+
) : Internal(), BackgroundEvent
17171720

17181721
/**
17191722
* Indicates that the flight recorder data was received.

0 commit comments

Comments
 (0)