diff --git a/app/src/main/java/app/myzel394/alibi/MainActivity.kt b/app/src/main/java/app/myzel394/alibi/MainActivity.kt index 664b96e..7222997 100644 --- a/app/src/main/java/app/myzel394/alibi/MainActivity.kt +++ b/app/src/main/java/app/myzel394/alibi/MainActivity.kt @@ -14,6 +14,7 @@ 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.LockedApp import app.myzel394.alibi.ui.Navigation import app.myzel394.alibi.ui.SUPPORTS_DARK_MODE_NATIVELY import app.myzel394.alibi.ui.theme.AlibiTheme @@ -31,24 +32,6 @@ class MainActivity : AppCompatActivity() { WindowCompat.setDecorFitsSystemWindows(window, false) setContent { - val dataStore = LocalContext.current.dataStore - val settings = dataStore - .data - .collectAsState(initial = AppSettings.getDefaultInstance()) - .value - - 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) - } - } - } - AlibiTheme { Navigation() } diff --git a/app/src/main/java/app/myzel394/alibi/ui/LockedApp.kt b/app/src/main/java/app/myzel394/alibi/ui/LockedApp.kt new file mode 100644 index 0000000..b152ab8 --- /dev/null +++ b/app/src/main/java/app/myzel394/alibi/ui/LockedApp.kt @@ -0,0 +1,80 @@ +package app.myzel394.alibi.ui + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Fingerprint +import androidx.compose.material.icons.filled.Lock +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import app.myzel394.alibi.R + +// After this amount, close the app +const val MAX_TRIES = 5 + +@Composable +fun LockedApp() { + Scaffold { paddingValues -> + Column( + modifier = Modifier + .fillMaxSize() + .padding(paddingValues) + .padding(16.dp), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.SpaceBetween, + ) { + Box {} + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(16.dp), + ) { + Icon( + Icons.Default.Fingerprint, + contentDescription = null, + modifier = Modifier + .size(64.dp) + ) + Text( + text = stringResource(R.string.ui_locked_title), + style = MaterialTheme.typography.bodyLarge, + ) + } + Button( + modifier = Modifier + .fillMaxWidth() + .height(BIG_PRIMARY_BUTTON_SIZE), + onClick = {}, + colors = ButtonDefaults.filledTonalButtonColors(), + ) { + Icon( + Icons.Default.Lock, + contentDescription = null, + modifier = Modifier + .size(ButtonDefaults.IconSize) + ) + Spacer(modifier = Modifier.width(ButtonDefaults.IconSpacing)) + Text( + text = stringResource(R.string.ui_locked_unlocked), + style = MaterialTheme.typography.bodyLarge, + ) + } + } + } +} \ 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 d9a73dd..4860f10 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/Navigation.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/Navigation.kt @@ -3,6 +3,7 @@ package app.myzel394.alibi.ui import android.content.Context import android.hardware.camera2.CameraCharacteristics import android.hardware.camera2.CameraManager +import androidx.appcompat.app.AppCompatDelegate import androidx.camera.core.CameraX import androidx.compose.animation.core.tween import androidx.compose.animation.fadeIn @@ -24,6 +25,7 @@ import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import app.myzel394.alibi.dataStore +import app.myzel394.alibi.db.AppSettings import app.myzel394.alibi.ui.enums.Screen import app.myzel394.alibi.ui.models.AudioRecorderModel import app.myzel394.alibi.ui.models.VideoRecorderModel @@ -59,6 +61,18 @@ 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), @@ -84,6 +98,7 @@ fun Navigation( navController = navController, audioRecorder = audioRecorder, videoRecorder = videoRecorder, + settings = settings, ) } composable( diff --git a/app/src/main/java/app/myzel394/alibi/ui/screens/RecorderScreen.kt b/app/src/main/java/app/myzel394/alibi/ui/screens/RecorderScreen.kt index 026d89b..cb5d969 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/screens/RecorderScreen.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/screens/RecorderScreen.kt @@ -40,12 +40,11 @@ fun RecorderScreen( navController: NavController, audioRecorder: AudioRecorderModel, videoRecorder: VideoRecorderModel, + settings: AppSettings, ) { val snackbarHostState = remember { SnackbarHostState() } val context = LocalContext.current - val settings = rememberSettings() - RecorderEventsHandler( settings = settings, snackbarHostState = snackbarHostState, diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 82ea4f6..eacf755 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -160,4 +160,6 @@ Recording started %s Saving now will save until %s Video Recorder is starting... + Alibi is locked + Unlock \ No newline at end of file