diff --git a/app/src/main/java/ru/megboyzz/dnevnik/screens/SettingsScreen.kt b/app/src/main/java/ru/megboyzz/dnevnik/screens/SettingsScreen.kt index 503fba9..cf89f3c 100644 --- a/app/src/main/java/ru/megboyzz/dnevnik/screens/SettingsScreen.kt +++ b/app/src/main/java/ru/megboyzz/dnevnik/screens/SettingsScreen.kt @@ -12,6 +12,7 @@ import androidx.compose.ui.unit.dp import androidx.navigation.NavController import ru.megboyzz.dnevnik.* import ru.megboyzz.dnevnik.R +import ru.megboyzz.dnevnik.navigation.AppNavRoute import ru.megboyzz.dnevnik.screens.ui.UnderlinedText import ru.megboyzz.dnevnik.screens.ui.main.SettingsScaffold import ru.megboyzz.dnevnik.ui.theme.H2 @@ -23,9 +24,7 @@ fun SettingsScreen( ) { SettingsScaffold( - onLeave = { - //navController.navigate() - }, + onLeave = { navController.navigate(AppNavRoute.Marks) }, scaffoldState = scaffoldState, navController = navController ) { diff --git a/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/Previews.kt b/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/Previews.kt index 04d2886..a14d56a 100644 --- a/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/Previews.kt +++ b/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/Previews.kt @@ -20,9 +20,12 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.navigation.compose.rememberNavController import com.kizitonwose.calendar.core.daysOfWeek +import ru.megboyzz.dnevnik.navigate +import ru.megboyzz.dnevnik.navigation.AppNavRoute import ru.megboyzz.dnevnik.screens.SettingsScreen import ru.megboyzz.dnevnik.screens.ui.* import ru.megboyzz.dnevnik.screens.ui.calendar.NiceCalendar +import ru.megboyzz.dnevnik.screens.ui.main.DrawerContent import ru.megboyzz.dnevnik.screens.ui.main.SettingsScaffold import ru.megboyzz.dnevnik.screens.ui.piechart.PieChart import ru.megboyzz.dnevnik.screens.ui.piechart.PieChartCard @@ -363,7 +366,7 @@ fun ScaffoldTest() { val scaffoldState = rememberScaffoldState() val navController = rememberNavController() SettingsScaffold( - onLeave = { /*TODO*/ }, + onLeave = { navController.navigate(AppNavRoute.Marks) }, scaffoldState = scaffoldState, navController = navController ) { diff --git a/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/main/Drawer.kt b/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/main/Drawer.kt index ef8a9a4..e041815 100644 --- a/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/main/Drawer.kt +++ b/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/main/Drawer.kt @@ -1,18 +1,22 @@ -package ru.megboyzz.dnevnik.screens.ui +package ru.megboyzz.dnevnik.screens.ui.main import android.annotation.SuppressLint import androidx.compose.foundation.Image +import androidx.compose.foundation.background import androidx.compose.foundation.layout.* +import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material.Divider import androidx.compose.material.ScaffoldState +import androidx.compose.material.Surface import androidx.compose.material.Text import androidx.compose.runtime.Composable -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope 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.geometry.CornerRadius +import androidx.compose.ui.geometry.Rect import androidx.compose.ui.geometry.RoundRect import androidx.compose.ui.geometry.Size import androidx.compose.ui.graphics.Color @@ -22,15 +26,51 @@ import androidx.compose.ui.graphics.painter.Painter import androidx.compose.ui.unit.Density import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.dp +import androidx.compose.ui.zIndex import androidx.navigation.NavController import kotlinx.coroutines.launch import ru.megboyzz.dnevnik.* import ru.megboyzz.dnevnik.R import ru.megboyzz.dnevnik.navigation.AppNavRoute +import ru.megboyzz.dnevnik.screens.ui.AlmostOutlinedText +import ru.megboyzz.dnevnik.screens.ui.ProfileCard import ru.megboyzz.dnevnik.ui.theme.H2 +import ru.megboyzz.dnevnik.ui.theme.Shapes +import ru.megboyzz.dnevnik.ui.theme.mainBlue import ru.megboyzz.dnevnik.ui.theme.white -@SuppressLint("CoroutineCreationDuringComposition") + +@Composable +fun NiceContainerForDrawer( + content: @Composable () -> Unit +) { + + val elevation = 16.dp + + val shape = RoundedCornerShape( + topEnd = 20.dp, + bottomEnd = 20.dp + ) + + Box( + modifier = Modifier + .shadow(elevation) + .zIndex(1f) + .clip(shape) + ) { + Box( + modifier = Modifier + .background( + color = mainBlue, + shape = shape + ) + .clip(shape) + ) { + content.invoke() + } + } +} + @Composable fun DrawerContent( navController: NavController, @@ -38,93 +78,69 @@ fun DrawerContent( ) { val scope = rememberCoroutineScope() - Column( - modifier = Modifier - .width(260.dp) - .fillMaxSize() - .padding(10.dp), - horizontalAlignment = Alignment.Start - ){ - SpacerHeight(10.dp) - ProfileCard(painter = R.drawable.ic_author.AsPainter()) - SpacerHeight(15.dp) - AlmostOutlinedText(text = "Идет 3-я четверть") - SpacerHeight(20.dp) + NiceContainerForDrawer { Column( - verticalArrangement = Arrangement.spacedBy(5.dp), - modifier = Modifier.padding(5.dp, 0.dp) + modifier = Modifier + .width(260.dp) + .fillMaxSize() + .padding(10.dp) + .background(mainBlue), + horizontalAlignment = Alignment.Start, ) { - DrawerMainButton( - icon = R.drawable.ic_marks.AsPainter(), - text = R.string.title_marks.AsString(), - onClick = { - navController.navigate(AppNavRoute.Marks) - scope.launch { scaffoldState.drawerState.close() } - } - ) - DrawerMainButton( - icon = R.drawable.ic_homework.AsPainter(), - text = R.string.title_hw.AsString(), - onClick = { - navController.navigate(AppNavRoute.HomeWorks) - scope.launch { scaffoldState.drawerState.close() } - } - ) - DrawerMainButton( - icon = R.drawable.ic_schedule.AsPainter(), - text = R.string.title_schedule.AsString(), - onClick = { - navController.navigate(AppNavRoute.Schedule) - scope.launch { scaffoldState.drawerState.close() } - } - ) - DrawerMainButton( - icon = R.drawable.ic_settings.AsPainter(), - text = R.string.title_settings.AsString(), - onClick = { - navController.navigate(AppNavRoute.Settings) - scope.launch { scaffoldState.drawerState.close() } - } - ) - } - Spacer(Modifier.weight(1f)) - Divider(color = white, thickness = 1.dp) - SpacerHeight(5.dp) - Column(Modifier.padding(5.dp, 0.dp)) { - DrawerMainButton( - icon = R.drawable.ic_exit.AsPainter(), - text = R.string.title_leave_from_acconut.AsString() - ) { /* TODO */ } + SpacerHeight(10.dp) + ProfileCard(painter = R.drawable.ic_author.AsPainter()) + SpacerHeight(15.dp) + AlmostOutlinedText(text = "Идет 3-я четверть") + SpacerHeight(20.dp) + Column( + verticalArrangement = Arrangement.spacedBy(5.dp), + ) { + DrawerMainButton( + icon = R.drawable.ic_marks.AsPainter(), + text = R.string.title_marks.AsString(), + onClick = { + navController.navigate(AppNavRoute.Marks) + scope.launch { scaffoldState.drawerState.close() } + } + ) + DrawerMainButton( + icon = R.drawable.ic_homework.AsPainter(), + text = R.string.title_hw.AsString(), + onClick = { + navController.navigate(AppNavRoute.HomeWorks) + scope.launch { scaffoldState.drawerState.close() } + } + ) + DrawerMainButton( + icon = R.drawable.ic_schedule.AsPainter(), + text = R.string.title_schedule.AsString(), + onClick = { + navController.navigate(AppNavRoute.Schedule) + scope.launch { scaffoldState.drawerState.close() } + } + ) + DrawerMainButton( + icon = R.drawable.ic_settings.AsPainter(), + text = R.string.title_settings.AsString(), + onClick = { + navController.navigate(AppNavRoute.Settings) + scope.launch { scaffoldState.drawerState.close() } + } + ) + } + Spacer(Modifier.weight(1f)) + Divider(color = white, thickness = 1.dp) + SpacerHeight(5.dp) + Column(Modifier.padding(5.dp, 0.dp)) { + DrawerMainButton( + icon = R.drawable.ic_exit.AsPainter(), + text = R.string.title_leave_from_acconut.AsString() + ) { /* TODO */ } + } } } } -val drawerShape = object : Shape { - override fun createOutline( - size: Size, - layoutDirection: LayoutDirection, - density: Density - ): Outline.Rounded { - - val radius = CornerRadius(30f, 30f) - val nullRadius = CornerRadius.Zero - - return Outline.Rounded( - RoundRect( - left = 0f, - top = 0f, - right = size.width * 26 / 36, - bottom = size.height, - topLeftCornerRadius = nullRadius, - topRightCornerRadius = radius, - bottomRightCornerRadius = radius, - bottomLeftCornerRadius = nullRadius - ) - ) - } - -} - @Composable fun DrawerMainButton( icon: Painter, @@ -132,26 +148,23 @@ fun DrawerMainButton( textColor: Color = white, onClick: () -> Unit = {} ) { - Column( + Row( + verticalAlignment = Alignment.CenterVertically, modifier = Modifier .fillMaxWidth() .height(30.dp) - .mainClickable(onClick = onClick), - verticalArrangement = Arrangement.Center - ) { - Row( - horizontalArrangement = Arrangement.Start - ){ - Image( - painter = icon, - contentDescription = "icon" - ) - SpacerWidth(13.dp) - Text( - text = text, - style = H2, - color = textColor - ) - } + .mainClickable { onClick.invoke() } + ){ + Image( + painter = icon, + contentDescription = "icon", + Modifier.padding(start = 10.dp) + ) + SpacerWidth(13.dp) + Text( + text = text, + style = H2, + color = textColor + ) } } \ No newline at end of file diff --git a/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/main/Scaffolds.kt b/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/main/Scaffolds.kt index d94f8d1..d294e11 100644 --- a/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/main/Scaffolds.kt +++ b/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/main/Scaffolds.kt @@ -22,8 +22,6 @@ import kotlinx.coroutines.launch import ru.megboyzz.dnevnik.AsPainter import ru.megboyzz.dnevnik.AsString import ru.megboyzz.dnevnik.SpacerWidth -import ru.megboyzz.dnevnik.screens.ui.DrawerContent -import ru.megboyzz.dnevnik.screens.ui.drawerShape import ru.megboyzz.dnevnik.ui.theme.mainBlue import ru.megboyzz.dnevnik.ui.theme.white import ru.megboyzz.dnevnik.R @@ -32,7 +30,6 @@ import ru.megboyzz.dnevnik.R fun MainScaffold( icon: Painter, title: String, - /* TODO viewModel */ navController: NavController, scaffoldState: ScaffoldState, content: (@Composable (it: PaddingValues) -> Unit), @@ -99,10 +96,13 @@ fun BaseScaffold( } }, content = content, - drawerBackgroundColor = mainBlue, - drawerContentColor = white, - drawerShape = drawerShape, - drawerContent = { DrawerContent(navController, scaffoldState) }, + drawerBackgroundColor = Color.Transparent, + drawerContentColor = Color.Transparent, + //drawerShape = drawerShape, + drawerElevation = 0.dp, + drawerContent = { + DrawerContent(navController, scaffoldState) + }, bottomBar = bottomBar ) } diff --git a/buildSrc/src/main/java/AppDependencies.kt b/buildSrc/src/main/java/AppDependencies.kt index ddfa4df..9e025e5 100644 --- a/buildSrc/src/main/java/AppDependencies.kt +++ b/buildSrc/src/main/java/AppDependencies.kt @@ -1,7 +1,5 @@ import org.gradle.api.artifacts.dsl.DependencyHandler -//TODO - придумать обработчик зависмостей основанный на рефлексии - object AppLibraries: DependencyList() { //std lib