diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/MainViewModel.kt b/app/src/main/kotlin/com/x8bit/bitwarden/MainViewModel.kt index 74ed3223a4..f1cf7ee832 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/MainViewModel.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/MainViewModel.kt @@ -23,12 +23,10 @@ import com.x8bit.bitwarden.data.credentials.util.getCreateCredentialRequestOrNul import com.x8bit.bitwarden.data.credentials.util.getFido2AssertionRequestOrNull import com.x8bit.bitwarden.data.credentials.util.getGetCredentialsRequestOrNull import com.x8bit.bitwarden.data.platform.manager.AppResumeManager -import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager import com.x8bit.bitwarden.data.platform.manager.SpecialCircumstanceManager import com.x8bit.bitwarden.data.platform.manager.garbage.GarbageCollectionManager import com.x8bit.bitwarden.data.platform.manager.model.AppResumeScreenData import com.x8bit.bitwarden.data.platform.manager.model.CompleteRegistrationData -import com.x8bit.bitwarden.data.platform.manager.model.FlagKey import com.x8bit.bitwarden.data.platform.manager.model.SpecialCircumstance import com.x8bit.bitwarden.data.platform.repository.EnvironmentRepository import com.x8bit.bitwarden.data.platform.repository.SettingsRepository @@ -68,7 +66,6 @@ private const val ANIMATION_REFRESH_DELAY = 500L class MainViewModel @Inject constructor( accessibilitySelectionManager: AccessibilitySelectionManager, autofillSelectionManager: AutofillSelectionManager, - featureFlagManager: FeatureFlagManager, private val addTotpItemFromAuthenticatorManager: AddTotpItemFromAuthenticatorManager, private val specialCircumstanceManager: SpecialCircumstanceManager, private val garbageCollectionManager: GarbageCollectionManager, @@ -85,9 +82,6 @@ class MainViewModel @Inject constructor( initialState = MainState( theme = settingsRepository.appTheme, isScreenCaptureAllowed = settingsRepository.isScreenCaptureAllowed, - isErrorReportingDialogEnabled = featureFlagManager.getFeatureFlag( - key = FlagKey.MobileErrorReporting, - ), isDynamicColorsEnabled = settingsRepository.isDynamicColorsEnabled, ), ) { @@ -106,12 +100,6 @@ class MainViewModel @Inject constructor( .onEach { specialCircumstance = it } .launchIn(viewModelScope) - featureFlagManager - .getFeatureFlagFlow(key = FlagKey.MobileErrorReporting) - .map { MainAction.Internal.OnMobileErrorReportingReceive(it) } - .onEach(::sendAction) - .launchIn(viewModelScope) - accessibilitySelectionManager .accessibilitySelectionFlow .map { MainAction.Internal.AccessibilitySelectionReceive(it) } @@ -217,17 +205,6 @@ class MainViewModel @Inject constructor( is MainAction.Internal.ThemeUpdate -> handleAppThemeUpdated(action) is MainAction.Internal.VaultUnlockStateChange -> handleVaultUnlockStateChange() is MainAction.Internal.DynamicColorsUpdate -> handleDynamicColorsUpdate(action) - is MainAction.Internal.OnMobileErrorReportingReceive -> { - handleOnMobileErrorReportingReceive(action) - } - } - } - - private fun handleOnMobileErrorReportingReceive( - action: MainAction.Internal.OnMobileErrorReportingReceive, - ) { - mutableStateFlow.update { - it.copy(isErrorReportingDialogEnabled = action.isErrorReportingEnabled) } } @@ -495,15 +472,12 @@ data class MainState( val theme: AppTheme, val isScreenCaptureAllowed: Boolean, val isDynamicColorsEnabled: Boolean, - private val isErrorReportingDialogEnabled: Boolean, ) : Parcelable { /** * Contains all feature flags that are available to the UI. */ val featureFlagsState: FeatureFlagsState - get() = FeatureFlagsState( - isErrorReportingDialogEnabled = isErrorReportingDialogEnabled, - ) + get() = FeatureFlagsState } /** @@ -548,13 +522,6 @@ sealed class MainAction { val cipherView: CipherView, ) : Internal() - /** - * Indicates the Mobile Error Reporting feature flag has been updated. - */ - data class OnMobileErrorReportingReceive( - val isErrorReportingEnabled: Boolean, - ) : Internal() - /** * Indicates the user has manually selected the given [cipherView] for autofill. */ diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/model/FlagKey.kt b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/model/FlagKey.kt index 4b2fcb04fc..8c46696792 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/model/FlagKey.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/data/platform/manager/model/FlagKey.kt @@ -31,7 +31,6 @@ sealed class FlagKey { AnonAddySelfHostAlias, SimpleLoginSelfHostAlias, ChromeAutofill, - MobileErrorReporting, RestrictCipherItemDeletion, UserManagedPrivilegedApps, RemoveCardPolicy, @@ -47,14 +46,6 @@ sealed class FlagKey { override val defaultValue: Boolean = false } - /** - * Data object holding the key for syncing with the Bitwarden Authenticator app. - */ - data object MobileErrorReporting : FlagKey() { - override val keyName: String = "mobile-error-reporting" - override val defaultValue: Boolean = false - } - /** * Data object holding the feature flag key for the import logins feature. */ diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/dialog/BitwardenBasicDialog.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/dialog/BitwardenBasicDialog.kt index b3df4e1517..59869b9c75 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/dialog/BitwardenBasicDialog.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/components/dialog/BitwardenBasicDialog.kt @@ -16,10 +16,8 @@ import com.x8bit.bitwarden.R import com.x8bit.bitwarden.data.platform.util.ciBuildInfo import com.x8bit.bitwarden.data.platform.util.deviceData import com.x8bit.bitwarden.data.platform.util.versionData -import com.x8bit.bitwarden.ui.platform.composition.LocalFeatureFlagsState import com.x8bit.bitwarden.ui.platform.composition.LocalIntentManager import com.x8bit.bitwarden.ui.platform.manager.intent.IntentManager -import com.x8bit.bitwarden.ui.platform.model.FeatureFlagsState /** * Represents a Bitwarden-styled dialog. @@ -38,7 +36,6 @@ fun BitwardenBasicDialog( onDismissRequest: () -> Unit, throwable: Throwable? = null, intentManager: IntentManager = LocalIntentManager.current, - featureFlagsState: FeatureFlagsState = LocalFeatureFlagsState.current, ) { AlertDialog( onDismissRequest = onDismissRequest, @@ -50,7 +47,6 @@ fun BitwardenBasicDialog( ) }, dismissButton = throwable - ?.takeIf { featureFlagsState.isErrorReportingDialogEnabled } ?.let { error -> { BitwardenTextButton( diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/debugmenu/components/FeatureFlagListItems.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/debugmenu/components/FeatureFlagListItems.kt index 27a127471d..73778a7cf9 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/debugmenu/components/FeatureFlagListItems.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/feature/debugmenu/components/FeatureFlagListItems.kt @@ -36,7 +36,6 @@ fun FlagKey.ListItemContent( FlagKey.AnonAddySelfHostAlias, FlagKey.SimpleLoginSelfHostAlias, FlagKey.ChromeAutofill, - FlagKey.MobileErrorReporting, FlagKey.RestrictCipherItemDeletion, FlagKey.UserManagedPrivilegedApps, FlagKey.RemoveCardPolicy, @@ -95,7 +94,6 @@ private fun FlagKey.getDisplayLabel(): String = when (this) { FlagKey.AnonAddySelfHostAlias -> stringResource(R.string.anon_addy_self_hosted_aliases) FlagKey.SimpleLoginSelfHostAlias -> stringResource(R.string.simple_login_self_hosted_aliases) FlagKey.ChromeAutofill -> stringResource(R.string.enable_chrome_autofill) - FlagKey.MobileErrorReporting -> stringResource(R.string.enable_error_reporting_dialog) FlagKey.RestrictCipherItemDeletion -> stringResource(R.string.restrict_item_deletion) FlagKey.UserManagedPrivilegedApps -> { stringResource(R.string.user_trusted_privileged_app_management) diff --git a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/model/FeatureFlagsState.kt b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/model/FeatureFlagsState.kt index 45dbe6209b..778963f6d1 100644 --- a/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/model/FeatureFlagsState.kt +++ b/app/src/main/kotlin/com/x8bit/bitwarden/ui/platform/model/FeatureFlagsState.kt @@ -9,6 +9,4 @@ import kotlinx.parcelize.Parcelize */ @Immutable @Parcelize -data class FeatureFlagsState( - val isErrorReportingDialogEnabled: Boolean, -) : Parcelable +data object FeatureFlagsState : Parcelable diff --git a/app/src/main/res/values/strings_non_localized.xml b/app/src/main/res/values/strings_non_localized.xml index 3e3cb49ad7..2c32655cdb 100644 --- a/app/src/main/res/values/strings_non_localized.xml +++ b/app/src/main/res/values/strings_non_localized.xml @@ -23,7 +23,6 @@ AnonAddy self-hosted aliases SimpleLogin self-hosted aliases Enable chrome autofill - Enable error reporting dialog Restrict item deletion Generate crash Generate error report diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/MainViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/MainViewModelTest.kt index 3da2bcb990..f2b7b38ccb 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/MainViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/MainViewModelTest.kt @@ -42,14 +42,12 @@ import com.x8bit.bitwarden.data.credentials.util.getCreateCredentialRequestOrNul import com.x8bit.bitwarden.data.credentials.util.getFido2AssertionRequestOrNull import com.x8bit.bitwarden.data.credentials.util.getGetCredentialsRequestOrNull import com.x8bit.bitwarden.data.platform.manager.AppResumeManager -import com.x8bit.bitwarden.data.platform.manager.FeatureFlagManager import com.x8bit.bitwarden.data.platform.manager.SpecialCircumstanceManager import com.x8bit.bitwarden.data.platform.manager.SpecialCircumstanceManagerImpl import com.x8bit.bitwarden.data.platform.manager.garbage.GarbageCollectionManager import com.x8bit.bitwarden.data.platform.manager.model.AppResumeScreenData import com.x8bit.bitwarden.data.platform.manager.model.CompleteRegistrationData import com.x8bit.bitwarden.data.platform.manager.model.FirstTimeState -import com.x8bit.bitwarden.data.platform.manager.model.FlagKey import com.x8bit.bitwarden.data.platform.manager.model.PasswordlessRequestData import com.x8bit.bitwarden.data.platform.manager.model.SpecialCircumstance import com.x8bit.bitwarden.data.platform.repository.EnvironmentRepository @@ -144,13 +142,6 @@ class MainViewModelTest : BaseViewModelTest() { every { clearResumeScreen() } just runs } - private val mutableMobileErrorReportingFeatureFlow = MutableStateFlow(false) - private val featureFlagManager: FeatureFlagManager = mockk { - every { getFeatureFlag(key = FlagKey.MobileErrorReporting) } returns false - every { - getFeatureFlagFlow(key = FlagKey.MobileErrorReporting) - } returns mutableMobileErrorReportingFeatureFlow - } private val mockBiometricsPromptResult = mockk(relaxed = true) { every { isSuccessful } returns true } @@ -1136,14 +1127,12 @@ class MainViewModelTest : BaseViewModelTest() { set(SPECIAL_CIRCUMSTANCE_KEY, initialSpecialCircumstance) }, appResumeManager = appResumeManager, - featureFlagManager = featureFlagManager, ) } private val DEFAULT_STATE: MainState = MainState( theme = AppTheme.DEFAULT, isScreenCaptureAllowed = true, - isErrorReportingDialogEnabled = false, isDynamicColorsEnabled = false, ) diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/FlagKeyTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/FlagKeyTest.kt index 71b911b7b9..c11bb48b5b 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/FlagKeyTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/data/platform/manager/FlagKeyTest.kt @@ -49,10 +49,6 @@ class FlagKeyTest { FlagKey.ChromeAutofill.keyName, "android-chrome-autofill", ) - assertEquals( - FlagKey.MobileErrorReporting.keyName, - "mobile-error-reporting", - ) assertEquals( FlagKey.RestrictCipherItemDeletion.keyName, "pm-15493-restrict-item-deletion-to-can-manage-permission", @@ -81,7 +77,6 @@ class FlagKeyTest { FlagKey.SimpleLoginSelfHostAlias, FlagKey.CipherKeyEncryption, FlagKey.ChromeAutofill, - FlagKey.MobileErrorReporting, FlagKey.RestrictCipherItemDeletion, FlagKey.UserManagedPrivilegedApps, FlagKey.RemoveCardPolicy, diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/base/BitwardenComposeTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/base/BitwardenComposeTest.kt index e3537e7751..ce51b4f164 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/base/BitwardenComposeTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/base/BitwardenComposeTest.kt @@ -29,9 +29,7 @@ abstract class BitwardenComposeTest : BaseComposeTest() { @Suppress("LongParameterList") protected fun setContent( theme: AppTheme = AppTheme.DEFAULT, - featureFlagsState: FeatureFlagsState = FeatureFlagsState( - isErrorReportingDialogEnabled = false, - ), + featureFlagsState: FeatureFlagsState = FeatureFlagsState, appResumeStateManager: AppResumeStateManager = mockk(), appReviewManager: AppReviewManager = mockk(), biometricsManager: BiometricsManager = mockk(), diff --git a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/debugmenu/DebugMenuViewModelTest.kt b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/debugmenu/DebugMenuViewModelTest.kt index 10ac7d35da..f1eb2cf9cd 100644 --- a/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/debugmenu/DebugMenuViewModelTest.kt +++ b/app/src/test/kotlin/com/x8bit/bitwarden/ui/platform/feature/debugmenu/DebugMenuViewModelTest.kt @@ -154,7 +154,6 @@ private val DEFAULT_MAP_VALUE: ImmutableMap, Any> = persistentMapOf FlagKey.AnonAddySelfHostAlias to true, FlagKey.SimpleLoginSelfHostAlias to true, FlagKey.ChromeAutofill to true, - FlagKey.MobileErrorReporting to true, FlagKey.RestrictCipherItemDeletion to true, FlagKey.UserManagedPrivilegedApps to true, FlagKey.RemoveCardPolicy to true, @@ -171,7 +170,6 @@ private val UPDATED_MAP_VALUE: ImmutableMap, Any> = persistentMapOf FlagKey.AnonAddySelfHostAlias to false, FlagKey.SimpleLoginSelfHostAlias to false, FlagKey.ChromeAutofill to false, - FlagKey.MobileErrorReporting to false, FlagKey.RestrictCipherItemDeletion to false, FlagKey.UserManagedPrivilegedApps to false, FlagKey.RemoveCardPolicy to false,