Browse Source

Make top app bar lift behavior more consistent

arkon 2 năm trước cách đây
mục cha
commit
504844a892
22 tập tin đã thay đổi với 73 bổ sung90 xóa
  1. 2 1
      app/src/main/java/eu/kanade/presentation/browse/BrowseLatestScreen.kt
  2. 2 1
      app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt
  3. 2 3
      app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt
  4. 2 3
      app/src/main/java/eu/kanade/presentation/browse/ExtensionFilterScreen.kt
  5. 2 3
      app/src/main/java/eu/kanade/presentation/browse/MigrateMangaScreen.kt
  6. 2 3
      app/src/main/java/eu/kanade/presentation/browse/SourcesFilterScreen.kt
  7. 3 0
      app/src/main/java/eu/kanade/presentation/browse/components/BrowseLatestToolbar.kt
  8. 8 0
      app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt
  9. 2 4
      app/src/main/java/eu/kanade/presentation/category/CategoryScreen.kt
  10. 28 3
      app/src/main/java/eu/kanade/presentation/components/Scaffold.kt
  11. 0 2
      app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt
  12. 3 19
      app/src/main/java/eu/kanade/presentation/history/HistoryScreen.kt
  13. 1 15
      app/src/main/java/eu/kanade/presentation/library/LibraryScreen.kt
  14. 0 3
      app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt
  15. 2 4
      app/src/main/java/eu/kanade/presentation/more/MoreScreen.kt
  16. 2 3
      app/src/main/java/eu/kanade/presentation/more/about/AboutScreen.kt
  17. 2 3
      app/src/main/java/eu/kanade/presentation/more/about/LicensesScreen.kt
  18. 2 4
      app/src/main/java/eu/kanade/presentation/more/settings/SettingsMainScreen.kt
  19. 2 3
      app/src/main/java/eu/kanade/presentation/more/settings/SettingsSearchScreen.kt
  20. 2 1
      app/src/main/java/eu/kanade/presentation/more/settings/database/ClearDatabaseScreen.kt
  21. 3 0
      app/src/main/java/eu/kanade/presentation/more/settings/database/components/ClearDatabaseToolbar.kt
  22. 1 12
      app/src/main/java/eu/kanade/presentation/updates/UpdatesScreen.kt

+ 2 - 1
app/src/main/java/eu/kanade/presentation/browse/BrowseLatestScreen.kt

@@ -38,7 +38,7 @@ fun BrowseLatestScreen(
     }
 
     Scaffold(
-        topBar = {
+        topBar = { scrollBehavior ->
             BrowseLatestToolbar(
                 navigateUp = navigateUp,
                 source = presenter.source!!,
@@ -46,6 +46,7 @@ fun BrowseLatestScreen(
                 onDisplayModeChange = { presenter.displayMode = it },
                 onHelpClick = onHelpClick,
                 onWebViewClick = onWebViewClick,
+                scrollBehavior = scrollBehavior,
             )
         },
     ) { paddingValues ->

+ 2 - 1
app/src/main/java/eu/kanade/presentation/browse/BrowseSourceScreen.kt

@@ -71,7 +71,7 @@ fun BrowseSourceScreen(
     }
 
     Scaffold(
-        topBar = {
+        topBar = { scrollBehavior ->
             BrowseSourceToolbar(
                 state = presenter,
                 source = presenter.source!!,
@@ -81,6 +81,7 @@ fun BrowseSourceScreen(
                 onWebViewClick = onWebViewClick,
                 onHelpClick = onHelpClick,
                 onSearch = { presenter.search() },
+                scrollBehavior = scrollBehavior,
             )
         },
         floatingActionButton = {

+ 2 - 3
app/src/main/java/eu/kanade/presentation/browse/ExtensionDetailsScreen.kt

@@ -21,7 +21,6 @@ import androidx.compose.foundation.layout.height
 import androidx.compose.foundation.layout.navigationBars
 import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.layout.statusBarsPadding
 import androidx.compose.foundation.layout.width
 import androidx.compose.foundation.lazy.items
 import androidx.compose.material.icons.Icons
@@ -80,8 +79,7 @@ fun ExtensionDetailsScreen(
     val uriHandler = LocalUriHandler.current
 
     Scaffold(
-        modifier = Modifier.statusBarsPadding(),
-        topBar = {
+        topBar = { scrollBehavior ->
             AppBar(
                 title = stringResource(R.string.label_extension_info),
                 navigateUp = navigateUp,
@@ -123,6 +121,7 @@ fun ExtensionDetailsScreen(
                         },
                     )
                 },
+                scrollBehavior = scrollBehavior,
             )
         },
     ) { paddingValues ->

+ 2 - 3
app/src/main/java/eu/kanade/presentation/browse/ExtensionFilterScreen.kt

@@ -4,7 +4,6 @@ import androidx.compose.foundation.layout.PaddingValues
 import androidx.compose.foundation.layout.WindowInsets
 import androidx.compose.foundation.layout.asPaddingValues
 import androidx.compose.foundation.layout.navigationBars
-import androidx.compose.foundation.layout.statusBarsPadding
 import androidx.compose.foundation.lazy.items
 import androidx.compose.material3.Switch
 import androidx.compose.runtime.Composable
@@ -32,11 +31,11 @@ fun ExtensionFilterScreen(
 ) {
     val context = LocalContext.current
     Scaffold(
-        modifier = Modifier.statusBarsPadding(),
-        topBar = {
+        topBar = { scrollBehavior ->
             AppBar(
                 title = stringResource(R.string.label_extensions),
                 navigateUp = navigateUp,
+                scrollBehavior = scrollBehavior,
             )
         },
     ) { paddingValues ->

+ 2 - 3
app/src/main/java/eu/kanade/presentation/browse/MigrateMangaScreen.kt

@@ -4,7 +4,6 @@ import androidx.compose.foundation.layout.PaddingValues
 import androidx.compose.foundation.layout.WindowInsets
 import androidx.compose.foundation.layout.asPaddingValues
 import androidx.compose.foundation.layout.navigationBars
-import androidx.compose.foundation.layout.statusBarsPadding
 import androidx.compose.foundation.lazy.items
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.LaunchedEffect
@@ -34,11 +33,11 @@ fun MigrateMangaScreen(
 ) {
     val context = LocalContext.current
     Scaffold(
-        modifier = Modifier.statusBarsPadding(),
-        topBar = {
+        topBar = { scrollBehavior ->
             AppBar(
                 title = title,
                 navigateUp = navigateUp,
+                scrollBehavior = scrollBehavior,
             )
         },
     ) { paddingValues ->

+ 2 - 3
app/src/main/java/eu/kanade/presentation/browse/SourcesFilterScreen.kt

@@ -4,7 +4,6 @@ import androidx.compose.foundation.layout.PaddingValues
 import androidx.compose.foundation.layout.WindowInsets
 import androidx.compose.foundation.layout.asPaddingValues
 import androidx.compose.foundation.layout.navigationBars
-import androidx.compose.foundation.layout.statusBarsPadding
 import androidx.compose.foundation.lazy.items
 import androidx.compose.material3.Checkbox
 import androidx.compose.material3.Switch
@@ -38,11 +37,11 @@ fun SourcesFilterScreen(
 ) {
     val context = LocalContext.current
     Scaffold(
-        modifier = Modifier.statusBarsPadding(),
-        topBar = {
+        topBar = { scrollBehavior ->
             AppBar(
                 title = stringResource(R.string.label_sources),
                 navigateUp = navigateUp,
+                scrollBehavior = scrollBehavior,
             )
         },
     ) { paddingValues ->

+ 3 - 0
app/src/main/java/eu/kanade/presentation/browse/components/BrowseLatestToolbar.kt

@@ -9,6 +9,7 @@ import androidx.compose.material.icons.outlined.ViewModule
 import androidx.compose.material3.DropdownMenuItem
 import androidx.compose.material3.Icon
 import androidx.compose.material3.Text
+import androidx.compose.material3.TopAppBarScrollBehavior
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.getValue
 import androidx.compose.runtime.mutableStateOf
@@ -31,6 +32,7 @@ fun BrowseLatestToolbar(
     onDisplayModeChange: (LibraryDisplayMode) -> Unit,
     onHelpClick: () -> Unit,
     onWebViewClick: () -> Unit,
+    scrollBehavior: TopAppBarScrollBehavior,
 ) {
     AppBar(
         navigateUp = navigateUp,
@@ -101,5 +103,6 @@ fun BrowseLatestToolbar(
                 )
             }
         },
+        scrollBehavior = scrollBehavior,
     )
 }

+ 8 - 0
app/src/main/java/eu/kanade/presentation/browse/components/BrowseSourceToolbar.kt

@@ -15,6 +15,7 @@ import androidx.compose.material3.DropdownMenuItem
 import androidx.compose.material3.Icon
 import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.Text
+import androidx.compose.material3.TopAppBarScrollBehavior
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.getValue
@@ -47,6 +48,7 @@ fun BrowseSourceToolbar(
     onWebViewClick: () -> Unit,
     onHelpClick: () -> Unit,
     onSearch: () -> Unit,
+    scrollBehavior: TopAppBarScrollBehavior,
 ) {
     if (state.searchQuery == null) {
         BrowseSourceRegularToolbar(
@@ -57,6 +59,7 @@ fun BrowseSourceToolbar(
             onSearchClick = { state.searchQuery = "" },
             onWebViewClick = onWebViewClick,
             onHelpClick = onHelpClick,
+            scrollBehavior = scrollBehavior,
         )
     } else {
         BrowseSourceSearchToolbar(
@@ -68,6 +71,7 @@ fun BrowseSourceToolbar(
             },
             onResetClick = { state.searchQuery = "" },
             onSearchClick = onSearch,
+            scrollBehavior = scrollBehavior,
         )
     }
 }
@@ -81,6 +85,7 @@ fun BrowseSourceRegularToolbar(
     onSearchClick: () -> Unit,
     onWebViewClick: () -> Unit,
     onHelpClick: () -> Unit,
+    scrollBehavior: TopAppBarScrollBehavior,
 ) {
     AppBar(
         navigateUp = navigateUp,
@@ -156,6 +161,7 @@ fun BrowseSourceRegularToolbar(
                 )
             }
         },
+        scrollBehavior = scrollBehavior,
     )
 }
 
@@ -166,6 +172,7 @@ fun BrowseSourceSearchToolbar(
     navigateUp: () -> Unit,
     onResetClick: () -> Unit,
     onSearchClick: () -> Unit,
+    scrollBehavior: TopAppBarScrollBehavior,
 ) {
     val focusRequester = remember { FocusRequester() }
     AppBar(
@@ -197,6 +204,7 @@ fun BrowseSourceSearchToolbar(
                 ),
             )
         },
+        scrollBehavior = scrollBehavior,
     )
     LaunchedEffect(Unit) {
         // TODO: https://issuetracker.google.com/issues/204502668

+ 2 - 4
app/src/main/java/eu/kanade/presentation/category/CategoryScreen.kt

@@ -1,11 +1,9 @@
 package eu.kanade.presentation.category
 
 import androidx.compose.foundation.layout.PaddingValues
-import androidx.compose.foundation.layout.statusBarsPadding
 import androidx.compose.foundation.lazy.rememberLazyListState
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.LaunchedEffect
-import androidx.compose.ui.Modifier
 import androidx.compose.ui.platform.LocalContext
 import androidx.compose.ui.res.stringResource
 import eu.kanade.presentation.category.components.CategoryContent
@@ -33,11 +31,11 @@ fun CategoryScreen(
 ) {
     val lazyListState = rememberLazyListState()
     Scaffold(
-        modifier = Modifier.statusBarsPadding(),
-        topBar = {
+        topBar = { scrollBehavior ->
             AppBar(
                 title = stringResource(R.string.action_edit_categories),
                 navigateUp = navigateUp,
+                scrollBehavior = scrollBehavior,
             )
         },
         floatingActionButton = {

+ 28 - 3
app/src/main/java/eu/kanade/presentation/components/Scaffold.kt

@@ -17,6 +17,12 @@
 package eu.kanade.presentation.components
 
 import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.WindowInsets
+import androidx.compose.foundation.layout.WindowInsetsSides
+import androidx.compose.foundation.layout.asPaddingValues
+import androidx.compose.foundation.layout.navigationBars
+import androidx.compose.foundation.layout.only
+import androidx.compose.foundation.layout.padding
 import androidx.compose.material3.ExperimentalMaterial3Api
 import androidx.compose.material3.FloatingActionButton
 import androidx.compose.material3.LocalContentColor
@@ -27,13 +33,17 @@ import androidx.compose.material3.Snackbar
 import androidx.compose.material3.SnackbarHost
 import androidx.compose.material3.SnackbarHostState
 import androidx.compose.material3.Surface
+import androidx.compose.material3.TopAppBarDefaults
+import androidx.compose.material3.TopAppBarScrollBehavior
 import androidx.compose.material3.contentColorFor
+import androidx.compose.material3.rememberTopAppBarState
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.CompositionLocalProvider
 import androidx.compose.runtime.Immutable
 import androidx.compose.runtime.staticCompositionLocalOf
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.input.nestedscroll.nestedScroll
 import androidx.compose.ui.layout.SubcomposeLayout
 import androidx.compose.ui.unit.Constraints
 import androidx.compose.ui.unit.LayoutDirection
@@ -81,7 +91,7 @@ import androidx.compose.ui.unit.dp
 @Composable
 fun Scaffold(
     modifier: Modifier = Modifier,
-    topBar: @Composable () -> Unit = {},
+    topBar: @Composable (TopAppBarScrollBehavior) -> Unit = {},
     bottomBar: @Composable () -> Unit = {},
     snackbarHost: @Composable () -> Unit = {},
     floatingActionButton: @Composable () -> Unit = {},
@@ -90,10 +100,25 @@ fun Scaffold(
     contentColor: Color = contentColorFor(containerColor),
     content: @Composable (PaddingValues) -> Unit,
 ) {
-    Surface(modifier = modifier, color = containerColor, contentColor = contentColor) {
+    /**
+     * Tachiyomi: always handle insets and pass scroll behavior to topBar
+     */
+    val insetPaddingValue = WindowInsets.navigationBars
+        .only(WindowInsetsSides.Horizontal + WindowInsetsSides.Bottom)
+        .asPaddingValues()
+    val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
+
+    Surface(
+        modifier = Modifier
+            .padding(insetPaddingValue)
+            .nestedScroll(scrollBehavior.nestedScrollConnection)
+            .then(modifier),
+        color = containerColor,
+        contentColor = contentColor,
+    ) {
         ScaffoldLayout(
             fabPosition = floatingActionButtonPosition,
-            topBar = topBar,
+            topBar = { topBar(scrollBehavior) },
             bottomBar = bottomBar,
             content = content,
             snackbar = snackbarHost,

+ 0 - 2
app/src/main/java/eu/kanade/presentation/components/TabbedScreen.kt

@@ -4,7 +4,6 @@ import androidx.annotation.StringRes
 import androidx.compose.foundation.layout.Column
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.statusBarsPadding
 import androidx.compose.material3.Tab
 import androidx.compose.material3.TabRow
 import androidx.compose.runtime.Composable
@@ -33,7 +32,6 @@ fun TabbedScreen(
     }
 
     Scaffold(
-        modifier = Modifier.statusBarsPadding(),
         topBar = {
             AppBar(
                 title = stringResource(titleRes),

+ 3 - 19
app/src/main/java/eu/kanade/presentation/history/HistoryScreen.kt

@@ -1,23 +1,13 @@
 package eu.kanade.presentation.history
 
-import androidx.compose.foundation.layout.WindowInsets
-import androidx.compose.foundation.layout.WindowInsetsSides
-import androidx.compose.foundation.layout.asPaddingValues
-import androidx.compose.foundation.layout.navigationBars
-import androidx.compose.foundation.layout.only
-import androidx.compose.foundation.layout.padding
-import androidx.compose.material3.Scaffold
-import androidx.compose.material3.TopAppBarDefaults
-import androidx.compose.material3.rememberTopAppBarState
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.LaunchedEffect
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.input.nestedscroll.nestedScroll
 import androidx.compose.ui.platform.LocalContext
 import androidx.paging.LoadState
 import eu.kanade.domain.history.model.HistoryWithRelations
 import eu.kanade.presentation.components.EmptyScreen
 import eu.kanade.presentation.components.LoadingScreen
+import eu.kanade.presentation.components.Scaffold
 import eu.kanade.presentation.history.components.HistoryContent
 import eu.kanade.presentation.history.components.HistoryDeleteAllDialog
 import eu.kanade.presentation.history.components.HistoryDeleteDialog
@@ -38,15 +28,9 @@ fun HistoryScreen(
     onClickResume: (HistoryWithRelations) -> Unit,
 ) {
     val context = LocalContext.current
-    val insetPaddingValue = WindowInsets.navigationBars
-        .only(WindowInsetsSides.Horizontal + WindowInsetsSides.Bottom)
-        .asPaddingValues()
-    val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
+
     Scaffold(
-        modifier = Modifier
-            .padding(insetPaddingValue)
-            .nestedScroll(scrollBehavior.nestedScrollConnection),
-        topBar = {
+        topBar = { scrollBehavior ->
             HistoryToolbar(
                 state = presenter,
                 incognitoMode = presenter.isIncognitoMode,

+ 1 - 15
app/src/main/java/eu/kanade/presentation/library/LibraryScreen.kt

@@ -1,17 +1,8 @@
 package eu.kanade.presentation.library
 
 import androidx.compose.animation.Crossfade
-import androidx.compose.foundation.layout.WindowInsets
-import androidx.compose.foundation.layout.WindowInsetsSides
-import androidx.compose.foundation.layout.navigationBars
-import androidx.compose.foundation.layout.only
-import androidx.compose.foundation.layout.windowInsetsPadding
-import androidx.compose.material3.TopAppBarDefaults
-import androidx.compose.material3.rememberTopAppBarState
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.getValue
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.input.nestedscroll.nestedScroll
 import eu.kanade.domain.category.model.Category
 import eu.kanade.presentation.components.LibraryBottomActionMenu
 import eu.kanade.presentation.components.LoadingScreen
@@ -37,16 +28,11 @@ fun LibraryScreen(
     onClickFilter: () -> Unit,
     onClickRefresh: (Category?) -> Boolean,
 ) {
-    val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
-    val insets = WindowInsets.navigationBars.only(WindowInsetsSides.Horizontal)
     Crossfade(targetState = presenter.isLoading) { state ->
         when (state) {
             true -> LoadingScreen()
             false -> Scaffold(
-                modifier = Modifier
-                    .windowInsetsPadding(insets)
-                    .nestedScroll(scrollBehavior.nestedScrollConnection),
-                topBar = {
+                topBar = { scrollBehavior ->
                     val title by presenter.getToolbarTitle()
                     val tabVisible = presenter.tabVisibility && presenter.categories.size > 1
                     LibraryToolbar(

+ 0 - 3
app/src/main/java/eu/kanade/presentation/manga/MangaScreen.kt

@@ -210,7 +210,6 @@ private fun MangaScreenSmallImpl(
     val layoutDirection = LocalLayoutDirection.current
     val chapterListState = rememberLazyListState()
 
-    val insetPadding = WindowInsets.systemBars.only(WindowInsetsSides.Horizontal).asPaddingValues()
     val chapters = remember(state) { state.processedChapters.toList() }
 
     val internalOnBackPressed = {
@@ -223,8 +222,6 @@ private fun MangaScreenSmallImpl(
     BackHandler(onBack = internalOnBackPressed)
 
     Scaffold(
-        modifier = Modifier
-            .padding(insetPadding),
         topBar = {
             val firstVisibleItemIndex by remember {
                 derivedStateOf { chapterListState.firstVisibleItemIndex }

+ 2 - 4
app/src/main/java/eu/kanade/presentation/more/MoreScreen.kt

@@ -3,7 +3,6 @@ package eu.kanade.presentation.more
 import androidx.compose.foundation.layout.WindowInsets
 import androidx.compose.foundation.layout.asPaddingValues
 import androidx.compose.foundation.layout.navigationBars
-import androidx.compose.foundation.layout.statusBarsPadding
 import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.outlined.CloudOff
 import androidx.compose.material.icons.outlined.GetApp
@@ -15,7 +14,6 @@ import androidx.compose.material.icons.outlined.SettingsBackupRestore
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.collectAsState
 import androidx.compose.runtime.getValue
-import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.vector.rememberVectorPainter
 import androidx.compose.ui.platform.LocalUriHandler
 import androidx.compose.ui.res.painterResource
@@ -47,12 +45,12 @@ fun MoreScreen(
     val downloadQueueState by presenter.downloadQueueState.collectAsState()
 
     Scaffold(
-        modifier = Modifier.statusBarsPadding(),
-        topBar = {
+        topBar = { scrollBehavior ->
             AppBar(
                 title = stringResource(R.string.label_more),
                 downloadedOnlyMode = presenter.downloadedOnly.value,
                 incognitoMode = presenter.incognitoMode.value,
+                scrollBehavior = scrollBehavior,
             )
         },
     ) { paddingValues ->

+ 2 - 3
app/src/main/java/eu/kanade/presentation/more/about/AboutScreen.kt

@@ -6,7 +6,6 @@ import androidx.compose.foundation.layout.WindowInsets
 import androidx.compose.foundation.layout.asPaddingValues
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.navigationBars
-import androidx.compose.foundation.layout.statusBarsPadding
 import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.outlined.Public
 import androidx.compose.runtime.Composable
@@ -40,11 +39,11 @@ fun AboutScreen(
     val uriHandler = LocalUriHandler.current
 
     Scaffold(
-        modifier = Modifier.statusBarsPadding(),
-        topBar = {
+        topBar = { scrollBehavior ->
             AppBar(
                 title = stringResource(R.string.pref_category_about),
                 navigateUp = navigateUp,
+                scrollBehavior = scrollBehavior,
             )
         },
     ) { paddingValues ->

+ 2 - 3
app/src/main/java/eu/kanade/presentation/more/about/LicensesScreen.kt

@@ -4,7 +4,6 @@ import androidx.compose.foundation.layout.WindowInsets
 import androidx.compose.foundation.layout.asPaddingValues
 import androidx.compose.foundation.layout.fillMaxSize
 import androidx.compose.foundation.layout.navigationBars
-import androidx.compose.foundation.layout.statusBarsPadding
 import androidx.compose.material3.MaterialTheme
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Modifier
@@ -21,11 +20,11 @@ fun LicensesScreen(
     navigateUp: () -> Unit,
 ) {
     Scaffold(
-        modifier = Modifier.statusBarsPadding(),
-        topBar = {
+        topBar = { scrollBehavior ->
             AppBar(
                 title = stringResource(R.string.licenses),
                 navigateUp = navigateUp,
+                scrollBehavior = scrollBehavior,
             )
         },
     ) { paddingValues ->

+ 2 - 4
app/src/main/java/eu/kanade/presentation/more/settings/SettingsMainScreen.kt

@@ -4,11 +4,9 @@ import androidx.annotation.StringRes
 import androidx.compose.foundation.layout.WindowInsets
 import androidx.compose.foundation.layout.asPaddingValues
 import androidx.compose.foundation.layout.navigationBars
-import androidx.compose.foundation.layout.statusBarsPadding
 import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.outlined.Search
 import androidx.compose.runtime.Composable
-import androidx.compose.ui.Modifier
 import androidx.compose.ui.graphics.painter.Painter
 import androidx.compose.ui.res.stringResource
 import eu.kanade.presentation.components.AppBar
@@ -26,8 +24,7 @@ fun SettingsMainScreen(
     onClickSearch: () -> Unit,
 ) {
     Scaffold(
-        modifier = Modifier.statusBarsPadding(),
-        topBar = {
+        topBar = { scrollBehavior ->
             AppBar(
                 title = stringResource(R.string.label_settings),
                 navigateUp = navigateUp,
@@ -42,6 +39,7 @@ fun SettingsMainScreen(
                         ),
                     )
                 },
+                scrollBehavior = scrollBehavior,
             )
         },
     ) { paddingValues ->

+ 2 - 3
app/src/main/java/eu/kanade/presentation/more/settings/SettingsSearchScreen.kt

@@ -7,7 +7,6 @@ import androidx.compose.foundation.layout.asPaddingValues
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.navigationBars
 import androidx.compose.foundation.layout.padding
-import androidx.compose.foundation.layout.statusBarsPadding
 import androidx.compose.foundation.lazy.items
 import androidx.compose.material3.MaterialTheme
 import androidx.compose.material3.Text
@@ -39,8 +38,7 @@ fun SettingsSearchScreen(
     var query by remember { mutableStateOf("") }
 
     Scaffold(
-        modifier = Modifier.statusBarsPadding(),
-        topBar = {
+        topBar = { scrollBehavior ->
             SearchToolbar(
                 searchQuery = query,
                 onChangeSearchQuery = {
@@ -49,6 +47,7 @@ fun SettingsSearchScreen(
                 },
                 onClickCloseSearch = navigateUp,
                 onClickResetSearch = { query = "" },
+                scrollBehavior = scrollBehavior,
             )
 
             // TODO: search placeholder

+ 2 - 1
app/src/main/java/eu/kanade/presentation/more/settings/database/ClearDatabaseScreen.kt

@@ -19,12 +19,13 @@ fun ClearDatabaseScreen(
 ) {
     val context = LocalContext.current
     Scaffold(
-        topBar = {
+        topBar = { scrollBehavior ->
             ClearDatabaseToolbar(
                 state = presenter,
                 navigateUp = navigateUp,
                 onClickSelectAll = { presenter.selectAll() },
                 onClickInvertSelection = { presenter.invertSelection() },
+                scrollBehavior = scrollBehavior,
             )
         },
         floatingActionButton = {

+ 3 - 0
app/src/main/java/eu/kanade/presentation/more/settings/database/components/ClearDatabaseToolbar.kt

@@ -3,6 +3,7 @@ package eu.kanade.presentation.more.settings.database.components
 import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.outlined.FlipToBack
 import androidx.compose.material.icons.outlined.SelectAll
+import androidx.compose.material3.TopAppBarScrollBehavior
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.res.stringResource
 import eu.kanade.presentation.components.AppBar
@@ -16,6 +17,7 @@ fun ClearDatabaseToolbar(
     navigateUp: () -> Unit,
     onClickSelectAll: () -> Unit,
     onClickInvertSelection: () -> Unit,
+    scrollBehavior: TopAppBarScrollBehavior,
 ) {
     AppBar(
         title = stringResource(R.string.pref_clear_database),
@@ -38,5 +40,6 @@ fun ClearDatabaseToolbar(
                 )
             }
         },
+        scrollBehavior = scrollBehavior,
     )
 }

+ 1 - 12
app/src/main/java/eu/kanade/presentation/updates/UpdatesScreen.kt

@@ -10,7 +10,6 @@ import androidx.compose.foundation.layout.fillMaxHeight
 import androidx.compose.foundation.layout.fillMaxWidth
 import androidx.compose.foundation.layout.navigationBars
 import androidx.compose.foundation.layout.only
-import androidx.compose.foundation.layout.padding
 import androidx.compose.foundation.lazy.rememberLazyListState
 import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.filled.FlipToBack
@@ -18,9 +17,7 @@ import androidx.compose.material.icons.filled.Refresh
 import androidx.compose.material.icons.filled.SelectAll
 import androidx.compose.material3.Icon
 import androidx.compose.material3.IconButton
-import androidx.compose.material3.TopAppBarDefaults
 import androidx.compose.material3.TopAppBarScrollBehavior
-import androidx.compose.material3.rememberTopAppBarState
 import androidx.compose.runtime.Composable
 import androidx.compose.runtime.LaunchedEffect
 import androidx.compose.runtime.getValue
@@ -29,7 +26,6 @@ import androidx.compose.runtime.remember
 import androidx.compose.runtime.rememberCoroutineScope
 import androidx.compose.runtime.setValue
 import androidx.compose.ui.Modifier
-import androidx.compose.ui.input.nestedscroll.nestedScroll
 import androidx.compose.ui.platform.LocalContext
 import androidx.compose.ui.platform.LocalLayoutDirection
 import androidx.compose.ui.res.stringResource
@@ -67,9 +63,6 @@ fun UpdateScreen(
     onDownloadChapter: (List<UpdatesItem>, ChapterDownloadAction) -> Unit,
 ) {
     val updatesListState = rememberLazyListState()
-    val insetPaddingValue = WindowInsets.navigationBars
-        .only(WindowInsetsSides.Horizontal)
-        .asPaddingValues()
 
     val internalOnBackPressed = {
         if (presenter.selectionMode) {
@@ -88,12 +81,8 @@ fun UpdateScreen(
         started
     }
 
-    val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
     Scaffold(
-        modifier = Modifier
-            .padding(insetPaddingValue)
-            .nestedScroll(scrollBehavior.nestedScrollConnection),
-        topBar = {
+        topBar = { scrollBehavior ->
             UpdatesAppBar(
                 incognitoMode = presenter.isIncognitoMode,
                 downloadedOnlyMode = presenter.isDownloadOnly,