Skip to content

Android: a View with only aria-live / accessibilityLiveRegion is flattened, so the live region never announces #59329

Open

Description

@faciledictu

Description

On the New Architecture a View that has aria-live (or accessibilityLiveRegion) but no style is flattened away: it never reaches the native tree, so TalkBack never announces changes to its children. Adding collapsable={false} fixes it. Nothing in the docs says a live region needs it, and there is no warning.

ViewShadowNode::initialize keeps a view for accessibilityViewIsModal, accessibilityElementsHidden and importantForAccessibility, but not for accessibilityLiveRegion, so a live region container is treated as a layout-only view.

A related gap: Text does not map aria-live (it is not in the Text props docs either), while accessibilityLiveRegion on a Text works. Mapping aria-live in Text.js the same way as in View.js would make the two forms equivalent.

Steps to reproduce

  1. Turn on TalkBack (tested on a Samsung SM-A276B, Android 16, and an Android 17 emulator).
  2. Run the App below and wait: every 3 seconds one counter goes up, A, then B, then C. Nothing needs to be tapped.
  3. A is a View with aria-live="polite", B is the same View with collapsable={false}, C is a Text with accessibilityLiveRegion="polite". TalkBack announces B and C on every change and never announces A.
import { useEffect, useState } from 'react';
import { Text, View } from 'react-native';

export default function App() {
  const [tick, setTick] = useState(0);

  useEffect(() => {
    const id = setInterval(() => setTick((value) => value + 1), 3000);
    return () => clearInterval(id);
  }, []);

  // Counters take turns: A on ticks 1, 4, 7…, B on 2, 5, 8…, C on 3, 6, 9…
  const count = (index: number) => Math.floor((tick + 2 - index) / 3);

  return (
    <View style={{ flex: 1, padding: 48, gap: 16 }}>
      <Text>A: View with aria-live</Text>
      <View aria-live="polite">
        <Text>Cart A: {count(0)} items</Text>
      </View>

      <Text>B: the same View with collapsable false</Text>
      <View aria-live="polite" collapsable={false}>
        <Text>Cart B: {count(1)} items</Text>
      </View>

      <Text>C: Text with accessibilityLiveRegion</Text>
      <Text accessibilityLiveRegion="polite">Cart C: {count(2)} items</Text>
    </View>
  );
}

Expected: A, B and C are all announced.

Actual: A is silent.

React Native Version

0.88.0

Affected Platforms

Runtime - Android

Output of npx @react-native-community/cli info

System:
  OS: macOS 27.0.1
  CPU: (10) arm64 Apple M5
  Memory: 141.05 MB / 16.00 GB
  Shell:
    version: "5.9"
    path: /bin/zsh
Binaries:
  Node:
    version: 24.15.0
    path: ~/.local/share/fnm/node-versions/v24.15.0/installation/bin/node
  Yarn:
    version: 1.22.22
    path: ~/.local/share/fnm/node-versions/v24.15.0/installation/bin/yarn
  npm:
    version: 11.12.1
    path: ~/.local/share/fnm/node-versions/v24.15.0/installation/bin/npm
  Watchman:
    version: 2026.07.20.00
    path: /opt/homebrew/bin/watchman
Managers:
  CocoaPods:
    version: 1.17.0
    path: /opt/homebrew/bin/pod
SDKs:
  iOS SDK:
    Platforms:
      - DriverKit 27.0
      - iOS 27.1
      - macOS 27.0
      - tvOS 27.0
      - visionOS 27.0
      - watchOS 27.0
  Android SDK: Not Found
IDEs:
  Android Studio: 2026.2 AI-262.9437.185.2621.16467767
  Xcode:
    version: 27.1/27A9275
    path: /usr/bin/xcodebuild
Languages:
  Java:
    version: 17.0.20
    path: /usr/bin/javac
  Ruby:
    version: 4.0.7
    path: /opt/homebrew/bin/ruby
npmPackages:
  "@react-native-community/cli":
    installed: 20.2.0
    wanted: 20.2.0
  react:
    installed: 19.3.0
    wanted: 19.3.0
  react-native:
    installed: 0.88.0
    wanted: 0.88.0
  react-native-macos: Not Found
npmGlobalPackages:
  "*react-native*": Not Found
Android:
  hermesEnabled: true
  newArchEnabled: true
iOS:
  hermesEnabled: Not found
  newArchEnabled: false

Stacktrace or Logs

No crash, error or warning. The app runs normally; TalkBack just does not announce changes to counter A. Logcat shows nothing related.

MANDATORY Reproducer

https://github.com/faciledictu/rn-live-region-repro

Screenshots and Videos

No response

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions