Сделаны карточки дом. задания и начат шильдик в расписании

This commit is contained in:
2023-04-05 00:10:10 +03:00
parent 260c1d7b6c
commit b5a69d470d
11 changed files with 268 additions and 22 deletions
@@ -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()
}
}
}
}
@Composable
fun MessageAlertInWork() {
MessageAlert {
EmptyMessage(message = "Раздел находится в разработке!")
}
}
@@ -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))
}
}
@@ -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
}
)
}
@@ -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)
) {
}
}
@@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M11.667,10.002C11.512,10.001 11.361,10.056 11.241,10.155L7.241,13.488C7.105,13.601 7.019,13.764 7.003,13.94C6.987,14.117 7.041,14.292 7.154,14.428C7.267,14.564 7.43,14.65 7.606,14.666C7.782,14.682 7.958,14.628 8.094,14.515L11.667,11.528L15.241,14.408C15.309,14.464 15.387,14.505 15.472,14.53C15.556,14.555 15.644,14.563 15.732,14.554C15.819,14.544 15.904,14.518 15.981,14.476C16.058,14.434 16.126,14.377 16.181,14.308C16.242,14.24 16.288,14.159 16.317,14.072C16.345,13.985 16.355,13.893 16.347,13.801C16.338,13.71 16.31,13.621 16.266,13.541C16.221,13.461 16.16,13.391 16.087,13.335L12.087,10.115C11.964,10.031 11.816,9.991 11.667,10.002Z"
android:fillColor="#000000"/>
</vector>
@@ -65,4 +65,5 @@
<string name="title_reason">"Reason: "</string>
<string name="title_result_mark">Result</string>
<string name="title_average_mark">Average</string>
<string name="title_deadline">Deadline:</string>
</resources>
+1
View File
@@ -64,4 +64,5 @@
<string name="title_reason">Причина:</string>
<string name="title_result_mark">Итог</string>
<string name="title_average_mark">Ср. балл</string>
<string name="title_deadline">Выполнить до:</string>
</resources>