From f505c648c0b43789ddc8f9013b82e1e387d12b80 Mon Sep 17 00:00:00 2001 From: Ramsey Smith <142836716+ramsey-livefront@users.noreply.github.com> Date: Thu, 18 Jan 2024 12:03:44 -0700 Subject: [PATCH] Storing vault filter types in memory (#666) --- .../bitwarden/data/vault/repository/VaultRepository.kt | 9 +++++++++ .../data/vault/repository/VaultRepositoryImpl.kt | 3 +++ .../bitwarden/ui/vault/feature/vault/VaultViewModel.kt | 4 ++++ .../ui/vault/feature/vault/VaultViewModelTest.kt | 2 ++ 4 files changed, 18 insertions(+) diff --git a/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/VaultRepository.kt b/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/VaultRepository.kt index 7c2a457019..9446ebcb65 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/VaultRepository.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/VaultRepository.kt @@ -20,6 +20,7 @@ import com.x8bit.bitwarden.data.vault.repository.model.UpdateCipherResult import com.x8bit.bitwarden.data.vault.repository.model.UpdateSendResult import com.x8bit.bitwarden.data.vault.repository.model.VaultData import com.x8bit.bitwarden.data.vault.repository.model.VaultUnlockResult +import com.x8bit.bitwarden.ui.vault.feature.vault.model.VaultFilterType import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.StateFlow @@ -29,6 +30,14 @@ import kotlinx.coroutines.flow.StateFlow @Suppress("TooManyFunctions") interface VaultRepository : VaultLockManager { + /** + * The [VaultFilterType] for the current user. + * + * Note that this does not affect the data provided by the repository and can be used by + * the UI for consistent filtering across screens. + */ + var vaultFilterType: VaultFilterType + /** * Flow that represents the current vault data. * diff --git a/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryImpl.kt b/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryImpl.kt index ed5966f21b..63ec8923fe 100644 --- a/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryImpl.kt +++ b/app/src/main/java/com/x8bit/bitwarden/data/vault/repository/VaultRepositoryImpl.kt @@ -50,6 +50,7 @@ import com.x8bit.bitwarden.data.vault.repository.util.toEncryptedSdkCollectionLi import com.x8bit.bitwarden.data.vault.repository.util.toEncryptedSdkFolderList import com.x8bit.bitwarden.data.vault.repository.util.toEncryptedSdkSend import com.x8bit.bitwarden.data.vault.repository.util.toEncryptedSdkSendList +import com.x8bit.bitwarden.ui.vault.feature.vault.model.VaultFilterType import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job import kotlinx.coroutines.flow.Flow @@ -110,6 +111,8 @@ class VaultRepositoryImpl( private val mutableCollectionsStateFlow = MutableStateFlow>>(DataState.Loading) + override var vaultFilterType: VaultFilterType = VaultFilterType.AllVaults + override val vaultDataStateFlow: StateFlow> = combine( ciphersStateFlow, diff --git a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModel.kt b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModel.kt index fc0bb5f504..b87eff20ee 100644 --- a/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModel.kt +++ b/app/src/main/java/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModel.kt @@ -74,6 +74,8 @@ class VaultViewModel @Inject constructor( get() = state.vaultFilterData?.selectedVaultFilterType ?: VaultFilterType.AllVaults init { + // Reset the current vault filter type for the current user + vaultRepository.vaultFilterType = vaultFilterTypeOrDefault settingsRepository .getPullToRefreshEnabledFlow() .map { VaultAction.Internal.PullToRefreshEnableReceive(it) } @@ -223,6 +225,8 @@ class VaultViewModel @Inject constructor( private fun handleVaultFilterTypeSelect(action: VaultAction.VaultFilterTypeSelect) { // Update the current filter + vaultRepository.vaultFilterType = action.vaultFilterType + mutableStateFlow.update { it.copy( vaultFilterData = it.vaultFilterData?.copy( diff --git a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModelTest.kt b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModelTest.kt index 22fbe84517..17b6e04431 100644 --- a/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModelTest.kt +++ b/app/src/test/java/com/x8bit/bitwarden/ui/vault/feature/vault/VaultViewModelTest.kt @@ -67,6 +67,7 @@ class VaultViewModelTest : BaseViewModelTest() { private val vaultRepository: VaultRepository = mockk { + every { vaultFilterType = any() } returns Unit every { vaultDataStateFlow } returns mutableVaultDataStateFlow every { sync() } just runs every { lockVaultForCurrentUser() } just runs @@ -392,6 +393,7 @@ class VaultViewModelTest : BaseViewModelTest() { ), viewModel.stateFlow.value, ) + verify { vaultRepository.vaultFilterType = VaultFilterType.MyVault } } @Test