From 2527cae9316439420a7640c7a79d91f7f93e2009 Mon Sep 17 00:00:00 2001
From: Michael Kits <55844847+SeanGTX@users.noreply.github.com>
Date: Sat, 7 Jan 2023 15:23:14 +0300
Subject: [PATCH] =?UTF-8?q?=D0=9F=D1=80=D0=BE=D0=BA=D0=B8=D0=BD=D1=83?=
=?UTF-8?q?=D1=82=20=D0=B2=D0=BE=20=D0=B2=D1=81=D0=B5=D1=85=20=D1=8D=D0=BA?=
=?UTF-8?q?=D1=80=D0=B0=D0=BD=D0=B0=D1=85=20=D1=81=D1=82=D0=B5=D0=B9=D1=82?=
=?UTF-8?q?=20=D1=81=D0=BA=D0=B0=D1=84=D1=84=D0=BE=D0=BB=D0=B4=D0=B0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.idea/deploymentTargetDropDown.xml | 17 -
.idea/misc.xml | 2 +-
app/build.gradle | 1 +
app/src/main/AndroidManifest.xml | 1 +
.../main/java/ru/megboyzz/dnevnik/Utils.kt | 77 ++++-
.../megboyzz/dnevnik/navigation/AppNavHost.kt | 28 +-
.../ru/megboyzz/dnevnik/screens/Components.kt | 310 ++++++++++++++++--
.../dnevnik/screens/HomeWorkScreen.kt | 23 ++
.../megboyzz/dnevnik/screens/LoginScreen.kt | 120 +------
.../megboyzz/dnevnik/screens/MarksScreen.kt | 22 ++
.../dnevnik/screens/ScheduleScreen.kt | 22 ++
app/src/main/res/drawable/header_big.xml | 16 +
app/src/main/res/values/colors.xml | 4 +
app/src/main/res/values/strings.xml | 2 +-
app/src/main/res/values/themes.xml | 3 +-
15 files changed, 484 insertions(+), 164 deletions(-)
delete mode 100644 .idea/deploymentTargetDropDown.xml
create mode 100644 app/src/main/java/ru/megboyzz/dnevnik/screens/HomeWorkScreen.kt
create mode 100644 app/src/main/res/drawable/header_big.xml
diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
deleted file mode 100644
index 22833d8..0000000
--- a/.idea/deploymentTargetDropDown.xml
+++ /dev/null
@@ -1,17 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index e546720..82f4a17 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,6 +1,6 @@
-
+
diff --git a/app/build.gradle b/app/build.gradle
index e57da6e..2619352 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -66,4 +66,5 @@ dependencies {
implementation "androidx.compose.runtime:runtime-livedata:$compose_version"
implementation "androidx.compose.material:material-icons-extended:$compose_version"
implementation "com.google.accompanist:accompanist-swiperefresh:0.23.0"
+ implementation "com.google.accompanist:accompanist-navigation-animation:0.24.1-alpha"
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 8ee636c..b37f403 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -17,6 +17,7 @@
android:name=".MainActivity"
android:exported="true"
android:theme="@style/Theme.MyDnevnik"
+ android:screenOrientation="fullSensor"
android:windowSoftInputMode="adjustResize">
diff --git a/app/src/main/java/ru/megboyzz/dnevnik/Utils.kt b/app/src/main/java/ru/megboyzz/dnevnik/Utils.kt
index ef4d717..d79b093 100644
--- a/app/src/main/java/ru/megboyzz/dnevnik/Utils.kt
+++ b/app/src/main/java/ru/megboyzz/dnevnik/Utils.kt
@@ -5,12 +5,24 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.width
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.SideEffect
import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.drawBehind
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.Paint
+import androidx.compose.ui.graphics.drawscope.drawIntoCanvas
+import androidx.compose.ui.graphics.scale
+import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.unit.Dp
+import androidx.compose.ui.unit.dp
+import androidx.navigation.NavController
+import androidx.navigation.NavHostController
+import ru.megboyzz.dnevnik.navigation.AppNavRoute
@Composable
fun Int.AsPainter() = painterResource(this)
@@ -26,4 +38,67 @@ fun SpacerHeight(height: Dp) = Spacer(Modifier.height(height))
@Composable
-fun Int.AsImageVector() = ImageVector.vectorResource(this)
\ No newline at end of file
+fun Int.AsImageVector() = ImageVector.vectorResource(this)
+
+@Composable
+fun NavController.navigate(to: AppNavRoute){
+ LaunchedEffect(Unit) {
+ navigate(to.route) {
+ popUpTo(to.route) { inclusive = true }
+ }
+ }
+}
+
+fun Modifier.drawColoredShadow(
+ color: Color = Color.Black,
+ alpha: Float = 0.07f,
+ borderRadius: Dp = 0.dp,
+ offsetX: Dp = 0.dp,
+ offsetY: Dp = 0.dp,
+ blurRadius: Dp = 7.dp,
+ spread: Dp = 0.dp,
+ enabled: Boolean = true,
+) = if(enabled) {
+ this.drawBehind {
+ val transparentColor = color.copy(alpha = 0.0f).toArgb()
+ val shadowColor = color.copy(alpha = alpha).toArgb()
+ this.drawIntoCanvas {
+ val paint = Paint()
+ val frameworkPaint = paint.asFrameworkPaint()
+ frameworkPaint.color = transparentColor
+ frameworkPaint.setShadowLayer(
+ blurRadius.toPx(),
+ offsetX.toPx(),
+ offsetY.toPx(),
+ shadowColor
+ )
+ it.save()
+
+ if(spread.value > 0) {
+ fun calcSpreadScale(spread: Float, childSize: Float): Float {
+ return 1f + ((spread / childSize) * 2f)
+ }
+
+ it.scale(
+ calcSpreadScale(spread.toPx(), this.size.width),
+ calcSpreadScale(spread.toPx(), this.size.height),
+ this.center.x,
+ this.center.y
+ )
+ }
+
+ it.drawRoundRect(
+ 0f,
+ 0f,
+ this.size.width,
+ this.size.height,
+ borderRadius.toPx(),
+ borderRadius.toPx(),
+ paint
+ )
+ it.restore()
+ }
+ }
+} else {
+ this
+}
\ No newline at end of file
diff --git a/app/src/main/java/ru/megboyzz/dnevnik/navigation/AppNavHost.kt b/app/src/main/java/ru/megboyzz/dnevnik/navigation/AppNavHost.kt
index 591cc08..8fb4b18 100644
--- a/app/src/main/java/ru/megboyzz/dnevnik/navigation/AppNavHost.kt
+++ b/app/src/main/java/ru/megboyzz/dnevnik/navigation/AppNavHost.kt
@@ -1,12 +1,25 @@
package ru.megboyzz.dnevnik.navigation
import android.window.SplashScreen
+import androidx.compose.animation.*
+import androidx.compose.animation.core.CubicBezierEasing
+import androidx.compose.animation.core.Spring
+import androidx.compose.animation.core.spring
+import androidx.compose.animation.core.tween
+import androidx.compose.material.rememberScaffoldState
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.unit.IntOffset
import androidx.lifecycle.viewmodel.compose.viewModel
import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
+import com.google.accompanist.navigation.animation.AnimatedNavHost
+import com.google.accompanist.navigation.animation.rememberAnimatedNavController
+import ru.megboyzz.dnevnik.screens.HomeWorkScreen
+import ru.megboyzz.dnevnik.screens.LoginScreen
+import ru.megboyzz.dnevnik.screens.MarksScreen
+import ru.megboyzz.dnevnik.screens.ScheduleScreen
sealed class AppNavRoute(val route: String){
@@ -20,9 +33,9 @@ sealed class AppNavRoute(val route: String){
object Settings: AppNavRoute("settings_screen")
}
+@OptIn(ExperimentalAnimationApi::class)
@Composable
fun AppNavHost(){
- val navController = rememberNavController()
/*val activity = LocalContext.current as MainActivity
@@ -30,14 +43,19 @@ fun AppNavHost(){
val viewModel: AppViewModel = viewModel(factory = AppViewModelFactory(application))*/
+
+ val scaffoldState = rememberScaffoldState()
+ val navController = rememberAnimatedNavController()
+
NavHost(
navController = navController,
- startDestination = AppNavRoute.Splash.route
+ startDestination = AppNavRoute.Login.route /* сделать проверку куки файлов */
){
composable(AppNavRoute.Splash.route) { }
- composable(AppNavRoute.Marks.route) { }
- composable(AppNavRoute.Schedule.route) { }
- composable(AppNavRoute.HomeWorks.route) { }
+ composable(AppNavRoute.Login.route) { LoginScreen(navController) }
+ composable(AppNavRoute.Marks.route) { MarksScreen(navController, scaffoldState) }
+ composable(AppNavRoute.Schedule.route) { ScheduleScreen(navController, scaffoldState) }
+ composable(AppNavRoute.HomeWorks.route) { HomeWorkScreen(navController, scaffoldState) }
composable(AppNavRoute.Settings.route) { }
}
}
\ No newline at end of file
diff --git a/app/src/main/java/ru/megboyzz/dnevnik/screens/Components.kt b/app/src/main/java/ru/megboyzz/dnevnik/screens/Components.kt
index 9631619..25ca4d0 100644
--- a/app/src/main/java/ru/megboyzz/dnevnik/screens/Components.kt
+++ b/app/src/main/java/ru/megboyzz/dnevnik/screens/Components.kt
@@ -1,14 +1,12 @@
package ru.megboyzz.dnevnik.screens
+import android.annotation.SuppressLint
import androidx.compose.animation.animateColorAsState
import androidx.compose.animation.core.tween
import androidx.compose.animation.expandHorizontally
import androidx.compose.animation.fadeOut
import androidx.compose.animation.slideInHorizontally
-import androidx.compose.foundation.BorderStroke
-import androidx.compose.foundation.Image
-import androidx.compose.foundation.background
-import androidx.compose.foundation.clickable
+import androidx.compose.foundation.*
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.selection.toggleable
import androidx.compose.foundation.shape.RoundedCornerShape
@@ -22,6 +20,8 @@ import androidx.compose.runtime.*
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.clip
+import androidx.compose.ui.draw.shadow
import androidx.compose.ui.focus.FocusRequester
import androidx.compose.ui.focus.focusRequester
import androidx.compose.ui.focus.onFocusChanged
@@ -33,6 +33,8 @@ import androidx.compose.ui.graphics.Outline
import androidx.compose.ui.graphics.Shape
import androidx.compose.ui.graphics.painter.Painter
import androidx.compose.ui.layout.ContentScale
+import androidx.compose.ui.modifier.modifierLocalConsumer
+import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.semantics.Role
import androidx.compose.ui.text.input.KeyboardType
@@ -42,9 +44,12 @@ import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.*
import androidx.constraintlayout.compose.Visibility
+import androidx.navigation.NavController
+import androidx.navigation.compose.rememberNavController
import kotlinx.coroutines.launch
import ru.megboyzz.dnevnik.*
import ru.megboyzz.dnevnik.R
+import ru.megboyzz.dnevnik.navigation.AppNavRoute
import ru.megboyzz.dnevnik.ui.theme.*
@Composable
@@ -52,9 +57,10 @@ fun MainScaffold(
icon: Painter,
title: String,
/* TODO viewModel */
- content: (@Composable (it: PaddingValues) -> Unit)
+ navController: NavController,
+ scaffoldState: ScaffoldState,
+ content: (@Composable (it: PaddingValues) -> Unit),
) {
- val scaffoldState = rememberScaffoldState()
val scope = rememberCoroutineScope()
Scaffold(
scaffoldState = scaffoldState,
@@ -87,14 +93,146 @@ fun MainScaffold(
drawerBackgroundColor = mainBlue,
drawerContentColor = white,
drawerShape = drawerShape,
- drawerContent = { DrawerContent() }
+ drawerContent = { DrawerContent(navController, scaffoldState) },
+ bottomBar = { BottomBar(navController) }
)
}
+@Composable
+fun BottomBar(navController: NavController) {
+ //Box(Modifier.fillMaxWidth().height(90.dp).shadow(8.dp))
+ // УЖАСНЫЙ КОСТЫЛЬ ДЛЯ ПЕРЕХОДОВ С ПОМОЩЬЮ СТЕЙТОВ TODO - УБРАТЬ
+ val goToMarks = remember { mutableStateOf(false) }
+ val goToHw = remember { mutableStateOf(false) }
+ val goToSchedule = remember { mutableStateOf(false) }
+
+ if(goToMarks.value){
+ navController.navigate(AppNavRoute.Marks)
+ //goToMarks.value = false
+ }
+ if(goToHw.value){
+ navController.navigate(AppNavRoute.HomeWorks)
+ //goToHw.value = false
+ }
+ if(goToSchedule.value){
+ navController.navigate(AppNavRoute.Schedule)
+ //goToSchedule.value = false
+ }
+
+ Box(
+ modifier = Modifier
+ .fillMaxWidth()
+ .height(90.dp)
+ .background(white)
+ .padding(10.dp, 10.dp, 10.dp, 15.dp),
+ ){
+ Box(
+ Modifier
+ .fillMaxSize()
+ .clip(RoundedCornerShape(20.dp))
+ .background(mainBlue)
+ ){
+ Row(
+ horizontalArrangement = Arrangement.SpaceEvenly,
+ verticalAlignment = Alignment.CenterVertically,
+ modifier = Modifier.fillMaxSize()
+ ) {
+ BottomNavButton(
+ icon = R.drawable.ic_marks.AsPainter(),
+ text = R.string.title_marks.AsString()
+ ) { goToMarks.value = true }
+ BottomNavButton(
+ icon = R.drawable.ic_homework.AsPainter(),
+ text = R.string.title_hw.AsString()
+ ) { goToHw.value = true }
+ BottomNavButton(
+ icon = R.drawable.ic_schedule.AsPainter(),
+ text = R.string.title_schedule.AsString()
+ ) { goToSchedule.value = true }
+ }
+ }
+ }
+}
@Composable
-fun DrawerContent() {
+fun BottomNavButton(
+ icon: Painter,
+ text: String,
+ color: Color = white,
+ onClick: () -> Unit,
+) {
+ Column(
+ Modifier
+ .clickable(onClick = onClick),
+ horizontalAlignment = Alignment.CenterHorizontally
+ ) {
+ Image(
+ painter = icon,
+ contentDescription = "",
+ modifier = Modifier.padding(5.dp)
+ )
+ Text(
+ text = text,
+ style = MainText,
+ color = color
+ )
+ }
+}
+
+@Preview
+@Composable
+fun BottomNavButtonPrev() {
+ Row(horizontalArrangement = Arrangement.spacedBy(20.dp)) {
+ BottomNavButton(
+ icon = R.drawable.ic_marks.AsPainter(),
+ text = R.string.title_marks.AsString()
+ ) { /* TODO*/ }
+ BottomNavButton(
+ icon = R.drawable.ic_homework.AsPainter(),
+ text = R.string.title_hw.AsString()
+ ) { /* TODO*/ }
+ BottomNavButton(
+ icon = R.drawable.ic_schedule.AsPainter(),
+ text = R.string.title_schedule.AsString()
+ ) { /* TODO*/ }
+ }
+}
+
+@Preview
+@Composable
+fun BottomBarPrev() {
+ val navController = rememberNavController()
+ BottomBar(navController = navController)
+}
+
+
+@SuppressLint("CoroutineCreationDuringComposition")
+@Composable
+fun DrawerContent(
+ navController: NavController,
+ scaffoldState: ScaffoldState
+) {
+
+ // УЖАСНЫЙ КОСТЫЛЬ ДЛЯ ПЕРЕХОДОВ С ПОМОЩЬЮ СТЕЙТОВ TODO - УБРАТЬ
+ val goToMarks = remember { mutableStateOf(false) }
+ val goToHw = remember { mutableStateOf(false) }
+ val goToSchedule = remember { mutableStateOf(false) }
+
+ val scope = rememberCoroutineScope()
+ if(goToMarks.value){
+ navController.navigate(AppNavRoute.Marks)
+ scope.launch { scaffoldState.drawerState.close() }
+ }
+ if(goToHw.value){
+ navController.navigate(AppNavRoute.HomeWorks)
+ scope.launch { scaffoldState.drawerState.close() }
+ }
+ if(goToSchedule.value){
+ navController.navigate(AppNavRoute.Schedule)
+ scope.launch { scaffoldState.drawerState.close() }
+ }
+
Column(
modifier = Modifier
.width(260.dp)
@@ -114,15 +252,15 @@ fun DrawerContent() {
DrawerMainButton(
icon = R.drawable.ic_marks.AsPainter(),
text = R.string.title_marks.AsString()
- ) { /* TODO */ }
+ ) { goToMarks.value = true }
DrawerMainButton(
icon = R.drawable.ic_homework.AsPainter(),
text = R.string.title_hw.AsString()
- ) { /* TODO */ }
+ ) { goToHw.value = true }
DrawerMainButton(
icon = R.drawable.ic_schedule.AsPainter(),
text = R.string.title_schedule.AsString()
- ) { /* TODO */ }
+ ) { goToSchedule.value = true }
DrawerMainButton(
icon = R.drawable.ic_settings.AsPainter(),
text = R.string.title_settings.AsString()
@@ -232,7 +370,19 @@ fun LoginBackground() {
alignment = Alignment.TopStart
)
}
+}
+@Composable
+fun BigLoginBackground() {
+ val icon = R.drawable.header_big.AsPainter()
+ Column(Modifier.fillMaxWidth()) {
+ Image(
+ painter = icon,
+ contentDescription = "",
+ modifier = Modifier.fillMaxWidth(),
+ alignment = Alignment.TopStart
+ )
+ }
}
@@ -299,8 +449,9 @@ fun MainTextField(
.focusRequester(focusRequester)
.onFocusChanged {
if (it.isFocused)
- if(isError.value) isError.value = false
- },
+ if (isError.value) isError.value = false
+ }
+ .fillMaxWidth(),
)
}
@@ -352,28 +503,6 @@ fun ButtonPrev() {
)
}
-
-@Preview
-@Composable
-fun DrawerPrev() {
- Surface(
- color = mainBlue
- ) {
- DrawerContent()
- }
-}
-
-@Preview
-@Composable
-fun MainScaffoldPrev() {
- MainScaffold(
- icon = R.drawable.ic_marks.AsPainter(),
- title = R.string.title_marks.AsString()
- ) {
-
- }
-}
-
@Preview
@Composable
fun CheckBoxed() {
@@ -417,7 +546,7 @@ fun MainCheckbox(
modifier: Modifier = Modifier,
size: Float = 24f,
checkedColor: Color = mainBlue,
- uncheckedColor: Color = white,
+ uncheckedColor: Color = lightGray,
checkmarkColor: Color = white,
onValueChange: () -> Unit
) {
@@ -491,4 +620,113 @@ fun MainButton(
style = H1
)
}
+}
+
+@Composable
+fun LoginScreenContent(
+ login: MutableState,
+ password: MutableState,
+ isError: MutableState,
+ isRememberMe: MutableState,
+ onSignIn: () -> Unit,
+ onSignUp: () -> Unit,
+ onForgetPassword: () -> Unit
+) {
+ val configuration = LocalConfiguration.current
+ val screenWidth = configuration.screenWidthDp
+
+ var defaultPadding = 65.dp
+
+ val isNormal = screenWidth < 500
+
+ Box(Modifier.fillMaxSize()) {
+
+ if(!isNormal) BigLoginBackground()
+
+ Column(
+ horizontalAlignment = Alignment.CenterHorizontally,
+ modifier = Modifier.fillMaxWidth()
+ ) {
+ if (isNormal) LoginBackground()
+ else {
+ defaultPadding *= 4
+ }
+ Row(horizontalArrangement = Arrangement.Center) {
+ Text(
+ text = R.string.title_welcome.AsString(),
+ style = Big,
+ textAlign = TextAlign.Center,
+ modifier = Modifier.padding(defaultPadding, 20.dp, defaultPadding, 40.dp),
+ color = dark
+ )
+ }
+ Column(
+ modifier = Modifier.padding(defaultPadding, 0.dp)
+ ) {
+ Column(Modifier.fillMaxWidth()) {
+ MainTextField(
+ value = login,
+ label = R.string.title_login.AsString(),
+ isError = isError
+ )
+ SpacerHeight(15.dp)
+ MainTextField(
+ value = password,
+ keyboardType = KeyboardType.Password,
+ label = R.string.title_password.AsString(),
+ isError = isError
+ )
+ }
+ SpacerHeight(5.dp)
+ Row(
+ modifier = Modifier
+ .fillMaxWidth()
+ .height(30.dp),
+ horizontalArrangement = Arrangement.SpaceBetween,
+ verticalAlignment = Alignment.CenterVertically
+ ) {
+ Row(
+ modifier = Modifier.fillMaxHeight(),
+ verticalAlignment = Alignment.CenterVertically
+ ) {
+ MainCheckbox(isRememberMe) { }
+ SpacerWidth(5.dp)
+ Text(
+ text = R.string.title_remember_me.AsString(),
+ style = MainText,
+ color = dark
+ )
+ }
+ Text(
+ text = R.string.title_forget_password.AsString(),
+ style = MainText,
+ color = dark,
+ modifier = Modifier.clickable(onClick = onForgetPassword)
+ )
+ }
+ Column(
+ modifier = Modifier
+ .fillMaxSize()
+ .padding(0.dp, 10.dp),
+ verticalArrangement = Arrangement.Center
+ ) {
+ MainButton(
+ text = R.string.title_sign_in.AsString(),
+ onClick = onSignIn
+ )
+ SpacerHeight(5.dp)
+ Text(
+ text = R.string.title_sign_up.AsString(),
+ modifier = Modifier
+ .clickable(onClick = onSignUp)
+ .padding(5.dp)
+ .fillMaxWidth(),
+ textAlign = TextAlign.Center,
+ style = Mini,
+ color = dark
+ )
+ }
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/java/ru/megboyzz/dnevnik/screens/HomeWorkScreen.kt b/app/src/main/java/ru/megboyzz/dnevnik/screens/HomeWorkScreen.kt
new file mode 100644
index 0000000..fa4c7ec
--- /dev/null
+++ b/app/src/main/java/ru/megboyzz/dnevnik/screens/HomeWorkScreen.kt
@@ -0,0 +1,23 @@
+package ru.megboyzz.dnevnik.screens
+
+import androidx.compose.material.ScaffoldState
+import androidx.compose.runtime.Composable
+import androidx.navigation.NavController
+import ru.megboyzz.dnevnik.AsPainter
+import ru.megboyzz.dnevnik.AsString
+import ru.megboyzz.dnevnik.R
+
+@Composable
+fun HomeWorkScreen(
+ navController: NavController,
+ scaffoldState: ScaffoldState
+) {
+ MainScaffold(
+ icon = R.drawable.ic_homework.AsPainter(),
+ title = R.string.title_hw.AsString(),
+ navController = navController,
+ scaffoldState = scaffoldState
+ ) {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/ru/megboyzz/dnevnik/screens/LoginScreen.kt b/app/src/main/java/ru/megboyzz/dnevnik/screens/LoginScreen.kt
index 89c2261..a1f3888 100644
--- a/app/src/main/java/ru/megboyzz/dnevnik/screens/LoginScreen.kt
+++ b/app/src/main/java/ru/megboyzz/dnevnik/screens/LoginScreen.kt
@@ -1,35 +1,28 @@
package ru.megboyzz.dnevnik.screens
-import androidx.compose.foundation.Image
-import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
-import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.*
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.graphics.Color
-import androidx.compose.ui.graphics.vector.ImageVector
-import androidx.compose.ui.modifier.modifierLocalOf
import androidx.compose.ui.platform.LocalConfiguration
-import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.platform.textInputServiceFactory
-import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.text.input.KeyboardType
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
+import androidx.navigation.NavController
import ru.megboyzz.dnevnik.AsString
import ru.megboyzz.dnevnik.R
import ru.megboyzz.dnevnik.SpacerHeight
import ru.megboyzz.dnevnik.SpacerWidth
+import ru.megboyzz.dnevnik.navigation.AppNavRoute
import ru.megboyzz.dnevnik.ui.theme.*
@Composable
-fun LoginScreen() {
+fun LoginScreen(navController: NavController) {
val login = remember {
mutableStateOf("")
@@ -37,97 +30,20 @@ fun LoginScreen() {
val password = remember {
mutableStateOf("")
}
-
- val configuration = LocalConfiguration.current
- val screenHeight = configuration.screenHeightDp
- val screenWidth = configuration.screenWidthDp
-
- val defaultModifier = Modifier.width(500.dp)
-
- Column(
- horizontalAlignment = Alignment.CenterHorizontally,
- modifier = defaultModifier
- ) {
- if(screenWidth < 500)
- LoginBackground()
- else{
- defaultModifier.then(Modifier.fillMaxWidth())
- }
- Row(horizontalArrangement = Arrangement.Center) {
- Text(
- text = R.string.title_welcome.AsString(),
- style = Big,
- textAlign = TextAlign.Center,
- modifier = Modifier.padding(65.dp, 20.dp, 65.dp, 40.dp)
- )
- }
- MainTextField(
- value = login,
- label = R.string.title_login.AsString()
- )
- SpacerHeight(15.dp)
- MainTextField(
- value = password,
- keyboardType = KeyboardType.Password,
- label = R.string.title_password.AsString()
- )
- Row(
- modifier = Modifier
- .fillMaxWidth()
- .padding(65.dp, 10.dp)
- .height(30.dp),
- horizontalArrangement = Arrangement.SpaceBetween,
- verticalAlignment = Alignment.CenterVertically
- ) {
- Row(
- modifier = Modifier.fillMaxHeight(),
- verticalAlignment = Alignment.CenterVertically
- ) {
- val checkedState = remember { mutableStateOf(true) }
- MainCheckbox(checkedState) { /* TODO */ }
- SpacerWidth(5.dp)
- Text(
- text = R.string.title_remember_me.AsString(),
- style = MainText,
- color = dark
- )
- }
- Text(
- text = R.string.title_forget_password.AsString(),
- style = MainText,
- color = dark,
- modifier = Modifier.clickable{ /* TODO */ }
- )
- }
-
- Column(
- modifier = Modifier
- .fillMaxSize()
- .padding(65.dp, 10.dp),
- verticalArrangement = Arrangement.Center
- ) {
- MainButton(text = R.string.title_sign_in.AsString()) {
- /* TODO */
- }
- SpacerHeight(5.dp)
- Text(
- text = R.string.title_sign_up.AsString(),
- modifier = Modifier
- .clickable {
- /* TODO */
- }
- .padding(5.dp)
- .fillMaxWidth(),
- textAlign = TextAlign.Center,
- style = Mini
- )
- }
-
+ val isError = remember {
+ mutableStateOf(false)
+ }
+ val rememberMe = remember {
+ mutableStateOf(false)
}
-}
-@Preview
-@Composable
-fun LoginPagePrev() {
- LoginScreen()
-}
\ No newline at end of file
+ LoginScreenContent(
+ login = login,
+ password = password,
+ isError = isError,
+ isRememberMe = rememberMe,
+ onSignIn = { navController.navigate(AppNavRoute.Marks.route) },
+ onSignUp = { /*TODO*/ },
+ onForgetPassword = { /* TODO */ }
+ )
+}
diff --git a/app/src/main/java/ru/megboyzz/dnevnik/screens/MarksScreen.kt b/app/src/main/java/ru/megboyzz/dnevnik/screens/MarksScreen.kt
index 34cf25e..c2f2c0f 100644
--- a/app/src/main/java/ru/megboyzz/dnevnik/screens/MarksScreen.kt
+++ b/app/src/main/java/ru/megboyzz/dnevnik/screens/MarksScreen.kt
@@ -1,2 +1,24 @@
package ru.megboyzz.dnevnik.screens
+import androidx.compose.material.ScaffoldState
+import androidx.compose.runtime.Composable
+import androidx.navigation.NavController
+import ru.megboyzz.dnevnik.AsPainter
+import ru.megboyzz.dnevnik.AsString
+import ru.megboyzz.dnevnik.R
+
+@Composable
+fun MarksScreen(
+ navController: NavController,
+ scaffoldState: ScaffoldState
+) {
+ MainScaffold(
+ icon = R.drawable.ic_marks.AsPainter(),
+ title = R.string.title_marks.AsString(),
+ navController = navController,
+ scaffoldState = scaffoldState
+ ) {
+
+ }
+
+}
\ No newline at end of file
diff --git a/app/src/main/java/ru/megboyzz/dnevnik/screens/ScheduleScreen.kt b/app/src/main/java/ru/megboyzz/dnevnik/screens/ScheduleScreen.kt
index 34cf25e..888a6a5 100644
--- a/app/src/main/java/ru/megboyzz/dnevnik/screens/ScheduleScreen.kt
+++ b/app/src/main/java/ru/megboyzz/dnevnik/screens/ScheduleScreen.kt
@@ -1,2 +1,24 @@
package ru.megboyzz.dnevnik.screens
+import androidx.compose.material.ScaffoldState
+import androidx.compose.runtime.Composable
+import androidx.navigation.NavController
+import ru.megboyzz.dnevnik.AsPainter
+import ru.megboyzz.dnevnik.AsString
+import ru.megboyzz.dnevnik.R
+import ru.megboyzz.dnevnik.navigation.AppNavRoute
+
+@Composable
+fun ScheduleScreen(
+ navController: NavController,
+ scaffoldState: ScaffoldState
+) {
+ MainScaffold(
+ icon = R.drawable.ic_schedule.AsPainter(),
+ title = R.string.title_schedule.AsString(),
+ navController = navController,
+ scaffoldState = scaffoldState
+ ) {
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/header_big.xml b/app/src/main/res/drawable/header_big.xml
new file mode 100644
index 0000000..25c08d0
--- /dev/null
+++ b/app/src/main/res/drawable/header_big.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index f8c6127..3bd1bce 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -7,4 +7,8 @@
#FF018786
#FF000000
#FFFFFFFF
+
+ #3077CC
+ #FFF4F4F4
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index ef68f50..82a1b5f 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -3,7 +3,7 @@
Добро пожаловать в дневник
Оценки
Расписание
- Домашнее занадние
+ Домашнее задание
Настройки
Выйти из аккаунта
Добро пожаловать в дневник
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index 5edee9f..11c4478 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -2,6 +2,7 @@
\ No newline at end of file