From 2d22a65506be4963c502428e602032b9220d7e3a Mon Sep 17 00:00:00 2001 From: Myzel394 <50424412+Myzel394@users.noreply.github.com> Date: Mon, 25 Dec 2023 11:54:32 +0100 Subject: [PATCH] feat: Improve AsLockedApp --- .../java/app/myzel394/alibi/MainActivity.kt | 28 ++++++++++------ .../java/app/myzel394/alibi/ui/AsLockedApp.kt | 3 +- .../myzel394/alibi/ui/LockedAppHandlers.kt | 32 +++++++++++++++++++ .../java/app/myzel394/alibi/ui/Navigation.kt | 12 ------- 4 files changed, 52 insertions(+), 23 deletions(-) create mode 100644 app/src/main/java/app/myzel394/alibi/ui/LockedAppHandlers.kt diff --git a/app/src/main/java/app/myzel394/alibi/MainActivity.kt b/app/src/main/java/app/myzel394/alibi/MainActivity.kt index 45e5c82..79b3966 100644 --- a/app/src/main/java/app/myzel394/alibi/MainActivity.kt +++ b/app/src/main/java/app/myzel394/alibi/MainActivity.kt @@ -2,21 +2,19 @@ package app.myzel394.alibi import android.content.Context import android.os.Bundle -import android.view.MotionEvent -import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.appcompat.app.AppCompatActivity -import androidx.appcompat.app.AppCompatDelegate -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.collectAsState -import androidx.compose.ui.platform.LocalContext +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.MaterialTheme +import androidx.compose.ui.Modifier import androidx.core.view.WindowCompat import androidx.datastore.dataStore -import app.myzel394.alibi.db.AppSettings import app.myzel394.alibi.db.AppSettingsSerializer import app.myzel394.alibi.ui.AsLockedApp +import app.myzel394.alibi.ui.LockedAppHandlers import app.myzel394.alibi.ui.Navigation -import app.myzel394.alibi.ui.SUPPORTS_DARK_MODE_NATIVELY import app.myzel394.alibi.ui.theme.AlibiTheme const val SETTINGS_FILE = "settings.json" @@ -33,8 +31,18 @@ class MainActivity : AppCompatActivity() { setContent { AlibiTheme { - AsLockedApp { - Navigation() + LockedAppHandlers() + + Box( + modifier = Modifier + .fillMaxSize() + .background( + MaterialTheme.colorScheme.background + ) + ) { + AsLockedApp { + Navigation() + } } } } diff --git a/app/src/main/java/app/myzel394/alibi/ui/AsLockedApp.kt b/app/src/main/java/app/myzel394/alibi/ui/AsLockedApp.kt index 48ec3fc..634f7a3 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/AsLockedApp.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/AsLockedApp.kt @@ -39,8 +39,9 @@ import app.myzel394.alibi.helpers.AppLockHelper import kotlinx.coroutines.launch // After this amount, close the app -const val MAX_TRIES = 10 +const val MAX_TRIES = 5 +// Makes sure the app needs to be unlocked first, if app lock is enabled @Composable fun AsLockedApp( content: (@Composable () -> Unit), diff --git a/app/src/main/java/app/myzel394/alibi/ui/LockedAppHandlers.kt b/app/src/main/java/app/myzel394/alibi/ui/LockedAppHandlers.kt new file mode 100644 index 0000000..5db781c --- /dev/null +++ b/app/src/main/java/app/myzel394/alibi/ui/LockedAppHandlers.kt @@ -0,0 +1,32 @@ +package app.myzel394.alibi.ui + +import androidx.appcompat.app.AppCompatDelegate +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.ui.platform.LocalContext +import app.myzel394.alibi.dataStore +import app.myzel394.alibi.db.AppSettings + +// Handlers that can safely be run when the app is locked (biometric authentication required) +@Composable +fun LockedAppHandlers() { + val context = LocalContext.current + val settings = context + .dataStore + .data + .collectAsState(initial = null) + .value ?: return + + LaunchedEffect(settings.theme) { + if (!SUPPORTS_DARK_MODE_NATIVELY) { + val currentValue = AppCompatDelegate.getDefaultNightMode() + + if (settings.theme == AppSettings.Theme.LIGHT && currentValue != AppCompatDelegate.MODE_NIGHT_NO) { + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) + } else if (settings.theme == AppSettings.Theme.DARK && currentValue != AppCompatDelegate.MODE_NIGHT_YES) { + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/app/myzel394/alibi/ui/Navigation.kt b/app/src/main/java/app/myzel394/alibi/ui/Navigation.kt index a352502..78a30e0 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/Navigation.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/Navigation.kt @@ -72,18 +72,6 @@ fun Navigation( } } - LaunchedEffect(settings.theme) { - if (!SUPPORTS_DARK_MODE_NATIVELY) { - val currentValue = AppCompatDelegate.getDefaultNightMode() - - if (settings.theme == AppSettings.Theme.LIGHT && currentValue != AppCompatDelegate.MODE_NIGHT_NO) { - AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO) - } else if (settings.theme == AppSettings.Theme.DARK && currentValue != AppCompatDelegate.MODE_NIGHT_YES) { - AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES) - } - } - } - NavHost( modifier = Modifier .background(MaterialTheme.colorScheme.background),