diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/App.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/App.kt index e64fee74..22ff2f30 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/App.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/App.kt @@ -55,7 +55,9 @@ import androidx.compose.ui.layout.ContentScale import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalHapticFeedback import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.max import androidx.compose.ui.zIndex import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleEventObserver @@ -1327,6 +1329,12 @@ private fun MainAppContent( val isTabletLayout = maxWidth >= 768.dp val useNativeBottomTabs = liquidGlassNativeTabBarSupported && liquidGlassNativeTabBarEnabled && initialHomeReady + val topChromePadding = if (isTabletLayout && !useNativeBottomTabs) { + val statusBarPadding = WindowInsets.statusBars.asPaddingValues().calculateTopPadding() + max(statusBarPadding + 24.dp, 48.dp) + 64.dp + } else { + null + } val tabsRouteActive = currentBackStackEntry?.destination?.hasRoute() == true val onProfileSelected: (NuvioProfile) -> Unit = { profile -> profileSwitchLoading = true @@ -1386,6 +1394,7 @@ private fun MainAppContent( .fillMaxSize() .padding(innerPadding), selectedTab = selectedTab, + topChromePadding = topChromePadding, searchFocusRequestCount = searchFocusRequestCount, rootActionsEnabled = tabsRouteActive, homeScrollToTopRequests = homeScrollToTopRequests, @@ -2808,6 +2817,7 @@ private fun rememberGuardedPopBackStack( private fun AppTabHost( selectedTab: AppScreenTab, modifier: Modifier = Modifier, + topChromePadding: Dp? = null, searchFocusRequestCount: Int = 0, rootActionsEnabled: Boolean = true, homeScrollToTopRequests: Flow, @@ -2865,6 +2875,7 @@ private fun AppTabHost( AppScreenTab.Search -> { SearchScreen( modifier = Modifier.fillMaxSize(), + topChromePadding = topChromePadding, onPosterClick = onPosterClick, onPosterLongClick = onPosterLongClick, searchFocusRequestCount = searchFocusRequestCount, @@ -2875,6 +2886,7 @@ private fun AppTabHost( AppScreenTab.Library -> { LibraryScreen( modifier = Modifier.fillMaxSize(), + topChromePadding = topChromePadding, scrollToTopRequests = libraryScrollToTopRequests, onPosterClick = onLibraryPosterClick, onPosterLongClick = onLibraryPosterLongClick, diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/library/LibraryScreen.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/library/LibraryScreen.kt index af8b6410..f5ecf93c 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/library/LibraryScreen.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/library/LibraryScreen.kt @@ -88,6 +88,7 @@ import org.jetbrains.compose.resources.stringResource @Composable fun LibraryScreen( modifier: Modifier = Modifier, + topChromePadding: Dp? = null, scrollToTopRequests: Flow = emptyFlow(), onPosterClick: ((LibraryItem) -> Unit)? = null, onPosterLongClick: ((LibraryItem, LibrarySection) -> Unit)? = null, @@ -174,6 +175,7 @@ fun LibraryScreen( NuvioScreen( modifier = modifier, horizontalPadding = 0.dp, + topPadding = if (topChromePadding != null) 0.dp else null, listState = listState, ) { stickyHeader { @@ -192,6 +194,7 @@ fun LibraryScreen( stringResource(Res.string.library_title) }, modifier = Modifier.padding(horizontal = 16.dp), + topPadding = topChromePadding, ) LibrarySourceSwitch( selectedMode = sourceMode, diff --git a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/search/SearchScreen.kt b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/search/SearchScreen.kt index 0804d904..389aa5ff 100644 --- a/composeApp/src/commonMain/kotlin/com/nuvio/app/features/search/SearchScreen.kt +++ b/composeApp/src/commonMain/kotlin/com/nuvio/app/features/search/SearchScreen.kt @@ -83,6 +83,7 @@ import org.jetbrains.compose.resources.stringResource @Composable fun SearchScreen( modifier: Modifier = Modifier, + topChromePadding: Dp? = null, onPosterClick: ((MetaPreview) -> Unit)? = null, onPosterLongClick: ((MetaPreview) -> Unit)? = null, searchFocusRequestCount: Int = 0, @@ -238,6 +239,7 @@ fun SearchScreen( NuvioScreen( horizontalPadding = 0.dp, + topPadding = if (topChromePadding != null) 0.dp else null, listState = listState, modifier = Modifier.fillMaxSize(), ) { @@ -251,6 +253,7 @@ fun SearchScreen( NuvioScreenHeader( title = headerTitle, modifier = Modifier.padding(horizontal = 16.dp), + topPadding = topChromePadding, ) androidx.compose.foundation.layout.Spacer(modifier = Modifier.height(6.dp)) androidx.compose.foundation.layout.Box(modifier = Modifier.padding(horizontal = 16.dp)) {