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