diff --git a/app/src/main/java/com/github/libretube/ui/fragments/SubscriptionsFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/SubscriptionsFragment.kt index 31897d5f0..e58df412a 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/SubscriptionsFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/SubscriptionsFragment.kt @@ -55,6 +55,7 @@ class SubscriptionsFragment : DynamicLayoutManagerFragment() { private val channelGroupsModel: EditChannelGroupsModel by activityViewModels() private var selectedFilterGroup = 0 private var isCurrentTabSubChannels = false + private var isAppBarFullyExpanded = true var feedAdapter: VideosAdapter? = null private var channelsAdapter: SubscriptionChannelAdapter? = null @@ -89,6 +90,16 @@ class SubscriptionsFragment : DynamicLayoutManagerFragment() { setupSortAndFilter() + // Check if the AppBarLayout is fully expanded + binding.subscriptionsAppBar.addOnOffsetChangedListener { _, verticalOffset -> + isAppBarFullyExpanded = verticalOffset == 0 + } + + // Determine if the child can scroll up + binding.subRefresh.setOnChildScrollUpCallback { _, _ -> + !isAppBarFullyExpanded + } + binding.subRefresh.isEnabled = true binding.subProgress.isVisible = true @@ -119,21 +130,30 @@ class SubscriptionsFragment : DynamicLayoutManagerFragment() { if (isCurrentTabSubChannels) showSubscriptions() else showFeed() - binding.subChannelsContainer.isVisible = isCurrentTabSubChannels - binding.subFeedContainer.isGone = isCurrentTabSubChannels + binding.subChannels.isVisible = isCurrentTabSubChannels + binding.subFeed.isGone = isCurrentTabSubChannels } - binding.scrollviewSub.viewTreeObserver.addOnScrollChangedListener { + binding.subChannels.viewTreeObserver.addOnScrollChangedListener { val binding = _binding - if (binding?.scrollviewSub?.canScrollVertically(1) == false && - viewModel.videoFeed.value != null // scroll view is at bottom + if (binding?.subChannels?.canScrollVertically(1) == false && + viewModel.subscriptions.value != null && // scroll view is at bottom + isCurrentTabSubChannels ) { binding.subRefresh.isRefreshing = true - if (isCurrentTabSubChannels) { - channelsAdapter?.updateItems() - } else { - feedAdapter?.updateItems() - } + 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.subRefresh.isRefreshing = true + feedAdapter?.updateItems() binding.subRefresh.isRefreshing = false } } @@ -141,7 +161,7 @@ class SubscriptionsFragment : DynamicLayoutManagerFragment() { // add some extra margin to the subscribed channels while the mini player is visible // otherwise the last channel would be invisible playerModel.isMiniPlayerVisible.observe(viewLifecycleOwner) { - binding.subChannelsContainer.updateLayoutParams { + binding.subChannels.updateLayoutParams { bottomMargin = (if (it) 64f else 0f).dpToPx() } } @@ -314,11 +334,11 @@ class SubscriptionsFragment : DynamicLayoutManagerFragment() { } } - binding.subChannelsContainer.isGone = true + binding.subChannels.isGone = true binding.subProgress.isGone = true val notLoaded = viewModel.videoFeed.value.isNullOrEmpty() - binding.subFeedContainer.isGone = notLoaded + binding.subFeed.isGone = notLoaded binding.emptyFeed.isVisible = notLoaded feedAdapter = VideosAdapter( @@ -357,10 +377,10 @@ class SubscriptionsFragment : DynamicLayoutManagerFragment() { binding.subRefresh.isRefreshing = false binding.subProgress.isGone = true - binding.subFeedContainer.isGone = true + binding.subFeed.isGone = true val notLoaded = viewModel.subscriptions.value.isNullOrEmpty() - binding.subChannelsContainer.isGone = notLoaded + binding.subChannels.isGone = notLoaded binding.emptyFeed.isVisible = notLoaded val subCount = subscriptions.size.toLong().formatShort() diff --git a/app/src/main/res/layout/fragment_subscriptions.xml b/app/src/main/res/layout/fragment_subscriptions.xml index aee88c2da..a6c9eeb2a 100644 --- a/app/src/main/res/layout/fragment_subscriptions.xml +++ b/app/src/main/res/layout/fragment_subscriptions.xml @@ -20,7 +20,8 @@ android:layout_height="wrap_content" android:layout_centerInParent="true" android:orientation="vertical" - android:visibility="gone"> + android:visibility="gone" + tools:visibility="visible"> - - + android:layout_height="wrap_content"> - - - - - - - - - + app:layout_scrollFlags="scroll" + app:titleCollapseMode="scale"> - - - - - - - + android:animateLayoutChanges="true" + android:orientation="vertical"> - + android:layout_marginBottom="6dp" + android:layout_weight="1" + android:text="@string/subscriptions" + android:textAlignment="viewStart" + android:textColor="?colorPrimary" + app:drawableEndCompat="@drawable/ic_arrow_up_down" + app:drawableTint="?colorPrimary" /> - - - - - + - - - - - + android:layout_height="wrap_content" + android:layout_marginVertical="3dp" + android:scrollbars="none"> - + - - - + + + + + + + + + + + + + + + + + + + + + +