commit 369ed0a8a640bea6e3728a1ccc3bc5225c020ad7
parent 79d3bb5ba922e54f728391458932c528067cef58
Author: rhunk <101876869+rhunk@users.noreply.github.com>
Date:   Wed,  2 Aug 2023 00:15:57 +0200

setup activity first impl

Diffstat:
Mapp/src/main/AndroidManifest.xml | 6++++++
Aapp/src/main/kotlin/me/rhunk/snapenhance/manager/setup/Requirements.kt | 33+++++++++++++++++++++++++++++++++
Aapp/src/main/kotlin/me/rhunk/snapenhance/manager/setup/SetupActivity.kt | 137+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Aapp/src/main/kotlin/me/rhunk/snapenhance/manager/setup/screens/SetupScreen.kt | 12++++++++++++
Aapp/src/main/kotlin/me/rhunk/snapenhance/manager/setup/screens/impl/FfmpegScreen.kt | 18++++++++++++++++++
Aapp/src/main/kotlin/me/rhunk/snapenhance/manager/setup/screens/impl/LanguageScreen.kt | 13+++++++++++++
Aapp/src/main/kotlin/me/rhunk/snapenhance/manager/setup/screens/impl/MappingsScreen.kt | 17+++++++++++++++++
Aapp/src/main/kotlin/me/rhunk/snapenhance/manager/setup/screens/impl/SaveFolderScreen.kt | 18++++++++++++++++++
Aapp/src/main/kotlin/me/rhunk/snapenhance/manager/setup/screens/impl/WelcomeScreen.kt | 18++++++++++++++++++
9 files changed, 272 insertions(+), 0 deletions(-)

diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml @@ -47,6 +47,12 @@ </intent-filter> </activity> <activity + android:name=".manager.setup.SetupActivity" + android:exported="true" + android:theme="@style/AppTheme" + android:excludeFromRecents="true"> + </activity> + <activity android:name=".ui.map.MapActivity" android:exported="true" android:excludeFromRecents="true" /> diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/manager/setup/Requirements.kt b/app/src/main/kotlin/me/rhunk/snapenhance/manager/setup/Requirements.kt @@ -0,0 +1,33 @@ +package me.rhunk.snapenhance.manager.setup + +import android.os.Bundle + +data class Requirements( + val firstRun: Boolean = false, + val language: Boolean = false, + val mappings: Boolean = false, + val saveFolder: Boolean = false, + val ffmpeg: Boolean = false +) { + companion object { + fun fromBundle(bundle: Bundle): Requirements { + return Requirements( + firstRun = bundle.getBoolean("firstRun"), + language = bundle.getBoolean("language"), + mappings = bundle.getBoolean("mappings"), + saveFolder = bundle.getBoolean("saveFolder"), + ffmpeg = bundle.getBoolean("ffmpeg") + ) + } + + fun toBundle(requirements: Requirements): Bundle { + return Bundle().apply { + putBoolean("firstRun", requirements.firstRun) + putBoolean("language", requirements.language) + putBoolean("mappings", requirements.mappings) + putBoolean("saveFolder", requirements.saveFolder) + putBoolean("ffmpeg", requirements.ffmpeg) + } + } + } +} diff --git a/app/src/main/kotlin/me/rhunk/snapenhance/manager/setup/SetupActivity.kt b/app/src/main/kotlin/me/rhunk/snapenhance/manager/setup/SetupActivity.kt @@ -0,0 +1,136 @@ +package me.rhunk.snapenhance.manager.setup + +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +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.width +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.ArrowForwardIos +import androidx.compose.material3.FilledIconButton +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.unit.dp +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.rememberNavController +import me.rhunk.snapenhance.manager.AppMaterialTheme +import me.rhunk.snapenhance.manager.setup.screens.SetupScreen +import me.rhunk.snapenhance.manager.setup.screens.impl.FfmpegScreen +import me.rhunk.snapenhance.manager.setup.screens.impl.LanguageScreen +import me.rhunk.snapenhance.manager.setup.screens.impl.MappingsScreen +import me.rhunk.snapenhance.manager.setup.screens.impl.SaveFolderScreen +import me.rhunk.snapenhance.manager.setup.screens.impl.WelcomeScreen + + +class SetupActivity : ComponentActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + val requirements = intent.getBundleExtra("requirements")?.let { + Requirements.fromBundle(it) + } ?: Requirements(firstRun = true) + + val requiredScreens = mutableListOf<SetupScreen>() + + 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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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