Remove feature flag SecureStorage
This commit is contained in:
parent
6c5567d075
commit
fb368f058b
11 changed files with 12 additions and 65 deletions
|
|
@ -30,22 +30,17 @@ import io.element.android.libraries.architecture.AsyncData
|
||||||
import io.element.android.libraries.architecture.Presenter
|
import io.element.android.libraries.architecture.Presenter
|
||||||
import io.element.android.libraries.architecture.runCatchingUpdatingState
|
import io.element.android.libraries.architecture.runCatchingUpdatingState
|
||||||
import io.element.android.libraries.core.bool.orTrue
|
import io.element.android.libraries.core.bool.orTrue
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlagService
|
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlags
|
|
||||||
import io.element.android.libraries.matrix.api.MatrixClient
|
import io.element.android.libraries.matrix.api.MatrixClient
|
||||||
import io.element.android.libraries.matrix.api.encryption.BackupState
|
import io.element.android.libraries.matrix.api.encryption.BackupState
|
||||||
import io.element.android.libraries.matrix.api.encryption.BackupUploadState
|
import io.element.android.libraries.matrix.api.encryption.BackupUploadState
|
||||||
import io.element.android.libraries.matrix.api.encryption.EncryptionService
|
import io.element.android.libraries.matrix.api.encryption.EncryptionService
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.flow.emptyFlow
|
|
||||||
import kotlinx.coroutines.flow.flowOf
|
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class LogoutPresenter @Inject constructor(
|
class LogoutPresenter @Inject constructor(
|
||||||
private val matrixClient: MatrixClient,
|
private val matrixClient: MatrixClient,
|
||||||
private val encryptionService: EncryptionService,
|
private val encryptionService: EncryptionService,
|
||||||
private val featureFlagService: FeatureFlagService,
|
|
||||||
) : Presenter<LogoutState> {
|
) : Presenter<LogoutState> {
|
||||||
@Composable
|
@Composable
|
||||||
override fun present(): LogoutState {
|
override fun present(): LogoutState {
|
||||||
|
|
@ -54,15 +49,8 @@ class LogoutPresenter @Inject constructor(
|
||||||
mutableStateOf(AsyncAction.Uninitialized)
|
mutableStateOf(AsyncAction.Uninitialized)
|
||||||
}
|
}
|
||||||
|
|
||||||
val secureStorageFlag by featureFlagService.isFeatureEnabledFlow(FeatureFlags.SecureStorage)
|
val backupUploadState: BackupUploadState by remember {
|
||||||
.collectAsState(initial = null)
|
encryptionService.waitForBackupUploadSteadyState()
|
||||||
|
|
||||||
val backupUploadState: BackupUploadState by remember(secureStorageFlag) {
|
|
||||||
when (secureStorageFlag) {
|
|
||||||
true -> encryptionService.waitForBackupUploadSteadyState()
|
|
||||||
false -> flowOf(BackupUploadState.Done)
|
|
||||||
else -> emptyFlow()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
.collectAsState(initial = BackupUploadState.Unknown)
|
.collectAsState(initial = BackupUploadState.Unknown)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -33,14 +33,10 @@ import io.element.android.features.logout.impl.tools.isBackingUp
|
||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.architecture.runCatchingUpdatingState
|
import io.element.android.libraries.architecture.runCatchingUpdatingState
|
||||||
import io.element.android.libraries.di.SessionScope
|
import io.element.android.libraries.di.SessionScope
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlagService
|
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlags
|
|
||||||
import io.element.android.libraries.matrix.api.MatrixClient
|
import io.element.android.libraries.matrix.api.MatrixClient
|
||||||
import io.element.android.libraries.matrix.api.encryption.BackupUploadState
|
import io.element.android.libraries.matrix.api.encryption.BackupUploadState
|
||||||
import io.element.android.libraries.matrix.api.encryption.EncryptionService
|
import io.element.android.libraries.matrix.api.encryption.EncryptionService
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.flow.emptyFlow
|
|
||||||
import kotlinx.coroutines.flow.flowOf
|
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
|
@ -48,7 +44,6 @@ import javax.inject.Inject
|
||||||
class DefaultDirectLogoutPresenter @Inject constructor(
|
class DefaultDirectLogoutPresenter @Inject constructor(
|
||||||
private val matrixClient: MatrixClient,
|
private val matrixClient: MatrixClient,
|
||||||
private val encryptionService: EncryptionService,
|
private val encryptionService: EncryptionService,
|
||||||
private val featureFlagService: FeatureFlagService,
|
|
||||||
) : DirectLogoutPresenter {
|
) : DirectLogoutPresenter {
|
||||||
@Composable
|
@Composable
|
||||||
override fun present(): DirectLogoutState {
|
override fun present(): DirectLogoutState {
|
||||||
|
|
@ -58,15 +53,8 @@ class DefaultDirectLogoutPresenter @Inject constructor(
|
||||||
mutableStateOf(AsyncAction.Uninitialized)
|
mutableStateOf(AsyncAction.Uninitialized)
|
||||||
}
|
}
|
||||||
|
|
||||||
val secureStorageFlag by featureFlagService.isFeatureEnabledFlow(FeatureFlags.SecureStorage)
|
val backupUploadState: BackupUploadState by remember {
|
||||||
.collectAsState(initial = null)
|
encryptionService.waitForBackupUploadSteadyState()
|
||||||
|
|
||||||
val backupUploadState: BackupUploadState by remember(secureStorageFlag) {
|
|
||||||
when (secureStorageFlag) {
|
|
||||||
true -> encryptionService.waitForBackupUploadSteadyState()
|
|
||||||
false -> flowOf(BackupUploadState.Done)
|
|
||||||
else -> emptyFlow()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
.collectAsState(initial = BackupUploadState.Unknown)
|
.collectAsState(initial = BackupUploadState.Unknown)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -22,8 +22,6 @@ import app.cash.turbine.ReceiveTurbine
|
||||||
import app.cash.turbine.test
|
import app.cash.turbine.test
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlags
|
|
||||||
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
|
|
||||||
import io.element.android.libraries.matrix.api.MatrixClient
|
import io.element.android.libraries.matrix.api.MatrixClient
|
||||||
import io.element.android.libraries.matrix.api.encryption.BackupState
|
import io.element.android.libraries.matrix.api.encryption.BackupState
|
||||||
import io.element.android.libraries.matrix.api.encryption.BackupUploadState
|
import io.element.android.libraries.matrix.api.encryption.BackupUploadState
|
||||||
|
|
@ -99,7 +97,6 @@ class LogoutPresenterTest {
|
||||||
assertThat(initialState.isLastDevice).isFalse()
|
assertThat(initialState.isLastDevice).isFalse()
|
||||||
assertThat(initialState.backupUploadState).isEqualTo(BackupUploadState.Unknown)
|
assertThat(initialState.backupUploadState).isEqualTo(BackupUploadState.Unknown)
|
||||||
assertThat(initialState.logoutAction).isEqualTo(AsyncAction.Uninitialized)
|
assertThat(initialState.logoutAction).isEqualTo(AsyncAction.Uninitialized)
|
||||||
skipItems(1)
|
|
||||||
val waitingState = awaitItem()
|
val waitingState = awaitItem()
|
||||||
assertThat(waitingState.backupUploadState).isEqualTo(BackupUploadState.Waiting)
|
assertThat(waitingState.backupUploadState).isEqualTo(BackupUploadState.Waiting)
|
||||||
skipItems(1)
|
skipItems(1)
|
||||||
|
|
@ -209,6 +206,5 @@ class LogoutPresenterTest {
|
||||||
): LogoutPresenter = LogoutPresenter(
|
): LogoutPresenter = LogoutPresenter(
|
||||||
matrixClient = matrixClient,
|
matrixClient = matrixClient,
|
||||||
encryptionService = encryptionService,
|
encryptionService = encryptionService,
|
||||||
featureFlagService = FakeFeatureFlagService(mapOf(FeatureFlags.SecureStorage.key to true)),
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,8 +23,6 @@ import app.cash.turbine.test
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import io.element.android.features.logout.api.direct.DirectLogoutEvents
|
import io.element.android.features.logout.api.direct.DirectLogoutEvents
|
||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlags
|
|
||||||
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
|
|
||||||
import io.element.android.libraries.matrix.api.MatrixClient
|
import io.element.android.libraries.matrix.api.MatrixClient
|
||||||
import io.element.android.libraries.matrix.api.encryption.BackupUploadState
|
import io.element.android.libraries.matrix.api.encryption.BackupUploadState
|
||||||
import io.element.android.libraries.matrix.api.encryption.EncryptionService
|
import io.element.android.libraries.matrix.api.encryption.EncryptionService
|
||||||
|
|
@ -63,8 +61,8 @@ class DefaultDirectLogoutPresenterTest {
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
moleculeFlow(RecompositionMode.Immediate) {
|
||||||
presenter.present()
|
presenter.present()
|
||||||
}.test {
|
}.test {
|
||||||
skipItems(2)
|
skipItems(1)
|
||||||
val initialState = awaitItem()
|
val initialState = awaitFirstItem()
|
||||||
assertThat(initialState.canDoDirectSignOut).isFalse()
|
assertThat(initialState.canDoDirectSignOut).isFalse()
|
||||||
assertThat(initialState.logoutAction).isEqualTo(AsyncAction.Uninitialized)
|
assertThat(initialState.logoutAction).isEqualTo(AsyncAction.Uninitialized)
|
||||||
}
|
}
|
||||||
|
|
@ -84,8 +82,8 @@ class DefaultDirectLogoutPresenterTest {
|
||||||
moleculeFlow(RecompositionMode.Immediate) {
|
moleculeFlow(RecompositionMode.Immediate) {
|
||||||
presenter.present()
|
presenter.present()
|
||||||
}.test {
|
}.test {
|
||||||
skipItems(2)
|
skipItems(1)
|
||||||
val initialState = awaitItem()
|
val initialState = awaitFirstItem()
|
||||||
assertThat(initialState.canDoDirectSignOut).isFalse()
|
assertThat(initialState.canDoDirectSignOut).isFalse()
|
||||||
assertThat(initialState.logoutAction).isEqualTo(AsyncAction.Uninitialized)
|
assertThat(initialState.logoutAction).isEqualTo(AsyncAction.Uninitialized)
|
||||||
}
|
}
|
||||||
|
|
@ -180,7 +178,6 @@ class DefaultDirectLogoutPresenterTest {
|
||||||
}
|
}
|
||||||
|
|
||||||
private suspend fun <T> ReceiveTurbine<T>.awaitFirstItem(): T {
|
private suspend fun <T> ReceiveTurbine<T>.awaitFirstItem(): T {
|
||||||
skipItems(1)
|
|
||||||
return awaitItem()
|
return awaitItem()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -190,6 +187,5 @@ class DefaultDirectLogoutPresenterTest {
|
||||||
): DefaultDirectLogoutPresenter = DefaultDirectLogoutPresenter(
|
): DefaultDirectLogoutPresenter = DefaultDirectLogoutPresenter(
|
||||||
matrixClient = matrixClient,
|
matrixClient = matrixClient,
|
||||||
encryptionService = encryptionService,
|
encryptionService = encryptionService,
|
||||||
featureFlagService = FakeFeatureFlagService(mapOf(FeatureFlags.SecureStorage.key to true)),
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -79,9 +79,6 @@ class PreferencesRootPresenter @Inject constructor(
|
||||||
|
|
||||||
val showSecureBackupIndicator by indicatorService.showSettingChatBackupIndicator()
|
val showSecureBackupIndicator by indicatorService.showSettingChatBackupIndicator()
|
||||||
|
|
||||||
val secureStorageFlag by featureFlagService.isFeatureEnabledFlow(FeatureFlags.SecureStorage)
|
|
||||||
.collectAsState(initial = null)
|
|
||||||
|
|
||||||
val accountManagementUrl: MutableState<String?> = remember {
|
val accountManagementUrl: MutableState<String?> = remember {
|
||||||
mutableStateOf(null)
|
mutableStateOf(null)
|
||||||
}
|
}
|
||||||
|
|
@ -101,7 +98,7 @@ class PreferencesRootPresenter @Inject constructor(
|
||||||
version = versionFormatter.get(),
|
version = versionFormatter.get(),
|
||||||
deviceId = matrixClient.deviceId,
|
deviceId = matrixClient.deviceId,
|
||||||
showCompleteVerification = showCompleteVerification,
|
showCompleteVerification = showCompleteVerification,
|
||||||
showSecureBackup = !showCompleteVerification && secureStorageFlag == true,
|
showSecureBackup = !showCompleteVerification,
|
||||||
showSecureBackupBadge = showSecureBackupIndicator,
|
showSecureBackupBadge = showSecureBackupIndicator,
|
||||||
accountManagementUrl = accountManagementUrl.value,
|
accountManagementUrl = accountManagementUrl.value,
|
||||||
devicesManagementUrl = devicesManagementUrl.value,
|
devicesManagementUrl = devicesManagementUrl.value,
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,6 @@ class PreferencesRootPresenterTest {
|
||||||
indicatorService = DefaultIndicatorService(
|
indicatorService = DefaultIndicatorService(
|
||||||
sessionVerificationService = sessionVerificationService,
|
sessionVerificationService = sessionVerificationService,
|
||||||
encryptionService = FakeEncryptionService(),
|
encryptionService = FakeEncryptionService(),
|
||||||
featureFlagService = FakeFeatureFlagService(),
|
|
||||||
),
|
),
|
||||||
directLogoutPresenter = object : DirectLogoutPresenter {
|
directLogoutPresenter = object : DirectLogoutPresenter {
|
||||||
@Composable
|
@Composable
|
||||||
|
|
|
||||||
|
|
@ -119,7 +119,6 @@ class RoomListPresenter @Inject constructor(
|
||||||
}
|
}
|
||||||
val recoveryState by encryptionService.recoveryStateStateFlow.collectAsState()
|
val recoveryState by encryptionService.recoveryStateStateFlow.collectAsState()
|
||||||
val syncState by syncService.syncState.collectAsState()
|
val syncState by syncService.syncState.collectAsState()
|
||||||
val secureStorageFlag by featureFlagService.isFeatureEnabledFlow(FeatureFlags.SecureStorage).collectAsState(initial = null)
|
|
||||||
val securityBannerState by remember {
|
val securityBannerState by remember {
|
||||||
derivedStateOf {
|
derivedStateOf {
|
||||||
when {
|
when {
|
||||||
|
|
@ -129,8 +128,7 @@ class RoomListPresenter @Inject constructor(
|
||||||
} else {
|
} else {
|
||||||
SecurityBannerState.SessionVerification
|
SecurityBannerState.SessionVerification
|
||||||
}
|
}
|
||||||
secureStorageFlag == true &&
|
recoveryState == RecoveryState.INCOMPLETE &&
|
||||||
recoveryState == RecoveryState.INCOMPLETE &&
|
|
||||||
syncState == SyncState.Running -> SecurityBannerState.RecoveryKeyConfirmation
|
syncState == SyncState.Running -> SecurityBannerState.RecoveryKeyConfirmation
|
||||||
else -> SecurityBannerState.None
|
else -> SecurityBannerState.None
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,6 @@ import io.element.android.libraries.designsystem.utils.snackbar.SnackbarDispatch
|
||||||
import io.element.android.libraries.eventformatter.api.RoomLastMessageFormatter
|
import io.element.android.libraries.eventformatter.api.RoomLastMessageFormatter
|
||||||
import io.element.android.libraries.eventformatter.test.FakeRoomLastMessageFormatter
|
import io.element.android.libraries.eventformatter.test.FakeRoomLastMessageFormatter
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlagService
|
import io.element.android.libraries.featureflag.api.FeatureFlagService
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlags
|
|
||||||
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
|
import io.element.android.libraries.featureflag.test.FakeFeatureFlagService
|
||||||
import io.element.android.libraries.featureflag.test.InMemorySessionPreferencesStore
|
import io.element.android.libraries.featureflag.test.InMemorySessionPreferencesStore
|
||||||
import io.element.android.libraries.indicator.impl.DefaultIndicatorService
|
import io.element.android.libraries.indicator.impl.DefaultIndicatorService
|
||||||
|
|
@ -606,7 +605,7 @@ class RoomListPresenterTests {
|
||||||
},
|
},
|
||||||
roomLastMessageFormatter: RoomLastMessageFormatter = FakeRoomLastMessageFormatter(),
|
roomLastMessageFormatter: RoomLastMessageFormatter = FakeRoomLastMessageFormatter(),
|
||||||
sessionPreferencesStore: SessionPreferencesStore = InMemorySessionPreferencesStore(),
|
sessionPreferencesStore: SessionPreferencesStore = InMemorySessionPreferencesStore(),
|
||||||
featureFlagService: FeatureFlagService = FakeFeatureFlagService(mapOf(FeatureFlags.SecureStorage.key to true)),
|
featureFlagService: FeatureFlagService = FakeFeatureFlagService(),
|
||||||
coroutineScope: CoroutineScope,
|
coroutineScope: CoroutineScope,
|
||||||
migrationScreenPresenter: MigrationScreenPresenter = MigrationScreenPresenter(
|
migrationScreenPresenter: MigrationScreenPresenter = MigrationScreenPresenter(
|
||||||
matrixClient = client,
|
matrixClient = client,
|
||||||
|
|
@ -634,7 +633,6 @@ class RoomListPresenterTests {
|
||||||
indicatorService = DefaultIndicatorService(
|
indicatorService = DefaultIndicatorService(
|
||||||
sessionVerificationService = client.sessionVerificationService(),
|
sessionVerificationService = client.sessionVerificationService(),
|
||||||
encryptionService = client.encryptionService(),
|
encryptionService = client.encryptionService(),
|
||||||
featureFlagService = featureFlagService,
|
|
||||||
),
|
),
|
||||||
migrationScreenPresenter = migrationScreenPresenter,
|
migrationScreenPresenter = migrationScreenPresenter,
|
||||||
searchPresenter = searchPresenter,
|
searchPresenter = searchPresenter,
|
||||||
|
|
|
||||||
|
|
@ -68,13 +68,6 @@ enum class FeatureFlags(
|
||||||
defaultValue = true,
|
defaultValue = true,
|
||||||
isFinished = false,
|
isFinished = false,
|
||||||
),
|
),
|
||||||
SecureStorage(
|
|
||||||
key = "feature.securestorage",
|
|
||||||
title = "Chat backup",
|
|
||||||
description = "Allow access to backup and restore chat history settings",
|
|
||||||
defaultValue = true,
|
|
||||||
isFinished = false,
|
|
||||||
),
|
|
||||||
MarkAsUnread(
|
MarkAsUnread(
|
||||||
key = "feature.markAsUnread",
|
key = "feature.markAsUnread",
|
||||||
title = "Mark as unread",
|
title = "Mark as unread",
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,6 @@ class StaticFeatureFlagProvider @Inject constructor() :
|
||||||
FeatureFlags.VoiceMessages -> true
|
FeatureFlags.VoiceMessages -> true
|
||||||
FeatureFlags.PinUnlock -> true
|
FeatureFlags.PinUnlock -> true
|
||||||
FeatureFlags.Mentions -> true
|
FeatureFlags.Mentions -> true
|
||||||
FeatureFlags.SecureStorage -> true
|
|
||||||
FeatureFlags.MarkAsUnread -> false
|
FeatureFlags.MarkAsUnread -> false
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -24,8 +24,6 @@ import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import com.squareup.anvil.annotations.ContributesBinding
|
import com.squareup.anvil.annotations.ContributesBinding
|
||||||
import io.element.android.libraries.di.SessionScope
|
import io.element.android.libraries.di.SessionScope
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlagService
|
|
||||||
import io.element.android.libraries.featureflag.api.FeatureFlags
|
|
||||||
import io.element.android.libraries.indicator.api.IndicatorService
|
import io.element.android.libraries.indicator.api.IndicatorService
|
||||||
import io.element.android.libraries.matrix.api.encryption.BackupState
|
import io.element.android.libraries.matrix.api.encryption.BackupState
|
||||||
import io.element.android.libraries.matrix.api.encryption.EncryptionService
|
import io.element.android.libraries.matrix.api.encryption.EncryptionService
|
||||||
|
|
@ -37,7 +35,6 @@ import javax.inject.Inject
|
||||||
class DefaultIndicatorService @Inject constructor(
|
class DefaultIndicatorService @Inject constructor(
|
||||||
private val sessionVerificationService: SessionVerificationService,
|
private val sessionVerificationService: SessionVerificationService,
|
||||||
private val encryptionService: EncryptionService,
|
private val encryptionService: EncryptionService,
|
||||||
private val featureFlagService: FeatureFlagService,
|
|
||||||
) : IndicatorService {
|
) : IndicatorService {
|
||||||
@Composable
|
@Composable
|
||||||
override fun showRoomListTopBarIndicator(): State<Boolean> {
|
override fun showRoomListTopBarIndicator(): State<Boolean> {
|
||||||
|
|
@ -53,8 +50,6 @@ class DefaultIndicatorService @Inject constructor(
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
override fun showSettingChatBackupIndicator(): State<Boolean> {
|
override fun showSettingChatBackupIndicator(): State<Boolean> {
|
||||||
val secureStorageFlag by featureFlagService.isFeatureEnabledFlow(FeatureFlags.SecureStorage)
|
|
||||||
.collectAsState(initial = null)
|
|
||||||
val backupState by encryptionService.backupStateStateFlow.collectAsState()
|
val backupState by encryptionService.backupStateStateFlow.collectAsState()
|
||||||
val recoveryState by encryptionService.recoveryStateStateFlow.collectAsState()
|
val recoveryState by encryptionService.recoveryStateStateFlow.collectAsState()
|
||||||
|
|
||||||
|
|
@ -67,7 +62,7 @@ class DefaultIndicatorService @Inject constructor(
|
||||||
RecoveryState.DISABLED,
|
RecoveryState.DISABLED,
|
||||||
RecoveryState.INCOMPLETE,
|
RecoveryState.INCOMPLETE,
|
||||||
)
|
)
|
||||||
secureStorageFlag == true && (showForBackup || showForRecovery)
|
showForBackup || showForRecovery
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue