diff --git a/app/src/main/java/com/github/libretube/ui/fragments/ChannelFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/ChannelFragment.kt index 0a6d27b7c..0cd9dcafb 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/ChannelFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/ChannelFragment.kt @@ -59,6 +59,8 @@ class ChannelFragment : DynamicLayoutManagerFragment() { private var nextPages = Array(5) { null } private var searchChannelAdapter: SearchChannelAdapter? = null + private var isAppBarFullyExpanded: Boolean = true + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) channelName = args.channelName @@ -86,14 +88,24 @@ class ChannelFragment : DynamicLayoutManagerFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + // Check if the AppBarLayout is fully expanded + binding.channelAppBar.addOnOffsetChangedListener { _, verticalOffset -> + isAppBarFullyExpanded = verticalOffset == 0 + } + + // Determine if the child can scroll up + binding.channelRefresh.setOnChildScrollUpCallback { _, _ -> + !isAppBarFullyExpanded + } + binding.channelRefresh.setOnRefreshListener { fetchChannel() } - binding.channelScrollView.viewTreeObserver.addOnScrollChangedListener { + binding.channelRecView.viewTreeObserver.addOnScrollChangedListener { val binding = _binding ?: return@addOnScrollChangedListener - if (binding.channelScrollView.canScrollVertically(1) || isLoading) return@addOnScrollChangedListener + if (binding.channelRecView.canScrollVertically(1) || isLoading) return@addOnScrollChangedListener loadNextPage() } @@ -199,7 +211,8 @@ class ChannelFragment : DynamicLayoutManagerFragment() { isLoading = false binding.channelRefresh.isRefreshing = false - binding.channelScrollView.isVisible = true + binding.channelCoordinator.isVisible = true + binding.channelName.text = response.name if (response.verified) { binding.channelName diff --git a/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt b/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt index e351e99cf..331516dc2 100644 --- a/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt +++ b/app/src/main/java/com/github/libretube/ui/fragments/PlaylistFragment.kt @@ -123,7 +123,6 @@ class PlaylistFragment : DynamicLayoutManagerFragment() { } private fun fetchPlaylist() { - binding.playlistScrollview.isGone = true lifecycleScope.launch { val response = try { withContext(Dispatchers.IO) { @@ -136,12 +135,13 @@ class PlaylistFragment : DynamicLayoutManagerFragment() { val binding = _binding ?: return@launch playlistFeed = response.relatedStreams.toMutableList() - binding.playlistScrollview.isVisible = true nextPage = response.nextpage playlistName = response.name isLoading = false ImageHelper.loadImage(response.thumbnailUrl, binding.thumbnail) binding.playlistProgress.isGone = true + binding.playlistAppBar.isVisible = true + binding.playlistRecView.isVisible = true binding.playlistName.text = response.name binding.playlistInfo.text = getChannelAndVideoString(response, response.videos) @@ -312,8 +312,8 @@ class PlaylistFragment : DynamicLayoutManagerFragment() { } }) - binding.playlistScrollview.viewTreeObserver.addOnScrollChangedListener { - if (_binding?.playlistScrollview?.canScrollVertically(1) == false && + binding.playlistRecView.viewTreeObserver.addOnScrollChangedListener { + if (_binding?.playlistRecView?.canScrollVertically(1) == false && !isLoading ) { // append more playlists to the recycler view diff --git a/app/src/main/res/layout/fragment_channel.xml b/app/src/main/res/layout/fragment_channel.xml index 77c26fb09..94d9665aa 100644 --- a/app/src/main/res/layout/fragment_channel.xml +++ b/app/src/main/res/layout/fragment_channel.xml @@ -6,165 +6,175 @@ android:layout_width="match_parent" android:layout_height="match_parent"> - + android:visibility="gone"> - + android:layout_height="wrap_content"> - - - - - + android:layout_height="wrap_content" + app:layout_scrollFlags="scroll" + app:titleCollapseMode="scale"> + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="vertical" + app:layout_collapseMode="pin"> - + - + + + + + + + + + + + + + + + + + + + + + android:layout_marginHorizontal="5dp" + android:autoLink="web" + android:padding="10dp" /> + + + + + + + + + + + + + + + + + + - + - + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + diff --git a/app/src/main/res/layout/fragment_playlist.xml b/app/src/main/res/layout/fragment_playlist.xml index 630c993fa..e0aa04c50 100644 --- a/app/src/main/res/layout/fragment_playlist.xml +++ b/app/src/main/res/layout/fragment_playlist.xml @@ -1,5 +1,5 @@ - + android:visibility="gone" + android:layout_gravity="center" /> - + android:layout_height="match_parent" + android:clipToPadding="false" + android:visibility="gone" + app:layout_behavior="@string/appbar_scrolling_view_behavior" /> - + + - - + app:layout_scrollFlags="scroll" + app:titleCollapseMode="scale"> + android:orientation="vertical"> - + android:layout_marginHorizontal="20dp" + android:layout_marginVertical="10dp" + android:adjustViewBounds="true" + android:scaleType="fitCenter" + app:shapeAppearanceOverlay="@style/ShapeAppearance.Material3.Corner.Small" + tools:src="@tools:sample/backgrounds/scenic" /> + android:layout_marginTop="8dp" + android:orientation="horizontal"> - + + + android:layout_gravity="center" + android:layout_marginEnd="8dp" + android:background="@drawable/rounded_ripple" + android:padding="5dp" + android:visibility="gone" + tools:visibility="visible"> + + + + + + + android:layout_marginEnd="20dp" + android:background="?selectableItemBackgroundBorderless" + android:src="@drawable/ic_three_dots" /> - - - - - - - - - - - - - - - - - - - - + android:paddingHorizontal="15dp" + android:paddingBottom="5dp" + android:textStyle="bold" /> - + - + - \ No newline at end of file + + + + + + + + + + + + + + + + + \ No newline at end of file