diff --git a/mobile/.idea/deploymentTargetSelector.xml b/mobile/.idea/deploymentTargetSelector.xml index 32378e9..d17eedc 100644 --- a/mobile/.idea/deploymentTargetSelector.xml +++ b/mobile/.idea/deploymentTargetSelector.xml @@ -13,12 +13,6 @@ - - - - \ 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 217e12c..f6d8cc1 100644 --- a/mobile/app/src/main/java/com/odweta/solon/BackButtonFactory.kt +++ b/mobile/app/src/main/java/com/odweta/solon/BackButtonFactory.kt @@ -63,7 +63,10 @@ object BackButtonFactory: BackButtonFactoryInterface { @Composable override fun get(type: BackButtonType): @Composable () -> Unit { return when (type) { - BackButtonType.Menu -> { { BackButton { global.currentScreenElement = ScreenElement.Menu } } } + BackButtonType.Menu -> { { BackButton { + global.currentScreenElement = ScreenElement.Menu + global.currentScreen = Screen.Main + } } } BackButtonType.MarksAll -> { { BackButton { global.currentScreenElement = ScreenElement.Marks global.marksDepthLevel = MarksDepthLevel.All 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 9f3022d..4044199 100644 --- a/mobile/app/src/main/java/com/odweta/solon/Global.kt +++ b/mobile/app/src/main/java/com/odweta/solon/Global.kt @@ -15,12 +15,16 @@ import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.MutableState import androidx.compose.runtime.RecomposeScope import androidx.compose.runtime.getValue +import androidx.compose.runtime.key import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalViewConfiguration import androidx.compose.ui.unit.dp import androidx.lifecycle.MutableLiveData import com.odweta.solon.ui.theme.PastelYellow @@ -32,7 +36,9 @@ import java.util.concurrent.Callable enum class Screen { Main, Splash, - SignIn + SignIn, + Settings, + Temp } // default settings (will get overwritten by the saved settings) @@ -187,7 +193,6 @@ enum class ScreenElement { FinalMarks, Menu, About, - Settings, SignOut } @@ -217,11 +222,13 @@ class Global { var selectedLecture: Int = 0 var currentLectureNumber: Int = 0 + var tempScreen by mutableStateOf(Screen.Settings) var currentScreen by mutableStateOf(Screen.Main) var currentScreenElement by mutableStateOf(ScreenElement.Timetable) var status by mutableStateOf("") + var returnToTempScreen by mutableStateOf(false) var isAPISetUp by mutableStateOf(false) var launched by mutableStateOf(false) var refreshed by mutableStateOf(false) @@ -273,9 +280,16 @@ val global = Global() var settings = SettingsData() +private fun changeAndRevert(variable: T, newValue: T, revert: (T) -> Unit) { + val orig = variable + revert(newValue) + revert(orig) +} + @Composable fun Animate(targetState: T, content: @Composable (target: T) -> Unit) { if (settings.useAnimations.checked.value == true) { + // When animations are enabled, apply AnimatedContent AnimatedContent( targetState = targetState, transitionSpec = { @@ -283,11 +297,16 @@ fun Animate(targetState: T, content: @Composable (target: T) -> Unit) { slideOutVertically(targetOffsetY = { it }) + fadeOut() ) }, - modifier = Modifier.fillMaxSize(), label = "animated content" + modifier = Modifier.fillMaxSize(), + label = "animated content" ) { target -> content(target) } } else { + // When animations are disabled, just show content without animation content(targetState) } -} \ No newline at end of file +} + + + 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 b54c0cc..edc45bf 100644 --- a/mobile/app/src/main/java/com/odweta/solon/MainActivity.kt +++ b/mobile/app/src/main/java/com/odweta/solon/MainActivity.kt @@ -43,51 +43,52 @@ class MainActivity : ComponentActivity() { Screen.Main -> if (global.launched) MainScreen() Screen.Splash -> SplashScreen() Screen.SignIn -> SignInScreen() + Screen.Settings -> SettingsScreen() + Screen.Temp -> TempScreen() } } } } } +} - @Composable - fun MainScreen() { - Column( - modifier = Modifier - .fillMaxSize() - .background(Color.Black) +@Composable +fun MainScreen() { + Column( + modifier = Modifier + .fillMaxSize() + .background(Color.Black) + ) { + Box( + modifier = global.modifiers.bar, + contentAlignment = Alignment.Center ) { - Box( - modifier = global.modifiers.bar, - contentAlignment = Alignment.Center - ) { - ToolbarScreen() - } + ToolbarScreen() + } - Box( - modifier = Modifier - .fillMaxWidth() - .weight(1f) - ) { - Animate(global.currentScreenElement) { targetScreen -> - when (targetScreen) { - ScreenElement.Timetable -> TimetableScreen() - ScreenElement.Marks -> MarksScreen() - ScreenElement.NewMarks -> NewMarksScreen() - ScreenElement.FinalMarks -> FinalMarksScreen() - ScreenElement.Menu -> MenuScreen() - ScreenElement.About -> AboutScreen() - ScreenElement.Settings -> SettingsScreen() - ScreenElement.SignOut -> SignOutScreen() - } + Box( + modifier = Modifier + .fillMaxWidth() + .weight(1f) + ) { + Animate(global.currentScreenElement) { targetScreen -> + when (targetScreen) { + ScreenElement.Timetable -> TimetableScreen() + ScreenElement.Marks -> MarksScreen() + ScreenElement.NewMarks -> NewMarksScreen() + ScreenElement.FinalMarks -> FinalMarksScreen() + ScreenElement.Menu -> MenuScreen() + ScreenElement.About -> AboutScreen() + ScreenElement.SignOut -> SignOutScreen() } } + } - Box( - modifier = global.modifiers.bar, - contentAlignment = Alignment.Center - ) { - NavbarScreen() - } + Box( + modifier = global.modifiers.bar, + contentAlignment = Alignment.Center + ) { + NavbarScreen() } } } \ No newline at end of file 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 5a483a3..fa88fbc 100644 --- a/mobile/app/src/main/java/com/odweta/solon/Menu.kt +++ b/mobile/app/src/main/java/com/odweta/solon/Menu.kt @@ -86,7 +86,7 @@ fun MenuScreen() { Spacer(modifier = Modifier.width(menuSeparatorDimen)) MenuButton( - { global.currentScreenElement = ScreenElement.Settings }, + { global.currentScreen = Screen.Settings }, Icons.Default.Settings, "Nastavení" ) 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 a848d34..089d386 100644 --- a/mobile/app/src/main/java/com/odweta/solon/Parsing.kt +++ b/mobile/app/src/main/java/com/odweta/solon/Parsing.kt @@ -158,7 +158,7 @@ class Parsing { subj.getJSONArray("teachers") .getJSONObject(0).getString("name") + " " + subj.getJSONArray("teachers") - .getJSONObject(0).getString("name") + .getJSONObject(0).getString("surname") } else { "" } @@ -199,15 +199,13 @@ class Parsing { val detailHours = subj.getJSONArray("detailHours") newSubject.number = - detailHours.getJSONObject(i).get("id").toString() + detailHours.getJSONObject(i).getString("id") newSubject.start = - detailHours.getJSONObject(i).get("timeFrom") - .toString() + detailHours.getJSONObject(i).getString("timeFrom") newSubject.start = newSubject.start.slice(0..newSubject.start.length - 4) newSubject.end = - detailHours.getJSONObject(i).get("timeto") - .toString() + detailHours.getJSONObject(i).getString("timeto") newSubject.end = newSubject.end.slice(0..newSubject.end.length - 4) subjects.add(newSubject) @@ -217,7 +215,7 @@ class Parsing { } val sCopy = subjects.toList() - for (s in 0 until sCopy.size) { + for (s in sCopy.indices) { if ("-" in subjects[s].number) { subjects[s].number = "1" subjects[s].start = "08:00" @@ -226,26 +224,6 @@ class Parsing { } } - /* - // rust pseudocode - - let mut res: Vec = vec![]; - for i in 0..v.len()-1 { - if v[i] == v[i+1]-1 { - res.push(v[i]); - } else { - res.push(v[i]); - - while res[res.len()-1]+1 != v[i+1] { - res.push(res[res.len()-1]+1); - } - } - } - res.push(v[v.len()-1]); - - res - */ - if (subjects.size > 1) { for (i in 0.. MainScreen() + Screen.Splash -> SplashScreen() + Screen.SignIn -> SignInScreen() + Screen.Settings -> SettingsScreen() + Screen.Temp -> {} + } +} + +fun showTempScreen(screen: Screen) { + global.returnToTempScreen = true + global.tempScreen = screen + global.currentScreen = Screen.Temp +} \ 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 c972654..e170f93 100644 --- a/mobile/app/src/main/java/com/odweta/solon/Timetable.kt +++ b/mobile/app/src/main/java/com/odweta/solon/Timetable.kt @@ -49,6 +49,7 @@ import androidx.compose.ui.focus.focusModifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign @@ -440,8 +441,9 @@ private fun DayScreen(day: Day) { Text( text = " supl ", - color = Color.Black, - modifier = Modifier.background(color = Color.White) + color = Color.White, + fontStyle = FontStyle.Italic, + modifier = Modifier.background(color = PastelRedTransparent) ) } } else { @@ -486,8 +488,7 @@ private fun DayScreen(day: Day) { ) { if (settings.useSvobodaMode.checked.value == true) { if ( - subject.teacher == "Jindřich Svoboda" && - global.studentClass == "5. G" + subject.teacher == "Jindřich Svoboda" ) { Image( painter = painterResource(R.drawable.spock),