add a switch in Settings to enable or disable auth

This commit is contained in:
BinTianqi
2024-05-16 13:40:27 +08:00
parent 405b897754
commit fcfaedd257
5 changed files with 60 additions and 19 deletions

View File

@@ -101,6 +101,8 @@ fun Auth(activity: FragmentActivity, callback: AuthenticationCallback, promptInf
Button( Button(
onClick = { onClick = {
val bioManager = BiometricManager.from(context) val bioManager = BiometricManager.from(context)
val sharedPref = context.getSharedPreferences("data", Context.MODE_PRIVATE)
if(sharedPref.getBoolean("bio_auth", false)){
when(BiometricManager.BIOMETRIC_SUCCESS){ when(BiometricManager.BIOMETRIC_SUCCESS){
bioManager.canAuthenticate(BiometricManager.Authenticators.BIOMETRIC_STRONG) -> bioManager.canAuthenticate(BiometricManager.Authenticators.BIOMETRIC_STRONG) ->
promptInfo promptInfo
@@ -112,6 +114,9 @@ fun Auth(activity: FragmentActivity, callback: AuthenticationCallback, promptInf
.setNegativeButtonText("Use password") .setNegativeButtonText("Use password")
else -> promptInfo.setAllowedAuthenticators(BiometricManager.Authenticators.DEVICE_CREDENTIAL) else -> promptInfo.setAllowedAuthenticators(BiometricManager.Authenticators.DEVICE_CREDENTIAL)
} }
}else{
promptInfo.setAllowedAuthenticators(BiometricManager.Authenticators.DEVICE_CREDENTIAL)
}
authWithBiometricPrompt(activity, promptInfo.build(), callback) authWithBiometricPrompt(activity, promptInfo.build(), callback)
} }
){ ){

View File

@@ -60,9 +60,14 @@ class MainActivity : FragmentActivity() {
WindowCompat.setDecorFitsSystemWindows(window, false) WindowCompat.setDecorFitsSystemWindows(window, false)
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.base) setContentView(R.layout.base)
val sharedPref = applicationContext.getSharedPreferences("data", Context.MODE_PRIVATE)
val fragmentManager = supportFragmentManager val fragmentManager = supportFragmentManager
val transaction = fragmentManager.beginTransaction() val transaction = fragmentManager.beginTransaction()
if(sharedPref.getBoolean("auth", false)){
transaction.add(R.id.base, AuthFragment(), "auth") transaction.add(R.id.base, AuthFragment(), "auth")
}else{
transaction.add(R.id.base, homeFragment, "home")
}
transaction.commit() transaction.commit()
val locale = applicationContext.resources?.configuration?.locale val locale = applicationContext.resources?.configuration?.locale
zhCN = locale==Locale.SIMPLIFIED_CHINESE||locale==Locale.CHINESE||locale==Locale.CHINA zhCN = locale==Locale.SIMPLIFIED_CHINESE||locale==Locale.CHINESE||locale==Locale.CHINA

View File

@@ -14,9 +14,7 @@ import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.MaterialTheme.typography import androidx.compose.material3.MaterialTheme.typography
import androidx.compose.material3.Scaffold import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.*
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
@@ -56,9 +54,10 @@ fun AppSetting(navCtrl:NavHostController, materialYou: MutableState<Boolean>, bl
popExitTransition = Animations.navHostPopExitTransition, popExitTransition = Animations.navHostPopExitTransition,
modifier = Modifier.padding(top = it.calculateTopPadding()) modifier = Modifier.padding(top = it.calculateTopPadding())
){ ){
composable(route = "Home"){Home(localNavCtrl)} composable(route = "Home"){ Home(localNavCtrl) }
composable(route = "Settings"){Settings(materialYou, blackTheme)} composable(route = "Theme"){ ThemeSettings(materialYou, blackTheme) }
composable(route = "About"){About()} composable(route = "Auth"){ AuthSettings() }
composable(route = "About"){ About() }
} }
} }
} }
@@ -66,13 +65,14 @@ fun AppSetting(navCtrl:NavHostController, materialYou: MutableState<Boolean>, bl
@Composable @Composable
private fun Home(navCtrl: NavHostController){ private fun Home(navCtrl: NavHostController){
Column(modifier = Modifier.fillMaxSize()){ Column(modifier = Modifier.fillMaxSize()){
SubPageItem(R.string.setting,"",R.drawable.settings_fill0){navCtrl.navigate("Settings")} SubPageItem(R.string.setting,"",R.drawable.settings_fill0){navCtrl.navigate("Theme")}
SubPageItem(R.string.security,"",R.drawable.settings_fill0){navCtrl.navigate("Auth")}
SubPageItem(R.string.about,"",R.drawable.info_fill0){navCtrl.navigate("About")} SubPageItem(R.string.about,"",R.drawable.info_fill0){navCtrl.navigate("About")}
} }
} }
@Composable @Composable
private fun Settings(materialYou:MutableState<Boolean>, blackTheme:MutableState<Boolean>){ private fun ThemeSettings(materialYou:MutableState<Boolean>, blackTheme:MutableState<Boolean>){
val sharedPref = LocalContext.current.getSharedPreferences("data", Context.MODE_PRIVATE) val sharedPref = LocalContext.current.getSharedPreferences("data", Context.MODE_PRIVATE)
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState())) { Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState())) {
if(VERSION.SDK_INT>=31){ if(VERSION.SDK_INT>=31){
@@ -98,6 +98,31 @@ private fun Settings(materialYou:MutableState<Boolean>, blackTheme:MutableState<
} }
} }
@Composable
private fun AuthSettings(){
val sharedPref = LocalContext.current.getSharedPreferences("data", Context.MODE_PRIVATE)
var auth by remember{ mutableStateOf(sharedPref.getBoolean("auth",false)) }
Column(modifier = Modifier.fillMaxSize().verticalScroll(rememberScrollState())) {
if(VERSION.SDK_INT>=30){
SwitchItem(
R.string.lock_owndroid, "", null,
{ auth },
{
sharedPref.edit().putBoolean("auth",it).apply()
auth = sharedPref.getBoolean("auth",false)
}
)
}
if(auth){
SwitchItem(
R.string.enable_bio_auth, "", null,
{ sharedPref.getBoolean("bio_auth",false) },
{ sharedPref.edit().putBoolean("bio_auth",it).apply() }
)
}
}
}
@Composable @Composable
private fun About(){ private fun About(){
val myContext = LocalContext.current val myContext = LocalContext.current

View File

@@ -480,6 +480,9 @@
<string name="source_code">源代码</string> <string name="source_code">源代码</string>
<string name="amoled_black">纯黑夜间主题</string> <string name="amoled_black">纯黑夜间主题</string>
<string name="blackTheme_desc">需要打开夜间模式</string> <string name="blackTheme_desc">需要打开夜间模式</string>
<string name="security">安全</string>
<string name="lock_owndroid">锁定OwnDroid</string>
<string name="enable_bio_auth">使用生物识别</string>
<!--AndroidPermission--> <!--AndroidPermission-->
<string name="permission_READ_EXTERNAL_STORAGE">读取外部存储</string> <string name="permission_READ_EXTERNAL_STORAGE">读取外部存储</string>

View File

@@ -495,6 +495,9 @@
<string name="source_code">Source code</string> <string name="source_code">Source code</string>
<string name="amoled_black">Black theme</string> <string name="amoled_black">Black theme</string>
<string name="blackTheme_desc">Require dark mode on</string> <string name="blackTheme_desc">Require dark mode on</string>
<string name="security">Security</string>
<string name="lock_owndroid">Lock OwnDroid</string>
<string name="enable_bio_auth">Auth with biometrics</string>
<!--AndroidPermission--> <!--AndroidPermission-->
<string name="permission_READ_EXTERNAL_STORAGE">Read external storage</string> <string name="permission_READ_EXTERNAL_STORAGE">Read external storage</string>