From d0af0ddffe59bc6ba87615b5f7477b4ec5afd9c6 Mon Sep 17 00:00:00 2001 From: Jays2Kings Date: Mon, 26 Apr 2021 03:28:36 -0400 Subject: [PATCH] recyclerView helper method in E2Ebottom sheet prevent accidental drag downs --- .../addtolibrary/SetCategoriesSheet.kt | 17 +----------- .../ui/manga/track/TrackingBottomSheet.kt | 3 +++ .../ui/source/browse/SourceFilterSheet.kt | 18 ++----------- .../widget/EdgeToEdgeBottomSheetDialog.kt | 27 +++++++++++++++++++ 4 files changed, 33 insertions(+), 32 deletions(-) diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/category/addtolibrary/SetCategoriesSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/category/addtolibrary/SetCategoriesSheet.kt index 28acb5fd91..e6e6c50d2a 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/category/addtolibrary/SetCategoriesSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/category/addtolibrary/SetCategoriesSheet.kt @@ -47,6 +47,7 @@ class SetCategoriesSheet( private val itemAdapter = ItemAdapter() private val selectExtension: SelectExtension private val db: DatabaseHelper by injectLazy() + override var recyclerView: RecyclerView? = binding.categoryRecyclerView override fun createBinding(inflater: LayoutInflater) = SetCategoriesSheetBinding.inflate(inflater) @@ -80,22 +81,6 @@ class SetCategoriesSheet( } ) - binding.categoryRecyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() { - override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { - super.onScrollStateChanged(recyclerView, newState) - if (newState == RecyclerView.SCROLL_STATE_IDLE) { - sheetBehavior.isDraggable = true - } - } - - override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { - super.onScrolled(recyclerView, dx, dy) - if (recyclerView.canScrollVertically(-1)) { - sheetBehavior.isDraggable = false - } - } - }) - binding.titleLayout.viewTreeObserver.addOnGlobalLayoutListener { binding.categoryRecyclerView.updateLayoutParams { val fullHeight = activity.window.decorView.height diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackingBottomSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackingBottomSheet.kt index 8c7f509046..810039a553 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackingBottomSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackingBottomSheet.kt @@ -7,6 +7,7 @@ import android.view.View import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.net.toUri import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView import com.google.android.material.bottomsheet.BottomSheetBehavior import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.track.TrackService @@ -39,6 +40,8 @@ class TrackingBottomSheet(private val controller: MangaDetailsController) : override fun createBinding(inflater: LayoutInflater) = TrackingBottomSheetBinding.inflate(inflater) + override var recyclerView: RecyclerView? = binding.trackRecycler + init { val height = activity.window.decorView.rootWindowInsets.systemWindowInsetBottom sheetBehavior.peekHeight = 500.dpToPx + height diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/SourceFilterSheet.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/SourceFilterSheet.kt index e3f7b4f42a..cb71ee2730 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/SourceFilterSheet.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/source/browse/SourceFilterSheet.kt @@ -30,6 +30,8 @@ class SourceFilterSheet(val activity: Activity) : var onResetClicked = {} + override var recyclerView: RecyclerView? = binding.filtersRecycler + override fun createBinding(inflater: LayoutInflater) = SourceFilterSheetBinding.inflate(inflater) init { binding.searchBtn.setOnClickListener { dismiss() } @@ -82,22 +84,6 @@ class SourceFilterSheet(val activity: Activity) : } } ) - - binding.filtersRecycler.addOnScrollListener(object : RecyclerView.OnScrollListener() { - override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { - super.onScrollStateChanged(recyclerView, newState) - if (newState == RecyclerView.SCROLL_STATE_IDLE) { - sheetBehavior.isDraggable = true - } - } - - override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { - super.onScrolled(recyclerView, dx, dy) - if (recyclerView.canScrollVertically(-1)) { - sheetBehavior.isDraggable = false - } - } - }) } override fun onStart() { diff --git a/app/src/main/java/eu/kanade/tachiyomi/widget/EdgeToEdgeBottomSheetDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/widget/EdgeToEdgeBottomSheetDialog.kt index 0e812bc27b..ae59118fec 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/widget/EdgeToEdgeBottomSheetDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/widget/EdgeToEdgeBottomSheetDialog.kt @@ -5,6 +5,7 @@ import android.os.Build import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.recyclerview.widget.RecyclerView import androidx.viewbinding.ViewBinding import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog @@ -17,6 +18,7 @@ abstract class EdgeToEdgeBottomSheetDialog(activity: Activity) protected val binding: VB protected val sheetBehavior: BottomSheetBehavior<*> + protected open var recyclerView: RecyclerView? = null init { binding = createBinding(activity.layoutInflater) @@ -52,5 +54,30 @@ abstract class EdgeToEdgeBottomSheetDialog(activity: Activity) contentView.requestLayout() } + override fun onStart() { + super.onStart() + recyclerView?.let { recyclerView -> + recyclerView.addOnScrollListener(object : RecyclerView.OnScrollListener() { + override fun onScrollStateChanged(recyclerView: RecyclerView, newState: Int) { + super.onScrollStateChanged(recyclerView, newState) + if (newState == RecyclerView.SCROLL_STATE_IDLE || + newState == RecyclerView.SCROLL_STATE_SETTLING + ) { + sheetBehavior.isDraggable = true + } + } + + override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { + super.onScrolled(recyclerView, dx, dy) + if (recyclerView.canScrollVertically(-1) && + recyclerView.scrollState != RecyclerView.SCROLL_STATE_SETTLING + ) { + sheetBehavior.isDraggable = false + } + } + }) + } + } + abstract fun createBinding(inflater: LayoutInflater): VB }