init commit
This commit is contained in:
parent
aea6f551c5
commit
f99e8ca0c0
123
.idea/codeStyles/Project.xml
Normal file
123
.idea/codeStyles/Project.xml
Normal 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>
|
5
.idea/codeStyles/codeStyleConfig.xml
Normal file
5
.idea/codeStyles/codeStyleConfig.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<component name="ProjectCodeStyleConfiguration">
|
||||
<state>
|
||||
<option name="USE_PER_PROJECT_SETTINGS" value="true" />
|
||||
</state>
|
||||
</component>
|
@ -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>
|
@ -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">
|
||||
|
@ -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")
|
||||
}
|
@ -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()
|
||||
}
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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) }
|
||||
|
||||
|
@ -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)
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
@ -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)
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user