Rework. Keep io.element.android.appconfig.LockScreenConfig as simple as possible.
This commit is contained in:
parent
6def71ec84
commit
1a94be4e9e
12 changed files with 77 additions and 52 deletions
|
|
@ -15,20 +15,13 @@
|
||||||
*/
|
*/
|
||||||
plugins {
|
plugins {
|
||||||
id("io.element.android-library")
|
id("io.element.android-library")
|
||||||
alias(libs.plugins.anvil)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
namespace = "io.element.android.appconfig"
|
namespace = "io.element.android.appconfig"
|
||||||
}
|
}
|
||||||
|
|
||||||
anvil {
|
|
||||||
generateDaggerFactories.set(true)
|
|
||||||
}
|
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(libs.androidx.annotationjvm)
|
implementation(libs.androidx.annotationjvm)
|
||||||
implementation(libs.dagger)
|
|
||||||
implementation(projects.libraries.di)
|
|
||||||
implementation(projects.libraries.matrix.api)
|
implementation(projects.libraries.matrix.api)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,44 +16,28 @@
|
||||||
|
|
||||||
package io.element.android.appconfig
|
package io.element.android.appconfig
|
||||||
|
|
||||||
import com.squareup.anvil.annotations.ContributesTo
|
|
||||||
import dagger.Module
|
|
||||||
import dagger.Provides
|
|
||||||
import io.element.android.libraries.di.AppScope
|
|
||||||
import kotlin.time.Duration
|
import kotlin.time.Duration
|
||||||
import kotlin.time.Duration.Companion.seconds
|
import kotlin.time.Duration.Companion.seconds
|
||||||
|
|
||||||
/**
|
object LockScreenConfig {
|
||||||
* Configuration for the lock screen feature.
|
/** Whether the PIN is mandatory or not. */
|
||||||
* @property isPinMandatory Whether the PIN is mandatory or not.
|
const val IS_PIN_MANDATORY: Boolean = false
|
||||||
* @property pinBlacklist Some PINs are forbidden.
|
|
||||||
* @property pinSize The size of the PIN.
|
|
||||||
* @property maxPinCodeAttemptsBeforeLogout Number of attempts before the user is logged out.
|
|
||||||
* @property gracePeriod Time period before locking the app once backgrounded.
|
|
||||||
* @property isStrongBiometricsEnabled Authentication with strong methods (fingerprint, some face/iris unlock implementations) is supported.
|
|
||||||
* @property isWeakBiometricsEnabled Authentication with weak methods (most face/iris unlock implementations) is supported.
|
|
||||||
*/
|
|
||||||
data class LockScreenConfig(
|
|
||||||
val isPinMandatory: Boolean,
|
|
||||||
val pinBlacklist: Set<String>,
|
|
||||||
val pinSize: Int,
|
|
||||||
val maxPinCodeAttemptsBeforeLogout: Int,
|
|
||||||
val gracePeriod: Duration,
|
|
||||||
val isStrongBiometricsEnabled: Boolean,
|
|
||||||
val isWeakBiometricsEnabled: Boolean,
|
|
||||||
)
|
|
||||||
|
|
||||||
@ContributesTo(AppScope::class)
|
/** Set of forbidden PIN. */
|
||||||
@Module
|
val PIN_BLACKLIST: Set<String> = setOf("0000", "1234")
|
||||||
object LockScreenConfigModule {
|
|
||||||
@Provides
|
/** The size of the PIN */
|
||||||
fun providesLockScreenConfig(): LockScreenConfig = LockScreenConfig(
|
const val PIN_SIZE: Int = 4
|
||||||
isPinMandatory = false,
|
|
||||||
pinBlacklist = setOf("0000", "1234"),
|
/** Number of attempts before the user is logged out. */
|
||||||
pinSize = 4,
|
const val MAX_PIN_CODE_ATTEMPTS_BEFORE_LOGOUT: Int = 3
|
||||||
maxPinCodeAttemptsBeforeLogout = 3,
|
|
||||||
gracePeriod = 0.seconds,
|
/** Time period before locking the app once backgrounded. */
|
||||||
isStrongBiometricsEnabled = true,
|
val GRACE_PERIOD: Duration = 0.seconds
|
||||||
isWeakBiometricsEnabled = true,
|
|
||||||
)
|
/** Authentication with strong methods (fingerprint, some face/iris unlock implementations) is supported. */
|
||||||
|
const val IS_STRONG_BIOMETRICS_ENABLED: Boolean = true
|
||||||
|
|
||||||
|
/** Authentication with weak methods (most face/iris unlock implementations) is supported. */
|
||||||
|
const val IS_WEAK_BIOMETRICS_ENABLED: Boolean = true
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,6 @@
|
||||||
package io.element.android.features.lockscreen.impl
|
package io.element.android.features.lockscreen.impl
|
||||||
|
|
||||||
import com.squareup.anvil.annotations.ContributesBinding
|
import com.squareup.anvil.annotations.ContributesBinding
|
||||||
import io.element.android.appconfig.LockScreenConfig
|
|
||||||
import io.element.android.features.lockscreen.api.LockScreenLockState
|
import io.element.android.features.lockscreen.api.LockScreenLockState
|
||||||
import io.element.android.features.lockscreen.api.LockScreenService
|
import io.element.android.features.lockscreen.api.LockScreenService
|
||||||
import io.element.android.features.lockscreen.impl.biometric.BiometricUnlockManager
|
import io.element.android.features.lockscreen.impl.biometric.BiometricUnlockManager
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,49 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2024 New Vector Ltd
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package io.element.android.features.lockscreen.impl
|
||||||
|
|
||||||
|
import com.squareup.anvil.annotations.ContributesTo
|
||||||
|
import dagger.Module
|
||||||
|
import dagger.Provides
|
||||||
|
import io.element.android.libraries.di.AppScope
|
||||||
|
import kotlin.time.Duration
|
||||||
|
import io.element.android.appconfig.LockScreenConfig as AppConfigLockScreenConfig
|
||||||
|
|
||||||
|
data class LockScreenConfig(
|
||||||
|
val isPinMandatory: Boolean,
|
||||||
|
val pinBlacklist: Set<String>,
|
||||||
|
val pinSize: Int,
|
||||||
|
val maxPinCodeAttemptsBeforeLogout: Int,
|
||||||
|
val gracePeriod: Duration,
|
||||||
|
val isStrongBiometricsEnabled: Boolean,
|
||||||
|
val isWeakBiometricsEnabled: Boolean,
|
||||||
|
)
|
||||||
|
|
||||||
|
@ContributesTo(AppScope::class)
|
||||||
|
@Module
|
||||||
|
object LockScreenConfigModule {
|
||||||
|
@Provides
|
||||||
|
fun providesLockScreenConfig(): LockScreenConfig = LockScreenConfig(
|
||||||
|
isPinMandatory = AppConfigLockScreenConfig.IS_PIN_MANDATORY,
|
||||||
|
pinBlacklist = AppConfigLockScreenConfig.PIN_BLACKLIST,
|
||||||
|
pinSize = AppConfigLockScreenConfig.PIN_SIZE,
|
||||||
|
maxPinCodeAttemptsBeforeLogout = AppConfigLockScreenConfig.MAX_PIN_CODE_ATTEMPTS_BEFORE_LOGOUT,
|
||||||
|
gracePeriod = AppConfigLockScreenConfig.GRACE_PERIOD,
|
||||||
|
isStrongBiometricsEnabled = AppConfigLockScreenConfig.IS_STRONG_BIOMETRICS_ENABLED,
|
||||||
|
isWeakBiometricsEnabled = AppConfigLockScreenConfig.IS_WEAK_BIOMETRICS_ENABLED,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
@ -32,7 +32,7 @@ import androidx.compose.ui.res.stringResource
|
||||||
import androidx.core.content.getSystemService
|
import androidx.core.content.getSystemService
|
||||||
import androidx.fragment.app.FragmentActivity
|
import androidx.fragment.app.FragmentActivity
|
||||||
import com.squareup.anvil.annotations.ContributesBinding
|
import com.squareup.anvil.annotations.ContributesBinding
|
||||||
import io.element.android.appconfig.LockScreenConfig
|
import io.element.android.features.lockscreen.impl.LockScreenConfig
|
||||||
import io.element.android.features.lockscreen.impl.R
|
import io.element.android.features.lockscreen.impl.R
|
||||||
import io.element.android.features.lockscreen.impl.storage.LockScreenStore
|
import io.element.android.features.lockscreen.impl.storage.LockScreenStore
|
||||||
import io.element.android.libraries.cryptography.api.EncryptionDecryptionService
|
import io.element.android.libraries.cryptography.api.EncryptionDecryptionService
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,7 @@ import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.produceState
|
import androidx.compose.runtime.produceState
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import io.element.android.appconfig.LockScreenConfig
|
import io.element.android.features.lockscreen.impl.LockScreenConfig
|
||||||
import io.element.android.features.lockscreen.impl.biometric.BiometricUnlockManager
|
import io.element.android.features.lockscreen.impl.biometric.BiometricUnlockManager
|
||||||
import io.element.android.features.lockscreen.impl.pin.PinCodeManager
|
import io.element.android.features.lockscreen.impl.pin.PinCodeManager
|
||||||
import io.element.android.features.lockscreen.impl.storage.LockScreenStore
|
import io.element.android.features.lockscreen.impl.storage.LockScreenStore
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import io.element.android.appconfig.LockScreenConfig
|
import io.element.android.features.lockscreen.impl.LockScreenConfig
|
||||||
import io.element.android.features.lockscreen.impl.pin.PinCodeManager
|
import io.element.android.features.lockscreen.impl.pin.PinCodeManager
|
||||||
import io.element.android.features.lockscreen.impl.pin.model.PinEntry
|
import io.element.android.features.lockscreen.impl.pin.model.PinEntry
|
||||||
import io.element.android.features.lockscreen.impl.setup.pin.validation.PinValidator
|
import io.element.android.features.lockscreen.impl.setup.pin.validation.PinValidator
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
package io.element.android.features.lockscreen.impl.setup.pin.validation
|
package io.element.android.features.lockscreen.impl.setup.pin.validation
|
||||||
|
|
||||||
import io.element.android.appconfig.LockScreenConfig
|
import io.element.android.features.lockscreen.impl.LockScreenConfig
|
||||||
import io.element.android.features.lockscreen.impl.pin.model.PinEntry
|
import io.element.android.features.lockscreen.impl.pin.model.PinEntry
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ import androidx.datastore.preferences.core.intPreferencesKey
|
||||||
import androidx.datastore.preferences.core.stringPreferencesKey
|
import androidx.datastore.preferences.core.stringPreferencesKey
|
||||||
import androidx.datastore.preferences.preferencesDataStore
|
import androidx.datastore.preferences.preferencesDataStore
|
||||||
import com.squareup.anvil.annotations.ContributesBinding
|
import com.squareup.anvil.annotations.ContributesBinding
|
||||||
import io.element.android.appconfig.LockScreenConfig
|
import io.element.android.features.lockscreen.impl.LockScreenConfig
|
||||||
import io.element.android.libraries.di.AppScope
|
import io.element.android.libraries.di.AppScope
|
||||||
import io.element.android.libraries.di.ApplicationContext
|
import io.element.android.libraries.di.ApplicationContext
|
||||||
import io.element.android.libraries.di.SingleIn
|
import io.element.android.libraries.di.SingleIn
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
|
|
||||||
package io.element.android.features.lockscreen.impl.fixtures
|
package io.element.android.features.lockscreen.impl.fixtures
|
||||||
|
|
||||||
import io.element.android.appconfig.LockScreenConfig
|
import io.element.android.features.lockscreen.impl.LockScreenConfig
|
||||||
import kotlin.time.Duration
|
import kotlin.time.Duration
|
||||||
import kotlin.time.Duration.Companion.seconds
|
import kotlin.time.Duration.Companion.seconds
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ import app.cash.molecule.RecompositionMode
|
||||||
import app.cash.molecule.moleculeFlow
|
import app.cash.molecule.moleculeFlow
|
||||||
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.appconfig.LockScreenConfig
|
import io.element.android.features.lockscreen.impl.LockScreenConfig
|
||||||
import io.element.android.features.lockscreen.impl.biometric.FakeBiometricUnlockManager
|
import io.element.android.features.lockscreen.impl.biometric.FakeBiometricUnlockManager
|
||||||
import io.element.android.features.lockscreen.impl.fixtures.aLockScreenConfig
|
import io.element.android.features.lockscreen.impl.fixtures.aLockScreenConfig
|
||||||
import io.element.android.features.lockscreen.impl.fixtures.aPinCodeManager
|
import io.element.android.features.lockscreen.impl.fixtures.aPinCodeManager
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ import app.cash.molecule.RecompositionMode
|
||||||
import app.cash.molecule.moleculeFlow
|
import app.cash.molecule.moleculeFlow
|
||||||
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.appconfig.LockScreenConfig
|
import io.element.android.features.lockscreen.impl.LockScreenConfig
|
||||||
import io.element.android.features.lockscreen.impl.fixtures.aLockScreenConfig
|
import io.element.android.features.lockscreen.impl.fixtures.aLockScreenConfig
|
||||||
import io.element.android.features.lockscreen.impl.fixtures.aPinCodeManager
|
import io.element.android.features.lockscreen.impl.fixtures.aPinCodeManager
|
||||||
import io.element.android.features.lockscreen.impl.pin.DefaultPinCodeManagerCallback
|
import io.element.android.features.lockscreen.impl.pin.DefaultPinCodeManagerCallback
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue