Прокинут во всех экранах стейт скаффолда

This commit is contained in:
Michael Kits
2023-01-07 15:23:14 +03:00
parent df6d85786b
commit 2527cae931
15 changed files with 484 additions and 164 deletions
-17
View File
@@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetDropDown">
<runningDeviceTargetSelectedWithDropDown>
<Target>
<type value="RUNNING_DEVICE_TARGET" />
<deviceKey>
<Key>
<type value="SERIAL_NUMBER" />
<value value="2a40cdac1f0d7ece" />
</Key>
</deviceKey>
</Target>
</runningDeviceTargetSelectedWithDropDown>
<timeTargetWasSelectedWithDropDown value="2023-01-05T19:44:17.771649600Z" />
</component>
</project>
+1 -1
View File
@@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectRootManager" version="2" languageLevel="JDK_17" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK">
<component name="ProjectRootManager" version="2" languageLevel="JDK_17_PREVIEW" project-jdk-name="Android Studio default JDK" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" />
</component>
<component name="ProjectType">
+1
View File
@@ -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"
}
+1
View File
@@ -17,6 +17,7 @@
android:name=".MainActivity"
android:exported="true"
android:theme="@style/Theme.MyDnevnik"
android:screenOrientation="fullSensor"
android:windowSoftInputMode="adjustResize">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
@@ -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)
@@ -27,3 +39,66 @@ fun SpacerHeight(height: Dp) = Spacer(Modifier.height(height))
@Composable
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
}
@@ -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) { }
}
}
@@ -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
) {
@@ -492,3 +621,112 @@ fun MainButton(
)
}
}
@Composable
fun LoginScreenContent(
login: MutableState<String>,
password: MutableState<String>,
isError: MutableState<Boolean>,
isRememberMe: MutableState<Boolean>,
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
)
}
}
}
}
}
@@ -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
) {
}
}
@@ -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())
val isError = remember {
mutableStateOf(false)
}
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 */ }
)
val rememberMe = remember {
mutableStateOf(false)
}
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
LoginScreenContent(
login = login,
password = password,
isError = isError,
isRememberMe = rememberMe,
onSignIn = { navController.navigate(AppNavRoute.Marks.route) },
onSignUp = { /*TODO*/ },
onForgetPassword = { /* TODO */ }
)
}
}
}
@Preview
@Composable
fun LoginPagePrev() {
LoginScreen()
}
@@ -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
) {
}
}
@@ -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
) {
}
}
+16
View File
@@ -0,0 +1,16 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="150dp"
android:height="150dp"
android:viewportWidth="150"
android:viewportHeight="150">
<path
android:pathData="M0,0H150V120C150,136.57 136.57,150 120,150H0V0Z"
android:fillColor="#3C95FF"/>
<group>
<clip-path
android:pathData="M35,35h80v80h-80z"/>
<path
android:pathData="M108.52,52.43L83.94,40.72C78.53,37.49 71.8,37.43 66.33,40.57L41.48,52.43C41.38,52.48 41.29,52.53 41.2,52.58C35.3,55.96 33.25,63.47 36.62,69.37C37.77,71.37 39.45,73.01 41.48,74.1L48.33,77.37V93.7C48.34,101 53.09,107.46 60.06,109.63C64.92,111.03 69.95,111.72 75,111.67C80.05,111.72 85.08,111.04 89.94,109.64C96.91,107.47 101.66,101.02 101.67,93.72V77.36L108.33,74.17V101.67C108.33,103.51 109.82,105 111.67,105C113.51,105 115,103.51 115,101.67V61.67C115.02,57.75 111.93,54.14 108.52,52.43ZM95,93.72C95,98.08 92.17,101.95 88,103.26C83.77,104.47 79.39,105.05 75,105C70.6,105.05 66.23,104.47 62,103.26C57.83,101.95 55,98.08 55,93.72V80.54L66.06,85.81C68.78,87.43 71.9,88.28 75.07,88.27C78.09,88.29 81.06,87.49 83.66,85.96L95,80.54V93.72ZM105.67,68.08L80.53,80.08C77.02,82.12 72.68,82.07 69.23,79.93L44.63,68.23C41.89,66.75 40.86,63.33 42.34,60.59C42.84,59.66 43.59,58.9 44.51,58.37L69.49,46.44C73,44.4 77.34,44.46 80.79,46.59L105.37,58.3C107.18,59.3 108.31,61.2 108.33,63.27C108.34,65.22 107.33,67.05 105.67,68.08Z"
android:fillColor="#ffffff"/>
</group>
</vector>
+4
View File
@@ -7,4 +7,8 @@
<color name="teal_700">#FF018786</color>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
<color name="statusBlue">#3077CC</color>
<color name="backGround">#FFF4F4F4</color>
</resources>
+1 -1
View File
@@ -3,7 +3,7 @@
<string name="title_header">Добро пожаловать в дневник</string>
<string name="title_marks">Оценки</string>
<string name="title_schedule">Расписание</string>
<string name="title_hw">Домашнее занадние</string>
<string name="title_hw">Домашнее задание</string>
<string name="title_settings">Настройки</string>
<string name="title_leave_from_acconut">Выйти из аккаунта</string>
<string name="title_welcome">Добро пожаловать в дневник</string>
+2 -1
View File
@@ -2,6 +2,7 @@
<resources>
<style name="Theme.MyDnevnik" parent="android:Theme.Material.Light.NoActionBar">
<item name="android:statusBarColor">@color/purple_700</item>
<item name="android:statusBarColor">@color/statusBlue</item>
<item name="android:colorBackground">@color/backGround</item>
</style>
</resources>