From e968e7e589dd71f5f5a67496f11ed3c1b07f1770 Mon Sep 17 00:00:00 2001 From: Myzel394 <50424412+Myzel394@users.noreply.github.com> Date: Thu, 21 Mar 2024 22:58:35 +0100 Subject: [PATCH] feat: Add SaveFolderPage Signed-off-by: Myzel394 <50424412+Myzel394@users.noreply.github.com> --- .../java/app/myzel394/alibi/ui/Navigation.kt | 2 +- .../WelcomeScreen/pages/SaveFolderPage.kt | 102 ++++++++++++++++++ .../alibi/ui/screens/WelcomeScreen.kt | 12 +++ app/src/main/res/values/strings.xml | 2 + 4 files changed, 117 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/app/myzel394/alibi/ui/components/WelcomeScreen/pages/SaveFolderPage.kt 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 a2d5b36..30f119d 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/Navigation.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/Navigation.kt @@ -57,7 +57,7 @@ fun Navigation( modifier = Modifier .background(MaterialTheme.colorScheme.background), navController = navController, - startDestination = if (settings.hasSeenOnboarding) Screen.AudioRecorder.route else Screen.Welcome.route, + startDestination = Screen.Welcome.route, ) { composable(Screen.Welcome.route) { WelcomeScreen(onNavigateToAudioRecorderScreen = { navController.navigate(Screen.AudioRecorder.route) }) diff --git a/app/src/main/java/app/myzel394/alibi/ui/components/WelcomeScreen/pages/SaveFolderPage.kt b/app/src/main/java/app/myzel394/alibi/ui/components/WelcomeScreen/pages/SaveFolderPage.kt new file mode 100644 index 0000000..73ebbf5 --- /dev/null +++ b/app/src/main/java/app/myzel394/alibi/ui/components/WelcomeScreen/pages/SaveFolderPage.kt @@ -0,0 +1,102 @@ +package app.myzel394.alibi.ui.components.WelcomeScreen.pages + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +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.automirrored.filled.InsertDriveFile +import androidx.compose.material.icons.filled.ChevronLeft +import androidx.compose.material.icons.filled.ChevronRight +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +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 +import app.myzel394.alibi.ui.BIG_PRIMARY_BUTTON_SIZE +import app.myzel394.alibi.ui.components.WelcomeScreen.atoms.SaveFolderSelection + +@Composable +fun SaveFolderPage( + onBack: () -> Unit, + onContinue: () -> Unit, +) { + Column( + modifier = Modifier.fillMaxSize(), + verticalArrangement = Arrangement.SpaceBetween, + horizontalAlignment = Alignment.CenterHorizontally, + ) { + Spacer(modifier = Modifier.weight(1f)) + Column( + modifier = Modifier + .padding(horizontal = 32.dp), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally, + ) { + Icon( + Icons.AutoMirrored.Filled.InsertDriveFile, + contentDescription = null, + tint = MaterialTheme.colorScheme.tertiary, + modifier = Modifier.size(128.dp), + ) + Spacer(modifier = Modifier.height(32.dp)) + Text( + stringResource(R.string.ui_welcome_saveFolder_title), + style = MaterialTheme.typography.titleLarge, + ) + Spacer(modifier = Modifier.height(16.dp)) + Text( + stringResource(R.string.ui_welcome_saveFolder_message), + ) + } + Spacer(modifier = Modifier.weight(1f)) + SaveFolderSelection() + Spacer(modifier = Modifier.weight(1f)) + Row( + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + horizontalArrangement = Arrangement.spacedBy(16.dp), + ) { + IconButton( + onClick = onBack, + modifier = Modifier + .size(BIG_PRIMARY_BUTTON_SIZE), + ) { + Icon( + Icons.Default.ChevronLeft, + contentDescription = null, + ) + } + Button( + onClick = onContinue, + modifier = Modifier + .fillMaxWidth() + .height(BIG_PRIMARY_BUTTON_SIZE), + contentPadding = ButtonDefaults.ButtonWithIconContentPadding, + ) { + Icon( + Icons.Default.ChevronRight, + contentDescription = null, + modifier = Modifier.size(ButtonDefaults.IconSize) + ) + Spacer(modifier = Modifier.width(ButtonDefaults.IconSpacing)) + Text(stringResource(R.string.continue_label)) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/app/myzel394/alibi/ui/screens/WelcomeScreen.kt b/app/src/main/java/app/myzel394/alibi/ui/screens/WelcomeScreen.kt index 084a8f2..eebd65c 100644 --- a/app/src/main/java/app/myzel394/alibi/ui/screens/WelcomeScreen.kt +++ b/app/src/main/java/app/myzel394/alibi/ui/screens/WelcomeScreen.kt @@ -16,6 +16,7 @@ import androidx.compose.ui.platform.LocalContext import app.myzel394.alibi.dataStore import app.myzel394.alibi.ui.components.WelcomeScreen.pages.ExplanationPage import app.myzel394.alibi.ui.components.WelcomeScreen.pages.ResponsibilityPage +import app.myzel394.alibi.ui.components.WelcomeScreen.pages.SaveFolderPage import app.myzel394.alibi.ui.components.WelcomeScreen.pages.TimeSettingsPage import kotlinx.coroutines.launch @@ -74,6 +75,17 @@ fun WelcomeScreen( pagerState.animateScrollToPage(3) } } + + 3 -> SaveFolderPage( + onBack = { + scope.launch { + pagerState.animateScrollToPage(2) + } + }, + onContinue = { + finishTutorial() + } + ) } } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2436d62..68add45 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -203,4 +203,6 @@ 1 hour Select %s You can change this anytime + Where should Alibi store the batches? + By default, Alibi stores the batches into its own private, encrypted storage. You can change this and specify an external, unencrypted folder. If you want to let Alibi remember more than 15 minutes, you should choose an external folder, as the internal folder is very small. \ No newline at end of file