Fixed
Status Update
Comments
ma...@google.com <ma...@google.com> #2
Thanks for your request. I understand that this functionality is very desired, however, ScrollerPosition or Vertical/Horizontal scroller will never have it, because Scrollers know nothing about their content, similar to ScrollView in Android.
This feature request, however, is doable in LazyColumnItems
or LazyRowItems
as these components are aware of their children and are able to provide it without any contract breakages.
I will redirect this feature request to the LazyColumnItems component. Let me know if that's not what you want.
na...@gmail.com <na...@gmail.com> #3
Thank you for the quick response!
For my specific usecase, that would be sufficient, yes. However, it sounds like a much less flexible solution because (as far as I understand it) the goal of `LazyColumnItems` and `LazyRowItems` is to provide an easy API for displaying a big amount of items that look very similar, analogous to a `RecyclerView` from the current API. Using them to display items with wildly different structures would be possible, but "against the spirit" of the component.
Using the feature would then be restricted to the specific case of lists of items, instead of generic columns/rows. Not exactly ideal, though I understand your argument, and can't really think of a better solution right now.
For my specific usecase, that would be sufficient, yes. However, it sounds like a much less flexible solution because (as far as I understand it) the goal of `LazyColumnItems` and `LazyRowItems` is to provide an easy API for displaying a big amount of items that look very similar, analogous to a `RecyclerView` from the current API. Using them to display items with wildly different structures would be possible, but "against the spirit" of the component.
Using the feature would then be restricted to the specific case of lists of items, instead of generic columns/rows. Not exactly ideal, though I understand your argument, and can't really think of a better solution right now.
an...@google.com <an...@google.com> #4
Basically a duplicate of 159307669
an...@google.com <an...@google.com> #5
After https://android-review.googlesource.com/c/platform/frameworks/support/+/1413667 we can do smoothScrollBy() and snapToItemIndex().
As part of this ticket we should now implement smoothScrollToItemIndex() functionality
As part of this ticket we should now implement smoothScrollToItemIndex() functionality
je...@google.com <je...@google.com> #6
FYI: this also needs to be implemented in the test harness as an action on SemanticsNodeInteraction
because you don't always have access to the LazyListState
.
For example:
rule.onNodeWithTag("my-lazy-column").performScrollToIndex(60)
rule.onNodeWithTag("my-lazy-column").performScrollToKey(MyItemKey("season6-episode12"))
ap...@google.com <ap...@google.com> #7
Project: platform/frameworks/support
Branch: androidx-main
commit 14511a46e45e620505a22c007211df14848e436c
Author: Jelle Fresen <jellefresen@google.com>
Date: Mon Mar 22 18:59:38 2021
Add scroll to item actions for LazyLists in tests
Defines a set of SemanticsPropertyKeys that are added in LazyList and
used in test actions to the effect of scrolling a LazyList to an item
that might not yet be composed.
Bug: 182259407
Bug: 178483889
Bug: 161584524
Fix: 183714443
Test: LazySemanticsTest, ScrollToIndexTest, ScrollToKeyTest
Relnote: "Added `SemanticsActions.ScrollToIndex` to scroll a list with
indexed items to the item with a certain index, and
`SemanticsProperties.IndexForKey` to get the index of an item in a list
with keyed items. Both actions are implemented by LazyList."
Relnote: "Added `SemanticsNodeInteraction.performScrollToIndex` that
scrolls a list to the given index, and
`SemanticsNodeInteraction.performScrollToKey` that scrolls a list to the
item with the given key."
Change-Id: I4fe63399fb620794651e1973730658877bcfeff4
M compose/foundation/foundation/api/1.0.0-beta06.txt
M compose/foundation/foundation/api/current.txt
M compose/foundation/foundation/api/public_plus_experimental_1.0.0-beta06.txt
M compose/foundation/foundation/api/public_plus_experimental_current.txt
M compose/foundation/foundation/api/restricted_1.0.0-beta06.txt
M compose/foundation/foundation/api/restricted_current.txt
A compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazySemanticsTest.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyList.kt
A compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazySemantics.kt
M compose/ui/ui-test/api/public_plus_experimental_1.0.0-beta06.txt
M compose/ui/ui-test/api/public_plus_experimental_current.txt
A compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/actions/ScrollToIndexTest.kt
A compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/actions/ScrollToKeyTest.kt
M compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/Actions.kt
M compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/Filters.kt
M compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/Output.kt
M compose/ui/ui/api/1.0.0-beta06.txt
M compose/ui/ui/api/current.txt
M compose/ui/ui/api/public_plus_experimental_1.0.0-beta06.txt
M compose/ui/ui/api/public_plus_experimental_current.txt
M compose/ui/ui/api/restricted_1.0.0-beta06.txt
M compose/ui/ui/api/restricted_current.txt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsProperties.kt
https://android-review.googlesource.com/1649407
Branch: androidx-main
commit 14511a46e45e620505a22c007211df14848e436c
Author: Jelle Fresen <jellefresen@google.com>
Date: Mon Mar 22 18:59:38 2021
Add scroll to item actions for LazyLists in tests
Defines a set of SemanticsPropertyKeys that are added in LazyList and
used in test actions to the effect of scrolling a LazyList to an item
that might not yet be composed.
Bug: 182259407
Bug: 178483889
Bug: 161584524
Fix: 183714443
Test: LazySemanticsTest, ScrollToIndexTest, ScrollToKeyTest
Relnote: "Added `SemanticsActions.ScrollToIndex` to scroll a list with
indexed items to the item with a certain index, and
`SemanticsProperties.IndexForKey` to get the index of an item in a list
with keyed items. Both actions are implemented by LazyList."
Relnote: "Added `SemanticsNodeInteraction.performScrollToIndex` that
scrolls a list to the given index, and
`SemanticsNodeInteraction.performScrollToKey` that scrolls a list to the
item with the given key."
Change-Id: I4fe63399fb620794651e1973730658877bcfeff4
M compose/foundation/foundation/api/1.0.0-beta06.txt
M compose/foundation/foundation/api/current.txt
M compose/foundation/foundation/api/public_plus_experimental_1.0.0-beta06.txt
M compose/foundation/foundation/api/public_plus_experimental_current.txt
M compose/foundation/foundation/api/restricted_1.0.0-beta06.txt
M compose/foundation/foundation/api/restricted_current.txt
A compose/foundation/foundation/src/androidAndroidTest/kotlin/androidx/compose/foundation/lazy/LazySemanticsTest.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyList.kt
A compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazySemantics.kt
M compose/ui/ui-test/api/public_plus_experimental_1.0.0-beta06.txt
M compose/ui/ui-test/api/public_plus_experimental_current.txt
A compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/actions/ScrollToIndexTest.kt
A compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/actions/ScrollToKeyTest.kt
M compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/Actions.kt
M compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/Filters.kt
M compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/Output.kt
M compose/ui/ui/api/1.0.0-beta06.txt
M compose/ui/ui/api/current.txt
M compose/ui/ui/api/public_plus_experimental_1.0.0-beta06.txt
M compose/ui/ui/api/public_plus_experimental_current.txt
M compose/ui/ui/api/restricted_1.0.0-beta06.txt
M compose/ui/ui/api/restricted_current.txt
M compose/ui/ui/src/commonMain/kotlin/androidx/compose/ui/semantics/SemanticsProperties.kt
ap...@google.com <ap...@google.com> #8
Project: platform/frameworks/support
Branch: androidx-main
commit 59dca3bb1906b988bcc55a2bc44f93063e87a48f
Author: Jelle Fresen <jellefresen@google.com>
Date: Thu Apr 08 16:20:32 2021
Add scroll to matcher action for LazyLists in tests
Adds an action to SemanticsNodeInteraction to scroll to content in a
LazyList identified by a SemanticsMatcher. Adds a filter as well to find
nodes that support this scroll action.
Fix: 161584524
Fix: 182259407
Fix: 182260995
Test: Added ScrollToNodeTest
Relnote: "Added `performScrollToNode(matcher: SemanticsMatcher)` that
scrolls a scrollable container to the content that is matched by the
given matcher."
Change-Id: Ic1cb855e351c7bb683962d618d68782628b70f62
M compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/Actions.kt
M compose/ui/ui-test/api/current.txt
M compose/ui/ui-test/api/public_plus_experimental_current.txt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListState.kt
A compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/actions/ScrollToNodeTest.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazySemantics.kt
M compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/Filters.kt
M compose/ui/ui-test/api/restricted_current.txt
https://android-review.googlesource.com/1815782
Branch: androidx-main
commit 59dca3bb1906b988bcc55a2bc44f93063e87a48f
Author: Jelle Fresen <jellefresen@google.com>
Date: Thu Apr 08 16:20:32 2021
Add scroll to matcher action for LazyLists in tests
Adds an action to SemanticsNodeInteraction to scroll to content in a
LazyList identified by a SemanticsMatcher. Adds a filter as well to find
nodes that support this scroll action.
Fix: 161584524
Fix: 182259407
Fix: 182260995
Test: Added ScrollToNodeTest
Relnote: "Added `performScrollToNode(matcher: SemanticsMatcher)` that
scrolls a scrollable container to the content that is matched by the
given matcher."
Change-Id: Ic1cb855e351c7bb683962d618d68782628b70f62
M compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/Actions.kt
M compose/ui/ui-test/api/current.txt
M compose/ui/ui-test/api/public_plus_experimental_current.txt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazyListState.kt
A compose/ui/ui-test/src/androidAndroidTest/kotlin/androidx/compose/ui/test/actions/ScrollToNodeTest.kt
M compose/foundation/foundation/src/commonMain/kotlin/androidx/compose/foundation/lazy/LazySemantics.kt
M compose/ui/ui-test/src/commonMain/kotlin/androidx/compose/ui/test/Filters.kt
M compose/ui/ui-test/api/restricted_current.txt
Description
It would be very useful if the ScrollerPosition class had one or multiple methods for scrolling to a specific element index instead of a position in pixels. The current API forces developers to do the calculate the height of each element themselves and figure out at which pixel location the desired element is from that.