Merge pull request #77 from materoy/master

Refactoring to handle all navigation in the navigation.kt file
This commit is contained in:
Myzel394 2024-02-23 20:31:06 +01:00 committed by GitHub
commit 0ca094426e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
9 changed files with 33 additions and 42 deletions

1
.gitignore vendored
View File

@ -1,6 +1,7 @@
*.iml *.iml
.gradle .gradle
/local.properties /local.properties
/.idea
/.idea/caches /.idea/caches
/.idea/libraries /.idea/libraries
/.idea/modules.xml /.idea/modules.xml

View File

@ -1,18 +1,5 @@
package app.myzel394.alibi.ui package app.myzel394.alibi.ui
import android.content.Context
import android.hardware.biometrics.BiometricManager.Authenticators.BIOMETRIC_STRONG
import android.hardware.biometrics.BiometricManager.Authenticators.DEVICE_CREDENTIAL
import android.hardware.biometrics.BiometricPrompt
import android.hardware.biometrics.BiometricPrompt.CryptoObject
import android.hardware.camera2.CameraCharacteristics
import android.hardware.camera2.CameraManager
import android.os.Build
import android.os.CancellationSignal
import android.widget.Button
import androidx.annotation.RequiresApi
import androidx.appcompat.app.AppCompatDelegate
import androidx.camera.core.CameraX
import androidx.compose.animation.core.tween import androidx.compose.animation.core.tween
import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut import androidx.compose.animation.fadeOut
@ -24,28 +11,22 @@ import androidx.compose.foundation.background
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState import androidx.compose.runtime.collectAsState
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.core.content.ContextCompat
import androidx.lifecycle.viewmodel.compose.viewModel import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.compose.NavHost import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController import androidx.navigation.compose.rememberNavController
import app.myzel394.alibi.R
import app.myzel394.alibi.dataStore import app.myzel394.alibi.dataStore
import app.myzel394.alibi.db.AppSettings
import app.myzel394.alibi.ui.enums.Screen import app.myzel394.alibi.ui.enums.Screen
import app.myzel394.alibi.ui.models.AudioRecorderModel import app.myzel394.alibi.ui.models.AudioRecorderModel
import app.myzel394.alibi.ui.models.VideoRecorderModel import app.myzel394.alibi.ui.models.VideoRecorderModel
import app.myzel394.alibi.ui.screens.AboutScreen import app.myzel394.alibi.ui.screens.AboutScreen
import app.myzel394.alibi.ui.screens.RecorderScreen
import app.myzel394.alibi.ui.screens.CustomRecordingNotificationsScreen import app.myzel394.alibi.ui.screens.CustomRecordingNotificationsScreen
import app.myzel394.alibi.ui.screens.RecorderScreen
import app.myzel394.alibi.ui.screens.SettingsScreen import app.myzel394.alibi.ui.screens.SettingsScreen
import app.myzel394.alibi.ui.screens.WelcomeScreen import app.myzel394.alibi.ui.screens.WelcomeScreen
import app.myzel394.alibi.ui.utils.CameraInfo
import app.myzel394.alibi.helpers.AppLockHelper
const val SCALE_IN = 1.25f const val SCALE_IN = 1.25f
@ -79,7 +60,7 @@ fun Navigation(
startDestination = if (settings.hasSeenOnboarding) Screen.AudioRecorder.route else Screen.Welcome.route, startDestination = if (settings.hasSeenOnboarding) Screen.AudioRecorder.route else Screen.Welcome.route,
) { ) {
composable(Screen.Welcome.route) { composable(Screen.Welcome.route) {
WelcomeScreen(navController = navController) WelcomeScreen(onNavigateToAudioRecorderScreen = { navController.navigate(Screen.AudioRecorder.route) })
} }
composable( composable(
Screen.AudioRecorder.route, Screen.AudioRecorder.route,
@ -94,7 +75,9 @@ fun Navigation(
} }
) { ) {
RecorderScreen( RecorderScreen(
navController = navController, onNavigateToSettingsScreen = {
navController.navigate(Screen.Settings.route)
},
audioRecorder = audioRecorder, audioRecorder = audioRecorder,
videoRecorder = videoRecorder, videoRecorder = videoRecorder,
settings = settings, settings = settings,
@ -110,7 +93,11 @@ fun Navigation(
} }
) { ) {
SettingsScreen( SettingsScreen(
navController = navController, onBackNavigate = navController::popBackStack,
onNavigateToCustomRecordingNotifications = {
navController.navigate(Screen.CustomRecordingNotifications.route)
},
onNavigateToAboutScreen = { navController.navigate(Screen.About.route) },
audioRecorder = audioRecorder, audioRecorder = audioRecorder,
videoRecorder = videoRecorder, videoRecorder = videoRecorder,
) )
@ -129,7 +116,7 @@ fun Navigation(
} }
) { ) {
CustomRecordingNotificationsScreen( CustomRecordingNotificationsScreen(
navController = navController, onBackNavigate = navController::popBackStack
) )
} }
composable( composable(
@ -142,7 +129,7 @@ fun Navigation(
} }
) { ) {
AboutScreen( AboutScreen(
navController = navController, onBackNavigate = navController::popBackStack,
) )
} }
} }

View File

@ -31,7 +31,7 @@ import app.myzel394.alibi.ui.enums.Screen
@Composable @Composable
fun AboutTile( fun AboutTile(
navController: NavController, onNavigateToAboutScreen: () -> Unit,
) { ) {
val label = stringResource(R.string.ui_about_title) val label = stringResource(R.string.ui_about_title)
@ -44,7 +44,7 @@ fun AboutTile(
contentDescription = label contentDescription = label
} }
.clickable { .clickable {
navController.navigate(Screen.About.route) onNavigateToAboutScreen()
} }
.background(MaterialTheme.colorScheme.surfaceVariant) .background(MaterialTheme.colorScheme.surfaceVariant)
.padding(16.dp), .padding(16.dp),

View File

@ -21,7 +21,7 @@ import app.myzel394.alibi.ui.enums.Screen
@Composable @Composable
fun CustomNotificationTile( fun CustomNotificationTile(
navController: NavController, onNavigateToCustomRecordingNotifications: () -> Unit,
settings: AppSettings, settings: AppSettings,
) { ) {
val dataStore = LocalContext.current.dataStore val dataStore = LocalContext.current.dataStore
@ -35,7 +35,8 @@ fun CustomNotificationTile(
SettingsTile( SettingsTile(
firstModifier = Modifier firstModifier = Modifier
.clickable { .clickable {
navController.navigate(Screen.CustomRecordingNotifications.route)
onNavigateToCustomRecordingNotifications()
} }
.semantics { contentDescription = label }, .semantics { contentDescription = label },
title = stringResource(R.string.ui_settings_option_customNotification_title), title = stringResource(R.string.ui_settings_option_customNotification_title),

View File

@ -53,7 +53,7 @@ import app.myzel394.alibi.ui.components.AboutScreen.atoms.GPGKeyOverview
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
fun AboutScreen( fun AboutScreen(
navController: NavController, onBackNavigate: () -> Unit
) { ) {
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior( val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(
rememberTopAppBarState() rememberTopAppBarState()
@ -67,7 +67,7 @@ fun AboutScreen(
Text(stringResource(R.string.ui_about_title)) Text(stringResource(R.string.ui_about_title))
}, },
navigationIcon = { navigationIcon = {
IconButton(onClick = navController::popBackStack) { IconButton(onClick = onBackNavigate) {
Icon( Icon(
Icons.Default.ArrowBack, Icons.Default.ArrowBack,
contentDescription = "Back" contentDescription = "Back"

View File

@ -50,7 +50,7 @@ import kotlinx.coroutines.launch
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
fun CustomRecordingNotificationsScreen( fun CustomRecordingNotificationsScreen(
navController: NavController, onBackNavigate: () -> Unit
) { ) {
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior( val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(
rememberTopAppBarState() rememberTopAppBarState()
@ -79,7 +79,7 @@ fun CustomRecordingNotificationsScreen(
Text(stringResource(R.string.ui_settings_option_customNotification_title)) Text(stringResource(R.string.ui_settings_option_customNotification_title))
}, },
navigationIcon = { navigationIcon = {
IconButton(onClick = navController::popBackStack) { IconButton(onClick = onBackNavigate) {
Icon( Icon(
Icons.Default.ArrowBack, Icons.Default.ArrowBack,
contentDescription = "Back" contentDescription = "Back"
@ -110,7 +110,7 @@ fun CustomRecordingNotificationsScreen(
}) })
} }
} }
navController.popBackStack() onBackNavigate()
} }
) )
} else { } else {

View File

@ -36,7 +36,7 @@ import app.myzel394.alibi.ui.models.VideoRecorderModel
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
fun RecorderScreen( fun RecorderScreen(
navController: NavController, onNavigateToSettingsScreen: () -> Unit,
audioRecorder: AudioRecorderModel, audioRecorder: AudioRecorderModel,
videoRecorder: VideoRecorderModel, videoRecorder: VideoRecorderModel,
settings: AppSettings, settings: AppSettings,
@ -82,7 +82,7 @@ fun RecorderScreen(
actions = { actions = {
IconButton( IconButton(
onClick = { onClick = {
navController.navigate(Screen.Settings.route) onNavigateToSettingsScreen()
}, },
) { ) {
Icon( Icon(

View File

@ -66,7 +66,9 @@ import kotlinx.coroutines.launch
@OptIn(ExperimentalMaterial3Api::class) @OptIn(ExperimentalMaterial3Api::class)
@Composable @Composable
fun SettingsScreen( fun SettingsScreen(
navController: NavController, onBackNavigate: () -> Unit,
onNavigateToCustomRecordingNotifications: () -> Unit,
onNavigateToAboutScreen: () -> Unit,
audioRecorder: AudioRecorderModel, audioRecorder: AudioRecorderModel,
videoRecorder: VideoRecorderModel, videoRecorder: VideoRecorderModel,
) { ) {
@ -97,7 +99,7 @@ fun SettingsScreen(
Text(stringResource(R.string.ui_settings_title)) Text(stringResource(R.string.ui_settings_title))
}, },
navigationIcon = { navigationIcon = {
IconButton(onClick = navController::popBackStack) { IconButton(onClick = onBackNavigate) {
Icon( Icon(
Icons.Default.ArrowBack, Icons.Default.ArrowBack,
contentDescription = "Back" contentDescription = "Back"
@ -141,7 +143,7 @@ fun SettingsScreen(
IntervalDurationTile(settings = settings) IntervalDurationTile(settings = settings)
InAppLanguagePicker() InAppLanguagePicker()
DeleteRecordingsImmediatelyTile(settings = settings) DeleteRecordingsImmediatelyTile(settings = settings)
CustomNotificationTile(navController = navController, settings = settings) CustomNotificationTile(onNavigateToCustomRecordingNotifications, settings = settings)
EnableAppLockTile(settings = settings) EnableAppLockTile(settings = settings)
SaveFolderTile( SaveFolderTile(
settings = settings, settings = settings,
@ -191,7 +193,7 @@ fun SettingsScreen(
ImportExport(snackbarHostState = snackbarHostState) ImportExport(snackbarHostState = snackbarHostState)
} }
} }
AboutTile(navController = navController) AboutTile(onNavigateToAboutScreen)
} }
} }
} }

View File

@ -23,7 +23,7 @@ import kotlinx.coroutines.launch
@OptIn(ExperimentalFoundationApi::class) @OptIn(ExperimentalFoundationApi::class)
@Composable @Composable
fun WelcomeScreen( fun WelcomeScreen(
navController: NavController, onNavigateToAudioRecorderScreen: () -> Unit
) { ) {
val context = LocalContext.current val context = LocalContext.current
val dataStore = context.dataStore val dataStore = context.dataStore
@ -59,7 +59,7 @@ fun WelcomeScreen(
dataStore.updateData { dataStore.updateData {
settings.setHasSeenOnboarding(true) settings.setHasSeenOnboarding(true)
} }
navController.navigate(Screen.AudioRecorder.route) onNavigateToAudioRecorderScreen()
} }
} }
} }