diff --git a/mobile/app/src/main/java/com/odweta/solon/About.kt b/mobile/app/src/main/java/com/odweta/solon/About.kt index 0ddaa67..356e5b8 100644 --- a/mobile/app/src/main/java/com/odweta/solon/About.kt +++ b/mobile/app/src/main/java/com/odweta/solon/About.kt @@ -1,5 +1,6 @@ package com.odweta.solon +import androidx.activity.compose.BackHandler import androidx.compose.foundation.Image import androidx.compose.foundation.border import androidx.compose.foundation.clickable @@ -36,6 +37,11 @@ import java.time.format.TextStyle @Composable fun AboutScreen(modifier: Modifier = Modifier) { + // handle the back gesture (back swipe form side or back button on bottom android navbar) + BackHandler { + isShowing.value = IsShowing.Menu + } + Column( modifier = Modifier .fillMaxSize(), @@ -60,13 +66,13 @@ fun AboutScreen(modifier: Modifier = Modifier) { shape = RoundedCornerShape(roundedCornerDimen), color = PastelYellow ) - .width(100.dp) - .height(100.dp) + .width(70.dp) + .height(70.dp) ) { Icon( - imageVector = Icons.Default.ArrowBackIosNew, // Replace with your desired icon + imageVector = Icons.Default.ArrowBackIosNew, contentDescription = "Back icon", - modifier = Modifier.size(35.dp) // Adjust size if needed + modifier = Modifier.size(40.dp) ) } } 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 795dcf1..25de4de 100644 --- a/mobile/app/src/main/java/com/odweta/solon/MainActivity.kt +++ b/mobile/app/src/main/java/com/odweta/solon/MainActivity.kt @@ -15,6 +15,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext +import androidx.core.view.WindowCompat import com.odweta.solon.ui.theme.SolonTheme import kotlin.math.sign 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 07907c0..70aa2d8 100644 --- a/mobile/app/src/main/java/com/odweta/solon/Marks.kt +++ b/mobile/app/src/main/java/com/odweta/solon/Marks.kt @@ -1,5 +1,6 @@ package com.odweta.solon +import androidx.activity.compose.BackHandler import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.clickable @@ -37,6 +38,8 @@ import androidx.compose.ui.unit.sp import com.odweta.solon.ui.theme.PastelGreen import com.odweta.solon.ui.theme.PastelGreenTransparent import com.odweta.solon.ui.theme.PastelOrange +import com.odweta.solon.ui.theme.PastelOrangeDark +import com.odweta.solon.ui.theme.PastelOrangeDarkTransparent import com.odweta.solon.ui.theme.PastelOrangeTransparent import com.odweta.solon.ui.theme.PastelRed import com.odweta.solon.ui.theme.PastelRedTransparent @@ -63,25 +66,31 @@ fun MarksScreen() { } private fun getAvgColor(avg: String, isBorder: Boolean = false): Color { - val aux = avg.replace(",", ".").toFloat().toInt() - return if (aux in 1..<2) { + val aux = avg.replace(",", ".").toFloat() + return if (aux in 1f..<1.5f) { if (isBorder) { PastelGreen } else { PastelGreenTransparent } - } else if (aux in 2..<3) { + } else if (aux in 1.5f..<2.5f) { if (isBorder) { PastelYellow } else { PastelYellowTransparent } - } else if (aux in 3..<4) { + } else if (aux in 2.5f..<3.5f) { if (isBorder) { PastelOrange } else { PastelOrangeTransparent } + } else if (aux in 3.5f..<4.5f) { + if (isBorder) { + PastelOrangeDark + } else { + PastelOrangeDarkTransparent + } } else { if (isBorder) { PastelRed @@ -119,7 +128,7 @@ fun MarksAll() { Row( modifier = Modifier .fillMaxWidth() - .height(100.dp) + .height(70.dp) .background( color = getAvgColor(Util.avg(markList)), // decide on the color (transparent) shape = RoundedCornerShape(roundedCornerDimen) @@ -131,7 +140,7 @@ fun MarksAll() { ) { Row( modifier = Modifier - .width(210.dp) + .width(150.dp) .fillMaxHeight() .background( color = getAvgColor(Util.avg(markList)), // decide on the color (not transparent) @@ -142,12 +151,12 @@ fun MarksAll() { ) { Text( text = subject.uppercase(), - fontSize = 35.sp, + fontSize = 30.sp, color = Color.White, fontWeight = FontWeight.Bold, textAlign = TextAlign.Center, modifier = Modifier - .width(100.dp) + .width(70.dp) ) Box( @@ -159,18 +168,19 @@ fun MarksAll() { Text( text = Util.avg(markList).replace(".", ","), - fontSize = 30.sp, + fontSize = 28.sp, color = Color.White, textAlign = TextAlign.Center, modifier = Modifier - .width(100.dp) + .width(70.dp) ) } Box( modifier = Modifier .weight(1f) - .fillMaxHeight(), + .fillMaxHeight() + .padding(horizontal = 10.dp), contentAlignment = Alignment.Center ) { Text( @@ -186,6 +196,11 @@ fun MarksAll() { @Composable fun MarksSubject() { + // handle the back gesture (back swipe form side or back button on bottom android navbar) + BackHandler { + marksShow.value = MarksShow.All + } + val scrollState = rememberScrollState() Column( @@ -195,33 +210,67 @@ fun MarksSubject() { .fillMaxWidth() .padding(horizontal = 5.dp) ) { - Button( - onClick = { - marksShow.value = MarksShow.All - }, - colors = ButtonDefaults.buttonColors( - contentColor = Color.White, - containerColor = Color.Black - ), - modifier = Modifier - .border( - width = 5.dp, - shape = RoundedCornerShape(roundedCornerDimen), - color = PastelYellow - ) - .width(100.dp) - .height(100.dp) + Row( + modifier = Modifier.fillMaxWidth() ) { - Icon( - imageVector = Icons.Default.ArrowBackIosNew, // Replace with your desired icon - contentDescription = "Back icon", - modifier = Modifier.size(35.dp) // Adjust size if needed - ) + Button( + onClick = { + marksShow.value = MarksShow.All + }, + colors = ButtonDefaults.buttonColors( + contentColor = Color.White, + containerColor = Color.Black + ), + modifier = Modifier + .border( + width = 5.dp, + shape = RoundedCornerShape(roundedCornerDimen), + color = PastelYellow + ) + .width(70.dp) + .height(70.dp) + ) { + Icon( + imageVector = Icons.Default.ArrowBackIosNew, + contentDescription = "Back icon", + modifier = Modifier.size(40.dp) + ) + } + + Box(modifier = Modifier.weight(1f)) + + Box( + modifier = Modifier + .width(70.dp) + .height(70.dp) + .border( + width = 5.dp, + color = getAvgColor( + Util.avg(marks[subjectToShow]!!), + true + ), + shape = RoundedCornerShape(roundedCornerDimen) + ) + .background( + getAvgColor( + Util.avg(marks[subjectToShow]!!) + ) + ) + .padding(vertical = 15.dp), + contentAlignment = Alignment.Center + ) { + Text( + text = Util.avg(marks[subjectToShow]!!).replace(".", ","), + color = Color.White, + textAlign = TextAlign.Center, + fontSize = 25.sp + ) // average + } } Spacer(modifier = Modifier.height(20.dp)) - Box(modifier = Modifier.height(100.dp)) { + //Box(modifier = Modifier.height(100.dp)) { Text( text = subjectNameMap[subjectToShow]!!, color = Color.White, @@ -237,36 +286,7 @@ fun MarksSubject() { .background(PastelYellowTransparent) .padding(vertical = 20.dp) ) // subject - } - - Box( - modifier = Modifier.fillMaxWidth(), - contentAlignment = Alignment.Center - ) { - Text( - text = Util.avg(marks[subjectToShow]!!).replace(".", ","), - color = Color.White, - textAlign = TextAlign.Center, - fontSize = 30.sp, - modifier = Modifier - .width(100.dp) - .height(100.dp) - .border( - width = 5.dp, - color = getAvgColor( - Util.avg(marks[subjectToShow]!!), - true - ), - shape = RoundedCornerShape(roundedCornerDimen) - ) - .background( - getAvgColor( - Util.avg(marks[subjectToShow]!!) - ) - ) - .padding(vertical = 32.5.dp) - ) // average - } + //} Spacer(modifier = Modifier.height(20.dp)) @@ -284,7 +304,7 @@ fun MarksSubject() { color = getAvgColor(mark.grade), shape = RoundedCornerShape(roundedCornerDimen) ) - .padding(vertical = 20.dp) + .padding(vertical = 10.dp) .clickable { markToShow = mark marksShow.value = MarksShow.Detail @@ -292,7 +312,7 @@ fun MarksSubject() { ) { Box( modifier = Modifier - .width(100.dp) + .width(70.dp) .align(Alignment.CenterVertically), contentAlignment = Alignment.Center ) { @@ -312,7 +332,7 @@ fun MarksSubject() { Text( text = mark.theme, color = Color.White, - fontSize = 23.sp + fontSize = 20.sp ) // theme } } @@ -323,6 +343,11 @@ fun MarksSubject() { @Composable fun MarksDetail() { + // handle the back gesture (back swipe form side or back button on bottom android navbar) + BackHandler { + marksShow.value = MarksShow.Subject + } + val scrollState = rememberScrollState() Column( @@ -333,34 +358,68 @@ fun MarksDetail() { .padding(horizontal = 5.dp) .verticalScroll(scrollState) ) { - Button( - onClick = { - marksShow.value = MarksShow.Subject - }, - colors = ButtonDefaults.buttonColors( - contentColor = Color.White, - containerColor = Color.Black - ), - modifier = Modifier - .border( - width = 5.dp, - shape = RoundedCornerShape(roundedCornerDimen), - color = PastelYellow - ) - .width(100.dp) - .height(100.dp) + Row( + modifier = Modifier.fillMaxWidth() ) { - Icon( - imageVector = Icons.Default.ArrowBackIosNew, // Replace with your desired icon - contentDescription = "Back icon", - modifier = Modifier.size(35.dp) // Adjust size if needed - ) + Button( + onClick = { + marksShow.value = MarksShow.Subject + }, + colors = ButtonDefaults.buttonColors( + contentColor = Color.White, + containerColor = Color.Black + ), + modifier = Modifier + .border( + width = 5.dp, + shape = RoundedCornerShape(roundedCornerDimen), + color = PastelYellow + ) + .width(70.dp) + .height(70.dp) + ) { + Icon( + imageVector = Icons.Default.ArrowBackIosNew, + contentDescription = "Back icon", + modifier = Modifier.size(40.dp) + ) + } + + Box(modifier = Modifier.weight(1f)) + + Box( + modifier = Modifier + .width(70.dp) + .height(70.dp) + .border( + width = 5.dp, + color = getAvgColor( + Util.avg(marks[subjectToShow]!!), + true + ), + shape = RoundedCornerShape(roundedCornerDimen) + ) + .background( + getAvgColor( + Util.avg(marks[subjectToShow]!!) + ) + ) + .padding(vertical = 15.dp), + contentAlignment = Alignment.Center + ) { + Text( + text = markToShow.grade, + color = Color.White, + textAlign = TextAlign.Center, + fontSize = 25.sp + ) // average + } } Spacer(modifier = Modifier.height(20.dp)) Row { - Box(modifier = Modifier.height(100.dp)) { + //Box(modifier = Modifier.height(70.dp)) { Text( text = markToShow.theme, color = Color.White, @@ -376,40 +435,9 @@ fun MarksDetail() { .background(PastelYellowTransparent) .padding(vertical = 20.dp) ) // description - } + //} } // description - Row { - Box( - modifier = Modifier.fillMaxWidth(), - contentAlignment = Alignment.Center - ) { - Text( - text = markToShow.grade, - color = Color.White, - textAlign = TextAlign.Center, - fontSize = 35.sp, - modifier = Modifier - .width(100.dp) - .height(100.dp) - .border( - width = 5.dp, - color = getAvgColor( - Util.avg(mutableListOf(markToShow)), - true - ), - shape = RoundedCornerShape(roundedCornerDimen) - ) - .background( - getAvgColor( - Util.avg(mutableListOf(markToShow)) - ) - ) - .padding(vertical = 32.5.dp) - ) // average - } - } // grade - Spacer(modifier = Modifier.height(20.dp)) Row( @@ -431,7 +459,7 @@ fun MarksDetail() { Text( text = "Váha:", color = Color.White, - fontSize = 30.sp + fontSize = 20.sp ) } @@ -444,7 +472,7 @@ fun MarksDetail() { Text( text = markToShow.weight.replace(".", ","), color = Color.White, - fontSize = 23.sp + fontSize = 20.sp ) } } // weight @@ -470,7 +498,7 @@ fun MarksDetail() { Text( text = "Datum:", color = Color.White, - fontSize = 30.sp + fontSize = 20.sp ) } @@ -489,7 +517,7 @@ fun MarksDetail() { Text( text = date, color = Color.White, - fontSize = 23.sp + fontSize = 20.sp ) } } // date diff --git a/mobile/app/src/main/java/com/odweta/solon/Menu.kt b/mobile/app/src/main/java/com/odweta/solon/Menu.kt index 06fd120..1894e6e 100644 --- a/mobile/app/src/main/java/com/odweta/solon/Menu.kt +++ b/mobile/app/src/main/java/com/odweta/solon/Menu.kt @@ -112,7 +112,7 @@ fun MenuScreen(modifier: Modifier = Modifier) { Text("Ne") } } - ) // TODO: THEME DIALOG + ) } Button(onClick = { diff --git a/mobile/app/src/main/java/com/odweta/solon/SignIn.kt b/mobile/app/src/main/java/com/odweta/solon/SignIn.kt index 10466d9..fc47b3e 100644 --- a/mobile/app/src/main/java/com/odweta/solon/SignIn.kt +++ b/mobile/app/src/main/java/com/odweta/solon/SignIn.kt @@ -2,20 +2,20 @@ package com.odweta.solon import android.content.Context import android.widget.Toast +import androidx.activity.compose.BackHandler import androidx.compose.foundation.Image import androidx.compose.foundation.background import androidx.compose.foundation.border import androidx.compose.foundation.layout.Arrangement -import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.imePadding import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.width -import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.RoundedCornerShape -import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Visibility import androidx.compose.material.icons.filled.VisibilityOff @@ -106,112 +106,112 @@ fun signInButtonCallback(ctx: Context, coscope: CoroutineScope, buttonText: Stri } } -@OptIn(ExperimentalMaterial3Api::class) @Composable fun SignInScreen() { + // handle the back gesture (back swipe form side or back button on bottom android navbar) + BackHandler { + screenToShow.value = Screen.Main + } + var usernameText by remember { mutableStateOf("") } var passwordText by remember { mutableStateOf("") } val ctx = LocalContext.current val coscope = rememberCoroutineScope() var isPasswordVisible by remember { mutableStateOf(false) } // State for visibility toggle val visualTransformation = if (isPasswordVisible) VisualTransformation.None else PasswordVisualTransformation() - val scrollState = rememberScrollState() - Box( - modifier = Modifier.fillMaxSize(), - contentAlignment = Alignment.Center + Column( + modifier = Modifier + .fillMaxWidth() + .background(Color.Black) + .imePadding(), + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.Center ) { - Column( + // TODO: squishable sign in layout + + Image( + painter = painterResource(R.drawable.solon_just_yellow), + contentDescription = "Solon logo", + modifier = Modifier.size(200.dp) + ) + + TextField( + value = usernameText, + onValueChange = { input -> usernameText = input }, modifier = Modifier - .fillMaxSize() - .background(Color.Black) - .verticalScroll(scrollState), - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.Center - ) { - Image( - painter = painterResource(R.drawable.solon_just_yellow), - contentDescription = "Solon logo", - modifier = Modifier.size(230.dp) - ) + .border(width = 5.dp, color = PastelYellow, shape = RoundedCornerShape( + roundedCornerDimen)) + .width(230.dp), + colors = TextFieldDefaults.colors( + focusedTextColor = Color.White, // White text + unfocusedTextColor = Color.White, // White text when not focused + focusedContainerColor = Color.Black, // Black background when focused + unfocusedContainerColor = Color.Black, // Black background when not focused + cursorColor = PastelYellow, // Yellow cursor + focusedIndicatorColor = Color.Black, // Yellow border when focused + unfocusedIndicatorColor = Color.Black // Yellow border when not focused + ), + ) - TextField( - value = usernameText, - onValueChange = { input -> usernameText = input }, - modifier = Modifier - .border(width = 5.dp, color = PastelYellow, shape = RoundedCornerShape( - roundedCornerDimen)) - .width(230.dp), - colors = TextFieldDefaults.colors( - focusedTextColor = Color.White, // White text - unfocusedTextColor = Color.White, // White text when not focused - focusedContainerColor = Color.Black, // Black background when focused - unfocusedContainerColor = Color.Black, // Black background when not focused - cursorColor = PastelYellow, // Yellow cursor - focusedIndicatorColor = Color.Black, // Yellow border when focused - unfocusedIndicatorColor = Color.Black // Yellow border when not focused - ), - ) + Spacer(modifier = Modifier.height(20.dp)) - Spacer(modifier = Modifier.height(20.dp)) - - TextField( - value = passwordText, - onValueChange = { input -> passwordText = input }, - visualTransformation = visualTransformation, - modifier = Modifier - .width(230.dp) - .border( - width = 5.dp, - color = PastelYellow, - shape = RoundedCornerShape( - roundedCornerDimen - ) - ), - colors = TextFieldDefaults.colors( - focusedTextColor = Color.White, // White text - unfocusedTextColor = Color.White, // White text when not focused - focusedContainerColor = Color.Black, // Black background when focused - unfocusedContainerColor = Color.Black, // Black background when not focused - cursorColor = PastelYellow, // Yellow cursor - focusedIndicatorColor = Color.Black, // Yellow border when focused - unfocusedIndicatorColor = Color.Black // Yellow border when not focused - ), - trailingIcon = { - // Toggle button for showing/hiding password - IconButton(onClick = { isPasswordVisible = !isPasswordVisible }) { - Icon( - imageVector = if (isPasswordVisible) Icons.Filled.Visibility else Icons.Filled.VisibilityOff, - contentDescription = if (isPasswordVisible) "Hide password" else "Show password", - tint = Color.Gray // You can customize the icon color - ) - } - } - ) - - Spacer(modifier = Modifier.height(20.dp)) - - Button( - onClick = { - signInButtonCallback(ctx, coscope, buttonText.value, usernameText, passwordText) - }, - colors = ButtonDefaults.buttonColors( - contentColor = Color.White, - containerColor = Color.Black - ), - modifier = Modifier - .border( - width = 5.dp, - shape = RoundedCornerShape(roundedCornerDimen), - color = PastelYellow + TextField( + value = passwordText, + onValueChange = { input -> passwordText = input }, + visualTransformation = visualTransformation, + modifier = Modifier + .width(230.dp) + .border( + width = 5.dp, + color = PastelYellow, + shape = RoundedCornerShape( + roundedCornerDimen ) - .width(230.dp) - ) { - Text( - text = buttonText.value, - fontSize = 23.sp - ) + ), + colors = TextFieldDefaults.colors( + focusedTextColor = Color.White, // White text + unfocusedTextColor = Color.White, // White text when not focused + focusedContainerColor = Color.Black, // Black background when focused + unfocusedContainerColor = Color.Black, // Black background when not focused + cursorColor = PastelYellow, // Yellow cursor + focusedIndicatorColor = Color.Black, // Yellow border when focused + unfocusedIndicatorColor = Color.Black // Yellow border when not focused + ), + trailingIcon = { + // Toggle button for showing/hiding password + IconButton(onClick = { isPasswordVisible = !isPasswordVisible }) { + Icon( + imageVector = if (isPasswordVisible) Icons.Filled.Visibility else Icons.Filled.VisibilityOff, + contentDescription = if (isPasswordVisible) "Hide password" else "Show password", + tint = Color.Gray // You can customize the icon color + ) + } } + ) + + Spacer(modifier = Modifier.height(20.dp)) + + Button( + onClick = { + signInButtonCallback(ctx, coscope, buttonText.value, usernameText, passwordText) + }, + colors = ButtonDefaults.buttonColors( + contentColor = Color.White, + containerColor = Color.Black + ), + modifier = Modifier + .border( + width = 5.dp, + shape = RoundedCornerShape(roundedCornerDimen), + color = PastelYellow + ) + .width(230.dp) + ) { + Text( + text = buttonText.value, + fontSize = 23.sp + ) } } } \ No newline at end of file diff --git a/mobile/app/src/main/java/com/odweta/solon/Timetable.kt b/mobile/app/src/main/java/com/odweta/solon/Timetable.kt index f47a6d4..c4369f4 100644 --- a/mobile/app/src/main/java/com/odweta/solon/Timetable.kt +++ b/mobile/app/src/main/java/com/odweta/solon/Timetable.kt @@ -29,6 +29,7 @@ import androidx.compose.ui.graphics.Color import androidx.compose.ui.res.painterResource import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import com.odweta.solon.ui.theme.PastelGreen @@ -95,11 +96,9 @@ fun subjectModifier(d: Day, s: Subject, lectureNumber: Int): Modifier { month = "0$month" } - d.date = "$day. $month." - val dayFormatter = DateTimeFormatter.ofPattern("dd. MM. yyyy") val hourFormatter = DateTimeFormatter.ofPattern("HH:mm:ss") - val dateParsed = LocalDate.parse(d.date + " " + LocalDate.now().year, dayFormatter) + val dateParsed = LocalDate.parse("$day. $month." + " " + LocalDate.now().year, dayFormatter) val startTimeParsed = LocalTime.parse(s.start + ":00", hourFormatter) val endTimeParsed = LocalTime.parse(s.end + ":00", hourFormatter) @@ -110,27 +109,22 @@ fun subjectModifier(d: Day, s: Subject, lectureNumber: Int): Modifier { currentLectureNumber = lectureNumber } + val m = Modifier + .fillMaxWidth() + .height(70.dp) + .background( + color = getSubjectColor(s, true), // decide on the color (transparent) + shape = RoundedCornerShape(roundedCornerDimen) + ) + return if (lectureNumber == currentLectureNumber && dateParsed == todayDate) { - Modifier - .fillMaxWidth() - .height(100.dp) - .background( - color = getSubjectColor(s, true), // decide on the color (transparent) - shape = RoundedCornerShape(roundedCornerDimen) - ) - .border( - width = 5.dp, - color = getSubjectColor(s, false), - shape = RoundedCornerShape(roundedCornerDimen) - ) + m.border( + width = 5.dp, + color = getSubjectColor(s, false), + shape = RoundedCornerShape(roundedCornerDimen) + ) } else { - Modifier - .fillMaxWidth() - .height(100.dp) - .background( - color = getSubjectColor(s, true), // decide on the color (transparent) - shape = RoundedCornerShape(roundedCornerDimen) - ) + m } } @@ -150,7 +144,7 @@ private fun DayScreen(day: Day) { Text( text = "${day.name} ${day.date}", color = Color.White, - fontSize = 30.sp, + fontSize = 26.sp, fontWeight = FontWeight.Bold, fontStyle = FontStyle.Italic ) @@ -249,7 +243,8 @@ private fun DayScreen(day: Day) { .padding(vertical = 5.dp), contentAlignment = Alignment.Center ) { - if (!Parsing.userIsParent()) { + // add this to the 'Svoboda' mode maybe later; for now, it is left out + /*if (!Parsing.userIsParent()) { if ( subject.teacher == "Jindřich Svoboda" && studentClass == "5. G" @@ -260,7 +255,7 @@ private fun DayScreen(day: Day) { modifier = Modifier.fillMaxSize() ) } - } + }*/ } if (subject.substitute != "2") { @@ -278,11 +273,15 @@ private fun DayScreen(day: Day) { ) if (!subject.free) { - Text( - text = subject.teacher, - color = Color.White, - fontSize = 12.sp - ) + Box ( + contentAlignment = Alignment.BottomEnd + ) { + Text( + text = subject.teacher, + color = Color.White, + fontSize = 12.sp + ) + } } } } diff --git a/mobile/app/src/main/java/com/odweta/solon/Toolbar.kt b/mobile/app/src/main/java/com/odweta/solon/Toolbar.kt index e9d28a0..63cf810 100644 --- a/mobile/app/src/main/java/com/odweta/solon/Toolbar.kt +++ b/mobile/app/src/main/java/com/odweta/solon/Toolbar.kt @@ -1,15 +1,44 @@ package com.odweta.solon +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.padding import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.setValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp @Composable fun ToolbarScreen() { - Text( - text = toolbarText.value, - fontSize = 25.sp, - color = Color.White - ) + // make the font size adaptive relative to the length of the user's name + var toolbarTextSizeAdaptive by remember { mutableStateOf(25.sp) } + + if (toolbarText.value.length > 28) { + toolbarTextSizeAdaptive = 20.sp + } + + if (toolbarText.value.length > 32) { + toolbarTextSizeAdaptive = 16.sp + } + + if (toolbarText.value.length > 40) { + toolbarTextSizeAdaptive = 12.sp + } + + if (toolbarText.value.length > 45) { + toolbarTextSizeAdaptive = 10.sp + } + + Box(modifier = Modifier.padding(10.dp)) { + Text( + text = toolbarText.value, + fontSize = toolbarTextSizeAdaptive, + color = Color.White + ) + } } \ No newline at end of file diff --git a/mobile/app/src/main/java/com/odweta/solon/ui/theme/Color.kt b/mobile/app/src/main/java/com/odweta/solon/ui/theme/Color.kt index 3b96cdf..9d65a78 100644 --- a/mobile/app/src/main/java/com/odweta/solon/ui/theme/Color.kt +++ b/mobile/app/src/main/java/com/odweta/solon/ui/theme/Color.kt @@ -19,11 +19,13 @@ val White = Color(0xFFFFFFFF) val Transparent = Color(0x00000000) val PastelRed = Color(0xFFFF6666) +val PastelOrangeDark = Color(0xFFDC6421) val PastelGreen = Color(0xFF00CC99) val PastelOrange = Color(0xFFFF9933) val PastelYellow = Color(0xFFFFCC33) val PastelRedTransparent = Color(0x50FF6666) +val PastelOrangeDarkTransparent = Color(0x50DC6421) val PastelGreenTransparent = Color(0x5000CC99) val PastelOrangeTransparent = Color(0x50FF9933) val PastelYellowTransparent = Color(0x50FFCC33) diff --git a/mobile/gradle/libs.versions.toml b/mobile/gradle/libs.versions.toml index 85213bb..d5a5d58 100644 --- a/mobile/gradle/libs.versions.toml +++ b/mobile/gradle/libs.versions.toml @@ -1,6 +1,6 @@ [versions] accompanistCoil = "0.30.1" -agp = "8.7.1" +agp = "8.7.2" coilCompose = "2.4.0" glide = "4.16.0" kotlin = "2.0.0"