From 01a1113a0752efb43d3d4cceb0c871679be7ce31 Mon Sep 17 00:00:00 2001 From: FooIbar <118464521+FooIbar@users.noreply.github.com> Date: Sun, 28 Jul 2024 15:54:02 +0800 Subject: [PATCH] [New Reader] Avoid initial scroll on reader start --- .../kotlin/com/hippo/ehviewer/ui/reader/ReaderScreen.kt | 4 ++-- .../com/hippo/ehviewer/ui/reader/SliderPagerDoubleSync.kt | 6 ++++-- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderScreen.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderScreen.kt index 17a86017e..27d2272f2 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderScreen.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/ReaderScreen.kt @@ -144,8 +144,8 @@ fun ReaderScreen(pageLoader: PageLoader2, info: BaseGalleryInfo?, navigator: Des uiController.systemBarsBehavior = WindowInsetsControllerCompat.BEHAVIOR_DEFAULT } } - val lazyListState = rememberLazyListState() - val pagerState = rememberPagerState { pageLoader.size } + val lazyListState = rememberLazyListState(pageLoader.startPage) + val pagerState = rememberPagerState(pageLoader.startPage) { pageLoader.size } val syncState = rememberSliderPagerDoubleSyncState(lazyListState, pagerState, pageLoader) Box { var appbarVisible by remember { mutableStateOf(false) } diff --git a/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/SliderPagerDoubleSync.kt b/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/SliderPagerDoubleSync.kt index 283450433..322a19128 100644 --- a/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/SliderPagerDoubleSync.kt +++ b/app/src/main/kotlin/com/hippo/ehviewer/ui/reader/SliderPagerDoubleSync.kt @@ -22,7 +22,7 @@ class SliderPagerDoubleSync( private val pagerState: PagerState, private val pageLoader: PageLoader2, ) { - private var sliderFollowPager by mutableStateOf(false) + private var sliderFollowPager by mutableStateOf(true) var sliderValue by mutableIntStateOf(pageLoader.startPage + 1) private set @@ -37,8 +37,9 @@ class SliderPagerDoubleSync( val pagerFling by pagerState.interactionSource.collectIsDraggedAsState() if (fling || pagerFling) sliderFollowPager = true val currentIndexFlow = remember(webtoon) { - sliderFollowPager = false + val initialIndex = sliderValue - 1 if (webtoon) { + sliderFollowPager = lazyListState.firstVisibleItemIndex == initialIndex snapshotFlow { with(lazyListState.layoutInfo) { visibleItemsInfo.lastOrNull { @@ -47,6 +48,7 @@ class SliderPagerDoubleSync( } }.filterNotNull() } else { + sliderFollowPager = pagerState.currentPage == initialIndex snapshotFlow { pagerState.currentPage } } }