mirror of
https://github.com/Myzel394/Alibi.git
synced 2025-06-19 07:15:25 +02:00
feat: Improve AsLockedApp
This commit is contained in:
parent
6661d457ea
commit
2d22a65506
@ -2,21 +2,19 @@ package app.myzel394.alibi
|
|||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.view.MotionEvent
|
|
||||||
import androidx.activity.ComponentActivity
|
|
||||||
import androidx.activity.compose.setContent
|
import androidx.activity.compose.setContent
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
import androidx.appcompat.app.AppCompatDelegate
|
import androidx.compose.foundation.background
|
||||||
import androidx.compose.runtime.LaunchedEffect
|
import androidx.compose.foundation.layout.Box
|
||||||
import androidx.compose.runtime.collectAsState
|
import androidx.compose.foundation.layout.fillMaxSize
|
||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.material3.MaterialTheme
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.core.view.WindowCompat
|
import androidx.core.view.WindowCompat
|
||||||
import androidx.datastore.dataStore
|
import androidx.datastore.dataStore
|
||||||
import app.myzel394.alibi.db.AppSettings
|
|
||||||
import app.myzel394.alibi.db.AppSettingsSerializer
|
import app.myzel394.alibi.db.AppSettingsSerializer
|
||||||
import app.myzel394.alibi.ui.AsLockedApp
|
import app.myzel394.alibi.ui.AsLockedApp
|
||||||
|
import app.myzel394.alibi.ui.LockedAppHandlers
|
||||||
import app.myzel394.alibi.ui.Navigation
|
import app.myzel394.alibi.ui.Navigation
|
||||||
import app.myzel394.alibi.ui.SUPPORTS_DARK_MODE_NATIVELY
|
|
||||||
import app.myzel394.alibi.ui.theme.AlibiTheme
|
import app.myzel394.alibi.ui.theme.AlibiTheme
|
||||||
|
|
||||||
const val SETTINGS_FILE = "settings.json"
|
const val SETTINGS_FILE = "settings.json"
|
||||||
@ -33,6 +31,15 @@ class MainActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
setContent {
|
setContent {
|
||||||
AlibiTheme {
|
AlibiTheme {
|
||||||
|
LockedAppHandlers()
|
||||||
|
|
||||||
|
Box(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxSize()
|
||||||
|
.background(
|
||||||
|
MaterialTheme.colorScheme.background
|
||||||
|
)
|
||||||
|
) {
|
||||||
AsLockedApp {
|
AsLockedApp {
|
||||||
Navigation()
|
Navigation()
|
||||||
}
|
}
|
||||||
@ -40,3 +47,4 @@ class MainActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
@ -39,8 +39,9 @@ import app.myzel394.alibi.helpers.AppLockHelper
|
|||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
|
||||||
// After this amount, close the app
|
// 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
|
@Composable
|
||||||
fun AsLockedApp(
|
fun AsLockedApp(
|
||||||
content: (@Composable () -> Unit),
|
content: (@Composable () -> Unit),
|
||||||
|
32
app/src/main/java/app/myzel394/alibi/ui/LockedAppHandlers.kt
Normal file
32
app/src/main/java/app/myzel394/alibi/ui/LockedAppHandlers.kt
Normal file
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -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(
|
NavHost(
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.background(MaterialTheme.colorScheme.background),
|
.background(MaterialTheme.colorScheme.background),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user