Browse Source

Pin unlock : hides behind feature flag (disabled by default)

pull/1554/head
ganfra 11 months ago
parent
commit
304ec0b740
  1. 4
      appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt
  2. 4
      features/pin/api/src/main/kotlin/io/element/android/features/pin/api/PinStateDataSource.kt
  3. 1
      features/pin/impl/build.gradle.kts
  4. 6
      features/pin/impl/src/main/kotlin/io/element/android/features/pin/impl/auth/PinAuthenticationPresenter.kt
  5. 20
      features/pin/impl/src/main/kotlin/io/element/android/features/pin/impl/state/DefaultPinStateDataSource.kt
  6. 6
      libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt
  7. 1
      libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/StaticFeatureFlagProvider.kt

4
appnav/src/main/kotlin/io/element/android/appnav/LoggedInFlowNode.kt

@ -135,9 +135,9 @@ class LoggedInFlowNode @AssistedInject constructor( @@ -135,9 +135,9 @@ class LoggedInFlowNode @AssistedInject constructor(
}
},
onStop = {
pinStateDataSource.lock()
//Counterpart startSync is done in observeSyncStateAndNetworkStatus method.
coroutineScope.launch {
pinStateDataSource.lock()
//Counterpart startSync is done in observeSyncStateAndNetworkStatus method.
syncService.stopSync()
}
},

4
features/pin/api/src/main/kotlin/io/element/android/features/pin/api/PinStateDataSource.kt

@ -21,6 +21,6 @@ import kotlinx.coroutines.flow.StateFlow @@ -21,6 +21,6 @@ import kotlinx.coroutines.flow.StateFlow
interface PinStateDataSource {
val pinState: StateFlow<PinState>
fun lock()
fun unlock()
suspend fun lock()
suspend fun unlock()
}

1
features/pin/impl/build.gradle.kts

@ -40,6 +40,7 @@ dependencies { @@ -40,6 +40,7 @@ dependencies {
implementation(projects.libraries.matrix.api)
implementation(projects.libraries.matrixui)
implementation(projects.libraries.designsystem)
implementation(projects.libraries.featureflag.api)
testImplementation(libs.test.junit)
testImplementation(libs.coroutines.test)

6
features/pin/impl/src/main/kotlin/io/element/android/features/pin/impl/auth/PinAuthenticationPresenter.kt

@ -19,17 +19,21 @@ package io.element.android.features.pin.impl.auth @@ -19,17 +19,21 @@ package io.element.android.features.pin.impl.auth
import androidx.compose.runtime.Composable
import io.element.android.features.pin.api.PinStateDataSource
import io.element.android.libraries.architecture.Presenter
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch
import javax.inject.Inject
class PinAuthenticationPresenter @Inject constructor(
private val pinStateDataSource: PinStateDataSource,
private val coroutineScope: CoroutineScope,
) : Presenter<PinAuthenticationState> {
@Composable
override fun present(): PinAuthenticationState {
fun handleEvents(event: PinAuthenticationEvents) {
when (event) {
PinAuthenticationEvents.Unlock -> pinStateDataSource.unlock()
PinAuthenticationEvents.Unlock -> coroutineScope.launch { pinStateDataSource.unlock() }
}
}
return PinAuthenticationState(

20
features/pin/impl/src/main/kotlin/io/element/android/features/pin/impl/state/DefaultPinStateDataSource.kt

@ -21,22 +21,30 @@ import io.element.android.features.pin.api.PinState @@ -21,22 +21,30 @@ import io.element.android.features.pin.api.PinState
import io.element.android.features.pin.api.PinStateDataSource
import io.element.android.libraries.di.AppScope
import io.element.android.libraries.di.SingleIn
import io.element.android.libraries.featureflag.api.FeatureFlagService
import io.element.android.libraries.featureflag.api.FeatureFlags
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import javax.inject.Inject
@SingleIn(AppScope::class)
@ContributesBinding(AppScope::class)
class DefaultPinStateDataSource @Inject constructor() : PinStateDataSource {
class DefaultPinStateDataSource @Inject constructor(
private val featureFlagService: FeatureFlagService,
) : PinStateDataSource {
private val _pinState = MutableStateFlow<PinState>(PinState.Locked)
private val _pinState = MutableStateFlow<PinState>(PinState.Unlocked)
override val pinState: StateFlow<PinState> = _pinState
override fun unlock() {
_pinState.value = PinState.Unlocked
override suspend fun unlock() {
if (featureFlagService.isFeatureEnabled(FeatureFlags.PinUnlock)) {
_pinState.value = PinState.Unlocked
}
}
override fun lock() {
_pinState.value = PinState.Locked
override suspend fun lock() {
if (featureFlagService.isFeatureEnabled(FeatureFlags.PinUnlock)) {
_pinState.value = PinState.Locked
}
}
}

6
libraries/featureflag/api/src/main/kotlin/io/element/android/libraries/featureflag/api/FeatureFlags.kt

@ -49,4 +49,10 @@ enum class FeatureFlags( @@ -49,4 +49,10 @@ enum class FeatureFlags(
description = "Send and receive voice messages",
defaultValue = false,
),
PinUnlock(
key = "feature.pinunlock",
title = "Pin unlock",
description = "Allow user to lock/unlock the app with a pin code or biometrics",
defaultValue = false,
),
}

1
libraries/featureflag/impl/src/main/kotlin/io/element/android/libraries/featureflag/impl/StaticFeatureFlagProvider.kt

@ -36,6 +36,7 @@ class StaticFeatureFlagProvider @Inject constructor() : @@ -36,6 +36,7 @@ class StaticFeatureFlagProvider @Inject constructor() :
FeatureFlags.Polls -> true
FeatureFlags.NotificationSettings -> true
FeatureFlags.VoiceMessages -> false
FeatureFlags.PinUnlock -> false
}
} else {
false

Loading…
Cancel
Save