impr: LoginActivity.kt

- Style changed
- Added loading indicator
- Added login/password validation
This commit is contained in:
Sweetbread 2025-04-23 16:38:29 +03:00
parent 5e15a75664
commit 55ff6e6cd1
Signed by: Sweetbread
GPG Key ID: 17A5CB9A7DD85319

View File

@ -1,3 +1,8 @@
/*
* Created by sweetbread
* Copyright (c) 2025. All rights reserved.
*/
package ru.sweetbread.unn.ui.layout
import android.os.Bundle
@ -7,19 +12,20 @@ import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material3.Button
import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Scaffold
import androidx.compose.material3.SnackbarDuration
import androidx.compose.material3.SnackbarHost
import androidx.compose.material3.SnackbarHostState
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.material3.TextField
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
@ -74,21 +80,26 @@ class LoginActivity : ComponentActivity() {
SnackbarHost(hostState = snackbarHostState)
}
) { innerPadding ->
LoginPanel(Modifier.padding(innerPadding), { login, password ->
LoginData.login = login
LoginData.password = password
start<MainActivity>()
finish()
}, {
scope.launch {
snackbarHostState
.showSnackbar(
message = "Error",
duration = SnackbarDuration.Short
)
}
})
Box(Modifier.padding(innerPadding).fillMaxSize(), Alignment.Center) {
LoginPanel(
Modifier.imePadding(),
{ login, password ->
LoginData.login = login
LoginData.password = password
start<MainActivity>()
finish()
},
{
scope.launch {
snackbarHostState
.showSnackbar(
message = "Error",
duration = SnackbarDuration.Short
)
}
}
)
}
}
}
}
@ -107,48 +118,52 @@ fun LoginPanel(
var loading by remember { mutableStateOf(false) }
val scope = rememberCoroutineScope()
Box(Modifier.fillMaxSize(), Alignment.BottomCenter) {
Column(
modifier
.padding(32.dp, 0.dp)
.clip(RoundedCornerShape(10.dp, 10.dp))
.background(MaterialTheme.colorScheme.primaryContainer)
.padding(16.dp)
) {
TextField(
modifier = Modifier.padding(8.dp),
value = login,
onValueChange = { login = it },
singleLine = true,
label = { Text(stringResource(R.string.prompt_login)) }
)
Column(
modifier
.padding(32.dp, 0.dp)
.clip(RoundedCornerShape(10.dp))
.background(MaterialTheme.colorScheme.surfaceContainer)
.padding(16.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
OutlinedTextField(
modifier = Modifier.padding(8.dp),
value = login,
onValueChange = { login = it },
singleLine = true,
label = { Text(stringResource(R.string.prompt_login))},
placeholder = { Text("s23380101") }
)
TextField(
modifier = Modifier.padding(8.dp),
value = password,
onValueChange = { password = it },
singleLine = true,
label = { Text(stringResource(R.string.prompt_password)) },
visualTransformation = PasswordVisualTransformation(),
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password)
)
OutlinedTextField(
modifier = Modifier.padding(8.dp),
value = password,
onValueChange = { password = it },
singleLine = true,
label = { Text(stringResource(R.string.prompt_password)) },
visualTransformation = PasswordVisualTransformation(),
keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password)
)
Button(modifier = Modifier
.fillMaxWidth()
.padding(8.dp), onClick = {
Button(
modifier = Modifier.padding(8.dp),
enabled = login.trim().isNotEmpty() and password.trim().isNotEmpty() and !loading,
onClick = {
loading = true
scope.launch {
if (auth(login, password)) {
if (auth(login, password))
ok(login, password)
} else {
else
error()
}
loading = false
}
}) {
Text(stringResource(R.string.sign_in))
}
) {
if (loading)
CircularProgressIndicator()
else
Text(stringResource(R.string.sign_in))
}
}
}