Преглед на файлове

app: add screens for registration, sign in and recovery password

Bobarik31p преди 1 седмица
родител
ревизия
da790abca2
променени са 19 файла, в които са добавени 713 реда и са изтрити 397 реда
  1. 26 0
      App/.idea/appInsightsSettings.xml
  2. 28 0
      App/.idea/inspectionProfiles/Project_Default.xml
  3. 0 1
      App/.idea/misc.xml
  4. 0 329
      App/.idea/other.xml
  5. 3 14
      App/app/src/main/java/com/example/mystictale/MainActivity.kt
  6. 5 4
      App/app/src/main/java/com/example/mystictale/Screen/Start.kt
  7. 147 0
      App/app/src/main/java/com/example/mystictale/Screen/passwordRecovery/PasswordRecovery.kt
  8. 10 8
      App/app/src/main/java/com/example/mystictale/Screen/registration/RegistrationDateOfBirth.kt
  9. 23 13
      App/app/src/main/java/com/example/mystictale/Screen/registration/RegistrationEmail.kt
  10. 131 0
      App/app/src/main/java/com/example/mystictale/Screen/registration/RegistrationGender.kt
  11. 15 8
      App/app/src/main/java/com/example/mystictale/Screen/registration/RegistrationName.kt
  12. 23 9
      App/app/src/main/java/com/example/mystictale/Screen/registration/RegistrationPassword.kt
  13. 152 0
      App/app/src/main/java/com/example/mystictale/Screen/signIn/SignIn.kt
  14. 24 9
      App/app/src/main/java/com/example/mystictale/navigation/Navigation.kt
  15. 4 0
      App/app/src/main/java/com/example/mystictale/navigation/Screens.kt
  16. 119 0
      App/app/src/main/java/com/example/mystictale/resources/ChooseGender.kt
  17. 1 1
      App/app/src/main/java/com/example/mystictale/resources/GenericTextField.kt
  18. 1 1
      App/app/src/main/java/com/example/mystictale/resources/dateOfBirthVisualTransformation.kt
  19. 1 0
      App/app/src/main/java/com/example/mystictale/ui/theme/Color.kt

+ 26 - 0
App/.idea/appInsightsSettings.xml

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="AppInsightsSettings">
+    <option name="tabSettings">
+      <map>
+        <entry key="Firebase Crashlytics">
+          <value>
+            <InsightsFilterSettings>
+              <option name="connection">
+                <ConnectionSetting>
+                  <option name="appId" value="PLACEHOLDER" />
+                  <option name="mobileSdkAppId" value="" />
+                  <option name="projectId" value="" />
+                  <option name="projectNumber" value="" />
+                </ConnectionSetting>
+              </option>
+              <option name="signal" value="SIGNAL_UNSPECIFIED" />
+              <option name="timeIntervalDays" value="THIRTY_DAYS" />
+              <option name="visibilityType" value="ALL" />
+            </InsightsFilterSettings>
+          </value>
+        </entry>
+      </map>
+    </option>
+  </component>
+</project>

+ 28 - 0
App/.idea/inspectionProfiles/Project_Default.xml

@@ -1,6 +1,34 @@
 <component name="InspectionProjectProfileManager">
   <profile version="1.0">
     <option name="myName" value="Project Default" />
+    <inspection_tool class="ComposePreviewDimensionRespectsLimit" enabled="true" level="WARNING" enabled_by_default="true">
+      <option name="composableFile" value="true" />
+      <option name="previewFile" value="true" />
+    </inspection_tool>
+    <inspection_tool class="ComposePreviewMustBeTopLevelFunction" enabled="true" level="ERROR" enabled_by_default="true">
+      <option name="composableFile" value="true" />
+      <option name="previewFile" value="true" />
+    </inspection_tool>
+    <inspection_tool class="ComposePreviewNeedsComposableAnnotation" enabled="true" level="ERROR" enabled_by_default="true">
+      <option name="composableFile" value="true" />
+      <option name="previewFile" value="true" />
+    </inspection_tool>
+    <inspection_tool class="ComposePreviewNotSupportedInUnitTestFiles" enabled="true" level="ERROR" enabled_by_default="true">
+      <option name="composableFile" value="true" />
+      <option name="previewFile" value="true" />
+    </inspection_tool>
+    <inspection_tool class="GlancePreviewDimensionRespectsLimit" enabled="true" level="WARNING" enabled_by_default="true">
+      <option name="composableFile" value="true" />
+    </inspection_tool>
+    <inspection_tool class="GlancePreviewMustBeTopLevelFunction" enabled="true" level="ERROR" enabled_by_default="true">
+      <option name="composableFile" value="true" />
+    </inspection_tool>
+    <inspection_tool class="GlancePreviewNeedsComposableAnnotation" enabled="true" level="ERROR" enabled_by_default="true">
+      <option name="composableFile" value="true" />
+    </inspection_tool>
+    <inspection_tool class="GlancePreviewNotSupportedInUnitTestFiles" enabled="true" level="ERROR" enabled_by_default="true">
+      <option name="composableFile" value="true" />
+    </inspection_tool>
     <inspection_tool class="PreviewAnnotationInFunctionWithParameters" enabled="true" level="ERROR" enabled_by_default="true">
       <option name="composableFile" value="true" />
       <option name="previewFile" value="true" />

+ 0 - 1
App/.idea/misc.xml

@@ -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_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">

+ 0 - 329
App/.idea/other.xml

@@ -1,329 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="direct_access_persist.xml">
-    <option name="deviceSelectionList">
-      <list>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="27" />
-          <option name="brand" value="DOCOMO" />
-          <option name="codename" value="F01L" />
-          <option name="id" value="F01L" />
-          <option name="manufacturer" value="FUJITSU" />
-          <option name="name" value="F-01L" />
-          <option name="screenDensity" value="360" />
-          <option name="screenX" value="720" />
-          <option name="screenY" value="1280" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="28" />
-          <option name="brand" value="DOCOMO" />
-          <option name="codename" value="SH-01L" />
-          <option name="id" value="SH-01L" />
-          <option name="manufacturer" value="SHARP" />
-          <option name="name" value="AQUOS sense2 SH-01L" />
-          <option name="screenDensity" value="480" />
-          <option name="screenX" value="1080" />
-          <option name="screenY" value="2160" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="34" />
-          <option name="brand" value="Lenovo" />
-          <option name="codename" value="TB370FU" />
-          <option name="id" value="TB370FU" />
-          <option name="manufacturer" value="Lenovo" />
-          <option name="name" value="Tab P12" />
-          <option name="screenDensity" value="340" />
-          <option name="screenX" value="1840" />
-          <option name="screenY" value="2944" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="31" />
-          <option name="brand" value="samsung" />
-          <option name="codename" value="a51" />
-          <option name="id" value="a51" />
-          <option name="manufacturer" value="Samsung" />
-          <option name="name" value="Galaxy A51" />
-          <option name="screenDensity" value="420" />
-          <option name="screenX" value="1080" />
-          <option name="screenY" value="2400" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="34" />
-          <option name="brand" value="google" />
-          <option name="codename" value="akita" />
-          <option name="id" value="akita" />
-          <option name="manufacturer" value="Google" />
-          <option name="name" value="Pixel 8a" />
-          <option name="screenDensity" value="420" />
-          <option name="screenX" value="1080" />
-          <option name="screenY" value="2400" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="33" />
-          <option name="brand" value="samsung" />
-          <option name="codename" value="b0q" />
-          <option name="id" value="b0q" />
-          <option name="manufacturer" value="Samsung" />
-          <option name="name" value="Galaxy S22 Ultra" />
-          <option name="screenDensity" value="600" />
-          <option name="screenX" value="1440" />
-          <option name="screenY" value="3088" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="32" />
-          <option name="brand" value="google" />
-          <option name="codename" value="bluejay" />
-          <option name="id" value="bluejay" />
-          <option name="manufacturer" value="Google" />
-          <option name="name" value="Pixel 6a" />
-          <option name="screenDensity" value="420" />
-          <option name="screenX" value="1080" />
-          <option name="screenY" value="2400" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="34" />
-          <option name="brand" value="google" />
-          <option name="codename" value="caiman" />
-          <option name="id" value="caiman" />
-          <option name="manufacturer" value="Google" />
-          <option name="name" value="Pixel 9 Pro" />
-          <option name="screenDensity" value="360" />
-          <option name="screenX" value="960" />
-          <option name="screenY" value="2142" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="34" />
-          <option name="brand" value="google" />
-          <option name="codename" value="comet" />
-          <option name="id" value="comet" />
-          <option name="manufacturer" value="Google" />
-          <option name="name" value="Pixel 9 Pro Fold" />
-          <option name="screenDensity" value="390" />
-          <option name="screenX" value="2076" />
-          <option name="screenY" value="2152" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="29" />
-          <option name="brand" value="samsung" />
-          <option name="codename" value="crownqlteue" />
-          <option name="id" value="crownqlteue" />
-          <option name="manufacturer" value="Samsung" />
-          <option name="name" value="Galaxy Note9" />
-          <option name="screenDensity" value="420" />
-          <option name="screenX" value="2220" />
-          <option name="screenY" value="1080" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="34" />
-          <option name="brand" value="samsung" />
-          <option name="codename" value="dm3q" />
-          <option name="id" value="dm3q" />
-          <option name="manufacturer" value="Samsung" />
-          <option name="name" value="Galaxy S23 Ultra" />
-          <option name="screenDensity" value="600" />
-          <option name="screenX" value="1440" />
-          <option name="screenY" value="3088" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="34" />
-          <option name="brand" value="samsung" />
-          <option name="codename" value="e1q" />
-          <option name="id" value="e1q" />
-          <option name="manufacturer" value="Samsung" />
-          <option name="name" value="Galaxy S24" />
-          <option name="screenDensity" value="480" />
-          <option name="screenX" value="1080" />
-          <option name="screenY" value="2340" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="33" />
-          <option name="brand" value="google" />
-          <option name="codename" value="felix" />
-          <option name="id" value="felix" />
-          <option name="manufacturer" value="Google" />
-          <option name="name" value="Pixel Fold" />
-          <option name="screenDensity" value="420" />
-          <option name="screenX" value="2208" />
-          <option name="screenY" value="1840" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="34" />
-          <option name="brand" value="google" />
-          <option name="codename" value="felix" />
-          <option name="id" value="felix" />
-          <option name="manufacturer" value="Google" />
-          <option name="name" value="Pixel Fold" />
-          <option name="screenDensity" value="420" />
-          <option name="screenX" value="2208" />
-          <option name="screenY" value="1840" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="33" />
-          <option name="brand" value="google" />
-          <option name="codename" value="felix_camera" />
-          <option name="id" value="felix_camera" />
-          <option name="manufacturer" value="Google" />
-          <option name="name" value="Pixel Fold (Camera-enabled)" />
-          <option name="screenDensity" value="420" />
-          <option name="screenX" value="2208" />
-          <option name="screenY" value="1840" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="33" />
-          <option name="brand" value="samsung" />
-          <option name="codename" value="gts8uwifi" />
-          <option name="id" value="gts8uwifi" />
-          <option name="manufacturer" value="Samsung" />
-          <option name="name" value="Galaxy Tab S8 Ultra" />
-          <option name="screenDensity" value="320" />
-          <option name="screenX" value="1848" />
-          <option name="screenY" value="2960" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="34" />
-          <option name="brand" value="google" />
-          <option name="codename" value="husky" />
-          <option name="id" value="husky" />
-          <option name="manufacturer" value="Google" />
-          <option name="name" value="Pixel 8 Pro" />
-          <option name="screenDensity" value="390" />
-          <option name="screenX" value="1008" />
-          <option name="screenY" value="2244" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="30" />
-          <option name="brand" value="motorola" />
-          <option name="codename" value="java" />
-          <option name="id" value="java" />
-          <option name="manufacturer" value="Motorola" />
-          <option name="name" value="G20" />
-          <option name="screenDensity" value="280" />
-          <option name="screenX" value="720" />
-          <option name="screenY" value="1600" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="34" />
-          <option name="brand" value="google" />
-          <option name="codename" value="komodo" />
-          <option name="id" value="komodo" />
-          <option name="manufacturer" value="Google" />
-          <option name="name" value="Pixel 9 Pro XL" />
-          <option name="screenDensity" value="360" />
-          <option name="screenX" value="1008" />
-          <option name="screenY" value="2244" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="33" />
-          <option name="brand" value="google" />
-          <option name="codename" value="lynx" />
-          <option name="id" value="lynx" />
-          <option name="manufacturer" value="Google" />
-          <option name="name" value="Pixel 7a" />
-          <option name="screenDensity" value="420" />
-          <option name="screenX" value="1080" />
-          <option name="screenY" value="2400" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="31" />
-          <option name="brand" value="google" />
-          <option name="codename" value="oriole" />
-          <option name="id" value="oriole" />
-          <option name="manufacturer" value="Google" />
-          <option name="name" value="Pixel 6" />
-          <option name="screenDensity" value="420" />
-          <option name="screenX" value="1080" />
-          <option name="screenY" value="2400" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="33" />
-          <option name="brand" value="google" />
-          <option name="codename" value="panther" />
-          <option name="id" value="panther" />
-          <option name="manufacturer" value="Google" />
-          <option name="name" value="Pixel 7" />
-          <option name="screenDensity" value="420" />
-          <option name="screenX" value="1080" />
-          <option name="screenY" value="2400" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="34" />
-          <option name="brand" value="samsung" />
-          <option name="codename" value="q5q" />
-          <option name="id" value="q5q" />
-          <option name="manufacturer" value="Samsung" />
-          <option name="name" value="Galaxy Z Fold5" />
-          <option name="screenDensity" value="420" />
-          <option name="screenX" value="1812" />
-          <option name="screenY" value="2176" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="34" />
-          <option name="brand" value="samsung" />
-          <option name="codename" value="q6q" />
-          <option name="id" value="q6q" />
-          <option name="manufacturer" value="Samsung" />
-          <option name="name" value="SM-F956B" />
-          <option name="screenDensity" value="420" />
-          <option name="screenX" value="1856" />
-          <option name="screenY" value="2160" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="30" />
-          <option name="brand" value="google" />
-          <option name="codename" value="r11" />
-          <option name="id" value="r11" />
-          <option name="manufacturer" value="Google" />
-          <option name="name" value="Pixel Watch" />
-          <option name="screenDensity" value="320" />
-          <option name="screenX" value="384" />
-          <option name="screenY" value="384" />
-          <option name="type" value="WEAR_OS" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="30" />
-          <option name="brand" value="google" />
-          <option name="codename" value="redfin" />
-          <option name="id" value="redfin" />
-          <option name="manufacturer" value="Google" />
-          <option name="name" value="Pixel 5" />
-          <option name="screenDensity" value="440" />
-          <option name="screenX" value="1080" />
-          <option name="screenY" value="2340" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="34" />
-          <option name="brand" value="google" />
-          <option name="codename" value="shiba" />
-          <option name="id" value="shiba" />
-          <option name="manufacturer" value="Google" />
-          <option name="name" value="Pixel 8" />
-          <option name="screenDensity" value="420" />
-          <option name="screenX" value="1080" />
-          <option name="screenY" value="2400" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="33" />
-          <option name="brand" value="google" />
-          <option name="codename" value="tangorpro" />
-          <option name="id" value="tangorpro" />
-          <option name="manufacturer" value="Google" />
-          <option name="name" value="Pixel Tablet" />
-          <option name="screenDensity" value="320" />
-          <option name="screenX" value="1600" />
-          <option name="screenY" value="2560" />
-        </PersistentDeviceSelectionData>
-        <PersistentDeviceSelectionData>
-          <option name="api" value="34" />
-          <option name="brand" value="google" />
-          <option name="codename" value="tokay" />
-          <option name="id" value="tokay" />
-          <option name="manufacturer" value="Google" />
-          <option name="name" value="Pixel 9" />
-          <option name="screenDensity" value="420" />
-          <option name="screenX" value="1080" />
-          <option name="screenY" value="2424" />
-        </PersistentDeviceSelectionData>
-      </list>
-    </option>
-  </component>
-</project>

+ 3 - 14
App/app/src/main/java/com/example/mystictale/MainActivity.kt

@@ -6,20 +6,8 @@ import androidx.activity.ComponentActivity
 import androidx.activity.compose.setContent
 import androidx.activity.enableEdgeToEdge
 import androidx.annotation.RequiresApi
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.padding
-import androidx.compose.material3.Scaffold
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.tooling.preview.Preview
-import com.example.mystictale.Screen.RegistrationDateOfBirth
-import com.example.mystictale.Screen.RegistrationEmail
-import com.example.mystictale.Screen.RegistrationName
-import com.example.mystictale.Screen.RegistrationPassword
-import com.example.mystictale.Screen.Start
+import com.example.mystictale.navigation.Navigation
 import com.example.mystictale.ui.theme.MysticTaleTheme
-import drawable.Screen.LoadingScreen
 
 class MainActivity : ComponentActivity() {
     @RequiresApi(Build.VERSION_CODES.O)
@@ -28,7 +16,8 @@ class MainActivity : ComponentActivity() {
         enableEdgeToEdge()
         setContent {
             MysticTaleTheme {
-                RegistrationDateOfBirth()
+                Navigation()
+
             }
         }
     }

+ 5 - 4
App/app/src/main/java/com/example/mystictale/Screen/Start.kt

@@ -25,14 +25,15 @@ import androidx.compose.ui.text.font.FontWeight
 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.mystictale.R
+import com.example.mystictale.navigation.Screens
 import com.example.mystictale.ui.theme.DarkPurple
 import com.example.mystictale.ui.theme.OpenSans
 import com.example.mystictale.ui.theme.Wolgadeutsche
 
-@Preview
 @Composable
-fun Start() {
+fun Start(navController: NavController) {
     Box(
         Modifier
             .fillMaxSize()
@@ -59,7 +60,7 @@ fun Start() {
             Spacer(modifier = Modifier.height(50.dp))
 
             Button(
-                onClick = { /*TODO*/ },
+                onClick = { navController.navigate(Screens.SingIn.route) },
                 modifier = Modifier
                     .width(290.dp)
                     .height(48.dp),
@@ -78,7 +79,7 @@ fun Start() {
 
 
             Button(
-                onClick = { /*TODO*/ },
+                onClick = { navController.navigate(Screens.RegistrationEmail.route) },
                 modifier = Modifier
                     .width(290.dp)
                     .height(48.dp),

+ 147 - 0
App/app/src/main/java/com/example/mystictale/Screen/passwordRecovery/PasswordRecovery.kt

@@ -0,0 +1,147 @@
+package com.example.mystictale.Screen.passwordRecovery
+
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.gestures.detectTapGestures
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+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.layout.width
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material3.Button
+import androidx.compose.material3.ButtonColors
+import androidx.compose.material3.LinearProgressIndicator
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.paint
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.StrokeCap
+import androidx.compose.ui.input.pointer.pointerInput
+import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.platform.LocalFocusManager
+import androidx.compose.ui.platform.LocalSoftwareKeyboardController
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import androidx.navigation.NavController
+import com.example.mystictale.R
+import com.example.mystictale.navigation.Screens
+import com.example.mystictale.resources.GenericTextField
+import com.example.mystictale.ui.theme.DarkPurple
+import com.example.mystictale.ui.theme.Grey
+import com.example.mystictale.ui.theme.OpenSans
+
+@Composable
+fun PasswordRecovery(navController: NavController) {
+    val focusManager = LocalFocusManager.current
+    val keyboardController = LocalSoftwareKeyboardController.current
+    val email = remember {
+        mutableStateOf("")
+    }
+    Column(
+        Modifier
+            .fillMaxSize()
+            .paint(
+                painterResource(id = R.drawable.background),
+                contentScale = ContentScale.FillBounds
+            )
+            .pointerInput(Unit) {
+                detectTapGestures(onTap = {
+                    keyboardController?.hide()
+                    focusManager.clearFocus()
+                })
+            }
+            .padding(10.dp),
+        verticalArrangement = Arrangement.SpaceBetween,
+        horizontalAlignment = Alignment.CenterHorizontally
+    ) {
+
+        Column {
+            Box(
+                modifier = Modifier
+                    .padding(top = 30.dp),
+                contentAlignment = Alignment.TopStart
+            ) {
+                Button(
+                    onClick = { navController.navigate(Screens.SingIn.route) },
+                    colors = ButtonColors(
+                        disabledContentColor = Color.White,
+                        disabledContainerColor = Color.Transparent,
+                        contentColor = Color.White,
+                        containerColor = Color.Transparent
+                    )
+                ) {
+                    Image(
+                        painter = painterResource(id = R.drawable.back),
+                        contentDescription = "back",
+                        modifier = Modifier
+                            .width(11.dp)
+                            .height(14.dp)
+                    )
+                }
+            }
+            Spacer(modifier = Modifier.height(30.dp))
+            Text(
+                text = "Сброс пароля",
+                fontWeight = FontWeight.Bold,
+                fontFamily = OpenSans,
+                fontSize = 24.sp,
+                color = Color.White,
+                modifier = Modifier
+                    .fillMaxWidth(0.9f)
+                    .padding(horizontal = 20.dp),
+                style = MaterialTheme.typography.headlineMedium
+            )
+            Spacer(modifier = Modifier.height(30.dp))
+
+            Text(
+                text = "Укажите свой адрес электронной почты, чтобы мы могли найти Ваш аккаунт",
+                fontWeight = FontWeight.Light,
+                fontFamily = OpenSans,
+                fontSize = 13.sp,
+                color = Color.White,
+                modifier = Modifier
+                    .fillMaxWidth(0.9f)
+                    .padding(horizontal = 20.dp)
+            )
+            Spacer(modifier = Modifier.height(30.dp))
+
+
+            GenericTextField(email.value, { email.value = it }, "E-mail", KeyboardType.Email)
+        }
+
+        Box(Modifier.padding(bottom = 40.dp)) {
+            Button(
+                onClick = { navController.navigate(Screens.RegistrationPassword.route) },
+                modifier = Modifier
+                    .width(290.dp)
+                    .height(48.dp),
+                shape = RoundedCornerShape(12.dp),
+                colors = ButtonColors(
+                    containerColor = DarkPurple,
+                    contentColor = Color.White,
+                    disabledContentColor = Color.White,
+                    disabledContainerColor = DarkPurple
+                )
+            ) {
+                Text("Далее", fontSize = 20.sp, fontWeight = FontWeight.Bold)
+
+            }
+
+        }
+
+
+    }
+}

+ 10 - 8
App/app/src/main/java/com/example/mystictale/Screen/RegistrationDateOfBirth.kt → App/app/src/main/java/com/example/mystictale/Screen/registration/RegistrationDateOfBirth.kt

@@ -1,4 +1,4 @@
-package com.example.mystictale.Screen
+package com.example.mystictale.Screen.registration
 
 import android.os.Build
 import androidx.annotation.RequiresApi
@@ -33,16 +33,18 @@ import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.StrokeCap
 import androidx.compose.ui.input.pointer.pointerInput
 import androidx.compose.ui.layout.ContentScale
-import androidx.compose.ui.platform.LocalContext
 import androidx.compose.ui.platform.LocalFocusManager
 import androidx.compose.ui.platform.LocalSoftwareKeyboardController
 import androidx.compose.ui.res.painterResource
 import androidx.compose.ui.text.font.FontWeight
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.sp
+import androidx.navigation.NavController
 import com.example.mystictale.R
+import com.example.mystictale.navigation.Screens
 import com.example.mystictale.resources.DateOfBirthTextField
 import com.example.mystictale.ui.theme.DarkPurple
+import com.example.mystictale.ui.theme.Grey
 import com.example.mystictale.ui.theme.OpenSans
 import com.vanpra.composematerialdialogs.MaterialDialog
 import com.vanpra.composematerialdialogs.datetime.date.datepicker
@@ -52,7 +54,7 @@ import java.time.format.DateTimeFormatter
 
 @RequiresApi(Build.VERSION_CODES.O)
 @Composable
-fun RegistrationDateOfBirth() {
+fun RegistrationDateOfBirth(navController: NavController) {
     val focusManager = LocalFocusManager.current
     val keyboardController = LocalSoftwareKeyboardController.current
     var pickedDate by remember { mutableStateOf(LocalDate.now()) }
@@ -91,7 +93,7 @@ fun RegistrationDateOfBirth() {
                 contentAlignment = Alignment.TopStart
             ) {
                 Button(
-                    onClick = { /*TODO*/ }, colors = ButtonColors(
+                    onClick = {navController.navigate(Screens.RegistrationName.route) }, colors = ButtonColors(
                         disabledContentColor = Color.White,
                         disabledContainerColor = Color.Transparent,
                         contentColor = Color.White,
@@ -119,8 +121,8 @@ fun RegistrationDateOfBirth() {
                         progress = 0.8f,
                         modifier = Modifier.width(157.dp),
                         strokeCap = StrokeCap.Round,
-                        trackColor = Color(0xFFA1A0A3),
-                        color = Color(0xFF28176B)
+                        trackColor = Grey,
+                        color = DarkPurple
                     )
                 }
             }
@@ -133,7 +135,7 @@ fun RegistrationDateOfBirth() {
                 color = Color.White,
                 modifier = Modifier
                     .fillMaxWidth(0.9f)
-                    .padding(start = 40.dp),
+                    .padding(start = 35.dp),
                 style = MaterialTheme.typography.headlineMedium
             )
             Spacer(modifier = Modifier.height(30.dp))
@@ -147,7 +149,7 @@ fun RegistrationDateOfBirth() {
 
         Box(Modifier.padding(bottom = 40.dp)) {
             Button(
-                onClick = { /*TODO*/ },
+                onClick = { navController.navigate(Screens.RegistrationGender.route) },
                 modifier = Modifier
                     .width(290.dp)
                     .height(48.dp),

+ 23 - 13
App/app/src/main/java/com/example/mystictale/Screen/RegistrationEmail.kt → App/app/src/main/java/com/example/mystictale/Screen/registration/RegistrationEmail.kt

@@ -1,6 +1,7 @@
-package com.example.mystictale.Screen
+package com.example.mystictale.Screen.registration
 
 import androidx.compose.foundation.Image
+import androidx.compose.foundation.gestures.detectTapGestures
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
@@ -17,8 +18,6 @@ import androidx.compose.material3.ButtonColors
 import androidx.compose.material3.LinearProgressIndicator
 import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.Text
-import androidx.compose.material3.TextField
-import androidx.compose.material3.TextFieldDefaults
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.mutableStateOf
 import androidx.compose.runtime.remember
@@ -27,22 +26,27 @@ import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.paint
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.StrokeCap
+import androidx.compose.ui.input.pointer.pointerInput
 import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.platform.LocalFocusManager
+import androidx.compose.ui.platform.LocalSoftwareKeyboardController
 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.tooling.preview.Preview
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.sp
+import androidx.navigation.NavController
 import com.example.mystictale.R
+import com.example.mystictale.navigation.Screens
 import com.example.mystictale.resources.GenericTextField
 import com.example.mystictale.ui.theme.DarkPurple
+import com.example.mystictale.ui.theme.Grey
 import com.example.mystictale.ui.theme.OpenSans
 
-@Preview
 @Composable
-fun RegistrationEmail() {
+fun RegistrationEmail(navController: NavController) {
+    val focusManager = LocalFocusManager.current
+    val keyboardController = LocalSoftwareKeyboardController.current
     val email = remember {
         mutableStateOf("")
     }
@@ -53,6 +57,12 @@ fun RegistrationEmail() {
                 painterResource(id = R.drawable.background),
                 contentScale = ContentScale.FillBounds
             )
+            .pointerInput(Unit) {
+                detectTapGestures(onTap = {
+                    keyboardController?.hide()
+                    focusManager.clearFocus()
+                })
+            }
             .padding(10.dp),
         verticalArrangement = Arrangement.SpaceBetween,
         horizontalAlignment = Alignment.CenterHorizontally
@@ -65,7 +75,7 @@ fun RegistrationEmail() {
                 contentAlignment = Alignment.TopStart
             ) {
                 Button(
-                    onClick = { /*TODO*/ }, colors = ButtonColors(
+                    onClick = { navController.navigate(Screens.Start.route) }, colors = ButtonColors(
                         disabledContentColor = Color.White,
                         disabledContainerColor = Color.Transparent,
                         contentColor = Color.White,
@@ -93,8 +103,8 @@ fun RegistrationEmail() {
                         progress = 0.2f,
                         modifier = Modifier.width(157.dp),
                         strokeCap = StrokeCap.Round,
-                        trackColor = Color(0xFFA1A0A3),
-                        color = Color(0xFF28176B)
+                        trackColor = Grey,
+                        color = DarkPurple
                     )
                 }
             }
@@ -103,11 +113,11 @@ fun RegistrationEmail() {
                 text = "Ваша электронная почта",
                 fontWeight = FontWeight.Bold,
                 fontFamily = OpenSans,
-                fontSize = 30.sp,
+                fontSize = 24.sp,
                 color = Color.White,
                 modifier = Modifier
                     .fillMaxWidth(0.9f)
-                    .padding(start = 40.dp),
+                    .padding(start = 35.dp),
                 style = MaterialTheme.typography.headlineMedium
             )
             Spacer(modifier = Modifier.height(30.dp))
@@ -117,7 +127,7 @@ fun RegistrationEmail() {
 
         Box(Modifier.padding(bottom = 40.dp)){
             Button(
-                onClick = { /*TODO*/ },
+                onClick = { navController.navigate(Screens.RegistrationPassword.route) },
                 modifier = Modifier
                     .width(290.dp)
                     .height(48.dp),

+ 131 - 0
App/app/src/main/java/com/example/mystictale/Screen/registration/RegistrationGender.kt

@@ -0,0 +1,131 @@
+package com.example.mystictale.Screen.registration
+
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+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.layout.width
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material3.Button
+import androidx.compose.material3.ButtonColors
+import androidx.compose.material3.LinearProgressIndicator
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.paint
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.StrokeCap
+import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import androidx.navigation.NavController
+import com.example.mystictale.R
+import com.example.mystictale.navigation.Screens
+import com.example.mystictale.resources.ChooseGender
+import com.example.mystictale.ui.theme.DarkPurple
+import com.example.mystictale.ui.theme.OpenSans
+
+@Composable
+fun RegistrationGender(navController: NavController) {
+    Column(
+        Modifier
+            .fillMaxSize()
+            .paint(
+                painterResource(id = R.drawable.background),
+                contentScale = ContentScale.FillBounds
+            )
+            .padding(10.dp),
+        verticalArrangement = Arrangement.SpaceBetween,
+        horizontalAlignment = Alignment.CenterHorizontally
+    ) {
+
+        Column {
+            Box(
+                modifier = Modifier
+                    .padding(top = 30.dp),
+                contentAlignment = Alignment.TopStart
+            ) {
+                Button(
+                    onClick = { navController.navigate(Screens.RegistrationDateOfBirth.route) },
+                    colors = ButtonColors(
+                        disabledContentColor = Color.White,
+                        disabledContainerColor = Color.Transparent,
+                        contentColor = Color.White,
+                        containerColor = Color.Transparent
+                    )
+                ) {
+                    Image(
+                        painter = painterResource(id = R.drawable.back),
+                        contentDescription = "back",
+                        modifier = Modifier
+                            .width(11.dp)
+                            .height(14.dp)
+                    )
+                }
+                Row(
+                    modifier = Modifier
+                        .fillMaxWidth()
+                        .padding(top = 22.dp),
+                    horizontalArrangement = Arrangement.Center,
+                    verticalAlignment = Alignment.CenterVertically
+                ) {
+
+
+                    LinearProgressIndicator(
+                        progress = { 1f },
+                        modifier = Modifier.width(157.dp),
+                        color = Color(0xFF28176B),
+                        trackColor = Color(0xFFA1A0A3),
+                        strokeCap = StrokeCap.Round,
+                    )
+                }
+            }
+            Spacer(modifier = Modifier.height(30.dp))
+            Text(
+                text = "Ваш пол",
+                fontWeight = FontWeight.Bold,
+                fontFamily = OpenSans,
+                fontSize = 24 .sp,
+                color = Color.White,
+                modifier = Modifier
+                    .fillMaxWidth(0.9f)
+                    .padding(horizontal = 35.dp),
+                style = MaterialTheme.typography.headlineMedium
+            )
+            Spacer(modifier = Modifier.height(30.dp))
+            ChooseGender()
+        }
+        Box(Modifier.padding(bottom = 40.dp)) {
+            Button(
+                onClick = { },
+                modifier = Modifier
+                    .width(290.dp)
+                    .height(48.dp),
+                shape = RoundedCornerShape(12.dp),
+                colors = ButtonColors(
+                    containerColor = DarkPurple,
+                    contentColor = Color.White,
+                    disabledContentColor = Color.White,
+                    disabledContainerColor = DarkPurple
+                )
+            ) {
+                Text("Далее", fontSize = 20.sp, fontWeight = FontWeight.Bold)
+
+            }
+
+        }
+
+
+    }
+
+}

+ 15 - 8
App/app/src/main/java/com/example/mystictale/Screen/RegistrationName.kt → App/app/src/main/java/com/example/mystictale/Screen/registration/RegistrationName.kt

@@ -1,4 +1,4 @@
-package com.example.mystictale.Screen
+package com.example.mystictale.Screen.registration
 
 import androidx.compose.foundation.Image
 import androidx.compose.foundation.layout.Arrangement
@@ -26,18 +26,25 @@ import androidx.compose.ui.draw.paint
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.StrokeCap
 import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.platform.LocalFocusManager
+import androidx.compose.ui.platform.LocalSoftwareKeyboardController
 import androidx.compose.ui.res.painterResource
 import androidx.compose.ui.text.font.FontWeight
 import androidx.compose.ui.text.input.KeyboardType
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.sp
+import androidx.navigation.NavController
 import com.example.mystictale.R
+import com.example.mystictale.navigation.Screens
 import com.example.mystictale.resources.GenericTextField
 import com.example.mystictale.ui.theme.DarkPurple
+import com.example.mystictale.ui.theme.Grey
 import com.example.mystictale.ui.theme.OpenSans
 
 @Composable
-fun RegistrationName() {
+fun RegistrationName(navController: NavController) {
+    val focusManager = LocalFocusManager.current
+    val keyboardController = LocalSoftwareKeyboardController.current
     val name = remember {
         mutableStateOf("")
     }
@@ -60,7 +67,7 @@ fun RegistrationName() {
                 contentAlignment = Alignment.TopStart
             ) {
                 Button(
-                    onClick = { /*TODO*/ }, colors = ButtonColors(
+                    onClick = { navController.navigate(Screens.RegistrationPassword.route) }, colors = ButtonColors(
                         disabledContentColor = Color.White,
                         disabledContainerColor = Color.Transparent,
                         contentColor = Color.White,
@@ -88,8 +95,8 @@ fun RegistrationName() {
                         progress = 0.6f,
                         modifier = Modifier.width(157.dp),
                         strokeCap = StrokeCap.Round,
-                        trackColor = Color(0xFFA1A0A3),
-                        color = Color(0xFF28176B)
+                        trackColor = Grey,
+                        color = DarkPurple
                     )
                 }
             }
@@ -98,11 +105,11 @@ fun RegistrationName() {
                 text = "Как Вас зовут?",
                 fontWeight = FontWeight.Bold,
                 fontFamily = OpenSans,
-                fontSize = 30.sp,
+                fontSize = 24.sp,
                 color = Color.White,
                 modifier = Modifier
                     .fillMaxWidth(0.9f)
-                    .padding(start = 40.dp),
+                    .padding(start = 35.dp),
                 style = MaterialTheme.typography.headlineMedium
             )
             Spacer(modifier = Modifier.height(30.dp))
@@ -113,7 +120,7 @@ fun RegistrationName() {
 
         Box(Modifier.padding(bottom = 40.dp)) {
             Button(
-                onClick = { /*TODO*/ },
+                onClick = { navController.navigate(Screens.RegistrationDateOfBirth.route) },
                 modifier = Modifier
                     .width(290.dp)
                     .height(48.dp),

+ 23 - 9
App/app/src/main/java/com/example/mystictale/Screen/RegistrationPassword.kt → App/app/src/main/java/com/example/mystictale/Screen/registration/RegistrationPassword.kt

@@ -1,6 +1,7 @@
-package com.example.mystictale.Screen
+package com.example.mystictale.Screen.registration
 
 import androidx.compose.foundation.Image
+import androidx.compose.foundation.gestures.detectTapGestures
 import androidx.compose.foundation.layout.Arrangement
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.Column
@@ -25,19 +26,26 @@ import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.paint
 import androidx.compose.ui.graphics.Color
 import androidx.compose.ui.graphics.StrokeCap
+import androidx.compose.ui.input.pointer.pointerInput
 import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.platform.LocalFocusManager
+import androidx.compose.ui.platform.LocalSoftwareKeyboardController
 import androidx.compose.ui.res.painterResource
 import androidx.compose.ui.text.font.FontWeight
 import androidx.compose.ui.unit.dp
 import androidx.compose.ui.unit.sp
+import androidx.navigation.NavController
 import com.example.mystictale.R
+import com.example.mystictale.navigation.Screens
 import com.example.mystictale.resources.PasswordTextField
 import com.example.mystictale.ui.theme.DarkPurple
+import com.example.mystictale.ui.theme.Grey
 import com.example.mystictale.ui.theme.OpenSans
 
 @Composable
-fun RegistrationPassword() {
-
+fun RegistrationPassword(navController: NavController) {
+    val focusManager = LocalFocusManager.current
+    val keyboardController = LocalSoftwareKeyboardController.current
     val password = remember {
         mutableStateOf("")
     }
@@ -51,6 +59,12 @@ fun RegistrationPassword() {
                 painterResource(id = R.drawable.background),
                 contentScale = ContentScale.FillBounds
             )
+            .pointerInput(Unit) {
+                detectTapGestures(onTap = {
+                    keyboardController?.hide()
+                    focusManager.clearFocus()
+                })
+            }
             .padding(10.dp),
         verticalArrangement = Arrangement.SpaceBetween,
         horizontalAlignment = Alignment.CenterHorizontally
@@ -63,7 +77,7 @@ fun RegistrationPassword() {
                 contentAlignment = Alignment.TopStart
             ) {
                 Button(
-                    onClick = { /*TODO*/ }, colors = ButtonColors(
+                    onClick = { navController.navigate(Screens.RegistrationEmail.route) }, colors = ButtonColors(
                         disabledContentColor = Color.White,
                         disabledContainerColor = Color.Transparent,
                         contentColor = Color.White,
@@ -91,8 +105,8 @@ fun RegistrationPassword() {
                         progress = 0.4f,
                         modifier = Modifier.width(157.dp),
                         strokeCap = StrokeCap.Round,
-                        trackColor = Color(0xFFA1A0A3),
-                        color = Color(0xFF28176B)
+                        trackColor = Grey,
+                        color = DarkPurple
                     )
                 }
             }
@@ -101,11 +115,11 @@ fun RegistrationPassword() {
                 text = "Придумайте пароль",
                 fontWeight = FontWeight.Bold,
                 fontFamily = OpenSans,
-                fontSize = 30.sp,
+                fontSize = 24.sp,
                 color = Color.White,
                 modifier = Modifier
                     .fillMaxWidth(0.9f)
-                    .padding(start = 40.dp),
+                    .padding(start = 35.dp),
                 style = MaterialTheme.typography.headlineMedium
             )
             Spacer(modifier = Modifier.height(30.dp))
@@ -140,7 +154,7 @@ fun RegistrationPassword() {
 
         Box(Modifier.padding(bottom = 40.dp)) {
             Button(
-                onClick = { /*TODO*/ },
+                onClick = { navController.navigate(Screens.RegistrationName.route) },
                 modifier = Modifier
                     .width(290.dp)
                     .height(48.dp),

+ 152 - 0
App/app/src/main/java/com/example/mystictale/Screen/signIn/SignIn.kt

@@ -0,0 +1,152 @@
+package com.example.mystictale.Screen.signIn
+
+import androidx.compose.foundation.Image
+import androidx.compose.foundation.clickable
+import androidx.compose.foundation.gestures.detectTapGestures
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
+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.layout.width
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material3.Button
+import androidx.compose.material3.ButtonColors
+import androidx.compose.material3.LinearProgressIndicator
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.paint
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.StrokeCap
+import androidx.compose.ui.input.pointer.pointerInput
+import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.platform.LocalFocusManager
+import androidx.compose.ui.platform.LocalSoftwareKeyboardController
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.input.KeyboardType
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import androidx.navigation.NavController
+import com.example.mystictale.R
+import com.example.mystictale.navigation.Screens
+import com.example.mystictale.resources.GenericTextField
+import com.example.mystictale.resources.PasswordTextField
+import com.example.mystictale.ui.theme.DarkPurple
+import com.example.mystictale.ui.theme.Grey
+import com.example.mystictale.ui.theme.OpenSans
+
+@Composable
+fun SignIn(navController: NavController) {
+    val focusManager = LocalFocusManager.current
+    val keyboardController = LocalSoftwareKeyboardController.current
+    val email = remember {
+        mutableStateOf("")
+    }
+    val password = remember {
+        mutableStateOf("")
+    }
+    Column(
+        Modifier
+            .fillMaxSize()
+            .paint(
+                painterResource(id = R.drawable.background),
+                contentScale = ContentScale.FillBounds
+            )
+            .pointerInput(Unit) {
+                detectTapGestures(onTap = {
+                    keyboardController?.hide()
+                    focusManager.clearFocus()
+                })
+            }
+            .padding(10.dp),
+        verticalArrangement = Arrangement.SpaceBetween,
+        horizontalAlignment = Alignment.CenterHorizontally
+    ) {
+
+        Column {
+            Box(
+                modifier = Modifier
+                    .padding(top = 30.dp),
+                contentAlignment = Alignment.TopStart
+            ) {
+                Button(
+                    onClick = { navController.navigate(Screens.Start.route) },
+                    colors = ButtonColors(
+                        disabledContentColor = Color.White,
+                        disabledContainerColor = Color.Transparent,
+                        contentColor = Color.White,
+                        containerColor = Color.Transparent
+                    )
+                ) {
+                    Image(
+                        painter = painterResource(id = R.drawable.back),
+                        contentDescription = "back",
+                        modifier = Modifier
+                            .width(11.dp)
+                            .height(14.dp)
+                    )
+                }
+            }
+            Spacer(modifier = Modifier.height(30.dp))
+            Text(
+                text = "Авторизация",
+                fontWeight = FontWeight.Bold,
+                fontFamily = OpenSans,
+                fontSize = 24.sp,
+                color = Color.White,
+                modifier = Modifier
+                    .fillMaxWidth(0.9f)
+                    .padding(start = 35.dp),
+                style = MaterialTheme.typography.headlineMedium
+            )
+            Spacer(modifier = Modifier.height(30.dp))
+
+            GenericTextField(email.value, { email.value = it }, "E-mail", KeyboardType.Email)
+            Spacer(modifier = Modifier.height(30.dp))
+            PasswordTextField(password.value, { password.value = it }, "Пароль")
+            Spacer(modifier = Modifier.height(30.dp))
+            Text(
+                "Забыли пароль?",
+                fontFamily = OpenSans,
+                fontSize = 13.sp,
+                fontWeight = FontWeight.Light,
+                color = Grey,
+                modifier = Modifier
+                    .padding(start = 35.dp)
+                    .clickable {navController.navigate(Screens.PasswordRecovery.route)   }
+            )
+        }
+
+        Box(Modifier.padding(bottom = 40.dp)) {
+            Button(
+                onClick = {  },
+                modifier = Modifier
+                    .width(290.dp)
+                    .height(48.dp),
+                shape = RoundedCornerShape(12.dp),
+                colors = ButtonColors(
+                    containerColor = DarkPurple,
+                    contentColor = Color.White,
+                    disabledContentColor = Color.White,
+                    disabledContainerColor = DarkPurple
+                )
+            ) {
+                Text("Далее", fontSize = 20.sp, fontWeight = FontWeight.Bold)
+
+            }
+
+        }
+
+
+    }
+}

+ 24 - 9
App/app/src/main/java/com/example/mystictale/navigation/Navigation.kt

@@ -6,11 +6,14 @@ import androidx.compose.runtime.Composable
 import androidx.navigation.compose.NavHost
 import androidx.navigation.compose.composable
 import androidx.navigation.compose.rememberNavController
-import com.example.mystictale.Screen.RegistrationDateOfBirth
-import com.example.mystictale.Screen.RegistrationEmail
-import com.example.mystictale.Screen.RegistrationName
-import com.example.mystictale.Screen.RegistrationPassword
+import com.example.mystictale.Screen.registration.RegistrationDateOfBirth
+import com.example.mystictale.Screen.registration.RegistrationEmail
+import com.example.mystictale.Screen.registration.RegistrationGender
+import com.example.mystictale.Screen.registration.RegistrationName
+import com.example.mystictale.Screen.registration.RegistrationPassword
 import com.example.mystictale.Screen.Start
+import com.example.mystictale.Screen.passwordRecovery.PasswordRecovery
+import com.example.mystictale.Screen.signIn.SignIn
 
 @RequiresApi(Build.VERSION_CODES.O)
 @Composable
@@ -20,23 +23,35 @@ fun Navigation() {
     {
         composable(Screens.Start.route)
         {
-            Start()
+            Start(navController)
         }
         composable(Screens.RegistrationEmail.route)
         {
-            RegistrationEmail()
+            RegistrationEmail(navController)
         }
         composable(Screens.RegistrationName.route)
         {
-            RegistrationName()
+            RegistrationName(navController)
         }
         composable(Screens.RegistrationPassword.route)
         {
-            RegistrationPassword()
+            RegistrationPassword(navController)
         }
         composable(Screens.RegistrationDateOfBirth.route)
         {
-            RegistrationDateOfBirth()
+            RegistrationDateOfBirth(navController)
+        }
+        composable(Screens.RegistrationGender.route)
+        {
+            RegistrationGender(navController)
+        }
+        composable(Screens.SingIn.route)
+        {
+            SignIn(navController)
+        }
+        composable(Screens.PasswordRecovery.route)
+        {
+            PasswordRecovery(navController)
         }
 
     }

+ 4 - 0
App/app/src/main/java/com/example/mystictale/navigation/Screens.kt

@@ -6,4 +6,8 @@ sealed class Screens (val route:String){
     object RegistrationPassword:Screens("password")
     object RegistrationDateOfBirth: Screens("dateOfBirth")
     object RegistrationName: Screens("name")
+    object RegistrationGender: Screens("gender")
+    object SingIn: Screens("sign_in")
+    object PasswordRecovery: Screens("password_recovery")
+
 }

+ 119 - 0
App/app/src/main/java/com/example/mystictale/resources/ChooseGender.kt

@@ -0,0 +1,119 @@
+package com.example.mystictale.resources
+
+import androidx.compose.foundation.background
+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.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.filled.KeyboardArrowDown
+import androidx.compose.material.icons.filled.KeyboardArrowUp
+import androidx.compose.material3.Button
+import androidx.compose.material3.ButtonDefaults
+import androidx.compose.material3.DropdownMenu
+import androidx.compose.material3.DropdownMenuItem
+import androidx.compose.material3.Text
+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.geometry.Offset
+import androidx.compose.ui.geometry.Size
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.layout.onGloballyPositioned
+import androidx.compose.ui.platform.LocalDensity
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.unit.DpOffset
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import androidx.compose.ui.unit.toSize
+import com.example.mystictale.ui.theme.DarkPurple
+import com.example.mystictale.ui.theme.OpenSans
+
+@Composable
+fun ChooseGender() {
+    var expanded by remember {
+        mutableStateOf(false)
+    }
+    val list = listOf("Мужской", "Женский")
+    var selectedItem by remember {
+        mutableStateOf("")
+    }
+    var textFiledSize by remember {
+        mutableStateOf(Size.Zero)
+    }
+    val icon = if (expanded) {
+        Icons.Filled.KeyboardArrowUp
+    } else {
+        Icons.Filled.KeyboardArrowDown
+    }
+    var buttonPosition by remember { mutableStateOf(Offset.Zero) }
+    Column(
+        modifier = Modifier
+            .fillMaxWidth(),
+        horizontalAlignment = Alignment.CenterHorizontally,
+        verticalArrangement = Arrangement.Center
+    ) {
+        Button(
+            onClick = { expanded = !expanded },
+            modifier = Modifier
+                .width(290.dp)
+                .height(56.dp)
+                .onGloballyPositioned { coordinates ->
+                    textFiledSize = coordinates.size.toSize()
+                },
+            shape = RoundedCornerShape(12.dp),
+            colors = ButtonDefaults.buttonColors(
+                containerColor = Color.White,
+                contentColor = DarkPurple
+            ),
+            contentPadding = PaddingValues(start = 16.dp, end = 16.dp)
+        ) {
+            Row(
+                verticalAlignment = Alignment.CenterVertically
+            ) {
+                Text(
+                    text = if (selectedItem.isNotEmpty()) selectedItem else "Выберете пол",
+                    fontSize = 20.sp,
+                    fontFamily = OpenSans,
+                    fontWeight = FontWeight.Bold,
+                    color = DarkPurple
+                )
+            }
+        }
+
+        DropdownMenu(
+            expanded = expanded,
+            onDismissRequest = { expanded = false },
+            modifier = Modifier
+                .width(with(LocalDensity.current) { textFiledSize.width.toDp() })
+                .background(Color.White),
+            offset = DpOffset(
+                x = 25.dp,
+                y = 0.dp
+            )
+
+        ) {
+            list.forEach { label ->
+                DropdownMenuItem(text = {
+                    Text(
+                        text = label,
+                        fontSize = 15.sp,
+                        fontWeight = FontWeight.Normal
+                    )
+                }, onClick = {
+                    selectedItem = label
+                    expanded = false
+
+                })
+            }
+        }
+    }
+}

+ 1 - 1
App/app/src/main/java/com/example/mystictale/resources/GenericTextField.kt

@@ -23,7 +23,7 @@ fun GenericTextField(value:String, onValue:(String) -> Unit,placeholder:String,
         onValueChange = onValue,
         Modifier
             .fillMaxWidth(0.95f)
-            .padding(start = 35.dp),
+            .padding(horizontal = 20.dp),
         keyboardOptions = KeyboardOptions(
             keyboardType = keyboardType
         ),

+ 1 - 1
App/app/src/main/java/com/example/mystictale/resources/dateOfBirthVisualTransformation.kt

@@ -9,7 +9,7 @@ fun dateOfBirthVisualTransformation() = VisualTransformation { text ->
     val trimmed = if (text.text.length >= 8) text.text.substring(0..7) else text.text
     val formatted = buildString {
         for (i in trimmed.indices) {
-            if (i == 2 || i == 4) append('/')
+            if (i == 2 || i == 4) append('.')
             append(trimmed[i])
         }
     }

+ 1 - 0
App/app/src/main/java/com/example/mystictale/ui/theme/Color.kt

@@ -10,4 +10,5 @@ val Purple40 = Color(0xFF6650a4)
 val PurpleGrey40 = Color(0xFF625b71)
 val Pink40 = Color(0xFF7D5260)
 val DarkPurple = Color(0xFF28176B)
+val Grey = Color(0xFFA1A0A3)