refactor: Use modifier instead of contentPadding for ScrollbarLazyColumn to support stickerHeader

This commit is contained in:
Cuong-Tran 2024-06-24 14:44:25 +07:00
parent b491ad4c5f
commit 1d5f906a06
No known key found for this signature in database
GPG key ID: 733AA7624B9315C2
4 changed files with 124 additions and 106 deletions

View file

@ -1,7 +1,6 @@
package eu.kanade.presentation.browse package eu.kanade.presentation.browse
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
@ -11,7 +10,6 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.Dp
import eu.kanade.presentation.browse.components.BaseSourceItem import eu.kanade.presentation.browse.components.BaseSourceItem
import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBar
import eu.kanade.presentation.more.settings.widget.SwitchPreferenceWidget import eu.kanade.presentation.more.settings.widget.SwitchPreferenceWidget
@ -53,22 +51,15 @@ fun SourcesFilterScreen(
) )
return@Scaffold return@Scaffold
} }
// KMK --> SourcesFilterContent(
// Wrap around so we can use sticky header contentPadding = contentPadding,
Column( state = state,
modifier = Modifier.padding(contentPadding) onClickLanguage = onClickLanguage,
) { onClickSource = onClickSource,
// KMK <-- // SY -->
SourcesFilterContent( onClickSources = onClickSources,
contentPadding = PaddingValues(Dp.Hairline), // SY <--
state = state, )
onClickLanguage = onClickLanguage,
onClickSource = onClickSource,
// SY -->
onClickSources = onClickSources,
// SY <--
)
}
} }
} }
@ -83,7 +74,10 @@ private fun SourcesFilterContent(
// SY <-- // SY <--
) { ) {
FastScrollLazyColumn( FastScrollLazyColumn(
contentPadding = contentPadding, // KMK -->
// Using modifier instead of contentPdding so we can use stickyHeader
modifier = Modifier.padding(contentPadding),
// KMK <--
) { ) {
state.items.forEach { (language, sources) -> state.items.forEach { (language, sources) ->
val enabled = language in state.enabledLanguages val enabled = language in state.enabledLanguages

View file

@ -107,6 +107,7 @@ fun SourcesScreen(
) )
// KMK --> // KMK -->
else -> Column( else -> Column(
// Wrap around so we can use stickyHeader
modifier = Modifier.padding(contentPadding), modifier = Modifier.padding(contentPadding),
) { ) {
AnimatedFloatingSearchBox( AnimatedFloatingSearchBox(

View file

@ -5,7 +5,6 @@ import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.WindowInsetsSides import androidx.compose.foundation.layout.WindowInsetsSides
import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.only
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.systemBars import androidx.compose.foundation.layout.systemBars
import androidx.compose.foundation.layout.windowInsetsPadding import androidx.compose.foundation.layout.windowInsetsPadding
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
@ -14,12 +13,9 @@ import androidx.compose.material.icons.automirrored.outlined.Label
import androidx.compose.material.icons.automirrored.outlined.PlaylistAdd import androidx.compose.material.icons.automirrored.outlined.PlaylistAdd
import androidx.compose.material.icons.outlined.CloudOff import androidx.compose.material.icons.outlined.CloudOff
import androidx.compose.material.icons.outlined.GetApp import androidx.compose.material.icons.outlined.GetApp
import androidx.compose.material.icons.outlined.HelpOutline
import androidx.compose.material.icons.outlined.History import androidx.compose.material.icons.outlined.History
import androidx.compose.material.icons.outlined.Info import androidx.compose.material.icons.outlined.Info
import androidx.compose.material.icons.outlined.Label
import androidx.compose.material.icons.outlined.NewReleases import androidx.compose.material.icons.outlined.NewReleases
import androidx.compose.material.icons.outlined.PlaylistAdd
import androidx.compose.material.icons.outlined.QueryStats import androidx.compose.material.icons.outlined.QueryStats
import androidx.compose.material.icons.outlined.Settings import androidx.compose.material.icons.outlined.Settings
import androidx.compose.material.icons.outlined.Storage import androidx.compose.material.icons.outlined.Storage
@ -87,7 +83,8 @@ fun MoreScreen(
}, },
) { contentPadding -> ) { contentPadding ->
ScrollbarLazyColumn( ScrollbarLazyColumn(
modifier = Modifier.padding(contentPadding), // KMK: use contentPadding as preferable padding for ScrollbarLazyColumn when not using stickyHeader
contentPadding = contentPadding,
) { ) {
item { item {
LogoHeader() LogoHeader()

View file

@ -2,7 +2,6 @@ package eu.kanade.tachiyomi.ui.manga
import androidx.annotation.ColorInt import androidx.annotation.ColorInt
import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
@ -19,6 +18,7 @@ import com.materialkolor.DynamicMaterialTheme
import eu.kanade.domain.ui.UiPreferences import eu.kanade.domain.ui.UiPreferences
import eu.kanade.presentation.components.AppBar import eu.kanade.presentation.components.AppBar
import eu.kanade.presentation.util.Screen import eu.kanade.presentation.util.Screen
import tachiyomi.presentation.core.components.ScrollbarLazyColumn
import tachiyomi.presentation.core.components.material.Button import tachiyomi.presentation.core.components.material.Button
import tachiyomi.presentation.core.components.material.ButtonDefaults import tachiyomi.presentation.core.components.material.ButtonDefaults
import tachiyomi.presentation.core.components.material.Scaffold import tachiyomi.presentation.core.components.material.Scaffold
@ -68,89 +68,115 @@ class PaletteScreen(
) )
}, },
) { contentPadding -> ) { contentPadding ->
Column( ScrollbarLazyColumn(
// Using modifier instead of contentPdding so we can use stickyHeader
modifier = Modifier.padding(contentPadding), modifier = Modifier.padding(contentPadding),
) { ) {
ButtonsColor( item {
"seedColor & onPrimary", ButtonsColor(
seedColor, "seedColor & onPrimary",
"seedColor & contentColor", seedColor,
seedColor, "seedColor & contentColor",
MaterialTheme.colorScheme.onPrimary, seedColor,
) MaterialTheme.colorScheme.onPrimary,
)
ButtonsColor( }
"primary", item {
MaterialTheme.colorScheme.primary, ButtonsColor(
"primaryContainer", "primary",
MaterialTheme.colorScheme.primaryContainer MaterialTheme.colorScheme.primary,
) "primaryContainer",
ButtonsColor( MaterialTheme.colorScheme.primaryContainer
"secondary", )
MaterialTheme.colorScheme.secondary, }
"secondaryContainer", item {
MaterialTheme.colorScheme.secondaryContainer ButtonsColor(
) "secondary",
ButtonsColor( MaterialTheme.colorScheme.secondary,
"tertiary", "secondaryContainer",
MaterialTheme.colorScheme.tertiary, MaterialTheme.colorScheme.secondaryContainer
"tertiaryContainer", )
MaterialTheme.colorScheme.tertiaryContainer }
) item {
ButtonsColor( ButtonsColor(
"surface", "tertiary",
MaterialTheme.colorScheme.surface, MaterialTheme.colorScheme.tertiary,
"surfaceVariant", "tertiaryContainer",
MaterialTheme.colorScheme.surfaceVariant MaterialTheme.colorScheme.tertiaryContainer
) )
ButtonsColor( }
"inverseSurface", item {
MaterialTheme.colorScheme.inverseSurface, ButtonsColor(
"surfaceTint", "surface",
MaterialTheme.colorScheme.surfaceTint MaterialTheme.colorScheme.surface,
) "surfaceVariant",
ButtonsColor( MaterialTheme.colorScheme.surfaceVariant
"inversePrimary", )
MaterialTheme.colorScheme.inversePrimary, }
"background", item {
MaterialTheme.colorScheme.background ButtonsColor(
) "inverseSurface",
ButtonsColor( MaterialTheme.colorScheme.inverseSurface,
"error", "surfaceTint",
MaterialTheme.colorScheme.error, MaterialTheme.colorScheme.surfaceTint
"errorContainer", )
MaterialTheme.colorScheme.errorContainer }
) item {
ButtonsColor( ButtonsColor(
"outline", "inversePrimary",
MaterialTheme.colorScheme.outline, MaterialTheme.colorScheme.inversePrimary,
"outlineVariant", "background",
MaterialTheme.colorScheme.outlineVariant MaterialTheme.colorScheme.background
) )
ButtonsColor( }
"scrim", item {
MaterialTheme.colorScheme.scrim, ButtonsColor(
"surfaceBright", "error",
MaterialTheme.colorScheme.surfaceBright MaterialTheme.colorScheme.error,
) "errorContainer",
ButtonsColor( MaterialTheme.colorScheme.errorContainer
"surfaceDim", )
MaterialTheme.colorScheme.surfaceDim, }
"surfaceContainer", item {
MaterialTheme.colorScheme.surfaceContainer ButtonsColor(
) "outline",
ButtonsColor( MaterialTheme.colorScheme.outline,
"surfaceContainerHigh", "outlineVariant",
MaterialTheme.colorScheme.surfaceContainerHigh, MaterialTheme.colorScheme.outlineVariant
"surfaceContainerHighest", )
MaterialTheme.colorScheme.surfaceContainerHighest }
) item {
ButtonsColor( ButtonsColor(
"surfaceContainerLow", "scrim",
MaterialTheme.colorScheme.surfaceContainerLow, MaterialTheme.colorScheme.scrim,
"surfaceContainerLowest", "surfaceBright",
MaterialTheme.colorScheme.surfaceContainerLowest MaterialTheme.colorScheme.surfaceBright
) )
}
item {
ButtonsColor(
"surfaceDim",
MaterialTheme.colorScheme.surfaceDim,
"surfaceContainer",
MaterialTheme.colorScheme.surfaceContainer
)
}
item {
ButtonsColor(
"surfaceContainerHigh",
MaterialTheme.colorScheme.surfaceContainerHigh,
"surfaceContainerHighest",
MaterialTheme.colorScheme.surfaceContainerHighest
)
}
item {
ButtonsColor(
"surfaceContainerLow",
MaterialTheme.colorScheme.surfaceContainerLow,
"surfaceContainerLowest",
MaterialTheme.colorScheme.surfaceContainerLowest
)
}
} }
} }
} }