diff --git a/presentation/feed/src/main/java/com/hilingual/presentation/feed/FeedScreen.kt b/presentation/feed/src/main/java/com/hilingual/presentation/feed/FeedScreen.kt index dac0aa73e..9d5173455 100644 --- a/presentation/feed/src/main/java/com/hilingual/presentation/feed/FeedScreen.kt +++ b/presentation/feed/src/main/java/com/hilingual/presentation/feed/FeedScreen.kt @@ -162,7 +162,6 @@ internal fun FeedRoute( onUnpublishClick = viewModel::diaryUnpublish, onReportClick = { context.launchCustomTabs(UrlConstant.FEEDBACK_REPORT) }, readAllFeed = viewModel::readAllFeed, - isScrollingDown = viewModel::isScrollingDown ) } } @@ -185,7 +184,6 @@ private fun FeedScreen( onReportClick: () -> Unit, readAllFeed: () -> Unit, onFeedRefresh: (FeedTab) -> Unit, - isScrollingDown: (FeedScrollState?, FeedScrollState) -> Boolean, modifier: Modifier = Modifier ) { val coroutineScope = rememberCoroutineScope() @@ -239,14 +237,14 @@ private fun FeedScreen( LaunchedEffect(pagerState.currentPage) { snapshotFlow { FeedScrollState( - firstVisibleItemIndex = currentListState.firstVisibleItemIndex, - firstVisibleItemScrollOffset = currentListState.firstVisibleItemScrollOffset + itemIndex = currentListState.firstVisibleItemIndex, + scrollOffset = currentListState.firstVisibleItemScrollOffset ) } .pairwise() .collect { (previous, current) -> if (currentListState.isScrollInProgress && - isScrollingDown(previous, current) && + current.isScrollingDownFrom(previous) && isAtBottom ) { latestReadAllFeed() @@ -349,8 +347,18 @@ private fun FeedScreenPreview() { hasFollowing = false, recommendRefreshing = false, followingRefreshing = false, - onFeedRefresh = {}, - isScrollingDown = { _, _ -> false } + onFeedRefresh = {} ) } } + +private data class FeedScrollState( + val itemIndex: Int, + val scrollOffset: Int +) { + fun isScrollingDownFrom(previous: FeedScrollState?): Boolean { + if (previous == null) return false + return itemIndex > previous.itemIndex || + (itemIndex == previous.itemIndex && scrollOffset > previous.scrollOffset) + } +} diff --git a/presentation/feed/src/main/java/com/hilingual/presentation/feed/FeedViewModel.kt b/presentation/feed/src/main/java/com/hilingual/presentation/feed/FeedViewModel.kt index 203bf5842..84a2d53e3 100644 --- a/presentation/feed/src/main/java/com/hilingual/presentation/feed/FeedViewModel.kt +++ b/presentation/feed/src/main/java/com/hilingual/presentation/feed/FeedViewModel.kt @@ -188,16 +188,6 @@ internal class FeedViewModel @Inject constructor( } } - fun isScrollingDown(previous: FeedScrollState?, current: FeedScrollState): Boolean { - if (previous == null) return false - - return current.firstVisibleItemIndex > previous.firstVisibleItemIndex || - ( - current.firstVisibleItemIndex == previous.firstVisibleItemIndex && - current.firstVisibleItemScrollOffset > previous.firstVisibleItemScrollOffset - ) - } - private fun UiState>.updateIfSuccess( transform: (ImmutableList) -> ImmutableList ): UiState> { @@ -246,11 +236,6 @@ internal class FeedViewModel @Inject constructor( } } -internal data class FeedScrollState( - val firstVisibleItemIndex: Int, - val firstVisibleItemScrollOffset: Int -) - sealed interface FeedSideEffect { data class ShowErrorDialog(val onRetry: () -> Unit) : FeedSideEffect