From efd15b027cf616eb1628436d6861681c8c56898f Mon Sep 17 00:00:00 2001 From: David Perez Date: Thu, 6 Nov 2025 12:50:06 -0600 Subject: [PATCH] PM-27845: Move SnackbarRelayManager to ui module (#6127) --- .../environment/EnvironmentViewModel.kt | 6 ++-- .../auth/feature/landing/LandingViewModel.kt | 6 ++-- .../LoginWithDeviceViewModel.kt | 6 ++-- .../StartRegistrationViewModel.kt | 6 ++-- .../feature/search/SearchViewModel.kt | 6 ++-- .../loginapproval/LoginApprovalViewModel.kt | 6 ++-- .../PendingRequestsViewModel.kt | 6 ++-- .../settings/folders/FoldersViewModel.kt | 6 ++-- .../folders/addedit/FolderAddEditViewModel.kt | 6 ++-- .../settings/vault/VaultSettingsViewModel.kt | 6 ++-- .../manager/di/PlatformUiManagerModule.kt | 7 ++-- .../snackbar => model}/SnackbarRelay.kt | 2 +- .../ui/tools/feature/send/SendViewModel.kt | 6 ++-- .../send/addedit/AddEditSendViewModel.kt | 6 ++-- .../send/viewsend/ViewSendViewModel.kt | 6 ++-- .../feature/addedit/VaultAddEditViewModel.kt | 6 ++-- .../importlogins/ImportLoginsViewModel.kt | 6 ++-- .../vault/feature/item/VaultItemViewModel.kt | 6 ++-- .../itemlisting/VaultItemListingViewModel.kt | 6 ++-- .../VaultMoveToOrganizationViewModel.kt | 6 ++-- .../ui/vault/feature/vault/VaultViewModel.kt | 6 ++-- .../environment/EnvironmentViewModelTest.kt | 6 ++-- .../feature/landing/LandingViewModelTest.kt | 6 ++-- .../LoginWithDeviceViewModelTest.kt | 6 ++-- .../StartRegistrationViewModelTest.kt | 6 ++-- .../feature/search/SearchViewModelTest.kt | 5 +-- .../LoginApprovalViewModelTest.kt | 6 ++-- .../PendingRequestsViewModelTest.kt | 5 +-- .../settings/folders/FoldersViewModelTest.kt | 5 +-- .../addedit/FolderAddEditViewModelTest.kt | 6 ++-- .../vault/VaultSettingsViewModelTest.kt | 6 ++-- .../tools/feature/send/SendViewModelTest.kt | 5 +-- .../send/addedit/AddEditSendViewModelTest.kt | 6 ++-- .../send/viewsend/ViewSendViewModelTest.kt | 6 ++-- .../addedit/VaultAddEditViewModelTest.kt | 6 ++-- .../importlogins/ImportLoginsViewModelTest.kt | 6 ++-- .../feature/item/VaultItemViewModelTest.kt | 6 ++-- .../VaultItemListingViewModelTest.kt | 5 +-- .../VaultMoveToOrganizationViewModelTest.kt | 6 ++-- .../vault/feature/vault/VaultViewModelTest.kt | 6 ++-- ui/build.gradle.kts | 4 +++ .../manager/snackbar/SnackbarRelayManager.kt | 13 +++---- .../snackbar/SnackbarRelayManagerImpl.kt | 35 +++++++++---------- .../snackbar/SnackbarRelayManagerTest.kt | 23 +++++++----- 44 files changed, 158 insertions(+), 149 deletions(-) rename app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/{manager/snackbar => model}/SnackbarRelay.kt (91%) rename {app/src/main/kotlin/com/x8bit => ui/src/main/kotlin/com}/bitwarden/ui/platform/manager/snackbar/SnackbarRelayManager.kt (60%) rename {app/src/main/kotlin/com/x8bit => ui/src/main/kotlin/com}/bitwarden/ui/platform/manager/snackbar/SnackbarRelayManagerImpl.kt (72%) rename {app/src/test/kotlin/com/x8bit => ui/src/test/kotlin/com}/bitwarden/ui/platform/manager/snackbar/SnackbarRelayManagerTest.kt (89%) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/environment/EnvironmentViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/environment/EnvironmentViewModel.kt index 05b1c125e3..84e1658f8c 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/environment/EnvironmentViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/environment/EnvironmentViewModel.kt @@ -12,6 +12,7 @@ import com.bitwarden.ui.platform.base.util.isValidUri import com.bitwarden.ui.platform.base.util.orNullIfBlank import com.bitwarden.ui.platform.base.util.prefixHttpsIfNecessaryOrNull import com.bitwarden.ui.platform.components.snackbar.model.BitwardenSnackbarData +import com.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager import com.bitwarden.ui.platform.model.FileData import com.bitwarden.ui.platform.resource.BitwardenString import com.bitwarden.ui.util.Text @@ -22,8 +23,7 @@ import com.x8bit.bitwarden.data.platform.manager.model.ImportPrivateKeyResult import com.x8bit.bitwarden.data.platform.repository.EnvironmentRepository import com.x8bit.bitwarden.data.vault.manager.FileManager import com.x8bit.bitwarden.ui.platform.manager.keychain.model.PrivateKeyAliasSelectionResult -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -43,7 +43,7 @@ class EnvironmentViewModel @Inject constructor( private val environmentRepository: EnvironmentRepository, private val fileManager: FileManager, private val certificateManager: CertificateManager, - private val snackbarRelayManager: SnackbarRelayManager, + private val snackbarRelayManager: SnackbarRelayManager, private val savedStateHandle: SavedStateHandle, ) : BaseViewModel( initialState = savedStateHandle[KEY_STATE] ?: run { diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/landing/LandingViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/landing/LandingViewModel.kt index 598f04d802..b01a3d6b18 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/landing/LandingViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/landing/LandingViewModel.kt @@ -9,6 +9,7 @@ import com.bitwarden.ui.platform.base.BaseViewModel import com.bitwarden.ui.platform.base.util.isValidEmail import com.bitwarden.ui.platform.components.account.model.AccountSummary 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 @@ -17,8 +18,7 @@ import com.x8bit.bitwarden.data.auth.repository.model.LogoutReason import com.x8bit.bitwarden.data.auth.repository.model.UserState import com.x8bit.bitwarden.data.platform.repository.EnvironmentRepository import com.x8bit.bitwarden.data.vault.repository.VaultRepository -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import com.x8bit.bitwarden.ui.vault.feature.vault.util.toAccountSummaries import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.launchIn @@ -39,7 +39,7 @@ class LandingViewModel @Inject constructor( private val authRepository: AuthRepository, private val vaultRepository: VaultRepository, private val environmentRepository: EnvironmentRepository, - snackbarRelayManager: SnackbarRelayManager, + snackbarRelayManager: SnackbarRelayManager, savedStateHandle: SavedStateHandle, ) : BaseViewModel( initialState = savedStateHandle[KEY_STATE] diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/loginwithdevice/LoginWithDeviceViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/loginwithdevice/LoginWithDeviceViewModel.kt index a54f6ae8f2..4c49f11629 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/loginwithdevice/LoginWithDeviceViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/loginwithdevice/LoginWithDeviceViewModel.kt @@ -5,6 +5,7 @@ import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.viewModelScope 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 @@ -13,8 +14,7 @@ import com.x8bit.bitwarden.data.auth.repository.AuthRepository import com.x8bit.bitwarden.data.auth.repository.model.LoginResult import com.x8bit.bitwarden.ui.auth.feature.loginwithdevice.model.LoginWithDeviceType import com.x8bit.bitwarden.ui.auth.feature.loginwithdevice.util.toAuthRequestType -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Job import kotlinx.coroutines.flow.launchIn @@ -34,7 +34,7 @@ private const val KEY_STATE = "state" @HiltViewModel class LoginWithDeviceViewModel @Inject constructor( private val authRepository: AuthRepository, - private val snackbarRelayManager: SnackbarRelayManager, + private val snackbarRelayManager: SnackbarRelayManager, savedStateHandle: SavedStateHandle, ) : BaseViewModel( initialState = savedStateHandle[KEY_STATE] diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationViewModel.kt index e358ae9ebe..64e91481b7 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationViewModel.kt @@ -9,6 +9,7 @@ import com.bitwarden.ui.platform.base.BackgroundEvent import com.bitwarden.ui.platform.base.BaseViewModel import com.bitwarden.ui.platform.base.util.isValidEmail 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,8 +17,7 @@ import com.x8bit.bitwarden.data.auth.repository.AuthRepository import com.x8bit.bitwarden.data.auth.repository.model.RegisterResult import com.x8bit.bitwarden.data.auth.repository.model.SendVerificationEmailResult import com.x8bit.bitwarden.data.platform.repository.EnvironmentRepository -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map @@ -36,7 +36,7 @@ private const val KEY_STATE = "state" @HiltViewModel class StartRegistrationViewModel @Inject constructor( savedStateHandle: SavedStateHandle, - snackbarRelayManager: SnackbarRelayManager, + snackbarRelayManager: SnackbarRelayManager, private val authRepository: AuthRepository, private val environmentRepository: EnvironmentRepository, ) : BaseViewModel( diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/SearchViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/SearchViewModel.kt index 9340a04b60..5ca939b2f7 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/SearchViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/SearchViewModel.kt @@ -13,6 +13,7 @@ import com.bitwarden.ui.platform.base.BackgroundEvent import com.bitwarden.ui.platform.base.BaseViewModel import com.bitwarden.ui.platform.components.icon.model.IconData import com.bitwarden.ui.platform.components.snackbar.model.BitwardenSnackbarData +import com.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager import com.bitwarden.ui.platform.model.TotpData import com.bitwarden.ui.platform.resource.BitwardenString import com.bitwarden.ui.util.Text @@ -50,8 +51,7 @@ import com.x8bit.bitwarden.ui.platform.feature.search.util.filterAndOrganize import com.x8bit.bitwarden.ui.platform.feature.search.util.toSearchTypeData import com.x8bit.bitwarden.ui.platform.feature.search.util.toViewState import com.x8bit.bitwarden.ui.platform.feature.search.util.updateWithAdditionalDataIfNecessary -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import com.x8bit.bitwarden.ui.tools.feature.send.model.SendItemType import com.x8bit.bitwarden.ui.tools.feature.send.util.toSendItemType import com.x8bit.bitwarden.ui.vault.feature.itemlisting.model.ListingItemOverflowAction @@ -97,7 +97,7 @@ class SearchViewModel @Inject constructor( private val authRepo: AuthRepository, environmentRepo: EnvironmentRepository, settingsRepo: SettingsRepository, - snackbarRelayManager: SnackbarRelayManager, + snackbarRelayManager: SnackbarRelayManager, specialCircumstanceManager: SpecialCircumstanceManager, ) : BaseViewModel( // We load the state from the savedStateHandle for testing purposes. diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/loginapproval/LoginApprovalViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/loginapproval/LoginApprovalViewModel.kt index 28c69861ea..e9db9ece90 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/loginapproval/LoginApprovalViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/loginapproval/LoginApprovalViewModel.kt @@ -10,6 +10,7 @@ import com.bitwarden.core.data.manager.toast.ToastManager import com.bitwarden.core.data.util.toFormattedDateTimeStyle 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 @@ -18,8 +19,7 @@ import com.x8bit.bitwarden.data.auth.manager.model.AuthRequestUpdatesResult import com.x8bit.bitwarden.data.auth.repository.AuthRepository import com.x8bit.bitwarden.data.platform.manager.SpecialCircumstanceManager import com.x8bit.bitwarden.data.platform.manager.model.SpecialCircumstance -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map @@ -41,7 +41,7 @@ class LoginApprovalViewModel @Inject constructor( private val clock: Clock, private val authRepository: AuthRepository, private val specialCircumstanceManager: SpecialCircumstanceManager, - private val snackbarRelayManager: SnackbarRelayManager, + private val snackbarRelayManager: SnackbarRelayManager, private val toastManager: ToastManager, savedStateHandle: SavedStateHandle, ) : BaseViewModel( diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/pendingrequests/PendingRequestsViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/pendingrequests/PendingRequestsViewModel.kt index 0b33b97c12..3564e3dca4 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/pendingrequests/PendingRequestsViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/pendingrequests/PendingRequestsViewModel.kt @@ -12,12 +12,12 @@ import com.bitwarden.core.util.isOverFiveMinutesOld import com.bitwarden.ui.platform.base.BackgroundEvent 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.x8bit.bitwarden.data.auth.manager.model.AuthRequest import com.x8bit.bitwarden.data.auth.manager.model.AuthRequestsUpdatesResult import com.x8bit.bitwarden.data.auth.repository.AuthRepository import com.x8bit.bitwarden.data.platform.repository.SettingsRepository -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Job import kotlinx.coroutines.flow.launchIn @@ -40,7 +40,7 @@ private const val KEY_STATE = "state" class PendingRequestsViewModel @Inject constructor( private val clock: Clock, private val authRepository: AuthRepository, - snackbarRelayManager: SnackbarRelayManager, + snackbarRelayManager: SnackbarRelayManager, settingsRepository: SettingsRepository, buildInfoManager: BuildInfoManager, savedStateHandle: SavedStateHandle, diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/FoldersViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/FoldersViewModel.kt index 5983a85b5e..38a83e84fa 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/FoldersViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/FoldersViewModel.kt @@ -6,6 +6,7 @@ import com.bitwarden.core.data.repository.model.DataState import com.bitwarden.ui.platform.base.BackgroundEvent 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 @@ -13,8 +14,7 @@ import com.bitwarden.ui.util.concat import com.bitwarden.vault.FolderView import com.x8bit.bitwarden.data.vault.repository.VaultRepository import com.x8bit.bitwarden.ui.platform.feature.settings.folders.model.FolderDisplayItem -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map @@ -30,7 +30,7 @@ import javax.inject.Inject @HiltViewModel class FoldersViewModel @Inject constructor( vaultRepository: VaultRepository, - snackbarRelayManager: SnackbarRelayManager, + snackbarRelayManager: SnackbarRelayManager, ) : BaseViewModel( initialState = FoldersState(viewState = FoldersState.ViewState.Loading), ) { diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/addedit/FolderAddEditViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/addedit/FolderAddEditViewModel.kt index e6a8e9977a..c5aea7b585 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/addedit/FolderAddEditViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/addedit/FolderAddEditViewModel.kt @@ -7,6 +7,7 @@ import com.bitwarden.core.DateTime import com.bitwarden.core.data.repository.model.DataState 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 @@ -17,8 +18,7 @@ import com.x8bit.bitwarden.data.vault.repository.model.CreateFolderResult import com.x8bit.bitwarden.data.vault.repository.model.DeleteFolderResult import com.x8bit.bitwarden.data.vault.repository.model.UpdateFolderResult import com.x8bit.bitwarden.ui.platform.feature.settings.folders.model.FolderAddEditType -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach @@ -38,7 +38,7 @@ private const val KEY_STATE = "state" class FolderAddEditViewModel @Inject constructor( savedStateHandle: SavedStateHandle, private val vaultRepository: VaultRepository, - private val relayManager: SnackbarRelayManager, + private val relayManager: SnackbarRelayManager, ) : BaseViewModel( // We load the state from the savedStateHandle for testing purposes. initialState = savedStateHandle[KEY_STATE] diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsViewModel.kt index ba15c3ea6e..56767b2ed1 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsViewModel.kt @@ -5,10 +5,10 @@ import com.bitwarden.core.data.manager.model.FlagKey import com.bitwarden.ui.platform.base.BackgroundEvent 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.x8bit.bitwarden.data.platform.manager.FeatureFlagManager import com.x8bit.bitwarden.data.platform.manager.FirstTimeActionManager -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.map @@ -22,7 +22,7 @@ import javax.inject.Inject @Suppress("TooManyFunctions") @HiltViewModel class VaultSettingsViewModel @Inject constructor( - snackbarRelayManager: SnackbarRelayManager, + snackbarRelayManager: SnackbarRelayManager, private val firstTimeActionManager: FirstTimeActionManager, private val featureFlagManager: FeatureFlagManager, ) : BaseViewModel( diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/manager/di/PlatformUiManagerModule.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/manager/di/PlatformUiManagerModule.kt index 9af9dcc185..2b43c6632c 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/manager/di/PlatformUiManagerModule.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/manager/di/PlatformUiManagerModule.kt @@ -5,11 +5,12 @@ import com.bitwarden.core.data.manager.BuildInfoManager import com.bitwarden.core.data.manager.dispatcher.DispatcherManager import com.bitwarden.ui.platform.manager.share.ShareManager import com.bitwarden.ui.platform.manager.share.ShareManagerImpl +import com.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManagerImpl import com.x8bit.bitwarden.ui.platform.manager.BitwardenBuildInfoManagerImpl import com.x8bit.bitwarden.ui.platform.manager.resource.ResourceManager import com.x8bit.bitwarden.ui.platform.manager.resource.ResourceManagerImpl -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManagerImpl +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -37,7 +38,7 @@ object PlatformUiManagerModule { @Singleton fun provideSnackbarRelayManager( dispatcherManager: DispatcherManager, - ): SnackbarRelayManager = SnackbarRelayManagerImpl( + ): SnackbarRelayManager = SnackbarRelayManagerImpl( dispatcherManager = dispatcherManager, ) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/manager/snackbar/SnackbarRelay.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/model/SnackbarRelay.kt similarity index 91% rename from app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/manager/snackbar/SnackbarRelay.kt rename to app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/model/SnackbarRelay.kt index 7af129113f..1954676cc3 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/manager/snackbar/SnackbarRelay.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/model/SnackbarRelay.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.ui.platform.manager.snackbar +package com.x8bit.bitwarden.ui.platform.model import com.bitwarden.ui.platform.components.snackbar.model.BitwardenSnackbarData import kotlinx.serialization.Serializable diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/SendViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/SendViewModel.kt index bff231efa4..c0693d871e 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/SendViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/SendViewModel.kt @@ -11,6 +11,7 @@ import com.bitwarden.ui.platform.base.BackgroundEvent import com.bitwarden.ui.platform.base.BaseViewModel import com.bitwarden.ui.platform.components.icon.model.IconData import com.bitwarden.ui.platform.components.snackbar.model.BitwardenSnackbarData +import com.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager import com.bitwarden.ui.platform.resource.BitwardenDrawable import com.bitwarden.ui.platform.resource.BitwardenString import com.bitwarden.ui.util.Text @@ -26,8 +27,7 @@ import com.x8bit.bitwarden.data.vault.repository.VaultRepository import com.x8bit.bitwarden.data.vault.repository.model.DeleteSendResult import com.x8bit.bitwarden.data.vault.repository.model.RemovePasswordSendResult import com.x8bit.bitwarden.data.vault.repository.model.SendData -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import com.x8bit.bitwarden.ui.tools.feature.send.model.SendItemType import com.x8bit.bitwarden.ui.tools.feature.send.util.toViewState import com.x8bit.bitwarden.ui.vault.feature.item.VaultItemScreen @@ -54,7 +54,7 @@ class SendViewModel @Inject constructor( authRepo: AuthRepository, settingsRepo: SettingsRepository, policyManager: PolicyManager, - snackbarRelayManager: SnackbarRelayManager, + snackbarRelayManager: SnackbarRelayManager, private val clipboardManager: BitwardenClipboardManager, private val environmentRepo: EnvironmentRepository, private val vaultRepo: VaultRepository, diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendViewModel.kt index 76cf2b3560..eeb2d73134 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendViewModel.kt @@ -12,6 +12,7 @@ import com.bitwarden.send.SendView import com.bitwarden.ui.platform.base.BackgroundEvent 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.model.FileData import com.bitwarden.ui.platform.resource.BitwardenString import com.bitwarden.ui.util.Text @@ -30,8 +31,7 @@ import com.x8bit.bitwarden.data.vault.repository.model.CreateSendResult import com.x8bit.bitwarden.data.vault.repository.model.DeleteSendResult import com.x8bit.bitwarden.data.vault.repository.model.RemovePasswordSendResult import com.x8bit.bitwarden.data.vault.repository.model.UpdateSendResult -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import com.x8bit.bitwarden.ui.tools.feature.send.addedit.model.AddEditSendType import com.x8bit.bitwarden.ui.tools.feature.send.addedit.util.shouldFinishOnComplete import com.x8bit.bitwarden.ui.tools.feature.send.addedit.util.toSendName @@ -74,7 +74,7 @@ class AddEditSendViewModel @Inject constructor( private val vaultRepo: VaultRepository, private val policyManager: PolicyManager, private val networkConnectionManager: NetworkConnectionManager, - private val snackbarRelayManager: SnackbarRelayManager, + private val snackbarRelayManager: SnackbarRelayManager, ) : BaseViewModel( // We load the state from the savedStateHandle for testing purposes. initialState = savedStateHandle[KEY_STATE] ?: run { diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/viewsend/ViewSendViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/viewsend/ViewSendViewModel.kt index 0da3310a1e..d155f5b53a 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/viewsend/ViewSendViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/viewsend/ViewSendViewModel.kt @@ -9,6 +9,7 @@ import com.bitwarden.send.SendView import com.bitwarden.ui.platform.base.BackgroundEvent 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 @@ -17,8 +18,7 @@ import com.x8bit.bitwarden.data.platform.manager.clipboard.BitwardenClipboardMan import com.x8bit.bitwarden.data.platform.repository.EnvironmentRepository import com.x8bit.bitwarden.data.vault.repository.VaultRepository import com.x8bit.bitwarden.data.vault.repository.model.DeleteSendResult -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import com.x8bit.bitwarden.ui.tools.feature.send.model.SendItemType import com.x8bit.bitwarden.ui.tools.feature.send.viewsend.util.toViewSendViewStateContent import dagger.hilt.android.lifecycle.HiltViewModel @@ -40,7 +40,7 @@ private const val KEY_STATE = "state" @HiltViewModel class ViewSendViewModel @Inject constructor( private val clipboardManager: BitwardenClipboardManager, - private val snackbarRelayManager: SnackbarRelayManager, + private val snackbarRelayManager: SnackbarRelayManager, private val clock: Clock, private val vaultRepository: VaultRepository, environmentRepository: EnvironmentRepository, diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt index a992d0ad9d..876faaf1f5 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModel.kt @@ -14,6 +14,7 @@ import com.bitwarden.network.model.PolicyTypeJson import com.bitwarden.ui.platform.base.BackgroundEvent 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.model.TotpData import com.bitwarden.ui.platform.resource.BitwardenPlurals import com.bitwarden.ui.platform.resource.BitwardenString @@ -60,8 +61,7 @@ import com.x8bit.bitwarden.data.vault.repository.model.UpdateCipherResult import com.x8bit.bitwarden.data.vault.repository.model.VaultData import com.x8bit.bitwarden.ui.credentials.manager.model.RegisterFido2CredentialResult import com.x8bit.bitwarden.ui.platform.manager.resource.ResourceManager -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import com.x8bit.bitwarden.ui.tools.feature.generator.model.GeneratorMode import com.x8bit.bitwarden.ui.vault.feature.addedit.model.CustomFieldAction import com.x8bit.bitwarden.ui.vault.feature.addedit.model.CustomFieldType @@ -117,7 +117,7 @@ private const val KEY_STATE = "state" class VaultAddEditViewModel @Inject constructor( savedStateHandle: SavedStateHandle, generatorRepository: GeneratorRepository, - private val snackbarRelayManager: SnackbarRelayManager, + private val snackbarRelayManager: SnackbarRelayManager, private val toastManager: ToastManager, private val authRepository: AuthRepository, private val clipboardManager: BitwardenClipboardManager, diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsViewModel.kt index 2cc20eab6f..f5202f107a 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsViewModel.kt @@ -3,6 +3,7 @@ package com.x8bit.bitwarden.ui.vault.feature.importlogins import androidx.lifecycle.viewModelScope 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 @@ -11,8 +12,7 @@ import com.x8bit.bitwarden.data.platform.repository.EnvironmentRepository import com.x8bit.bitwarden.data.platform.util.toUriOrNull import com.x8bit.bitwarden.data.vault.manager.model.SyncVaultDataResult import com.x8bit.bitwarden.data.vault.repository.VaultRepository -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.update import kotlinx.coroutines.launch @@ -27,7 +27,7 @@ class ImportLoginsViewModel @Inject constructor( private val vaultRepository: VaultRepository, private val firstTimeActionManager: FirstTimeActionManager, private val environmentRepository: EnvironmentRepository, - private val snackbarRelayManager: SnackbarRelayManager, + private val snackbarRelayManager: SnackbarRelayManager, ) : BaseViewModel( initialState = run { val vaultUrl = environmentRepository.environment.environmentUrlData.webVault diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModel.kt index 0b930ee373..83fbd1538e 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModel.kt @@ -13,6 +13,7 @@ import com.bitwarden.ui.platform.base.BackgroundEvent import com.bitwarden.ui.platform.base.BaseViewModel import com.bitwarden.ui.platform.components.icon.model.IconData import com.bitwarden.ui.platform.components.snackbar.model.BitwardenSnackbarData +import com.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager import com.bitwarden.ui.platform.resource.BitwardenPlurals import com.bitwarden.ui.platform.resource.BitwardenString import com.bitwarden.ui.util.Text @@ -33,8 +34,7 @@ import com.x8bit.bitwarden.data.vault.repository.VaultRepository import com.x8bit.bitwarden.data.vault.repository.model.DeleteCipherResult import com.x8bit.bitwarden.data.vault.repository.model.DownloadAttachmentResult import com.x8bit.bitwarden.data.vault.repository.model.RestoreCipherResult -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import com.x8bit.bitwarden.ui.vault.feature.item.model.TotpCodeItemData import com.x8bit.bitwarden.ui.vault.feature.item.model.VaultItemLocation import com.x8bit.bitwarden.ui.vault.feature.item.model.VaultItemStateData @@ -75,7 +75,7 @@ class VaultItemViewModel @Inject constructor( private val organizationEventManager: OrganizationEventManager, private val environmentRepository: EnvironmentRepository, private val settingsRepository: SettingsRepository, - private val snackbarRelayManager: SnackbarRelayManager, + private val snackbarRelayManager: SnackbarRelayManager, ) : BaseViewModel( // We load the state from the savedStateHandle for testing purposes. initialState = savedStateHandle[KEY_STATE] ?: run { diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModel.kt index cea5caf51f..0718be7825 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModel.kt @@ -23,6 +23,7 @@ import com.bitwarden.ui.platform.base.util.toHostOrPathOrNull import com.bitwarden.ui.platform.components.account.model.AccountSummary import com.bitwarden.ui.platform.components.icon.model.IconData import com.bitwarden.ui.platform.components.snackbar.model.BitwardenSnackbarData +import com.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager import com.bitwarden.ui.platform.model.TotpData import com.bitwarden.ui.platform.resource.BitwardenString import com.bitwarden.ui.util.Text @@ -82,8 +83,7 @@ import com.x8bit.bitwarden.ui.credentials.manager.model.RegisterFido2CredentialR import com.x8bit.bitwarden.ui.platform.feature.search.SearchTypeData import com.x8bit.bitwarden.ui.platform.feature.search.model.SearchType import com.x8bit.bitwarden.ui.platform.feature.search.util.filterAndOrganize -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import com.x8bit.bitwarden.ui.tools.feature.send.model.SendItemType import com.x8bit.bitwarden.ui.tools.feature.send.util.toSendItemType import com.x8bit.bitwarden.ui.vault.components.model.CreateVaultItemType @@ -144,7 +144,7 @@ class VaultItemListingViewModel @Inject constructor( private val networkConnectionManager: NetworkConnectionManager, private val relyingPartyParser: RelyingPartyParser, private val toastManager: ToastManager, - snackbarRelayManager: SnackbarRelayManager, + snackbarRelayManager: SnackbarRelayManager, ) : BaseViewModel( initialState = run { val userState = requireNotNull(authRepository.userStateFlow.value) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationViewModel.kt index fc570b4396..ba41fc0f14 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationViewModel.kt @@ -8,6 +8,7 @@ import com.bitwarden.core.data.repository.model.DataState import com.bitwarden.core.data.repository.util.combineDataStates 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 @@ -17,8 +18,7 @@ import com.x8bit.bitwarden.data.auth.repository.AuthRepository import com.x8bit.bitwarden.data.auth.repository.model.UserState import com.x8bit.bitwarden.data.vault.repository.VaultRepository import com.x8bit.bitwarden.data.vault.repository.model.ShareCipherResult -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import com.x8bit.bitwarden.ui.vault.feature.movetoorganization.util.toViewState import com.x8bit.bitwarden.ui.vault.model.VaultCollection import dagger.hilt.android.lifecycle.HiltViewModel @@ -41,7 +41,7 @@ private const val KEY_STATE = "state" class VaultMoveToOrganizationViewModel @Inject constructor( savedStateHandle: SavedStateHandle, authRepository: AuthRepository, - private val snackbarRelayManager: SnackbarRelayManager, + private val snackbarRelayManager: SnackbarRelayManager, private val vaultRepository: VaultRepository, ) : BaseViewModel( initialState = savedStateHandle[KEY_STATE] 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 88caf0b1ae..116a796515 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 @@ -15,6 +15,7 @@ import com.bitwarden.ui.platform.components.account.model.AccountSummary import com.bitwarden.ui.platform.components.account.util.initials import com.bitwarden.ui.platform.components.icon.model.IconData import com.bitwarden.ui.platform.components.snackbar.model.BitwardenSnackbarData +import com.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager import com.bitwarden.ui.platform.resource.BitwardenDrawable import com.bitwarden.ui.platform.resource.BitwardenString import com.bitwarden.ui.util.Text @@ -46,8 +47,7 @@ import com.x8bit.bitwarden.data.vault.manager.model.GetCipherResult import com.x8bit.bitwarden.data.vault.repository.VaultRepository import com.x8bit.bitwarden.data.vault.repository.model.GenerateTotpResult import com.x8bit.bitwarden.data.vault.repository.model.VaultData -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import com.x8bit.bitwarden.ui.vault.components.model.CreateVaultItemType import com.x8bit.bitwarden.ui.vault.components.util.toVaultItemCipherTypeOrNull import com.x8bit.bitwarden.ui.vault.feature.itemlisting.model.ListingItemOverflowAction @@ -106,7 +106,7 @@ class VaultViewModel @Inject constructor( private val browserAutofillDialogManager: BrowserAutofillDialogManager, private val credentialExchangeRegistryManager: CredentialExchangeRegistryManager, featureFlagManager: FeatureFlagManager, - snackbarRelayManager: SnackbarRelayManager, + snackbarRelayManager: SnackbarRelayManager, ) : BaseViewModel( initialState = run { val userState = requireNotNull(authRepository.userStateFlow.value) diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/environment/EnvironmentViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/environment/EnvironmentViewModelTest.kt index 630140d252..0142ddb790 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/environment/EnvironmentViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/environment/EnvironmentViewModelTest.kt @@ -8,6 +8,7 @@ import com.bitwarden.data.datasource.disk.model.EnvironmentUrlDataJson import com.bitwarden.data.repository.model.Environment 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.model.FileData import com.bitwarden.ui.platform.resource.BitwardenString import com.bitwarden.ui.util.asText @@ -17,8 +18,7 @@ import com.x8bit.bitwarden.data.platform.manager.model.ImportPrivateKeyResult import com.x8bit.bitwarden.data.platform.repository.util.FakeEnvironmentRepository import com.x8bit.bitwarden.data.vault.manager.FileManager import com.x8bit.bitwarden.ui.platform.manager.keychain.model.PrivateKeyAliasSelectionResult -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import io.mockk.coEvery import io.mockk.coVerify import io.mockk.every @@ -38,7 +38,7 @@ class EnvironmentViewModelTest : BaseViewModelTest() { every { getMutualTlsKeyAliases() } returns emptyList() } private val mockFileManager = mockk() - private val snackbarRelayManager = mockk { + private val snackbarRelayManager = mockk> { every { sendSnackbarData(data = any(), relay = any()) } just runs } diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/landing/LandingViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/landing/LandingViewModelTest.kt index 53b1da992c..5e81f57e2c 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/landing/LandingViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/landing/LandingViewModelTest.kt @@ -7,6 +7,7 @@ import com.bitwarden.data.repository.model.Environment import com.bitwarden.ui.platform.base.BaseViewModelTest import com.bitwarden.ui.platform.components.account.model.AccountSummary 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.datasource.disk.model.OnboardingStatus @@ -17,8 +18,7 @@ import com.x8bit.bitwarden.data.auth.repository.model.VaultUnlockType import com.x8bit.bitwarden.data.platform.manager.model.FirstTimeState import com.x8bit.bitwarden.data.platform.repository.util.FakeEnvironmentRepository import com.x8bit.bitwarden.data.vault.repository.VaultRepository -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import com.x8bit.bitwarden.ui.vault.feature.vault.util.toAccountSummaries import com.x8bit.bitwarden.ui.vault.feature.vault.util.toAccountSummary import io.mockk.every @@ -42,7 +42,7 @@ class LandingViewModelTest : BaseViewModelTest() { } private val fakeEnvironmentRepository = FakeEnvironmentRepository() private val mutableSnackbarSharedFlow = bufferedMutableSharedFlow() - private val snackbarRelayManager = mockk { + private val snackbarRelayManager = mockk> { every { getSnackbarDataFlow(SnackbarRelay.ENVIRONMENT_SAVED) } returns mutableSnackbarSharedFlow diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/loginwithdevice/LoginWithDeviceViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/loginwithdevice/LoginWithDeviceViewModelTest.kt index 469ef668b9..7b7e6bb1f0 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/loginwithdevice/LoginWithDeviceViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/loginwithdevice/LoginWithDeviceViewModelTest.kt @@ -5,6 +5,7 @@ import app.cash.turbine.test import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow 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.manager.model.AuthRequest @@ -13,8 +14,7 @@ import com.x8bit.bitwarden.data.auth.manager.model.CreateAuthRequestResult import com.x8bit.bitwarden.data.auth.repository.AuthRepository import com.x8bit.bitwarden.data.auth.repository.model.LoginResult import com.x8bit.bitwarden.ui.auth.feature.loginwithdevice.model.LoginWithDeviceType -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import io.mockk.coEvery import io.mockk.coVerify import io.mockk.every @@ -41,7 +41,7 @@ class LoginWithDeviceViewModelTest : BaseViewModelTest() { createAuthRequestWithUpdates(email = EMAIL, authRequestType = any()) } returns mutableCreateAuthRequestWithUpdatesFlow } - private val snackbarRelayManager: SnackbarRelayManager = mockk { + private val snackbarRelayManager: SnackbarRelayManager = mockk { every { sendSnackbarData(data = any(), relay = any()) } just runs } diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationViewModelTest.kt index 5da22cf09c..06355ddabd 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/auth/feature/startregistration/StartRegistrationViewModelTest.kt @@ -6,6 +6,7 @@ import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow import com.bitwarden.data.repository.model.Environment 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 @@ -26,8 +27,7 @@ import com.x8bit.bitwarden.ui.auth.feature.startregistration.StartRegistrationEv import com.x8bit.bitwarden.ui.auth.feature.startregistration.StartRegistrationEvent.NavigateToPrivacyPolicy import com.x8bit.bitwarden.ui.auth.feature.startregistration.StartRegistrationEvent.NavigateToTerms import com.x8bit.bitwarden.ui.auth.feature.startregistration.StartRegistrationEvent.NavigateToUnsubscribe -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import io.mockk.coEvery import io.mockk.every import io.mockk.mockk @@ -39,7 +39,7 @@ import org.junit.jupiter.api.Test class StartRegistrationViewModelTest : BaseViewModelTest() { private val mockAuthRepository = mockk() private val mutableSnackbarSharedFlow = bufferedMutableSharedFlow() - private val snackbarRelayManager = mockk { + private val snackbarRelayManager = mockk> { every { getSnackbarDataFlow(SnackbarRelay.ENVIRONMENT_SAVED) } returns mutableSnackbarSharedFlow diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/SearchViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/SearchViewModelTest.kt index 1cd938d317..8441687afd 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/SearchViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/SearchViewModelTest.kt @@ -13,6 +13,7 @@ import com.bitwarden.network.model.SyncResponseJson import com.bitwarden.send.SendType 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.Text import com.bitwarden.ui.util.asText @@ -61,7 +62,7 @@ import com.x8bit.bitwarden.ui.platform.feature.search.model.SearchType import com.x8bit.bitwarden.ui.platform.feature.search.util.createMockDisplayItemForCipher import com.x8bit.bitwarden.ui.platform.feature.search.util.filterAndOrganize import com.x8bit.bitwarden.ui.platform.feature.search.util.toViewState -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import com.x8bit.bitwarden.ui.tools.feature.send.model.SendItemType import com.x8bit.bitwarden.ui.vault.feature.itemlisting.model.ListingItemOverflowAction import com.x8bit.bitwarden.ui.vault.feature.vault.model.VaultFilterType @@ -150,7 +151,7 @@ class SearchViewModelTest : BaseViewModelTest() { } private val mutableSnackbarDataFlow: MutableSharedFlow = bufferedMutableSharedFlow() - private val snackbarRelayManager: SnackbarRelayManager = mockk { + private val snackbarRelayManager: SnackbarRelayManager = mockk { every { getSnackbarDataFlow(relay = any(), relays = anyVararg()) } returns mutableSnackbarDataFlow diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/loginapproval/LoginApprovalViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/loginapproval/LoginApprovalViewModelTest.kt index fc1c3da34e..f9d647f3f8 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/loginapproval/LoginApprovalViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/loginapproval/LoginApprovalViewModelTest.kt @@ -7,6 +7,7 @@ import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow import com.bitwarden.data.repository.model.Environment 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.datasource.disk.model.OnboardingStatus @@ -20,8 +21,7 @@ import com.x8bit.bitwarden.data.platform.manager.SpecialCircumstanceManager import com.x8bit.bitwarden.data.platform.manager.model.FirstTimeState import com.x8bit.bitwarden.data.platform.manager.model.PasswordlessRequestData import com.x8bit.bitwarden.data.platform.manager.model.SpecialCircumstance -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import io.mockk.coEvery import io.mockk.coVerify import io.mockk.every @@ -61,7 +61,7 @@ class LoginApprovalViewModelTest : BaseViewModelTest() { coEvery { getAuthRequestByIdFlow(REQUEST_ID) } returns mutableAuthRequestSharedFlow every { userStateFlow } returns mutableUserStateFlow } - private val snackbarRelayManager: SnackbarRelayManager = mockk { + private val snackbarRelayManager: SnackbarRelayManager = mockk { every { sendSnackbarData(data = any(), relay = SnackbarRelay.LOGIN_APPROVAL) } just runs } private val toastManager: ToastManager = mockk { diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/pendingrequests/PendingRequestsViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/pendingrequests/PendingRequestsViewModelTest.kt index 7e56d7fde1..22f25fcbe1 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/pendingrequests/PendingRequestsViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/accountsecurity/pendingrequests/PendingRequestsViewModelTest.kt @@ -7,6 +7,7 @@ import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow import com.bitwarden.core.data.util.toFormattedDateTimeStyle 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.util.asText import com.x8bit.bitwarden.data.auth.manager.model.AuthRequest import com.x8bit.bitwarden.data.auth.manager.model.AuthRequestResult @@ -14,7 +15,7 @@ import com.x8bit.bitwarden.data.auth.manager.model.AuthRequestsResult import com.x8bit.bitwarden.data.auth.manager.model.AuthRequestsUpdatesResult import com.x8bit.bitwarden.data.auth.repository.AuthRepository import com.x8bit.bitwarden.data.platform.repository.SettingsRepository -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import io.mockk.coEvery import io.mockk.coVerify import io.mockk.every @@ -51,7 +52,7 @@ class PendingRequestsViewModelTest : BaseViewModelTest() { every { getPullToRefreshEnabledFlow() } returns mutablePullToRefreshStateFlow } private val mutableSnackbarDataFlow = bufferedMutableSharedFlow() - private val snackbarRelayManager: SnackbarRelayManager = mockk { + private val snackbarRelayManager: SnackbarRelayManager = mockk { every { getSnackbarDataFlow(relay = any(), relays = anyVararg()) } returns mutableSnackbarDataFlow diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/FoldersViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/FoldersViewModelTest.kt index 6224f2fd82..4d197c6b24 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/FoldersViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/FoldersViewModelTest.kt @@ -6,13 +6,14 @@ import com.bitwarden.core.data.repository.model.DataState import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow 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.bitwarden.ui.util.concat import com.bitwarden.vault.FolderView import com.x8bit.bitwarden.data.vault.repository.VaultRepository import com.x8bit.bitwarden.ui.platform.feature.settings.folders.model.FolderDisplayItem -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import io.mockk.every import io.mockk.mockk import kotlinx.coroutines.flow.MutableStateFlow @@ -29,7 +30,7 @@ class FoldersViewModelTest : BaseViewModelTest() { every { foldersStateFlow } returns mutableFoldersStateFlow } private val mutableSnackbarDataFlow = bufferedMutableSharedFlow() - private val snackbarRelayManager: SnackbarRelayManager = mockk { + private val snackbarRelayManager: SnackbarRelayManager = mockk { every { getSnackbarDataFlow(relay = any(), relays = anyVararg()) } returns mutableSnackbarDataFlow diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/addedit/FolderAddEditViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/addedit/FolderAddEditViewModelTest.kt index 680172b29d..5e6ee9eed2 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/addedit/FolderAddEditViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/folders/addedit/FolderAddEditViewModelTest.kt @@ -6,6 +6,7 @@ import com.bitwarden.core.DateTime import com.bitwarden.core.data.repository.model.DataState 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.bitwarden.ui.util.concat @@ -15,8 +16,7 @@ import com.x8bit.bitwarden.data.vault.repository.model.CreateFolderResult import com.x8bit.bitwarden.data.vault.repository.model.DeleteFolderResult import com.x8bit.bitwarden.data.vault.repository.model.UpdateFolderResult import com.x8bit.bitwarden.ui.platform.feature.settings.folders.model.FolderAddEditType -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import io.mockk.coEvery import io.mockk.coVerify import io.mockk.every @@ -43,7 +43,7 @@ class FolderAddEditViewModelTest : BaseViewModelTest() { private val vaultRepository: VaultRepository = mockk { every { getVaultFolderStateFlow(DEFAULT_EDIT_ITEM_ID) } returns mutableFoldersStateFlow } - private val relayManager: SnackbarRelayManager = mockk { + private val relayManager: SnackbarRelayManager = mockk { every { sendSnackbarData(data = any(), relay = any()) } just runs } diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsViewModelTest.kt index ea9e38c9a8..14d82498a6 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/settings/vault/VaultSettingsViewModelTest.kt @@ -5,12 +5,12 @@ import com.bitwarden.core.data.manager.model.FlagKey import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow 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.util.asText import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager import com.x8bit.bitwarden.data.platform.manager.FirstTimeActionManager import com.x8bit.bitwarden.data.platform.manager.model.FirstTimeState -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import io.mockk.every import io.mockk.just import io.mockk.mockk @@ -40,7 +40,7 @@ class VaultSettingsViewModelTest : BaseViewModelTest() { } private val mutableSnackbarSharedFlow = bufferedMutableSharedFlow() - private val snackbarRelayManager = mockk { + private val snackbarRelayManager = mockk> { every { getSnackbarDataFlow(SnackbarRelay.LOGINS_IMPORTED) } returns mutableSnackbarSharedFlow diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/SendViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/SendViewModelTest.kt index c898bfc862..3ac2cdf425 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/SendViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/SendViewModelTest.kt @@ -9,6 +9,7 @@ import com.bitwarden.data.repository.util.baseWebSendUrl import com.bitwarden.network.model.PolicyTypeJson 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.Text import com.bitwarden.ui.util.asText @@ -25,7 +26,7 @@ import com.x8bit.bitwarden.data.vault.repository.VaultRepository import com.x8bit.bitwarden.data.vault.repository.model.DeleteSendResult import com.x8bit.bitwarden.data.vault.repository.model.RemovePasswordSendResult import com.x8bit.bitwarden.data.vault.repository.model.SendData -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import com.x8bit.bitwarden.ui.tools.feature.send.model.SendItemType import com.x8bit.bitwarden.ui.tools.feature.send.util.toViewState import io.mockk.coEvery @@ -78,7 +79,7 @@ class SendViewModelTest : BaseViewModelTest() { } private val mutableSnackbarDataFlow: MutableSharedFlow = bufferedMutableSharedFlow() - private val snackbarRelayManager: SnackbarRelayManager = mockk { + private val snackbarRelayManager: SnackbarRelayManager = mockk { every { getSnackbarDataFlow(relay = any(), relays = anyVararg()) } returns mutableSnackbarDataFlow diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendViewModelTest.kt index 4e39c6721e..8715748f22 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/addedit/AddEditSendViewModelTest.kt @@ -10,6 +10,7 @@ import com.bitwarden.network.model.SyncResponseJson import com.bitwarden.send.SendView 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.model.FileData import com.bitwarden.ui.platform.resource.BitwardenString import com.bitwarden.ui.util.Text @@ -30,8 +31,7 @@ import com.x8bit.bitwarden.data.vault.repository.model.CreateSendResult import com.x8bit.bitwarden.data.vault.repository.model.DeleteSendResult import com.x8bit.bitwarden.data.vault.repository.model.RemovePasswordSendResult import com.x8bit.bitwarden.data.vault.repository.model.UpdateSendResult -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import com.x8bit.bitwarden.ui.tools.feature.send.addedit.model.AddEditSendType import com.x8bit.bitwarden.ui.tools.feature.send.addedit.util.toSendView import com.x8bit.bitwarden.ui.tools.feature.send.addedit.util.toViewState @@ -92,7 +92,7 @@ class AddEditSendViewModelTest : BaseViewModelTest() { private val networkConnectionManager = mockk { every { isNetworkConnected } returns true } - private val snackbarRelayManager: SnackbarRelayManager = mockk { + private val snackbarRelayManager: SnackbarRelayManager = mockk { every { sendSnackbarData(data = any(), relay = any()) } just runs } diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/viewsend/ViewSendViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/viewsend/ViewSendViewModelTest.kt index 6f5231f6ad..5e5e9e2213 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/viewsend/ViewSendViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/tools/feature/send/viewsend/ViewSendViewModelTest.kt @@ -8,6 +8,7 @@ import com.bitwarden.data.repository.model.Environment import com.bitwarden.send.SendView 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.bitwarden.ui.util.concat @@ -16,8 +17,7 @@ import com.x8bit.bitwarden.data.platform.repository.EnvironmentRepository import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockSendView import com.x8bit.bitwarden.data.vault.repository.VaultRepository import com.x8bit.bitwarden.data.vault.repository.model.DeleteSendResult -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import com.x8bit.bitwarden.ui.tools.feature.send.model.SendItemType import com.x8bit.bitwarden.ui.tools.feature.send.viewsend.util.toViewSendViewStateContent import io.mockk.coEvery @@ -53,7 +53,7 @@ class ViewSendViewModelTest : BaseViewModelTest() { } private val mutableSnackbarDataFlow: MutableSharedFlow = bufferedMutableSharedFlow() - private val snackbarRelayManager: SnackbarRelayManager = mockk { + private val snackbarRelayManager: SnackbarRelayManager = mockk { every { sendSnackbarData(data = any(), relay = any()) } just runs every { getSnackbarDataFlow(relay = any(), relays = anyVararg()) diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt index 28f1d36953..36c0c538bb 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditViewModelTest.kt @@ -20,6 +20,7 @@ import com.bitwarden.network.model.SyncResponseJson import com.bitwarden.send.SendView 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.model.TotpData import com.bitwarden.ui.platform.resource.BitwardenPlurals import com.bitwarden.ui.platform.resource.BitwardenString @@ -79,8 +80,7 @@ import com.x8bit.bitwarden.data.vault.repository.model.UpdateCipherResult import com.x8bit.bitwarden.data.vault.repository.model.VaultData import com.x8bit.bitwarden.ui.credentials.manager.model.RegisterFido2CredentialResult import com.x8bit.bitwarden.ui.platform.manager.resource.ResourceManager -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import com.x8bit.bitwarden.ui.tools.feature.generator.model.GeneratorMode import com.x8bit.bitwarden.ui.vault.feature.addedit.model.CustomFieldAction import com.x8bit.bitwarden.ui.vault.feature.addedit.model.CustomFieldType @@ -210,7 +210,7 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { } private val mutableSnackbarDataFlow: MutableSharedFlow = bufferedMutableSharedFlow() - private val snackbarRelayManager: SnackbarRelayManager = mockk { + private val snackbarRelayManager: SnackbarRelayManager = mockk { every { getSnackbarDataFlow(relay = any(), relays = anyVararg()) } returns mutableSnackbarDataFlow diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsViewModelTest.kt index f17ee217ce..661e8036da 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/importlogins/ImportLoginsViewModelTest.kt @@ -5,14 +5,14 @@ import app.cash.turbine.test import com.bitwarden.data.repository.model.Environment 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.platform.manager.FirstTimeActionManager import com.x8bit.bitwarden.data.platform.repository.EnvironmentRepository import com.x8bit.bitwarden.data.vault.manager.model.SyncVaultDataResult import com.x8bit.bitwarden.data.vault.repository.VaultRepository -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManagerImpl +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import io.mockk.coEvery import io.mockk.coVerify import io.mockk.every @@ -60,7 +60,7 @@ class ImportLoginsViewModelTest : BaseViewModelTest() { unmockkStatic(Uri::parse) } - private val snackbarRelayManager: SnackbarRelayManagerImpl = mockk { + private val snackbarRelayManager: SnackbarRelayManager = mockk { coEvery { sendSnackbarData(any(), any()) } just runs } diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModelTest.kt index e55a624a06..21526777f8 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemViewModelTest.kt @@ -12,6 +12,7 @@ import com.bitwarden.network.model.OrganizationType import com.bitwarden.ui.platform.base.BaseViewModelTest import com.bitwarden.ui.platform.components.icon.model.IconData import com.bitwarden.ui.platform.components.snackbar.model.BitwardenSnackbarData +import com.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager import com.bitwarden.ui.platform.resource.BitwardenDrawable import com.bitwarden.ui.platform.resource.BitwardenPlurals import com.bitwarden.ui.platform.resource.BitwardenString @@ -43,8 +44,7 @@ import com.x8bit.bitwarden.data.vault.repository.VaultRepository import com.x8bit.bitwarden.data.vault.repository.model.DeleteCipherResult import com.x8bit.bitwarden.data.vault.repository.model.DownloadAttachmentResult import com.x8bit.bitwarden.data.vault.repository.model.RestoreCipherResult -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import com.x8bit.bitwarden.ui.vault.feature.item.model.TotpCodeItemData import com.x8bit.bitwarden.ui.vault.feature.item.model.VaultItemLocation import com.x8bit.bitwarden.ui.vault.feature.item.util.createCommonContent @@ -121,7 +121,7 @@ class VaultItemViewModelTest : BaseViewModelTest() { } private val mutableSnackbarDataFlow: MutableSharedFlow = bufferedMutableSharedFlow() - private val snackbarRelayManager: SnackbarRelayManager = mockk { + private val snackbarRelayManager: SnackbarRelayManager = mockk { every { getSnackbarDataFlow(relay = any(), relays = anyVararg()) } returns mutableSnackbarDataFlow diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModelTest.kt index 1be08438f5..08866ad887 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingViewModelTest.kt @@ -31,6 +31,7 @@ import com.bitwarden.ui.platform.base.BaseViewModelTest import com.bitwarden.ui.platform.components.account.model.AccountSummary import com.bitwarden.ui.platform.components.icon.model.IconData import com.bitwarden.ui.platform.components.snackbar.model.BitwardenSnackbarData +import com.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager import com.bitwarden.ui.platform.model.TotpData import com.bitwarden.ui.platform.resource.BitwardenDrawable import com.bitwarden.ui.platform.resource.BitwardenString @@ -102,7 +103,7 @@ import com.x8bit.bitwarden.ui.credentials.manager.model.GetCredentialsResult import com.x8bit.bitwarden.ui.credentials.manager.model.GetPasswordCredentialResult import com.x8bit.bitwarden.ui.credentials.manager.model.RegisterFido2CredentialResult import com.x8bit.bitwarden.ui.platform.feature.search.model.SearchType -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import com.x8bit.bitwarden.ui.tools.feature.send.model.SendItemType import com.x8bit.bitwarden.ui.vault.components.model.CreateVaultItemType import com.x8bit.bitwarden.ui.vault.feature.addedit.util.createMockPasskeyAttestationOptions @@ -281,7 +282,7 @@ class VaultItemListingViewModelTest : BaseViewModelTest() { } private val mutableSnackbarDataFlow: MutableSharedFlow = bufferedMutableSharedFlow() - private val snackbarRelayManager: SnackbarRelayManager = mockk { + private val snackbarRelayManager: SnackbarRelayManager = mockk { every { getSnackbarDataFlow(relay = any(), relays = anyVararg()) } returns mutableSnackbarDataFlow diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationViewModelTest.kt index c3d5a6f140..cacf58ad20 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/movetoorganization/VaultMoveToOrganizationViewModelTest.kt @@ -8,6 +8,7 @@ import com.bitwarden.data.repository.model.Environment import com.bitwarden.network.model.OrganizationType 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.bitwarden.ui.util.concat @@ -21,8 +22,7 @@ import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCipherView import com.x8bit.bitwarden.data.vault.datasource.sdk.model.createMockCollectionView import com.x8bit.bitwarden.data.vault.repository.VaultRepository import com.x8bit.bitwarden.data.vault.repository.model.ShareCipherResult -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import com.x8bit.bitwarden.ui.vault.feature.movetoorganization.util.createMockOrganizationList import com.x8bit.bitwarden.ui.vault.model.VaultCollection import io.mockk.coEvery @@ -63,7 +63,7 @@ class VaultMoveToOrganizationViewModelTest : BaseViewModelTest() { every { userStateFlow } returns mutableUserStateFlow } - private val snackbarRelayManager: SnackbarRelayManager = mockk { + private val snackbarRelayManager: SnackbarRelayManager = mockk { every { sendSnackbarData(data = any(), relay = any()) } just runs } diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModelTest.kt index f801758d23..7e67176959 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModelTest.kt @@ -12,6 +12,7 @@ import com.bitwarden.network.model.SyncResponseJson import com.bitwarden.ui.platform.base.BaseViewModelTest import com.bitwarden.ui.platform.components.account.model.AccountSummary 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 @@ -57,8 +58,7 @@ import com.x8bit.bitwarden.data.vault.manager.model.GetCipherResult import com.x8bit.bitwarden.data.vault.repository.VaultRepository import com.x8bit.bitwarden.data.vault.repository.model.GenerateTotpResult import com.x8bit.bitwarden.data.vault.repository.model.VaultData -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelay -import com.x8bit.bitwarden.ui.platform.manager.snackbar.SnackbarRelayManager +import com.x8bit.bitwarden.ui.platform.model.SnackbarRelay import com.x8bit.bitwarden.ui.vault.components.model.CreateVaultItemType import com.x8bit.bitwarden.ui.vault.feature.itemlisting.model.ListingItemOverflowAction import com.x8bit.bitwarden.ui.vault.feature.vault.model.VaultFilterData @@ -100,7 +100,7 @@ class VaultViewModelTest : BaseViewModelTest() { ) private val mutableSnackbarDataFlow = bufferedMutableSharedFlow() - private val snackbarRelayManager: SnackbarRelayManager = mockk { + private val snackbarRelayManager: SnackbarRelayManager = mockk { // We return an empty flow here to avoid confusion in the tests. // Everything should be tested via the mutableSnackbarDataFlow. every { getSnackbarDataFlow(SnackbarRelay.LOGIN_SUCCESS) } returns emptyFlow() diff --git a/ui/build.gradle.kts b/ui/build.gradle.kts index 699544639d..b53ab7c2c4 100644 --- a/ui/build.gradle.kts +++ b/ui/build.gradle.kts @@ -82,6 +82,9 @@ dependencies { debugImplementation(libs.androidx.compose.ui.test.manifest) debugImplementation(libs.androidx.compose.ui.tooling) + // Pull in test fixtures from other modules + testImplementation(testFixtures(project(":core"))) + testImplementation(platform(libs.junit.bom)) testImplementation(libs.junit.jupiter) testRuntimeOnly(libs.junit.platform.launcher) @@ -89,6 +92,7 @@ dependencies { testImplementation(libs.mockk.mockk) testImplementation(libs.robolectric.robolectric) testImplementation(libs.androidx.compose.ui.test) + testImplementation(libs.square.turbine) testFixturesImplementation(libs.androidx.activity.compose) testFixturesImplementation(libs.androidx.camera.camera2) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/manager/snackbar/SnackbarRelayManager.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/manager/snackbar/SnackbarRelayManager.kt similarity index 60% rename from app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/manager/snackbar/SnackbarRelayManager.kt rename to ui/src/main/kotlin/com/bitwarden/ui/platform/manager/snackbar/SnackbarRelayManager.kt index c18df0804c..f27ef81920 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/manager/snackbar/SnackbarRelayManager.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/manager/snackbar/SnackbarRelayManager.kt @@ -1,25 +1,22 @@ -package com.x8bit.bitwarden.ui.platform.manager.snackbar +package com.bitwarden.ui.platform.manager.snackbar import com.bitwarden.ui.platform.components.snackbar.model.BitwardenSnackbarData import kotlinx.coroutines.flow.Flow /** * Manager responsible for relaying snackbar data between a producer and consumer who may - * communicate with reference to a specific [SnackbarRelay]. + * communicate with reference to a specific relay [T]. */ -interface SnackbarRelayManager { +interface SnackbarRelayManager { /** * Called from a producer to send snackbar data to a consumer, the producer must * specify the [relay] to send the data to. */ - fun sendSnackbarData(data: BitwardenSnackbarData, relay: SnackbarRelay) + fun sendSnackbarData(data: BitwardenSnackbarData, relay: T) /** * Called from a consumer to receive snackbar data from a producer, the consumer must specify * the [relay] or [relays] to receive the data from. */ - fun getSnackbarDataFlow( - relay: SnackbarRelay, - vararg relays: SnackbarRelay, - ): Flow + fun getSnackbarDataFlow(relay: T, vararg relays: T): Flow } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/manager/snackbar/SnackbarRelayManagerImpl.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/manager/snackbar/SnackbarRelayManagerImpl.kt similarity index 72% rename from app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/manager/snackbar/SnackbarRelayManagerImpl.kt rename to ui/src/main/kotlin/com/bitwarden/ui/platform/manager/snackbar/SnackbarRelayManagerImpl.kt index 6916e0cc7b..1ff7816519 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/manager/snackbar/SnackbarRelayManagerImpl.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/manager/snackbar/SnackbarRelayManagerImpl.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.ui.platform.manager.snackbar +package com.bitwarden.ui.platform.manager.snackbar import com.bitwarden.core.data.manager.dispatcher.DispatcherManager import com.bitwarden.core.data.repository.util.emitWhenSubscribedTo @@ -18,13 +18,13 @@ import java.util.UUID /** * The default implementation of the [SnackbarRelayManager] interface. */ -class SnackbarRelayManagerImpl( +class SnackbarRelayManagerImpl( dispatcherManager: DispatcherManager, -) : SnackbarRelayManager { +) : SnackbarRelayManager { private val unconfinedScope = CoroutineScope(context = dispatcherManager.unconfined) - private val snackbarSharedFlow = SnackbarLastSubscriberMutableSharedFlow() + private val snackbarSharedFlow = SnackbarLastSubscriberMutableSharedFlow() - override fun sendSnackbarData(data: BitwardenSnackbarData, relay: SnackbarRelay) { + override fun sendSnackbarData(data: BitwardenSnackbarData, relay: T) { unconfinedScope.launch { snackbarSharedFlow.emitWhenSubscribedTo( value = SnackbarDataAndRelay( @@ -35,10 +35,7 @@ class SnackbarRelayManagerImpl( } } - override fun getSnackbarDataFlow( - relay: SnackbarRelay, - vararg relays: SnackbarRelay, - ): Flow = + override fun getSnackbarDataFlow(relay: T, vararg relays: T): Flow = merge( snackbarSharedFlow.generateFlowFor(relay = relay), *relays.map { snackbarSharedFlow.generateFlowFor(relay = it) }.toTypedArray(), @@ -47,10 +44,10 @@ class SnackbarRelayManagerImpl( } /** - * A wrapper for the [BitwardenSnackbarData] payload and [SnackbarRelay] associated with it. + * A wrapper for the [BitwardenSnackbarData] payload and relay [T] associated with it. */ -private data class SnackbarDataAndRelay( - val relay: SnackbarRelay, +private data class SnackbarDataAndRelay( + val relay: T, val data: BitwardenSnackbarData, ) @@ -59,14 +56,14 @@ private data class SnackbarDataAndRelay( * data. */ @OptIn(ExperimentalForInheritanceCoroutinesApi::class) -private class SnackbarLastSubscriberMutableSharedFlow( - private val source: MutableSharedFlow = MutableSharedFlow(), -) : MutableSharedFlow by source { - private val mutableRelayUuidMap: MutableMap> = mutableMapOf() +private class SnackbarLastSubscriberMutableSharedFlow( + private val source: MutableSharedFlow> = MutableSharedFlow(), +) : MutableSharedFlow> by source { + private val mutableRelayUuidMap: MutableMap> = mutableMapOf() fun generateFlowFor( - relay: SnackbarRelay, - ): Flow { + relay: T, + ): Flow> { lateinit var uuid: UUID return source .onSubscription { @@ -78,6 +75,6 @@ private class SnackbarLastSubscriberMutableSharedFlow( } private fun getUuidStack( - relay: SnackbarRelay, + relay: T, ): MutableList = mutableRelayUuidMap.getOrPut(key = relay) { mutableListOf() } } diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/manager/snackbar/SnackbarRelayManagerTest.kt b/ui/src/test/kotlin/com/bitwarden/ui/platform/manager/snackbar/SnackbarRelayManagerTest.kt similarity index 89% rename from app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/manager/snackbar/SnackbarRelayManagerTest.kt rename to ui/src/test/kotlin/com/bitwarden/ui/platform/manager/snackbar/SnackbarRelayManagerTest.kt index e18f25727d..da8f52a08f 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/manager/snackbar/SnackbarRelayManagerTest.kt +++ b/ui/src/test/kotlin/com/bitwarden/ui/platform/manager/snackbar/SnackbarRelayManagerTest.kt @@ -1,4 +1,4 @@ -package com.x8bit.bitwarden.ui.platform.manager.snackbar +package com.bitwarden.ui.platform.manager.snackbar import app.cash.turbine.test import app.cash.turbine.turbineScope @@ -11,14 +11,14 @@ import org.junit.jupiter.api.Assertions.assertEquals class SnackbarRelayManagerTest { - private val relayManager: SnackbarRelayManager = SnackbarRelayManagerImpl( + private val relayManager: SnackbarRelayManager = SnackbarRelayManagerImpl( dispatcherManager = FakeDispatcherManager(), ) @Test fun `when relay is completed successfully when consumer registers first and event is sent`() = runTest { - val relay = SnackbarRelay.LOGINS_IMPORTED + val relay = TestRelay.TEST1 val expectedData = BitwardenSnackbarData(message = "Test message".asText()) relayManager.getSnackbarDataFlow(relay).test { @@ -30,7 +30,7 @@ class SnackbarRelayManagerTest { @Test fun `when relay is completed successfully when consumer registers second and event is sent`() = runTest { - val relay = SnackbarRelay.LOGINS_IMPORTED + val relay = TestRelay.TEST1 val expectedData = BitwardenSnackbarData(message = "Test message".asText()) // producer code relayManager.sendSnackbarData(data = expectedData, relay = relay) @@ -41,8 +41,8 @@ class SnackbarRelayManagerTest { @Test fun `when relay is specified by producer only send data to that relay`() = runTest { - val relay1 = SnackbarRelay.LOGINS_IMPORTED - val relay2 = SnackbarRelay.SEND_DELETED + val relay1 = TestRelay.TEST1 + val relay2 = TestRelay.TEST2 val expectedData = BitwardenSnackbarData(message = "Test message".asText()) turbineScope { val consumer1 = relayManager.getSnackbarDataFlow(relay1).testIn(backgroundScope) @@ -56,7 +56,7 @@ class SnackbarRelayManagerTest { @Test fun `when multiple consumers are registered to the same relay, send data to last consumers`() = runTest { - val relay = SnackbarRelay.LOGINS_IMPORTED + val relay = TestRelay.TEST1 val expectedData = BitwardenSnackbarData(message = "Test message".asText()) turbineScope { val consumer1 = relayManager.getSnackbarDataFlow(relay).testIn(backgroundScope) @@ -71,7 +71,7 @@ class SnackbarRelayManagerTest { @Test fun `when multiple consumers are registered to the same relay, and one is completed before the other the second consumer registers should not receive any emissions`() = runTest { - val relay = SnackbarRelay.LOGINS_IMPORTED + val relay = TestRelay.TEST1 val expectedData = BitwardenSnackbarData(message = "Test message".asText()) turbineScope { val consumer1 = relayManager.getSnackbarDataFlow(relay).testIn(backgroundScope) @@ -87,7 +87,7 @@ class SnackbarRelayManagerTest { @Test fun `when multiple consumers are registered to the same relay, and the last one is cancelled, the other most recent consumer should receive the emissions`() = runTest { - val relay = SnackbarRelay.LOGINS_IMPORTED + val relay = TestRelay.TEST1 val expectedData = BitwardenSnackbarData(message = "Test message".asText()) turbineScope { val consumer1 = relayManager.getSnackbarDataFlow(relay).testIn(backgroundScope) @@ -98,3 +98,8 @@ class SnackbarRelayManagerTest { } } } + +private enum class TestRelay { + TEST1, + TEST2, +}