mirror of
https://github.com/libre-tube/LibreTube.git
synced 2025-04-28 16:00:31 +05:30
Merge pull request #5656 from Bnyro/master
refactor: simplify scrolling logic
This commit is contained in:
commit
356b8a7deb
@ -0,0 +1,9 @@
|
||||
package com.github.libretube.ui.extensions
|
||||
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
|
||||
fun RecyclerView.addOnBottomReachedListener(onBottomReached: () -> Unit) {
|
||||
viewTreeObserver.addOnScrollChangedListener {
|
||||
if (!canScrollVertically(1)) onBottomReached()
|
||||
}
|
||||
}
|
@ -30,6 +30,7 @@ import com.github.libretube.ui.adapters.SearchChannelAdapter
|
||||
import com.github.libretube.ui.adapters.VideosAdapter
|
||||
import com.github.libretube.ui.base.DynamicLayoutManagerFragment
|
||||
import com.github.libretube.ui.dialogs.ShareDialog
|
||||
import com.github.libretube.ui.extensions.addOnBottomReachedListener
|
||||
import com.github.libretube.ui.extensions.setupSubscriptionButton
|
||||
import com.github.libretube.ui.sheets.AddChannelToGroupSheet
|
||||
import com.github.libretube.util.deArrow
|
||||
@ -102,10 +103,8 @@ class ChannelFragment : DynamicLayoutManagerFragment() {
|
||||
fetchChannel()
|
||||
}
|
||||
|
||||
binding.channelRecView.viewTreeObserver.addOnScrollChangedListener {
|
||||
val binding = _binding ?: return@addOnScrollChangedListener
|
||||
|
||||
if (binding.channelRecView.canScrollVertically(1) || isLoading) return@addOnScrollChangedListener
|
||||
binding.channelRecView.addOnBottomReachedListener {
|
||||
if (_binding == null || isLoading) return@addOnBottomReachedListener
|
||||
|
||||
loadNextPage()
|
||||
}
|
||||
|
@ -17,7 +17,6 @@ import androidx.navigation.fragment.navArgs
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.recyclerview.widget.ItemTouchHelper
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import com.github.libretube.NavDirections
|
||||
import com.github.libretube.R
|
||||
import com.github.libretube.api.PlaylistsHelper
|
||||
import com.github.libretube.api.RetrofitInstance
|
||||
@ -31,15 +30,14 @@ import com.github.libretube.enums.PlaylistType
|
||||
import com.github.libretube.extensions.TAG
|
||||
import com.github.libretube.extensions.ceilHalf
|
||||
import com.github.libretube.extensions.dpToPx
|
||||
import com.github.libretube.extensions.toID
|
||||
import com.github.libretube.extensions.toastFromMainDispatcher
|
||||
import com.github.libretube.helpers.ImageHelper
|
||||
import com.github.libretube.helpers.NavigationHelper
|
||||
import com.github.libretube.helpers.PreferenceHelper
|
||||
import com.github.libretube.ui.activities.MainActivity
|
||||
import com.github.libretube.ui.adapters.PlaylistAdapter
|
||||
import com.github.libretube.ui.base.BaseActivity
|
||||
import com.github.libretube.ui.base.DynamicLayoutManagerFragment
|
||||
import com.github.libretube.ui.extensions.addOnBottomReachedListener
|
||||
import com.github.libretube.ui.models.PlayerViewModel
|
||||
import com.github.libretube.ui.sheets.BaseBottomSheet
|
||||
import com.github.libretube.ui.sheets.PlaylistOptionsBottomSheet
|
||||
@ -312,18 +310,16 @@ class PlaylistFragment : DynamicLayoutManagerFragment() {
|
||||
}
|
||||
})
|
||||
|
||||
binding.playlistRecView.viewTreeObserver.addOnScrollChangedListener {
|
||||
if (_binding?.playlistRecView?.canScrollVertically(1) == false &&
|
||||
!isLoading
|
||||
) {
|
||||
// append more playlists to the recycler view
|
||||
if (playlistType != PlaylistType.PUBLIC) {
|
||||
isLoading = true
|
||||
playlistAdapter?.showMoreItems()
|
||||
isLoading = false
|
||||
} else {
|
||||
fetchNextPage()
|
||||
}
|
||||
binding.playlistRecView.addOnBottomReachedListener {
|
||||
if (isLoading) return@addOnBottomReachedListener
|
||||
|
||||
// append more playlists to the recycler view
|
||||
if (playlistType != PlaylistType.PUBLIC) {
|
||||
isLoading = true
|
||||
playlistAdapter?.showMoreItems()
|
||||
isLoading = false
|
||||
} else {
|
||||
fetchNextPage()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -34,6 +34,7 @@ import com.github.libretube.ui.adapters.LegacySubscriptionAdapter
|
||||
import com.github.libretube.ui.adapters.SubscriptionChannelAdapter
|
||||
import com.github.libretube.ui.adapters.VideosAdapter
|
||||
import com.github.libretube.ui.base.DynamicLayoutManagerFragment
|
||||
import com.github.libretube.ui.extensions.addOnBottomReachedListener
|
||||
import com.github.libretube.ui.models.EditChannelGroupsModel
|
||||
import com.github.libretube.ui.models.PlayerViewModel
|
||||
import com.github.libretube.ui.models.SubscriptionsViewModel
|
||||
@ -134,24 +135,20 @@ class SubscriptionsFragment : DynamicLayoutManagerFragment() {
|
||||
binding.subFeed.isGone = isCurrentTabSubChannels
|
||||
}
|
||||
|
||||
binding.subChannels.viewTreeObserver.addOnScrollChangedListener {
|
||||
val binding = _binding
|
||||
if (binding?.subChannels?.canScrollVertically(1) == false &&
|
||||
viewModel.subscriptions.value != null && // scroll view is at bottom
|
||||
isCurrentTabSubChannels
|
||||
) {
|
||||
binding.subChannels.addOnBottomReachedListener {
|
||||
val binding = _binding ?: return@addOnBottomReachedListener
|
||||
|
||||
if (viewModel.subscriptions.value != null && isCurrentTabSubChannels) {
|
||||
binding.subRefresh.isRefreshing = true
|
||||
channelsAdapter?.updateItems()
|
||||
binding.subRefresh.isRefreshing = false
|
||||
}
|
||||
}
|
||||
|
||||
binding.subFeed.viewTreeObserver.addOnScrollChangedListener {
|
||||
val binding = _binding
|
||||
if (binding?.subFeed?.canScrollVertically(1) == false &&
|
||||
viewModel.videoFeed.value != null && // scroll view is at bottom
|
||||
!isCurrentTabSubChannels
|
||||
) {
|
||||
binding.subFeed.addOnBottomReachedListener {
|
||||
val binding = _binding ?: return@addOnBottomReachedListener
|
||||
|
||||
if (viewModel.videoFeed.value != null && !isCurrentTabSubChannels) {
|
||||
binding.subRefresh.isRefreshing = true
|
||||
feedAdapter?.updateItems()
|
||||
binding.subRefresh.isRefreshing = false
|
||||
|
Loading…
x
Reference in New Issue
Block a user