init commit

This commit is contained in:
irreaaa 2025-03-19 12:04:48 +03:00
parent aea6f551c5
commit f99e8ca0c0
9 changed files with 238 additions and 66 deletions

View File

@ -0,0 +1,123 @@
<component name="ProjectCodeStyleConfiguration">
<code_scheme name="Project" version="173">
<JetCodeStyleSettings>
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</JetCodeStyleSettings>
<codeStyleSettings language="XML">
<option name="FORCE_REARRANGE_MODE" value="1" />
<indentOptions>
<option name="CONTINUATION_INDENT_SIZE" value="4" />
</indentOptions>
<arrangement>
<rules>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:android</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>xmlns:.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:id</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*:name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>name</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>style</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>^$</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>http://schemas.android.com/apk/res/android</XML_NAMESPACE>
</AND>
</match>
<order>ANDROID_ATTRIBUTE_ORDER</order>
</rule>
</section>
<section>
<rule>
<match>
<AND>
<NAME>.*</NAME>
<XML_ATTRIBUTE />
<XML_NAMESPACE>.*</XML_NAMESPACE>
</AND>
</match>
<order>BY_NAME</order>
</rule>
</section>
</rules>
</arrangement>
</codeStyleSettings>
<codeStyleSettings language="kotlin">
<option name="CODE_STYLE_DEFAULTS" value="KOTLIN_OFFICIAL" />
</codeStyleSettings>
</code_scheme>
</component>

View File

@ -0,0 +1,5 @@
<component name="ProjectCodeStyleConfiguration">
<state>
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
</state>
</component>

View File

@ -5,21 +5,6 @@
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
</SelectionState>
<SelectionState runConfigName="TitleWithSubtitleText">
<option name="selectionMode" value="DROPDOWN" />
</SelectionState>
<SelectionState runConfigName="AuthTextField">
<option name="selectionMode" value="DROPDOWN" />
</SelectionState>
<SelectionState runConfigName="ForgotPassScreen">
<option name="selectionMode" value="DROPDOWN" />
</SelectionState>
<SelectionState runConfigName="TitleWithSubtitleText (1)">
<option name="selectionMode" value="DROPDOWN" />
</SelectionState>
<SelectionState runConfigName="TitleAndSubTitle">
<option name="selectionMode" value="DROPDOWN" />
</SelectionState>
</selectionStates>
</component>
</project>

View File

@ -1,4 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ExternalStorageConfigurationManager" enabled="true" />
<component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="jbr-21" project-jdk-type="JavaSDK">

View File

@ -2,6 +2,7 @@ plugins {
alias(libs.plugins.android.application)
alias(libs.plugins.kotlin.android)
alias(libs.plugins.kotlin.compose)
kotlin("plugin.serialization") version "2.0.21"
}
android {
@ -57,4 +58,5 @@ dependencies {
debugImplementation(libs.androidx.ui.tooling)
debugImplementation(libs.androidx.ui.test.manifest)
implementation ("androidx.lifecycle:lifecycle-viewmodel-compose:2.6.2")
implementation("androidx.navigation:navigation-compose:2.8.9")
}

View File

@ -4,8 +4,14 @@ import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import com.example.shoesapp.ui.screen.SigninScreen
import com.example.shoesapp.ui.theme.MatuleTheme
import com.example.shoesapptest.screen.forgotpassword.ForgotPassScreen
import com.example.shoesapptest.screen.regscreen.RegisterAccountScreen
import com.example.shoesapptest.screen.regscreen.RegistrationScreen
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
@ -13,7 +19,34 @@ class MainActivity : ComponentActivity() {
enableEdgeToEdge()
setContent {
MatuleTheme {
RegisterAccountScreen()
val navController = rememberNavController()
NavHost(
navController = navController,
startDestination = "signin"
) {
composable("signin") {
SigninScreen(
onNavigationToRegScreen = {
navController.navigate("registration")
},
navController = navController
)
}
composable("forgotpass") {
ForgotPassScreen(onNavigateToSignInScreen = {
navController.navigate("signin")
})
}
composable("registration") {
RegisterAccountScreen(
registrationScreen = RegistrationScreen("Test"),
onNavigationToSigninScreen = {
navController.popBackStack()
}
)
}
}
}
}
}

View File

@ -36,7 +36,7 @@ import com.example.shoesapptest.screen.signin.component.TitleWithSubtitleText
@Composable
fun ForgotPassScreen() {
fun ForgotPassScreen(onNavigateToSignInScreen: () -> Unit) {
val forgotPassViewModel: ForgotPassViewModel = viewModel()
val showDialog = remember { mutableStateOf(false) }

View File

@ -45,16 +45,22 @@ import com.example.shoesapptest.screen.regscreen.component.RegistrationTextField
import com.example.shoesapptest.screen.regscreen.component.TitleAndSubTitle
import com.example.shoesapptest.screen.signin.component.AuthTextField
data class RegistrationScreen(val sampleText: String)
@Composable
fun RegisterAccountScreen(){
fun RegisterAccountScreen(
registrationScreen: RegistrationScreen,
onNavigationToSigninScreen: () -> Unit
) {
val registrationViewModel: RegistrationViewModel = viewModel()
Scaffold (
Scaffold(
topBar = {
Row(modifier = Modifier
.padding(top = 35.dp)
.fillMaxWidth()
.height(40.dp)
){
Row(
modifier = Modifier
.padding(top = 35.dp)
.fillMaxWidth()
.height(40.dp)
) {
IconButton(onClick = {}) {
Icon(
painter = painterResource(R.drawable.back_arrow),
@ -64,12 +70,14 @@ fun RegisterAccountScreen(){
}
},
bottomBar = {
Row(modifier = Modifier
.padding(bottom = 50.dp)
.fillMaxWidth()
.height(40.dp),
Row(
modifier = Modifier
.padding(bottom = 50.dp)
.fillMaxWidth()
.height(40.dp),
horizontalArrangement = Arrangement.Center,
verticalAlignment = Alignment.CenterVertically){
verticalAlignment = Alignment.CenterVertically
) {
Text(
text = "Есть аккаунт? Войти",
style = MatuleTheme.typography.bodyRegular16.copy(color = MatuleTheme.colors.text),
@ -77,14 +85,23 @@ fun RegisterAccountScreen(){
)
}
}
){paddingValues -> RegisterAccountContent(paddingValues, registrationViewModel) }
) { paddingValues ->
RegisterAccountContent(
paddingValues = paddingValues,
registrationViewModel = registrationViewModel,
registrationScreen = registrationScreen,
onNavigationToSigninScreen = onNavigationToSigninScreen
)
}
}
@Composable
fun RegisterAccountContent(
paddingValues: PaddingValues,
registrationViewModel: RegistrationViewModel
){
registrationViewModel: RegistrationViewModel,
registrationScreen: RegistrationScreen,
onNavigationToSigninScreen: () -> Unit
) {
val reg = registrationViewModel.registration
Column(
modifier = Modifier
@ -96,46 +113,44 @@ fun RegisterAccountContent(
subText = "Заполните Свои данные или продолжите через социальные медиа"
)
Spacer(modifier = Modifier.height(20.dp))
RegistrationTextField(
value = reg.value.name,
onChangeValue = { registrationViewModel.setUserName(it) },
isError = false,
supportingText = { Text(text = "Неверное имя пользователя")},
placeholder = { Text(text = stringResource(R.string.PasswordPlaceHolder))},
label = { Text(text = "Ваше имя")}
supportingText = { Text(text = "Неверное имя пользователя") },
placeholder = { Text(text = stringResource(R.string.PasswordPlaceHolder)) },
label = { Text(text = "Ваше имя") }
)
RegistrationTextField(
value = reg.value.email,
onChangeValue = { registrationViewModel.setEmail(it)},
onChangeValue = { registrationViewModel.setEmail(it) },
isError = registrationViewModel.emailHasError.value,
supportingText = { Text(text = stringResource(R.string.LoginError))},
placeholder = { Text(text = stringResource(R.string.template_email))},
label = { Text(text = stringResource(R.string.email))},
supportingText = { Text(text = stringResource(R.string.LoginError)) },
placeholder = { Text(text = stringResource(R.string.template_email)) },
label = { Text(text = stringResource(R.string.email)) },
)
RegistrationTextField(
value = reg.value.password,
onChangeValue = { registrationViewModel.setPassword(it)},
onChangeValue = { registrationViewModel.setPassword(it) },
isError = false,
supportingText = { Text(text = stringResource(R.string.PasswordError))},
placeholder = { Text(text = stringResource(R.string.PasswordPlaceHolder))},
label = { Text(text = stringResource(R.string.Password))}
supportingText = { Text(text = stringResource(R.string.PasswordError)) },
placeholder = { Text(text = stringResource(R.string.PasswordPlaceHolder)) },
label = { Text(text = stringResource(R.string.Password)) }
)
SimpleCheckbox()
RegisterButton(onClick = {}) { Text(text = stringResource(R.string.Registration))}
Text(registrationScreen.sampleText)
RegisterButton(onClick = onNavigationToSigninScreen) {
Text(text = stringResource(R.string.Registration))
}
}
}
@Composable
fun SimpleCheckbox() {
val isChecked = remember { mutableStateOf(false) }
@ -159,7 +174,4 @@ fun SimpleCheckbox() {
modifier = Modifier.padding(start = 8.dp)
)
}
}
}

View File

@ -1,6 +1,7 @@
package com.example.shoesapp.ui.screen
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
@ -36,6 +37,7 @@ import androidx.compose.ui.text.input.VisualTransformation
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.NavController
import com.example.shoesapp.ui.theme.MatuleTheme
import com.example.shoesapptest.R
import com.example.shoesapptest.common.CommonButton
@ -45,7 +47,7 @@ import com.example.shoesapptest.screen.signin.component.AuthTextField
import com.example.shoesapptest.screen.signin.component.TitleWithSubtitleText
@Composable
fun SigninScreen() {
fun SigninScreen(onNavigationToRegScreen: () -> Unit, navController: NavController) {
val signInViewModel: SignInViewMode = viewModel()
Scaffold(
topBar = {
@ -75,17 +77,18 @@ fun SigninScreen() {
Text(
stringResource(R.string.sign_up),
style = MatuleTheme.typography.bodyRegular16.copy(color = MatuleTheme.colors.text),
textAlign = TextAlign.Center
textAlign = TextAlign.Center,
modifier = Modifier.clickable { onNavigationToRegScreen() }
)
}
}
) { paddingValues ->
SignInContent(paddingValues, signInViewModel)
SignInContent(paddingValues, signInViewModel, navController)
}
}
@Composable
fun SignInContent(paddingValues: PaddingValues, signInViewMode: SignInViewMode) {
fun SignInContent(paddingValues: PaddingValues, signInViewMode: SignInViewMode, navController: NavController) {
val signInState = signInViewMode.signInState
Column(
modifier = Modifier.padding(paddingValues = paddingValues),
@ -97,29 +100,38 @@ fun SignInContent(paddingValues: PaddingValues, signInViewMode: SignInViewMode)
)
Spacer(modifier = Modifier.height(35.dp))
AuthTextField(
value = signInState.value.email,
onChangeValue = { signInViewMode.setEmail(it) },
isError = signInViewMode.emailHasError.value,
supportingText = { Text(text = stringResource(R.string.LoginError))},
placeholder = { Text(text = stringResource(R.string.template_email)) },
label = { Text(text = stringResource(R.string.email))
}
label = { Text(text = stringResource(R.string.email)) }
)
AuthTextField(
value = signInState.value.password,
onChangeValue = { signInViewMode.setPassword(it)},
onChangeValue = { signInViewMode.setPassword(it) },
isError = false,
supportingText = { Text(text = "Неверный пароль")},
placeholder = { Text(text = stringResource(R.string.PasswordPlaceHolder))},
label = { Text(text = stringResource(R.string.Password))}
placeholder = { Text(text = stringResource(R.string.PasswordPlaceHolder)) },
label = { Text(text = stringResource(R.string.Password)) }
)
Text(
text = "Забыл пароль",
style = MatuleTheme.typography.bodyRegular16.copy(color = MatuleTheme.colors.text),
modifier = Modifier
.clickable {
navController.navigate("forgotpass")
}
.padding(top = 8.dp)
)
AuthButton(onClick = {}) {
Text(stringResource(R.string.Sign_In))
}
}
}
@ -129,3 +141,4 @@ fun SignInContent(paddingValues: PaddingValues, signInViewMode: SignInViewMode)