From 999a277cfe691427c53cd686eef702ec4924656e Mon Sep 17 00:00:00 2001 From: spectreseven1138 Date: Sat, 15 Jul 2023 11:54:00 +0100 Subject: [PATCH] Fix WebViewLogin crash on A9 and below Fix WebViewLogin crash on Android 9 and below caused by setting forceDark on the WebView settings Fix bottom padding on main page and overlay pages --- .../spmp/platform/PlatformContext.android.kt | 7 ++--- .../spmp/platform/WebViewLogin.android.kt | 4 ++- .../spmp/platform/PlatformContext.kt | 9 +++++-- .../ui/component/MultiselectAndMusicTopBar.kt | 14 ++++------ .../longpressmenu/LongPressMenuContent.kt | 5 ++-- .../spmp/ui/layout/SearchPage.kt | 2 +- .../spmp/ui/layout/mainpage/MainPage.kt | 4 +-- .../spmp/ui/layout/mainpage/PlayerState.kt | 12 +++++---- .../ui/layout/mainpage/PlayerStateImpl.kt | 27 ++++++++++++------- .../spmp/ui/layout/mainpage/RootView.kt | 4 +-- .../nowplaying/maintab/NowPlayingMainTab.kt | 8 +++--- .../nowplaying/queue/NowPlayingQueueTab.kt | 9 +++---- .../ui/layout/playlistpage/PlaylistPage.kt | 9 ++++--- 13 files changed, 63 insertions(+), 51 deletions(-) diff --git a/shared/src/androidMain/kotlin/com/toasterofbread/spmp/platform/PlatformContext.android.kt b/shared/src/androidMain/kotlin/com/toasterofbread/spmp/platform/PlatformContext.android.kt index 7a721bc76..940675b87 100644 --- a/shared/src/androidMain/kotlin/com/toasterofbread/spmp/platform/PlatformContext.android.kt +++ b/shared/src/androidMain/kotlin/com/toasterofbread/spmp/platform/PlatformContext.android.kt @@ -16,7 +16,6 @@ import android.os.Build import android.os.Looper import android.os.VibrationEffect import android.os.Vibrator -import android.os.VibratorManager import android.view.Window import android.view.WindowInsetsController.APPEARANCE_LIGHT_STATUS_BARS import android.widget.Toast @@ -35,7 +34,6 @@ import androidx.compose.ui.text.font.Font import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp import androidx.core.app.NotificationManagerCompat -import androidx.core.content.ContextCompat.getSystemService import com.toasterofbread.spmp.model.Settings import com.toasterofbread.spmp.resources.getString import com.toasterofbread.spmp.resources.getStringTODO @@ -104,12 +102,11 @@ actual class PlatformContext(private val context: Context, onInit: ((PlatformCon @Composable actual fun getSystemInsets(): WindowInsets? = WindowInsets.systemGestures - @Composable @SuppressLint("InternalInsetResource", "DiscouragedApi") - actual fun getNavigationBarHeight(): Dp = with(LocalDensity.current) { + actual fun getNavigationBarHeight(): Int { val resources = SpMp.context.ctx.resources val resource_id = resources.getIdentifier("navigation_bar_height", "dimen", "android") - if (resource_id > 0) resources.getDimensionPixelSize(resource_id).toDp() else 0.dp + return if (resource_id > 0) resources.getDimensionPixelSize(resource_id) else 0 } actual fun getLightColorScheme(): ColorScheme = diff --git a/shared/src/androidMain/kotlin/com/toasterofbread/spmp/platform/WebViewLogin.android.kt b/shared/src/androidMain/kotlin/com/toasterofbread/spmp/platform/WebViewLogin.android.kt index 358181ad5..26ef88d81 100644 --- a/shared/src/androidMain/kotlin/com/toasterofbread/spmp/platform/WebViewLogin.android.kt +++ b/shared/src/androidMain/kotlin/com/toasterofbread/spmp/platform/WebViewLogin.android.kt @@ -1,5 +1,6 @@ package com.toasterofbread.spmp.platform +import android.annotation.SuppressLint import android.graphics.Bitmap import android.os.Build import android.view.ViewGroup @@ -30,6 +31,7 @@ class WebResourceRequestReader(private val request: WebResourceRequest): WebView get() = request.requestHeaders } +@SuppressLint("SetJavaScriptEnabled") @Composable actual fun WebViewLogin( initial_url: String, @@ -52,7 +54,7 @@ actual fun WebViewLogin( if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { settings.isAlgorithmicDarkeningAllowed = is_dark } - else { + else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { @Suppress("DEPRECATION") settings.forceDark = if (is_dark) WebSettings.FORCE_DARK_ON else WebSettings.FORCE_DARK_OFF } diff --git a/shared/src/commonMain/kotlin/com/toasterofbread/spmp/platform/PlatformContext.kt b/shared/src/commonMain/kotlin/com/toasterofbread/spmp/platform/PlatformContext.kt index 30b0a6614..9664f88d5 100644 --- a/shared/src/commonMain/kotlin/com/toasterofbread/spmp/platform/PlatformContext.kt +++ b/shared/src/commonMain/kotlin/com/toasterofbread/spmp/platform/PlatformContext.kt @@ -5,6 +5,7 @@ import androidx.compose.foundation.layout.WindowInsets import androidx.compose.material3.ColorScheme import androidx.compose.runtime.Composable import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.text.font.Font import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.dp @@ -44,6 +45,11 @@ fun PlatformContext.getDefaultVerticalPadding(): Dp = if (isScreenLarge()) 30.dp @Composable fun PlatformContext.getDefaultPaddingValues(): PaddingValues = PaddingValues(horizontal = getDefaultHorizontalPadding(), vertical = getDefaultVerticalPadding()) +@Composable +fun PlatformContext.getNavigationBarHeightDp(): Dp = with(LocalDensity.current) { + getNavigationBarHeight().toDp() +} + expect class PlatformContext { val player_state: PlayerStateImpl @@ -62,8 +68,7 @@ expect class PlatformContext { fun getImeInsets(): WindowInsets? @Composable fun getSystemInsets(): WindowInsets? - @Composable - fun getNavigationBarHeight(): Dp + fun getNavigationBarHeight(): Int fun getLightColorScheme(): ColorScheme fun getDarkColorScheme(): ColorScheme diff --git a/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/component/MultiselectAndMusicTopBar.kt b/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/component/MultiselectAndMusicTopBar.kt index a7d813eb1..694aef77e 100644 --- a/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/component/MultiselectAndMusicTopBar.kt +++ b/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/component/MultiselectAndMusicTopBar.kt @@ -27,7 +27,7 @@ fun MultiselectAndMusicTopBar( modifier: Modifier = Modifier, padding: PaddingValues = PaddingValues(), show_wave_border: Boolean = true -): State { +): PaddingValues { val top_padding = padding.calculateTopPadding() var top_bar_showing by remember { mutableStateOf(false) } @@ -58,12 +58,8 @@ fun MultiselectAndMusicTopBar( val layout_direction = LocalLayoutDirection.current val out_top_padding by animateDpAsState(if (!top_bar_showing && !multiselect_context.is_active) top_padding else 0.dp) - return remember { - derivedStateOf { - padding.copy( - layout_direction, - top = out_top_padding - ) - } - } + return padding.copy( + layout_direction, + top = out_top_padding + ) } diff --git a/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/component/longpressmenu/LongPressMenuContent.kt b/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/component/longpressmenu/LongPressMenuContent.kt index b800b0307..d5a9533d1 100644 --- a/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/component/longpressmenu/LongPressMenuContent.kt +++ b/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/component/longpressmenu/LongPressMenuContent.kt @@ -54,6 +54,7 @@ import com.toasterofbread.spmp.model.mediaitem.Artist import com.toasterofbread.spmp.model.mediaitem.MediaItemPreviewParams import com.toasterofbread.spmp.model.mediaitem.MediaItemThumbnailProvider import com.toasterofbread.spmp.platform.composable.platformClickable +import com.toasterofbread.spmp.platform.getNavigationBarHeightDp import com.toasterofbread.spmp.platform.vibrateShort import com.toasterofbread.spmp.ui.component.MediaItemTitleEditDialog import com.toasterofbread.spmp.ui.layout.nowplaying.overlay.DEFAULT_THUMBNAIL_ROUNDING @@ -85,7 +86,7 @@ internal fun LongPressMenuContent( Box( Modifier - .requiredHeight(SpMp.context.getScreenHeight() + SpMp.context.getNavigationBarHeight()) + .requiredHeight(SpMp.context.getScreenHeight() + SpMp.context.getNavigationBarHeightDp()) .offset(y = -SpMp.context.getStatusBarHeight()) .background(Color.Black.setAlpha(0.5f)) ) { @@ -110,7 +111,7 @@ internal fun LongPressMenuContent( Column( modifier .background(Theme.current.background, shape) - .padding(bottom = SpMp.context.getNavigationBarHeight()) + .padding(bottom = SpMp.context.getNavigationBarHeightDp()) .fillMaxWidth() .onSizeChanged { if (show_info || !main_actions_showing) { diff --git a/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/SearchPage.kt b/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/SearchPage.kt index bfd0def5d..cef3cbefc 100644 --- a/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/SearchPage.kt +++ b/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/SearchPage.kt @@ -124,7 +124,7 @@ fun SearchPage( Box(Modifier.fillMaxSize()) { Column(Modifier.fillMaxSize()) { val horizontal_padding = SpMp.context.getDefaultHorizontalPadding() - val padding by MultiselectAndMusicTopBar( + val padding = MultiselectAndMusicTopBar( multiselect_context, Modifier.fillMaxWidth().zIndex(1f), padding = PaddingValues( diff --git a/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/mainpage/MainPage.kt b/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/mainpage/MainPage.kt index ced3b0b85..d49354a9d 100644 --- a/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/mainpage/MainPage.kt +++ b/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/mainpage/MainPage.kt @@ -135,7 +135,7 @@ fun MainPage( Modifier.graphicsLayer { alpha = state_alpha.value }, state = scroll_state, contentPadding = PaddingValues( - bottom = LocalPlayerState.current.bottom_padding, + bottom = LocalPlayerState.current.bottom_padding_dp, top = top_padding ), userScrollEnabled = !state_alpha.isRunning, @@ -211,7 +211,7 @@ fun MainPage( LibraryPage( pill_menu, - LocalPlayerState.current.bottom_padding, + LocalPlayerState.current.bottom_padding_dp, close = {}, inline = true, outer_multiselect_context = LocalPlayerState.current.main_multiselect_context, diff --git a/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/mainpage/PlayerState.kt b/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/mainpage/PlayerState.kt index eb629c0d5..b34667634 100644 --- a/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/mainpage/PlayerState.kt +++ b/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/mainpage/PlayerState.kt @@ -6,6 +6,7 @@ import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.unit.Dp import com.toasterofbread.spmp.PlayerService import com.toasterofbread.spmp.model.mediaitem.Artist @@ -96,7 +97,7 @@ open class PlayerState protected constructor( private val upstream: PlayerState? = null ) { open val overlay_page: Pair? get() = upstream!!.overlay_page - open val bottom_padding: Dp get() = upstream!!.bottom_padding + open val bottom_padding: Float get() = upstream!!.bottom_padding open val pill_menu: PillMenu get() = upstream!!.pill_menu open val main_multiselect_context: MediaItemMultiSelectContext get() = upstream!!.main_multiselect_context open val np_theme_mode: ThemeMode get() = upstream!!.np_theme_mode @@ -114,6 +115,11 @@ open class PlayerState protected constructor( open fun interactService(action: (player: PlayerService) -> Unit) { upstream!!.interactService(action) } open fun isRunningAndFocused(): Boolean = upstream!!.isRunningAndFocused() + val bottom_padding_dp: Dp + @Composable get() = with(LocalDensity.current) { + bottom_padding.toDp() + } + fun copy( onClickedOverride: ((item: MediaItem, multiselect_key: Int?) -> Unit)? = null, onLongClickedOverride: ((item: MediaItem, long_press_data: LongPressMenuData?) -> Unit)? = null @@ -195,8 +201,4 @@ open class PlayerState protected constructor( fun showLongPressMenu(item: MediaItem) { showLongPressMenu(LongPressMenuData(item)) } open fun hideLongPressMenu() { upstream!!.hideLongPressMenu() } - - // PlayerServiceHost - - } diff --git a/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/mainpage/PlayerStateImpl.kt b/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/mainpage/PlayerStateImpl.kt index f04fe2e84..ae522f528 100644 --- a/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/mainpage/PlayerStateImpl.kt +++ b/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/mainpage/PlayerStateImpl.kt @@ -183,9 +183,15 @@ class PlayerStateImpl(private val context: PlatformContext): PlayerState(null, n private var now_playing_switch_page: Int by mutableStateOf(-1) private val overlay_page_undo_stack: MutableList?> = mutableListOf() - private val bottom_padding_anim = Animatable(session_started.toFloat() * MINIMISED_NOW_PLAYING_HEIGHT) private var main_page_showing: Boolean by mutableStateOf(false) + @Composable + private fun getCurrentBottomPadding(): Float = + with(LocalDensity.current) { + (session_started.toFloat() * MINIMISED_NOW_PLAYING_HEIGHT_DP.dp.toPx()) + SpMp.context.getNavigationBarHeight() + } + private val bottom_padding_anim = Animatable(SpMp.context.getNavigationBarHeight().toFloat()) + private val low_memory_listener: () -> Unit private val prefs_listener: ProjectPreferences.Listener @@ -207,7 +213,7 @@ class PlayerStateImpl(private val context: PlatformContext): PlayerState(null, n override var overlay_page: Pair? by mutableStateOf(null) private set - override val bottom_padding: Dp get() = bottom_padding_anim.value.dp + override val bottom_padding: Float get() = bottom_padding_anim.value override val pill_menu = PillMenu( top = false, left = false @@ -297,7 +303,7 @@ class PlayerStateImpl(private val context: PlatformContext): PlayerState(null, n override fun nowPlayingTopOffset(base: Modifier): Modifier { val density = LocalDensity.current val screen_height = context.getScreenHeight() - val bottom_padding = context.getNavigationBarHeight() + val bottom_padding = context.getNavigationBarHeightDp() val keyboard_insets = SpMp.context.getImeInsets() return base.offset { @@ -314,10 +320,10 @@ class PlayerStateImpl(private val context: PlatformContext): PlayerState(null, n @Composable override fun nowPlayingBottomPadding(include_np: Boolean): Dp { if (include_np) { - val np by animateDpAsState(if (session_started) MINIMISED_NOW_PLAYING_HEIGHT.dp else 0.dp) - return context.getNavigationBarHeight() + np + val np by animateDpAsState(if (session_started) MINIMISED_NOW_PLAYING_HEIGHT_DP.dp else 0.dp) + return context.getNavigationBarHeightDp() + np } - return context.getNavigationBarHeight() + return context.getNavigationBarHeightDp() } override fun setOverlayPage(page: PlayerOverlayPage?, from_current: Boolean) { @@ -434,8 +440,9 @@ class PlayerStateImpl(private val context: PlatformContext): PlayerState(null, n @Composable fun NowPlaying() { - OnChangedEffect(session_started) { - bottom_padding_anim.animateTo(session_started.toFloat() * MINIMISED_NOW_PLAYING_HEIGHT) + val bottom_padding = getCurrentBottomPadding() + OnChangedEffect(bottom_padding) { + bottom_padding_anim.animateTo(bottom_padding) } val screen_height = context.getScreenHeight() @@ -445,7 +452,7 @@ class PlayerStateImpl(private val context: PlatformContext): PlayerState(null, n np_swipe_anchors = (0..NOW_PLAYING_VERTICAL_PAGE_COUNT) .associateBy { anchor -> - if (anchor == 0) MINIMISED_NOW_PLAYING_HEIGHT.toFloat() - half_screen_height + if (anchor == 0) MINIMISED_NOW_PLAYING_HEIGHT_DP.toFloat() - half_screen_height else ((screen_height).value * anchor) - half_screen_height } @@ -628,7 +635,7 @@ class PlayerStateImpl(private val context: PlatformContext): PlayerState(null, n page.first.getPage( pill_menu, page.second, - (if (session_started) MINIMISED_NOW_PLAYING_HEIGHT.dp else 0.dp) + 10.dp, + (if (session_started) MINIMISED_NOW_PLAYING_HEIGHT_DP.dp else 0.dp) + SpMp.context.getNavigationBarHeightDp(), close ) } diff --git a/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/mainpage/RootView.kt b/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/mainpage/RootView.kt index 6f73c896c..db33e2b6e 100644 --- a/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/mainpage/RootView.kt +++ b/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/mainpage/RootView.kt @@ -18,8 +18,8 @@ import androidx.compose.ui.Modifier import com.toasterofbread.spmp.ui.theme.Theme import com.toasterofbread.utils.modifier.background -const val MINIMISED_NOW_PLAYING_HEIGHT: Int = 64 -const val MINIMISED_NOW_PLAYING_V_PADDING: Int = 7 +const val MINIMISED_NOW_PLAYING_HEIGHT_DP: Int = 64 +const val MINIMISED_NOW_PLAYING_V_PADDING_DP: Int = 7 const val MEDIAITEM_PREVIEW_SQUARE_SIZE_SMALL: Float = 100f const val MEDIAITEM_PREVIEW_SQUARE_SIZE_LARGE: Float = 200f diff --git a/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/nowplaying/maintab/NowPlayingMainTab.kt b/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/nowplaying/maintab/NowPlayingMainTab.kt index 2de97dfcf..0095b9789 100644 --- a/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/nowplaying/maintab/NowPlayingMainTab.kt +++ b/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/nowplaying/maintab/NowPlayingMainTab.kt @@ -27,8 +27,8 @@ import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.times import com.toasterofbread.spmp.model.mediaitem.Song import com.toasterofbread.spmp.platform.composeScope -import com.toasterofbread.spmp.ui.layout.mainpage.MINIMISED_NOW_PLAYING_HEIGHT -import com.toasterofbread.spmp.ui.layout.mainpage.MINIMISED_NOW_PLAYING_V_PADDING +import com.toasterofbread.spmp.ui.layout.mainpage.MINIMISED_NOW_PLAYING_HEIGHT_DP +import com.toasterofbread.spmp.ui.layout.mainpage.MINIMISED_NOW_PLAYING_V_PADDING_DP import com.toasterofbread.spmp.ui.layout.nowplaying.LocalNowPlayingExpansion import com.toasterofbread.spmp.ui.layout.nowplaying.NOW_PLAYING_VERTICAL_PAGE_COUNT import com.toasterofbread.spmp.ui.layout.nowplaying.ThumbnailRow @@ -112,14 +112,14 @@ fun ColumnScope.NowPlayingMainTab() { ThumbnailRow( Modifier .padding( - top = MINIMISED_NOW_PLAYING_V_PADDING.dp + top = MINIMISED_NOW_PLAYING_V_PADDING_DP.dp * (1f - expansion.getBounded()) .coerceAtLeast(0f) ) .height( (expansion.getAbsolute() * (screen_width - (NOW_PLAYING_MAIN_PADDING.dp * 2))) .coerceAtLeast( - MINIMISED_NOW_PLAYING_HEIGHT.dp - (MINIMISED_NOW_PLAYING_V_PADDING.dp * 2) + MINIMISED_NOW_PLAYING_HEIGHT_DP.dp - (MINIMISED_NOW_PLAYING_V_PADDING_DP.dp * 2) ) ) .width( diff --git a/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/nowplaying/queue/NowPlayingQueueTab.kt b/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/nowplaying/queue/NowPlayingQueueTab.kt index 77f514d73..8b2f0c880 100644 --- a/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/nowplaying/queue/NowPlayingQueueTab.kt +++ b/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/nowplaying/queue/NowPlayingQueueTab.kt @@ -45,9 +45,8 @@ import com.toasterofbread.spmp.model.mediaitem.Song import com.toasterofbread.spmp.platform.MediaPlayerService import com.toasterofbread.spmp.ui.component.WaveBorder import com.toasterofbread.spmp.ui.component.multiselect.MediaItemMultiSelectContext -import com.toasterofbread.spmp.ui.layout.mainpage.MINIMISED_NOW_PLAYING_HEIGHT -import com.toasterofbread.spmp.ui.layout.mainpage.MINIMISED_NOW_PLAYING_V_PADDING -import com.toasterofbread.spmp.ui.layout.nowplaying.LocalNowPlayingExpansion +import com.toasterofbread.spmp.ui.layout.mainpage.MINIMISED_NOW_PLAYING_HEIGHT_DP +import com.toasterofbread.spmp.ui.layout.mainpage.MINIMISED_NOW_PLAYING_V_PADDING_DP import com.toasterofbread.spmp.ui.layout.nowplaying.LocalNowPlayingExpansion import com.toasterofbread.spmp.ui.layout.nowplaying.getNPAltOnBackground import com.toasterofbread.spmp.ui.layout.nowplaying.getNPBackground @@ -164,7 +163,7 @@ fun QueueTab(page_height: Dp, modifier: Modifier = Modifier) { // Add extra height for overscroll .requiredHeight(page_height + 200.dp) .requiredWidth(SpMp.context.getScreenWidth()) - .padding(top = MINIMISED_NOW_PLAYING_HEIGHT.dp + (SpMp.context.getStatusBarHeight() * 0.5f) + top_bar_height + MINIMISED_NOW_PLAYING_V_PADDING.dp) + .padding(top = MINIMISED_NOW_PLAYING_HEIGHT_DP.dp + (SpMp.context.getStatusBarHeight() * 0.5f) + top_bar_height + MINIMISED_NOW_PLAYING_V_PADDING_DP.dp) .background(queue_background_colour, shape) .clip(shape) ) { @@ -229,7 +228,7 @@ fun QueueTab(page_height: Dp, modifier: Modifier = Modifier) { item { Spacer(Modifier.height( - NOW_PLAYING_TOP_BAR_HEIGHT.dp + MINIMISED_NOW_PLAYING_HEIGHT.dp + list_position + list_padding + NOW_PLAYING_TOP_BAR_HEIGHT.dp + MINIMISED_NOW_PLAYING_HEIGHT_DP.dp + list_position + list_padding )) } } diff --git a/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/playlistpage/PlaylistPage.kt b/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/playlistpage/PlaylistPage.kt index 70ea38551..6d2e74b3b 100644 --- a/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/playlistpage/PlaylistPage.kt +++ b/shared/src/commonMain/kotlin/com/toasterofbread/spmp/ui/layout/playlistpage/PlaylistPage.kt @@ -26,6 +26,7 @@ import com.toasterofbread.spmp.api.getOrReport import com.toasterofbread.spmp.model.* import com.toasterofbread.spmp.model.mediaitem.* import com.toasterofbread.spmp.platform.getDefaultHorizontalPadding +import com.toasterofbread.spmp.platform.getDefaultVerticalPadding import com.toasterofbread.spmp.resources.getString import com.toasterofbread.spmp.resources.uilocalisation.durationToString import com.toasterofbread.spmp.ui.component.* @@ -72,7 +73,8 @@ fun PlaylistPage( var reorderable: Boolean by remember { mutableStateOf(false) } var current_filter: String? by remember { mutableStateOf(null) } var current_sort_option: SortOption by remember { mutableStateOf(SortOption.PLAYLIST) } - val top_padding = padding.calculateTopPadding() + val vertical_padding = SpMp.context.getDefaultVerticalPadding() + val top_padding = padding.calculateTopPadding() + vertical_padding LaunchedEffect(playlist) { accent_colour = null @@ -150,14 +152,15 @@ fun PlaylistPage( var editing_info by remember { mutableStateOf(false) } val horizontal_padding = SpMp.context.getDefaultHorizontalPadding() - val final_padding by MultiselectAndMusicTopBar( + val final_padding = MultiselectAndMusicTopBar( multiselect_context, Modifier.fillMaxWidth(), show_wave_border = false, padding = padding.copy( top = if (previous_item != null) 0.dp else top_padding, start = horizontal_padding, - end = horizontal_padding + end = horizontal_padding, + bottom = padding.calculateBottomPadding() + vertical_padding ) )