Compare commits

..

No commits in common. "2056e7f8d4f07e18dc59c2ec472c0c3ff53cec8d" and "ac695e31090cec3db8f03a7fbd6c749a15ec02d0" have entirely different histories.

2 changed files with 46 additions and 39 deletions

View file

@ -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)
}
}
}

View file

@ -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)
}
)