mirror of
https://github.com/Myzel394/Alibi.git
synced 2025-06-18 23:05:26 +02:00
current stand
This commit is contained in:
parent
7dfa29856e
commit
bf84396a86
@ -146,4 +146,6 @@ dependencies {
|
||||
|
||||
|
||||
implementation "com.valentinilk.shimmer:compose-shimmer:1.2.0"
|
||||
|
||||
implementation "androidx.biometric:biometric-ktx:1.2.0-alpha05"
|
||||
}
|
@ -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"
|
||||
|
@ -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)) {
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user