diff --git a/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/Components.kt b/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/Components.kt index 2aef2f5..73b7526 100644 --- a/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/Components.kt +++ b/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/Components.kt @@ -3,7 +3,6 @@ package ru.megboyzz.dnevnik.screens.ui import androidx.compose.animation.* import androidx.compose.animation.core.tween import androidx.compose.foundation.* -import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.* import androidx.compose.foundation.lazy.grid.GridCells import androidx.compose.foundation.lazy.grid.LazyVerticalGrid @@ -14,10 +13,8 @@ import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material.* import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Check -import androidx.compose.material.icons.filled.Menu import androidx.compose.material.icons.filled.Visibility import androidx.compose.material.icons.filled.VisibilityOff -import androidx.compose.material.ripple.rememberRipple import androidx.compose.runtime.* import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.Alignment @@ -28,8 +25,6 @@ import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.focus.onFocusChanged import androidx.compose.ui.graphics.* import androidx.compose.ui.graphics.painter.Painter -import androidx.compose.ui.layout.ContentScale -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 @@ -38,16 +33,9 @@ import androidx.compose.ui.text.input.VisualTransformation import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.* -import androidx.compose.ui.viewinterop.AndroidView -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.navigation.BaseNavRote import ru.megboyzz.dnevnik.ui.theme.* -import java.time.DayOfWeek -import java.util.* //Рефакторинг компонентов: разбиение файла с компонентами на отдельные файлы @@ -57,10 +45,12 @@ import java.util.* @Composable fun AlmostOutlinedText( - text: String + text: String, + contentColor: Color = white, + textAlign: TextAlign = TextAlign.Center ){ Column() { - Divider(color = white, thickness = 1.dp) + Divider(color = contentColor, thickness = 1.dp) Column( modifier = Modifier .fillMaxWidth() @@ -69,14 +59,14 @@ fun AlmostOutlinedText( ) { Text( text = text, - color = white, - textAlign = TextAlign.Center, + color = contentColor, + textAlign = textAlign, style = H2, modifier = Modifier .fillMaxWidth() ) } - Divider(color = white, thickness = 1.dp) + Divider(color = contentColor, thickness = 1.dp) } } @@ -549,11 +539,23 @@ fun EmptyMessage(message: String) = ContentMessage(message = message, isFine = f fun FineMessage(message: String) = ContentMessage(message = message) @Composable -fun MessageCard( - message: String, +fun MessageAlert( content: @Composable () -> Unit ) { BaseCard { - + Box( + modifier = Modifier.defaultMinSize(300.dp), + contentAlignment = Alignment.Center, + ){ + content.invoke() + } } -} \ No newline at end of file +} + +@Composable +fun MessageAlertInWork() { + MessageAlert { + EmptyMessage(message = "Раздел находится в разработке!") + } +} + diff --git a/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/HomeWorkCard.kt b/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/HomeWorkCard.kt new file mode 100644 index 0000000..6cb529c --- /dev/null +++ b/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/HomeWorkCard.kt @@ -0,0 +1,159 @@ +package ru.megboyzz.dnevnik.screens.ui + +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.Image +import androidx.compose.foundation.border +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import ru.megboyzz.dnevnik.AsPainter +import ru.megboyzz.dnevnik.AsString +import ru.megboyzz.dnevnik.R +import ru.megboyzz.dnevnik.ui.theme.H2 +import ru.megboyzz.dnevnik.ui.theme.dark +import ru.megboyzz.dnevnik.ui.theme.mainBlue +import ru.megboyzz.dnevnik.ui.theme.white +import java.time.LocalDate +import java.time.format.DateTimeFormatter +import java.util.* + + +@Composable +fun BaseHomeWorkCard( + subjectName: String, + homeWorkTaskText: String, + deadlineDate: LocalDate, + deadlineLesson: Int = -1, + isDone: Boolean, + onClickBox: (Boolean) -> Unit +) { + val deadlineLessonText = if(deadlineLesson != -1) "$deadlineLesson-го урока" else "" + + val format = DateTimeFormatter.ofPattern("dd.MM.yyyy", Locale.getDefault()) + var expanded by remember { + mutableStateOf(false) + } + + BaseCard { + Box( + modifier = Modifier + .defaultMinSize(300.dp) + .padding(5.dp) + ){ + Column( + verticalArrangement = Arrangement.spacedBy(0.dp) + ) { + Row( + horizontalArrangement = Arrangement.SpaceBetween, + verticalAlignment = Alignment.CenterVertically, + modifier = Modifier.defaultMinSize(500.dp) + ){ + HomeWorkIsDoneCheckBox(isDone = isDone, onClickBox = onClickBox) + Text( + text = subjectName, + style = H2, + color = dark, + overflow = TextOverflow.Ellipsis, + textAlign = TextAlign.Center + ) + HomeWorkCardToggler(expanded = expanded, onChangeExpand = {expanded = !it}) + } + if(expanded) { + Column( + verticalArrangement = Arrangement.spacedBy(5.dp), + modifier = Modifier.padding(5.dp) + ) { + HomeworkText(text = homeWorkTaskText) + Text( + text = "${R.string.title_deadline.AsString()} ${ + deadlineDate.format( + format + ) + } $deadlineLessonText", + style = H2, + color = dark + ) + } + } + } + } + } +} + +@Composable +fun HomeWorkIsDoneCheckBox( + isDone: Boolean, + onClickBox: (Boolean) -> Unit +) { + val shape = RoundedCornerShape(9.dp) + Box( + modifier = Modifier + .size(25.dp, 20.dp) + .clip(shape) + .border( + border = BorderStroke( + width = 1.dp, + color = mainBlue + ), + shape = shape + ) + .clickable { onClickBox.invoke(isDone) }, + contentAlignment = Alignment.Center + ){ + if(isDone) + Image( + painter = R.drawable.ic_done.AsPainter(), + contentDescription = "" + ) + } +} + +@Composable +fun HomeWorkCardToggler( + expanded: Boolean, + onChangeExpand: (Boolean) -> Unit +) { + Box(modifier = Modifier.size(24.dp)) { + IconButton( + onClick = { onChangeExpand.invoke(expanded) }, + modifier = Modifier.fillMaxSize() + ) { + Icon( + painter = (if (expanded) R.drawable.ic_hw_toggled else R.drawable.ic_hw_untoggled).AsPainter(), + contentDescription = "" + ) + } + } +} + + +@Composable +fun HomeworkText( + text: String, +){ + Column() { + Divider(color = dark, thickness = 1.dp, modifier = Modifier.width(500.dp)) + Column( + modifier = Modifier + .defaultMinSize(500.dp) + .height(40.dp), + verticalArrangement = Arrangement.Center + ) { + Text( + text = text, + color = dark, + style = H2, + ) + } + Divider(color = dark, thickness = 1.dp, modifier = Modifier.width(500.dp)) + } +} 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 f247523..20e83c7 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 @@ -22,6 +22,7 @@ import ru.megboyzz.dnevnik.screens.ui.piechart.PieChartCard import ru.megboyzz.dnevnik.screens.ui.piechart.PieChartData import ru.megboyzz.dnevnik.ui.theme.mainBlue import ru.megboyzz.dnevnik.ui.theme.white +import java.time.LocalDate import java.time.YearMonth import java.util.* @@ -34,7 +35,8 @@ fun NicePreviewContainer( Column( modifier = Modifier .fillMaxWidth() - .verticalScroll(rememberScrollState()).height(1500.dp), + .verticalScroll(rememberScrollState()) + .height(1500.dp), horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.spacedBy(10.dp) ) { content() } @@ -252,3 +254,39 @@ fun PieChartNullPrev() { ) } } + + +@Preview +@Composable +fun MessagesPrev() { + + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(10.dp) + ) { + MessageAlert { + EmptyMessage(message = "Таких оценок нет((") + } + MessageAlert { + FineMessage(message = "Сегодня нет уроков!") + } + } + +} + +@Preview +@Composable +fun HomeWorkCardPrev() { + var isDone by remember { + mutableStateOf(false) + } + BaseHomeWorkCard( + subjectName = "Алгебра и начала математического анализа", + homeWorkTaskText = "C. 45 №45, №56, №46", + deadlineDate = LocalDate.now(), + isDone = isDone, + onClickBox = { + isDone = !it + } + ) +} \ No newline at end of file diff --git a/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/ScheduleShield.kt b/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/ScheduleShield.kt new file mode 100644 index 0000000..403a91d --- /dev/null +++ b/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/ScheduleShield.kt @@ -0,0 +1,36 @@ +package ru.megboyzz.dnevnik.screens.ui + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.unit.dp + +@Composable +fun BaseScheduleShield( + subjectName: String, + teacherName: String, + classNumber: String, + nextLessonName: String +) { + BaseCard { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + ) { + + } + } +} + +@Composable +fun TextHeader( + title: String, + value: String, + valueIsBlue: Boolean = true +) { + Column( + verticalArrangement = Arrangement.spacedBy(10.dp) + ) { + + } +} \ No newline at end of file diff --git a/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/BottomBar.kt b/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/main/BottomBar.kt similarity index 100% rename from app/src/main/java/ru/megboyzz/dnevnik/screens/ui/BottomBar.kt rename to app/src/main/java/ru/megboyzz/dnevnik/screens/ui/main/BottomBar.kt diff --git a/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/Drawer.kt b/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/main/Drawer.kt similarity index 100% rename from app/src/main/java/ru/megboyzz/dnevnik/screens/ui/Drawer.kt rename to app/src/main/java/ru/megboyzz/dnevnik/screens/ui/main/Drawer.kt diff --git a/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/MainScaffold.kt b/app/src/main/java/ru/megboyzz/dnevnik/screens/ui/main/MainScaffold.kt similarity index 100% rename from app/src/main/java/ru/megboyzz/dnevnik/screens/ui/MainScaffold.kt rename to app/src/main/java/ru/megboyzz/dnevnik/screens/ui/main/MainScaffold.kt diff --git a/app/src/main/res/drawable/ic_hw_toggled.xml b/app/src/main/res/drawable/ic_hw_toggled.xml new file mode 100644 index 0000000..0f3e753 --- /dev/null +++ b/app/src/main/res/drawable/ic_hw_toggled.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_hw_toggeler.xml b/app/src/main/res/drawable/ic_hw_untoggled.xml similarity index 100% rename from app/src/main/res/drawable/ic_hw_toggeler.xml rename to app/src/main/res/drawable/ic_hw_untoggled.xml diff --git a/app/src/main/res/values-en-rUS/strings.xml b/app/src/main/res/values-en-rUS/strings.xml index ccf0099..1dec942 100644 --- a/app/src/main/res/values-en-rUS/strings.xml +++ b/app/src/main/res/values-en-rUS/strings.xml @@ -65,4 +65,5 @@ "Reason: " Result Average + Deadline: \ 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 0e6c02f..c78ac94 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -64,4 +64,5 @@ Причина: Итог Ср. балл + Выполнить до: \ No newline at end of file