diff --git a/mobile/.idea/caches/deviceStreaming.xml b/mobile/.idea/caches/deviceStreaming.xml deleted file mode 100644 index 406736c..0000000 --- a/mobile/.idea/caches/deviceStreaming.xml +++ /dev/null @@ -1,340 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/mobile/app/src/main/java/com/odweta/solon/BackButtonFactory.kt b/mobile/app/src/main/java/com/odweta/solon/BackButtonFactory.kt index db45f7f..217e12c 100644 --- a/mobile/app/src/main/java/com/odweta/solon/BackButtonFactory.kt +++ b/mobile/app/src/main/java/com/odweta/solon/BackButtonFactory.kt @@ -33,9 +33,7 @@ interface BackButtonFactoryInterface { @Composable fun BackButton(onClick: () -> Unit) { Box( - modifier = Modifier - .fillMaxWidth() - .padding(start = 5.dp) + modifier = Modifier.padding(start = 10.dp) ) { Button( onClick = onClick, @@ -66,7 +64,10 @@ object BackButtonFactory: BackButtonFactoryInterface { override fun get(type: BackButtonType): @Composable () -> Unit { return when (type) { BackButtonType.Menu -> { { BackButton { global.currentScreenElement = ScreenElement.Menu } } } - BackButtonType.MarksAll -> { { BackButton { global.marksDepthLevel = MarksDepthLevel.All } } } + BackButtonType.MarksAll -> { { BackButton { + global.currentScreenElement = ScreenElement.Marks + global.marksDepthLevel = MarksDepthLevel.All + } } } BackButtonType.MarksSubject -> { { BackButton { global.marksDepthLevel = MarksDepthLevel.Subject } } } } } diff --git a/mobile/app/src/main/java/com/odweta/solon/Global.kt b/mobile/app/src/main/java/com/odweta/solon/Global.kt index 283f27c..a3fb5d9 100644 --- a/mobile/app/src/main/java/com/odweta/solon/Global.kt +++ b/mobile/app/src/main/java/com/odweta/solon/Global.kt @@ -22,7 +22,6 @@ import androidx.compose.ui.unit.dp import com.odweta.solon.ui.theme.PastelYellow import org.json.JSONObject import java.io.File -import java.time.LocalDate import java.time.LocalDateTime enum class Screen { @@ -197,6 +196,8 @@ class Mark { enum class ScreenElement { Timetable, Marks, + NewMarks, + FinalMarks, Menu, About, Settings, diff --git a/mobile/app/src/main/java/com/odweta/solon/MainActivity.kt b/mobile/app/src/main/java/com/odweta/solon/MainActivity.kt index 185164b..49d72a1 100644 --- a/mobile/app/src/main/java/com/odweta/solon/MainActivity.kt +++ b/mobile/app/src/main/java/com/odweta/solon/MainActivity.kt @@ -3,16 +3,6 @@ package com.odweta.solon import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent -import androidx.compose.animation.AnimatedContent -import androidx.compose.animation.AnimatedVisibility -import androidx.compose.animation.ExperimentalAnimationApi -import androidx.compose.animation.SizeTransform -import androidx.compose.animation.fadeIn -import androidx.compose.animation.fadeOut -import androidx.compose.animation.slideInVertically -import androidx.compose.animation.slideOutVertically -import androidx.compose.animation.togetherWith -import androidx.compose.animation.with import androidx.compose.foundation.background import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column @@ -73,6 +63,8 @@ class MainActivity : ComponentActivity() { when (targetScreen) { ScreenElement.Timetable -> TimetableScreen() ScreenElement.Marks -> MarksScreen() + ScreenElement.NewMarks -> NewMarksScreen() + ScreenElement.FinalMarks -> FinalMarksScreen() ScreenElement.Menu -> MenuScreen() ScreenElement.About -> AboutScreen() ScreenElement.Settings -> SettingsScreen() diff --git a/mobile/app/src/main/java/com/odweta/solon/Marks.kt b/mobile/app/src/main/java/com/odweta/solon/Marks.kt index 4975ed9..5fb25b0 100644 --- a/mobile/app/src/main/java/com/odweta/solon/Marks.kt +++ b/mobile/app/src/main/java/com/odweta/solon/Marks.kt @@ -14,7 +14,6 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape @@ -22,8 +21,6 @@ import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.AutoAwesome import androidx.compose.material.icons.filled.WorkspacePremium -import androidx.compose.material3.Button -import androidx.compose.material3.ButtonColors import androidx.compose.material3.FloatingActionButton import androidx.compose.material3.Icon import androidx.compose.material3.Text @@ -33,20 +30,16 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.shadow import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Shadow -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign -import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties -import androidx.compose.ui.zIndex import com.odweta.solon.ui.theme.PastelGreen import com.odweta.solon.ui.theme.PastelGreenTransparent import com.odweta.solon.ui.theme.PastelOrange @@ -57,7 +50,6 @@ import com.odweta.solon.ui.theme.PastelRed import com.odweta.solon.ui.theme.PastelRedTransparent import com.odweta.solon.ui.theme.PastelYellow import com.odweta.solon.ui.theme.PastelYellowTransparent -import java.time.LocalDate import java.time.format.DateTimeFormatter var showNewMarksDialog by mutableStateOf(false) @@ -71,39 +63,33 @@ enum class MarksDepthLevel { @Composable fun MarksScreen() { - when (global.marksDepthLevel) { - MarksDepthLevel.All -> MarksAll() - MarksDepthLevel.Subject -> MarksSubject() - MarksDepthLevel.Detail -> MarksDetail() + Animate(global.marksDepthLevel) { targetDepthLevel -> + when (targetDepthLevel) { + MarksDepthLevel.All -> MarksAll() + MarksDepthLevel.Subject -> MarksSubject() + MarksDepthLevel.Detail -> MarksDetail() + } } - NewMarksDialog() - FinalMarksDialog() } @Composable -fun NewMarksDialog() { - if (showNewMarksDialog) { - val ss = rememberScrollState() +fun NewMarksScreen() { + BackHandler { global.currentScreenElement = ScreenElement.Marks } - Dialog( - onDismissRequest = { showNewMarksDialog = false }, - properties = DialogProperties( - dismissOnBackPress = true, - dismissOnClickOutside = true - ) + val ss = rememberScrollState() + Column( + horizontalAlignment = Alignment.CenterHorizontally + ) { + Row( + verticalAlignment = Alignment.CenterVertically ) { - Column( - Modifier - .verticalScroll(ss) - .padding(vertical = 10.dp), - horizontalAlignment = Alignment.CenterHorizontally + backButtonFactory.get(BackButtonType.MarksAll)() + + Box( + modifier = Modifier.weight(1f), + contentAlignment = Alignment.Center ) { - Text( - "Nové známky", - color = Color.White, - fontWeight = FontWeight.Bold, - fontSize = 30.sp, - textAlign = TextAlign.Center, + Row( modifier = Modifier .background( color = Color.Black, @@ -114,75 +100,92 @@ fun NewMarksDialog() { color = PastelYellow, width = global.dimens.borderWidth ) - .padding(10.dp) - ) - Spacer(Modifier.height(10.dp)) - for ((k, v) in global.newMarks) { - if (v.size > 0) { - Column( - modifier = Modifier - .padding(10.dp) - .border( - shape = RoundedCornerShape(global.dimens.roundedCorner), - color = PastelYellow, - width = global.dimens.borderWidth - ) - .background( - Color.Black, - shape = RoundedCornerShape(global.dimens.roundedCorner) - ) - .fillMaxWidth(), - horizontalAlignment = Alignment.CenterHorizontally - ) { - Text( - k, - color = Color.White, - modifier = Modifier.padding(10.dp), - fontWeight = FontWeight.Bold, - fontSize = 30.sp + .height(70.dp) + .padding(10.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Text( + "Nové známky", + color = Color.White, + fontWeight = FontWeight.Bold, + fontSize = 30.sp, + textAlign = TextAlign.Center + ) + } + } + } + + Spacer(Modifier.height(10.dp)) + + Column( + modifier = Modifier.verticalScroll(ss) + ) { + for ((k, v) in global.newMarks) { + if (v.size > 0) { + Column( + modifier = Modifier + .padding(horizontal = 10.dp) + .padding(bottom = 10.dp) + .border( + shape = RoundedCornerShape(global.dimens.roundedCorner), + color = PastelYellow, + width = global.dimens.borderWidth ) - for (i in v) { - Row( - Modifier.padding(10.dp), - verticalAlignment = Alignment.CenterVertically + .background( + Color.Black, + shape = RoundedCornerShape(global.dimens.roundedCorner) + ) + .fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Text( + k, + color = Color.White, + modifier = Modifier.padding(10.dp), + fontWeight = FontWeight.Bold, + fontSize = 30.sp + ) + for (i in v) { + Row( + Modifier.padding(10.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Text( + i.theme, + color = Color.White, + modifier = Modifier + .padding(end = 5.dp, top = 5.dp) + .weight(1f) + ) + Column( + horizontalAlignment = Alignment.End ) { Text( - i.theme, + i.grade + " * " + i.weight, color = Color.White, modifier = Modifier - .padding(end = 5.dp, top = 5.dp) - .weight(1f) - ) - Column( - horizontalAlignment = Alignment.End - ) { - Text( - i.grade + " * " + i.weight, - color = Color.White, - modifier = Modifier - .background( - color = getAvgColor(i.grade, true), - shape = RoundedCornerShape(global.dimens.roundedCorner) - ) - .padding(5.dp), - style = TextStyle( - shadow = Shadow( - color = Color.Black, - offset = Offset(4f, 4f), - blurRadius = 8f - ) + .background( + color = getAvgColor(i.grade, true), + shape = RoundedCornerShape(global.dimens.roundedCorner) + ) + .padding(5.dp), + style = TextStyle( + shadow = Shadow( + color = Color.Black, + offset = Offset(4f, 4f), + blurRadius = 8f ) ) - Text( - i.editDate.format( - DateTimeFormatter.ofPattern("dd. MM. yyyy") - ), - color = Color.White - ) - } + ) + Text( + i.editDate.format( + DateTimeFormatter.ofPattern("dd. MM. yyyy") + ), + color = Color.White + ) } - HorizontalLine() } + HorizontalLine() } } } @@ -192,29 +195,23 @@ fun NewMarksDialog() { } @Composable -fun FinalMarksDialog() { - if (showFinalMarksDialog) { - val ss = rememberScrollState() +fun FinalMarksScreen() { + BackHandler { global.currentScreenElement = ScreenElement.Marks } - Dialog( - onDismissRequest = { showFinalMarksDialog = false }, - properties = DialogProperties( - dismissOnBackPress = true, - dismissOnClickOutside = true - ) + val ss = rememberScrollState() + Column( + horizontalAlignment = Alignment.CenterHorizontally + ) { + Row( + verticalAlignment = Alignment.CenterVertically ) { - Column( - Modifier - .verticalScroll(ss) - .padding(vertical = 10.dp), - horizontalAlignment = Alignment.CenterHorizontally + backButtonFactory.get(BackButtonType.MarksAll)() + + Box( + modifier = Modifier.weight(1f), + contentAlignment = Alignment.Center ) { - Text( - "Uzavřené známky", - color = Color.White, - fontWeight = FontWeight.Bold, - fontSize = 30.sp, - textAlign = TextAlign.Center, + Row( modifier = Modifier .background( color = Color.Black, @@ -225,10 +222,35 @@ fun FinalMarksDialog() { color = PastelYellow, width = global.dimens.borderWidth ) - .padding(10.dp) - ) + .height(70.dp) + .padding(10.dp), + verticalAlignment = Alignment.CenterVertically + ) { + Text( + "Uzavřené známky", + color = Color.White, + fontWeight = FontWeight.Bold, + fontSize = 30.sp, + textAlign = TextAlign.Center + ) + } } } + + Spacer(Modifier.height(10.dp)) + + Column( + modifier = Modifier.verticalScroll(ss) + ) { + Text("test", color = Color.White) + Text("test", color = Color.White) + Text("test", color = Color.White) + Text("test", color = Color.White) + Text("test", color = Color.White) + Text("test", color = Color.White) + Text("test", color = Color.White) + Text("test", color = Color.White) + } } } @@ -420,12 +442,12 @@ fun MarksAll() { Box(Modifier.fillMaxSize()) { Row( - modifier = Modifier.align(Alignment.BottomCenter) + modifier = Modifier + .align(Alignment.BottomCenter) ) { FloatingActionButton( - onClick = { showNewMarksDialog = true }, + onClick = { global.currentScreenElement = ScreenElement.NewMarks }, modifier = Modifier -// .size(40.dp) .padding(10.dp) .background( Color.Black, @@ -442,9 +464,8 @@ fun MarksAll() { } FloatingActionButton( - onClick = { showFinalMarksDialog = true }, + onClick = { global.currentScreenElement = ScreenElement.FinalMarks }, modifier = Modifier -// .size(40.dp) .padding(10.dp) .background( Color.Black, diff --git a/mobile/app/src/main/java/com/odweta/solon/Parsing.kt b/mobile/app/src/main/java/com/odweta/solon/Parsing.kt index f1d5f6b..a848d34 100644 --- a/mobile/app/src/main/java/com/odweta/solon/Parsing.kt +++ b/mobile/app/src/main/java/com/odweta/solon/Parsing.kt @@ -408,6 +408,16 @@ class Parsing { for (i in 0..