mirror of
https://github.com/bitwarden/android.git
synced 2026-03-19 05:02:48 -05:00
PM-24088: Remove the MobileErrorReporting feature flag (#5565)
This commit is contained in:
@@ -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.
|
||||
*/
|
||||
|
||||
@@ -31,7 +31,6 @@ sealed class FlagKey<out T : Any> {
|
||||
AnonAddySelfHostAlias,
|
||||
SimpleLoginSelfHostAlias,
|
||||
ChromeAutofill,
|
||||
MobileErrorReporting,
|
||||
RestrictCipherItemDeletion,
|
||||
UserManagedPrivilegedApps,
|
||||
RemoveCardPolicy,
|
||||
@@ -47,14 +46,6 @@ sealed class FlagKey<out T : Any> {
|
||||
override val defaultValue: Boolean = false
|
||||
}
|
||||
|
||||
/**
|
||||
* Data object holding the key for syncing with the Bitwarden Authenticator app.
|
||||
*/
|
||||
data object MobileErrorReporting : FlagKey<Boolean>() {
|
||||
override val keyName: String = "mobile-error-reporting"
|
||||
override val defaultValue: Boolean = false
|
||||
}
|
||||
|
||||
/**
|
||||
* Data object holding the feature flag key for the import logins feature.
|
||||
*/
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -36,7 +36,6 @@ fun <T : Any> FlagKey<T>.ListItemContent(
|
||||
FlagKey.AnonAddySelfHostAlias,
|
||||
FlagKey.SimpleLoginSelfHostAlias,
|
||||
FlagKey.ChromeAutofill,
|
||||
FlagKey.MobileErrorReporting,
|
||||
FlagKey.RestrictCipherItemDeletion,
|
||||
FlagKey.UserManagedPrivilegedApps,
|
||||
FlagKey.RemoveCardPolicy,
|
||||
@@ -95,7 +94,6 @@ private fun <T : Any> FlagKey<T>.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)
|
||||
|
||||
@@ -9,6 +9,4 @@ import kotlinx.parcelize.Parcelize
|
||||
*/
|
||||
@Immutable
|
||||
@Parcelize
|
||||
data class FeatureFlagsState(
|
||||
val isErrorReportingDialogEnabled: Boolean,
|
||||
) : Parcelable
|
||||
data object FeatureFlagsState : Parcelable
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
<string name="anon_addy_self_hosted_aliases">AnonAddy self-hosted aliases</string>
|
||||
<string name="simple_login_self_hosted_aliases">SimpleLogin self-hosted aliases</string>
|
||||
<string name="enable_chrome_autofill">Enable chrome autofill</string>
|
||||
<string name="enable_error_reporting_dialog">Enable error reporting dialog</string>
|
||||
<string name="restrict_item_deletion">Restrict item deletion</string>
|
||||
<string name="generate_crash">Generate crash</string>
|
||||
<string name="generate_error_report">Generate error report</string>
|
||||
|
||||
@@ -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<BiometricPromptResult>(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,
|
||||
)
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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(),
|
||||
|
||||
@@ -154,7 +154,6 @@ private val DEFAULT_MAP_VALUE: ImmutableMap<FlagKey<Any>, 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<FlagKey<Any>, 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,
|
||||
|
||||
Reference in New Issue
Block a user