mirror of
https://github.com/awfixers-stuff/OwnDroid.git
synced 2026-03-23 19:15:58 +00:00
Display authentication screen in NavHost Remove "Protect storage", authenticate to clear storage instead Force enable biometrics on if using password alone is not supported
89 lines
3.6 KiB
Kotlin
89 lines
3.6 KiB
Kotlin
package com.bintianqi.owndroid
|
|
|
|
import android.os.Build
|
|
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
|
|
import com.bintianqi.owndroid.ui.theme.OwnDroidTheme
|
|
import kotlin.system.exitProcess
|
|
|
|
class ManageSpaceActivity: FragmentActivity() {
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
enableEdgeToEdge()
|
|
WindowCompat.setDecorFitsSystemWindows(window, false)
|
|
super.onCreate(savedInstanceState)
|
|
val sharedPref = applicationContext.getSharedPreferences("data", MODE_PRIVATE)
|
|
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(
|
|
text = {
|
|
Text(stringResource(R.string.clear_storage))
|
|
},
|
|
onDismissRequest = { finish() },
|
|
dismissButton = {
|
|
TextButton(onClick = { finish() }) {
|
|
Text(stringResource(R.string.cancel))
|
|
}
|
|
},
|
|
confirmButton = {
|
|
TextButton(
|
|
onClick = {
|
|
if(authenticate) {
|
|
authenticating = true
|
|
startAuth(this, callback)
|
|
} else {
|
|
clearStorage()
|
|
}
|
|
},
|
|
enabled = !authenticating
|
|
) {
|
|
Text(stringResource(R.string.confirm))
|
|
}
|
|
}
|
|
)
|
|
}
|
|
}
|
|
}
|
|
} |