current stand

This commit is contained in:
Myzel394 2023-12-21 18:12:46 +01:00
parent 7dfa29856e
commit bf84396a86
No known key found for this signature in database
GPG Key ID: 50098FCA22080F0F
4 changed files with 67 additions and 1 deletions

View File

@ -146,4 +146,6 @@ dependencies {
implementation "com.valentinilk.shimmer:compose-shimmer:1.2.0"
implementation "androidx.biometric:biometric-ktx:1.2.0-alpha05"
}

View File

@ -24,6 +24,8 @@
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_CAMERA" />
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
<application
android:name=".UpdateSettingsApp"
android:allowBackup="true"

View File

@ -1,11 +1,14 @@
package app.myzel394.alibi.db
import android.content.Context
import android.content.Intent
import android.media.MediaRecorder
import android.os.Build
import androidx.camera.video.FileOutputOptions
import androidx.biometric.BiometricManager
import androidx.biometric.BiometricManager.Authenticators
import androidx.camera.video.Quality
import androidx.camera.video.QualitySelector
import androidx.core.app.ActivityCompat.startActivityForResult
import app.myzel394.alibi.R
import app.myzel394.alibi.helpers.AudioBatchesFolder
import app.myzel394.alibi.helpers.VideoBatchesFolder
@ -547,3 +550,19 @@ data class NotificationSettings(
)
}
}
@Serializable
class AppLockSettings {
val isEnabled
get() = true
companion object {
fun getDefaultInstance(): AppLockSettings = AppLockSettings()
fun isSupported(context: Context): Boolean {
val biometricManager = BiometricManager.from(context)
when (biometricManager.canAuthenticate(Authenticators.BIOMETRIC_STRONG or Authenticators.DEVICE_CREDENTIAL)) {
}
}
}

View File

@ -1,8 +1,16 @@
package app.myzel394.alibi.ui
import android.content.Context
import android.hardware.biometrics.BiometricManager.Authenticators.BIOMETRIC_STRONG
import android.hardware.biometrics.BiometricManager.Authenticators.DEVICE_CREDENTIAL
import android.hardware.biometrics.BiometricPrompt
import android.hardware.biometrics.BiometricPrompt.CryptoObject
import android.hardware.camera2.CameraCharacteristics
import android.hardware.camera2.CameraManager
import android.os.Build
import android.os.CancellationSignal
import android.widget.Button
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatDelegate
import androidx.camera.core.CameraX
import androidx.compose.animation.core.tween
@ -20,10 +28,12 @@ import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.core.content.ContextCompat
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import app.myzel394.alibi.R
import app.myzel394.alibi.dataStore
import app.myzel394.alibi.db.AppSettings
import app.myzel394.alibi.ui.enums.Screen
@ -61,6 +71,39 @@ fun Navigation(
}
}
LaunchedEffect(Unit) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
val executor = ContextCompat.getMainExecutor(context)
val promptInfo = BiometricPrompt.Builder(context)
.setTitle("Biometric login for my app")
.setSubtitle("Log in using your biometric credential")
.setAllowedAuthenticators(
BIOMETRIC_STRONG or DEVICE_CREDENTIAL
)
.build()
// Prompt appears when user clicks "Log in".
// Consider integrating with the keystore to unlock cryptographic operations,
// if needed by your app.
promptInfo.authenticate(
CancellationSignal(),
executor,
object : BiometricPrompt.AuthenticationCallback() {
override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
super.onAuthenticationError(errorCode, errString)
}
override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
super.onAuthenticationSucceeded(result)
}
override fun onAuthenticationFailed() {
super.onAuthenticationFailed()
}
})
}
}
LaunchedEffect(settings.theme) {
if (!SUPPORTS_DARK_MODE_NATIVELY) {
val currentValue = AppCompatDelegate.getDefaultNightMode()