diff --git a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/common/lifecycle/WindowSize.kt b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/common/lifecycle/WindowSize.kt new file mode 100644 index 00000000..1a6d2a33 --- /dev/null +++ b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/common/lifecycle/WindowSize.kt @@ -0,0 +1,28 @@ +package dev.datlag.burningseries.shared.common.lifecycle + +import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi +import androidx.compose.material3.windowsizeclass.WindowHeightSizeClass +import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass +import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass +import androidx.compose.runtime.Composable + +@OptIn(ExperimentalMaterial3WindowSizeClassApi::class) +@Composable +fun calculateWindowWidthSize(): WindowSize { + val sizeClass = calculateWindowSizeClass() + + return when (sizeClass.widthSizeClass) { + WindowWidthSizeClass.Medium -> WindowSize.Medium + WindowWidthSizeClass.Expanded -> when (sizeClass.heightSizeClass) { + WindowHeightSizeClass.Compact -> WindowSize.Medium + else -> WindowSize.Expanded + } + else -> WindowSize.Compact + } +} + +sealed interface WindowSize { + data object Compact : WindowSize + data object Medium : WindowSize + data object Expanded : WindowSize +} \ No newline at end of file diff --git a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/InitialScreen.kt b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/InitialScreen.kt index 80d09fb9..99a2fe90 100644 --- a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/InitialScreen.kt +++ b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/InitialScreen.kt @@ -6,8 +6,6 @@ import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.* import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi -import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass -import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.getValue @@ -24,10 +22,13 @@ import dev.chrisbanes.haze.materials.ExperimentalHazeMaterialsApi import dev.chrisbanes.haze.materials.HazeMaterials import dev.datlag.burningseries.shared.LocalHaze import dev.datlag.burningseries.shared.LocalPaddingValues +import dev.datlag.burningseries.shared.common.lifecycle.WindowSize +import dev.datlag.burningseries.shared.common.lifecycle.calculateWindowWidthSize import dev.datlag.burningseries.shared.common.lifecycle.collectAsStateWithLifecycle import dev.datlag.burningseries.shared.rememberIsTv import dev.datlag.burningseries.shared.ui.custom.ExpandedPages import dev.icerock.moko.resources.compose.stringResource +import io.realm.kotlin.internal.platform.isWindows @OptIn(ExperimentalMaterial3WindowSizeClassApi::class) @Composable @@ -40,10 +41,10 @@ fun InitialScreen(component: InitialComponent) { Box( modifier = Modifier.fillMaxSize() ) { - when (calculateWindowSizeClass().widthSizeClass) { - WindowWidthSizeClass.Compact -> CompactScreen(component) - WindowWidthSizeClass.Medium -> MediumScreen(component) - WindowWidthSizeClass.Expanded -> { + when (calculateWindowWidthSize()) { + is WindowSize.Compact -> CompactScreen(component) + is WindowSize.Medium -> MediumScreen(component) + is WindowSize.Expanded -> { if (rememberIsTv()) { MediumScreen(component) } else { diff --git a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/favorite/FavoriteScreen.kt b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/favorite/FavoriteScreen.kt index 22aa27b3..37c806b2 100644 --- a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/favorite/FavoriteScreen.kt +++ b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/favorite/FavoriteScreen.kt @@ -13,9 +13,6 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.Clear import androidx.compose.material.icons.filled.Search import androidx.compose.material3.* -import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi -import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass -import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -30,6 +27,8 @@ import dev.chrisbanes.haze.haze import dev.datlag.burningseries.shared.LocalHaze import dev.datlag.burningseries.shared.SharedRes import dev.datlag.burningseries.shared.common.* +import dev.datlag.burningseries.shared.common.lifecycle.WindowSize +import dev.datlag.burningseries.shared.common.lifecycle.calculateWindowWidthSize import dev.datlag.burningseries.shared.common.lifecycle.collectAsStateWithLifecycle import dev.datlag.burningseries.shared.rememberIsTv import dev.datlag.burningseries.shared.ui.custom.FloatingSearchButton @@ -39,11 +38,10 @@ import dev.datlag.burningseries.shared.ui.screen.initial.favorite.component.Seri import dev.datlag.burningseries.shared.ui.screen.initial.home.component.SeriesItem import dev.icerock.moko.resources.compose.stringResource -@OptIn(ExperimentalMaterial3WindowSizeClassApi::class) @Composable fun FavoriteScreen(component: FavoriteComponent) { - when (calculateWindowSizeClass().widthSizeClass) { - WindowWidthSizeClass.Expanded -> { + when (calculateWindowWidthSize()) { + is WindowSize.Expanded -> { if (rememberIsTv()) { DefaultView(component) } else { diff --git a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/home/HomeScreen.kt b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/home/HomeScreen.kt index 0ed33876..4004d60c 100644 --- a/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/home/HomeScreen.kt +++ b/app/shared/src/commonMain/kotlin/dev/datlag/burningseries/shared/ui/screen/initial/home/HomeScreen.kt @@ -10,10 +10,6 @@ import androidx.compose.material.icons.filled.Search import androidx.compose.material.icons.filled.SearchOff import androidx.compose.material.icons.filled.YoutubeSearchedFor import androidx.compose.material3.* -import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi -import androidx.compose.material3.windowsizeclass.WindowHeightSizeClass -import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass -import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier @@ -30,6 +26,8 @@ import dev.datlag.burningseries.shared.LocalHaze import dev.datlag.burningseries.shared.SharedRes import dev.datlag.burningseries.shared.common.LocalPadding import dev.datlag.burningseries.shared.common.header +import dev.datlag.burningseries.shared.common.lifecycle.WindowSize +import dev.datlag.burningseries.shared.common.lifecycle.calculateWindowWidthSize import dev.datlag.burningseries.shared.common.lifecycle.collectAsStateWithLifecycle import dev.datlag.burningseries.shared.common.mergedLocalPadding import dev.datlag.burningseries.shared.other.StateSaver @@ -43,7 +41,6 @@ import dev.datlag.burningseries.shared.ui.screen.initial.home.component.* import dev.datlag.burningseries.shared.ui.theme.MaterialSymbols import dev.icerock.moko.resources.compose.stringResource -@OptIn(ExperimentalMaterial3WindowSizeClassApi::class) @Composable fun HomeScreen(component: HomeComponent) { val homeState by component.homeState.collectAsStateWithLifecycle() @@ -91,15 +88,12 @@ fun HomeScreen(component: HomeComponent) { } } is HomeState.Success -> { - when (calculateWindowSizeClass().widthSizeClass) { - WindowWidthSizeClass.Expanded -> { + when (calculateWindowWidthSize()) { + is WindowSize.Expanded -> { if (rememberIsTv()) { DefaultView(currentState.home, component) } else { - when (calculateWindowSizeClass().heightSizeClass) { - WindowHeightSizeClass.Compact -> DefaultView(currentState.home, component) - else -> ExpandedView(currentState.home, component) - } + ExpandedView(currentState.home, component) } } else -> DefaultView(currentState.home, component) @@ -121,19 +115,16 @@ private fun DefaultView(home: Home, component: HomeComponent) { @Composable private fun ExpandedView(home: Home, component: HomeComponent) { val childState by component.child.subscribeAsState() - var rowWidth by remember { mutableIntStateOf(-1) } Row( - modifier = Modifier.onSizeChanged { - rowWidth = it.width - }, + modifier = Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.spacedBy(16.dp) ) { - MainView(home, component, Modifier.weight(1F)) + MainView(home, component, Modifier.weight(1.5F)) childState.child?.also { (_, instance) -> Box( - modifier = Modifier.defaultMinSize(minWidth = 400.dp) + modifier = Modifier.weight(2F) ) { instance.render() } @@ -145,7 +136,7 @@ private fun ExpandedView(home: Home, component: HomeComponent) { private fun MainView(home: Home, component: HomeComponent, modifier: Modifier = Modifier) { Box(modifier = modifier) { Row( - modifier = Modifier.fillMaxSize().padding(horizontal = 16.dp), + modifier = Modifier.padding(horizontal = 16.dp), horizontalArrangement = Arrangement.spacedBy(2.dp) ) { val searchItems by component.searchItems.collectAsStateWithLifecycle()