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