diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/model/SnackbarRelay.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/model/SnackbarRelay.kt index 39be40d0fc..7121a260fd 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/model/SnackbarRelay.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/model/SnackbarRelay.kt @@ -27,4 +27,5 @@ enum class SnackbarRelay { SEND_DELETED, SEND_UPDATED, LEFT_ORGANIZATION, + VAULT_MIGRATED_TO_MY_ITEMS, } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/migratetomyitems/MigrateToMyItemsViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/migratetomyitems/MigrateToMyItemsViewModel.kt index 79c7f40fb6..c0edad3e9d 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/migratetomyitems/MigrateToMyItemsViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/migratetomyitems/MigrateToMyItemsViewModel.kt @@ -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, ) : BaseViewModel( 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, diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModel.kt index 84efbf5c5c..07b4335cdf 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModel.kt @@ -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) } diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/migratetomyitems/MigrateToMyItemsViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/migratetomyitems/MigrateToMyItemsViewModelTest.kt index 954986f6ed..4d5b30bad4 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/migratetomyitems/MigrateToMyItemsViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/migratetomyitems/MigrateToMyItemsViewModelTest.kt @@ -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 = 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)), ) } diff --git a/ui/src/main/res/values/strings.xml b/ui/src/main/res/values/strings.xml index 41d08f4436..095ae6e615 100644 --- a/ui/src/main/res/values/strings.xml +++ b/ui/src/main/res/values/strings.xml @@ -1197,4 +1197,5 @@ Do you want to switch to this account? Your Premium subscription ended 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. Restart Premium + Items transferred