From b83e0fd092ccb5b3fff317ac62a6daf0a305ba70 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Sun, 21 Apr 2024 00:37:41 +0800 Subject: [PATCH] Workaround for lazy layout lagging (#1042) --- .../kotlin/com/hippo/ehviewer/ui/MainActivity.kt | 2 +- .../com/hippo/ehviewer/ui/screen/DownloadsScreen.kt | 11 ++++------- .../ehviewer/ui/screen/GalleryCommentsScreen.kt | 5 ++++- .../hippo/ehviewer/ui/screen/GalleryListScreen.kt | 12 +++--------- 4 files changed, 12 insertions(+), 18 deletions(-) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt index ab0156cac..305a71b7e 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/MainActivity.kt @@ -422,7 +422,7 @@ class MainActivity : EhActivity() { ModalDrawerSheet( modifier = Modifier.widthIn(max = (configuration.screenWidthDp - 112).dp), drawerShape = ShapeDefaults.Large.copy(topEnd = CornerSize(0), bottomEnd = CornerSize(0)), - windowInsets = WindowInsets.systemBars.only(WindowInsetsSides.Top + WindowInsetsSides.End), + windowInsets = WindowInsets.systemBars.only(WindowInsetsSides.Vertical + WindowInsetsSides.End), ) { CompositionLocalProvider(LocalViewConfiguration provides viewConfiguration) { sheet(sideSheetState) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/DownloadsScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/DownloadsScreen.kt index bd95c981f..13562f768 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/DownloadsScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/DownloadsScreen.kt @@ -10,15 +10,11 @@ import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.WindowInsets -import androidx.compose.foundation.layout.WindowInsetsSides -import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.calculateEndPadding import androidx.compose.foundation.layout.calculateStartPadding import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.systemBars import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.itemsIndexed @@ -245,9 +241,10 @@ fun DownloadsScreen(navigator: DestinationsNavigator) = composing(navigator) { LazyColumn( modifier = Modifier.fillMaxSize(), state = labelsListState, - contentPadding = WindowInsets.systemBars.only(WindowInsetsSides.Bottom).asPaddingValues(), + // Workaround for https://issuetracker.google.com/332939169 + // contentPadding = WindowInsets.systemBars.only(WindowInsetsSides.Bottom).asPaddingValues(), ) { - stickyHeader { + item { ListItem( modifier = Modifier.clickable { switchLabel("") @@ -260,7 +257,7 @@ fun DownloadsScreen(navigator: DestinationsNavigator) = composing(navigator) { }, ) } - stickyHeader { + item { ListItem( modifier = Modifier.clickable { switchLabel(null) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryCommentsScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryCommentsScreen.kt index ca1c33241..795dfef2c 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryCommentsScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryCommentsScreen.kt @@ -303,10 +303,13 @@ fun GalleryCommentsScreen(gid: Long, navigator: DestinationsNavigator) = composi modifier = Modifier.padding(horizontal = keylineMargin), verticalArrangement = Arrangement.spacedBy(8.dp), contentPadding = PaddingValues( - top = paddingValues.calculateTopPadding(), + // top = paddingValues.calculateTopPadding(), bottom = paddingValues.calculateBottomPadding() + additionalPadding, ), ) { + item { + Spacer(modifier = Modifier.height(paddingValues.calculateTopPadding())) + } items( items = comments.comments, key = { it.id }, diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryListScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryListScreen.kt index 1ecc89dff..37c8e5462 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryListScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/screen/GalleryListScreen.kt @@ -10,16 +10,12 @@ import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.WindowInsets -import androidx.compose.foundation.layout.WindowInsetsSides -import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.calculateEndPadding import androidx.compose.foundation.layout.calculateStartPadding import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height -import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.systemBars import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.grid.rememberLazyGridState import androidx.compose.foundation.lazy.itemsIndexed @@ -37,7 +33,6 @@ import androidx.compose.material.icons.filled.Shuffle import androidx.compose.material.icons.outlined.Bookmarks import androidx.compose.material3.ElevatedCard import androidx.compose.material3.FloatingActionButton -import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.ListItem @@ -377,12 +372,11 @@ fun GalleryListScreen(lub: ListUrlBuilder, navigator: DestinationsNavigator) = c LazyColumn( modifier = Modifier.fillMaxSize(), state = quickSearchListState, - contentPadding = WindowInsets.systemBars.only(WindowInsetsSides.Bottom).asPaddingValues(), + // Workaround for https://issuetracker.google.com/332939169 + // contentPadding = WindowInsets.systemBars.only(WindowInsetsSides.Bottom).asPaddingValues(), ) { // Fix the first item's reorder animation - stickyHeader { - HorizontalDivider() - } + item {} itemsIndexed(quickSearchList, key = { _, item -> item.id!! }) { index, item -> ReorderableItem(reorderableLazyListState, key = item.id!!) { isDragging -> // Not using rememberSwipeToDismissBoxState to prevent LazyColumn from reusing it