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