Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Role and item announcement in Flatlist #31666

Conversation

intergalacticspacehighway
Copy link
Contributor

@intergalacticspacehighway intergalacticspacehighway commented Jun 6, 2021

Summary

Aims to fix - #30977

This PR adds accessibilityRole, accessibilityCollectionItemInfo, accessibilityCollectionInfo APIs to FlatList which enables TalkBack announcements when a list is scrolled or focused.

Changelog

[Android] [Added] - Accessibility announcement for list and grid in FlatList

Test Plan

I tested these testcases where View hierarchy may change.

  • Horizontal FlatList
  • Horizontal FlatList when fixed layout
  • FlatList when numColumns > 1
  • FlatList when numColumns > 1 and fixed layout
  • Simple 1 column FlatList
  • Simple 1 column FlatList - Fixed layout
  • Nested FlatList

All the above cases can be tested with current examples. I've added a nested FlatList example. Let me know if I've missed any cases. Thanks!

Also, while testing, it'd be helpful to reduce the Lorem Ipsum text content in items as accessibility announcements are made after reading the item content.

@facebook-github-bot facebook-github-bot added the CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. label Jun 6, 2021
@pull-bot
Copy link

pull-bot commented Jun 6, 2021

Messages
📖

📋 Verify Changelog Format - A changelog entry has the following format: [CATEGORY] [TYPE] - Message.

CATEGORY may be:
  • General
  • iOS
  • Android
  • JavaScript
  • Internal (for changes that do not need to be called out in the release notes)

TYPE may be:

  • Added, for new features.
  • Changed, for changes in existing functionality.
  • Deprecated, for soon-to-be removed features.
  • Removed, for now removed features.
  • Fixed, for any bug fixes.
  • Security, in case of vulnerabilities.

MESSAGE may answer "what and why" on a feature level. Use this to briefly tell React Native users about notable changes.

Generated by 🚫 dangerJS against 55877da

@analysis-bot
Copy link

analysis-bot commented Jun 6, 2021

Platform Engine Arch Size (bytes) Diff
ios - universal n/a --

Base commit: 006f5af

@analysis-bot
Copy link

analysis-bot commented Jun 6, 2021

Platform Engine Arch Size (bytes) Diff
android hermes arm64-v8a 9,154,497 +884
android hermes armeabi-v7a 8,688,178 +902
android hermes x86 9,595,436 +901
android hermes x86_64 9,563,541 +873
android jsc arm64-v8a 10,798,594 +699
android jsc armeabi-v7a 9,723,540 +720
android jsc x86 10,834,942 +724
android jsc x86_64 11,444,557 +699

Base commit: 52a9fed

@amarlette
Copy link

Thank you for this draft pull request @intergalacticspacehighway! Please tag me when you are ready to move it out of drafts and I can assign a reviewer.

Copy link
Contributor

@blavalla blavalla left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Overall the general approach on the accessibility side looks good to me. I have a few comments you'll want to fix, but they should be pretty easy.

@kacieb, I'm curious to hear your thoughts from the JS side, since this is an Android-specific API that doesn't really have an equivalent on iOS. We'll want to make sure that's clear in the documentation if nothing else, but maybe instead this should not be an API that is on the base view class, and is only on the various list classes.

I suspect this is an API that will be used 99% of the time internally by the various list classes, and not really commonly used by people building their own components, although that is just gut instinct with absolutely no data to back it up! :)

@@ -259,12 +278,54 @@ public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCo
}
}

private boolean isViewVisible(View scrollView, View view) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think you may be able to use AccessibilityNodeInfoCompat's isVisibleToUser method rather than calculating this by hand.

https://developer.android.com/reference/androidx/core/view/accessibility/AccessibilityNodeInfoCompat#isVisibleToUser()

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@@ -135,6 +138,8 @@ public static String getValue(AccessibilityRole role) {
return "android.widget.SpinButton";
case SWITCH:
return "android.widget.Switch";
case LIST:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh wow, I didn't realize we didn't have a role for list! Good catch!

if (accessibilityCollectionInfo != null) {
event.setItemCount(accessibilityCollectionInfo.getInt("rowCount"));

View contentView = ((ViewGroup) host).getChildAt(0);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You probably want to check if host is an instance of ViewGroup before casting it as such, otherwise you could end up with a ClassCastException here.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ReadableMap firstVisible = null;
ReadableMap lastVisible = null;

for(int index = 0; index < ((ViewGroup) contentView).getChildCount(); index++) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

same casting comment here as well

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ReadableMap lastVisible = null;

for(int index = 0; index < ((ViewGroup) contentView).getChildCount(); index++) {
View nextChild = ((ViewGroup) contentView).getChildAt(index);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

And here.

Copy link
Contributor

@fabOnReact fabOnReact Feb 28, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kacieb kacieb requested review from lunaleaps and kacieb June 8, 2021 21:33
@kacieb
Copy link
Contributor

kacieb commented Jun 8, 2021

but maybe instead this should not be an API that is on the base view class, and is only on the various list classes

I think eventually the API needs to be on either View or ScrollView, since those are the underlying native building blocks for these components.

I'm going to pull in @yungsters here as well, who has done some thinking about React Native lists and might be able to weigh in on the best API design for this.

@kacieb kacieb requested a review from yungsters June 8, 2021 21:36
@yungsters
Copy link
Contributor

The accessibilityCollectionInfo API introduced here seems reasonable to me. As a naming nit, could this just be named accessibilityCollection?

new AccessibilityDelegateCompat() {

@Override
public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@blavalla Would you recommend putting onInitializeAccessibilityEvent in a separate class which would handle AccessibilityDelegate for Horizontal or Vertical ScrollView?

<View
importantForAccessibility="yes"
style={styles.cellStyle}
accessibilityCollectionItemInfo={
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The only issue I can think of with this approach is that it needs an additional wrapper View so that we can get the accessibility collection info on the native side.
The solution would be if we can create accessibility-only Views. I think @amarlette had created an issue for the same, but I am able to find it.

@lunaleaps lunaleaps self-assigned this Aug 4, 2021
@react-native-bot react-native-bot added Platform: Android Android applications. Type: Enhancement A new feature or enhancement of an existing feature. labels Oct 1, 2021
@fabOnReact

This comment was marked as outdated.

Copy link
Contributor

@fabOnReact fabOnReact left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @blavalla and @intergalacticspacehighway

These are the issues I found while testing the branch ScrollView functionalities.
I mainly tested scenarios with grid layout (numColums={3}).
I did not test Horizontal Scroll View yet.

I included the changes in this branch.

I tested, documented, and included solutions to these issues in the code review.
The links include videos and explanations of all the issues.
I remain available for any further work, improvement, or questions.
I will keep testing this Pull Request and add new improvements in the upcoming days.

I will further review the other functionalities and the remaining diff in the upcoming days 🙏

const accessibilityCollectionProps = {
itemCount: this.props.data ? this.props.data.length : 0,
rowCount: this._getItemCount(this.props.data),
columnCount: this.props.numColumns,
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
columnCount: this.props.numColumns,
columnCount: numColumnsOrDefault(this.props.numColumns),

numColums default was removed with commit fabOnReact/react-native-notes@7d5895d. Rebasing will trigger a runtime.
More info in my comment fabOnReact/react-native-notes#6 (comment)

Copy link
Contributor

@fabOnReact fabOnReact Feb 24, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks @blavalla
I'm preparing a pull request.
I would publish the following changes:

private boolean isPartiallyScrolledInView(View descendent) {
int scrollDelta = getScrollDelta(descendent);
descendent.getDrawingRect(mTempRect);
return scrollDelta != 0 && Math.abs(scrollDelta) < mTempRect.width();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
return scrollDelta != 0 && Math.abs(scrollDelta) < mTempRect.width();
return Math.abs(scrollDelta) < mTempRect.height();

Fixes issues documented in fabOnReact/react-native-notes#6 (comment) and fabOnReact/react-native-notes#6 (comment)

Changes:

  1. Using height instead of width (more info in my post)
  2. Removing the check on scrollDelta != 0 (more info in my post)

Comment on lines +166 to +176
// If this child's accessibilityCollectionItemInfo is null, we'll check one more nested child.
// Happens when getItemLayout is not passed in FlatList which adds an additional View in the hierarchy.
if (childCount > 0 && accessibilityCollectionItemInfo == null) {
View nestedNextChild = ((ViewGroup) nextChild).getChildAt(0);
if (nestedNextChild != null) {
ReadableMap nestedChildAccessibilityInfo = (ReadableMap) nestedNextChild.getTag(R.id.accessibility_collection_item_info);
if (nestedChildAccessibilityInfo != null) {
accessibilityCollectionItemInfo = nestedChildAccessibilityInfo;
}
}
}

This comment was marked as off-topic.

@Override
public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) {
super.onInitializeAccessibilityEvent(host, event);
event.setScrollable(mScrollEnabled);

This comment was marked as off-topic.

fabOnReact added a commit to fabOnReact/react-native that referenced this pull request Feb 24, 2022
facebook-github-bot pushed a commit that referenced this pull request Apr 20, 2022
… grid) (#33180)

Summary:
This issue fixes [30977][17] . The Pull Request was previously published by [intergalacticspacehighway][13] with [31666][19].
The solution consists of:
1. Adding Javascript logic in the [FlatList][14], SectionList, VirtualizedList components to provide accessibility information (row and column position) for each cell in the method [renderItem][20] as a fourth parameter [accessibilityCollectionItem][21]. The information is saved on the native side in the AccessibilityNodeInfo and announced by TalkBack when changing row, column, or page ([video example][12]). The prop accessibilityCollectionItem is available in the View component which wraps each FlatList cell.
2. Adding Java logic in [ReactScrollView.java][16] and HorizontalScrollView to announce pages with TalkBack when scrolling up/down. The missing AOSP logic in [ScrollView.java][10] (see also the [GridView][11] example) is responsible for announcing Page Scrolling with TalkBack.

Relevant Links:
x [Additional notes on this PR][18]
x [discussion on the additional container View around each FlatList cell][22]
x [commit adding prop getCellsInItemCount to VirtualizedList][23]

## Changelog

[Android] [Added] - Accessibility announcement for list and grid in FlatList

Pull Request resolved: #33180

Test Plan:
[1]. TalkBack announces pages and cells with Horizontal Flatlist in the Paper Renderer ([link][1])
[2]. TalkBack announces pages and cells with Vertical Flatlist in the Paper Renderer ([link][2])
[3]. `FlatList numColumns={undefined}` Should not trigger Runtime Error NoSuchKey exception columnCount when enabling TalkBack. ([link][3])
[4]. TalkBack announces pages and cells with Nested Horizontal Flatlist in the rn-tester app ([link][4])

[1]: fabOnReact/react-native-notes#6 (comment)
[2]: fabOnReact/react-native-notes#6 (comment)
[3]: fabOnReact/react-native-notes#6 (comment)
[4]: fabOnReact/react-native-notes#6 (comment)
[10]:https://github.com/aosp-mirror/platform_frameworks_base/blob/1ac46f932ef88a8f96d652580d8105e361ffc842/core/java/android/widget/AdapterView.java#L1027-L1029 "GridView.java method responsible for calling setFromIndex and setToIndex"
[11]:fabOnReact/react-native-notes#6 (comment) "test case on Android GridView"
[12]:fabOnReact/react-native-notes#6 (comment) "TalkBack announces pages and cells with Horizontal Flatlist in the Paper Renderer"
[13]:https://github.com/intergalacticspacehighway "github intergalacticspacehighway"
[14]:https://github.com/fabriziobertoglio1987/react-native/blob/80acf523a4410adac8005d5c9472fb87f78e12ee/Libraries/Lists/FlatList.js#L617-L636 "FlatList accessibilityCollectionItem"
[16]:https://github.com/fabriziobertoglio1987/react-native/blob/5706bd7d3ee35dca48f85322a2bdcaec0bce2c85/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java#L183-L184 "logic added to ReactScrollView.java"
[17]: #30977
[18]: fabOnReact/react-native-notes#6
[19]: #31666
[20]: https://reactnative.dev/docs/next/flatlist#required-renderitem "FlatList renderItem documentation"
[21]: fabOnReact@7514735 "commit that introduces fourth param accessibilityCollectionItem in callback renderItem"
[22]: #33180 (comment) "discussion on the additional container View around each FlatList cell"
[23]: fabOnReact@d50fd1a "commit adding prop getCellsInItemCount to VirtualizedList"

Reviewed By: kacieb

Differential Revision: D34518929

Pulled By: blavalla

fbshipit-source-id: 410a05263a56162bf505a4cad957b24005ed65ed
facebook-github-bot pushed a commit that referenced this pull request Jun 16, 2022
… grid) - JAVA ONLY CHANGES (#33180)

Summary:
This is the Java-only changes from D34518929 (dd6325b), split out for push safety. Original summary and test plan below:

This issue fixes [30977][17] . The Pull Request was previously published by [intergalacticspacehighway][13] with [31666][19].
The solution consists of:
1. Adding Javascript logic in the [FlatList][14], SectionList, VirtualizedList components to provide accessibility information (row and column position) for each cell in the method [renderItem][20] as a fourth parameter [accessibilityCollectionItem][21]. The information is saved on the native side in the AccessibilityNodeInfo and announced by TalkBack when changing row, column, or page ([video example][12]). The prop accessibilityCollectionItem is available in the View component which wraps each FlatList cell.
2. Adding Java logic in [ReactScrollView.java][16] and HorizontalScrollView to announce pages with TalkBack when scrolling up/down. The missing AOSP logic in [ScrollView.java][10] (see also the [GridView][11] example) is responsible for announcing Page Scrolling with TalkBack.

Relevant Links:
x [Additional notes on this PR][18]
x [discussion on the additional container View around each FlatList cell][22]
x [commit adding prop getCellsInItemCount to VirtualizedList][23]

## Changelog

[Android] [Added] - Accessibility announcement for list and grid in FlatList

Pull Request resolved: #33180

Test Plan:
[1]. TalkBack announces pages and cells with Horizontal Flatlist in the Paper Renderer ([link][1])
[2]. TalkBack announces pages and cells with Vertical Flatlist in the Paper Renderer ([link][2])
[3]. `FlatList numColumns={undefined}` Should not trigger Runtime Error NoSuchKey exception columnCount when enabling TalkBack. ([link][3])
[4]. TalkBack announces pages and cells with Nested Horizontal Flatlist in the rn-tester app ([link][4])

[1]: fabOnReact/react-native-notes#6 (comment)
[2]: fabOnReact/react-native-notes#6 (comment)
[3]: fabOnReact/react-native-notes#6 (comment)
[4]: fabOnReact/react-native-notes#6 (comment)
[10]:https://github.com/aosp-mirror/platform_frameworks_base/blob/1ac46f932ef88a8f96d652580d8105e361ffc842/core/java/android/widget/AdapterView.java#L1027-L1029 "GridView.java method responsible for calling setFromIndex and setToIndex"
[11]:fabOnReact/react-native-notes#6 (comment) "test case on Android GridView"
[12]:fabOnReact/react-native-notes#6 (comment) "TalkBack announces pages and cells with Horizontal Flatlist in the Paper Renderer"
[13]:https://github.com/intergalacticspacehighway "github intergalacticspacehighway"
[14]:https://github.com/fabriziobertoglio1987/react-native/blob/80acf523a4410adac8005d5c9472fb87f78e12ee/Libraries/Lists/FlatList.js#L617-L636 "FlatList accessibilityCollectionItem"
[16]:https://github.com/fabriziobertoglio1987/react-native/blob/5706bd7d3ee35dca48f85322a2bdcaec0bce2c85/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java#L183-L184 "logic added to ReactScrollView.java"
[17]: #30977
[18]: fabOnReact/react-native-notes#6
[19]: #31666
[20]: https://reactnative.dev/docs/next/flatlist#required-renderitem "FlatList renderItem documentation"
[21]: fabOnReact@7514735 "commit that introduces fourth param accessibilityCollectionItem in callback renderItem"
[22]: #33180 (comment) "discussion on the additional container View around each FlatList cell"
[23]: fabOnReact@d50fd1a "commit adding prop getCellsInItemCount to VirtualizedList"

Reviewed By: kacieb

Differential Revision: D37186697

Pulled By: blavalla

fbshipit-source-id: 7bb95274326ded417c6f1365cc8633391f589d1a
facebook-github-bot pushed a commit that referenced this pull request Jun 18, 2022
… grid) - Javascript Only Changes (#33180)

Summary:
This is the Javascript-only changes from D34518929 (dd6325b), split out for push safety. Original summary and test plan below:

This issue fixes [30977][17] . The Pull Request was previously published by [intergalacticspacehighway][13] with [31666][19].
The solution consists of:
1. Adding Javascript logic in the [FlatList][14], SectionList, VirtualizedList components to provide accessibility information (row and column position) for each cell in the method [renderItem][20] as a fourth parameter [accessibilityCollectionItem][21]. The information is saved on the native side in the AccessibilityNodeInfo and announced by TalkBack when changing row, column, or page ([video example][12]). The prop accessibilityCollectionItem is available in the View component which wraps each FlatList cell.
2. Adding Java logic in [ReactScrollView.java][16] and HorizontalScrollView to announce pages with TalkBack when scrolling up/down. The missing AOSP logic in [ScrollView.java][10] (see also the [GridView][11] example) is responsible for announcing Page Scrolling with TalkBack.

Relevant Links:
x [Additional notes on this PR][18]
x [discussion on the additional container View around each FlatList cell][22]
x [commit adding prop getCellsInItemCount to VirtualizedList][23]

## Changelog

[Android] [Added] - Accessibility announcement for list and grid in FlatList

Pull Request resolved: #33180

Test Plan:
[1]. TalkBack announces pages and cells with Horizontal Flatlist in the Paper Renderer ([link][1])
[2]. TalkBack announces pages and cells with Vertical Flatlist in the Paper Renderer ([link][2])
[3]. `FlatList numColumns={undefined}` Should not trigger Runtime Error NoSuchKey exception columnCount when enabling TalkBack. ([link][3])
[4]. TalkBack announces pages and cells with Nested Horizontal Flatlist in the rn-tester app ([link][4])

[1]: fabOnReact/react-native-notes#6 (comment)
[2]: fabOnReact/react-native-notes#6 (comment)
[3]: fabOnReact/react-native-notes#6 (comment)
[4]: fabOnReact/react-native-notes#6 (comment)
[10]:https://github.com/aosp-mirror/platform_frameworks_base/blob/1ac46f932ef88a8f96d652580d8105e361ffc842/core/java/android/widget/AdapterView.java#L1027-L1029 "GridView.java method responsible for calling setFromIndex and setToIndex"
[11]:fabOnReact/react-native-notes#6 (comment) "test case on Android GridView"
[12]:fabOnReact/react-native-notes#6 (comment) "TalkBack announces pages and cells with Horizontal Flatlist in the Paper Renderer"
[13]:https://github.com/intergalacticspacehighway "github intergalacticspacehighway"
[14]:https://github.com/fabriziobertoglio1987/react-native/blob/80acf523a4410adac8005d5c9472fb87f78e12ee/Libraries/Lists/FlatList.js#L617-L636 "FlatList accessibilityCollectionItem"
[16]:https://github.com/fabriziobertoglio1987/react-native/blob/5706bd7d3ee35dca48f85322a2bdcaec0bce2c85/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java#L183-L184 "logic added to ReactScrollView.java"
[17]: #30977
[18]: fabOnReact/react-native-notes#6
[19]: #31666
[20]: https://reactnative.dev/docs/next/flatlist#required-renderitem "FlatList renderItem documentation"
[21]: fabOnReact@7514735 "commit that introduces fourth param accessibilityCollectionItem in callback renderItem"
[22]: #33180 (comment) "discussion on the additional container View around each FlatList cell"
[23]: fabOnReact@d50fd1a "commit adding prop getCellsInItemCount to VirtualizedList"

Reviewed By: kacieb

Differential Revision: D37189197

Pulled By: blavalla

fbshipit-source-id: 3765213c5d8bfde56e0e5f155cdd899c368512e7
facebook-github-bot pushed a commit that referenced this pull request Aug 3, 2022
… grid) - Javascript Only Changes (#33180)

Summary:
This is the Javascript-only changes from D34518929 (dd6325b), split out for push safety. Original summary and test plan below:

This issue fixes [30977][17] . The Pull Request was previously published by [intergalacticspacehighway][13] with [31666][19].
The solution consists of:
1. Adding Javascript logic in the [FlatList][14], SectionList, VirtualizedList components to provide accessibility information (row and column position) for each cell in the method [renderItem][20] as a fourth parameter [accessibilityCollectionItem][21]. The information is saved on the native side in the AccessibilityNodeInfo and announced by TalkBack when changing row, column, or page ([video example][12]). The prop accessibilityCollectionItem is available in the View component which wraps each FlatList cell.
2. Adding Java logic in [ReactScrollView.java][16] and HorizontalScrollView to announce pages with TalkBack when scrolling up/down. The missing AOSP logic in [ScrollView.java][10] (see also the [GridView][11] example) is responsible for announcing Page Scrolling with TalkBack.

Relevant Links:
x [Additional notes on this PR][18]
x [discussion on the additional container View around each FlatList cell][22]
x [commit adding prop getCellsInItemCount to VirtualizedList][23]

## Changelog

[Android] [Added] - Accessibility announcement for list and grid in FlatList

Pull Request resolved: #33180

Test Plan:
[1]. TalkBack announces pages and cells with Horizontal Flatlist in the Paper Renderer ([link][1])
[2]. TalkBack announces pages and cells with Vertical Flatlist in the Paper Renderer ([link][2])
[3]. `FlatList numColumns={undefined}` Should not trigger Runtime Error NoSuchKey exception columnCount when enabling TalkBack. ([link][3])
[4]. TalkBack announces pages and cells with Nested Horizontal Flatlist in the rn-tester app ([link][4])

[1]: fabOnReact/react-native-notes#6 (comment)
[2]: fabOnReact/react-native-notes#6 (comment)
[3]: fabOnReact/react-native-notes#6 (comment)
[4]: fabOnReact/react-native-notes#6 (comment)
[10]:https://github.com/aosp-mirror/platform_frameworks_base/blob/1ac46f932ef88a8f96d652580d8105e361ffc842/core/java/android/widget/AdapterView.java#L1027-L1029 "GridView.java method responsible for calling setFromIndex and setToIndex"
[11]:fabOnReact/react-native-notes#6 (comment) "test case on Android GridView"
[12]:fabOnReact/react-native-notes#6 (comment) "TalkBack announces pages and cells with Horizontal Flatlist in the Paper Renderer"
[13]:https://github.com/intergalacticspacehighway "github intergalacticspacehighway"
[14]:https://github.com/fabriziobertoglio1987/react-native/blob/80acf523a4410adac8005d5c9472fb87f78e12ee/Libraries/Lists/FlatList.js#L617-L636 "FlatList accessibilityCollectionItem"
[16]:https://github.com/fabriziobertoglio1987/react-native/blob/5706bd7d3ee35dca48f85322a2bdcaec0bce2c85/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java#L183-L184 "logic added to ReactScrollView.java"
[17]: #30977
[18]: fabOnReact/react-native-notes#6
[19]: #31666
[20]: https://reactnative.dev/docs/next/flatlist#required-renderitem "FlatList renderItem documentation"
[21]: fabOnReact@7514735 "commit that introduces fourth param accessibilityCollectionItem in callback renderItem"
[22]: #33180 (comment) "discussion on the additional container View around each FlatList cell"
[23]: fabOnReact@d50fd1a "commit adding prop getCellsInItemCount to VirtualizedList"

Reviewed By: lunaleaps

Differential Revision: D37668064

Pulled By: blavalla

fbshipit-source-id: 7ba4068405fdcb9823d0daed2d8c36f0a56dbf0f
roryabraham pushed a commit to Expensify/react-native that referenced this pull request Aug 17, 2022
… grid) - Javascript Only Changes (facebook#33180)

Summary:
This is the Javascript-only changes from D34518929 (facebook@dd6325b), split out for push safety. Original summary and test plan below:

This issue fixes [30977][17] . The Pull Request was previously published by [intergalacticspacehighway][13] with [31666][19].
The solution consists of:
1. Adding Javascript logic in the [FlatList][14], SectionList, VirtualizedList components to provide accessibility information (row and column position) for each cell in the method [renderItem][20] as a fourth parameter [accessibilityCollectionItem][21]. The information is saved on the native side in the AccessibilityNodeInfo and announced by TalkBack when changing row, column, or page ([video example][12]). The prop accessibilityCollectionItem is available in the View component which wraps each FlatList cell.
2. Adding Java logic in [ReactScrollView.java][16] and HorizontalScrollView to announce pages with TalkBack when scrolling up/down. The missing AOSP logic in [ScrollView.java][10] (see also the [GridView][11] example) is responsible for announcing Page Scrolling with TalkBack.

Relevant Links:
x [Additional notes on this PR][18]
x [discussion on the additional container View around each FlatList cell][22]
x [commit adding prop getCellsInItemCount to VirtualizedList][23]

## Changelog

[Android] [Added] - Accessibility announcement for list and grid in FlatList

Pull Request resolved: facebook#33180

Test Plan:
[1]. TalkBack announces pages and cells with Horizontal Flatlist in the Paper Renderer ([link][1])
[2]. TalkBack announces pages and cells with Vertical Flatlist in the Paper Renderer ([link][2])
[3]. `FlatList numColumns={undefined}` Should not trigger Runtime Error NoSuchKey exception columnCount when enabling TalkBack. ([link][3])
[4]. TalkBack announces pages and cells with Nested Horizontal Flatlist in the rn-tester app ([link][4])

[1]: fabOnReact/react-native-notes#6 (comment)
[2]: fabOnReact/react-native-notes#6 (comment)
[3]: fabOnReact/react-native-notes#6 (comment)
[4]: fabOnReact/react-native-notes#6 (comment)
[10]:https://github.com/aosp-mirror/platform_frameworks_base/blob/1ac46f932ef88a8f96d652580d8105e361ffc842/core/java/android/widget/AdapterView.java#L1027-L1029 "GridView.java method responsible for calling setFromIndex and setToIndex"
[11]:fabOnReact/react-native-notes#6 (comment) "test case on Android GridView"
[12]:fabOnReact/react-native-notes#6 (comment) "TalkBack announces pages and cells with Horizontal Flatlist in the Paper Renderer"
[13]:https://github.com/intergalacticspacehighway "github intergalacticspacehighway"
[14]:https://github.com/fabriziobertoglio1987/react-native/blob/80acf523a4410adac8005d5c9472fb87f78e12ee/Libraries/Lists/FlatList.js#L617-L636 "FlatList accessibilityCollectionItem"
[16]:https://github.com/fabriziobertoglio1987/react-native/blob/5706bd7d3ee35dca48f85322a2bdcaec0bce2c85/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java#L183-L184 "logic added to ReactScrollView.java"
[17]: facebook#30977
[18]: fabOnReact/react-native-notes#6
[19]: facebook#31666
[20]: https://reactnative.dev/docs/next/flatlist#required-renderitem "FlatList renderItem documentation"
[21]: fabOnReact@7514735 "commit that introduces fourth param accessibilityCollectionItem in callback renderItem"
[22]: facebook#33180 (comment) "discussion on the additional container View around each FlatList cell"
[23]: fabOnReact@d50fd1a "commit adding prop getCellsInItemCount to VirtualizedList"

Reviewed By: lunaleaps

Differential Revision: D37668064

Pulled By: blavalla

fbshipit-source-id: 7ba4068405fdcb9823d0daed2d8c36f0a56dbf0f
roryabraham pushed a commit to Expensify/react-native that referenced this pull request Aug 17, 2022
… grid) - Javascript Only Changes (facebook#33180)

Summary:
This is the Javascript-only changes from D34518929 (facebook@dd6325b), split out for push safety. Original summary and test plan below:

This issue fixes [30977][17] . The Pull Request was previously published by [intergalacticspacehighway][13] with [31666][19].
The solution consists of:
1. Adding Javascript logic in the [FlatList][14], SectionList, VirtualizedList components to provide accessibility information (row and column position) for each cell in the method [renderItem][20] as a fourth parameter [accessibilityCollectionItem][21]. The information is saved on the native side in the AccessibilityNodeInfo and announced by TalkBack when changing row, column, or page ([video example][12]). The prop accessibilityCollectionItem is available in the View component which wraps each FlatList cell.
2. Adding Java logic in [ReactScrollView.java][16] and HorizontalScrollView to announce pages with TalkBack when scrolling up/down. The missing AOSP logic in [ScrollView.java][10] (see also the [GridView][11] example) is responsible for announcing Page Scrolling with TalkBack.

Relevant Links:
x [Additional notes on this PR][18]
x [discussion on the additional container View around each FlatList cell][22]
x [commit adding prop getCellsInItemCount to VirtualizedList][23]

## Changelog

[Android] [Added] - Accessibility announcement for list and grid in FlatList

Pull Request resolved: facebook#33180

Test Plan:
[1]. TalkBack announces pages and cells with Horizontal Flatlist in the Paper Renderer ([link][1])
[2]. TalkBack announces pages and cells with Vertical Flatlist in the Paper Renderer ([link][2])
[3]. `FlatList numColumns={undefined}` Should not trigger Runtime Error NoSuchKey exception columnCount when enabling TalkBack. ([link][3])
[4]. TalkBack announces pages and cells with Nested Horizontal Flatlist in the rn-tester app ([link][4])

[1]: fabOnReact/react-native-notes#6 (comment)
[2]: fabOnReact/react-native-notes#6 (comment)
[3]: fabOnReact/react-native-notes#6 (comment)
[4]: fabOnReact/react-native-notes#6 (comment)
[10]:https://github.com/aosp-mirror/platform_frameworks_base/blob/1ac46f932ef88a8f96d652580d8105e361ffc842/core/java/android/widget/AdapterView.java#L1027-L1029 "GridView.java method responsible for calling setFromIndex and setToIndex"
[11]:fabOnReact/react-native-notes#6 (comment) "test case on Android GridView"
[12]:fabOnReact/react-native-notes#6 (comment) "TalkBack announces pages and cells with Horizontal Flatlist in the Paper Renderer"
[13]:https://github.com/intergalacticspacehighway "github intergalacticspacehighway"
[14]:https://github.com/fabriziobertoglio1987/react-native/blob/80acf523a4410adac8005d5c9472fb87f78e12ee/Libraries/Lists/FlatList.js#L617-L636 "FlatList accessibilityCollectionItem"
[16]:https://github.com/fabriziobertoglio1987/react-native/blob/5706bd7d3ee35dca48f85322a2bdcaec0bce2c85/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java#L183-L184 "logic added to ReactScrollView.java"
[17]: facebook#30977
[18]: fabOnReact/react-native-notes#6
[19]: facebook#31666
[20]: https://reactnative.dev/docs/next/flatlist#required-renderitem "FlatList renderItem documentation"
[21]: fabOnReact@7514735 "commit that introduces fourth param accessibilityCollectionItem in callback renderItem"
[22]: facebook#33180 (comment) "discussion on the additional container View around each FlatList cell"
[23]: fabOnReact@d50fd1a "commit adding prop getCellsInItemCount to VirtualizedList"

Reviewed By: lunaleaps

Differential Revision: D37668064

Pulled By: blavalla

fbshipit-source-id: 7ba4068405fdcb9823d0daed2d8c36f0a56dbf0f
@fabOnReact
Copy link
Contributor

fabOnReact commented Jan 11, 2023

I moved the PR to Done as #33180 was merged and partially reverted.
#33180 was based on this branch.

TalkBack support for ScrollView accessibility announcements (list and grid) #33180 initially landed on 20th April 2022. Java API relanded with commit a7bb9664009. JavaScript API relanded with commit cbf53bcaf0c, but reverted with commit c2169c776e271ea.

Thanks a lot.

@fabOnReact fabOnReact closed this Jan 11, 2023
@fabOnReact fabOnReact reopened this Jan 11, 2023
@github-actions
Copy link

Fails
🚫

Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js#L15 - Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js line 15 – Replace ·NativeComponentRegistry.get<Props>(⏎··'AndroidHorizontalScrollView',⏎· with ⏎··NativeComponentRegistry.get<Props>('AndroidHorizontalScrollView', (prettier/prettier)

🚫

Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js#L41 - Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js line 41 – Delete ,⏎ (prettier/prettier)

🚫

Libraries/Lists/FlatList.js#L398 - Libraries/Lists/FlatList.js line 398 – Replace ·this.props.viewabilityConfigCallbackPairs.map(⏎········ with ⏎········this.props.viewabilityConfigCallbackPairs.map( (prettier/prettier)

🚫

Libraries/Lists/FlatList.js#L404 - Libraries/Lists/FlatList.js line 404 – Delete ,⏎······ (prettier/prettier)

🚫

Libraries/Lists/FlatList.js#L570 - Libraries/Lists/FlatList.js line 570 – Replace ⏎······ListItemComponent,⏎······renderItem,⏎······numColumns,⏎······columnWrapperStyle, with ListItemComponent,·renderItem,·numColumns,·columnWrapperStyle}·= (prettier/prettier)

🚫

Libraries/Lists/FlatList.js#L575 - Libraries/Lists/FlatList.js line 575 – Replace }·= with · (prettier/prettier)

🚫

Libraries/Lists/VirtualizedList.js#L444 - Libraries/Lists/VirtualizedList.js line 444 – Replace getItemCount(⏎········data, with ⏎········getItemCount(data)·-·1 (prettier/prettier)

🚫

Libraries/Lists/VirtualizedList.js#L446 - Libraries/Lists/VirtualizedList.js line 446 – Delete )·-·1 (prettier/prettier)

🚫

Libraries/Lists/VirtualizedList.js#L885 - Libraries/Lists/VirtualizedList.js line 885 – Replace ⏎······ListEmptyComponent,⏎······ListFooterComponent,⏎······ListHeaderComponent, with ListEmptyComponent,·ListFooterComponent,·ListHeaderComponent}·= (prettier/prettier)

🚫

Libraries/Lists/VirtualizedList.js#L889 - Libraries/Lists/VirtualizedList.js line 889 – Replace }·= with · (prettier/prettier)

🚫

Libraries/Lists/VirtualizedList.js#L1499 - Libraries/Lists/VirtualizedList.js line 1499 – Replace ⏎······data,⏎······getItemCount,⏎······onEndReached,⏎······onEndReachedThreshold, with data,·getItemCount,·onEndReached,·onEndReachedThreshold}·= (prettier/prettier)

🚫

Libraries/Lists/VirtualizedList.js#L1504 - Libraries/Lists/VirtualizedList.js line 1504 – Replace }·= with · (prettier/prettier)

🚫

Libraries/Lists/VirtualizedList.js#L1591 - Libraries/Lists/VirtualizedList.js line 1591 – Replace ⏎········visibleLength,⏎········contentLength,⏎········offset,⏎········dOffset, with visibleLength,·contentLength,·offset,·dOffset}·= (prettier/prettier)

🚫

Libraries/Lists/VirtualizedList.js#L1596 - Libraries/Lists/VirtualizedList.js line 1596 – Replace }·= with · (prettier/prettier)

🚫

Libraries/Lists/VirtualizedList.js#L1597 - Libraries/Lists/VirtualizedList.js line 1597 – Replace ········ with ·········· (prettier/prettier)

🚫

Libraries/Lists/VirtualizedList.js#L1598 - Libraries/Lists/VirtualizedList.js line 1598 – Insert ·· (prettier/prettier)

🚫

Libraries/Lists/VirtualizedList.js#L1599 - Libraries/Lists/VirtualizedList.js line 1599 – Insert ·· (prettier/prettier)

Warnings
⚠️

Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js#L11 - Libraries/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js line 11 – Requires should be sorted alphabetically (lint/sort-imports)

⚠️

Libraries/Lists/FlatList.js#L11 - Libraries/Lists/FlatList.js line 11 – Requires should be sorted alphabetically (lint/sort-imports)

⚠️

Libraries/Lists/FlatList.js#L599 - Libraries/Lists/FlatList.js line 599 – Do not define components during render. React will see a new component type on every render and destroy the entire subtree’s DOM nodes and state (https://reactjs.org/docs/reconciliation.html#elements-of-different-types). Instead, move this component definition out of the parent component “FlatList” and pass data as props. If you want to allow component creation in props, set allowAsProps option to true. (react/no-unstable-nested-components)

⚠️

Libraries/Lists/VirtualizedList.js#L11 - Libraries/Lists/VirtualizedList.js line 11 – Requires should be sorted alphabetically (lint/sort-imports)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L1 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 1 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L9 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 9 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L13 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 13 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L14 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 14 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L17 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 17 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L18 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 18 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L21 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 21 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L22 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 22 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L25 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 25 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L26 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 26 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L29 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 29 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L30 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 30 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L33 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 33 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L34 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 34 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L37 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 37 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L38 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 38 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L41 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 41 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L42 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 42 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L45 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 45 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L46 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 46 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L49 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 49 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L50 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 50 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L87 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 87 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L97 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 97 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L98 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 98 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L99 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 99 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L100 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 100 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L101 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 101 – Strings must use singlequote. (quotes)

⚠️

packages/rn-tester/js/examples/FlatList/FlatList-nested.js#L104 - packages/rn-tester/js/examples/FlatList/FlatList-nested.js line 104 – Strings must use singlequote. (quotes)

Generated by 🚫 dangerJS against 55877da

Saadnajmi pushed a commit to Saadnajmi/react-native-macos that referenced this pull request Jan 15, 2023
… grid) (facebook#33180)

Summary:
This issue fixes [30977][17] . The Pull Request was previously published by [intergalacticspacehighway][13] with [31666][19].
The solution consists of:
1. Adding Javascript logic in the [FlatList][14], SectionList, VirtualizedList components to provide accessibility information (row and column position) for each cell in the method [renderItem][20] as a fourth parameter [accessibilityCollectionItem][21]. The information is saved on the native side in the AccessibilityNodeInfo and announced by TalkBack when changing row, column, or page ([video example][12]). The prop accessibilityCollectionItem is available in the View component which wraps each FlatList cell.
2. Adding Java logic in [ReactScrollView.java][16] and HorizontalScrollView to announce pages with TalkBack when scrolling up/down. The missing AOSP logic in [ScrollView.java][10] (see also the [GridView][11] example) is responsible for announcing Page Scrolling with TalkBack.

Relevant Links:
x [Additional notes on this PR][18]
x [discussion on the additional container View around each FlatList cell][22]
x [commit adding prop getCellsInItemCount to VirtualizedList][23]

[Android] [Added] - Accessibility announcement for list and grid in FlatList

Pull Request resolved: facebook#33180

Test Plan:
[1]. TalkBack announces pages and cells with Horizontal Flatlist in the Paper Renderer ([link][1])
[2]. TalkBack announces pages and cells with Vertical Flatlist in the Paper Renderer ([link][2])
[3]. `FlatList numColumns={undefined}` Should not trigger Runtime Error NoSuchKey exception columnCount when enabling TalkBack. ([link][3])
[4]. TalkBack announces pages and cells with Nested Horizontal Flatlist in the rn-tester app ([link][4])

[1]: fabOnReact/react-native-notes#6 (comment)
[2]: fabOnReact/react-native-notes#6 (comment)
[3]: fabOnReact/react-native-notes#6 (comment)
[4]: fabOnReact/react-native-notes#6 (comment)
[10]:https://github.com/aosp-mirror/platform_frameworks_base/blob/1ac46f932ef88a8f96d652580d8105e361ffc842/core/java/android/widget/AdapterView.java#L1027-L1029 "GridView.java method responsible for calling setFromIndex and setToIndex"
[11]:fabOnReact/react-native-notes#6 (comment) "test case on Android GridView"
[12]:fabOnReact/react-native-notes#6 (comment) "TalkBack announces pages and cells with Horizontal Flatlist in the Paper Renderer"
[13]:https://github.com/intergalacticspacehighway "github intergalacticspacehighway"
[14]:https://github.com/fabriziobertoglio1987/react-native/blob/80acf523a4410adac8005d5c9472fb87f78e12ee/Libraries/Lists/FlatList.js#L617-L636 "FlatList accessibilityCollectionItem"
[16]:https://github.com/fabriziobertoglio1987/react-native/blob/5706bd7d3ee35dca48f85322a2bdcaec0bce2c85/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java#L183-L184 "logic added to ReactScrollView.java"
[17]: facebook#30977
[18]: fabOnReact/react-native-notes#6
[19]: facebook#31666
[20]: https://reactnative.dev/docs/next/flatlist#required-renderitem "FlatList renderItem documentation"
[21]: fabOnReact@7514735 "commit that introduces fourth param accessibilityCollectionItem in callback renderItem"
[22]: facebook#33180 (comment) "discussion on the additional container View around each FlatList cell"
[23]: fabOnReact@d50fd1a "commit adding prop getCellsInItemCount to VirtualizedList"

Reviewed By: kacieb

Differential Revision: D34518929

Pulled By: blavalla

fbshipit-source-id: 410a05263a56162bf505a4cad957b24005ed65ed
Copy link

github-actions bot commented Feb 7, 2024

This PR is stale because it has been open 180 days with no activity. Remove stale label or comment or this will be closed in 7 days.

@github-actions github-actions bot added the Stale There has been a lack of activity on this issue and it may be closed soon. label Feb 7, 2024
Copy link

This PR was closed because it has been stalled for 7 days with no activity.

@github-actions github-actions bot closed this Feb 14, 2024
@intergalacticspacehighway intergalacticspacehighway deleted the flatlist-a11y branch August 9, 2024 22:44
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Accessibility CLA Signed This label is managed by the Facebook bot. Authors need to sign the CLA before a PR can be reviewed. Platform: Android Android applications. Stale There has been a lack of activity on this issue and it may be closed soon. Type: Enhancement A new feature or enhancement of an existing feature.
Projects
None yet
Development

Successfully merging this pull request may close these issues.