diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 63e45933..0532e0b4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -46,6 +46,12 @@ + + () + + with(requiredScreens) { + with(requirements) { + if (firstRun || language) add(LanguageScreen().apply { route = "language" }) + if (firstRun) add(WelcomeScreen().apply { route = "welcome" }) + if (firstRun || saveFolder) add(SaveFolderScreen().apply { route = "saveFolder" }) + if (firstRun || mappings) add(MappingsScreen().apply { route = "mappings" }) + if (firstRun || ffmpeg) add(FfmpegScreen().apply { route = "ffmpeg" }) + } + } + + if (requiredScreens.isEmpty()) { + finish() + return + } + + setContent { + val navController = rememberNavController() + val canGoNext = remember { mutableStateOf(false) } + + fun nextScreen() { + if (!canGoNext.value) return + canGoNext.value = false + if (requiredScreens.size > 1) { + requiredScreens.removeFirst() + navController.navigate(requiredScreens.first().route) + } else { + finish() + } + } + + AppMaterialTheme { + Scaffold( + containerColor = MaterialTheme.colorScheme.background, + bottomBar = { + Column( + modifier = Modifier + .fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally + ) { + val alpha: Float by animateFloatAsState(if (canGoNext.value) 1f else 0f, + label = "NextButton" + ) + + FilledIconButton( + onClick = { nextScreen() }, + modifier = Modifier.padding(50.dp) + .width(60.dp) + .height(60.dp) + .alpha(alpha) + ) { + Icon( + imageVector = Icons.Default.ArrowForwardIos, + contentDescription = null + ) + } + } + }, + ) { paddingValues -> + Column( + modifier = Modifier + .background(MaterialTheme.colorScheme.background) + .fillMaxSize() + .padding(paddingValues) + ) { + NavHost( + navController = navController, + startDestination = requiredScreens.first().route + ) { + requiredScreens.forEach { screen -> + screen.allowNext = { canGoNext.value = it } + composable(screen.route) { + Column( + modifier = Modifier.fillMaxSize(), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally + ) { + screen.Content() + } + } + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/manager/setup/screens/SetupScreen.kt b/app/src/main/kotlin/me/rhunk/snapenhance/manager/setup/screens/SetupScreen.kt new file mode 100644 index 00000000..d1600f8d --- /dev/null +++ b/app/src/main/kotlin/me/rhunk/snapenhance/manager/setup/screens/SetupScreen.kt @@ -0,0 +1,11 @@ +package me.rhunk.snapenhance.manager.setup.screens + +import androidx.compose.runtime.Composable + +abstract class SetupScreen { + lateinit var allowNext: (Boolean) -> Unit + lateinit var route: String + + @Composable + abstract fun Content() +} \ No newline at end of file diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/manager/setup/screens/impl/FfmpegScreen.kt b/app/src/main/kotlin/me/rhunk/snapenhance/manager/setup/screens/impl/FfmpegScreen.kt new file mode 100644 index 00000000..3e9693b6 --- /dev/null +++ b/app/src/main/kotlin/me/rhunk/snapenhance/manager/setup/screens/impl/FfmpegScreen.kt @@ -0,0 +1,17 @@ +package me.rhunk.snapenhance.manager.setup.screens.impl + +import androidx.compose.material3.Button +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import me.rhunk.snapenhance.manager.setup.screens.SetupScreen + +class FfmpegScreen : SetupScreen() { + + @Composable + override fun Content() { + Text(text = "FFmpeg") + Button(onClick = { allowNext(true) }) { + Text(text = "Next") + } + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/manager/setup/screens/impl/LanguageScreen.kt b/app/src/main/kotlin/me/rhunk/snapenhance/manager/setup/screens/impl/LanguageScreen.kt new file mode 100644 index 00000000..f574b115 --- /dev/null +++ b/app/src/main/kotlin/me/rhunk/snapenhance/manager/setup/screens/impl/LanguageScreen.kt @@ -0,0 +1,12 @@ +package me.rhunk.snapenhance.manager.setup.screens.impl + +import androidx.compose.runtime.Composable +import me.rhunk.snapenhance.manager.setup.screens.SetupScreen + +class LanguageScreen : SetupScreen(){ + + @Composable + override fun Content() { + + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/manager/setup/screens/impl/MappingsScreen.kt b/app/src/main/kotlin/me/rhunk/snapenhance/manager/setup/screens/impl/MappingsScreen.kt new file mode 100644 index 00000000..1b5d1748 --- /dev/null +++ b/app/src/main/kotlin/me/rhunk/snapenhance/manager/setup/screens/impl/MappingsScreen.kt @@ -0,0 +1,16 @@ +package me.rhunk.snapenhance.manager.setup.screens.impl + +import androidx.compose.material3.Button +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import me.rhunk.snapenhance.manager.setup.screens.SetupScreen + +class MappingsScreen : SetupScreen() { + @Composable + override fun Content() { + Text(text = "Mappings") + Button(onClick = { allowNext(true) }) { + Text(text = "Next") + } + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/manager/setup/screens/impl/SaveFolderScreen.kt b/app/src/main/kotlin/me/rhunk/snapenhance/manager/setup/screens/impl/SaveFolderScreen.kt new file mode 100644 index 00000000..62df1980 --- /dev/null +++ b/app/src/main/kotlin/me/rhunk/snapenhance/manager/setup/screens/impl/SaveFolderScreen.kt @@ -0,0 +1,17 @@ +package me.rhunk.snapenhance.manager.setup.screens.impl + +import androidx.compose.material3.Button +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import me.rhunk.snapenhance.manager.setup.screens.SetupScreen + +class SaveFolderScreen : SetupScreen() { + + @Composable + override fun Content() { + Text(text = "SaveFolder") + Button(onClick = {allowNext(true)}) { + Text(text = "Next") + } + } +} \ No newline at end of file diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/manager/setup/screens/impl/WelcomeScreen.kt b/app/src/main/kotlin/me/rhunk/snapenhance/manager/setup/screens/impl/WelcomeScreen.kt new file mode 100644 index 00000000..64c348ef --- /dev/null +++ b/app/src/main/kotlin/me/rhunk/snapenhance/manager/setup/screens/impl/WelcomeScreen.kt @@ -0,0 +1,17 @@ +package me.rhunk.snapenhance.manager.setup.screens.impl + +import androidx.compose.material3.Button +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import me.rhunk.snapenhance.manager.setup.screens.SetupScreen + +class WelcomeScreen : SetupScreen() { + + @Composable + override fun Content() { + Text(text = "Welcome") + Button(onClick = { allowNext(true) }) { + Text(text = "Next") + } + } +} \ No newline at end of file