From 698f0bc13c807d1e18051fc4ac4f14ec382ff4e5 Mon Sep 17 00:00:00 2001 From: Alexander Capehart Date: Sat, 11 Jan 2025 10:10:20 -0700 Subject: [PATCH] detail: fix bouncing when navigating to song --- .../java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt index c3ffb50a0..48785f276 100644 --- a/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt +++ b/app/src/main/java/org/oxycblt/auxio/detail/AlbumDetailFragment.kt @@ -22,6 +22,7 @@ import android.os.Bundle import androidx.navigation.fragment.findNavController import androidx.navigation.fragment.navArgs import androidx.recyclerview.widget.LinearSmoothScroller +import androidx.recyclerview.widget.RecyclerView import dagger.hilt.android.AndroidEntryPoint import org.oxycblt.auxio.R import org.oxycblt.auxio.databinding.FragmentDetailBinding @@ -298,6 +299,11 @@ class AlbumDetailFragment : DetailFragment() { // RecyclerView will scroll assuming it has the total height of the screen (i.e a // collapsed appbar), so we need to collapse the appbar if that's the case. binding.detailAppbar.setExpanded(false) + if (!binding.detailRecycler.canScroll()) { + // Don't scroll if the RecyclerView goes off screen. If we go anyway, overscroll + // kicks in and creates a weird bounce effect. + return + } binding.detailRecycler.post { // Use a custom smooth scroller that will settle the item in the middle of // the screen rather than the end. @@ -323,4 +329,6 @@ class AlbumDetailFragment : DetailFragment() { } } } + + private fun RecyclerView.canScroll() = computeVerticalScrollRange() > height }