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 dfe4d673203..1e2a44386c9 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 @@ -4,7 +4,6 @@ import android.os.Parcelable import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.viewModelScope import com.bitwarden.annotation.OmitFromCoverage -import com.bitwarden.core.data.manager.model.FlagKey import com.bitwarden.core.data.repository.model.DataState import com.bitwarden.data.repository.util.baseIconUrl import com.bitwarden.data.repository.util.baseWebSendUrl @@ -30,7 +29,6 @@ import com.x8bit.bitwarden.data.autofill.accessibility.manager.AccessibilitySele import com.x8bit.bitwarden.data.autofill.manager.AutofillSelectionManager import com.x8bit.bitwarden.data.autofill.model.AutofillSelectionData import com.x8bit.bitwarden.data.autofill.util.login -import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager import com.x8bit.bitwarden.data.platform.manager.PolicyManager import com.x8bit.bitwarden.data.platform.manager.SpecialCircumstanceManager import com.x8bit.bitwarden.data.platform.manager.clipboard.BitwardenClipboardManager @@ -104,7 +102,6 @@ class SearchViewModel @Inject constructor( settingsRepo: SettingsRepository, snackbarRelayManager: SnackbarRelayManager, specialCircumstanceManager: SpecialCircumstanceManager, - featureFlagManager: FeatureFlagManager, ) : BaseViewModel( // We load the state from the savedStateHandle for testing purposes. initialState = savedStateHandle[KEY_STATE] @@ -140,7 +137,6 @@ class SearchViewModel @Inject constructor( hasMasterPassword = userState.activeAccount.hasMasterPassword, isPremium = userState.activeAccount.isPremium, restrictItemTypesPolicyOrgIds = persistentListOf(), - isArchiveEnabled = featureFlagManager.getFeatureFlag(FlagKey.ArchiveItems), ) }, ) { @@ -180,12 +176,6 @@ class SearchViewModel @Inject constructor( .map { SearchAction.Internal.SnackbarDataReceived(it) } .onEach(::sendAction) .launchIn(viewModelScope) - - featureFlagManager - .getFeatureFlagFlow(FlagKey.ArchiveItems) - .map { SearchAction.Internal.ArchiveItemsFlagUpdateReceive(it) } - .onEach(::sendAction) - .launchIn(viewModelScope) } override fun handleAction(action: SearchAction) { @@ -640,10 +630,6 @@ class SearchViewModel @Inject constructor( handleDecryptCipherErrorReceive(action) } - is SearchAction.Internal.ArchiveItemsFlagUpdateReceive -> { - handleArchiveItemsFlagUpdateReceive(action) - } - is SearchAction.Internal.ArchiveCipherReceive -> handleArchiveCipherReceive(action) is SearchAction.Internal.UnarchiveCipherReceive -> handleUnarchiveCipherReceive(action) } @@ -663,12 +649,6 @@ class SearchViewModel @Inject constructor( } } - private fun handleArchiveItemsFlagUpdateReceive( - action: SearchAction.Internal.ArchiveItemsFlagUpdateReceive, - ) { - mutableStateFlow.update { it.copy(isArchiveEnabled = action.isEnabled) } - } - private fun handleArchiveCipherReceive(action: SearchAction.Internal.ArchiveCipherReceive) { when (val result = action.result) { is ArchiveCipherResult.Error -> { @@ -1017,7 +997,6 @@ class SearchViewModel @Inject constructor( isIconLoadingDisabled = state.isIconLoadingDisabled, isAutofill = state.isAutofill, isPremiumUser = state.isPremium, - isArchiveEnabled = state.isArchiveEnabled, ) } @@ -1084,7 +1063,6 @@ data class SearchState( val hasMasterPassword: Boolean, val isPremium: Boolean, val restrictItemTypesPolicyOrgIds: ImmutableList, - val isArchiveEnabled: Boolean, ) : Parcelable { /** @@ -1537,13 +1515,6 @@ sealed class SearchAction { data class DecryptCipherErrorReceive( val error: Throwable?, ) : Internal() - - /** - * Indicates that the Archive Items flag has been updated. - */ - data class ArchiveItemsFlagUpdateReceive( - val isEnabled: Boolean, - ) : Internal() } } diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/util/SearchTypeDataExtensions.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/util/SearchTypeDataExtensions.kt index 9dd7955d87a..ba6dd10d438 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/util/SearchTypeDataExtensions.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/util/SearchTypeDataExtensions.kt @@ -164,7 +164,6 @@ fun List.toViewState( isIconLoadingDisabled: Boolean, isAutofill: Boolean, isPremiumUser: Boolean, - isArchiveEnabled: Boolean, ): SearchState.ViewState = when { searchTerm.isEmpty() -> SearchState.ViewState.Empty(message = null) @@ -176,7 +175,6 @@ fun List.toViewState( isIconLoadingDisabled = isIconLoadingDisabled, isAutofill = isAutofill, isPremiumUser = isPremiumUser, - isArchiveEnabled = isArchiveEnabled, ), ) } @@ -188,14 +186,12 @@ fun List.toViewState( } } -@Suppress("LongParameterList") private fun List.toDisplayItemList( baseIconUrl: String, hasMasterPassword: Boolean, isIconLoadingDisabled: Boolean, isAutofill: Boolean, isPremiumUser: Boolean, - isArchiveEnabled: Boolean, ): ImmutableList = this .map { @@ -205,20 +201,17 @@ private fun List.toDisplayItemList( isIconLoadingDisabled = isIconLoadingDisabled, isAutofill = isAutofill, isPremiumUser = isPremiumUser, - isArchiveEnabled = isArchiveEnabled, ) } .sortAlphabetically() .toImmutableList() -@Suppress("LongParameterList") private fun CipherListView.toDisplayItem( baseIconUrl: String, hasMasterPassword: Boolean, isIconLoadingDisabled: Boolean, isAutofill: Boolean, isPremiumUser: Boolean, - isArchiveEnabled: Boolean, ): SearchState.DisplayItem = SearchState.DisplayItem( id = id.orEmpty(), @@ -234,7 +227,6 @@ private fun CipherListView.toDisplayItem( overflowOptions = toOverflowActions( hasMasterPassword = hasMasterPassword, isPremiumUser = isPremiumUser, - isArchiveEnabled = isArchiveEnabled, ), overflowTestTag = "CipherOptionsButton", totpCode = login?.totp, 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 2b6ff58399d..fc4ea9479da 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 @@ -5,7 +5,6 @@ import androidx.credentials.CreatePublicKeyCredentialRequest import androidx.credentials.provider.CallingAppInfo import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.viewModelScope -import com.bitwarden.core.data.manager.model.FlagKey import com.bitwarden.core.data.manager.toast.ToastManager import com.bitwarden.core.data.repository.model.DataState import com.bitwarden.core.data.repository.util.takeUntilLoaded @@ -34,7 +33,6 @@ import com.x8bit.bitwarden.data.credentials.manager.BitwardenCredentialManager import com.x8bit.bitwarden.data.credentials.model.CreateCredentialRequest import com.x8bit.bitwarden.data.credentials.model.Fido2RegisterCredentialResult import com.x8bit.bitwarden.data.credentials.model.UserVerificationRequirement -import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager import com.x8bit.bitwarden.data.platform.manager.FirstTimeActionManager import com.x8bit.bitwarden.data.platform.manager.PolicyManager import com.x8bit.bitwarden.data.platform.manager.SpecialCircumstanceManager @@ -119,7 +117,6 @@ private const val KEY_STATE = "state" @Suppress("TooManyFunctions", "LargeClass", "LongParameterList", "LongMethod") class VaultAddEditViewModel @Inject constructor( savedStateHandle: SavedStateHandle, - featureFlagManager: FeatureFlagManager, generatorRepository: GeneratorRepository, private val snackbarRelayManager: SnackbarRelayManager, private val toastManager: ToastManager, @@ -177,7 +174,6 @@ class VaultAddEditViewModel @Inject constructor( } VaultAddEditState( - isArchiveEnabled = featureFlagManager.getFeatureFlag(FlagKey.ArchiveItems), vaultAddEditType = vaultAddEditType, cipherType = vaultCipherType, viewState = when (vaultAddEditType) { @@ -273,12 +269,6 @@ class VaultAddEditViewModel @Inject constructor( .onEach(::sendAction) .launchIn(viewModelScope) - featureFlagManager - .getFeatureFlagFlow(FlagKey.ArchiveItems) - .map { VaultAddEditAction.Internal.ArchiveItemsFlagUpdateReceive(it) } - .onEach(::sendAction) - .launchIn(viewModelScope) - snackbarRelayManager .getSnackbarDataFlow(SnackbarRelay.CIPHER_MOVED_TO_ORGANIZATION) .map { VaultAddEditAction.Internal.SnackbarDataReceived(it) } @@ -1649,10 +1639,6 @@ class VaultAddEditViewModel @Inject constructor( handleUnarchiveCipherReceive(action) } - is VaultAddEditAction.Internal.ArchiveItemsFlagUpdateReceive -> { - handleArchiveItemsFlagUpdateReceive(action) - } - is VaultAddEditAction.Internal.DeleteCipherReceive -> handleDeleteCipherReceive(action) is VaultAddEditAction.Internal.TotpCodeReceive -> handleVaultTotpCodeReceive(action) is VaultAddEditAction.Internal.VaultDataReceive -> handleVaultDataReceive(action) @@ -1864,12 +1850,6 @@ class VaultAddEditViewModel @Inject constructor( } } - private fun handleArchiveItemsFlagUpdateReceive( - action: VaultAddEditAction.Internal.ArchiveItemsFlagUpdateReceive, - ) { - mutableStateFlow.update { it.copy(isArchiveEnabled = action.isEnabled) } - } - private fun handleDeleteCipherReceive(action: VaultAddEditAction.Internal.DeleteCipherReceive) { when (val result = action.result) { is DeleteCipherResult.Error -> { @@ -2427,7 +2407,6 @@ data class VaultAddEditState( val createCredentialRequest: CreateCredentialRequest? = null, val defaultUriMatchType: UriMatchType, private val shouldShowCoachMarkTour: Boolean, - private val isArchiveEnabled: Boolean, ) : Parcelable { /** @@ -2484,8 +2463,7 @@ data class VaultAddEditState( * Helper to determine if the UI should display the archive button. */ val displayArchiveButton: Boolean - get() = isArchiveEnabled && - isEditItemMode && + get() = isEditItemMode && (viewState as? ViewState.Content) ?.common ?.originalCipher @@ -2495,8 +2473,7 @@ data class VaultAddEditState( * Helper to determine if the UI should display the unarchive button. */ val displayUnarchiveButton: Boolean - get() = isArchiveEnabled && - isEditItemMode && + get() = isEditItemMode && (viewState as? ViewState.Content) ?.common ?.originalCipher @@ -3834,12 +3811,5 @@ sealed class VaultAddEditAction { data class AvailableFoldersReceive( val folderData: DataState>, ) : Internal() - - /** - * Indicates that the Archive Items flag has been updated. - */ - data class ArchiveItemsFlagUpdateReceive( - val isEnabled: Boolean, - ) : Internal() } } 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 a0bb049de2a..bce73608c23 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 @@ -4,7 +4,6 @@ import android.net.Uri import android.os.Parcelable import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.viewModelScope -import com.bitwarden.core.data.manager.model.FlagKey import com.bitwarden.core.data.repository.model.DataState import com.bitwarden.core.data.repository.util.combineDataStates import com.bitwarden.core.data.repository.util.mapNullable @@ -27,7 +26,6 @@ import com.bitwarden.vault.CipherView import com.x8bit.bitwarden.data.auth.repository.AuthRepository import com.x8bit.bitwarden.data.auth.repository.model.BreachCountResult import com.x8bit.bitwarden.data.auth.repository.model.UserState -import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager import com.x8bit.bitwarden.data.platform.manager.clipboard.BitwardenClipboardManager import com.x8bit.bitwarden.data.platform.manager.event.OrganizationEventManager import com.x8bit.bitwarden.data.platform.manager.model.OrganizationEvent @@ -82,7 +80,6 @@ class VaultItemViewModel @Inject constructor( private val environmentRepository: EnvironmentRepository, private val settingsRepository: SettingsRepository, private val snackbarRelayManager: SnackbarRelayManager, - featureFlagManager: FeatureFlagManager, ) : BaseViewModel( // We load the state from the savedStateHandle for testing purposes. initialState = savedStateHandle[KEY_STATE] ?: run { @@ -95,7 +92,6 @@ class VaultItemViewModel @Inject constructor( baseIconUrl = environmentRepository.environment.environmentUrlData.baseIconUrl, isIconLoadingDisabled = settingsRepository.isIconLoadingDisabled, hasPremium = authRepository.userStateFlow.value?.activeAccount?.isPremium == true, - isArchiveEnabled = featureFlagManager.getFeatureFlag(FlagKey.ArchiveItems), ) }, ) { @@ -232,12 +228,6 @@ class VaultItemViewModel @Inject constructor( .map { VaultItemAction.Internal.SnackbarDataReceived(it) } .onEach(::sendAction) .launchIn(viewModelScope) - - featureFlagManager - .getFeatureFlagFlow(FlagKey.ArchiveItems) - .map { VaultItemAction.Internal.ArchiveItemsFlagUpdateReceive(it) } - .onEach(::sendAction) - .launchIn(viewModelScope) } override fun handleAction(action: VaultItemAction) { @@ -1063,10 +1053,6 @@ class VaultItemViewModel @Inject constructor( handleIsIconLoadingDisabledUpdateReceive(action) } - is VaultItemAction.Internal.ArchiveItemsFlagUpdateReceive -> { - handleArchiveItemsFlagUpdateReceive(action) - } - is VaultItemAction.Internal.ArchiveCipherReceive -> handleArchiveCipherReceive(action) is VaultItemAction.Internal.UnarchiveCipherReceive -> { handleUnarchiveCipherReceive(action) @@ -1302,12 +1288,6 @@ class VaultItemViewModel @Inject constructor( mutableStateFlow.update { it.copy(isIconLoadingDisabled = action.isDisabled) } } - private fun handleArchiveItemsFlagUpdateReceive( - action: VaultItemAction.Internal.ArchiveItemsFlagUpdateReceive, - ) { - mutableStateFlow.update { it.copy(isArchiveEnabled = action.isEnabled) } - } - private fun handleArchiveCipherReceive(action: VaultItemAction.Internal.ArchiveCipherReceive) { when (val result = action.result) { is ArchiveCipherResult.Error -> { @@ -1446,7 +1426,6 @@ data class VaultItemState( val dialog: DialogState?, val baseIconUrl: String, val isIconLoadingDisabled: Boolean, - val isArchiveEnabled: Boolean, val hasPremium: Boolean, ) : Parcelable { @@ -1513,21 +1492,19 @@ data class VaultItemState( * Helper to determine if the UI should display the archive button. */ val displayArchiveButton: Boolean - get() = isArchiveEnabled && - viewState.asContentOrNull() - ?.common - ?.currentCipher - ?.isActive == true + get() = viewState.asContentOrNull() + ?.common + ?.currentCipher + ?.isActive == true /** * Helper to determine if the UI should display the unarchive button. */ val displayUnarchiveButton: Boolean - get() = isArchiveEnabled && - viewState.asContentOrNull() - ?.common - ?.currentCipher - ?.let { it.archivedDate != null && it.deletedDate == null } == true + get() = viewState.asContentOrNull() + ?.common + ?.currentCipher + ?.let { it.archivedDate != null && it.deletedDate == null } == true val canAssignToCollections: Boolean get() = viewState.asContentOrNull() @@ -2372,13 +2349,6 @@ sealed class VaultItemAction { val data: BitwardenSnackbarData, ) : Internal() - /** - * Indicates that the Archive Items flag has been updated. - */ - data class ArchiveItemsFlagUpdateReceive( - val isEnabled: Boolean, - ) : Internal() - /** * Indicates that the archive cipher result has been received. */ 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 5e8fd3e99ea..b9a849ffd6b 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 @@ -11,7 +11,6 @@ import androidx.credentials.provider.ProviderCreateCredentialRequest import androidx.credentials.provider.ProviderGetCredentialRequest import androidx.lifecycle.SavedStateHandle import androidx.lifecycle.viewModelScope -import com.bitwarden.core.data.manager.model.FlagKey import com.bitwarden.core.data.manager.toast.ToastManager import com.bitwarden.core.data.repository.model.DataState import com.bitwarden.core.data.repository.util.map @@ -58,7 +57,6 @@ import com.x8bit.bitwarden.data.credentials.model.ValidateOriginResult import com.x8bit.bitwarden.data.credentials.parser.RelyingPartyParser import com.x8bit.bitwarden.data.credentials.repository.PrivilegedAppRepository import com.x8bit.bitwarden.data.credentials.util.getCreatePasskeyCredentialRequestOrNull -import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager import com.x8bit.bitwarden.data.platform.manager.PolicyManager import com.x8bit.bitwarden.data.platform.manager.SpecialCircumstanceManager import com.x8bit.bitwarden.data.platform.manager.ciphermatching.CipherMatchingManager @@ -152,7 +150,6 @@ class VaultItemListingViewModel @Inject constructor( private val relyingPartyParser: RelyingPartyParser, private val toastManager: ToastManager, snackbarRelayManager: SnackbarRelayManager, - featureFlagManager: FeatureFlagManager, ) : BaseViewModel( initialState = run { val userState = requireNotNull(authRepository.userStateFlow.value) @@ -194,7 +191,6 @@ class VaultItemListingViewModel @Inject constructor( getCredentialsRequest = providerGetCredentialsRequest, isPremium = userState.activeAccount.isPremium, isRefreshing = false, - isArchiveEnabled = featureFlagManager.getFeatureFlag(FlagKey.ArchiveItems), ) }, ) { @@ -242,12 +238,6 @@ class VaultItemListingViewModel @Inject constructor( .onEach(::sendAction) .launchIn(viewModelScope) - featureFlagManager - .getFeatureFlagFlow(FlagKey.ArchiveItems) - .map { VaultItemListingsAction.Internal.ArchiveItemsFlagUpdateReceive(it) } - .onEach(::sendAction) - .launchIn(viewModelScope) - specialCircumstanceManager.specialCircumstance ?.toCreateCredentialRequestOrNull() ?.let { request -> @@ -1684,10 +1674,6 @@ class VaultItemListingViewModel @Inject constructor( handleCredentialOperationFailureReceive(action) } - is VaultItemListingsAction.Internal.ArchiveItemsFlagUpdateReceive -> { - handleArchiveItemsFlagUpdateReceive(action) - } - is VaultItemListingsAction.Internal.ArchiveCipherReceive -> { handleArchiveCipherReceive(action) } @@ -1708,12 +1694,6 @@ class VaultItemListingViewModel @Inject constructor( ) } - private fun handleArchiveItemsFlagUpdateReceive( - action: VaultItemListingsAction.Internal.ArchiveItemsFlagUpdateReceive, - ) { - mutableStateFlow.update { it.copy(isArchiveEnabled = action.isEnabled) } - } - private fun handleArchiveCipherReceive( action: VaultItemListingsAction.Internal.ArchiveCipherReceive, ) { @@ -2663,7 +2643,6 @@ class VaultItemListingViewModel @Inject constructor( totpData = state.totpData, isPremiumUser = state.isPremium, restrictItemTypesPolicyOrgIds = state.restrictItemTypesPolicyOrgIds, - isArchiveEnabled = state.isArchiveEnabled, ) } @@ -2871,7 +2850,6 @@ data class VaultItemListingState( val hasMasterPassword: Boolean, val isPremium: Boolean, val isRefreshing: Boolean, - val isArchiveEnabled: Boolean, ) { /** * Indicates what action card to display. @@ -3955,13 +3933,6 @@ sealed class VaultItemListingsAction { val data: BitwardenSnackbarData, ) : Internal(), BackgroundEvent - /** - * Indicates that the Archive Items flag has been updated. - */ - data class ArchiveItemsFlagUpdateReceive( - val isEnabled: Boolean, - ) : Internal() - /** * Indicates that an error occurred while decrypting a cipher. */ diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/util/VaultItemListingDataExtensions.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/util/VaultItemListingDataExtensions.kt index 2256ac61f5a..4fef81ae96c 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/util/VaultItemListingDataExtensions.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/util/VaultItemListingDataExtensions.kt @@ -119,7 +119,6 @@ fun VaultData.toViewState( totpData: TotpData?, isPremiumUser: Boolean, restrictItemTypesPolicyOrgIds: List, - isArchiveEnabled: Boolean, ): VaultItemListingState.ViewState { val filteredCipherViewList = decryptCipherListResult .successes @@ -168,7 +167,6 @@ fun VaultData.toViewState( isAutofill = autofillSelectionData != null, isFido2Creation = createCredentialRequestData != null, isPremiumUser = isPremiumUser, - isArchiveEnabled = isArchiveEnabled, ), ), displayFolderList = folderList.map { folderView -> @@ -410,7 +408,6 @@ private fun List.toDisplayItemList( isAutofill: Boolean, isFido2Creation: Boolean, isPremiumUser: Boolean, - isArchiveEnabled: Boolean, ): List = this.map { it.toDisplayItem( @@ -420,7 +417,6 @@ private fun List.toDisplayItemList( isAutofill = isAutofill, isFido2Creation = isFido2Creation, isPremiumUser = isPremiumUser, - isArchiveEnabled = isArchiveEnabled, ) } @@ -443,7 +439,6 @@ private fun CipherListView.toDisplayItem( isAutofill: Boolean, isFido2Creation: Boolean, isPremiumUser: Boolean, - isArchiveEnabled: Boolean, ): VaultItemListingState.DisplayItem = VaultItemListingState.DisplayItem( id = id.orEmpty(), @@ -469,7 +464,6 @@ private fun CipherListView.toDisplayItem( overflowOptions = this.toOverflowActions( hasMasterPassword = hasMasterPassword, isPremiumUser = isPremiumUser, - isArchiveEnabled = isArchiveEnabled, ), optionsTestTag = "CipherOptionsButton", isAutofill = isAutofill, diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/util/CipherListViewExtensions.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/util/CipherListViewExtensions.kt index 7f3974a33d8..1325781f969 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/util/CipherListViewExtensions.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/util/CipherListViewExtensions.kt @@ -20,7 +20,6 @@ import kotlinx.collections.immutable.toImmutableList fun CipherListView.toOverflowActions( hasMasterPassword: Boolean, isPremiumUser: Boolean, - isArchiveEnabled: Boolean, ): ImmutableList = this .id @@ -89,11 +88,9 @@ fun CipherListView.toOverflowActions( ListingItemOverflowAction.VaultAction.LaunchClick(url = it) }, ListingItemOverflowAction.VaultAction.ArchiveClick(cipherId = cipherId) - .takeIf { this.isActive && isArchiveEnabled }, + .takeIf { this.isActive }, ListingItemOverflowAction.VaultAction.UnarchiveClick(cipherId = cipherId) - .takeIf { - this.archivedDate != null && deletedDate == null && isArchiveEnabled - }, + .takeIf { this.archivedDate != null && deletedDate == null }, ) } .orEmpty() diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultContent.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultContent.kt index c874954bdff..6aeb9471319 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultContent.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultContent.kt @@ -34,7 +34,6 @@ import com.x8bit.bitwarden.ui.vault.feature.vault.handlers.VaultHandlers private const val TOTP_TYPES_COUNT: Int = 1 private const val HIDDEN_TYPES_COUNT: Int = 2 -private const val TRASH_TYPES_COUNT: Int = 1 /** * Content view for the [VaultScreen]. @@ -424,11 +423,7 @@ fun VaultContent( item(key = "hidden_items_header") { BitwardenListHeaderText( label = stringResource(id = BitwardenString.hidden_items), - supportingLabel = if (state.archiveEnabled) { - HIDDEN_TYPES_COUNT.toString() - } else { - TRASH_TYPES_COUNT.toString() - }, + supportingLabel = HIDDEN_TYPES_COUNT.toString(), modifier = Modifier .animateItem() .fillMaxWidth() @@ -438,23 +433,21 @@ fun VaultContent( Spacer(modifier = Modifier.height(height = 8.dp)) } - if (state.archiveEnabled) { - item(key = "archive_group") { - BitwardenGroupItem( - startIcon = IconData.Local(iconRes = BitwardenDrawable.ic_archive), - endIcon = state.archiveEndIcon?.let { IconData.Local(iconRes = it) }, - label = stringResource(id = BitwardenString.archive_noun), - subLabel = state.archiveSubText?.invoke(), - supportingLabel = state.archivedItemsCount?.toString().orEmpty(), - onClick = vaultHandlers.archiveClick, - cardStyle = CardStyle.Top(dividerPadding = 56.dp), - modifier = Modifier - .animateItem() - .fillMaxWidth() - .testTag(tag = "ArchiveFilter") - .standardHorizontalMargin(), - ) - } + item(key = "archive_group") { + BitwardenGroupItem( + startIcon = IconData.Local(iconRes = BitwardenDrawable.ic_archive), + endIcon = state.archiveEndIcon?.let { IconData.Local(iconRes = it) }, + label = stringResource(id = BitwardenString.archive_noun), + subLabel = state.archiveSubText?.invoke(), + supportingLabel = state.archivedItemsCount?.toString().orEmpty(), + onClick = vaultHandlers.archiveClick, + cardStyle = CardStyle.Top(dividerPadding = 56.dp), + modifier = Modifier + .animateItem() + .fillMaxWidth() + .testTag(tag = "ArchiveFilter") + .standardHorizontalMargin(), + ) } item(key = "trash_group") { @@ -463,7 +456,7 @@ fun VaultContent( label = stringResource(id = BitwardenString.trash), supportingLabel = state.trashItemsCount.toString(), onClick = vaultHandlers.trashClick, - cardStyle = if (state.archiveEnabled) CardStyle.Bottom else CardStyle.Full, + cardStyle = CardStyle.Bottom, modifier = Modifier .animateItem() .fillMaxWidth() 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 6461d845949..e9c877e177e 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 @@ -146,7 +146,6 @@ class VaultViewModel @Inject constructor( viewState = VaultState.ViewState.Loading, isIconLoadingDisabled = settingsRepository.isIconLoadingDisabled, isPremium = activeAccount.isPremium, - isArchiveEnabled = featureFlagManager.getFeatureFlag(FlagKey.ArchiveItems), isPullToRefreshSettingEnabled = settingsRepository.getPullToRefreshEnabledFlow().value, baseIconUrl = activeAccount.environment.environmentUrlData.baseIconUrl, hasMasterPassword = activeAccount.hasMasterPassword, @@ -264,11 +263,6 @@ class VaultViewModel @Inject constructor( .map { VaultAction.Internal.CredentialExchangeProtocolExportFlagUpdateReceive(it) } .onEach(::sendAction) .launchIn(viewModelScope) - featureFlagManager - .getFeatureFlagFlow(FlagKey.ArchiveItems) - .map { VaultAction.Internal.ArchiveItemsFlagUpdateReceive(it) } - .onEach(::sendAction) - .launchIn(viewModelScope) viewModelScope.launch { delay(timeMillis = BROWSER_AUTOFILL_DIALOG_DELAY) @@ -970,10 +964,6 @@ class VaultViewModel @Inject constructor( handleCredentialExchangeProtocolExportFlagUpdateReceive(action) } - is VaultAction.Internal.ArchiveItemsFlagUpdateReceive -> { - handleArchiveItemsFlagUpdateReceive(action) - } - is VaultAction.Internal.ArchiveCipherReceive -> handleArchiveCipherReceive(action) is VaultAction.Internal.UnarchiveCipherReceive -> handleUnarchiveCipherReceive(action) is VaultAction.Internal.IntroducingArchiveActionCardDismissedFlowReceive -> { @@ -1037,12 +1027,6 @@ class VaultViewModel @Inject constructor( } } - private fun handleArchiveItemsFlagUpdateReceive( - action: VaultAction.Internal.ArchiveItemsFlagUpdateReceive, - ) { - mutableStateFlow.update { it.copy(isArchiveEnabled = action.isEnabled) } - } - private fun handleArchiveCipherReceive(action: VaultAction.Internal.ArchiveCipherReceive) { when (val result = action.result) { is ArchiveCipherResult.Error -> { @@ -1245,7 +1229,6 @@ class VaultViewModel @Inject constructor( ?: BitwardenString.generic_error_message.asText(), isRefreshing = false, restrictItemTypesPolicyOrgIds = state.restrictItemTypesPolicyOrgIds, - isArchiveEnabled = state.isArchiveEnabled, ) } @@ -1309,7 +1292,6 @@ class VaultViewModel @Inject constructor( hasMasterPassword = state.hasMasterPassword, vaultFilterType = vaultFilterTypeOrDefault, restrictItemTypesPolicyOrgIds = state.restrictItemTypesPolicyOrgIds, - isArchiveEnabled = state.isArchiveEnabled, ), dialog = dialog, isRefreshing = false, @@ -1354,7 +1336,6 @@ class VaultViewModel @Inject constructor( hasMasterPassword = state.hasMasterPassword, vaultFilterType = vaultFilterTypeOrDefault, restrictItemTypesPolicyOrgIds = state.restrictItemTypesPolicyOrgIds, - isArchiveEnabled = state.isArchiveEnabled, ), ) } @@ -1506,7 +1487,6 @@ data class VaultState( val flightRecorderSnackBar: BitwardenSnackbarData?, // Internal-use properties val isSwitchingAccounts: Boolean = false, - val isArchiveEnabled: Boolean, val isPremium: Boolean, val hasMasterPassword: Boolean, private val isPullToRefreshSettingEnabled: Boolean, @@ -1527,9 +1507,7 @@ data class VaultState( ActionCardState.UpgradePremium .takeIf { isPremiumUpgradeBannerEligible } ?: ActionCardState.IntroducingArchive.takeIf { - isPremium && - !isIntroducingArchiveActionCardDismissed && - isArchiveEnabled + isPremium && !isIntroducingArchiveActionCardDismissed } } @@ -1610,7 +1588,6 @@ data class VaultState( * @property collectionItems The list of collections to be displayed. * @property trashItemsCount The number of items present in the trash. * @property archivedItemsCount The number of items present in archive. - * @property archiveEnabled Is the archive feature enabled. * @property archiveSubText The subtext to be displayed on the archive item. * @property archiveEndIcon The end icon to be displayed on the archive item. * @property showCardGroup Is the card group available for display. @@ -1630,7 +1607,6 @@ data class VaultState( val collectionItems: List, val trashItemsCount: Int, val archivedItemsCount: Int?, - val archiveEnabled: Boolean, val archiveSubText: Text?, @field:DrawableRes val archiveEndIcon: Int?, val showCardGroup: Boolean, @@ -2387,13 +2363,6 @@ sealed class VaultAction { val isCredentialExchangeProtocolExportEnabled: Boolean, ) : Internal() - /** - * Indicates that the Archive Items flag has been updated. - */ - data class ArchiveItemsFlagUpdateReceive( - val isEnabled: Boolean, - ) : Internal() - /** * Indicates that the archive cipher result has been received. */ @@ -2437,7 +2406,6 @@ private fun MutableStateFlow.updateToErrorStateOrDialog( errorMessage: Text, isRefreshing: Boolean, restrictItemTypesPolicyOrgIds: List, - isArchiveEnabled: Boolean, ) { this.update { if (vaultData != null) { @@ -2449,7 +2417,6 @@ private fun MutableStateFlow.updateToErrorStateOrDialog( vaultFilterType = vaultFilterType, isIconLoadingDisabled = isIconLoadingDisabled, restrictItemTypesPolicyOrgIds = restrictItemTypesPolicyOrgIds, - isArchiveEnabled = isArchiveEnabled, ), dialog = VaultState.DialogState.Error( title = errorTitle, diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultDataExtensions.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultDataExtensions.kt index a109fcd4173..b64f37223d6 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultDataExtensions.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultDataExtensions.kt @@ -46,7 +46,6 @@ fun VaultData.toViewState( baseIconUrl: String, vaultFilterType: VaultFilterType, restrictItemTypesPolicyOrgIds: List, - isArchiveEnabled: Boolean, ): VaultState.ViewState { val allCipherViews = decryptCipherListResult @@ -111,7 +110,6 @@ fun VaultData.toViewState( baseIconUrl = baseIconUrl, isPremiumUser = isPremium, hasDecryptionError = false, - isArchiveEnabled = isArchiveEnabled, ) } .plus( @@ -124,7 +122,6 @@ fun VaultData.toViewState( baseIconUrl = baseIconUrl, isPremiumUser = isPremium, hasDecryptionError = true, - isArchiveEnabled = isArchiveEnabled, ) }, ) @@ -159,7 +156,6 @@ fun VaultData.toViewState( baseIconUrl = baseIconUrl, isPremiumUser = isPremium, hasDecryptionError = false, - isArchiveEnabled = isArchiveEnabled, ) } .plus( @@ -172,7 +168,6 @@ fun VaultData.toViewState( baseIconUrl = baseIconUrl, isPremiumUser = isPremium, hasDecryptionError = true, - isArchiveEnabled = isArchiveEnabled, ) }, ), @@ -219,7 +214,6 @@ fun VaultData.toViewState( }, trashItemsCount = allCipherViews.count { it.deletedDate != null }, archivedItemsCount = archiveCount.takeIf { isPremium || archiveCount > 0 }, - archiveEnabled = isArchiveEnabled, archiveEndIcon = BitwardenDrawable.ic_locked.takeIf { !isPremium && archiveCount == 0 }, archiveSubText = BitwardenString .premium_subscription_required @@ -279,14 +273,13 @@ fun List?.toLoginIconData( /** * Transforms a [CipherListView] into a [VaultState.ViewState.VaultItem]. */ -@Suppress("MagicNumber", "LongMethod", "CyclomaticComplexMethod", "LongParameterList") +@Suppress("MagicNumber", "LongMethod", "CyclomaticComplexMethod") private fun CipherListView.toVaultItemOrNull( hasMasterPassword: Boolean, isIconLoadingDisabled: Boolean, baseIconUrl: String, isPremiumUser: Boolean, hasDecryptionError: Boolean, - isArchiveEnabled: Boolean, ): VaultState.ViewState.VaultItem? { val id = this.id ?: return null return when (type) { @@ -309,7 +302,6 @@ private fun CipherListView.toVaultItemOrNull( toOverflowActions( hasMasterPassword = hasMasterPassword, isPremiumUser = isPremiumUser, - isArchiveEnabled = isArchiveEnabled, ) }, extraIconList = toLabelIcons(), @@ -324,7 +316,6 @@ private fun CipherListView.toVaultItemOrNull( overflowOptions = toOverflowActions( hasMasterPassword = hasMasterPassword, isPremiumUser = isPremiumUser, - isArchiveEnabled = isArchiveEnabled, ), extraIconList = toLabelIcons(), shouldShowMasterPasswordReprompt = hasMasterPassword && @@ -340,7 +331,6 @@ private fun CipherListView.toVaultItemOrNull( overflowOptions = toOverflowActions( hasMasterPassword = hasMasterPassword, isPremiumUser = isPremiumUser, - isArchiveEnabled = isArchiveEnabled, ), extraIconList = toLabelIcons(), shouldShowMasterPasswordReprompt = hasMasterPassword && @@ -355,7 +345,6 @@ private fun CipherListView.toVaultItemOrNull( overflowOptions = toOverflowActions( hasMasterPassword = hasMasterPassword, isPremiumUser = isPremiumUser, - isArchiveEnabled = isArchiveEnabled, ), extraIconList = toLabelIcons(), shouldShowMasterPasswordReprompt = hasMasterPassword && @@ -370,7 +359,6 @@ private fun CipherListView.toVaultItemOrNull( overflowOptions = toOverflowActions( hasMasterPassword = hasMasterPassword, isPremiumUser = isPremiumUser, - isArchiveEnabled = isArchiveEnabled, ), shouldShowMasterPasswordReprompt = hasMasterPassword && reprompt == CipherRepromptType.PASSWORD, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/SearchScreenTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/SearchScreenTest.kt index ac211e3c09f..88f27c75500 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/SearchScreenTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/SearchScreenTest.kt @@ -1074,7 +1074,6 @@ private val DEFAULT_STATE: SearchState = SearchState( autofillSelectionData = null, isPremium = true, restrictItemTypesPolicyOrgIds = persistentListOf(), - isArchiveEnabled = true, ) private fun createStateForAutofill( 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 20a59f45f8a..a802bf833ff 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 @@ -5,7 +5,6 @@ import androidx.lifecycle.SavedStateHandle import app.cash.turbine.test import app.cash.turbine.turbineScope import com.bitwarden.core.data.manager.dispatcher.FakeDispatcherManager -import com.bitwarden.core.data.manager.model.FlagKey import com.bitwarden.core.data.repository.model.DataState import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow import com.bitwarden.data.repository.model.Environment @@ -33,7 +32,6 @@ import com.x8bit.bitwarden.data.autofill.accessibility.manager.AccessibilitySele import com.x8bit.bitwarden.data.autofill.manager.AutofillSelectionManager import com.x8bit.bitwarden.data.autofill.manager.AutofillSelectionManagerImpl import com.x8bit.bitwarden.data.autofill.model.AutofillSelectionData -import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager import com.x8bit.bitwarden.data.platform.manager.PolicyManager import com.x8bit.bitwarden.data.platform.manager.SpecialCircumstanceManager import com.x8bit.bitwarden.data.platform.manager.SpecialCircumstanceManagerImpl @@ -162,11 +160,6 @@ class SearchViewModelTest : BaseViewModelTest() { getSnackbarDataFlow(relay = any(), relays = anyVararg()) } returns mutableSnackbarDataFlow } - private val mutableArchiveItemsFlow = MutableStateFlow(true) - private val featureFlagManager: FeatureFlagManager = mockk { - every { getFeatureFlag(FlagKey.ArchiveItems) } answers { mutableArchiveItemsFlow.value } - every { getFeatureFlagFlow(FlagKey.ArchiveItems) } returns mutableArchiveItemsFlow - } @BeforeEach fun setup() { @@ -1463,7 +1456,6 @@ class SearchViewModelTest : BaseViewModelTest() { isAutofill = false, hasMasterPassword = true, isPremiumUser = true, - isArchiveEnabled = true, ) } returns expectedViewState val dataState = DataState.Loaded( @@ -1575,7 +1567,6 @@ class SearchViewModelTest : BaseViewModelTest() { isAutofill = false, hasMasterPassword = true, isPremiumUser = true, - isArchiveEnabled = true, ) } returns expectedViewState mutableVaultDataStateFlow.tryEmit( @@ -1694,7 +1685,6 @@ class SearchViewModelTest : BaseViewModelTest() { isAutofill = false, hasMasterPassword = true, isPremiumUser = true, - isArchiveEnabled = true, ) } returns expectedViewState val dataState = DataState.Error( @@ -1816,7 +1806,6 @@ class SearchViewModelTest : BaseViewModelTest() { isAutofill = false, hasMasterPassword = true, isPremiumUser = true, - isArchiveEnabled = true, ) } returns expectedViewState val dataState = DataState.NoNetwork( @@ -2014,7 +2003,6 @@ class SearchViewModelTest : BaseViewModelTest() { autofillSelectionManager = autofillSelectionManager, organizationEventManager = organizationEventManager, snackbarRelayManager = snackbarRelayManager, - featureFlagManager = featureFlagManager, ) /** @@ -2050,7 +2038,6 @@ class SearchViewModelTest : BaseViewModelTest() { isAutofill = true, hasMasterPassword = true, isPremiumUser = true, - isArchiveEnabled = true, ) } returns expectedViewState val dataState = DataState.Loaded( @@ -2095,7 +2082,6 @@ private val DEFAULT_STATE: SearchState = SearchState( autofillSelectionData = null, isPremium = true, restrictItemTypesPolicyOrgIds = persistentListOf(), - isArchiveEnabled = true, ) private val DEFAULT_ACCOUNT = UserState.Account( diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/util/SearchTypeDataExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/util/SearchTypeDataExtensionsTest.kt index ef5c5f414f8..27b97d9bf45 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/util/SearchTypeDataExtensionsTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/search/util/SearchTypeDataExtensionsTest.kt @@ -376,7 +376,6 @@ class SearchTypeDataExtensionsTest { isAutofill = false, hasMasterPassword = true, isPremiumUser = true, - isArchiveEnabled = true, ) assertEquals(SearchState.ViewState.Empty(message = null), result) @@ -402,7 +401,6 @@ class SearchTypeDataExtensionsTest { isAutofill = false, hasMasterPassword = true, isPremiumUser = true, - isArchiveEnabled = true, ) assertEquals( @@ -445,7 +443,6 @@ class SearchTypeDataExtensionsTest { isAutofill = true, hasMasterPassword = true, isPremiumUser = true, - isArchiveEnabled = true, ) assertEquals( @@ -496,7 +493,6 @@ class SearchTypeDataExtensionsTest { isAutofill = false, hasMasterPassword = true, isPremiumUser = true, - isArchiveEnabled = true, ) assertEquals( @@ -531,7 +527,6 @@ class SearchTypeDataExtensionsTest { hasMasterPassword = true, isAutofill = false, isPremiumUser = true, - isArchiveEnabled = true, ) assertEquals( diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt index 3b610fb859f..6084b577d17 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/addedit/VaultAddEditScreenTest.kt @@ -4499,7 +4499,6 @@ class VaultAddEditScreenTest : BitwardenComposeTest() { shouldShowCoachMarkTour = false, defaultUriMatchType = UriMatchTypeModel.EXACT, hasPremium = false, - isArchiveEnabled = true, ) private val DEFAULT_STATE_LOGIN = VaultAddEditState( @@ -4515,7 +4514,6 @@ class VaultAddEditScreenTest : BitwardenComposeTest() { shouldShowCoachMarkTour = false, defaultUriMatchType = UriMatchTypeModel.EXACT, hasPremium = false, - isArchiveEnabled = true, ) private val DEFAULT_STATE_IDENTITY = VaultAddEditState( @@ -4531,7 +4529,6 @@ class VaultAddEditScreenTest : BitwardenComposeTest() { shouldShowCoachMarkTour = false, defaultUriMatchType = UriMatchTypeModel.EXACT, hasPremium = false, - isArchiveEnabled = true, ) private val DEFAULT_STATE_CARD = VaultAddEditState( @@ -4547,7 +4544,6 @@ class VaultAddEditScreenTest : BitwardenComposeTest() { shouldShowCoachMarkTour = false, defaultUriMatchType = UriMatchTypeModel.EXACT, hasPremium = false, - isArchiveEnabled = true, ) private val DEFAULT_STATE_SECURE_NOTES_CUSTOM_FIELDS = VaultAddEditState( @@ -4573,7 +4569,6 @@ class VaultAddEditScreenTest : BitwardenComposeTest() { shouldShowCoachMarkTour = false, defaultUriMatchType = UriMatchTypeModel.EXACT, hasPremium = false, - isArchiveEnabled = true, ) private val DEFAULT_STATE_SECURE_NOTES = VaultAddEditState( @@ -4589,7 +4584,6 @@ class VaultAddEditScreenTest : BitwardenComposeTest() { shouldShowCoachMarkTour = false, defaultUriMatchType = UriMatchTypeModel.EXACT, hasPremium = false, - isArchiveEnabled = true, ) private val DEFAULT_STATE_SSH_KEYS = VaultAddEditState( @@ -4605,7 +4599,6 @@ class VaultAddEditScreenTest : BitwardenComposeTest() { shouldShowCoachMarkTour = false, defaultUriMatchType = UriMatchTypeModel.EXACT, hasPremium = false, - isArchiveEnabled = true, ) private val ALTERED_COLLECTIONS = listOf( 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 886460e8ab2..d722303adc4 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 @@ -8,7 +8,6 @@ import androidx.lifecycle.SavedStateHandle import app.cash.turbine.test import com.bitwarden.collections.CollectionView import com.bitwarden.core.data.manager.dispatcher.FakeDispatcherManager -import com.bitwarden.core.data.manager.model.FlagKey import com.bitwarden.core.data.manager.toast.ToastManager import com.bitwarden.core.data.repository.model.DataState import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow @@ -44,7 +43,6 @@ import com.x8bit.bitwarden.data.credentials.model.CreateCredentialRequest import com.x8bit.bitwarden.data.credentials.model.Fido2RegisterCredentialResult import com.x8bit.bitwarden.data.credentials.model.UserVerificationRequirement import com.x8bit.bitwarden.data.credentials.model.createMockCreateCredentialRequest -import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager import com.x8bit.bitwarden.data.platform.manager.FirstTimeActionManager import com.x8bit.bitwarden.data.platform.manager.PolicyManager import com.x8bit.bitwarden.data.platform.manager.SpecialCircumstanceManager @@ -223,11 +221,6 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { every { show(message = any(), duration = any()) } just runs } private val environmentRepository = FakeEnvironmentRepository() - private val mutableArchiveItemsFlow = MutableStateFlow(true) - private val featureFlagManager: FeatureFlagManager = mockk { - every { getFeatureFlag(FlagKey.ArchiveItems) } answers { mutableArchiveItemsFlow.value } - every { getFeatureFlagFlow(FlagKey.ArchiveItems) } returns mutableArchiveItemsFlow - } @BeforeEach fun setup() { @@ -268,7 +261,6 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { shouldShowCoachMarkTour = false, defaultUriMatchType = UriMatchTypeModel.EXACT, hasPremium = true, - isArchiveEnabled = true, ) val viewModel = createAddVaultItemViewModel( savedStateHandle = createSavedStateHandleWithState( @@ -357,7 +349,6 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { shouldShowCoachMarkTour = false, defaultUriMatchType = UriMatchTypeModel.EXACT, hasPremium = true, - isArchiveEnabled = true, ), viewModel.stateFlow.value, ) @@ -5153,7 +5144,6 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { createCredentialRequest = createCredentialRequest, defaultUriMatchType = UriMatchTypeModel.EXACT, hasPremium = hasPremium, - isArchiveEnabled = true, ) @Suppress("LongParameterList") @@ -5236,7 +5226,6 @@ class VaultAddEditViewModelTest : BaseViewModelTest() { ): VaultAddEditViewModel = VaultAddEditViewModel( savedStateHandle = savedStateHandle, - featureFlagManager = featureFlagManager, authRepository = authRepository, clipboardManager = bitwardenClipboardManager, policyManager = policyManager, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreenTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreenTest.kt index e091bfe9a4e..9bf2f7d64d2 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreenTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/item/VaultItemScreenTest.kt @@ -3343,7 +3343,6 @@ private val DEFAULT_STATE: VaultItemState = VaultItemState( baseIconUrl = "https://example.com/", isIconLoadingDisabled = true, hasPremium = false, - isArchiveEnabled = true, ) private val DEFAULT_COMMON: VaultItemState.ViewState.Content.Common = 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 0f723f15e07..c3e7347af74 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 @@ -4,7 +4,6 @@ import android.net.Uri import androidx.lifecycle.SavedStateHandle import app.cash.turbine.test import com.bitwarden.collections.CollectionView -import com.bitwarden.core.data.manager.model.FlagKey import com.bitwarden.core.data.repository.model.DataState import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow import com.bitwarden.data.manager.file.FileManager @@ -29,7 +28,6 @@ import com.x8bit.bitwarden.data.auth.repository.AuthRepository import com.x8bit.bitwarden.data.auth.repository.model.BreachCountResult import com.x8bit.bitwarden.data.auth.repository.model.UserState import com.x8bit.bitwarden.data.auth.repository.model.createMockOrganization -import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager import com.x8bit.bitwarden.data.platform.manager.clipboard.BitwardenClipboardManager import com.x8bit.bitwarden.data.platform.manager.event.OrganizationEventManager import com.x8bit.bitwarden.data.platform.manager.model.FirstTimeState @@ -132,11 +130,6 @@ class VaultItemViewModelTest : BaseViewModelTest() { } returns mutableSnackbarDataFlow every { sendSnackbarData(data = any(), relay = any()) } just runs } - private val mutableArchiveItemsFlow = MutableStateFlow(true) - private val featureFlagManager: FeatureFlagManager = mockk { - every { getFeatureFlag(FlagKey.ArchiveItems) } answers { mutableArchiveItemsFlow.value } - every { getFeatureFlagFlow(FlagKey.ArchiveItems) } returns mutableArchiveItemsFlow - } @BeforeEach fun setup() { @@ -2963,7 +2956,6 @@ class VaultItemViewModelTest : BaseViewModelTest() { environmentRepository = environmentRepository, settingsRepository = settingsRepository, snackbarRelayManager = snackbarRelayManager, - featureFlagManager = featureFlagManager, ) private fun createViewState( @@ -3002,7 +2994,6 @@ class VaultItemViewModelTest : BaseViewModelTest() { baseIconUrl = Environment.Us.environmentUrlData.baseIconUrl, isIconLoadingDisabled = false, hasPremium = true, - isArchiveEnabled = true, ) private val DEFAULT_USER_ACCOUNT = UserState.Account( diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingScreenTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingScreenTest.kt index 668f4607bb2..60e00111565 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingScreenTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/VaultItemListingScreenTest.kt @@ -2576,7 +2576,6 @@ private val DEFAULT_STATE = VaultItemListingState( isPremium = false, isRefreshing = false, restrictItemTypesPolicyOrgIds = persistentListOf(), - isArchiveEnabled = true, ) private val STATE_FOR_AUTOFILL = DEFAULT_STATE.copy( 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 24fca0854bf..6c085f01867 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 @@ -16,7 +16,6 @@ import androidx.credentials.provider.PublicKeyCredentialEntry import androidx.lifecycle.SavedStateHandle import app.cash.turbine.test import com.bitwarden.core.data.manager.dispatcher.FakeDispatcherManager -import com.bitwarden.core.data.manager.model.FlagKey import com.bitwarden.core.data.manager.toast.ToastManager import com.bitwarden.core.data.repository.model.DataState import com.bitwarden.core.data.repository.util.bufferedMutableSharedFlow @@ -71,7 +70,6 @@ import com.x8bit.bitwarden.data.credentials.model.createMockGetCredentialsReques import com.x8bit.bitwarden.data.credentials.model.createMockProviderGetPasswordCredentialRequest import com.x8bit.bitwarden.data.credentials.parser.RelyingPartyParser import com.x8bit.bitwarden.data.credentials.repository.PrivilegedAppRepository -import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager import com.x8bit.bitwarden.data.platform.manager.PolicyManager import com.x8bit.bitwarden.data.platform.manager.SpecialCircumstanceManager import com.x8bit.bitwarden.data.platform.manager.SpecialCircumstanceManagerImpl @@ -298,11 +296,6 @@ class VaultItemListingViewModelTest : BaseViewModelTest() { every { parse(any()) } returns DEFAULT_RELYING_PARTY_ID every { parse(any()) } returns DEFAULT_RELYING_PARTY_ID } - private val mutableArchiveItemsFlow = MutableStateFlow(true) - private val featureFlagManager: FeatureFlagManager = mockk { - every { getFeatureFlag(FlagKey.ArchiveItems) } answers { mutableArchiveItemsFlow.value } - every { getFeatureFlagFlow(FlagKey.ArchiveItems) } returns mutableArchiveItemsFlow - } @BeforeEach fun setUp() { @@ -6179,7 +6172,6 @@ class VaultItemListingViewModelTest : BaseViewModelTest() { snackbarRelayManager = snackbarRelayManager, toastManager = toastManager, relyingPartyParser = relyingPartyParser, - featureFlagManager = featureFlagManager, ) @Suppress("MaxLineLength") @@ -6208,7 +6200,6 @@ class VaultItemListingViewModelTest : BaseViewModelTest() { isPremium = isPremium, isRefreshing = false, restrictItemTypesPolicyOrgIds = persistentListOf(), - isArchiveEnabled = true, ) } diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/util/VaultItemListingDataExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/util/VaultItemListingDataExtensionsTest.kt index a3e9820b2fd..6981eca1c35 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/util/VaultItemListingDataExtensionsTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/itemlisting/util/VaultItemListingDataExtensionsTest.kt @@ -579,7 +579,6 @@ class VaultItemListingDataExtensionsTest { totpData = null, isPremiumUser = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ) assertEquals( @@ -676,7 +675,6 @@ class VaultItemListingDataExtensionsTest { totpData = null, isPremiumUser = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ) assertEquals( @@ -763,7 +761,6 @@ class VaultItemListingDataExtensionsTest { totpData = null, isPremiumUser = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ) assertEquals( @@ -833,7 +830,6 @@ class VaultItemListingDataExtensionsTest { totpData = null, isPremiumUser = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ), ) @@ -857,7 +853,6 @@ class VaultItemListingDataExtensionsTest { totpData = null, isPremiumUser = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ), ) @@ -879,7 +874,6 @@ class VaultItemListingDataExtensionsTest { totpData = null, isPremiumUser = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ), ) @@ -902,7 +896,6 @@ class VaultItemListingDataExtensionsTest { totpData = null, isPremiumUser = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ), ) @@ -924,7 +917,6 @@ class VaultItemListingDataExtensionsTest { totpData = null, isPremiumUser = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ), ) @@ -946,7 +938,6 @@ class VaultItemListingDataExtensionsTest { totpData = null, isPremiumUser = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ), ) @@ -968,7 +959,6 @@ class VaultItemListingDataExtensionsTest { totpData = null, isPremiumUser = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ), ) @@ -992,7 +982,6 @@ class VaultItemListingDataExtensionsTest { totpData = null, isPremiumUser = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ), ) @@ -1018,7 +1007,6 @@ class VaultItemListingDataExtensionsTest { totpData = null, isPremiumUser = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ), ) @@ -1044,7 +1032,6 @@ class VaultItemListingDataExtensionsTest { totpData = null, isPremiumUser = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ), ) @@ -1071,7 +1058,6 @@ class VaultItemListingDataExtensionsTest { }, isPremiumUser = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ), ) } @@ -1326,7 +1312,6 @@ class VaultItemListingDataExtensionsTest { totpData = null, isPremiumUser = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ) assertEquals( @@ -1374,7 +1359,6 @@ class VaultItemListingDataExtensionsTest { totpData = null, isPremiumUser = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ) assertEquals( @@ -1454,7 +1438,6 @@ class VaultItemListingDataExtensionsTest { totpData = null, isPremiumUser = true, restrictItemTypesPolicyOrgIds = listOf("restrict_item_type_policy_id"), - isArchiveEnabled = true, ) assertEquals( @@ -1504,7 +1487,6 @@ class VaultItemListingDataExtensionsTest { totpData = null, isPremiumUser = true, restrictItemTypesPolicyOrgIds = listOf("restrict_item_type_policy_id"), - isArchiveEnabled = true, ) // Card type diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/util/CipherListViewExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/util/CipherListViewExtensionsTest.kt index 5afd725b553..e160eeca888 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/util/CipherListViewExtensionsTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/util/CipherListViewExtensionsTest.kt @@ -12,7 +12,6 @@ import com.x8bit.bitwarden.ui.vault.feature.itemlisting.model.ListingItemOverflo import com.x8bit.bitwarden.ui.vault.model.VaultTrailingIcon import com.x8bit.bitwarden.ui.vault.util.toSdkCipherType import org.junit.jupiter.api.Assertions.assertEquals -import org.junit.jupiter.api.Assertions.assertFalse import org.junit.jupiter.api.Assertions.assertTrue import org.junit.jupiter.api.Test @@ -40,7 +39,6 @@ class CipherListViewExtensionsTest { val result = cipher.toOverflowActions( hasMasterPassword = false, isPremiumUser = true, - isArchiveEnabled = true, ) assertEquals( @@ -89,7 +87,6 @@ class CipherListViewExtensionsTest { val result = cipher.toOverflowActions( hasMasterPassword = false, isPremiumUser = false, - isArchiveEnabled = true, ) assertTrue( @@ -114,7 +111,6 @@ class CipherListViewExtensionsTest { val result = cipher.toOverflowActions( hasMasterPassword = true, isPremiumUser = false, - isArchiveEnabled = true, ) assertEquals( @@ -157,7 +153,6 @@ class CipherListViewExtensionsTest { val result = cipher.toOverflowActions( hasMasterPassword = true, isPremiumUser = false, - isArchiveEnabled = true, ) assertEquals( @@ -189,7 +184,6 @@ class CipherListViewExtensionsTest { val result = cipher.toOverflowActions( hasMasterPassword = true, isPremiumUser = false, - isArchiveEnabled = true, ) assertEquals( @@ -231,7 +225,6 @@ class CipherListViewExtensionsTest { val result = cipher.toOverflowActions( hasMasterPassword = false, isPremiumUser = false, - isArchiveEnabled = true, ) assertEquals( @@ -257,7 +250,6 @@ class CipherListViewExtensionsTest { val result = cipher.toOverflowActions( hasMasterPassword = false, isPremiumUser = false, - isArchiveEnabled = true, ) assertEquals( @@ -291,7 +283,6 @@ class CipherListViewExtensionsTest { val result = cipher.toOverflowActions( hasMasterPassword = true, isPremiumUser = false, - isArchiveEnabled = true, ) assertEquals( @@ -318,7 +309,6 @@ class CipherListViewExtensionsTest { val result = cipher.toOverflowActions( hasMasterPassword = true, isPremiumUser = false, - isArchiveEnabled = true, ) assertEquals( @@ -356,7 +346,6 @@ class CipherListViewExtensionsTest { val result = cipher.toOverflowActions( hasMasterPassword = false, isPremiumUser = false, - isArchiveEnabled = true, ) assertEquals( @@ -384,7 +373,6 @@ class CipherListViewExtensionsTest { val result = cipher.toOverflowActions( hasMasterPassword = true, isPremiumUser = false, - isArchiveEnabled = true, ) assertTrue( @@ -411,7 +399,6 @@ class CipherListViewExtensionsTest { val result = cipher.toOverflowActions( hasMasterPassword = true, isPremiumUser = false, - isArchiveEnabled = true, ) assertTrue( @@ -446,38 +433,11 @@ class CipherListViewExtensionsTest { val result = cipher.toOverflowActions( hasMasterPassword = true, isPremiumUser = false, - isArchiveEnabled = true, ) assertTrue(result.contains(ListingItemOverflowAction.VaultAction.UnarchiveClick(id))) } - @Test - fun `toOverflowActions should not return Archive action when Archive is disabled`() { - val loginListView = createMockLoginListView( - number = 1, - username = "", - uris = emptyList(), - totp = null, - ) - val cipher = createMockCipherListView( - number = 1, - id = id, - isArchived = false, - isDeleted = false, - edit = true, - type = CipherListViewType.Login(loginListView), - ) - - val result = cipher.toOverflowActions( - hasMasterPassword = true, - isPremiumUser = false, - isArchiveEnabled = false, - ) - - assertFalse(result.contains(ListingItemOverflowAction.VaultAction.ArchiveClick(id))) - } - @Test fun `toTrailingIcons should return collection icon if collectionId is not empty`() { val cipher = createMockCipherListView( diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultScreenTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultScreenTest.kt index 70057205bb0..d689cad6522 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultScreenTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/VaultScreenTest.kt @@ -2576,7 +2576,6 @@ private val DEFAULT_STATE: VaultState = VaultState( cipherDecryptionFailureIds = persistentListOf(), hasShownDecryptionFailureAlert = false, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, isIntroducingArchiveActionCardDismissed = false, ) @@ -2594,7 +2593,6 @@ private val DEFAULT_CONTENT_VIEW_STATE: VaultState.ViewState.Content = VaultStat itemTypesCount = 4, sshKeyItemsCount = 0, archivedItemsCount = 0, - archiveEnabled = true, archiveSubText = null, archiveEndIcon = null, showCardGroup = true, 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 c912ab933b1..6b0eb902942 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 @@ -221,13 +221,10 @@ class VaultViewModelTest : BaseViewModelTest() { every { isVersionAtLeast(any()) } returns true } private val mutableCxpExportFeatureFlagFlow = MutableStateFlow(false) - private val mutableArchiveItemsFlagFlow = MutableStateFlow(true) private val featureFlagManager: FeatureFlagManager = mockk { every { getFeatureFlagFlow(FlagKey.CredentialExchangeProtocolExport) } returns mutableCxpExportFeatureFlagFlow - every { getFeatureFlagFlow(FlagKey.ArchiveItems) } returns mutableArchiveItemsFlagFlow - every { getFeatureFlag(FlagKey.ArchiveItems) } returns mutableArchiveItemsFlagFlow.value } private val mutablePremiumUpgradeBannerEligibleFlow = MutableStateFlow(false) @@ -394,7 +391,6 @@ class VaultViewModelTest : BaseViewModelTest() { val state = createMockVaultState(viewState = contentViewState).copy( isPremiumUpgradeBannerEligible = false, isPremium = true, - isArchiveEnabled = true, isIntroducingArchiveActionCardDismissed = false, ) @@ -410,7 +406,6 @@ class VaultViewModelTest : BaseViewModelTest() { val state = createMockVaultState(viewState = contentViewState).copy( isPremiumUpgradeBannerEligible = false, isPremium = false, - isArchiveEnabled = true, isIntroducingArchiveActionCardDismissed = false, ) @@ -1202,7 +1197,6 @@ class VaultViewModelTest : BaseViewModelTest() { baseIconUrl = viewModel.stateFlow.value.baseIconUrl, hasMasterPassword = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ), ) .copy( @@ -1228,7 +1222,6 @@ class VaultViewModelTest : BaseViewModelTest() { baseIconUrl = viewModel.stateFlow.value.baseIconUrl, hasMasterPassword = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ), ), viewModel.stateFlow.value, @@ -1364,7 +1357,6 @@ class VaultViewModelTest : BaseViewModelTest() { itemTypesCount = CipherType.entries.size, sshKeyItemsCount = 1, archivedItemsCount = 0, - archiveEnabled = true, archiveSubText = null, archiveEndIcon = null, showCardGroup = true, @@ -1394,7 +1386,6 @@ class VaultViewModelTest : BaseViewModelTest() { itemTypesCount = 5, sshKeyItemsCount = 0, archivedItemsCount = 0, - archiveEnabled = true, archiveSubText = null, archiveEndIcon = null, showCardGroup = true, @@ -1533,7 +1524,6 @@ class VaultViewModelTest : BaseViewModelTest() { itemTypesCount = 5, sshKeyItemsCount = 0, archivedItemsCount = 0, - archiveEnabled = true, archiveSubText = null, archiveEndIcon = null, showCardGroup = true, @@ -1674,7 +1664,6 @@ class VaultViewModelTest : BaseViewModelTest() { itemTypesCount = 5, sshKeyItemsCount = 0, archivedItemsCount = 0, - archiveEnabled = true, archiveSubText = null, archiveEndIcon = null, showCardGroup = true, @@ -1742,7 +1731,6 @@ class VaultViewModelTest : BaseViewModelTest() { itemTypesCount = 5, sshKeyItemsCount = 0, archivedItemsCount = 0, - archiveEnabled = true, archiveSubText = null, archiveEndIcon = null, showCardGroup = true, @@ -1858,7 +1846,6 @@ class VaultViewModelTest : BaseViewModelTest() { itemTypesCount = 5, sshKeyItemsCount = 0, archivedItemsCount = 0, - archiveEnabled = true, archiveSubText = null, archiveEndIcon = null, showCardGroup = true, @@ -1948,7 +1935,6 @@ class VaultViewModelTest : BaseViewModelTest() { itemTypesCount = CipherType.entries.size, sshKeyItemsCount = 1, archivedItemsCount = 0, - archiveEnabled = true, archiveSubText = null, archiveEndIcon = null, showCardGroup = true, @@ -2184,7 +2170,6 @@ class VaultViewModelTest : BaseViewModelTest() { itemTypesCount = 5, sshKeyItemsCount = 0, archivedItemsCount = null, - archiveEnabled = true, archiveSubText = BitwardenString.premium_subscription_required.asText(), archiveEndIcon = BitwardenDrawable.ic_locked, showCardGroup = true, @@ -2291,7 +2276,6 @@ class VaultViewModelTest : BaseViewModelTest() { itemTypesCount = 5, sshKeyItemsCount = 0, archivedItemsCount = 1, - archiveEnabled = true, archiveSubText = null, archiveEndIcon = null, showCardGroup = true, @@ -2364,7 +2348,6 @@ class VaultViewModelTest : BaseViewModelTest() { itemTypesCount = 5, sshKeyItemsCount = 0, archivedItemsCount = 0, - archiveEnabled = true, archiveSubText = null, archiveEndIcon = null, showCardGroup = true, @@ -3664,7 +3647,6 @@ class VaultViewModelTest : BaseViewModelTest() { itemTypesCount = 5, sshKeyItemsCount = 0, archivedItemsCount = 0, - archiveEnabled = true, archiveSubText = null, archiveEndIcon = null, showCardGroup = true, @@ -3726,7 +3708,6 @@ class VaultViewModelTest : BaseViewModelTest() { itemTypesCount = 5, sshKeyItemsCount = 0, archivedItemsCount = 0, - archiveEnabled = true, archiveSubText = null, archiveEndIcon = null, showCardGroup = true, @@ -3978,7 +3959,6 @@ private fun createMockVaultState( cipherDecryptionFailureIds = persistentListOf(), hasShownDecryptionFailureAlert = false, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, isIntroducingArchiveActionCardDismissed = false, isPremiumUpgradeBannerEligible = false, ) @@ -3997,7 +3977,6 @@ private val DEFAULT_CONTENT_VIEW_STATE = VaultState.ViewState.Content( collectionItems = emptyList(), trashItemsCount = 0, archivedItemsCount = null, - archiveEnabled = false, archiveSubText = null, archiveEndIcon = null, showCardGroup = true, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultDataExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultDataExtensionsTest.kt index 7e37270d012..c2b62baa686 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultDataExtensionsTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultDataExtensionsTest.kt @@ -87,7 +87,6 @@ class VaultDataExtensionsTest { vaultFilterType = VaultFilterType.AllVaults, hasMasterPassword = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ) assertEquals( @@ -144,7 +143,6 @@ class VaultDataExtensionsTest { itemTypesCount = 5, sshKeyItemsCount = 0, archivedItemsCount = 1, - archiveEnabled = true, archiveSubText = null, archiveEndIcon = null, showCardGroup = true, @@ -176,7 +174,6 @@ class VaultDataExtensionsTest { vaultFilterType = VaultFilterType.MyVault, hasMasterPassword = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ) assertEquals( @@ -200,7 +197,6 @@ class VaultDataExtensionsTest { itemTypesCount = 5, sshKeyItemsCount = 0, archivedItemsCount = 0, - archiveEnabled = true, archiveSubText = null, archiveEndIcon = null, showCardGroup = true, @@ -241,7 +237,6 @@ class VaultDataExtensionsTest { ), hasMasterPassword = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ) assertEquals( @@ -276,7 +271,6 @@ class VaultDataExtensionsTest { itemTypesCount = 5, sshKeyItemsCount = 0, archivedItemsCount = 0, - archiveEnabled = true, archiveSubText = null, archiveEndIcon = null, showCardGroup = true, @@ -304,7 +298,6 @@ class VaultDataExtensionsTest { vaultFilterType = VaultFilterType.AllVaults, hasMasterPassword = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ) assertEquals( @@ -332,7 +325,6 @@ class VaultDataExtensionsTest { vaultFilterType = VaultFilterType.AllVaults, hasMasterPassword = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ) assertEquals( @@ -361,7 +353,6 @@ class VaultDataExtensionsTest { vaultFilterType = VaultFilterType.AllVaults, hasMasterPassword = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ) assertEquals( @@ -379,7 +370,6 @@ class VaultDataExtensionsTest { itemTypesCount = 5, sshKeyItemsCount = 0, archivedItemsCount = 0, - archiveEnabled = true, archiveSubText = null, archiveEndIcon = null, showCardGroup = true, @@ -408,7 +398,6 @@ class VaultDataExtensionsTest { baseIconUrl = Environment.Us.environmentUrlData.baseIconUrl, hasMasterPassword = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ) assertEquals( @@ -426,7 +415,6 @@ class VaultDataExtensionsTest { itemTypesCount = 5, sshKeyItemsCount = 0, archivedItemsCount = null, - archiveEnabled = true, archiveSubText = BitwardenString.premium_subscription_required.asText(), archiveEndIcon = BitwardenDrawable.ic_locked, showCardGroup = true, @@ -457,7 +445,6 @@ class VaultDataExtensionsTest { baseIconUrl = Environment.Us.environmentUrlData.baseIconUrl, hasMasterPassword = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ) assertEquals( @@ -475,7 +462,6 @@ class VaultDataExtensionsTest { itemTypesCount = 5, sshKeyItemsCount = 0, archivedItemsCount = null, - archiveEnabled = true, archiveSubText = BitwardenString.premium_subscription_required.asText(), archiveEndIcon = BitwardenDrawable.ic_locked, showCardGroup = true, @@ -506,7 +492,6 @@ class VaultDataExtensionsTest { baseIconUrl = Environment.Us.environmentUrlData.baseIconUrl, hasMasterPassword = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ) assertEquals( @@ -524,7 +509,6 @@ class VaultDataExtensionsTest { itemTypesCount = 5, sshKeyItemsCount = 0, archivedItemsCount = null, - archiveEnabled = true, archiveSubText = BitwardenString.premium_subscription_required.asText(), archiveEndIcon = BitwardenDrawable.ic_locked, showCardGroup = true, @@ -739,7 +723,6 @@ class VaultDataExtensionsTest { vaultFilterType = VaultFilterType.AllVaults, hasMasterPassword = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ) assertEquals( @@ -757,7 +740,6 @@ class VaultDataExtensionsTest { itemTypesCount = 5, sshKeyItemsCount = 0, archivedItemsCount = 0, - archiveEnabled = true, archiveSubText = null, archiveEndIcon = null, showCardGroup = true, @@ -788,7 +770,6 @@ class VaultDataExtensionsTest { vaultFilterType = VaultFilterType.AllVaults, hasMasterPassword = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ) assertEquals( @@ -806,7 +787,6 @@ class VaultDataExtensionsTest { itemTypesCount = 5, sshKeyItemsCount = 0, archivedItemsCount = 0, - archiveEnabled = true, archiveSubText = null, archiveEndIcon = null, showCardGroup = true, @@ -840,7 +820,6 @@ class VaultDataExtensionsTest { vaultFilterType = VaultFilterType.AllVaults, hasMasterPassword = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ) assertEquals( @@ -864,7 +843,6 @@ class VaultDataExtensionsTest { itemTypesCount = 5, sshKeyItemsCount = 0, archivedItemsCount = 0, - archiveEnabled = true, archiveSubText = null, archiveEndIcon = null, showCardGroup = true, @@ -899,7 +877,6 @@ class VaultDataExtensionsTest { vaultFilterType = VaultFilterType.AllVaults, hasMasterPassword = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ) assertEquals( @@ -924,7 +901,6 @@ class VaultDataExtensionsTest { overflowOptions = mockCipher.toOverflowActions( hasMasterPassword = true, isPremiumUser = true, - isArchiveEnabled = true, ), shouldShowMasterPasswordReprompt = false, username = "mockUsername-1".asText(), @@ -936,7 +912,6 @@ class VaultDataExtensionsTest { itemTypesCount = 5, sshKeyItemsCount = 0, archivedItemsCount = 0, - archiveEnabled = true, archiveSubText = null, archiveEndIcon = null, showCardGroup = true, @@ -977,7 +952,6 @@ class VaultDataExtensionsTest { vaultFilterType = VaultFilterType.AllVaults, hasMasterPassword = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ) assertEquals( @@ -1027,7 +1001,6 @@ class VaultDataExtensionsTest { itemTypesCount = 5, sshKeyItemsCount = 0, archivedItemsCount = 0, - archiveEnabled = true, archiveSubText = null, archiveEndIcon = null, showCardGroup = true, @@ -1076,7 +1049,6 @@ class VaultDataExtensionsTest { vaultFilterType = VaultFilterType.AllVaults, hasMasterPassword = true, restrictItemTypesPolicyOrgIds = listOf("restrict_item_type_policy_id"), - isArchiveEnabled = true, ) assertEquals( @@ -1094,7 +1066,6 @@ class VaultDataExtensionsTest { totpItemsCount = 0, itemTypesCount = CipherType.entries.size, archivedItemsCount = 0, - archiveEnabled = true, archiveSubText = null, archiveEndIcon = null, showCardGroup = true, @@ -1139,7 +1110,6 @@ class VaultDataExtensionsTest { vaultFilterType = VaultFilterType.AllVaults, hasMasterPassword = true, restrictItemTypesPolicyOrgIds = listOf("restrict_item_type_policy_id"), - isArchiveEnabled = true, ) assertEquals( @@ -1157,7 +1127,6 @@ class VaultDataExtensionsTest { totpItemsCount = 1, itemTypesCount = CipherType.entries.size, archivedItemsCount = 0, - archiveEnabled = true, archiveSubText = null, archiveEndIcon = null, showCardGroup = false, @@ -1188,7 +1157,6 @@ class VaultDataExtensionsTest { vaultFilterType = VaultFilterType.AllVaults, hasMasterPassword = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ) assertEquals( @@ -1207,9 +1175,7 @@ class VaultDataExtensionsTest { totpItemsCount = 1, // Verify item types count includes all CipherTypes when showSshKeys is true. itemTypesCount = CipherType.entries.size, - archivedItemsCount = 0, - archiveEnabled = true, archiveSubText = null, archiveEndIcon = null, showCardGroup = true, @@ -1254,7 +1220,6 @@ class VaultDataExtensionsTest { vaultFilterType = VaultFilterType.AllVaults, hasMasterPassword = true, restrictItemTypesPolicyOrgIds = emptyList(), - isArchiveEnabled = true, ) assertEquals( @@ -1277,7 +1242,6 @@ class VaultDataExtensionsTest { totpItemsCount = 0, itemTypesCount = CipherType.entries.size, archivedItemsCount = 0, - archiveEnabled = true, archiveSubText = null, archiveEndIcon = null, showCardGroup = true, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultStateExtensionsTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultStateExtensionsTest.kt index 6f0a15b3ad2..69c901eaa50 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultStateExtensionsTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/vault/feature/vault/util/VaultStateExtensionsTest.kt @@ -86,7 +86,6 @@ class VaultStateExtensionsTest { itemTypesCount = 4, sshKeyItemsCount = 0, archivedItemsCount = 0, - archiveEnabled = true, archiveSubText = null, archiveEndIcon = null, showCardGroup = true, diff --git a/core/src/main/kotlin/com/bitwarden/core/data/manager/model/FlagKey.kt b/core/src/main/kotlin/com/bitwarden/core/data/manager/model/FlagKey.kt index 0027f238df3..c41e5e0a0eb 100644 --- a/core/src/main/kotlin/com/bitwarden/core/data/manager/model/FlagKey.kt +++ b/core/src/main/kotlin/com/bitwarden/core/data/manager/model/FlagKey.kt @@ -35,7 +35,6 @@ sealed class FlagKey { ForceUpdateKdfSettings, NoLogoutOnKdfChange, MigrateMyVaultToMyItems, - ArchiveItems, SendEmailVerification, MobilePremiumUpgrade, AttachmentUpdates, @@ -93,14 +92,6 @@ sealed class FlagKey { override val defaultValue: Boolean = false } - /** - * Data object holding the feature flag key for the Archive Items feature. - */ - data object ArchiveItems : FlagKey() { - override val keyName: String = "pm-19148-innovation-archive" - override val defaultValue: Boolean = false - } - /** * Data object holding the feature flag key for the Send Email Verification feature. */ diff --git a/core/src/test/kotlin/com/bitwarden/core/data/manager/model/FlagKeyTest.kt b/core/src/test/kotlin/com/bitwarden/core/data/manager/model/FlagKeyTest.kt index 4cacb8a1518..01921a42b74 100644 --- a/core/src/test/kotlin/com/bitwarden/core/data/manager/model/FlagKeyTest.kt +++ b/core/src/test/kotlin/com/bitwarden/core/data/manager/model/FlagKeyTest.kt @@ -28,10 +28,6 @@ class FlagKeyTest { FlagKey.MigrateMyVaultToMyItems.keyName, "pm-20558-migrate-myvault-to-myitems", ) - assertEquals( - FlagKey.ArchiveItems.keyName, - "pm-19148-innovation-archive", - ) assertEquals( FlagKey.SendEmailVerification.keyName, "pm-19051-send-email-verification", @@ -55,7 +51,6 @@ class FlagKeyTest { FlagKey.BitwardenAuthenticationEnabled, FlagKey.ForceUpdateKdfSettings, FlagKey.MigrateMyVaultToMyItems, - FlagKey.ArchiveItems, FlagKey.SendEmailVerification, FlagKey.MobilePremiumUpgrade, FlagKey.AttachmentUpdates, diff --git a/ui/src/main/kotlin/com/bitwarden/ui/platform/components/debug/FeatureFlagListItems.kt b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/debug/FeatureFlagListItems.kt index 2e26e29c19d..b31ee4ce681 100644 --- a/ui/src/main/kotlin/com/bitwarden/ui/platform/components/debug/FeatureFlagListItems.kt +++ b/ui/src/main/kotlin/com/bitwarden/ui/platform/components/debug/FeatureFlagListItems.kt @@ -29,7 +29,6 @@ fun FlagKey.ListItemContent( FlagKey.ForceUpdateKdfSettings, FlagKey.NoLogoutOnKdfChange, FlagKey.MigrateMyVaultToMyItems, - FlagKey.ArchiveItems, FlagKey.SendEmailVerification, FlagKey.MobilePremiumUpgrade, FlagKey.AttachmentUpdates, @@ -83,7 +82,6 @@ private fun FlagKey.getDisplayLabel(): String = when (this) { } FlagKey.MigrateMyVaultToMyItems -> stringResource(BitwardenString.migrate_my_vault_to_my_items) - FlagKey.ArchiveItems -> stringResource(BitwardenString.archive_items) FlagKey.SendEmailVerification -> stringResource(BitwardenString.send_email_verification) FlagKey.MobilePremiumUpgrade -> stringResource(BitwardenString.mobile_premium_upgrade) FlagKey.AttachmentUpdates -> stringResource(BitwardenString.attachment_updates) diff --git a/ui/src/main/res/values/strings_non_localized.xml b/ui/src/main/res/values/strings_non_localized.xml index a95fc6f3e11..d12e20df816 100644 --- a/ui/src/main/res/values/strings_non_localized.xml +++ b/ui/src/main/res/values/strings_non_localized.xml @@ -41,7 +41,6 @@ Force update KDF settings Avoid logout on KDF change Migrate My Vault to My Items - Archive Items Send Email Verification Trigger cookie acquisition Clear SSO cookies