From acdb20b8c15bce807a380e8c1fefe68153095701 Mon Sep 17 00:00:00 2001 From: Ruben Sousa Date: Mon, 10 Feb 2025 22:03:21 +0100 Subject: [PATCH 1/4] Pass DpadRecyclerView instead of RecyclerView to listeners --- docs/getting_started.md | 4 ++-- docs/migrating_leanback.md | 4 ++-- docs/selection.md | 4 ++-- .../dpadrecyclerview/testing/DpadGridFragment.kt | 2 +- .../testing/DpadVerticalFragment.kt | 2 +- dpadrecyclerview/api/dpadrecyclerview.api | 14 +++++++------- .../dpadrecyclerview/test/TestGridFragment.kt | 8 ++++---- .../test/TestPaginationFragment.kt | 2 +- .../test/tests/layout/LayoutCompletionTest.kt | 2 +- .../test/tests/selection/SelectionTest.kt | 2 +- .../dpadrecyclerview/OnChildLaidOutListener.kt | 2 +- .../OnViewHolderSelectedListener.kt | 6 +++--- .../dpadrecyclerview/ViewHolderTaskExecutor.kt | 4 ++-- .../layoutmanager/PivotSelector.kt | 4 ++-- .../layoutmanager/layout/LayoutInfo.kt | 7 ++++--- .../dpadrecyclerview/state/DpadScrollState.kt | 2 +- .../animation/PredictiveAnimationFragment.kt | 3 ++- .../ui/screen/compose/ComposeGridFragment.kt | 2 +- .../ui/screen/compose/ComposeListFragment.kt | 2 +- .../ui/screen/detail/DetailListController.kt | 4 ++-- .../sample/ui/screen/grid/GridFragment.kt | 2 +- .../sample/ui/screen/grid/StandardGridFragment.kt | 4 ++-- .../sample/ui/screen/list/ListFragment.kt | 3 +-- 23 files changed, 45 insertions(+), 44 deletions(-) diff --git a/docs/getting_started.md b/docs/getting_started.md index efe404c0..986b210d 100644 --- a/docs/getting_started.md +++ b/docs/getting_started.md @@ -40,14 +40,14 @@ You can observe selection changes using the following: ```kotlin linenums="1" recyclerView.addOnViewHolderSelectedListener(object : OnViewHolderSelectedListener { override fun onViewHolderSelected( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder?, position: Int, subPosition: Int ) {} override fun onViewHolderSelectedAndAligned( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder?, position: Int, subPosition: Int diff --git a/docs/migrating_leanback.md b/docs/migrating_leanback.md index 2f5eb073..a9002623 100644 --- a/docs/migrating_leanback.md +++ b/docs/migrating_leanback.md @@ -127,14 +127,14 @@ The child alignment APIs from `BaseGridView` can now be found in the `ChildAlign ```kotlin linenums="1" recyclerView.addOnViewHolderSelectedListener(object : OnViewHolderSelectedListener { override fun onViewHolderSelected( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder?, position: Int, subPosition: Int ) {} override fun onViewHolderSelectedAndAligned( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder?, position: Int, subPosition: Int diff --git a/docs/selection.md b/docs/selection.md index aeb36d13..cc1c28c5 100644 --- a/docs/selection.md +++ b/docs/selection.md @@ -52,14 +52,14 @@ You can observe selection changes using the following: ```kotlin linenums="1" recyclerView.addOnViewHolderSelectedListener(object : OnViewHolderSelectedListener { override fun onViewHolderSelected( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder?, position: Int, subPosition: Int ) {} override fun onViewHolderSelectedAndAligned( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder?, position: Int, subPosition: Int diff --git a/dpadrecyclerview-testing/src/androidTest/java/com/rubensousa/dpadrecyclerview/testing/DpadGridFragment.kt b/dpadrecyclerview-testing/src/androidTest/java/com/rubensousa/dpadrecyclerview/testing/DpadGridFragment.kt index 8b66217d..c8740fe0 100644 --- a/dpadrecyclerview-testing/src/androidTest/java/com/rubensousa/dpadrecyclerview/testing/DpadGridFragment.kt +++ b/dpadrecyclerview-testing/src/androidTest/java/com/rubensousa/dpadrecyclerview/testing/DpadGridFragment.kt @@ -61,7 +61,7 @@ class DpadGridFragment : Fragment(R.layout.dpadrecyclerview_test_container), } override fun onViewHolderSelected( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder?, position: Int, subPosition: Int, diff --git a/dpadrecyclerview-testing/src/androidTest/java/com/rubensousa/dpadrecyclerview/testing/DpadVerticalFragment.kt b/dpadrecyclerview-testing/src/androidTest/java/com/rubensousa/dpadrecyclerview/testing/DpadVerticalFragment.kt index 7be16657..aacea7d3 100644 --- a/dpadrecyclerview-testing/src/androidTest/java/com/rubensousa/dpadrecyclerview/testing/DpadVerticalFragment.kt +++ b/dpadrecyclerview-testing/src/androidTest/java/com/rubensousa/dpadrecyclerview/testing/DpadVerticalFragment.kt @@ -45,7 +45,7 @@ class DpadVerticalFragment : Fragment(R.layout.dpadrecyclerview_test_container), } override fun onViewHolderSelected( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder?, position: Int, subPosition: Int diff --git a/dpadrecyclerview/api/dpadrecyclerview.api b/dpadrecyclerview/api/dpadrecyclerview.api index 52ade733..247a4b37 100644 --- a/dpadrecyclerview/api/dpadrecyclerview.api +++ b/dpadrecyclerview/api/dpadrecyclerview.api @@ -336,7 +336,7 @@ public final class com/rubensousa/dpadrecyclerview/FocusableDirection : java/lan } public abstract interface class com/rubensousa/dpadrecyclerview/OnChildLaidOutListener { - public abstract fun onChildLaidOut (Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V + public abstract fun onChildLaidOut (Lcom/rubensousa/dpadrecyclerview/DpadRecyclerView;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V } public abstract interface class com/rubensousa/dpadrecyclerview/OnFocusLostListener { @@ -348,15 +348,15 @@ public abstract interface class com/rubensousa/dpadrecyclerview/OnViewFocusedLis } public abstract interface class com/rubensousa/dpadrecyclerview/OnViewHolderSelectedListener { - public abstract fun onViewHolderDeselected (Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V - public abstract fun onViewHolderSelected (Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;II)V - public abstract fun onViewHolderSelectedAndAligned (Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;II)V + public abstract fun onViewHolderDeselected (Lcom/rubensousa/dpadrecyclerview/DpadRecyclerView;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V + public abstract fun onViewHolderSelected (Lcom/rubensousa/dpadrecyclerview/DpadRecyclerView;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;II)V + public abstract fun onViewHolderSelectedAndAligned (Lcom/rubensousa/dpadrecyclerview/DpadRecyclerView;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;II)V } public final class com/rubensousa/dpadrecyclerview/OnViewHolderSelectedListener$DefaultImpls { - public static fun onViewHolderDeselected (Lcom/rubensousa/dpadrecyclerview/OnViewHolderSelectedListener;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V - public static fun onViewHolderSelected (Lcom/rubensousa/dpadrecyclerview/OnViewHolderSelectedListener;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;II)V - public static fun onViewHolderSelectedAndAligned (Lcom/rubensousa/dpadrecyclerview/OnViewHolderSelectedListener;Landroidx/recyclerview/widget/RecyclerView;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;II)V + public static fun onViewHolderDeselected (Lcom/rubensousa/dpadrecyclerview/OnViewHolderSelectedListener;Lcom/rubensousa/dpadrecyclerview/DpadRecyclerView;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;)V + public static fun onViewHolderSelected (Lcom/rubensousa/dpadrecyclerview/OnViewHolderSelectedListener;Lcom/rubensousa/dpadrecyclerview/DpadRecyclerView;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;II)V + public static fun onViewHolderSelectedAndAligned (Lcom/rubensousa/dpadrecyclerview/OnViewHolderSelectedListener;Lcom/rubensousa/dpadrecyclerview/DpadRecyclerView;Landroidx/recyclerview/widget/RecyclerView$ViewHolder;II)V } public final class com/rubensousa/dpadrecyclerview/ParentAlignment : android/os/Parcelable { diff --git a/dpadrecyclerview/src/androidTest/kotlin/com/rubensousa/dpadrecyclerview/test/TestGridFragment.kt b/dpadrecyclerview/src/androidTest/kotlin/com/rubensousa/dpadrecyclerview/test/TestGridFragment.kt index 9cd9a650..fb9aa7a4 100644 --- a/dpadrecyclerview/src/androidTest/kotlin/com/rubensousa/dpadrecyclerview/test/TestGridFragment.kt +++ b/dpadrecyclerview/src/androidTest/kotlin/com/rubensousa/dpadrecyclerview/test/TestGridFragment.kt @@ -129,12 +129,12 @@ open class TestGridFragment : Fragment(R.layout.dpadrecyclerview_test_container) ) } - override fun onViewHolderDeselected(parent: RecyclerView, child: RecyclerView.ViewHolder) { + override fun onViewHolderDeselected(parent: DpadRecyclerView, child: RecyclerView.ViewHolder) { deselectionEvents.add(DpadDeselectionEvent(child)) } override fun onViewHolderSelected( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder?, position: Int, subPosition: Int @@ -143,7 +143,7 @@ open class TestGridFragment : Fragment(R.layout.dpadrecyclerview_test_container) } override fun onViewHolderSelectedAndAligned( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder?, position: Int, subPosition: Int @@ -218,7 +218,7 @@ open class TestGridFragment : Fragment(R.layout.dpadrecyclerview_test_container) focusEvents.add(DpadFocusEvent(parent, child, parent.layoutPosition)) } - override fun onChildLaidOut(parent: RecyclerView, child: RecyclerView.ViewHolder) { + override fun onChildLaidOut(parent: DpadRecyclerView, child: RecyclerView.ViewHolder) { layoutEvents.add(child) } diff --git a/dpadrecyclerview/src/androidTest/kotlin/com/rubensousa/dpadrecyclerview/test/TestPaginationFragment.kt b/dpadrecyclerview/src/androidTest/kotlin/com/rubensousa/dpadrecyclerview/test/TestPaginationFragment.kt index c4e7ddb0..c6757467 100644 --- a/dpadrecyclerview/src/androidTest/kotlin/com/rubensousa/dpadrecyclerview/test/TestPaginationFragment.kt +++ b/dpadrecyclerview/src/androidTest/kotlin/com/rubensousa/dpadrecyclerview/test/TestPaginationFragment.kt @@ -76,7 +76,7 @@ class TestPaginationFragment : TestGridFragment() { } override fun onViewHolderSelected( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder?, position: Int, subPosition: Int diff --git a/dpadrecyclerview/src/androidTest/kotlin/com/rubensousa/dpadrecyclerview/test/tests/layout/LayoutCompletionTest.kt b/dpadrecyclerview/src/androidTest/kotlin/com/rubensousa/dpadrecyclerview/test/tests/layout/LayoutCompletionTest.kt index 240e8b58..88eb6e71 100644 --- a/dpadrecyclerview/src/androidTest/kotlin/com/rubensousa/dpadrecyclerview/test/tests/layout/LayoutCompletionTest.kt +++ b/dpadrecyclerview/src/androidTest/kotlin/com/rubensousa/dpadrecyclerview/test/tests/layout/LayoutCompletionTest.kt @@ -105,7 +105,7 @@ class LayoutCompletionTest : DpadRecyclerViewTest() { repeat(listeners) { currentRecyclerView!!.addOnChildLaidOutListener(object : OnChildLaidOutListener { override fun onChildLaidOut( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder ) { currentRecyclerView.removeOnChildLaidOutListener(this) diff --git a/dpadrecyclerview/src/androidTest/kotlin/com/rubensousa/dpadrecyclerview/test/tests/selection/SelectionTest.kt b/dpadrecyclerview/src/androidTest/kotlin/com/rubensousa/dpadrecyclerview/test/tests/selection/SelectionTest.kt index 1c5fa149..12dcb1b2 100644 --- a/dpadrecyclerview/src/androidTest/kotlin/com/rubensousa/dpadrecyclerview/test/tests/selection/SelectionTest.kt +++ b/dpadrecyclerview/src/androidTest/kotlin/com/rubensousa/dpadrecyclerview/test/tests/selection/SelectionTest.kt @@ -349,7 +349,7 @@ class SelectionTest : DpadRecyclerViewTest() { recyclerView.addOnViewHolderSelectedListener(object : OnViewHolderSelectedListener { override fun onViewHolderSelected( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder?, position: Int, subPosition: Int diff --git a/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/OnChildLaidOutListener.kt b/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/OnChildLaidOutListener.kt index 771261fb..9f82200a 100644 --- a/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/OnChildLaidOutListener.kt +++ b/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/OnChildLaidOutListener.kt @@ -28,5 +28,5 @@ interface OnChildLaidOutListener { * @param parent the [RecyclerView] that contains this child * @param child the [RecyclerView.ViewHolder] that was laid out */ - fun onChildLaidOut(parent: RecyclerView, child: RecyclerView.ViewHolder) + fun onChildLaidOut(parent: DpadRecyclerView, child: RecyclerView.ViewHolder) } \ No newline at end of file diff --git a/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/OnViewHolderSelectedListener.kt b/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/OnViewHolderSelectedListener.kt index 71f9119c..ddba9955 100644 --- a/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/OnViewHolderSelectedListener.kt +++ b/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/OnViewHolderSelectedListener.kt @@ -40,7 +40,7 @@ interface OnViewHolderSelectedListener { * or 0 if there is no custom alignment */ fun onViewHolderSelected( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder?, position: Int, subPosition: Int @@ -59,7 +59,7 @@ interface OnViewHolderSelectedListener { * or 0 if there is no custom alignment */ fun onViewHolderSelectedAndAligned( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder?, position: Int, subPosition: Int @@ -71,7 +71,7 @@ interface OnViewHolderSelectedListener { * @param child The ViewHolder within the RecyclerView that was deselected */ fun onViewHolderDeselected( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder, ) { } diff --git a/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/ViewHolderTaskExecutor.kt b/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/ViewHolderTaskExecutor.kt index 33b5849b..88690ba0 100644 --- a/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/ViewHolderTaskExecutor.kt +++ b/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/ViewHolderTaskExecutor.kt @@ -37,7 +37,7 @@ internal class ViewHolderTaskExecutor : OnViewHolderSelectedListener { } override fun onViewHolderSelected( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder?, position: Int, subPosition: Int @@ -52,7 +52,7 @@ internal class ViewHolderTaskExecutor : OnViewHolderSelectedListener { } override fun onViewHolderSelectedAndAligned( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder?, position: Int, subPosition: Int diff --git a/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/PivotSelector.kt b/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/PivotSelector.kt index a5ce3da5..97dc226d 100644 --- a/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/PivotSelector.kt +++ b/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/PivotSelector.kt @@ -57,7 +57,7 @@ internal class PivotSelector( * Set to [OFFSET_DISABLED] means we should stop adding it to [position] until the next layout. */ private var positionOffset = 0 - private var recyclerView: RecyclerView? = null + private var recyclerView: DpadRecyclerView? = null private var isSelectionUpdatePending = false private val selectionListeners = ArrayList() private val focusListeners = ArrayList() @@ -444,7 +444,7 @@ internal class PivotSelector( focusListeners.clear() } - fun setRecyclerView(recyclerView: RecyclerView?) { + fun setRecyclerView(recyclerView: DpadRecyclerView?) { this.recyclerView = recyclerView } diff --git a/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/layout/LayoutInfo.kt b/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/layout/LayoutInfo.kt index c3e400cb..bec83bdc 100644 --- a/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/layout/LayoutInfo.kt +++ b/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/layoutmanager/layout/LayoutInfo.kt @@ -23,6 +23,7 @@ import androidx.recyclerview.widget.OrientationHelper import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView.LayoutManager import androidx.recyclerview.widget.RecyclerView.ViewHolder +import com.rubensousa.dpadrecyclerview.DpadRecyclerView import com.rubensousa.dpadrecyclerview.layoutmanager.DpadLayoutParams import com.rubensousa.dpadrecyclerview.layoutmanager.LayoutConfiguration @@ -66,7 +67,7 @@ internal class LayoutInfo( var isLoopingStart = false private set - private var recyclerView: RecyclerView? = null + private var recyclerView: DpadRecyclerView? = null fun getConfiguration() = configuration @@ -76,7 +77,7 @@ internal class LayoutInfo( fun isVertical() = configuration.isVertical() - fun getRecyclerView(): RecyclerView? = recyclerView + fun getRecyclerView(): DpadRecyclerView? = recyclerView fun updateOrientation() { orientationHelper = OrientationHelper.createOrientationHelper( @@ -113,7 +114,7 @@ internal class LayoutInfo( this.isLoopingAllowed = isLoopingAllowed } - fun setRecyclerView(recyclerView: RecyclerView?) { + fun setRecyclerView(recyclerView: DpadRecyclerView?) { this.recyclerView = recyclerView } diff --git a/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/state/DpadScrollState.kt b/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/state/DpadScrollState.kt index 0010a72c..db7bd53f 100644 --- a/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/state/DpadScrollState.kt +++ b/dpadrecyclerview/src/main/java/com/rubensousa/dpadrecyclerview/state/DpadScrollState.kt @@ -33,7 +33,7 @@ class DpadScrollState internal constructor() { private val states = mutableMapOf() private val selectionListener = object : OnViewHolderSelectedListener { override fun onViewHolderSelectedAndAligned( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder?, position: Int, subPosition: Int diff --git a/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/animation/PredictiveAnimationFragment.kt b/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/animation/PredictiveAnimationFragment.kt index 03413c52..163f6a7c 100644 --- a/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/animation/PredictiveAnimationFragment.kt +++ b/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/animation/PredictiveAnimationFragment.kt @@ -14,6 +14,7 @@ import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import androidx.recyclerview.widget.RecyclerView +import com.rubensousa.dpadrecyclerview.DpadRecyclerView import com.rubensousa.dpadrecyclerview.OnViewHolderSelectedListener import com.rubensousa.dpadrecyclerview.compose.DpadComposeFocusViewHolder import com.rubensousa.dpadrecyclerview.sample.R @@ -40,7 +41,7 @@ class PredictiveAnimationFragment : Fragment(R.layout.screen_recyclerview) { adapter = itemAdapter addOnViewHolderSelectedListener(object : OnViewHolderSelectedListener { override fun onViewHolderSelected( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder?, position: Int, subPosition: Int, diff --git a/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/compose/ComposeGridFragment.kt b/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/compose/ComposeGridFragment.kt index 17f8bf36..8459c3df 100644 --- a/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/compose/ComposeGridFragment.kt +++ b/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/compose/ComposeGridFragment.kt @@ -80,7 +80,7 @@ class ComposeGridFragment : Fragment(R.layout.screen_recyclerview) { ) addOnViewHolderSelectedListener(object : OnViewHolderSelectedListener { override fun onViewHolderSelected( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder?, position: Int, subPosition: Int diff --git a/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/compose/ComposeListFragment.kt b/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/compose/ComposeListFragment.kt index d88e9233..2746c44b 100644 --- a/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/compose/ComposeListFragment.kt +++ b/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/compose/ComposeListFragment.kt @@ -124,7 +124,7 @@ class ComposeListFragment : Fragment(R.layout.screen_recyclerview) { ) addOnViewHolderSelectedListener(object : OnViewHolderSelectedListener { override fun onViewHolderSelected( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder?, position: Int, subPosition: Int diff --git a/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/detail/DetailListController.kt b/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/detail/DetailListController.kt index 7863d8ca..5229a81b 100644 --- a/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/detail/DetailListController.kt +++ b/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/detail/DetailListController.kt @@ -136,7 +136,7 @@ class DetailListController { ) { recyclerView.addOnViewHolderSelectedListener(object : OnViewHolderSelectedListener { override fun onViewHolderSelected( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder?, position: Int, subPosition: Int @@ -162,7 +162,7 @@ class DetailListController { recyclerView.addOnViewHolderSelectedListener(object : OnViewHolderSelectedListener { override fun onViewHolderSelected( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder?, position: Int, subPosition: Int diff --git a/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/grid/GridFragment.kt b/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/grid/GridFragment.kt index 206ee2f5..b552148f 100644 --- a/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/grid/GridFragment.kt +++ b/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/grid/GridFragment.kt @@ -82,7 +82,7 @@ class GridFragment : Fragment(R.layout.screen_recyclerview) { setReverseLayout(args.reverseLayout) addOnViewHolderSelectedListener(object : OnViewHolderSelectedListener { override fun onViewHolderSelected( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder?, position: Int, subPosition: Int, diff --git a/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/grid/StandardGridFragment.kt b/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/grid/StandardGridFragment.kt index 87e954a4..185a6516 100644 --- a/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/grid/StandardGridFragment.kt +++ b/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/grid/StandardGridFragment.kt @@ -153,7 +153,7 @@ class StandardGridFragment : Fragment(R.layout.screen_standard_grid) { ) addOnViewHolderSelectedListener(object : OnViewHolderSelectedListener { override fun onViewHolderSelected( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder?, position: Int, subPosition: Int @@ -163,7 +163,7 @@ class StandardGridFragment : Fragment(R.layout.screen_standard_grid) { } override fun onViewHolderSelectedAndAligned( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder?, position: Int, subPosition: Int diff --git a/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/list/ListFragment.kt b/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/list/ListFragment.kt index 17ddff62..039c551d 100644 --- a/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/list/ListFragment.kt +++ b/sample/src/main/java/com/rubensousa/dpadrecyclerview/sample/ui/screen/list/ListFragment.kt @@ -25,7 +25,6 @@ import androidx.navigation.fragment.navArgs import androidx.recyclerview.widget.ConcatAdapter import androidx.recyclerview.widget.RecyclerView import com.rubensousa.dpadrecyclerview.AlignmentLookup -import com.rubensousa.dpadrecyclerview.BuildConfig import com.rubensousa.dpadrecyclerview.ChildAlignment import com.rubensousa.dpadrecyclerview.DpadRecyclerView import com.rubensousa.dpadrecyclerview.OnViewHolderSelectedListener @@ -167,7 +166,7 @@ class ListFragment : Fragment(R.layout.screen_recyclerview) { } addOnViewHolderSelectedListener(object : OnViewHolderSelectedListener { override fun onViewHolderSelected( - parent: RecyclerView, + parent: DpadRecyclerView, child: RecyclerView.ViewHolder?, position: Int, subPosition: Int From 85e09f49391f373ec56a7769d6a7dc36a2e46626 Mon Sep 17 00:00:00 2001 From: Ruben Sousa Date: Mon, 10 Feb 2025 22:08:07 +0100 Subject: [PATCH 2/4] Remove report rule from fast tests --- .../dpadrecyclerview/compose/DpadClickableIntegrationTest.kt | 4 ---- .../compose/DpadComposeFocusViewHolderTest.kt | 4 ---- .../dpadrecyclerview/compose/DpadComposeViewHolderTest.kt | 4 ---- .../dpadrecyclerview/testing/test/RecyclerViewTest.kt | 5 ----- 4 files changed, 17 deletions(-) diff --git a/dpadrecyclerview-compose/src/androidTest/java/com/rubensousa/dpadrecyclerview/compose/DpadClickableIntegrationTest.kt b/dpadrecyclerview-compose/src/androidTest/java/com/rubensousa/dpadrecyclerview/compose/DpadClickableIntegrationTest.kt index fceeb2c2..e29efb2c 100644 --- a/dpadrecyclerview-compose/src/androidTest/java/com/rubensousa/dpadrecyclerview/compose/DpadClickableIntegrationTest.kt +++ b/dpadrecyclerview-compose/src/androidTest/java/com/rubensousa/dpadrecyclerview/compose/DpadClickableIntegrationTest.kt @@ -8,7 +8,6 @@ import androidx.compose.ui.test.onNodeWithText import androidx.test.espresso.Espresso import androidx.test.espresso.matcher.ViewMatchers.withId import com.google.common.truth.Truth.assertThat -import com.rubensousa.dpadrecyclerview.testfixtures.DefaultInstrumentedReportRule import com.rubensousa.dpadrecyclerview.testing.KeyEvents import com.rubensousa.dpadrecyclerview.testing.assertions.DpadViewAssertions import org.junit.Before @@ -17,9 +16,6 @@ import org.junit.Test class DpadClickableIntegrationTest { - @get:Rule(order = -1) - val report = DefaultInstrumentedReportRule() - @get:Rule val composeTestRule = createAndroidComposeRule() diff --git a/dpadrecyclerview-compose/src/androidTest/java/com/rubensousa/dpadrecyclerview/compose/DpadComposeFocusViewHolderTest.kt b/dpadrecyclerview-compose/src/androidTest/java/com/rubensousa/dpadrecyclerview/compose/DpadComposeFocusViewHolderTest.kt index f6de8511..850339b8 100644 --- a/dpadrecyclerview-compose/src/androidTest/java/com/rubensousa/dpadrecyclerview/compose/DpadComposeFocusViewHolderTest.kt +++ b/dpadrecyclerview-compose/src/androidTest/java/com/rubensousa/dpadrecyclerview/compose/DpadComposeFocusViewHolderTest.kt @@ -30,7 +30,6 @@ import androidx.test.espresso.matcher.ViewMatchers import com.google.common.truth.Truth.assertThat import com.rubensousa.dpadrecyclerview.DpadRecyclerView import com.rubensousa.dpadrecyclerview.ExtraLayoutSpaceStrategy -import com.rubensousa.dpadrecyclerview.testfixtures.DefaultInstrumentedReportRule import com.rubensousa.dpadrecyclerview.testfixtures.DpadFocusEvent import com.rubensousa.dpadrecyclerview.testing.KeyEvents import com.rubensousa.dpadrecyclerview.testing.R @@ -42,9 +41,6 @@ import org.junit.Test class DpadComposeFocusViewHolderTest { - @get:Rule(order = -1) - val report = DefaultInstrumentedReportRule() - @get:Rule val composeTestRule = createAndroidComposeRule() diff --git a/dpadrecyclerview-compose/src/androidTest/java/com/rubensousa/dpadrecyclerview/compose/DpadComposeViewHolderTest.kt b/dpadrecyclerview-compose/src/androidTest/java/com/rubensousa/dpadrecyclerview/compose/DpadComposeViewHolderTest.kt index 4f86893e..329574d5 100644 --- a/dpadrecyclerview-compose/src/androidTest/java/com/rubensousa/dpadrecyclerview/compose/DpadComposeViewHolderTest.kt +++ b/dpadrecyclerview-compose/src/androidTest/java/com/rubensousa/dpadrecyclerview/compose/DpadComposeViewHolderTest.kt @@ -28,7 +28,6 @@ import androidx.test.espresso.matcher.ViewMatchers import com.google.common.truth.Truth.assertThat import com.rubensousa.dpadrecyclerview.DpadRecyclerView import com.rubensousa.dpadrecyclerview.ExtraLayoutSpaceStrategy -import com.rubensousa.dpadrecyclerview.testfixtures.DefaultInstrumentedReportRule import com.rubensousa.dpadrecyclerview.testfixtures.DpadFocusEvent import com.rubensousa.dpadrecyclerview.testing.KeyEvents import com.rubensousa.dpadrecyclerview.testing.R @@ -39,9 +38,6 @@ import org.junit.Test class DpadComposeViewHolderTest { - @get:Rule(order = -1) - val report = DefaultInstrumentedReportRule() - @get:Rule val composeTestRule = createAndroidComposeRule() diff --git a/dpadrecyclerview-testing/src/androidTest/java/com/rubensousa/dpadrecyclerview/testing/test/RecyclerViewTest.kt b/dpadrecyclerview-testing/src/androidTest/java/com/rubensousa/dpadrecyclerview/testing/test/RecyclerViewTest.kt index 7b604def..47a8ab52 100644 --- a/dpadrecyclerview-testing/src/androidTest/java/com/rubensousa/dpadrecyclerview/testing/test/RecyclerViewTest.kt +++ b/dpadrecyclerview-testing/src/androidTest/java/com/rubensousa/dpadrecyclerview/testing/test/RecyclerViewTest.kt @@ -24,17 +24,12 @@ import androidx.test.espresso.ViewAssertion import androidx.test.espresso.ViewInteraction import androidx.test.espresso.matcher.ViewMatchers import com.google.common.truth.Truth.assertThat -import com.rubensousa.dpadrecyclerview.testfixtures.DefaultInstrumentedReportRule import com.rubensousa.dpadrecyclerview.testing.DpadGridFragment import com.rubensousa.dpadrecyclerview.testing.DpadSubPositionFragment import com.rubensousa.dpadrecyclerview.testing.R -import org.junit.Rule abstract class RecyclerViewTest { - @get:Rule(order = -1) - val report = DefaultInstrumentedReportRule() - private lateinit var subPositionFragment: FragmentScenario private lateinit var gridFragment: FragmentScenario From e76e8c486af2be42c39aaf39293eddcf1614587d Mon Sep 17 00:00:00 2001 From: Ruben Sousa Date: Mon, 10 Feb 2025 22:18:41 +0100 Subject: [PATCH 3/4] Bump to 1.4.1 --- docs/changelog.md | 22 ++++++++++++++++++++++ gradle.properties | 2 +- mkdocs.yml | 2 +- 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/docs/changelog.md b/docs/changelog.md index 9e5271a5..3fd6cd5c 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,5 +1,17 @@ # Changelog +## Version 1.4.1 + +2025-02-11 + +#### Bug fixes + +- Fixed layout inconsistency when scrolling if `Edge.Min` is used for parent alignment. ([#291](https://github.com/rubensousa/DpadRecyclerView/pull/291)) + +#### API changes + +- Breaking change: Now DpadRecyclerView is passed in `OnViewHolderSelectedListener` and `OnChildLaidOutListener` instead of plain `RecyclerView`. + ## Version 1.4.0 ### 1.4.0 @@ -8,6 +20,16 @@ - No changes since `1.4.0-rc02` +#### Important changes since 1.3.0 + +- Added `setItemSpacing`, `setItemEdgeSpacing` and other spacing setters to `DpadRecyclerView`. Documentation available [here](recipes/spacing.md). +- Added `onViewHolderDeselected` to `OnViewHolderSelectedListener` +- Added `OnFocusLostListener` to observe focus losses of `DpadRecyclerView` +- Added `DpadRecyclerView.setAlignmentLookup` to customize the alignment for individual positions and bypassing the default alignment configurations +- Improved `Modifier.dpadClickable` to support long clicks +- New `DpadScrollableLayout` for screens that need a scrollable header at the same level as a `DpadRecyclerView` +- Testing: Added `KeyEvents.longClick` to trigger long clicks from tests + ### 1.4.0-rc02 2024-11-15 diff --git a/gradle.properties b/gradle.properties index f45bf3a6..76fe9633 100644 --- a/gradle.properties +++ b/gradle.properties @@ -27,7 +27,7 @@ SONATYPE_HOST=S01 RELEASE_SIGNING_ENABLED=true GROUP=com.rubensousa.dpadrecyclerview -VERSION_NAME=1.4.0 +VERSION_NAME=1.4.1 POM_URL=https://github.com/rubensousa/dpadrecyclerview/ POM_SCM_URL=https://github.com/rubensousa/dpadrecyclerview/ POM_SCM_CONNECTION=scm:git:git://github.com/rubensousa/dpadrecyclerview.git diff --git a/mkdocs.yml b/mkdocs.yml index 79afe064..7a7b7c6f 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -24,7 +24,7 @@ theme: extra: dpadrecyclerview: - version: '1.4.0' + version: '1.4.1' social: - icon: 'fontawesome/brands/github' link: 'https://github.com/rubensousa/DpadRecyclerView' From d2793f304322323e1359359aad324ce2c76c9cf2 Mon Sep 17 00:00:00 2001 From: Ruben Sousa Date: Mon, 10 Feb 2025 22:23:28 +0100 Subject: [PATCH 4/4] Use artifacts action v4 --- .github/workflows/pr.yml | 2 +- .github/workflows/push.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 5844ca97..5498e028 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -124,7 +124,7 @@ jobs: ./gradlew --build-cache dpadrecyclerview:connectedDebugAndroidTest - name: Upload artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{ matrix.api-level }}-${{ matrix.arch }}-instrumentation-test-results path: | diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 3e873c56..b2157c38 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -115,7 +115,7 @@ jobs: ./scripts/uninstall_test_services.sh - name: Upload artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: ${{ matrix.api-level }}-${{ matrix.arch }}-instrumentation-test-results path: |