mirror of
https://github.com/bitwarden/android.git
synced 2026-08-26 22:04:07 -05:00
[PM-31081] Added snackbar when items are successfully migrated (#6394)
This commit is contained in:
@@ -27,4 +27,5 @@ enum class SnackbarRelay {
|
||||
SEND_DELETED,
|
||||
SEND_UPDATED,
|
||||
LEFT_ORGANIZATION,
|
||||
VAULT_MIGRATED_TO_MY_ITEMS,
|
||||
}
|
||||
|
||||
+10
@@ -7,6 +7,8 @@ import com.bitwarden.core.data.repository.error.MissingPropertyException
|
||||
import com.bitwarden.network.util.isNoConnectionError
|
||||
import com.bitwarden.network.util.isTimeoutError
|
||||
import com.bitwarden.ui.platform.base.BaseViewModel
|
||||
import com.bitwarden.ui.platform.components.snackbar.model.BitwardenSnackbarData
|
||||
import com.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.Text
|
||||
import com.bitwarden.ui.util.asText
|
||||
@@ -16,6 +18,7 @@ import com.x8bit.bitwarden.data.platform.manager.model.OrganizationEvent
|
||||
import com.x8bit.bitwarden.data.vault.manager.VaultMigrationManager
|
||||
import com.x8bit.bitwarden.data.vault.manager.VaultSyncManager
|
||||
import com.x8bit.bitwarden.data.vault.repository.model.MigratePersonalVaultResult
|
||||
import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay
|
||||
import dagger.hilt.android.lifecycle.HiltViewModel
|
||||
import kotlinx.coroutines.flow.launchIn
|
||||
import kotlinx.coroutines.flow.onEach
|
||||
@@ -37,6 +40,7 @@ class MigrateToMyItemsViewModel @Inject constructor(
|
||||
vaultSyncManager: VaultSyncManager,
|
||||
savedStateHandle: SavedStateHandle,
|
||||
private val authRepository: AuthRepository,
|
||||
private val snackbarRelayManager: SnackbarRelayManager<SnackbarRelay>,
|
||||
) : BaseViewModel<MigrateToMyItemsState, MigrateToMyItemsEvent, MigrateToMyItemsAction>(
|
||||
initialState = savedStateHandle[KEY_STATE] ?: run {
|
||||
val args = savedStateHandle.toMigrateToMyItemsArgs()
|
||||
@@ -148,6 +152,12 @@ class MigrateToMyItemsViewModel @Inject constructor(
|
||||
) {
|
||||
when (val result = action.result) {
|
||||
is MigratePersonalVaultResult.Success -> {
|
||||
snackbarRelayManager.sendSnackbarData(
|
||||
relay = SnackbarRelay.VAULT_MIGRATED_TO_MY_ITEMS,
|
||||
data = BitwardenSnackbarData(
|
||||
message = BitwardenString.items_transferred.asText(),
|
||||
),
|
||||
)
|
||||
organizationEventManager.trackEvent(
|
||||
event = OrganizationEvent.ItemOrganizationAccepted(
|
||||
organizationId = state.organizationId,
|
||||
|
||||
@@ -209,6 +209,7 @@ class VaultViewModel @Inject constructor(
|
||||
SnackbarRelay.FOLDER_CREATED,
|
||||
SnackbarRelay.LOGINS_IMPORTED,
|
||||
SnackbarRelay.LEFT_ORGANIZATION,
|
||||
SnackbarRelay.VAULT_MIGRATED_TO_MY_ITEMS,
|
||||
),
|
||||
)
|
||||
.map { VaultAction.Internal.SnackbarDataReceive(it) }
|
||||
|
||||
+15
@@ -4,6 +4,8 @@ import androidx.lifecycle.SavedStateHandle
|
||||
import app.cash.turbine.test
|
||||
import com.bitwarden.core.data.repository.error.MissingPropertyException
|
||||
import com.bitwarden.ui.platform.base.BaseViewModelTest
|
||||
import com.bitwarden.ui.platform.components.snackbar.model.BitwardenSnackbarData
|
||||
import com.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager
|
||||
import com.bitwarden.ui.platform.resource.BitwardenString
|
||||
import com.bitwarden.ui.util.asText
|
||||
import com.x8bit.bitwarden.data.auth.repository.AuthRepository
|
||||
@@ -13,6 +15,7 @@ import com.x8bit.bitwarden.data.platform.manager.model.OrganizationEvent
|
||||
import com.x8bit.bitwarden.data.vault.manager.VaultMigrationManager
|
||||
import com.x8bit.bitwarden.data.vault.manager.VaultSyncManager
|
||||
import com.x8bit.bitwarden.data.vault.repository.model.MigratePersonalVaultResult
|
||||
import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay
|
||||
import io.mockk.coEvery
|
||||
import io.mockk.coVerify
|
||||
import io.mockk.every
|
||||
@@ -52,6 +55,10 @@ class MigrateToMyItemsViewModelTest : BaseViewModelTest() {
|
||||
every { userStateFlow } returns mutableUserStateFlow
|
||||
}
|
||||
|
||||
private val mockSnackbarRelayManager: SnackbarRelayManager<SnackbarRelay> = mockk {
|
||||
every { sendSnackbarData(data = any(), relay = any()) } just runs
|
||||
}
|
||||
|
||||
@BeforeEach
|
||||
fun setup() {
|
||||
mockkStatic(SavedStateHandle::toMigrateToMyItemsArgs)
|
||||
@@ -158,6 +165,13 @@ class MigrateToMyItemsViewModelTest : BaseViewModelTest() {
|
||||
|
||||
assertNull(viewModel.stateFlow.value.dialog)
|
||||
|
||||
mockSnackbarRelayManager.sendSnackbarData(
|
||||
relay = SnackbarRelay.LEFT_ORGANIZATION,
|
||||
data = BitwardenSnackbarData(
|
||||
message = BitwardenString.you_left_the_organization.asText(),
|
||||
),
|
||||
)
|
||||
|
||||
verify {
|
||||
mockOrganizationEventManager.trackEvent(
|
||||
event = OrganizationEvent.ItemOrganizationAccepted(
|
||||
@@ -325,6 +339,7 @@ class MigrateToMyItemsViewModelTest : BaseViewModelTest() {
|
||||
vaultMigrationManager = mockVaultMigrationManager,
|
||||
vaultSyncManager = mockVaultSyncManager,
|
||||
authRepository = mockAuthRepository,
|
||||
snackbarRelayManager = mockSnackbarRelayManager,
|
||||
savedStateHandle = SavedStateHandle(mapOf("state" to state)),
|
||||
)
|
||||
}
|
||||
|
||||
@@ -1197,4 +1197,5 @@ Do you want to switch to this account?</string>
|
||||
<string name="your_premium_subscription_ended">Your Premium subscription ended</string>
|
||||
<string name="to_regain_access_to_your_archive_restart_your_premium_subscription">To regain access to your archive, restart your Premium subscription. If you edit details for an archived item before restarting, it’ll be moved back into your vault.</string>
|
||||
<string name="restart_premium">Restart Premium</string>
|
||||
<string name="items_transferred">Items transferred</string>
|
||||
</resources>
|
||||
|
||||
Reference in New Issue
Block a user