main #6

Closed
student-d-sherstnev wants to merge 19 commits from Minipigi-org/NTO-2026-Android-TeamTask-Template:main into main
5 changed files with 67 additions and 21 deletions
Showing only changes of commit e678f2dc48 - Show all commits

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

@ -1,6 +1,6 @@
package ru.myitschool.work.ui.screen.auth package ru.myitschool.work.ui.screen.auth
sealed interface AuthIntent { sealed interface AuthIntent {
data class Send(val text: String): AuthIntent data class Send(val login: String, val password: String): AuthIntent
data class TextInput(val text: String): AuthIntent data class TextInput(val login: String, val password: String): AuthIntent
} }

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>