From 734f7763d178cdfa517fc0bfa69678a887a51d41 Mon Sep 17 00:00:00 2001 From: BinTianqi Date: Fri, 17 May 2024 12:48:18 +0800 Subject: [PATCH] add a option to lock OwnDroid when it is switched to background --- .../main/java/com/bintianqi/owndroid/Auth.kt | 19 ++++++------ .../com/bintianqi/owndroid/MainActivity.kt | 31 ++++++++++++++++--- .../java/com/bintianqi/owndroid/Setting.kt | 5 +++ app/src/main/res/anim/enter.xml | 8 ++--- app/src/main/res/anim/exit.xml | 4 +-- app/src/main/res/values-zh-rCN/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 7 files changed, 49 insertions(+), 20 deletions(-) diff --git a/app/src/main/java/com/bintianqi/owndroid/Auth.kt b/app/src/main/java/com/bintianqi/owndroid/Auth.kt index 7bc5594..2305b26 100644 --- a/app/src/main/java/com/bintianqi/owndroid/Auth.kt +++ b/app/src/main/java/com/bintianqi/owndroid/Auth.kt @@ -7,7 +7,6 @@ import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import android.widget.FrameLayout import androidx.biometric.BiometricManager import androidx.biometric.BiometricPrompt import androidx.biometric.BiometricPrompt.AuthenticationCallback @@ -19,7 +18,10 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.material3.Button import androidx.compose.material3.MaterialTheme import androidx.compose.material3.Text -import androidx.compose.runtime.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.MutableState +import androidx.compose.runtime.mutableStateOf import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.ComposeView @@ -28,7 +30,9 @@ import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import androidx.lifecycle.lifecycleScope import com.bintianqi.owndroid.ui.theme.OwnDroidTheme -import kotlinx.coroutines.* +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay +import kotlinx.coroutines.launch class AuthFragment: Fragment() { @SuppressLint("UnrememberedMutableState") @@ -40,13 +44,7 @@ class AuthFragment: Fragment() { val fragmentManager = this.parentFragmentManager val transaction = fragmentManager.beginTransaction() transaction.setCustomAnimations(R.anim.enter, R.anim.exit) - transaction.add(R.id.base, homeFragment) - requireActivity().findViewById(R.id.base).bringChildToFront(homeFragment.view) - transaction.commit() - lifecycleScope.launch { - delay(500) - fragmentManager.beginTransaction().remove(this@AuthFragment).commit() - } + transaction.remove(this@AuthFragment).commit() } val promptInfo = Builder() .setTitle(context.getText(R.string.authenticate)) @@ -110,6 +108,7 @@ fun Auth(activity: Fragment, promptInfo: Builder, callback: AuthenticationCallba color = MaterialTheme.colorScheme.onBackground ) LaunchedEffect(Unit){ + delay(300) startAuth(activity, promptInfo, callback) canStartAuth.value = false } diff --git a/app/src/main/java/com/bintianqi/owndroid/MainActivity.kt b/app/src/main/java/com/bintianqi/owndroid/MainActivity.kt index ba44883..85c3fbd 100644 --- a/app/src/main/java/com/bintianqi/owndroid/MainActivity.kt +++ b/app/src/main/java/com/bintianqi/owndroid/MainActivity.kt @@ -48,11 +48,10 @@ import com.bintianqi.owndroid.ui.theme.OwnDroidTheme import kotlinx.coroutines.delay import java.util.Locale -val homeFragment = HomeFragment() - var backToHome = false @ExperimentalMaterial3Api class MainActivity : FragmentActivity() { + private var auth = false @SuppressLint("UnrememberedMutableState") override fun onCreate(savedInstanceState: Bundle?) { registerActivityResult(this) @@ -63,15 +62,39 @@ class MainActivity : FragmentActivity() { val sharedPref = applicationContext.getSharedPreferences("data", Context.MODE_PRIVATE) val fragmentManager = supportFragmentManager val transaction = fragmentManager.beginTransaction() + transaction.add(R.id.base, HomeFragment(), "home") if(sharedPref.getBoolean("auth", false)){ transaction.add(R.id.base, AuthFragment(), "auth") - }else{ - transaction.add(R.id.base, homeFragment, "home") } transaction.commit() val locale = applicationContext.resources?.configuration?.locale zhCN = locale==Locale.SIMPLIFIED_CHINESE||locale==Locale.CHINESE||locale==Locale.CHINA } + + override fun onResume() { + super.onResume() + if(auth){ + val sharedPref = applicationContext.getSharedPreferences("data", Context.MODE_PRIVATE) + if( + sharedPref.getBoolean("auth", false) && + sharedPref.getBoolean("lock_in_background", false) + ){ + val fragmentManager = supportFragmentManager + val fragment = fragmentManager.findFragmentByTag("auth") + if(fragment == null){ + val transaction = fragmentManager.beginTransaction() + transaction.setCustomAnimations(R.anim.enter, R.anim.exit) + transaction.add(R.id.base, AuthFragment(), "auth").commit() + } + } + auth = false + } + } + + override fun onRestart() { + super.onRestart() + auth = true + } } class HomeFragment: Fragment() { diff --git a/app/src/main/java/com/bintianqi/owndroid/Setting.kt b/app/src/main/java/com/bintianqi/owndroid/Setting.kt index ee79319..225fbc3 100644 --- a/app/src/main/java/com/bintianqi/owndroid/Setting.kt +++ b/app/src/main/java/com/bintianqi/owndroid/Setting.kt @@ -111,6 +111,11 @@ private fun AuthSettings(){ { sharedPref.getBoolean("bio_auth",false) }, { sharedPref.edit().putBoolean("bio_auth",it).apply() } ) + SwitchItem( + R.string.lock_in_background, "", null, + { sharedPref.getBoolean("lock_in_background",false) }, + { sharedPref.edit().putBoolean("lock_in_background",it).apply() } + ) } Box(modifier = Modifier.padding(horizontal = 8.dp)){ Information { diff --git a/app/src/main/res/anim/enter.xml b/app/src/main/res/anim/enter.xml index fd3f154..56ebee1 100644 --- a/app/src/main/res/anim/enter.xml +++ b/app/src/main/res/anim/enter.xml @@ -2,16 +2,16 @@ + android:duration="200" /> diff --git a/app/src/main/res/anim/exit.xml b/app/src/main/res/anim/exit.xml index 80a3c74..facb15f 100644 --- a/app/src/main/res/anim/exit.xml +++ b/app/src/main/res/anim/exit.xml @@ -1,8 +1,8 @@ + android:toAlpha="0.0" /> diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 54066d4..3212770 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -491,6 +491,7 @@ 使用密码 使用密码进行验证 使用生物识别进行验证 + 处于后台时锁定 读取外部存储 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 28d2cd1..014617b 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -506,6 +506,7 @@ Use password Authenticate OwnDroid with password Authenticate OwnDroid with biometrics + Lock when switch to background Read external storage