diff --git a/app/build.gradle b/app/build.gradle index 32284cd..8f704c0 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -59,6 +59,9 @@ dependencies { implementation "androidx.core:core-ktx:$ktx_core" implementation "androidx.paging:paging-common-ktx:$ktx_paging" + // android x + implementation "androidx.window:window:1.0.0" + // compose def compose = composeVersion def compose_material3 = "1.0.0-alpha07" diff --git a/app/src/main/java/com/owenlejeune/tvtime/MainActivity.kt b/app/src/main/java/com/owenlejeune/tvtime/MainActivity.kt index ea4a97d..5f9b697 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/MainActivity.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/MainActivity.kt @@ -5,7 +5,6 @@ import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.Box import androidx.compose.runtime.* -import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.tooling.preview.Preview @@ -30,19 +29,8 @@ class MainActivity : ComponentActivity() { setContent { AppKeyboardFocusManager() - val displayUnderStatusBar = rememberSaveable { mutableStateOf(false) } -// WindowCompat.setDecorFitsSystemWindows(window, false) -// WindowCompat.setDecorFitsSystemWindows(window, !displayUnderStatusBar.value) -// val statusBarColor = if (displayUnderStatusBar.value) { -// Color.Transparent -// } else { -// MaterialTheme.colorScheme.background -// } -// val systemUiController = rememberSystemUiController() -// systemUiController.setStatusBarColor(statusBarColor, !isSystemInDarkTheme()) MyApp( - appNavController = rememberNavController(), - displayUnderStatusBar = displayUnderStatusBar + appNavController = rememberNavController() ) } } @@ -50,12 +38,11 @@ class MainActivity : ComponentActivity() { @Composable fun MyApp( - appNavController: NavHostController = rememberNavController(), - displayUnderStatusBar: MutableState = mutableStateOf(false) + appNavController: NavHostController = rememberNavController() ) { TVTimeTheme { Box { - MainNavigationRoutes(navController = appNavController, displayUnderStatusBar = displayUnderStatusBar) + MainNavigationRoutes(navController = appNavController) } } } diff --git a/app/src/main/java/com/owenlejeune/tvtime/extensions/ActivityExtensions.kt b/app/src/main/java/com/owenlejeune/tvtime/extensions/ActivityExtensions.kt new file mode 100644 index 0000000..1fa2829 --- /dev/null +++ b/app/src/main/java/com/owenlejeune/tvtime/extensions/ActivityExtensions.kt @@ -0,0 +1,42 @@ +package com.owenlejeune.tvtime.extensions + +import android.app.Activity +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.geometry.Size +import androidx.compose.ui.graphics.toComposeRect +import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.unit.DpSize +import androidx.compose.ui.unit.dp +import androidx.window.layout.WindowMetricsCalculator + +@Composable +fun Activity.rememberWindowSize(): Size { + val configuration = LocalConfiguration.current + + val windowMetrics = remember(configuration) { + WindowMetricsCalculator.getOrCreate().computeCurrentWindowMetrics(this) + } + return windowMetrics.bounds.toComposeRect().size +} + +enum class WindowSizeClass { Compact, Medium, Expanded } + +@Composable +fun Activity.rememberWindowSizeClass(): WindowSizeClass { + val windowSize = rememberWindowSize() + + val windowSizeDp = with(LocalDensity.current) { + windowSize.toDpSize() + } + + return getWindowSizeClass(windowSizeDp) +} + +private fun getWindowSizeClass(windowDpSize: DpSize): WindowSizeClass = when { + windowDpSize.width < 0.dp -> throw IllegalArgumentException("Dp value cannot be negative") + windowDpSize.width < 600.dp -> WindowSizeClass.Compact + windowDpSize.width < 840.dp -> WindowSizeClass.Medium + else -> WindowSizeClass.Expanded +} \ No newline at end of file diff --git a/app/src/main/java/com/owenlejeune/tvtime/ui/navigation/Routes.kt b/app/src/main/java/com/owenlejeune/tvtime/ui/navigation/Routes.kt index 3666c1f..2ff056c 100644 --- a/app/src/main/java/com/owenlejeune/tvtime/ui/navigation/Routes.kt +++ b/app/src/main/java/com/owenlejeune/tvtime/ui/navigation/Routes.kt @@ -23,12 +23,10 @@ object NavConstants { @Composable fun MainNavigationRoutes( navController: NavHostController, - displayUnderStatusBar: MutableState = mutableStateOf(false), startDestination: String = MainNavItem.MainView.route ) { NavHost(navController = navController, startDestination = startDestination) { composable(MainNavItem.MainView.route) { - displayUnderStatusBar.value = false MainAppView(appNavController = navController) } composable( @@ -38,7 +36,6 @@ fun MainNavigationRoutes( navArgument(NavConstants.TYPE_KEY) { type = NavType.EnumType(MediaViewType::class.java) } ) ) { navBackStackEntry -> - displayUnderStatusBar.value = true val args = navBackStackEntry.arguments val mediaType = args?.getSerializable(NavConstants.TYPE_KEY) as MediaViewType if (mediaType != MediaViewType.PERSON) {