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