From 611485ef7453afbe0d48a616e126498adf024d0b Mon Sep 17 00:00:00 2001 From: Ruben Sousa Date: Thu, 11 Jul 2024 00:21:12 +0200 Subject: [PATCH 1/6] Stop scrolling only when there is a smooth scroller currently active --- .../layoutmanager/layout/PivotLayout.kt | 23 ------------------- .../scroll/BaseSmoothScroller.kt | 5 ++++ 2 files changed, 5 insertions(+), 23 deletions(-) diff --git a/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/layout/PivotLayout.kt b/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/layout/PivotLayout.kt index d07de77a..a8b9ee1c 100644 --- a/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/layout/PivotLayout.kt +++ b/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/layout/PivotLayout.kt @@ -231,40 +231,17 @@ internal class PivotLayout( fun onItemsAdded(positionStart: Int, itemCount: Int) { itemChanges.insertionPosition = positionStart itemChanges.insertionItemCount = itemCount - onItemsChanged() } fun onItemsRemoved(positionStart: Int, itemCount: Int) { itemChanges.removalPosition = positionStart itemChanges.removalItemCount = itemCount - onItemsChanged() } fun onItemsMoved(from: Int, to: Int, itemCount: Int) { itemChanges.moveFromPosition = from itemChanges.moveToPosition = to itemChanges.moveItemCount = itemCount - onItemsChanged() - } - - private fun onItemsChanged() { - if (!layoutInfo.isScrolling) { - return - } - val firstPos = layoutInfo.findFirstAddedPosition() - val lastPos = layoutInfo.findLastAddedPosition() - val changesOutOfBounds = if (!layoutInfo.shouldReverseLayout()) { - itemChanges.isOutOfBounds(firstPos, lastPos) - } else { - itemChanges.isOutOfBounds(lastPos, firstPos) - } - if (changesOutOfBounds) { - return - } - layoutInfo.getRecyclerView()?.apply { - stopScroll() - requestLayout() - } } fun setOnChildLaidOutListener(listener: OnChildLaidOutListener?) { diff --git a/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/scroll/BaseSmoothScroller.kt b/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/scroll/BaseSmoothScroller.kt index 74e29f6a..0e578a45 100644 --- a/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/scroll/BaseSmoothScroller.kt +++ b/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/scroll/BaseSmoothScroller.kt @@ -49,6 +49,11 @@ internal open class BaseSmoothScroller( fun cancel() { isCanceled = true + layoutInfo.getRecyclerView()?.apply { + postOnAnimation { + stopScroll() + } + } } fun isCanceled(): Boolean = isCanceled From 51a63fbc3b78a7360a871a6e3d92f7eec39517e2 Mon Sep 17 00:00:00 2001 From: Ruben Sousa Date: Thu, 11 Jul 2024 00:22:39 +0200 Subject: [PATCH 2/6] Add request layout to ensure layout is intact --- .../dpadrecyclerview/layoutmanager/scroll/BaseSmoothScroller.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/scroll/BaseSmoothScroller.kt b/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/scroll/BaseSmoothScroller.kt index 0e578a45..94c8f8a0 100644 --- a/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/scroll/BaseSmoothScroller.kt +++ b/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/scroll/BaseSmoothScroller.kt @@ -52,6 +52,7 @@ internal open class BaseSmoothScroller( layoutInfo.getRecyclerView()?.apply { postOnAnimation { stopScroll() + requestLayout() } } } From 30b75c9abcc2f29c845764601a7400d490ae2ec6 Mon Sep 17 00:00:00 2001 From: Ruben Sousa Date: Thu, 11 Jul 2024 00:45:44 +0200 Subject: [PATCH 3/6] Fix unnecessary layout request --- .../dpadrecyclerview/layoutmanager/scroll/BaseSmoothScroller.kt | 1 - 1 file changed, 1 deletion(-) diff --git a/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/scroll/BaseSmoothScroller.kt b/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/scroll/BaseSmoothScroller.kt index 94c8f8a0..0e578a45 100644 --- a/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/scroll/BaseSmoothScroller.kt +++ b/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/scroll/BaseSmoothScroller.kt @@ -52,7 +52,6 @@ internal open class BaseSmoothScroller( layoutInfo.getRecyclerView()?.apply { postOnAnimation { stopScroll() - requestLayout() } } } From ffaec3958bbee22b04e7c8832ca8c78233a30a40 Mon Sep 17 00:00:00 2001 From: Ruben Sousa Date: Thu, 11 Jul 2024 00:46:01 +0200 Subject: [PATCH 4/6] Allow keeping track of all pending moves --- .../test/tests/scrolling/VerticalGridScrollTest.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/dpadrecyclerview/src/androidTest/kotlin/com/rubensousa/dpadrecyclerview/test/tests/scrolling/VerticalGridScrollTest.kt b/dpadrecyclerview/src/androidTest/kotlin/com/rubensousa/dpadrecyclerview/test/tests/scrolling/VerticalGridScrollTest.kt index 8acbbdfe..dfb09f33 100644 --- a/dpadrecyclerview/src/androidTest/kotlin/com/rubensousa/dpadrecyclerview/test/tests/scrolling/VerticalGridScrollTest.kt +++ b/dpadrecyclerview/src/androidTest/kotlin/com/rubensousa/dpadrecyclerview/test/tests/scrolling/VerticalGridScrollTest.kt @@ -253,6 +253,7 @@ class VerticalGridScrollTest : DpadRecyclerViewTest() { fun testMultipleFastDifferentSpanFocusChanges() { launchFragment() onRecyclerView("Change span size lookup") { recyclerView -> + recyclerView.setSmoothScrollMaxPendingMoves(25) recyclerView.setSpanSizeLookup(object : DpadSpanSizeLookup() { override fun getSpanSize(position: Int): Int { return if (position == 0 || position.rem(spanCount + 1) == 0) { From 749cbaf1caacd8a6802bff6d200ff408ea754628 Mon Sep 17 00:00:00 2001 From: Ruben Sousa Date: Thu, 11 Jul 2024 01:18:53 +0200 Subject: [PATCH 5/6] Request layout if we are still scrolling --- .../layoutmanager/scroll/BaseSmoothScroller.kt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/scroll/BaseSmoothScroller.kt b/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/scroll/BaseSmoothScroller.kt index 0e578a45..0bc5084e 100644 --- a/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/scroll/BaseSmoothScroller.kt +++ b/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/scroll/BaseSmoothScroller.kt @@ -51,6 +51,9 @@ internal open class BaseSmoothScroller( isCanceled = true layoutInfo.getRecyclerView()?.apply { postOnAnimation { + if (layoutInfo.isScrolling) { + requestLayout() + } stopScroll() } } From f015e9cefd57c1252d3575d3059fdde47d221c5b Mon Sep 17 00:00:00 2001 From: Ruben Sousa Date: Thu, 11 Jul 2024 02:30:47 +0200 Subject: [PATCH 6/6] Bump to 1.3.0-rc02 --- docs/changelog.md | 8 ++++++++ gradle.properties | 2 +- mkdocs.yml | 2 +- 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/docs/changelog.md b/docs/changelog.md index 8b1d2276..91a089b3 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -2,6 +2,14 @@ ## Version 1.3.0 +### 1.3.0-rc02 + +2024-07-11 + +#### Bug fixes + +- Fixed `DpadRecyclerView` not immediately stopping the search for the pivot in some scenarios ([#238](https://github.com/rubensousa/DpadRecyclerView/pull/238)) + ### 1.3.0-rc01 2024-07-08 diff --git a/gradle.properties b/gradle.properties index 6bb35050..572ccdca 100644 --- a/gradle.properties +++ b/gradle.properties @@ -22,4 +22,4 @@ kotlin.code.style=official # thereby reducing the size of the R class for that library android.nonTransitiveRClass=true android.enableR8.fullMode=true -LIBRARY_VERSION=1.3.0-rc01 \ No newline at end of file +LIBRARY_VERSION=1.3.0-rc02 \ No newline at end of file diff --git a/mkdocs.yml b/mkdocs.yml index de5ee0a2..151915cd 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -24,7 +24,7 @@ theme: extra: dpadrecyclerview: - version: '1.3.0-rc01' + version: '1.3.0-rc02' social: - icon: 'fontawesome/brands/github' link: 'https://github.com/rubensousa/DpadRecyclerView'