From 6ddd6f082b2019147806833ff1fc464b891020d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9A=D0=B8=D1=80=D0=B8=D0=BB=D0=BB?= Date: Fri, 19 Dec 2025 00:57:58 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9F=D0=BE=D0=BF=D1=80=D0=BE=D0=B1=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D0=BB=20=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D1=82=D1=8C?= =?UTF-8?q?=20=D1=8D=D0=BA=D1=80=D0=B0=D0=BD=20=D0=B2=D1=85=D0=BE=D0=B4?= =?UTF-8?q?=D0=B0=20=D1=81=20=D0=BF=D0=BE=D0=BC=D0=BE=D1=89=D1=8C=D1=8E=20?= =?UTF-8?q?=D0=BA=D1=83=D1=80=D1=81=D0=BE=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/compiler.xml | 2 +- .idea/deploymentTargetDropDown.xml | 10 + .idea/kotlinc.xml | 6 + .idea/misc.xml | 3 +- app/build.gradle.kts | 4 +- .../java/com/novayaplaneta/MainActivity.kt | 22 +- .../com/novayaplaneta/ui/components/Logo.kt | 38 +++ .../ui/navigation/NewPlanetNavigation.kt | 6 +- .../ui/screens/auth/LoginScreen.kt | 288 ++++++++++++++++++ .../ui/screens/auth/LoginViewModel.kt | 67 ++++ .../java/com/novayaplaneta/ui/theme/Color.kt | 9 + app/src/main/res/drawable/logo_earth.png | Bin 0 -> 29291 bytes gradle/libs.versions.toml | 18 +- gradle/wrapper/gradle-wrapper.properties | 2 +- 14 files changed, 450 insertions(+), 25 deletions(-) create mode 100644 .idea/deploymentTargetDropDown.xml create mode 100644 .idea/kotlinc.xml create mode 100644 app/src/main/java/com/novayaplaneta/ui/components/Logo.kt create mode 100644 app/src/main/java/com/novayaplaneta/ui/screens/auth/LoginScreen.kt create mode 100644 app/src/main/java/com/novayaplaneta/ui/screens/auth/LoginViewModel.kt create mode 100644 app/src/main/res/drawable/logo_earth.png diff --git a/.idea/compiler.xml b/.idea/compiler.xml index b86273d..b589d56 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml new file mode 100644 index 0000000..0c0c338 --- /dev/null +++ b/.idea/deploymentTargetDropDown.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/.idea/kotlinc.xml b/.idea/kotlinc.xml new file mode 100644 index 0000000..bb44937 --- /dev/null +++ b/.idea/kotlinc.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index b2c751a..0ad17cb 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,7 @@ + - + diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 4b04a59..0547ef6 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -97,8 +97,8 @@ dependencies { implementation(libs.lottie.compose) // Coroutines - implementation(libs.kotlinx.coroutines.core) - implementation(libs.kotlinx.coroutines.android) + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.9.0") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.9.0") // Testing testImplementation(libs.junit) diff --git a/app/src/main/java/com/novayaplaneta/MainActivity.kt b/app/src/main/java/com/novayaplaneta/MainActivity.kt index d381f52..9581495 100644 --- a/app/src/main/java/com/novayaplaneta/MainActivity.kt +++ b/app/src/main/java/com/novayaplaneta/MainActivity.kt @@ -27,18 +27,20 @@ class MainActivity : ComponentActivity() { Scaffold( modifier = Modifier.fillMaxSize(), bottomBar = { - BottomNavigationBar( - currentRoute = currentRoute, - onNavigate = { route -> - navController.navigate(route) { - popUpTo(navController.graph.startDestinationId) { - saveState = true + if (currentRoute != "login") { + BottomNavigationBar( + currentRoute = currentRoute, + onNavigate = { route -> + navController.navigate(route) { + popUpTo(navController.graph.startDestinationId) { + saveState = true + } + launchSingleTop = true + restoreState = true } - launchSingleTop = true - restoreState = true } - } - ) + ) + } } ) { innerPadding -> NewPlanetNavigation( diff --git a/app/src/main/java/com/novayaplaneta/ui/components/Logo.kt b/app/src/main/java/com/novayaplaneta/ui/components/Logo.kt new file mode 100644 index 0000000..606b73b --- /dev/null +++ b/app/src/main/java/com/novayaplaneta/ui/components/Logo.kt @@ -0,0 +1,38 @@ +package com.novayaplaneta.ui.components + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.* +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.unit.dp +import com.novayaplaneta.R + +@Composable +fun NovayaPlanetaLogo( + modifier: Modifier = Modifier, + size: androidx.compose.ui.unit.Dp? = null +) { + // Адаптивный размер - используем размер экрана или переданный размер + val configuration = LocalConfiguration.current + val logoSize = size ?: kotlin.run { + // Базовый размер для планшета, адаптируется под экран + val minScreenSize = kotlin.math.min(configuration.screenWidthDp, configuration.screenHeightDp) + (minScreenSize / 3).dp + } + + Box( + modifier = modifier.size(logoSize), + contentAlignment = Alignment.Center + ) { + Image( + painter = painterResource(id = R.drawable.logo_earth), + contentDescription = "Логотип Новая Планета", + modifier = Modifier.fillMaxSize(), + contentScale = ContentScale.Fit + ) + } +} diff --git a/app/src/main/java/com/novayaplaneta/ui/navigation/NewPlanetNavigation.kt b/app/src/main/java/com/novayaplaneta/ui/navigation/NewPlanetNavigation.kt index 5ab0fcd..b381408 100644 --- a/app/src/main/java/com/novayaplaneta/ui/navigation/NewPlanetNavigation.kt +++ b/app/src/main/java/com/novayaplaneta/ui/navigation/NewPlanetNavigation.kt @@ -6,6 +6,7 @@ import androidx.navigation.NavHostController import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import com.novayaplaneta.ui.screens.ai.AIScreen +import com.novayaplaneta.ui.screens.auth.LoginScreen import com.novayaplaneta.ui.screens.rewards.RewardsScreen import com.novayaplaneta.ui.screens.schedule.ScheduleScreen import com.novayaplaneta.ui.screens.settings.SettingsScreen @@ -16,13 +17,16 @@ import com.novayaplaneta.ui.screens.timer.TimerScreen fun NewPlanetNavigation( navController: NavHostController, modifier: Modifier = Modifier, - startDestination: String = "schedule" + startDestination: String = "login" ) { NavHost( navController = navController, startDestination = startDestination, modifier = modifier ) { + composable("login") { + LoginScreen(navController = navController) + } composable("schedule") { ScheduleScreen() } diff --git a/app/src/main/java/com/novayaplaneta/ui/screens/auth/LoginScreen.kt b/app/src/main/java/com/novayaplaneta/ui/screens/auth/LoginScreen.kt new file mode 100644 index 0000000..46e09e5 --- /dev/null +++ b/app/src/main/java/com/novayaplaneta/ui/screens/auth/LoginScreen.kt @@ -0,0 +1,288 @@ +package com.novayaplaneta.ui.screens.auth + +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material3.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.text.input.PasswordVisualTransformation +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.unit.sp +import androidx.hilt.navigation.compose.hiltViewModel +import androidx.navigation.NavController +import com.novayaplaneta.ui.components.NovayaPlanetaLogo +import com.novayaplaneta.ui.theme.* +import kotlin.math.min + +@Composable +fun LoginScreen( + navController: NavController, + viewModel: LoginViewModel = hiltViewModel(), + modifier: Modifier = Modifier +) { + val uiState by viewModel.uiState.collectAsState() + val snackbarHostState = remember { SnackbarHostState() } + + LaunchedEffect(uiState.errorMessage) { + val errorMsg = uiState.errorMessage + if (errorMsg != null) { + snackbarHostState.showSnackbar( + message = errorMsg, + actionLabel = null + ) + } + } + + Scaffold( + snackbarHost = { + SnackbarHost( + hostState = snackbarHostState, + snackbar = { snackbarData -> + Snackbar( + snackbarData = snackbarData, + containerColor = MaterialTheme.colorScheme.error, + contentColor = Color.White + ) + } + ) + }, + containerColor = LoginBackgroundTurquoise + ) { paddingValues -> + Box( + modifier = modifier + .fillMaxSize() + .padding(paddingValues) + .background(color = LoginBackgroundTurquoise) + ) { + val configuration = LocalConfiguration.current + val screenWidthDp: Int = configuration.screenWidthDp + val screenHeightDp: Int = configuration.screenHeightDp + val isLandscape = screenWidthDp > screenHeightDp + + // Адаптивные отступы + val horizontalPadding = (screenWidthDp * 0.04f).toInt().coerceIn(24, 48).dp + val verticalPadding = (screenHeightDp * 0.03f).toInt().coerceIn(16, 32).dp + + Column( + modifier = Modifier + .fillMaxSize() + .padding(horizontal = horizontalPadding, vertical = verticalPadding), + horizontalAlignment = Alignment.CenterHorizontally + ) { + // Логотип вверху слева - уменьшенный размер + val logoSizeByHeight = (screenHeightDp * 0.15f).toInt() + val logoSizeByWidth = screenWidthDp / 5 + val logoSize = min(logoSizeByHeight, logoSizeByWidth).coerceIn(100, 160).dp + + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.Start + ) { + NovayaPlanetaLogo( + modifier = Modifier.padding(bottom = 4.dp), + size = logoSize + ) + } + + Spacer(modifier = Modifier.weight(0.05f)) + + // Центрированный контент - адаптивная ширина (50-70% экрана) + val contentWidthRatio = if (isLandscape) 0.5f else 0.7f + Column( + modifier = Modifier + .fillMaxWidth(contentWidthRatio), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(24.dp) + ) { + // Заголовок "Вход" - увеличен + val titleFontSize = (screenHeightDp * 0.06f).toInt().coerceIn(44, 76).sp + Text( + text = "Вход", + fontSize = titleFontSize, + fontWeight = FontWeight.Bold, + color = LoginGreenAccent, + textAlign = TextAlign.Center + ) + + // Поля ввода - увеличены + val inputHeightValue = (screenHeightDp * 0.075f).toInt().coerceIn(64, 100) + val inputHeight: androidx.compose.ui.unit.Dp = inputHeightValue.dp + val inputTextSizeValue = (screenHeightDp * 0.026f).toInt().coerceIn(20, 28) + val inputTextSize: androidx.compose.ui.unit.TextUnit = inputTextSizeValue.sp + + Column( + modifier = Modifier.fillMaxWidth(), + verticalArrangement = Arrangement.spacedBy(16.dp) + ) { + // Поле логина + Box( + modifier = Modifier + .fillMaxWidth() + .height(height = inputHeight) + .background( + color = LoginInputLightBlue, + shape = RoundedCornerShape(20.dp) + ), + contentAlignment = Alignment.CenterStart + ) { + TextField( + value = uiState.login, + onValueChange = { viewModel.onLoginChange(it) }, + placeholder = { + Text( + text = "Введи логин", + fontSize = inputTextSize, + color = Color.Gray.copy(alpha = 0.7f) + ) + }, + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp), + colors = TextFieldDefaults.colors( + unfocusedContainerColor = Color.Transparent, + focusedContainerColor = Color.Transparent, + unfocusedIndicatorColor = Color.Transparent, + focusedIndicatorColor = Color.Transparent, + unfocusedTextColor = Color.Black, + focusedTextColor = Color.Black + ), + textStyle = MaterialTheme.typography.bodyLarge.copy( + fontSize = inputTextSize + ), + singleLine = true, + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text) + ) + } + + // Поле пароля + Box( + modifier = Modifier + .fillMaxWidth() + .height(height = inputHeight) + .background( + color = LoginInputLightBlue, + shape = RoundedCornerShape(20.dp) + ), + contentAlignment = Alignment.CenterStart + ) { + TextField( + value = uiState.password, + onValueChange = { viewModel.onPasswordChange(it) }, + placeholder = { + Text( + text = "Введи пароль", + fontSize = inputTextSize, + color = Color.Gray.copy(alpha = 0.7f) + ) + }, + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp), + visualTransformation = PasswordVisualTransformation(), + colors = TextFieldDefaults.colors( + unfocusedContainerColor = Color.Transparent, + focusedContainerColor = Color.Transparent, + unfocusedIndicatorColor = Color.Transparent, + focusedIndicatorColor = Color.Transparent, + unfocusedTextColor = Color.Black, + focusedTextColor = Color.Black + ), + textStyle = MaterialTheme.typography.bodyLarge.copy( + fontSize = inputTextSize + ), + singleLine = true, + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password) + ) + } + } + + // Кнопка "Войти" - адаптивный размер + Button( + onClick = { + viewModel.login { + navController.navigate("schedule") { + popUpTo(0) { inclusive = true } + } + } + }, + modifier = Modifier + .fillMaxWidth() + .height(height = inputHeight), + shape = RoundedCornerShape(20.dp), + enabled = uiState.isFormValid && !uiState.isLoading, + colors = if (uiState.isFormValid) { + ButtonDefaults.buttonColors( + containerColor = LoginButtonBlue, + contentColor = Color.White + ) + } else { + ButtonDefaults.buttonColors( + containerColor = LoginInputLightBlue, + contentColor = Color.Gray, + disabledContainerColor = LoginInputLightBlue, + disabledContentColor = Color.Gray + ) + } + ) { + if (uiState.isLoading) { + CircularProgressIndicator( + modifier = Modifier.size(40.dp), + color = Color.White + ) + } else { + val buttonTextSize = (screenHeightDp * 0.027f).toInt().coerceIn(22, 34).sp + Text( + text = "Войти", + fontSize = buttonTextSize, + fontWeight = FontWeight.Bold + ) + } + } + + // Ссылки - зелёные, около кнопки + Column( + modifier = Modifier.fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(12.dp) + ) { + val linkTextSize = (screenHeightDp * 0.024f).toInt().coerceIn(18, 26).sp + Text( + text = "Нет логина и пароля?", + fontSize = linkTextSize, + color = LoginGreenAccent, + fontWeight = FontWeight.Medium, + modifier = Modifier.clickable { + // TODO: Переход на регистрацию + } + ) + + Text( + text = "Не помнишь пароль?", + fontSize = linkTextSize, + color = LoginGreenAccent, + fontWeight = FontWeight.Medium, + modifier = Modifier.clickable { + // TODO: Переход на восстановление пароля + } + ) + } + } + + Spacer(modifier = Modifier.weight(0.1f)) + } + } + } +} diff --git a/app/src/main/java/com/novayaplaneta/ui/screens/auth/LoginViewModel.kt b/app/src/main/java/com/novayaplaneta/ui/screens/auth/LoginViewModel.kt new file mode 100644 index 0000000..03ac640 --- /dev/null +++ b/app/src/main/java/com/novayaplaneta/ui/screens/auth/LoginViewModel.kt @@ -0,0 +1,67 @@ +package com.novayaplaneta.ui.screens.auth + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.novayaplaneta.domain.repository.AuthRepository +import dagger.hilt.android.lifecycle.HiltViewModel +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asStateFlow +import kotlinx.coroutines.launch +import javax.inject.Inject + +@HiltViewModel +class LoginViewModel @Inject constructor( + private val authRepository: AuthRepository +) : ViewModel() { + + private val _uiState = MutableStateFlow(LoginUiState()) + val uiState: StateFlow = _uiState.asStateFlow() + + fun onLoginChange(login: String) { + _uiState.value = _uiState.value.copy( + login = login, + isFormValid = isFormValid(login, _uiState.value.password) + ) + } + + fun onPasswordChange(password: String) { + _uiState.value = _uiState.value.copy( + password = password, + isFormValid = isFormValid(_uiState.value.login, password) + ) + } + + fun login(onSuccess: () -> Unit) { + if (!_uiState.value.isFormValid) return + + viewModelScope.launch { + _uiState.value = _uiState.value.copy(isLoading = true, errorMessage = null) + + val result = authRepository.login(_uiState.value.login, _uiState.value.password) + + result.onSuccess { user -> + _uiState.value = _uiState.value.copy(isLoading = false, isLoggedIn = true) + onSuccess() + }.onFailure { exception -> + _uiState.value = _uiState.value.copy( + isLoading = false, + errorMessage = exception.message ?: "Ошибка входа" + ) + } + } + } + + private fun isFormValid(login: String, password: String): Boolean { + return login.isNotBlank() && password.isNotBlank() + } +} + +data class LoginUiState( + val login: String = "", + val password: String = "", + val isLoading: Boolean = false, + val isFormValid: Boolean = false, + val isLoggedIn: Boolean = false, + val errorMessage: String? = null +) diff --git a/app/src/main/java/com/novayaplaneta/ui/theme/Color.kt b/app/src/main/java/com/novayaplaneta/ui/theme/Color.kt index 8077fd8..867dd1a 100644 --- a/app/src/main/java/com/novayaplaneta/ui/theme/Color.kt +++ b/app/src/main/java/com/novayaplaneta/ui/theme/Color.kt @@ -24,3 +24,12 @@ val SuccessColor = Color(0xFF4CAF50) val WarningColor = Color(0xFFFF6B35) val ErrorColor = Color(0xFFE53935) +// Цвета для экрана авторизации (благоприятные для РАС из PDF) +val LoginBackgroundTurquoise = Color(0xFFDAE7E9) // Мягкий голубой фон +val LoginCardLightBlue = Color(0xFFBCDAEC) // Спокойный светло-голубой +val LoginInputLightBlue = Color(0xFFBCDAEC) // Для полей ввода +val LoginButtonBlue = Color(0xFFBCDAEC) // Для кнопки +val LoginGreenAccent = Color(0xFF80EF80) // Пастельно-зелёный акцент +val LoginGreenSoft = Color(0xFFC5E6C5) // Мягкий пастельно-зелёный +val LoginGreenDark = Color(0xFF80EF80) // Пастельно-зелёный темнее + diff --git a/app/src/main/res/drawable/logo_earth.png b/app/src/main/res/drawable/logo_earth.png new file mode 100644 index 0000000000000000000000000000000000000000..c1d2e98453718b0e5a6bb1927f20758ffac7252c GIT binary patch literal 29291 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 eK=cDP9sdnI|A?1P7_f2x0000