navbar working

This commit is contained in:
Odweta
2024-12-22 10:06:56 +01:00
parent ac1c1dfa26
commit eb8f4796a9
6 changed files with 49 additions and 48 deletions
@@ -66,8 +66,8 @@ object BackButtonFactory: BackButtonFactoryInterface {
override fun get(type: BackButtonType): @Composable () -> Unit { override fun get(type: BackButtonType): @Composable () -> Unit {
return when (type) { return when (type) {
BackButtonType.Menu -> { { BackButton({ isShowing = IsShowing.Menu }) } } BackButtonType.Menu -> { { BackButton({ isShowing = IsShowing.Menu }) } }
BackButtonType.MarksAll -> { { BackButton({ marksShow = MarksShow.All }) } } BackButtonType.MarksAll -> { { BackButton({ global.marksDepthLevel = MarksDepthLevel.All }) } }
BackButtonType.MarksSubject -> { { BackButton({ marksShow = MarksShow.Subject }) } } BackButtonType.MarksSubject -> { { BackButton({ global.marksDepthLevel = MarksDepthLevel.Subject }) } }
} }
} }
} }
@@ -296,6 +296,10 @@ class Global {
var isAPISetUp by mutableStateOf(false) var isAPISetUp by mutableStateOf(false)
var launched by mutableStateOf(false) var launched by mutableStateOf(false)
var refreshed by mutableStateOf(false) var refreshed by mutableStateOf(false)
var marksDepthLevel by mutableStateOf(MarksDepthLevel.All)
var subjectToShow by mutableStateOf("")
var markToShow by mutableStateOf(Mark())
inner class FilePaths { inner class FilePaths {
val accountData: String = "account_data.txt" val accountData: String = "account_data.txt"
@@ -46,22 +46,18 @@ import com.odweta.solon.ui.theme.PastelYellowTransparent
import java.time.LocalDate import java.time.LocalDate
import java.time.format.DateTimeFormatter import java.time.format.DateTimeFormatter
enum class MarksShow { enum class MarksDepthLevel {
All, All,
Subject, Subject,
Detail Detail
} }
var marksShow by mutableStateOf(MarksShow.All)
private var subjectToShow: String = ""
private var markToShow: Mark = Mark()
@Composable @Composable
fun MarksScreen() { fun MarksScreen() {
when (marksShow) { when (global.marksDepthLevel) {
MarksShow.All -> MarksAll() MarksDepthLevel.All -> MarksAll()
MarksShow.Subject -> MarksSubject() MarksDepthLevel.Subject -> MarksSubject()
MarksShow.Detail -> MarksDetail() MarksDepthLevel.Detail -> MarksDetail()
} }
} }
@@ -142,8 +138,8 @@ fun MarksAll() {
shape = RoundedCornerShape(roundedCornerDimen) shape = RoundedCornerShape(roundedCornerDimen)
) )
.clickable { .clickable {
marksShow = MarksShow.Subject global.marksDepthLevel = MarksDepthLevel.Subject
subjectToShow = subject global.subjectToShow = subject
} }
} else { } else {
Modifier Modifier
@@ -154,8 +150,8 @@ fun MarksAll() {
shape = RoundedCornerShape(roundedCornerDimen) shape = RoundedCornerShape(roundedCornerDimen)
) )
.clickable { .clickable {
marksShow = MarksShow.Subject global.marksDepthLevel = MarksDepthLevel.Subject
subjectToShow = subject global.subjectToShow = subject
} }
} }
@@ -265,7 +261,7 @@ fun MarksAll() {
fun MarksSubject() { fun MarksSubject() {
// handle the back gesture (back swipe form side or back button on bottom android navbar) // handle the back gesture (back swipe form side or back button on bottom android navbar)
BackHandler { BackHandler {
marksShow = MarksShow.All global.marksDepthLevel = MarksDepthLevel.All
} }
val scrollState = rememberScrollState() val scrollState = rememberScrollState()
@@ -291,7 +287,7 @@ fun MarksSubject() {
.border( .border(
width = 5.dp, width = 5.dp,
color = getAvgColor( color = getAvgColor(
Util.avg(marks[subjectToShow]!!), Util.avg(marks[global.subjectToShow]!!),
true true
), ),
shape = RoundedCornerShape(roundedCornerDimen) shape = RoundedCornerShape(roundedCornerDimen)
@@ -300,7 +296,7 @@ fun MarksSubject() {
Color.Black Color.Black
} else { } else {
getAvgColor( getAvgColor(
Util.avg(marks[subjectToShow]!!) Util.avg(marks[global.subjectToShow]!!)
) )
}, },
shape = RoundedCornerShape(roundedCornerDimen) shape = RoundedCornerShape(roundedCornerDimen)
@@ -308,7 +304,7 @@ fun MarksSubject() {
.padding(vertical = 15.dp), .padding(vertical = 15.dp),
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
val currAvg = Util.avg(marks[subjectToShow]!!).replace(".", ",") val currAvg = Util.avg(marks[global.subjectToShow]!!).replace(".", ",")
var textToShow = currAvg var textToShow = currAvg
if (currAvg.length == 3 && currAvg[2] == '0') { if (currAvg.length == 3 && currAvg[2] == '0') {
textToShow = currAvg[0].toString() textToShow = currAvg[0].toString()
@@ -325,7 +321,7 @@ fun MarksSubject() {
Spacer(modifier = Modifier.height(20.dp)) Spacer(modifier = Modifier.height(20.dp))
Text( Text(
text = subjectNameMap[subjectToShow]!!, text = subjectNameMap[global.subjectToShow]!!,
color = Color.White, color = Color.White,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
fontSize = 30.sp, fontSize = 30.sp,
@@ -349,7 +345,7 @@ fun MarksSubject() {
Spacer(modifier = Modifier.height(20.dp)) Spacer(modifier = Modifier.height(20.dp))
Column(modifier = Modifier.verticalScroll(scrollState)) { Column(modifier = Modifier.verticalScroll(scrollState)) {
for ((i, mark) in marks[subjectToShow]!!.withIndex()) { for ((i, mark) in marks[global.subjectToShow]!!.withIndex()) {
if (i > 0) { if (i > 0) {
Spacer(modifier = Modifier.height(10.dp)) Spacer(modifier = Modifier.height(10.dp))
} }
@@ -371,8 +367,8 @@ fun MarksSubject() {
) )
.padding(vertical = 10.dp) .padding(vertical = 10.dp)
.clickable { .clickable {
markToShow = mark global.markToShow = mark
marksShow = MarksShow.Detail global.marksDepthLevel = MarksDepthLevel.Detail
} }
) { ) {
Box( Box(
@@ -424,9 +420,7 @@ fun MarksSubject() {
@Composable @Composable
fun MarksDetail() { fun MarksDetail() {
// handle the back gesture (back swipe form side or back button on bottom android navbar) // handle the back gesture (back swipe form side or back button on bottom android navbar)
BackHandler { BackHandler { global.marksDepthLevel = MarksDepthLevel.Subject }
marksShow = MarksShow.Subject
}
val scrollState = rememberScrollState() val scrollState = rememberScrollState()
@@ -452,7 +446,7 @@ fun MarksDetail() {
.border( .border(
width = borderWidthDimen, width = borderWidthDimen,
color = getAvgColor( color = getAvgColor(
Util.avg(mutableListOf(markToShow)), Util.avg(mutableListOf(global.markToShow)),
true true
), ),
shape = RoundedCornerShape(roundedCornerDimen) shape = RoundedCornerShape(roundedCornerDimen)
@@ -462,7 +456,7 @@ fun MarksDetail() {
Color.Black Color.Black
} else { } else {
getAvgColor( getAvgColor(
Util.avg(mutableListOf(markToShow)) Util.avg(mutableListOf(global.markToShow))
) )
} }
) )
@@ -470,7 +464,7 @@ fun MarksDetail() {
contentAlignment = Alignment.Center contentAlignment = Alignment.Center
) { ) {
Text( Text(
text = markToShow.grade, text = global.markToShow.grade,
color = Color.White, color = Color.White,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
fontSize = 25.sp fontSize = 25.sp
@@ -482,7 +476,7 @@ fun MarksDetail() {
Row { Row {
Text( Text(
text = markToShow.theme, text = global.markToShow.theme,
color = Color.White, color = Color.White,
textAlign = TextAlign.Center, textAlign = TextAlign.Center,
fontSize = 30.sp, fontSize = 30.sp,
@@ -540,7 +534,7 @@ fun MarksDetail() {
contentAlignment = Alignment.CenterEnd contentAlignment = Alignment.CenterEnd
) { ) {
Text( Text(
text = markToShow.weight.replace(".", ","), text = global.markToShow.weight.replace(".", ","),
color = Color.White, color = Color.White,
fontSize = 20.sp fontSize = 20.sp
) )
@@ -582,7 +576,7 @@ fun MarksDetail() {
.weight(1f), .weight(1f),
contentAlignment = Alignment.CenterEnd contentAlignment = Alignment.CenterEnd
) { ) {
val rawDate: String = markToShow.date.split("T")[0] val rawDate: String = global.markToShow.date.split("T")[0]
val year = rawDate.split("-")[0] val year = rawDate.split("-")[0]
val month = rawDate.split("-")[1] val month = rawDate.split("-")[1]
val day = rawDate.split("-")[2] val day = rawDate.split("-")[2]
@@ -4,7 +4,6 @@ import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.width
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
@@ -17,8 +16,6 @@ import androidx.compose.material3.Icon
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.MutableState import androidx.compose.runtime.MutableState
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
@@ -26,9 +23,6 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.painterResource
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import com.odweta.solon.ui.theme.PastelYellow import com.odweta.solon.ui.theme.PastelYellow
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
private var timetableColor: MutableState<Color> = mutableStateOf(PastelYellow) private var timetableColor: MutableState<Color> = mutableStateOf(PastelYellow)
private var marksColor: MutableState<Color> = mutableStateOf(Color.White) private var marksColor: MutableState<Color> = mutableStateOf(Color.White)
@@ -73,6 +67,7 @@ fun NavbarScreen() {
timetableColor.value = PastelYellow timetableColor.value = PastelYellow
marksColor.value = Color.White marksColor.value = Color.White
menuColor.value = Color.White menuColor.value = Color.White
global.currentScreenElement = ScreenElement.Timetable
}, },
colors = ButtonDefaults.buttonColors( colors = ButtonDefaults.buttonColors(
contentColor = timetableColor.value, contentColor = timetableColor.value,
@@ -94,7 +89,8 @@ fun NavbarScreen() {
timetableColor.value = Color.White timetableColor.value = Color.White
marksColor.value = PastelYellow marksColor.value = PastelYellow
menuColor.value = Color.White menuColor.value = Color.White
marksShow = MarksShow.All global.currentScreenElement = ScreenElement.Marks
global.marksDepthLevel = MarksDepthLevel.All
}, },
colors = ButtonDefaults.buttonColors( colors = ButtonDefaults.buttonColors(
contentColor = marksColor.value, contentColor = marksColor.value,
@@ -116,6 +112,7 @@ fun NavbarScreen() {
timetableColor.value = Color.White timetableColor.value = Color.White
marksColor.value = Color.White marksColor.value = Color.White
menuColor.value = PastelYellow menuColor.value = PastelYellow
global.currentScreenElement = ScreenElement.Menu
}, },
colors = ButtonDefaults.buttonColors( colors = ButtonDefaults.buttonColors(
contentColor = menuColor.value, contentColor = menuColor.value,
@@ -531,9 +531,15 @@ private fun DayScreen(day: Day) {
}) })
if ( if (
(global.lectureNotes[lectureId] != null && global.lectureNotes[lectureId]?.note?.value != "") || (global.lectureNotes[global.selectedLecture] != null &&
(global.lectureNotes[lectureId] != null && global.lectureNotes[lectureId]?.type?.value != LectureNoteType.Normal) && global.lectureNotes[global.selectedLecture]
(global.lectureNotes[lectureId] != null && global.lectureNotes[lectureId]?.type?.value != LectureNoteType.Other) ?.note?.value != "") ||
(global.lectureNotes[global.selectedLecture] != null &&
global.lectureNotes[global.selectedLecture]
?.type?.value != LectureNoteType.Normal) &&
(global.lectureNotes[global.selectedLecture] != null &&
global.lectureNotes[global.selectedLecture]
?.type?.value != LectureNoteType.Other)
) { ) {
Icon( Icon(
modifier = Modifier.padding(start = 3.dp, top = 1.dp), modifier = Modifier.padding(start = 3.dp, top = 1.dp),
@@ -80,12 +80,12 @@ object StatusFactory: StatusFactoryInterface {
CoroutineScope(Dispatchers.IO).launch { CoroutineScope(Dispatchers.IO).launch {
global.refreshed = false global.refreshed = false
val anim = listOf( val anim = listOf(
"Přihlašování", "Načítání nových dat",
"Přihlašování.", "Načítání nových dat.",
"Přihlašování..", "Načítání nových dat..",
"Přihlašování...", "Načítání nových dat...",
"Přihlašování..", "Načítání nových dat..",
"Přihlašování." "Načítání nových dat."
) )
var i = 0 var i = 0
while (!global.refreshed) { while (!global.refreshed) {