Browse Source

frontend: реализовал компонент регистрации

ZryachevTA 3 weeks ago
parent
commit
2bd25d7519

+ 2 - 2
Frontend/app/src/main/AndroidManifest.xml

@@ -6,9 +6,9 @@
         android:allowBackup="true"
         android:dataExtractionRules="@xml/data_extraction_rules"
         android:fullBackupContent="@xml/backup_rules"
-        android:icon="@mipmap/ic_launcher"
+        android:icon="@mipmap/ic_launcher_neurea"
         android:label="@string/app_name"
-        android:roundIcon="@mipmap/ic_launcher_round"
+        android:roundIcon="@mipmap/ic_launcher_neurea_round"
         android:supportsRtl="true"
         android:theme="@style/Theme.Neurea"
         tools:targetApi="31">

BIN
Frontend/app/src/main/ic_launcher_neurea-playstore.png


+ 1 - 1
Frontend/app/src/main/java/com/example/neurea/navigation/Navigation.kt

@@ -19,7 +19,7 @@ fun Navigation(){
             SplashScreen(navController = navController)
         }
         composable("authorizationScreen"){
-            AuthorizationScreen(navController = navController)
+            AuthorizationScreen() //navController = navController
         }
     }
 

+ 139 - 84
Frontend/app/src/main/java/com/example/neurea/views/screens/AuthorizationScreen.kt

@@ -1,7 +1,11 @@
 package com.example.neurea.views.screens
 
 import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.Row
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.height
@@ -12,10 +16,12 @@ import androidx.compose.foundation.text.KeyboardOptions
 import androidx.compose.material3.Button
 import androidx.compose.material3.ButtonDefaults
 import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.HorizontalDivider
 import androidx.compose.material3.Icon
 import androidx.compose.material3.IconButton
 import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.Text
+import androidx.compose.material3.TextButton
 import androidx.compose.material3.TextField
 import androidx.compose.material3.TextFieldDefaults
 import androidx.compose.runtime.Composable
@@ -34,117 +40,166 @@ 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.text.input.VisualTransformation
+import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.tooling.preview.Preview
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.sp
 import androidx.navigation.NavController
 import com.example.neurea.R
+import com.example.neurea.views.ui.theme.NeureaTheme
 
+@Preview()
 @OptIn(ExperimentalMaterial3Api::class)
 @Composable
-fun AuthorizationScreen(navController: NavController) { // navController: NavController
+fun AuthorizationScreen() { // navController: NavController
     var email = remember { mutableStateOf("") }
     var password = remember { mutableStateOf("") }
     val maxLength = 20
     val emailPattern = Regex("[^@ \\t\\r\\n]+@[^@ \\t\\r\\n]+\\.[^@ \\t\\r\\n]+")
     var passwordVisibility: Boolean by remember { mutableStateOf(false) }
 
-    Column(modifier = Modifier
-        .fillMaxSize()
-        .background(color = MaterialTheme.colorScheme.secondary)){
-        Text(text="Добро пожаловать!", color = MaterialTheme.colorScheme.primary, modifier = Modifier
-            .padding(top = 70.dp, bottom = 24.dp, start = 24.dp)
-            .align(Alignment.Start),
-            fontSize = 35.sp, fontWeight = FontWeight.SemiBold)
-        TextField( modifier = Modifier
-            .fillMaxWidth()
-            .padding(horizontal = 20.dp, vertical = 10.dp)
-            .clip(shape = RoundedCornerShape(8.dp)),
-            value = email.value,
-            keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Email),
-            colors = TextFieldDefaults.textFieldColors(
-                containerColor = MaterialTheme.colorScheme.secondary,
-                focusedIndicatorColor = MaterialTheme.colorScheme.secondary,
-                focusedTextColor = MaterialTheme.colorScheme.onPrimary,
-                unfocusedTextColor = MaterialTheme.colorScheme.secondary,
-                disabledIndicatorColor = Color.Transparent,
-                unfocusedIndicatorColor = Color.Transparent,
-                cursorColor = MaterialTheme.colorScheme.primary,
-                disabledPlaceholderColor = MaterialTheme.colorScheme.onSecondary,
-                focusedPlaceholderColor = MaterialTheme.colorScheme.onSecondary,
-                unfocusedPlaceholderColor = MaterialTheme.colorScheme.onSecondary
-            ),
+    NeureaTheme {
+        Column(
+            modifier = Modifier
+                .fillMaxSize()
+                .background(color = MaterialTheme.colorScheme.secondary)
+        ) {
+            Text(
+                text = "Добро пожаловать!",
+                color = MaterialTheme.colorScheme.primary,
+                modifier = Modifier
+                    .padding(top = 70.dp, bottom = 24.dp, start = 24.dp)
+                    .align(Alignment.Start),
+                fontSize = 24.sp,
+                fontWeight = FontWeight.ExtraBold
+            )
+            TextField(
+                modifier = Modifier
+                    .fillMaxWidth()
+                    .padding(horizontal = 20.dp, vertical = 10.dp)
+                    .clip(shape = RoundedCornerShape(8.dp))
+                    .border(
+                        width = 1.dp,
+                        color = MaterialTheme.colorScheme.onSecondary,
+                        shape = RoundedCornerShape(12.dp)
+                    ),
+                textStyle = TextStyle(fontSize = 14.sp),
+                value = email.value,
+                keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Email),
+                colors = TextFieldDefaults.textFieldColors(
+                    containerColor = MaterialTheme.colorScheme.secondary,
+                    focusedIndicatorColor = MaterialTheme.colorScheme.secondary,
+                    focusedTextColor = MaterialTheme.colorScheme.onPrimary,
+                    unfocusedTextColor = MaterialTheme.colorScheme.secondary,
+                    disabledIndicatorColor = Color.Transparent,
+                    unfocusedIndicatorColor = Color.Transparent,
+                    cursorColor = MaterialTheme.colorScheme.primary,
+                    disabledPlaceholderColor = MaterialTheme.colorScheme.onSecondary,
+                    focusedPlaceholderColor = MaterialTheme.colorScheme.onSecondary,
+                    unfocusedPlaceholderColor = MaterialTheme.colorScheme.onSecondary
+                ),
 
-            onValueChange = {
-                if (it.length <= maxLength) email.value = it
-                /*if (email.value.isNotEmpty() and emailPattern.matches(email.value)) {
+                onValueChange = {
+                    if (it.length <= maxLength) email.value = it
+                    /*if (email.value.isNotEmpty() and emailPattern.matches(email.value)) {
                     colorOfButton = lavender.value
                 } else {
                     colorOfButton = gainsboro.value
                 }*/
-            },
-            placeholder = {Text("Email")},
-            singleLine = true
-        )
+                },
+                placeholder = { Text("Email") },
+                singleLine = true
+            )
 
-        TextField(modifier = Modifier
-            .fillMaxWidth()
-            .padding(horizontal = 20.dp, vertical = 10.dp)
-            .clip(shape = RoundedCornerShape(8.dp)),
-            value = password.value,
-            colors = TextFieldDefaults.textFieldColors(
-                containerColor = MaterialTheme.colorScheme.secondary,
-                focusedIndicatorColor = MaterialTheme.colorScheme.secondary,
-                focusedTextColor = MaterialTheme.colorScheme.onPrimary,
-                unfocusedTextColor = MaterialTheme.colorScheme.secondary,
-                disabledIndicatorColor = Color.Transparent,
-                unfocusedIndicatorColor = Color.Transparent,
-                cursorColor = MaterialTheme.colorScheme.primary,
-                disabledPlaceholderColor = MaterialTheme.colorScheme.onSecondary,
-                focusedPlaceholderColor = MaterialTheme.colorScheme.onSecondary,
-                unfocusedPlaceholderColor = MaterialTheme.colorScheme.onSecondary
-            ),
-            visualTransformation = if (passwordVisibility) VisualTransformation.None else PasswordVisualTransformation(),
-            trailingIcon = {
-                IconButton(onClick = {
-                    passwordVisibility = !passwordVisibility
-                }) {
-                    if (passwordVisibility) {
-                        Icon(
-                            painter = painterResource(id = R.drawable.baseline_visibility_24),
-                            contentDescription = ""
-                        )
-                    } else {
-                        Icon(
-                            painter = painterResource(id = R.drawable.baseline_visibility_off_24),
-                            contentDescription = ""
-                        )
+            TextField(
+                modifier = Modifier
+                    .fillMaxWidth()
+                    .padding(horizontal = 20.dp, vertical = 10.dp)
+                    .clip(shape = RoundedCornerShape(8.dp))
+                    .border(
+                        width = 1.dp,
+                        color = MaterialTheme.colorScheme.onSecondary,
+                        shape = RoundedCornerShape(12.dp)
+                    ),
+                value = password.value,
+                colors = TextFieldDefaults.textFieldColors(
+                    containerColor = MaterialTheme.colorScheme.secondary,
+                    focusedIndicatorColor = MaterialTheme.colorScheme.secondary,
+                    focusedTextColor = MaterialTheme.colorScheme.onPrimary,
+                    unfocusedTextColor = MaterialTheme.colorScheme.secondary,
+                    disabledIndicatorColor = Color.Transparent,
+                    unfocusedIndicatorColor = Color.Transparent,
+                    cursorColor = MaterialTheme.colorScheme.primary,
+                    disabledPlaceholderColor = MaterialTheme.colorScheme.onSecondary,
+                    focusedPlaceholderColor = MaterialTheme.colorScheme.onSecondary,
+                    unfocusedPlaceholderColor = MaterialTheme.colorScheme.onSecondary
+                ),
+                visualTransformation = if (passwordVisibility) VisualTransformation.None else PasswordVisualTransformation(),
+                trailingIcon = {
+                    IconButton(onClick = {
+                        passwordVisibility = !passwordVisibility
+                    }) {
+                        if (passwordVisibility) {
+                            Icon(
+                                painter = painterResource(id = R.drawable.baseline_visibility_24),
+                                contentDescription = ""
+                            )
+                        } else {
+                            Icon(
+                                painter = painterResource(id = R.drawable.baseline_visibility_off_24),
+                                contentDescription = ""
+                            )
+                        }
                     }
-                }
-            },
-            onValueChange = {
-                if (it.length <= maxLength) password.value = it
-            },
-            placeholder = {Text("Введите пароль")},
-            singleLine = true)
+                },
+                onValueChange = {
+                    if (it.length <= maxLength) password.value = it
+                },
+                placeholder = { Text("Введите пароль") },
+                singleLine = true
+            )
 
-        Button(onClick = {
-            },
-            modifier = Modifier
-                .width(260.dp)
-                .padding(top=20.dp, bottom = 10.dp, start = 30.dp, end = 30.dp)
-                .height(50.dp)
-            , shape = RoundedCornerShape(8.dp),
-            colors = ButtonDefaults.buttonColors(
-                containerColor = MaterialTheme.colorScheme.primary),
+            TextButton(onClick = { /*TODO*/ }, contentPadding = PaddingValues(0.dp),modifier = Modifier.padding(start = 20.dp)
+                , colors = ButtonDefaults.textButtonColors(containerColor = Color.Transparent)) {
+                Text("Забыли пароль?", modifier = Modifier.padding(0.dp), textAlign = TextAlign.Start)
+            }
 
-            ){
+            Button(
+                onClick = {
+                },
+                modifier = Modifier
+                    .fillMaxWidth()
+                    .height(48.dp)
+                    .padding(top = 10.dp, start = 20.dp, end = 30.dp)
+                    .height(50.dp)
 
-            Text("Войти", fontSize = 20.sp, color = MaterialTheme.colorScheme.secondary)
+                ,
+                shape = RoundedCornerShape(8.dp),
+                colors = ButtonDefaults.buttonColors(
+                    containerColor = MaterialTheme.colorScheme.primary
+                ),
 
-        }
+                ) {
+
+                Text("Войти", fontSize = 15.sp, color = MaterialTheme.colorScheme.secondary)
 
+            }
+            Row(modifier= Modifier
+                .fillMaxWidth()
+                .padding(horizontal = 30.dp),
+                verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.Center){
+                Text("Еще не с нами? ", color = MaterialTheme.colorScheme.onSecondary, fontSize = 12.sp, textAlign = TextAlign.Center)
+                TextButton(onClick = {
+                }, colors = ButtonDefaults.textButtonColors(contentColor = Color.White, containerColor = Color.Transparent),
+                    modifier = Modifier.padding(0.dp))
+                {Text("Регистрация", fontSize = 12.sp, style = TextStyle(
+                    fontWeight = FontWeight.SemiBold), textAlign = TextAlign.Center, color = MaterialTheme.colorScheme.primary) }
+            }
 
+            HorizontalDivider(color=MaterialTheme.colorScheme.onSecondary, thickness = 0.5.dp, modifier = Modifier.padding(horizontal = 24.dp))
 
+
+
+        }
     }
 }

+ 288 - 1
Frontend/app/src/main/java/com/example/neurea/views/screens/RegistrationScreen.kt

@@ -1,4 +1,291 @@
 package com.example.neurea.views.screens
 
-class RegistrationScreen {
+import androidx.compose.foundation.background
+import androidx.compose.foundation.border
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.foundation.text.KeyboardOptions
+import androidx.compose.material3.Button
+import androidx.compose.material3.ButtonDefaults
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.HorizontalDivider
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Text
+import androidx.compose.material3.TextButton
+import androidx.compose.material3.TextField
+import androidx.compose.material3.TextFieldDefaults
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.text.TextStyle
+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.text.input.VisualTransformation
+import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.example.neurea.R
+import com.example.neurea.views.ui.theme.NeureaTheme
+
+@Preview()
+@OptIn(ExperimentalMaterial3Api::class)
+@Composable
+fun RegistrationScreen() { // navController: NavController
+    var email = remember { mutableStateOf("") }
+    var name = remember { mutableStateOf("") }
+    var password = remember { mutableStateOf("") }
+    var password1 = remember { mutableStateOf("") }
+    val maxLength = 20
+    val emailPattern = Regex("[^@ \\t\\r\\n]+@[^@ \\t\\r\\n]+\\.[^@ \\t\\r\\n]+")
+    var passwordVisibility: Boolean by remember { mutableStateOf(false) }
+    var password1Visibility: Boolean by remember { mutableStateOf(false) }
+
+    NeureaTheme {
+        Column(
+            modifier = Modifier
+                .fillMaxSize()
+                .background(color = MaterialTheme.colorScheme.secondary)
+        ) {
+            Text(
+                text = "Регистрация!",
+                color = MaterialTheme.colorScheme.primary,
+                modifier = Modifier
+                    .padding(top = 70.dp, bottom = 8.dp, start = 24.dp)
+                    .align(Alignment.Start),
+                fontSize = 24.sp,
+                fontWeight = FontWeight.ExtraBold
+            )
+            Text("Создайте аккаунт для использования приложения", fontSize = 12.sp,
+                color = MaterialTheme.colorScheme.onSecondary, modifier = Modifier.padding(start = 20.dp, bottom = 20.dp))
+            Text("Имя", fontWeight = FontWeight.Bold, color = MaterialTheme.colorScheme.onPrimary, fontSize = 12.sp, modifier = Modifier.padding(start = 20.dp))
+            TextField(
+                modifier = Modifier
+                    .fillMaxWidth()
+                    .padding(horizontal = 20.dp, vertical = 8.dp)
+                    .clip(shape = RoundedCornerShape(8.dp))
+                    .border(
+                        width = 1.dp,
+                        color = MaterialTheme.colorScheme.onSecondary,
+                        shape = RoundedCornerShape(12.dp)
+                    ),
+                textStyle = TextStyle(fontSize = 14.sp),
+                value = name.value,
+                keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Text),
+                colors = TextFieldDefaults.textFieldColors(
+                    containerColor = MaterialTheme.colorScheme.secondary,
+                    focusedIndicatorColor = MaterialTheme.colorScheme.secondary,
+                    focusedTextColor = MaterialTheme.colorScheme.onPrimary,
+                    unfocusedTextColor = MaterialTheme.colorScheme.secondary,
+                    disabledIndicatorColor = Color.Transparent,
+                    unfocusedIndicatorColor = Color.Transparent,
+                    cursorColor = MaterialTheme.colorScheme.primary,
+                    disabledPlaceholderColor = MaterialTheme.colorScheme.onSecondary,
+                    focusedPlaceholderColor = MaterialTheme.colorScheme.onSecondary,
+                    unfocusedPlaceholderColor = MaterialTheme.colorScheme.onSecondary
+                ),
+
+                onValueChange = {
+                    if (it.length <= maxLength) name.value = it
+                    /*if (email.value.isNotEmpty() and emailPattern.matches(email.value)) {
+                    colorOfButton = lavender.value
+                } else {
+                    colorOfButton = gainsboro.value
+                }*/
+                },
+                placeholder = { Text("Ваше имя", fontSize = 14.sp) },
+                singleLine = true
+            )
+            Text("Email", fontWeight = FontWeight.Bold, color = MaterialTheme.colorScheme.onPrimary, fontSize = 12.sp, modifier = Modifier.padding(start = 20.dp))
+            TextField(
+                modifier = Modifier
+                    .fillMaxWidth()
+                    .padding(horizontal = 20.dp, vertical = 8.dp)
+                    .clip(shape = RoundedCornerShape(8.dp))
+                    .border(
+                        width = 1.dp,
+                        color = MaterialTheme.colorScheme.onSecondary,
+                        shape = RoundedCornerShape(12.dp)
+                    ),
+                textStyle = TextStyle(fontSize = 14.sp),
+                value = email.value,
+                keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Email),
+                colors = TextFieldDefaults.textFieldColors(
+                    containerColor = MaterialTheme.colorScheme.secondary,
+                    focusedIndicatorColor = MaterialTheme.colorScheme.secondary,
+                    focusedTextColor = MaterialTheme.colorScheme.onPrimary,
+                    unfocusedTextColor = MaterialTheme.colorScheme.secondary,
+                    disabledIndicatorColor = Color.Transparent,
+                    unfocusedIndicatorColor = Color.Transparent,
+                    cursorColor = MaterialTheme.colorScheme.primary,
+                    disabledPlaceholderColor = MaterialTheme.colorScheme.onSecondary,
+                    focusedPlaceholderColor = MaterialTheme.colorScheme.onSecondary,
+                    unfocusedPlaceholderColor = MaterialTheme.colorScheme.onSecondary
+                ),
+
+                onValueChange = {
+                    if (it.length <= maxLength) email.value = it
+                    /*if (email.value.isNotEmpty() and emailPattern.matches(email.value)) {
+                    colorOfButton = lavender.value
+                } else {
+                    colorOfButton = gainsboro.value
+                }*/
+                },
+                placeholder = { Text("Email") },
+                singleLine = true
+            )
+            Text("Пароль", fontWeight = FontWeight.Bold, color = MaterialTheme.colorScheme.onPrimary, fontSize = 12.sp, modifier = Modifier.padding(start = 20.dp))
+
+            TextField(
+                modifier = Modifier
+                    .fillMaxWidth()
+                    .padding(horizontal = 20.dp, vertical = 10.dp)
+                    .clip(shape = RoundedCornerShape(8.dp))
+                    .border(
+                        width = 1.dp,
+                        color = MaterialTheme.colorScheme.onSecondary,
+                        shape = RoundedCornerShape(12.dp)
+                    ),
+                value = password.value,
+                colors = TextFieldDefaults.textFieldColors(
+                    containerColor = MaterialTheme.colorScheme.secondary,
+                    focusedIndicatorColor = MaterialTheme.colorScheme.secondary,
+                    focusedTextColor = MaterialTheme.colorScheme.onPrimary,
+                    unfocusedTextColor = MaterialTheme.colorScheme.secondary,
+                    disabledIndicatorColor = Color.Transparent,
+                    unfocusedIndicatorColor = Color.Transparent,
+                    cursorColor = MaterialTheme.colorScheme.primary,
+                    disabledPlaceholderColor = MaterialTheme.colorScheme.onSecondary,
+                    focusedPlaceholderColor = MaterialTheme.colorScheme.onSecondary,
+                    unfocusedPlaceholderColor = MaterialTheme.colorScheme.onSecondary
+                ),
+                visualTransformation = if (passwordVisibility) VisualTransformation.None else PasswordVisualTransformation(),
+                trailingIcon = {
+                    IconButton(onClick = {
+                        passwordVisibility = !passwordVisibility
+                    }) {
+                        if (passwordVisibility) {
+                            Icon(
+                                painter = painterResource(id = R.drawable.baseline_visibility_24),
+                                contentDescription = ""
+                            )
+                        } else {
+                            Icon(
+                                painter = painterResource(id = R.drawable.baseline_visibility_off_24),
+                                contentDescription = ""
+                            )
+                        }
+                    }
+                },
+                onValueChange = {
+                    if (it.length <= maxLength) password.value = it
+                },
+                placeholder = { Text("Придумайте пароль") },
+                singleLine = true
+            )
+
+            TextField(
+                modifier = Modifier
+                    .fillMaxWidth()
+                    .padding(horizontal = 20.dp, vertical = 10.dp)
+                    .clip(shape = RoundedCornerShape(8.dp))
+                    .border(
+                        width = 1.dp,
+                        color = MaterialTheme.colorScheme.onSecondary,
+                        shape = RoundedCornerShape(12.dp)
+                    ),
+                value = password1.value,
+                colors = TextFieldDefaults.textFieldColors(
+                    containerColor = MaterialTheme.colorScheme.secondary,
+                    focusedIndicatorColor = MaterialTheme.colorScheme.secondary,
+                    focusedTextColor = MaterialTheme.colorScheme.onPrimary,
+                    unfocusedTextColor = MaterialTheme.colorScheme.secondary,
+                    disabledIndicatorColor = Color.Transparent,
+                    unfocusedIndicatorColor = Color.Transparent,
+                    cursorColor = MaterialTheme.colorScheme.primary,
+                    disabledPlaceholderColor = MaterialTheme.colorScheme.onSecondary,
+                    focusedPlaceholderColor = MaterialTheme.colorScheme.onSecondary,
+                    unfocusedPlaceholderColor = MaterialTheme.colorScheme.onSecondary
+                ),
+                visualTransformation = if (password1Visibility) VisualTransformation.None else PasswordVisualTransformation(),
+                trailingIcon = {
+                    IconButton(onClick = {
+                        password1Visibility = !password1Visibility
+                    }) {
+                        if (password1Visibility) {
+                            Icon(
+                                painter = painterResource(id = R.drawable.baseline_visibility_24),
+                                contentDescription = ""
+                            )
+                        } else {
+                            Icon(
+                                painter = painterResource(id = R.drawable.baseline_visibility_off_24),
+                                contentDescription = ""
+                            )
+                        }
+                    }
+                },
+                onValueChange = {
+                    if (it.length <= maxLength) password1.value = it
+                },
+                placeholder = { Text("Повторите пароль") },
+                singleLine = true
+            )
+
+            Button(
+                onClick = {
+                },
+                modifier = Modifier
+                    .fillMaxWidth()
+                    .height(48.dp)
+                    .padding(top = 10.dp, start = 20.dp, end = 30.dp)
+                    .height(50.dp)
+
+                ,
+                shape = RoundedCornerShape(8.dp),
+                colors = ButtonDefaults.buttonColors(
+                    containerColor = MaterialTheme.colorScheme.primary
+                ),
+
+                ) {
+
+                Text("Войти", fontSize = 15.sp, color = MaterialTheme.colorScheme.secondary)
+
+            }
+            Row(modifier= Modifier
+                .fillMaxWidth()
+                .padding(horizontal = 30.dp),
+                verticalAlignment = Alignment.CenterVertically, horizontalArrangement = Arrangement.Center){
+                Text("Уже с нами? ", color = MaterialTheme.colorScheme.onSecondary, fontSize = 12.sp, textAlign = TextAlign.Center)
+                TextButton(onClick = {
+                }, colors = ButtonDefaults.textButtonColors(contentColor = Color.White, containerColor = Color.Transparent),
+                    modifier = Modifier.padding(0.dp))
+                {
+                    Text("Авторизация", fontSize = 12.sp, style = TextStyle(
+                    fontWeight = FontWeight.SemiBold), textAlign = TextAlign.Center, color = MaterialTheme.colorScheme.primary) }
+            }
+
+            HorizontalDivider(color= MaterialTheme.colorScheme.onSecondary, thickness = 0.5.dp, modifier = Modifier.padding(horizontal = 24.dp))
+
+
+
+        }
+    }
 }

+ 74 - 0
Frontend/app/src/main/res/drawable/ic_launcher_neurea_background.xml

@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector
+    android:height="108dp"
+    android:width="108dp"
+    android:viewportHeight="108"
+    android:viewportWidth="108"
+    xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#3DDC84"
+          android:pathData="M0,0h108v108h-108z"/>
+    <path android:fillColor="#00000000" android:pathData="M9,0L9,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M19,0L19,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M29,0L29,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M39,0L39,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M49,0L49,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M59,0L59,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M69,0L69,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M79,0L79,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M89,0L89,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M99,0L99,108"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,9L108,9"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,19L108,19"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,29L108,29"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,39L108,39"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,49L108,49"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,59L108,59"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,69L108,69"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,79L108,79"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,89L108,89"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M0,99L108,99"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M19,29L89,29"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M19,39L89,39"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M19,49L89,49"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M19,59L89,59"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M19,69L89,69"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M19,79L89,79"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M29,19L29,89"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M39,19L39,89"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M49,19L49,89"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M59,19L59,89"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M69,19L69,89"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+    <path android:fillColor="#00000000" android:pathData="M79,19L79,89"
+          android:strokeColor="#33FFFFFF" android:strokeWidth="0.8"/>
+</vector>

+ 21 - 0
Frontend/app/src/main/res/drawable/ic_launcher_neurea_foreground.xml

@@ -0,0 +1,21 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="108dp"
+    android:height="108dp"
+    android:viewportWidth="500"
+    android:viewportHeight="500">
+  <path
+      android:pathData="M0,0h500v500h-500z"
+      android:fillColor="#00A693"/>
+  <path
+      android:pathData="M193,141L307,141A28,28 0,0 1,335 169L335,330A28,28 0,0 1,307 358L193,358A28,28 0,0 1,165 330L165,169A28,28 0,0 1,193 141z"
+      android:fillColor="#ffffff"/>
+  <path
+      android:pathData="M187,174C187,169.58 190.58,166 195,166H232C236.42,166 240,169.58 240,174V233H187V174Z"
+      android:fillColor="#00A693"/>
+  <path
+      android:pathData="M187,233H214L187,251.5V233Z"
+      android:fillColor="#00A693"/>
+  <path
+      android:pathData="M240,233H213L240,251.5V233Z"
+      android:fillColor="#00A693"/>
+</vector>

+ 5 - 0
Frontend/app/src/main/res/mipmap-anydpi-v26/ic_launcher_neurea.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="@drawable/ic_launcher_neurea_background"/>
+    <foreground android:drawable="@drawable/ic_launcher_neurea_foreground"/>
+</adaptive-icon>

+ 5 - 0
Frontend/app/src/main/res/mipmap-anydpi-v26/ic_launcher_neurea_round.xml

@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+    <background android:drawable="@drawable/ic_launcher_neurea_background"/>
+    <foreground android:drawable="@drawable/ic_launcher_neurea_foreground"/>
+</adaptive-icon>

BIN
Frontend/app/src/main/res/mipmap-hdpi/ic_launcher_neurea.webp


BIN
Frontend/app/src/main/res/mipmap-hdpi/ic_launcher_neurea_round.webp


BIN
Frontend/app/src/main/res/mipmap-mdpi/ic_launcher_neurea.webp


BIN
Frontend/app/src/main/res/mipmap-mdpi/ic_launcher_neurea_round.webp


BIN
Frontend/app/src/main/res/mipmap-xhdpi/ic_launcher_neurea.webp


BIN
Frontend/app/src/main/res/mipmap-xhdpi/ic_launcher_neurea_round.webp


BIN
Frontend/app/src/main/res/mipmap-xxhdpi/ic_launcher_neurea.webp


BIN
Frontend/app/src/main/res/mipmap-xxhdpi/ic_launcher_neurea_round.webp


BIN
Frontend/app/src/main/res/mipmap-xxxhdpi/ic_launcher_neurea.webp


BIN
Frontend/app/src/main/res/mipmap-xxxhdpi/ic_launcher_neurea_round.webp