diff --git a/app/src/main/java/de/lelehier/keeper/MainActivity.kt b/app/src/main/java/de/lelehier/keeper/MainActivity.kt index 6dcc779..1c7d63b 100644 --- a/app/src/main/java/de/lelehier/keeper/MainActivity.kt +++ b/app/src/main/java/de/lelehier/keeper/MainActivity.kt @@ -1,16 +1,39 @@ package de.lelehier.keeper +import android.icu.text.StringSearch import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.defaultMinSize +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.Button +import androidx.compose.material3.ElevatedButton +import androidx.compose.material3.FilledIconButton +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Scaffold +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.MutableState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.painter.Painter +import androidx.compose.ui.text.input.TextFieldValue +import androidx.compose.ui.tooling.preview.Preview import de.lelehier.keeper.ui.theme.KeeperTheme -import de.lelehier.keeper.screens.HomeScreen +import de.lelehier.keeper.screens.Greeting +import de.lelehier.keeper.screens.homeScreen class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { @@ -19,9 +42,14 @@ class MainActivity : ComponentActivity() { setContent { KeeperTheme { var currentScreen by remember { mutableStateOf(0) } + var nextScreen by remember { mutableStateOf(1) } + var serverURL = "" + var username by remember { mutableStateOf("") } + var password by remember { mutableStateOf("") } + var apiKey by remember { mutableStateOf("") } Scaffold() { paddingValues -> - HomeScreen(paddingValues) + homeScreen(paddingValues) } } } diff --git a/app/src/main/java/de/lelehier/keeper/screens/home_screen.kt b/app/src/main/java/de/lelehier/keeper/screens/home_screen.kt index 8a8dbc0..8537d1b 100644 --- a/app/src/main/java/de/lelehier/keeper/screens/home_screen.kt +++ b/app/src/main/java/de/lelehier/keeper/screens/home_screen.kt @@ -25,7 +25,6 @@ import androidx.compose.material3.OutlinedTextField import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue -import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable @@ -42,9 +41,9 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @Composable -fun HomeScreen(paddingValues: PaddingValues) { - var currentScreen by rememberSaveable { mutableIntStateOf(0) } - var nextScreen by rememberSaveable { mutableIntStateOf(1) } +fun homeScreen(paddingValues: PaddingValues) { + var currentScreen by rememberSaveable { mutableStateOf(0) } + var nextScreen by rememberSaveable { mutableStateOf(1) } var serverURL by rememberSaveable { mutableStateOf("") } var username by rememberSaveable { mutableStateOf("") } var password by rememberSaveable { mutableStateOf("") } @@ -57,7 +56,7 @@ fun HomeScreen(paddingValues: PaddingValues) { .imePadding(), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.Center) { - Greeting(serverURL, currentScreen); + Greeting(serverURL); AnimatedContent( targetState = currentScreen, transitionSpec = { @@ -67,20 +66,12 @@ fun HomeScreen(paddingValues: PaddingValues) { }, ) { targetState -> when(targetState) { - 0 -> serverDialog(serverURL, {newServerURL -> serverURL = newServerURL }) - 1 -> passwordDialog(username, password, {newUsername -> username = newUsername}, {newPassword -> password = newPassword }) + 0 -> serverDialog(serverURL) + 1 -> passwordDialog(username, password) } } - Button( - onClick = {currentScreen = nextScreen}, - modifier = Modifier.padding(top = 24.dp), - enabled = when(currentScreen) { - 0 -> isValidUrl(serverURL) - 1 -> username.isNotEmpty() && password.isNotEmpty() - else -> false - }, - ) { + Button(onClick = {currentScreen = nextScreen}, modifier = Modifier.padding(top = 24.dp)) { Row() { Text(text = "Next") } @@ -89,15 +80,13 @@ fun HomeScreen(paddingValues: PaddingValues) { } @Composable -fun Greeting(serverURL: String, currentScreen: Int) { +fun Greeting(serverURL: String) { Column (horizontalAlignment = Alignment.CenterHorizontally, modifier = Modifier.padding(bottom = 24.dp)) { - AnimatedVisibility (currentScreen == 0) { - Text( - text = "Welcome to", - style = MaterialTheme.typography.headlineLarge, - textAlign = TextAlign.Center - ) - } + Text( + text = "Welcome to", + style = MaterialTheme.typography.headlineLarge, + textAlign = TextAlign.Center + ) Text( text = "Keeper", style = TextStyle( @@ -106,20 +95,13 @@ fun Greeting(serverURL: String, currentScreen: Int) { brush = Brush.linearGradient(listOf(MaterialTheme.colorScheme.onPrimaryContainer, MaterialTheme.colorScheme.onSecondaryContainer))), textAlign = TextAlign.Center, ) - AnimatedVisibility(currentScreen != 0) { - Text( - text = "@$serverURL", - style = MaterialTheme.typography.titleSmall, - textAlign = TextAlign.Center - ) - } } } @Composable -fun serverDialog(serverURL: String, updateServerURL: (newServerURL: String) -> Unit) { +fun serverDialog(serverURL: String) { var serverURL by remember { mutableStateOf("") } OutlinedTextField( label = { Text(text = "Server URL") }, @@ -127,11 +109,10 @@ fun serverDialog(serverURL: String, updateServerURL: (newServerURL: String) -> U value = serverURL, onValueChange = { text -> serverURL = text - updateServerURL(serverURL) }, keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Uri), supportingText = { - AnimatedVisibility(!isValidUrl(serverURL) && serverURL != "") { + AnimatedVisibility(!isValidUrl(serverURL)) { Text( text = "No valid URL", color = MaterialTheme.colorScheme.error @@ -152,7 +133,7 @@ fun isValidUrl(url: String): Boolean { } @Composable -fun passwordDialog(username: String, password: String, updateUsername: (newUsername: String) -> Unit, updatePassword: (newPassword: String) -> Unit) { +fun passwordDialog(username: String, password: String) { var username by remember { mutableStateOf("") } var password by remember { mutableStateOf("") } Column { @@ -162,7 +143,6 @@ fun passwordDialog(username: String, password: String, updateUsername: (newUsern value = username, onValueChange = { text -> username = text - updateUsername(username) }); OutlinedTextField( label = { Text(text = "Password") }, @@ -170,7 +150,6 @@ fun passwordDialog(username: String, password: String, updateUsername: (newUsern value = password, onValueChange = { text -> password = text - updatePassword(password) } )