From d5eaf101eb5594c938d284c95aee9445fba634db Mon Sep 17 00:00:00 2001 From: Kingkor Roy Tirtho Date: Wed, 14 Oct 2026 19:26:54 +0600 Subject: [PATCH] fix: add window insets to top bar and bottom navigation bar, queue sheet --- .../drawable/plugin_logo_newpipe.png | Bin 0 -> 19614 bytes .../drawable/plugin_logo_newpipe.svg | 17 -------------- .../core/webview/PlatformWebviewScreen.kt | 5 ++--- .../spotube/modules/shell/AppShell.kt | 21 ++++++++++++------ .../modules/shell/AppShellViewModel.kt | 9 +++----- .../modules/shell/player_queue/QueueSheet.kt | 8 ++++++- .../ui/component/ApplicationMainBar.mobile.kt | 5 ++++- gradle.properties | 6 ++++- gradle/libs.versions.toml | 4 ++-- 9 files changed, 37 insertions(+), 38 deletions(-) create mode 100644 composeApp/src/commonMain/composeResources/drawable/plugin_logo_newpipe.png delete mode 100644 composeApp/src/commonMain/composeResources/drawable/plugin_logo_newpipe.svg diff --git a/composeApp/src/commonMain/composeResources/drawable/plugin_logo_newpipe.png b/composeApp/src/commonMain/composeResources/drawable/plugin_logo_newpipe.png new file mode 100644 index 0000000000000000000000000000000000000000..3bcf07994e4605558e752644704abe451bc08f9d GIT binary patch literal 19614 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 literal 0 HcmV?d00001 diff --git a/composeApp/src/commonMain/composeResources/drawable/plugin_logo_newpipe.svg b/composeApp/src/commonMain/composeResources/drawable/plugin_logo_newpipe.svg deleted file mode 100644 index 7cb4554d..00000000 --- a/composeApp/src/commonMain/composeResources/drawable/plugin_logo_newpipe.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - diff --git a/composeApp/src/commonMain/kotlin/dev/krtirtho/spotube/core/webview/PlatformWebviewScreen.kt b/composeApp/src/commonMain/kotlin/dev/krtirtho/spotube/core/webview/PlatformWebviewScreen.kt index d166f722..583ba6e2 100644 --- a/composeApp/src/commonMain/kotlin/dev/krtirtho/spotube/core/webview/PlatformWebviewScreen.kt +++ b/composeApp/src/commonMain/kotlin/dev/krtirtho/spotube/core/webview/PlatformWebviewScreen.kt @@ -32,7 +32,6 @@ import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.statusBarsPadding import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.foundation.text.BasicTextField @@ -156,7 +155,7 @@ fun PlatformWebViewScreen(webViewController: WebViewController) { ApplicationMainBar( title = { Row( - modifier = Modifier.fillMaxWidth().statusBarsPadding().height(56.dp), + modifier = Modifier.fillMaxWidth().height(56.dp), horizontalArrangement = Arrangement.SpaceBetween, verticalAlignment = Alignment.CenterVertically ) { @@ -227,4 +226,4 @@ fun PlatformWebViewScreen(webViewController: WebViewController) { navigator.evaluateJavaScript(bridgeBootstrapScript) }) } -} \ No newline at end of file +} diff --git a/composeApp/src/commonMain/kotlin/dev/krtirtho/spotube/modules/shell/AppShell.kt b/composeApp/src/commonMain/kotlin/dev/krtirtho/spotube/modules/shell/AppShell.kt index bdd89d61..f5c9e948 100644 --- a/composeApp/src/commonMain/kotlin/dev/krtirtho/spotube/modules/shell/AppShell.kt +++ b/composeApp/src/commonMain/kotlin/dev/krtirtho/spotube/modules/shell/AppShell.kt @@ -30,7 +30,6 @@ import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.navigationBars -import androidx.compose.foundation.layout.offset import androidx.compose.foundation.layout.padding import androidx.compose.runtime.Composable import androidx.compose.runtime.CompositionLocalProvider @@ -128,7 +127,11 @@ fun AppShell( Box(modifier = Modifier.fillMaxSize()) { val useSidebar = viewModel.useSidebar() - val bottomOverlayInset = viewModel.bottomOverlayInset(useSidebar) + val density = LocalDensity.current + val navigationBarInset = with(density) { + WindowInsets.navigationBars.getBottom(this).toDp() + } + val bottomOverlayInset = viewModel.bottomOverlayInset(useSidebar) + navigationBarInset CompositionLocalProvider(LocalAppShellBottomInset provides bottomOverlayInset) { if (useSidebar) { @@ -278,7 +281,9 @@ private fun CompactPlayerOverlay( val floatingPlayerHeightPx = with(density) { viewModel.floatingPlayerHeight.toPx() } val bottomBarHeightPx = with(density) { viewModel.bottomBarHeight.toPx() } val navBarInsetPx = WindowInsets.navigationBars.getBottom(density).toFloat() - val peekHeightPx = floatingPlayerHeightPx + bottomBarHeightPx + navBarInsetPx + val playerBarSpacingPx = with(density) { viewModel.floatingPlayerSpacing.toPx() } + val peekHeightPx = + floatingPlayerHeightPx + bottomBarHeightPx + navBarInsetPx + playerBarSpacingPx val peekHeight = with(density) { peekHeightPx.toDp() } val partialDetent = remember(peekHeight) { @@ -318,7 +323,6 @@ private fun CompactPlayerOverlay( Column(modifier = Modifier.fillMaxWidth()) { AppFloatingPlayer( modifier = Modifier - .offset(y = 12.dp) .graphicsLayer { alpha = uiState.floatingPlayerAlpha }) @@ -332,9 +336,12 @@ private fun CompactPlayerOverlay( AppBottombar( navigator = navigator, navigationState = navigationState, - modifier = Modifier.fillMaxWidth().align(Alignment.BottomCenter).graphicsLayer { - alpha = uiState.floatingPlayerAlpha - }) + modifier = Modifier + .fillMaxWidth() + .align(Alignment.BottomCenter) + .graphicsLayer { + alpha = uiState.floatingPlayerAlpha + }) } } } diff --git a/composeApp/src/commonMain/kotlin/dev/krtirtho/spotube/modules/shell/AppShellViewModel.kt b/composeApp/src/commonMain/kotlin/dev/krtirtho/spotube/modules/shell/AppShellViewModel.kt index 1e8fd536..768f44c1 100644 --- a/composeApp/src/commonMain/kotlin/dev/krtirtho/spotube/modules/shell/AppShellViewModel.kt +++ b/composeApp/src/commonMain/kotlin/dev/krtirtho/spotube/modules/shell/AppShellViewModel.kt @@ -42,9 +42,9 @@ data class LyricsOverlayState( class AppShellViewModel : ViewModel() { val sidebarMinWidth = 840.dp - val bottomBarEstimatedHeight = 58.dp val bottomBarHeight = 80.dp - val floatingPlayerHeight = 74.dp + val floatingPlayerHeight = 76.dp + val floatingPlayerSpacing = 12.dp val largePlayerInset = 100.dp val floatingPlayerDismissProgress = 0.7f val expandedPlayerVisibilityThreshold = 0.001f @@ -53,11 +53,8 @@ class AppShellViewModel : ViewModel() { val isLyricsOverlayVisible: StateFlow = lyricsOverlayVisible.asStateFlow() - val floatingPlayerBottomOffset: Dp - get() = bottomBarEstimatedHeight + 8.dp - val compactChromeInset: Dp - get() = floatingPlayerBottomOffset + floatingPlayerHeight + 10.dp + get() = bottomBarHeight + floatingPlayerHeight + floatingPlayerSpacing @Composable fun useSidebar(maxWidth: Dp? = null): Boolean { diff --git a/composeApp/src/commonMain/kotlin/dev/krtirtho/spotube/modules/shell/player_queue/QueueSheet.kt b/composeApp/src/commonMain/kotlin/dev/krtirtho/spotube/modules/shell/player_queue/QueueSheet.kt index 6175b72a..207bec37 100644 --- a/composeApp/src/commonMain/kotlin/dev/krtirtho/spotube/modules/shell/player_queue/QueueSheet.kt +++ b/composeApp/src/commonMain/kotlin/dev/krtirtho/spotube/modules/shell/player_queue/QueueSheet.kt @@ -34,6 +34,9 @@ import org.spotube.millennium.composables.MillenniumModalBottomSheet import org.spotube.millennium.composables.rememberMillenniumDrawerState private val SlidingSheetBreakpoint = 840.dp +private val MaxHeightSheetDetent = SheetDetent("max-height-85-percent") { containerHeight, sheetHeight -> + minOf(sheetHeight, containerHeight * 0.85f) +} @Composable fun QueueSheet( @@ -85,7 +88,10 @@ internal fun BottomSheetContent( content: @Composable () -> Unit ) { if (!isVisible) return - val sheetState = rememberModalBottomSheetState(initialDetent = SheetDetent.FullyExpanded) + val sheetState = rememberModalBottomSheetState( + initialDetent = MaxHeightSheetDetent, + detents = listOf(SheetDetent.Hidden, MaxHeightSheetDetent) + ) LaunchedEffect(sheetState.bottomSheetState.currentDetent) { if (sheetState.bottomSheetState.currentDetent == SheetDetent.Hidden) { onDismiss() diff --git a/composeApp/src/mobileMain/kotlin/dev/krtirtho/spotube/core/ui/component/ApplicationMainBar.mobile.kt b/composeApp/src/mobileMain/kotlin/dev/krtirtho/spotube/core/ui/component/ApplicationMainBar.mobile.kt index fd455041..b60bd16c 100644 --- a/composeApp/src/mobileMain/kotlin/dev/krtirtho/spotube/core/ui/component/ApplicationMainBar.mobile.kt +++ b/composeApp/src/mobileMain/kotlin/dev/krtirtho/spotube/core/ui/component/ApplicationMainBar.mobile.kt @@ -18,6 +18,8 @@ package dev.krtirtho.spotube.core.ui.component import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.statusBars import org.spotube.millennium.composables.MillenniumTopAppBar import androidx.compose.ui.graphics.Color import androidx.compose.runtime.Composable @@ -33,10 +35,11 @@ actual fun ApplicationMainBar( title = title, subtitle = subtitle, actions = actions, + windowInsets = WindowInsets.statusBars, navigationIcon = { if (backButton) { ApplicationBackButton() } } ) -} \ No newline at end of file +} diff --git a/gradle.properties b/gradle.properties index b96a5a61..e2904b99 100644 --- a/gradle.properties +++ b/gradle.properties @@ -27,4 +27,8 @@ org.gradle.caching=true #Android android.nonTransitiveRClass=true -android.useAndroidX=true \ No newline at end of file +android.useAndroidX=true +# Preserve compatibility with this project's current Kotlin Multiplatform Android setup on AGP 9. +android.builtInKotlin=false +android.newDsl=false +android.sourceset.disallowProvider=false diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index efeac1e2..24df3449 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ # along with this program. If not, see . [versions] -agp = "8.13.2" +agp = "9.1.0" android-compileSdk = "37" android-minSdk = "28" android-targetSdk = "36" @@ -193,4 +193,4 @@ uniffi = { id = "dev.gobley.uniffi", version.ref = "uniffi" } cargo = { id = "dev.gobley.cargo", version.ref = "uniffi" } mokkery = { id = "dev.mokkery", version.ref = "mokkery" } vanniktechMavenPublish = { id = "com.vanniktech.maven.publish", version.ref = "vanniktechMavenPublish" } -neucleusFramework = { id = "dev.nucleusframework", version.ref = "nucleusNucleusApplication" } \ No newline at end of file +neucleusFramework = { id = "dev.nucleusframework", version.ref = "nucleusNucleusApplication" }