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 76a1f7c..e9c0f99 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/Navigation.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/Navigation.kt @@ -5,6 +5,8 @@ import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.animation.scaleIn import androidx.compose.animation.scaleOut +import androidx.compose.animation.slideInHorizontally +import androidx.compose.animation.slideOutHorizontally import androidx.compose.foundation.background import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable @@ -25,6 +27,7 @@ import app.myzel394.alibi.db.LastRecording import app.myzel394.alibi.ui.enums.Screen import app.myzel394.alibi.ui.models.AudioRecorderModel import app.myzel394.alibi.ui.screens.AudioRecorder +import app.myzel394.alibi.ui.screens.CustomRecordingNotificationsScreen import app.myzel394.alibi.ui.screens.SettingsScreen import app.myzel394.alibi.ui.screens.WelcomeScreen @@ -90,5 +93,22 @@ fun Navigation( audioRecorder = audioRecorder, ) } + composable( + Screen.CustomRecordingNotifications.route, + enterTransition = { + slideInHorizontally( + initialOffsetX = { it -> it / 2 } + ) + fadeIn() + }, + exitTransition = { + slideOutHorizontally( + targetOffsetX = { it -> it / 2 } + ) + fadeOut() + } + ) { + CustomRecordingNotificationsScreen( + navController = navController, + ) + } } } diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/CustomNotificationTile.kt b/app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/CustomNotificationTile.kt index 288d88c..76be693 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/CustomNotificationTile.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/components/SettingsScreen/atoms/CustomNotificationTile.kt @@ -12,13 +12,17 @@ import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.stringResource import androidx.compose.ui.semantics.contentDescription import androidx.compose.ui.semantics.semantics +import androidx.navigation.NavController import app.myzel394.alibi.R import app.myzel394.alibi.dataStore import app.myzel394.alibi.db.AppSettings import app.myzel394.alibi.ui.components.atoms.SettingsTile +import app.myzel394.alibi.ui.enums.Screen @Composable -fun CustomNotificationTile() { +fun CustomNotificationTile( + navController: NavController, +) { val dataStore = LocalContext.current.dataStore val settings = dataStore .data @@ -33,7 +37,9 @@ fun CustomNotificationTile() { SettingsTile( firstModifier = Modifier - .clickable { } + .clickable { + navController.navigate(Screen.CustomRecordingNotifications.route) + } .semantics { contentDescription = label }, title = stringResource(R.string.ui_settings_option_customNotification_title), description = label, diff --git a/app/src/main/java/app/myzel394/alibi/ui/enums/Screen.kt b/app/src/main/java/app/myzel394/alibi/ui/enums/Screen.kt index 136d7b8..218bde3 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/enums/Screen.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/enums/Screen.kt @@ -1,9 +1,10 @@ package app.myzel394.alibi.ui.enums sealed class Screen(val route: String) { - object AudioRecorder : Screen("audio-recorder") - object Settings : Screen("settings") - object Welcome : Screen("welcome") + data object AudioRecorder : Screen("audio-recorder") + data object Settings : Screen("settings") + data object Welcome : Screen("welcome") + data object CustomRecordingNotifications : Screen("custom-recording-notifications") fun withArgs(vararg args: String): String { return buildString { diff --git a/app/src/main/java/app/myzel394/alibi/ui/screens/CustomRecordingNotificationsScreen.kt b/app/src/main/java/app/myzel394/alibi/ui/screens/CustomRecordingNotificationsScreen.kt new file mode 100644 index 0000000..26396c8 --- /dev/null +++ b/app/src/main/java/app/myzel394/alibi/ui/screens/CustomRecordingNotificationsScreen.kt @@ -0,0 +1,100 @@ +package app.myzel394.alibi.ui.screens + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ArrowBack +import androidx.compose.material3.Divider +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.LargeTopAppBar +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Snackbar +import androidx.compose.material3.SnackbarHost +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.material3.rememberTopAppBarState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.unit.dp +import androidx.navigation.NavController +import app.myzel394.alibi.R +import app.myzel394.alibi.dataStore +import app.myzel394.alibi.db.AppSettings +import app.myzel394.alibi.ui.SUPPORTS_DARK_MODE_NATIVELY +import app.myzel394.alibi.ui.components.SettingsScreen.atoms.BitrateTile +import app.myzel394.alibi.ui.components.SettingsScreen.atoms.CustomNotificationTile +import app.myzel394.alibi.ui.components.SettingsScreen.atoms.EncoderTile +import app.myzel394.alibi.ui.components.SettingsScreen.atoms.ForceExactMaxDurationTile +import app.myzel394.alibi.ui.components.SettingsScreen.atoms.ImportExport +import app.myzel394.alibi.ui.components.SettingsScreen.atoms.InAppLanguagePicker +import app.myzel394.alibi.ui.components.SettingsScreen.atoms.IntervalDurationTile +import app.myzel394.alibi.ui.components.SettingsScreen.atoms.MaxDurationTile +import app.myzel394.alibi.ui.components.SettingsScreen.atoms.OutputFormatTile +import app.myzel394.alibi.ui.components.SettingsScreen.atoms.SamplingRateTile +import app.myzel394.alibi.ui.components.SettingsScreen.atoms.ThemeSelector +import app.myzel394.alibi.ui.components.atoms.GlobalSwitch +import app.myzel394.alibi.ui.components.atoms.MessageBox +import app.myzel394.alibi.ui.components.atoms.MessageType +import kotlinx.coroutines.launch + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun CustomRecordingNotificationsScreen( + navController: NavController, +) { + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior( + rememberTopAppBarState() + ) + + val dataStore = LocalContext.current.dataStore + val settings = dataStore + .data + .collectAsState(initial = AppSettings.getDefaultInstance()) + .value + + Scaffold( + topBar = { + LargeTopAppBar( + title = { + Text(stringResource(R.string.ui_settings_option_customNotification_title)) + }, + navigationIcon = { + IconButton(onClick = navController::popBackStack) { + Icon( + Icons.Default.ArrowBack, + contentDescription = "Back" + ) + } + }, + scrollBehavior = scrollBehavior, + ) + }, + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection) + ) { padding -> + Column( + modifier = Modifier + .fillMaxSize() + .padding(padding) + .verticalScroll(rememberScrollState()), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + } + } +} \ No newline at end of file diff --git a/app/src/main/java/app/myzel394/alibi/ui/screens/SettingsScreen.kt b/app/src/main/java/app/myzel394/alibi/ui/screens/SettingsScreen.kt index 5235937..b64a964 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/screens/SettingsScreen.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/screens/SettingsScreen.kt @@ -146,7 +146,7 @@ fun SettingsScreen( IntervalDurationTile() ForceExactMaxDurationTile() InAppLanguagePicker() - CustomNotificationTile() + CustomNotificationTile(navController = navController) AnimatedVisibility(visible = settings.showAdvancedSettings) { Column( horizontalAlignment = Alignment.CenterHorizontally,