Merge pull request 'changed ui' (#4) from new_login_requirements_ui into main

Reviewed-on: Minipigi-org/NTO-2026-Android-TeamTask-Template#4
This commit is contained in:
student-i-nikolaevskiy 2026-02-25 08:35:20 +00:00
commit abe032cdda
4 changed files with 65 additions and 19 deletions

View File

@ -18,7 +18,7 @@
<activity <activity
android:name=".ui.root.RootActivity" android:name=".ui.root.RootActivity"
android:exported="true" android:exported="true"
android:windowSoftInputMode="adjustResize" android:windowSoftInputMode="adjustNothing"
android:label="@string/title_activity_root"> android:label="@string/title_activity_root">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />

View File

@ -1,6 +1,7 @@
package ru.myitschool.work.ui.root package ru.myitschool.work.ui.root
import android.os.Bundle import android.os.Bundle
import android.view.WindowManager.LayoutParams
import androidx.activity.ComponentActivity import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
@ -16,6 +17,7 @@ class RootActivity : ComponentActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
enableEdgeToEdge() enableEdgeToEdge()
actionBar?.hide() actionBar?.hide()
window.setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE)
setContent { setContent {
WorkTheme { WorkTheme {
Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding -> Scaffold(modifier = Modifier.fillMaxSize()) { innerPadding ->

View File

@ -5,11 +5,17 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material3.Button import androidx.compose.material3.Button
import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.Icon
import androidx.compose.material3.MaterialTheme import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TextField import androidx.compose.material3.TextField
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
@ -23,6 +29,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.testTag import androidx.compose.ui.platform.testTag
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
@ -51,13 +58,27 @@ fun AuthScreen(
Column( Column(
modifier = Modifier modifier = Modifier
.fillMaxSize() .fillMaxSize()
.padding(all = 24.dp), .padding(horizontal = 48.dp)
.verticalScroll(rememberScrollState())
.imePadding(),
horizontalAlignment = Alignment.CenterHorizontally, horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center verticalArrangement = Arrangement.Center
) { ) {
Icon(
painter = painterResource(R.drawable.difference),
contentDescription = stringResource(R.string.icon_alter),
tint = MaterialTheme.colorScheme.primary,
modifier = Modifier.size(184.dp)
)
Spacer(modifier = Modifier.size(48.dp))
Text( Text(
text = stringResource(R.string.auth_title), text = stringResource(R.string.auth_title_1),
style = MaterialTheme.typography.headlineSmall, style = MaterialTheme.typography.headlineLarge,
textAlign = TextAlign.Center
)
Text(
text = stringResource(R.string.auth_title_2),
style = MaterialTheme.typography.titleLarge,
textAlign = TextAlign.Center textAlign = TextAlign.Center
) )
when (val currentState = state) { when (val currentState = state) {
@ -76,26 +97,43 @@ private fun Content(
viewModel: AuthViewModel, viewModel: AuthViewModel,
state: AuthState.Data state: AuthState.Data
) { ) {
var inputText by remember { mutableStateOf("") } var login by remember { mutableStateOf("") }
Spacer(modifier = Modifier.size(16.dp)) var password by remember { mutableStateOf("") }
TextField(
Spacer(modifier = Modifier.size(48.dp))
OutlinedTextField(
modifier = Modifier.testTag(TestIds.Auth.CODE_INPUT).fillMaxWidth(), modifier = Modifier.testTag(TestIds.Auth.CODE_INPUT).fillMaxWidth(),
value = inputText, value = login,
onValueChange = { onValueChange = {
inputText = it login = it
viewModel.onIntent(AuthIntent.TextInput(it)) viewModel.onIntent(AuthIntent.TextInput(login, password))
}, },
label = { Text(stringResource(R.string.auth_label)) } placeholder = { Text(stringResource(R.string.auth_placeholder_login)) },
label = { Text(stringResource(R.string.auth_label_login)) }
) )
Spacer(modifier = Modifier.size(16.dp)) Spacer(modifier = Modifier.size(16.dp))
Button( OutlinedTextField(
modifier = Modifier.testTag(TestIds.Auth.SIGN_BUTTON).fillMaxWidth(), modifier = Modifier.testTag(TestIds.Auth.CODE_INPUT).fillMaxWidth(),
onClick = { value = password,
viewModel.onIntent(AuthIntent.Send(inputText)) onValueChange = {
password = it
viewModel.onIntent(AuthIntent.TextInput(login, password))
}, },
enabled = state.isEnabledSend placeholder = { Text(stringResource(R.string.auth_placeholder_password)) },
label = { Text(stringResource(R.string.auth_label_passord)) }
)
Spacer(modifier = Modifier.size(20.dp))
Button(
modifier = Modifier.testTag(TestIds.Auth.SIGN_BUTTON).fillMaxWidth().height(64.dp),
onClick = {
viewModel.onIntent(AuthIntent.Send(login, password))
},
enabled = state.isEnabledSend,
) { ) {
Text(stringResource(R.string.auth_sign_in)) Text(
text = stringResource(R.string.auth_sign_in),
style = MaterialTheme.typography.titleMedium,
)
} }
if (state.error != null) { if (state.error != null) {
Text( Text(

View File

@ -1,8 +1,12 @@
<resources> <resources>
<string name="app_name">Work</string> <string name="app_name">Work</string>
<string name="title_activity_root">RootActivity</string> <string name="title_activity_root">RootActivity</string>
<string name="auth_title">Привет! Введи код для авторизации</string> <string name="auth_title_1">Войдите</string>
<string name="auth_label">Код</string> <string name="auth_title_2">Используя аккаунт S-App</string>
<string name="auth_label_login">Логин</string>
<string name="auth_placeholder_login">Введите логин</string>
<string name="auth_label_passord">Пароль</string>
<string name="auth_placeholder_password">Введите пароль</string>
<string name="auth_sign_in">Войти</string> <string name="auth_sign_in">Войти</string>
<string name="main_refresh">Обновить</string> <string name="main_refresh">Обновить</string>
@ -12,4 +16,6 @@
<string name="book_add">Забронировать</string> <string name="book_add">Забронировать</string>
<string name="book_back">Назад</string> <string name="book_back">Назад</string>
<string name="book_empty">Всё забронировано</string> <string name="book_empty">Всё забронировано</string>
<string name="icon_alter">Иконка</string>
</resources> </resources>