Skip to content

Conversation

@OtavioStasiak
Copy link
Contributor

@OtavioStasiak OtavioStasiak commented Jan 20, 2026

Proposed changes

Issue(s)

https://rocketchat.atlassian.net/browse/MA-96

How to test or reproduce

  • Open the app;
  • Navigate to RoomView;
  • Turn TalkBack on;
  • Navigate to the list and move down;
  • Scroll up using a three-finger gesture;
  • Try to focus on the older messages;

Screenshots

Types of changes

  • Bugfix (non-breaking change which fixes an issue)
  • Improvement (non-breaking change which improves a current function)
  • New feature (non-breaking change which adds functionality)
  • Documentation update (if none of the other choices apply)

Checklist

  • I have read the CONTRIBUTING doc
  • I have signed the CLA
  • Lint and unit tests pass locally with my changes
  • I have added tests that prove my fix is effective or that my feature works (if applicable)
  • I have added necessary documentation (if applicable)
  • Any dependent changes have been merged and published in downstream modules

Further comments

Summary by CodeRabbit

  • Bug Fixes

    • Fixed accessibility navigation on Android for inverted virtualized lists so screen readers traverse content in the correct visual order.
  • Chores

    • Updated Gradle build configuration to resolve React Native artifacts from the local development build.
    • Pinned a JavaScript dependency to an exact version.
    • Increased CI Android build timeout to reduce unexpected job cancellations.

✏️ Tip: You can customize this high-level summary in your review settings.

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Jan 20, 2026

Walkthrough

Adds Gradle dependency substitution to resolve React Native artifacts to the local React Native include build, and introduces inversion-aware accessibility handling in Android ReactScrollView with a setter and reversed accessibility child traversal for inverted virtualized lists.

Changes

Cohort / File(s) Summary
Build Configuration
android/settings.gradle
Adds a dependencySubstitution block inside includeBuild('../node_modules/react-native') to map com.facebook.react:react-android, com.facebook.react:react-native, com.facebook.react:hermes-android, and com.facebook.react:hermes-engine to local project paths under :packages:react-native:ReactAndroid
Accessibility Enhancement (React Native Android)
patches/react-native+0.79.4.patch, node_modules/react-native/.../ReactScrollView.java, node_modules/react-native/.../ReactScrollViewManager.java
Adds public void setIsInvertedVirtualizedList(boolean), a private mIsInvertedVirtualizedList flag, and an overridden addChildrenForAccessibility(ArrayList<View> outChildren) that reverses traversal when inverted; wires flag from ReactScrollViewManager; adds required imports
Workflow Timeout
.github/workflows/build-android.yml
Increases timeout-minutes for the Build Android job from 40 to 120
Dependency Pinning
package.json
Pins remove-markdown dependency from ^0.3.0 to exact 0.3.0

Sequence Diagram(s)

sequenceDiagram
    participant JS as JS Layer
    participant Manager as ReactScrollViewManager
    participant View as ReactScrollView (native)
    participant AS as Accessibility Service

    JS->>Manager: mount VirtualizedList (inverted)
    Manager->>View: setIsInvertedVirtualizedList(true)
    AS->>View: request accessibility children
    View->>View: addChildrenForAccessibility(outChildren) -- reverse when inverted
    View->>AS: return children in visual order
    AS->>User: traverse items in visual order
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Suggested reviewers

  • diegolmello

Poem

🐰 I hop through code with nimble feet,

I flip the order so TalkBack greets,
Local React nests wired in Gradle's song,
Inverted lists now flow along,
A tiny hop to keep navigation sweet.

🚥 Pre-merge checks | ✅ 4 | ❌ 1
❌ Failed checks (1 inconclusive)
Check name Status Explanation Resolution
Out of Scope Changes check ❓ Inconclusive The PR includes some supporting changes (Gradle substitution, timeout increase, dependency pinning) that are tangentially related but not directly addressing the accessibility fix objective. Clarify the necessity of Gradle dependency substitution, build timeout increase, and remove-markdown version pinning changes in relation to the accessibility fix.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The PR title accurately describes the main change: fixing accessibility focus order for inverted FlatList on Android, which is the core objective of this changeset.
Linked Issues check ✅ Passed The code changes implement accessibility traversal correction for inverted virtualized lists MA-96 by adding methods to reverse accessibility order in ReactScrollView when in inverted mode.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch test.flatlist-inverted-content

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

@OtavioStasiak OtavioStasiak requested a deployment to official_android_build January 20, 2026 18:24 — with GitHub Actions Waiting
@OtavioStasiak OtavioStasiak requested a deployment to experimental_ios_build January 20, 2026 18:24 — with GitHub Actions Waiting
@OtavioStasiak OtavioStasiak deployed to experimental_android_build January 20, 2026 18:24 — with GitHub Actions Active
@OtavioStasiak OtavioStasiak requested a deployment to upload_experimental_android January 20, 2026 19:43 — with GitHub Actions Waiting
@github-actions
Copy link

Android Build Available

Rocket.Chat Experimental 4.69.0.108196

Internal App Sharing: https://play.google.com/apps/test/RQVpXLytHNc/ahAO29uNTlK_aaCydNoR8tL0LU9ha91x4SUn6F8LQ_l7193fkFssxP1kKCqvtZvuPhoyE9s7WolKu01pF8dITARNJC

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants