Маленький рефакторинг и сделан экран настроек
This commit is contained in:
@@ -83,4 +83,7 @@ dependencies {
|
|||||||
|
|
||||||
// The compose calendar library
|
// The compose calendar library
|
||||||
implementation 'com.kizitonwose.calendar:compose:2.1.1'
|
implementation 'com.kizitonwose.calendar:compose:2.1.1'
|
||||||
|
|
||||||
|
implementation "io.coil-kt:coil-compose:2.2.0"
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -9,6 +9,7 @@ import androidx.compose.foundation.layout.width
|
|||||||
import androidx.compose.material.ripple.rememberRipple
|
import androidx.compose.material.ripple.rememberRipple
|
||||||
import androidx.compose.runtime.*
|
import androidx.compose.runtime.*
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.composed
|
||||||
import androidx.compose.ui.draw.drawBehind
|
import androidx.compose.ui.draw.drawBehind
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.graphics.Paint
|
import androidx.compose.ui.graphics.Paint
|
||||||
@@ -109,18 +110,17 @@ fun Modifier.drawColoredShadow(
|
|||||||
}
|
}
|
||||||
} else this
|
} else this
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun Modifier.mainClickable(
|
fun Modifier.mainClickable(
|
||||||
radius: Dp = Dp.Unspecified,
|
radius: Dp = Dp.Unspecified,
|
||||||
onClick: () -> Unit
|
onClick: () -> Unit
|
||||||
) = this.clickable(
|
) = composed { this.clickable(
|
||||||
interactionSource = remember { MutableInteractionSource() },
|
interactionSource = remember { MutableInteractionSource() },
|
||||||
indication = rememberRipple(
|
indication = rememberRipple(
|
||||||
radius = radius,
|
radius = radius,
|
||||||
color = dark
|
color = dark
|
||||||
),
|
),
|
||||||
onClick = onClick
|
onClick = onClick
|
||||||
)
|
) }
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun rememberFirstMostVisibleMonth(
|
fun rememberFirstMostVisibleMonth(
|
||||||
|
|||||||
@@ -16,10 +16,7 @@ import androidx.navigation.compose.composable
|
|||||||
import androidx.navigation.compose.rememberNavController
|
import androidx.navigation.compose.rememberNavController
|
||||||
import com.google.accompanist.navigation.animation.AnimatedNavHost
|
import com.google.accompanist.navigation.animation.AnimatedNavHost
|
||||||
import com.google.accompanist.navigation.animation.rememberAnimatedNavController
|
import com.google.accompanist.navigation.animation.rememberAnimatedNavController
|
||||||
import ru.megboyzz.dnevnik.screens.HomeWorkScreen
|
import ru.megboyzz.dnevnik.screens.*
|
||||||
import ru.megboyzz.dnevnik.screens.LoginScreen
|
|
||||||
import ru.megboyzz.dnevnik.screens.MarksScreen
|
|
||||||
import ru.megboyzz.dnevnik.screens.ScheduleScreen
|
|
||||||
|
|
||||||
sealed class BaseNavRote(open val route: String)
|
sealed class BaseNavRote(open val route: String)
|
||||||
|
|
||||||
@@ -50,6 +47,6 @@ fun AppNavHost(){
|
|||||||
composable(AppNavRoute.Marks.route) { MarksScreen(navController, scaffoldState) }
|
composable(AppNavRoute.Marks.route) { MarksScreen(navController, scaffoldState) }
|
||||||
composable(AppNavRoute.Schedule.route) { ScheduleScreen(navController, scaffoldState) }
|
composable(AppNavRoute.Schedule.route) { ScheduleScreen(navController, scaffoldState) }
|
||||||
composable(AppNavRoute.HomeWorks.route) { HomeWorkScreen(navController, scaffoldState) }
|
composable(AppNavRoute.HomeWorks.route) { HomeWorkScreen(navController, scaffoldState) }
|
||||||
composable(AppNavRoute.Settings.route) { }
|
composable(AppNavRoute.Settings.route) { SettingsScreen(navController, scaffoldState) }
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -6,7 +6,7 @@ import androidx.navigation.NavController
|
|||||||
import ru.megboyzz.dnevnik.AsPainter
|
import ru.megboyzz.dnevnik.AsPainter
|
||||||
import ru.megboyzz.dnevnik.AsString
|
import ru.megboyzz.dnevnik.AsString
|
||||||
import ru.megboyzz.dnevnik.R
|
import ru.megboyzz.dnevnik.R
|
||||||
import ru.megboyzz.dnevnik.screens.ui.MainScaffold
|
import ru.megboyzz.dnevnik.screens.ui.main.MainScaffold
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun HomeWorkScreen(
|
fun HomeWorkScreen(
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import ru.megboyzz.dnevnik.AsPainter
|
|||||||
import ru.megboyzz.dnevnik.AsString
|
import ru.megboyzz.dnevnik.AsString
|
||||||
import ru.megboyzz.dnevnik.R
|
import ru.megboyzz.dnevnik.R
|
||||||
import ru.megboyzz.dnevnik.navigation.MarksSubScreenNavHost
|
import ru.megboyzz.dnevnik.navigation.MarksSubScreenNavHost
|
||||||
import ru.megboyzz.dnevnik.screens.ui.MainScaffold
|
import ru.megboyzz.dnevnik.screens.ui.main.MainScaffold
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun MarksScreen(
|
fun MarksScreen(
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import androidx.navigation.NavController
|
|||||||
import ru.megboyzz.dnevnik.AsPainter
|
import ru.megboyzz.dnevnik.AsPainter
|
||||||
import ru.megboyzz.dnevnik.AsString
|
import ru.megboyzz.dnevnik.AsString
|
||||||
import ru.megboyzz.dnevnik.R
|
import ru.megboyzz.dnevnik.R
|
||||||
import ru.megboyzz.dnevnik.screens.ui.MainScaffold
|
import ru.megboyzz.dnevnik.screens.ui.main.MainScaffold
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun ScheduleScreen(
|
fun ScheduleScreen(
|
||||||
|
|||||||
@@ -1,2 +1,216 @@
|
|||||||
package ru.megboyzz.dnevnik.screens
|
package ru.megboyzz.dnevnik.screens
|
||||||
|
|
||||||
|
import androidx.compose.foundation.Image
|
||||||
|
import androidx.compose.foundation.layout.*
|
||||||
|
import androidx.compose.material.*
|
||||||
|
import androidx.compose.runtime.*
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.graphics.painter.Painter
|
||||||
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import androidx.navigation.NavController
|
||||||
|
import ru.megboyzz.dnevnik.*
|
||||||
|
import ru.megboyzz.dnevnik.R
|
||||||
|
import ru.megboyzz.dnevnik.screens.ui.UnderlinedText
|
||||||
|
import ru.megboyzz.dnevnik.screens.ui.main.SettingsScaffold
|
||||||
|
import ru.megboyzz.dnevnik.ui.theme.H2
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun SettingsScreen(
|
||||||
|
navController: NavController,
|
||||||
|
scaffoldState: ScaffoldState
|
||||||
|
) {
|
||||||
|
|
||||||
|
SettingsScaffold(
|
||||||
|
onLeave = {
|
||||||
|
//navController.navigate()
|
||||||
|
},
|
||||||
|
scaffoldState = scaffoldState,
|
||||||
|
navController = navController
|
||||||
|
) {
|
||||||
|
var enabled by remember {
|
||||||
|
mutableStateOf(false)
|
||||||
|
}
|
||||||
|
|
||||||
|
Column(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxSize()
|
||||||
|
.padding(20.dp)
|
||||||
|
){
|
||||||
|
|
||||||
|
SettingsCategory(title = R.string.settings_category_accont.AsString()) {
|
||||||
|
|
||||||
|
SettingsBaseAccountHeader(
|
||||||
|
name = "Киц Михаил",
|
||||||
|
studentClass = "11-А"
|
||||||
|
)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
SettingsCategory(title = R.string.settings_category_application.AsString()) {
|
||||||
|
|
||||||
|
SettingsMenuItem(
|
||||||
|
title = R.string.title_choose_icons.AsString(),
|
||||||
|
icon = R.drawable.ic_choose_icons.AsPainter(),
|
||||||
|
onClick = {}
|
||||||
|
)
|
||||||
|
|
||||||
|
SettingsMenuSwitch(
|
||||||
|
title = R.string.title_enable_notif.AsString(),
|
||||||
|
enabled = enabled,
|
||||||
|
onChange = {
|
||||||
|
enabled =! it
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
Spacer(modifier = Modifier.weight(1f))
|
||||||
|
|
||||||
|
SettingsCategory(title = R.string.settings_category_author.AsString()) {
|
||||||
|
|
||||||
|
SettingsMenuItem(
|
||||||
|
title = R.string.settings_category_author.AsString(),
|
||||||
|
icon = R.drawable.ic_author.AsPainter()
|
||||||
|
) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun SettingsCategory(
|
||||||
|
title: String,
|
||||||
|
content: @Composable () -> Unit
|
||||||
|
) {
|
||||||
|
Column{
|
||||||
|
UnderlinedText(title)
|
||||||
|
SpacerHeight(height = 10.dp)
|
||||||
|
Column { content.invoke() }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun SettingsBaseMenuItem(
|
||||||
|
title: String,
|
||||||
|
onClick: () -> Unit,
|
||||||
|
leadingContent: @Composable () -> Unit
|
||||||
|
) {
|
||||||
|
Row(
|
||||||
|
modifier = Modifier.mainClickable { onClick.invoke() },
|
||||||
|
horizontalArrangement = Arrangement.spacedBy(5.dp),
|
||||||
|
verticalAlignment = Alignment.CenterVertically
|
||||||
|
){
|
||||||
|
leadingContent.invoke()
|
||||||
|
Text(
|
||||||
|
text = title,
|
||||||
|
style = H2,
|
||||||
|
overflow = TextOverflow.Ellipsis,
|
||||||
|
modifier = Modifier.fillMaxWidth()
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun SettingsMenuItem(
|
||||||
|
title: String,
|
||||||
|
icon: Painter,
|
||||||
|
onClick: () -> Unit
|
||||||
|
) {
|
||||||
|
|
||||||
|
SettingsBaseMenuItem(
|
||||||
|
title = title,
|
||||||
|
onClick = onClick
|
||||||
|
) {
|
||||||
|
|
||||||
|
Box(
|
||||||
|
contentAlignment = Alignment.Center,
|
||||||
|
modifier = Modifier.size(48.dp)
|
||||||
|
) {
|
||||||
|
Icon(
|
||||||
|
painter = icon,
|
||||||
|
contentDescription = "",
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun SettingsMenuSwitch(
|
||||||
|
title: String,
|
||||||
|
enabled: Boolean,
|
||||||
|
onChange: (Boolean) -> Unit
|
||||||
|
) {
|
||||||
|
|
||||||
|
SettingsBaseMenuItem(
|
||||||
|
title = title,
|
||||||
|
onClick = { onChange.invoke(enabled) }
|
||||||
|
) {
|
||||||
|
Switch(checked = enabled, onCheckedChange = { onChange.invoke(enabled) })
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun SettingsMenuCheckBox(
|
||||||
|
title: String,
|
||||||
|
enabled: Boolean,
|
||||||
|
onChange: (Boolean) -> Unit
|
||||||
|
) {
|
||||||
|
|
||||||
|
SettingsBaseMenuItem(
|
||||||
|
title = title,
|
||||||
|
onClick = { onChange.invoke(enabled) }
|
||||||
|
) {
|
||||||
|
Checkbox(checked = enabled, onCheckedChange = { onChange.invoke(enabled) })
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun SettingsBaseAccountHeader(
|
||||||
|
|
||||||
|
name: String,
|
||||||
|
studentClass: String,
|
||||||
|
|
||||||
|
) {
|
||||||
|
|
||||||
|
Row(
|
||||||
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
|
horizontalArrangement = Arrangement.spacedBy(5.dp)
|
||||||
|
) {
|
||||||
|
Box(
|
||||||
|
contentAlignment = Alignment.Center,
|
||||||
|
modifier = Modifier.size(32.dp)
|
||||||
|
){
|
||||||
|
Image(
|
||||||
|
painter = R.drawable.ic_author.AsPainter(),
|
||||||
|
contentDescription = ""
|
||||||
|
)
|
||||||
|
}
|
||||||
|
Column(
|
||||||
|
verticalArrangement = Arrangement.spacedBy(5.dp)
|
||||||
|
) {
|
||||||
|
Text(
|
||||||
|
text = name,
|
||||||
|
style = H2
|
||||||
|
)
|
||||||
|
Text(
|
||||||
|
text = studentClass,
|
||||||
|
style = H2
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@@ -33,6 +33,7 @@ import androidx.compose.ui.text.input.VisualTransformation
|
|||||||
import androidx.compose.ui.text.style.TextAlign
|
import androidx.compose.ui.text.style.TextAlign
|
||||||
import androidx.compose.ui.text.style.TextOverflow
|
import androidx.compose.ui.text.style.TextOverflow
|
||||||
import androidx.compose.ui.unit.*
|
import androidx.compose.ui.unit.*
|
||||||
|
import androidx.compose.ui.window.DialogProperties
|
||||||
import ru.megboyzz.dnevnik.*
|
import ru.megboyzz.dnevnik.*
|
||||||
import ru.megboyzz.dnevnik.R
|
import ru.megboyzz.dnevnik.R
|
||||||
import ru.megboyzz.dnevnik.ui.theme.*
|
import ru.megboyzz.dnevnik.ui.theme.*
|
||||||
@@ -559,3 +560,8 @@ fun MessageAlertInWork() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun AlertBox() {
|
||||||
|
//DialogProperties().
|
||||||
|
}
|
||||||
|
|||||||
@@ -12,16 +12,28 @@ import androidx.compose.foundation.rememberScrollState
|
|||||||
import androidx.compose.foundation.shape.RoundedCornerShape
|
import androidx.compose.foundation.shape.RoundedCornerShape
|
||||||
import androidx.compose.foundation.verticalScroll
|
import androidx.compose.foundation.verticalScroll
|
||||||
import androidx.compose.material.*
|
import androidx.compose.material.*
|
||||||
|
import androidx.compose.material.icons.Icons
|
||||||
|
import androidx.compose.material.icons.filled.Save
|
||||||
|
import androidx.compose.material.icons.filled.SouthEast
|
||||||
import androidx.compose.runtime.*
|
import androidx.compose.runtime.*
|
||||||
import androidx.compose.ui.Alignment
|
import androidx.compose.ui.Alignment
|
||||||
|
import androidx.compose.ui.ExperimentalComposeUiApi
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
|
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||||
import androidx.compose.ui.tooling.preview.Preview
|
import androidx.compose.ui.tooling.preview.Preview
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
|
import androidx.compose.ui.window.DialogProperties
|
||||||
|
import androidx.navigation.compose.rememberNavController
|
||||||
import com.google.accompanist.navigation.animation.rememberAnimatedNavController
|
import com.google.accompanist.navigation.animation.rememberAnimatedNavController
|
||||||
import com.kizitonwose.calendar.core.daysOfWeek
|
import com.kizitonwose.calendar.core.daysOfWeek
|
||||||
|
import ru.megboyzz.dnevnik.screens.SettingsCategory
|
||||||
|
import ru.megboyzz.dnevnik.screens.SettingsMenuSwitch
|
||||||
|
import ru.megboyzz.dnevnik.screens.SettingsMenuItem
|
||||||
|
import ru.megboyzz.dnevnik.screens.SettingsScreen
|
||||||
import ru.megboyzz.dnevnik.screens.ui.*
|
import ru.megboyzz.dnevnik.screens.ui.*
|
||||||
import ru.megboyzz.dnevnik.screens.ui.calendar.NiceCalendar
|
import ru.megboyzz.dnevnik.screens.ui.calendar.NiceCalendar
|
||||||
|
import ru.megboyzz.dnevnik.screens.ui.main.SettingsScaffold
|
||||||
import ru.megboyzz.dnevnik.screens.ui.piechart.PieChart
|
import ru.megboyzz.dnevnik.screens.ui.piechart.PieChart
|
||||||
import ru.megboyzz.dnevnik.screens.ui.piechart.PieChartCard
|
import ru.megboyzz.dnevnik.screens.ui.piechart.PieChartCard
|
||||||
import ru.megboyzz.dnevnik.screens.ui.piechart.PieChartData
|
import ru.megboyzz.dnevnik.screens.ui.piechart.PieChartData
|
||||||
@@ -30,6 +42,7 @@ import ru.megboyzz.dnevnik.screens.ui.schedule.BaseScheduleCard
|
|||||||
import ru.megboyzz.dnevnik.screens.ui.schedule.BaseScheduleShield
|
import ru.megboyzz.dnevnik.screens.ui.schedule.BaseScheduleShield
|
||||||
import ru.megboyzz.dnevnik.screens.ui.schedule.CallData
|
import ru.megboyzz.dnevnik.screens.ui.schedule.CallData
|
||||||
import ru.megboyzz.dnevnik.ui.theme.mainBlue
|
import ru.megboyzz.dnevnik.ui.theme.mainBlue
|
||||||
|
import ru.megboyzz.dnevnik.ui.theme.mainBlur
|
||||||
import ru.megboyzz.dnevnik.ui.theme.white
|
import ru.megboyzz.dnevnik.ui.theme.white
|
||||||
import java.time.LocalDate
|
import java.time.LocalDate
|
||||||
import java.time.YearMonth
|
import java.time.YearMonth
|
||||||
@@ -354,3 +367,41 @@ fun ScheduleCallsPrev() {
|
|||||||
BaseScheduleCallsCard(callsList = calls)
|
BaseScheduleCallsCard(callsList = calls)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Preview
|
||||||
|
@Composable
|
||||||
|
fun ScaffoldTest() {
|
||||||
|
val scaffoldState = rememberScaffoldState()
|
||||||
|
val navController = rememberNavController()
|
||||||
|
SettingsScaffold(
|
||||||
|
onLeave = { /*TODO*/ },
|
||||||
|
scaffoldState = scaffoldState,
|
||||||
|
navController = navController
|
||||||
|
) {
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Preview
|
||||||
|
@Composable
|
||||||
|
fun SettingsTest() {
|
||||||
|
|
||||||
|
SettingsScreen(navController = rememberNavController(), scaffoldState = rememberScaffoldState())
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Preview
|
||||||
|
@Composable
|
||||||
|
fun Test1() {
|
||||||
|
|
||||||
|
AlertDialog(
|
||||||
|
onDismissRequest = { /*TODO*/ },
|
||||||
|
text = {
|
||||||
|
Text(text = "hehe")
|
||||||
|
},
|
||||||
|
buttons = {
|
||||||
|
Text(text = "hehe")
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
}
|
||||||
@@ -1,78 +0,0 @@
|
|||||||
package ru.megboyzz.dnevnik.screens.ui
|
|
||||||
|
|
||||||
import androidx.compose.foundation.Image
|
|
||||||
import androidx.compose.foundation.layout.Box
|
|
||||||
import androidx.compose.foundation.layout.PaddingValues
|
|
||||||
import androidx.compose.foundation.layout.Spacer
|
|
||||||
import androidx.compose.foundation.layout.padding
|
|
||||||
import androidx.compose.material.*
|
|
||||||
import androidx.compose.material.icons.Icons
|
|
||||||
import androidx.compose.material.icons.filled.Menu
|
|
||||||
import androidx.compose.runtime.Composable
|
|
||||||
import androidx.compose.runtime.rememberCoroutineScope
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import androidx.compose.ui.graphics.Color
|
|
||||||
import androidx.compose.ui.graphics.painter.Painter
|
|
||||||
import androidx.compose.ui.unit.dp
|
|
||||||
import androidx.compose.ui.unit.sp
|
|
||||||
import androidx.navigation.NavController
|
|
||||||
import kotlinx.coroutines.launch
|
|
||||||
import ru.megboyzz.dnevnik.SpacerWidth
|
|
||||||
import ru.megboyzz.dnevnik.ui.theme.mainBlue
|
|
||||||
import ru.megboyzz.dnevnik.ui.theme.white
|
|
||||||
|
|
||||||
@Composable
|
|
||||||
fun MainScaffold(
|
|
||||||
icon: Painter,
|
|
||||||
title: String,
|
|
||||||
/* TODO viewModel */
|
|
||||||
navController: NavController,
|
|
||||||
scaffoldState: ScaffoldState,
|
|
||||||
content: (@Composable (it: PaddingValues) -> Unit),
|
|
||||||
) {
|
|
||||||
val scope = rememberCoroutineScope()
|
|
||||||
Scaffold(
|
|
||||||
scaffoldState = scaffoldState,
|
|
||||||
topBar = {
|
|
||||||
TopAppBar(
|
|
||||||
backgroundColor = mainBlue,
|
|
||||||
contentColor = Color.White
|
|
||||||
) {
|
|
||||||
IconButton(
|
|
||||||
onClick = {
|
|
||||||
val drawerState = scaffoldState.drawerState
|
|
||||||
scope.launch {
|
|
||||||
if (drawerState.isClosed)
|
|
||||||
drawerState.open()
|
|
||||||
else
|
|
||||||
drawerState.close()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
) {
|
|
||||||
|
|
||||||
Icon(
|
|
||||||
imageVector = Icons.Filled.Menu,
|
|
||||||
contentDescription = "menu",
|
|
||||||
tint = white
|
|
||||||
)
|
|
||||||
}
|
|
||||||
SpacerWidth(width = 5.dp)
|
|
||||||
Text(
|
|
||||||
text = title,
|
|
||||||
fontSize = 16.sp,
|
|
||||||
color = white
|
|
||||||
)
|
|
||||||
Spacer(Modifier.weight(1f))
|
|
||||||
Box(Modifier.padding(15.dp, 15.dp)) {
|
|
||||||
Image(painter = icon, contentDescription = "icon")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
content = content,
|
|
||||||
drawerBackgroundColor = mainBlue,
|
|
||||||
drawerContentColor = white,
|
|
||||||
drawerShape = drawerShape,
|
|
||||||
drawerContent = { DrawerContent(navController, scaffoldState) },
|
|
||||||
bottomBar = { BottomBar(navController) }
|
|
||||||
)
|
|
||||||
}
|
|
||||||
@@ -0,0 +1,130 @@
|
|||||||
|
package ru.megboyzz.dnevnik.screens.ui.main
|
||||||
|
|
||||||
|
import androidx.compose.foundation.Image
|
||||||
|
import androidx.compose.foundation.layout.Box
|
||||||
|
import androidx.compose.foundation.layout.PaddingValues
|
||||||
|
import androidx.compose.foundation.layout.Spacer
|
||||||
|
import androidx.compose.foundation.layout.padding
|
||||||
|
import androidx.compose.material.*
|
||||||
|
import androidx.compose.material.icons.Icons
|
||||||
|
import androidx.compose.material.icons.filled.ArrowBack
|
||||||
|
import androidx.compose.material.icons.filled.Menu
|
||||||
|
import androidx.compose.material.icons.filled.Settings
|
||||||
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
|
import androidx.compose.ui.Modifier
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
|
import androidx.compose.ui.graphics.painter.Painter
|
||||||
|
import androidx.compose.ui.graphics.vector.ImageVector
|
||||||
|
import androidx.compose.ui.graphics.vector.rememberVectorPainter
|
||||||
|
import androidx.compose.ui.unit.dp
|
||||||
|
import androidx.compose.ui.unit.sp
|
||||||
|
import androidx.navigation.NavController
|
||||||
|
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.BottomBar
|
||||||
|
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
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun MainScaffold(
|
||||||
|
icon: Painter,
|
||||||
|
title: String,
|
||||||
|
/* TODO viewModel */
|
||||||
|
navController: NavController,
|
||||||
|
scaffoldState: ScaffoldState,
|
||||||
|
content: (@Composable (it: PaddingValues) -> Unit),
|
||||||
|
) {
|
||||||
|
val scope = rememberCoroutineScope()
|
||||||
|
|
||||||
|
BaseScaffold(
|
||||||
|
leadingIcon = Icons.Filled.Menu,
|
||||||
|
trailingIcon = icon,
|
||||||
|
onLeadingIconClick = {
|
||||||
|
val drawerState = scaffoldState.drawerState
|
||||||
|
scope.launch {
|
||||||
|
if (drawerState.isClosed)
|
||||||
|
drawerState.open()
|
||||||
|
else
|
||||||
|
drawerState.close()
|
||||||
|
}
|
||||||
|
},
|
||||||
|
title = title,
|
||||||
|
navController = navController,
|
||||||
|
scaffoldState = scaffoldState,
|
||||||
|
bottomBar = { BottomBar(navController) },
|
||||||
|
content = content
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun BaseScaffold(
|
||||||
|
leadingIcon: ImageVector,
|
||||||
|
trailingIcon: Painter?,
|
||||||
|
onLeadingIconClick: () -> Unit,
|
||||||
|
title: String,
|
||||||
|
navController: NavController,
|
||||||
|
scaffoldState: ScaffoldState,
|
||||||
|
bottomBar: @Composable () -> Unit,
|
||||||
|
content: (@Composable (it: PaddingValues) -> Unit),
|
||||||
|
) {
|
||||||
|
Scaffold(
|
||||||
|
scaffoldState = scaffoldState,
|
||||||
|
topBar = {
|
||||||
|
TopAppBar(
|
||||||
|
backgroundColor = mainBlue,
|
||||||
|
contentColor = Color.White
|
||||||
|
) {
|
||||||
|
IconButton(onClick = onLeadingIconClick) {
|
||||||
|
Icon(
|
||||||
|
imageVector = leadingIcon,
|
||||||
|
contentDescription = "",
|
||||||
|
tint = white
|
||||||
|
)
|
||||||
|
}
|
||||||
|
SpacerWidth(width = 5.dp)
|
||||||
|
Text(
|
||||||
|
text = title,
|
||||||
|
fontSize = 16.sp,
|
||||||
|
color = white
|
||||||
|
)
|
||||||
|
if(trailingIcon != null) {
|
||||||
|
Spacer(Modifier.weight(1f))
|
||||||
|
Box(Modifier.padding(15.dp, 15.dp)) {
|
||||||
|
Image(painter = trailingIcon, contentDescription = "icon")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
content = content,
|
||||||
|
drawerBackgroundColor = mainBlue,
|
||||||
|
drawerContentColor = white,
|
||||||
|
drawerShape = drawerShape,
|
||||||
|
drawerContent = { DrawerContent(navController, scaffoldState) },
|
||||||
|
bottomBar = bottomBar
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Composable
|
||||||
|
fun SettingsScaffold(
|
||||||
|
onLeave: () -> Unit,
|
||||||
|
scaffoldState: ScaffoldState,
|
||||||
|
navController: NavController,
|
||||||
|
content: @Composable (PaddingValues) -> Unit
|
||||||
|
) {
|
||||||
|
BaseScaffold(
|
||||||
|
leadingIcon = Icons.Filled.ArrowBack,
|
||||||
|
trailingIcon = R.drawable.ic_settings.AsPainter(),
|
||||||
|
onLeadingIconClick = onLeave,
|
||||||
|
title = R.string.title_settings.AsString(),
|
||||||
|
navController = navController,
|
||||||
|
scaffoldState = scaffoldState,
|
||||||
|
bottomBar = {},
|
||||||
|
content = content
|
||||||
|
)
|
||||||
|
}
|
||||||
@@ -66,4 +66,9 @@
|
|||||||
<string name="title_result_mark">Result</string>
|
<string name="title_result_mark">Result</string>
|
||||||
<string name="title_average_mark">Average</string>
|
<string name="title_average_mark">Average</string>
|
||||||
<string name="title_deadline">Deadline:</string>
|
<string name="title_deadline">Deadline:</string>
|
||||||
|
<string name="settings_category_accont">Account</string>
|
||||||
|
<string name="settings_category_application">Application</string>
|
||||||
|
<string name="settings_category_author">Author</string>
|
||||||
|
<string name="title_choose_icons">" Select the icons for subjects"</string>
|
||||||
|
<string name="title_enable_notif">Enable notify</string>
|
||||||
</resources>
|
</resources>
|
||||||
@@ -65,4 +65,9 @@
|
|||||||
<string name="title_result_mark">Итог</string>
|
<string name="title_result_mark">Итог</string>
|
||||||
<string name="title_average_mark">Ср. балл</string>
|
<string name="title_average_mark">Ср. балл</string>
|
||||||
<string name="title_deadline">Выполнить до:</string>
|
<string name="title_deadline">Выполнить до:</string>
|
||||||
|
<string name="settings_category_accont">Акканут</string>
|
||||||
|
<string name="settings_category_application">Приложение</string>
|
||||||
|
<string name="settings_category_author">Автор</string>
|
||||||
|
<string name="title_choose_icons">Выбрать иконки для предметов</string>
|
||||||
|
<string name="title_enable_notif">Включить уведомления о новых оценках</string>
|
||||||
</resources>
|
</resources>
|
||||||
Reference in New Issue
Block a user