From afa2d03b5609d872dbd991ddd37d8e3629a2ef52 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Tue, 7 Nov 2023 22:56:46 +0800 Subject: [PATCH] Fix local favorites list jumping (#206) * Revert "Fix local favorites scroll state loss" This reverts commit c4be269f * Enable placeholders as workaround * Remove TODO * Bump minimum fast scroller handler height to 48 dp Make it consistent with `VerticalFastScroller` --- app/src/main/kotlin/com/hippo/ehviewer/EhDB.kt | 13 ++++--------- .../kotlin/com/hippo/ehviewer/dao/GalleryDao.kt | 3 --- .../com/hippo/ehviewer/ui/legacy/FastScroller.kt | 2 +- .../com/hippo/ehviewer/ui/scene/FavoritesScene.kt | 2 +- .../hippo/ehviewer/ui/scene/GalleryDetailScene.kt | 5 +---- 5 files changed, 7 insertions(+), 18 deletions(-) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/EhDB.kt b/app/src/main/kotlin/com/hippo/ehviewer/EhDB.kt index 404289f16..d7a293d4a 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/EhDB.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/EhDB.kt @@ -38,13 +38,8 @@ import splitties.arch.room.roomDb object EhDB { private val db = roomDb("eh.db") - private suspend fun putGalleryInfo(galleryInfo: BaseGalleryInfo, update: Boolean = false) { - val dao = db.galleryDao() - if (update) { - dao.upsert(galleryInfo) - } else { - dao.insertOrIgnore(galleryInfo) - } + private suspend fun putGalleryInfo(galleryInfo: BaseGalleryInfo) { + db.galleryDao().upsert(galleryInfo) } private suspend fun deleteGalleryInfo(galleryInfo: BaseGalleryInfo) { @@ -195,8 +190,8 @@ object EhDB { fun searchLocalFav(keyword: String) = db.localFavoritesDao().joinListLazy("%$keyword%") - suspend fun putHistoryInfo(galleryInfo: BaseGalleryInfo, updateGalleryInfo: Boolean = false) { - putGalleryInfo(galleryInfo, updateGalleryInfo) + suspend fun putHistoryInfo(galleryInfo: BaseGalleryInfo) { + putGalleryInfo(galleryInfo) db.historyDao().upsert(HistoryInfo(galleryInfo.gid)) } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/dao/GalleryDao.kt b/app/src/main/kotlin/com/hippo/ehviewer/dao/GalleryDao.kt index ba1433beb..000eb7477 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/dao/GalleryDao.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/dao/GalleryDao.kt @@ -17,9 +17,6 @@ interface GalleryDao { @Query("SELECT * FROM GALLERIES") suspend fun list(): List - @Insert(onConflict = OnConflictStrategy.IGNORE) - suspend fun insertOrIgnore(galleryInfo: BaseGalleryInfo) - @Insert(onConflict = OnConflictStrategy.IGNORE) suspend fun insertOrIgnore(galleryInfoList: List) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/legacy/FastScroller.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/legacy/FastScroller.kt index ffe5dc1be..6152b8016 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/legacy/FastScroller.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/legacy/FastScroller.kt @@ -331,6 +331,6 @@ class FastScroller : View { private const val INVALID = -1 private const val SCROLL_BAR_FADE_DURATION = 500 private const val SCROLL_BAR_DELAY = 1000 - private const val MIN_HANDLER_HEIGHT_DP = 32 + private const val MIN_HANDLER_HEIGHT_DP = 48 } } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/FavoritesScene.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/FavoritesScene.kt index 18c94d8f3..bd9d50b89 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/FavoritesScene.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/FavoritesScene.kt @@ -133,7 +133,7 @@ class VMStorage : ViewModel() { } }.flow.cachedIn(viewModelScope) - private val localFavDataFlow = Pager(PagingConfig(20, enablePlaceholders = false, jumpThreshold = 40)) { + private val localFavDataFlow = Pager(PagingConfig(20, jumpThreshold = 40)) { val keyword = urlBuilder.keyword if (keyword.isNullOrBlank()) { EhDB.localFavLazyList diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt index 4e9d89b49..4613de161 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/scene/GalleryDetailScene.kt @@ -292,10 +292,7 @@ fun GalleryDetailScreen(args: GalleryDetailScreenArgs, navigator: NavController) } } galleryInfo?.let { - // Don't update gallery info in database if previous destination is favorites, - // since it will invalidate local favorites PagingSource and lose scroll state - val previousDestinationId = navigator.previousBackStackEntry?.destination?.id - EhDB.putHistoryInfo(it.findBaseInfo(), previousDestinationId != R.id.nav_favourite) + EhDB.putHistoryInfo(it.findBaseInfo()) } } }