mirror of
https://github.com/awfixers-stuff/OwnDroid.git
synced 2026-03-23 19:15:58 +00:00
Fix some bugs of authentication
Display authentication screen in NavHost Remove "Protect storage", authenticate to clear storage instead Force enable biometrics on if using password alone is not supported
This commit is contained in:
@@ -5,9 +5,15 @@ import android.os.Bundle
|
||||
import androidx.activity.compose.setContent
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.activity.viewModels
|
||||
import androidx.biometric.BiometricPrompt
|
||||
import androidx.biometric.BiometricPrompt.AuthenticationCallback
|
||||
import androidx.compose.material3.AlertDialog
|
||||
import androidx.compose.material3.Text
|
||||
import androidx.compose.material3.TextButton
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.core.view.WindowCompat
|
||||
import androidx.fragment.app.FragmentActivity
|
||||
@@ -20,17 +26,40 @@ class ManageSpaceActivity: FragmentActivity() {
|
||||
WindowCompat.setDecorFitsSystemWindows(window, false)
|
||||
super.onCreate(savedInstanceState)
|
||||
val sharedPref = applicationContext.getSharedPreferences("data", MODE_PRIVATE)
|
||||
val protected = sharedPref.getBoolean("protect_storage", false)
|
||||
val authenticate = sharedPref.getBoolean("auth", false)
|
||||
val vm by viewModels<MyViewModel>()
|
||||
if(!vm.initialized) vm.initialize(applicationContext)
|
||||
fun clearStorage() {
|
||||
filesDir.deleteRecursively()
|
||||
cacheDir.deleteRecursively()
|
||||
codeCacheDir.deleteRecursively()
|
||||
if(Build.VERSION.SDK_INT >= 24) {
|
||||
dataDir.resolve("shared_prefs").deleteRecursively()
|
||||
} else {
|
||||
sharedPref.edit().clear().apply()
|
||||
}
|
||||
finish()
|
||||
exitProcess(0)
|
||||
}
|
||||
setContent {
|
||||
var authenticating by remember { mutableStateOf(false) }
|
||||
val callback = object: AuthenticationCallback() {
|
||||
override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
|
||||
super.onAuthenticationSucceeded(result)
|
||||
clearStorage()
|
||||
}
|
||||
override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
|
||||
super.onAuthenticationError(errorCode, errString)
|
||||
when(errorCode) {
|
||||
BiometricPrompt.ERROR_NO_DEVICE_CREDENTIAL -> clearStorage()
|
||||
else -> authenticating = false
|
||||
}
|
||||
}
|
||||
}
|
||||
OwnDroidTheme(vm) {
|
||||
AlertDialog(
|
||||
title = {
|
||||
Text(stringResource(R.string.clear_storage))
|
||||
},
|
||||
text = {
|
||||
if(protected) Text(stringResource(R.string.storage_is_protected))
|
||||
Text(stringResource(R.string.clear_storage))
|
||||
},
|
||||
onDismissRequest = { finish() },
|
||||
dismissButton = {
|
||||
@@ -39,19 +68,16 @@ class ManageSpaceActivity: FragmentActivity() {
|
||||
}
|
||||
},
|
||||
confirmButton = {
|
||||
if(!protected) TextButton(
|
||||
TextButton(
|
||||
onClick = {
|
||||
filesDir.deleteRecursively()
|
||||
cacheDir.deleteRecursively()
|
||||
codeCacheDir.deleteRecursively()
|
||||
if(Build.VERSION.SDK_INT >= 24) {
|
||||
dataDir.resolve("shared_prefs").deleteRecursively()
|
||||
if(authenticate) {
|
||||
authenticating = true
|
||||
startAuth(this, callback)
|
||||
} else {
|
||||
sharedPref.edit().clear().apply()
|
||||
clearStorage()
|
||||
}
|
||||
finish()
|
||||
exitProcess(0)
|
||||
}
|
||||
},
|
||||
enabled = !authenticating
|
||||
) {
|
||||
Text(stringResource(R.string.confirm))
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user