From 85e23918334c893fedc5182ea85645652587d362 Mon Sep 17 00:00:00 2001 From: Rene Luria Date: Thu, 6 Aug 2026 17:19:21 +0200 Subject: [PATCH] feat: add screen transitions and rebrand to MyIce - AnimatedContent with fade transitions between screens (300ms) - Desktop window title 'MyIce' (dropped 'K' codename) --- .../commonMain/kotlin/ch/parano/myicek/App.kt | 49 ++++++++++++------- .../kotlin/ch/parano/myicek/Main.kt | 2 +- 2 files changed, 32 insertions(+), 19 deletions(-) diff --git a/composeApp/src/commonMain/kotlin/ch/parano/myicek/App.kt b/composeApp/src/commonMain/kotlin/ch/parano/myicek/App.kt index bf94c2b..d243b9c 100644 --- a/composeApp/src/commonMain/kotlin/ch/parano/myicek/App.kt +++ b/composeApp/src/commonMain/kotlin/ch/parano/myicek/App.kt @@ -17,6 +17,11 @@ package ch.parano.myicek +import androidx.compose.animation.AnimatedContent +import androidx.compose.animation.core.tween +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.togetherWith import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.collectAsState @@ -83,24 +88,32 @@ fun App( } MyIceTheme { - when (val screen = currentScreen) { - Screen.Login -> LoginScreen(viewModel = authViewModel) - Screen.Schedule -> ScheduleScreen( - scheduleViewModel = scheduleViewModel, - authViewModel = authViewModel, - onEventClick = { gameId, account, eventTitle, eventStart, eventEnd -> - currentScreen = Screen.EventDetail(gameId, account, eventTitle, eventStart, eventEnd) - }, - ) - is Screen.EventDetail -> EventDetailScreen( - gameId = screen.gameId, - account = screen.account, - eventTitle = screen.eventTitle, - eventStart = screen.eventStart, - eventEnd = screen.eventEnd, - viewModel = eventDetailViewModel, - onBack = { currentScreen = Screen.Schedule }, - ) + AnimatedContent( + targetState = currentScreen, + transitionSpec = { + fadeIn(tween(300)) togetherWith fadeOut(tween(300)) + }, + label = "screenTransition", + ) { screen -> + when (screen) { + Screen.Login -> LoginScreen(viewModel = authViewModel) + Screen.Schedule -> ScheduleScreen( + scheduleViewModel = scheduleViewModel, + authViewModel = authViewModel, + onEventClick = { gameId, account, eventTitle, eventStart, eventEnd -> + currentScreen = Screen.EventDetail(gameId, account, eventTitle, eventStart, eventEnd) + }, + ) + is Screen.EventDetail -> EventDetailScreen( + gameId = screen.gameId, + account = screen.account, + eventTitle = screen.eventTitle, + eventStart = screen.eventStart, + eventEnd = screen.eventEnd, + viewModel = eventDetailViewModel, + onBack = { currentScreen = Screen.Schedule }, + ) + } } } } diff --git a/composeApp/src/desktopMain/kotlin/ch/parano/myicek/Main.kt b/composeApp/src/desktopMain/kotlin/ch/parano/myicek/Main.kt index 286b6d3..0ce13b1 100644 --- a/composeApp/src/desktopMain/kotlin/ch/parano/myicek/Main.kt +++ b/composeApp/src/desktopMain/kotlin/ch/parano/myicek/Main.kt @@ -22,7 +22,7 @@ import androidx.compose.ui.window.application import ch.parano.myicek.auth.DesktopOAuthClient fun main() = application { - Window(onCloseRequest = ::exitApplication, title = "MyIceK") { + Window(onCloseRequest = ::exitApplication, title = "MyIce") { App(oauthClient = DesktopOAuthClient()) } }