/** * Copyright (c) Meta Platforms, Inc. and affiliates. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. * * @flow strict-local * @format */ import type {HostComponent} from '../../Renderer/shims/ReactNativeTypes'; import type {EventSubscription} from '../../vendor/emitter/EventEmitter'; import type {ElementRef} from 'react'; // Events that are only supported on Android. type AccessibilityEventDefinitionsAndroid = { accessibilityServiceChanged: [boolean], }; // Events that are only supported on iOS. type AccessibilityEventDefinitionsIOS = { announcementFinished: [{announcement: string, success: boolean}], boldTextChanged: [boolean], grayscaleChanged: [boolean], invertColorsChanged: [boolean], reduceTransparencyChanged: [boolean], }; type AccessibilityEventDefinitions = { ...AccessibilityEventDefinitionsAndroid, ...AccessibilityEventDefinitionsIOS, change: [boolean], // screenReaderChanged reduceMotionChanged: [boolean], screenReaderChanged: [boolean], }; type AccessibilityEventTypes = 'click' | 'focus'; /** * Sometimes it's useful to know whether or not the device has a screen reader * that is currently active. The `AccessibilityInfo` API is designed for this * purpose. You can use it to query the current state of the screen reader as * well as to register to be notified when the state of the screen reader * changes. * * See https://reactnative.dev/docs/accessibilityinfo */ export interface AccessibilityInfo { /** * Query whether bold text is currently enabled. * * Returns a promise which resolves to a boolean. * The result is `true` when bold text is enabled and `false` otherwise. * * See https://reactnative.dev/docs/accessibilityinfo#isBoldTextEnabled */ isBoldTextEnabled: () => Promise; /** * Query whether grayscale is currently enabled. * * Returns a promise which resolves to a boolean. * The result is `true` when grayscale is enabled and `false` otherwise. * * See https://reactnative.dev/docs/accessibilityinfo#isGrayscaleEnabled */ isGrayscaleEnabled: () => Promise; /** * Query whether inverted colors are currently enabled. * * Returns a promise which resolves to a boolean. * The result is `true` when invert color is enabled and `false` otherwise. * * See https://reactnative.dev/docs/accessibilityinfo#isInvertColorsEnabled */ isInvertColorsEnabled: () => Promise; /** * Query whether reduced motion is currently enabled. * * Returns a promise which resolves to a boolean. * The result is `true` when a reduce motion is enabled and `false` otherwise. * * See https://reactnative.dev/docs/accessibilityinfo#isReduceMotionEnabled */ isReduceMotionEnabled: () => Promise; /** * Query whether reduce motion and prefer cross-fade transitions settings are currently enabled. * * Returns a promise which resolves to a boolean. * The result is `true` when prefer cross-fade transitions is enabled and `false` otherwise. * * See https://reactnative.dev/docs/accessibilityinfo#prefersCrossFadeTransitions */ prefersCrossFadeTransitions: () => Promise; /** * Query whether reduced transparency is currently enabled. * * Returns a promise which resolves to a boolean. * The result is `true` when a reduce transparency is enabled and `false` otherwise. * * See https://reactnative.dev/docs/accessibilityinfo#isReduceTransparencyEnabled */ isReduceTransparencyEnabled: () => Promise; /** * Query whether a screen reader is currently enabled. * * Returns a promise which resolves to a boolean. * The result is `true` when a screen reader is enabled and `false` otherwise. * * See https://reactnative.dev/docs/accessibilityinfo#isScreenReaderEnabled */ isScreenReaderEnabled: () => Promise; /** * Query whether Accessibility Service is currently enabled. * * Returns a promise which resolves to a boolean. * The result is `true` when any service is enabled and `false` otherwise. * * @platform android * * See https://reactnative.dev/docs/accessibilityinfo/#isaccessibilityserviceenabled-android */ isAccessibilityServiceEnabled: () => Promise; /** * Add an event handler. Supported events: * * - `reduceMotionChanged`: Fires when the state of the reduce motion toggle changes. * The argument to the event handler is a boolean. The boolean is `true` when a reduce * motion is enabled (or when "Transition Animation Scale" in "Developer options" is * "Animation off") and `false` otherwise. * - `screenReaderChanged`: Fires when the state of the screen reader changes. The argument * to the event handler is a boolean. The boolean is `true` when a screen * reader is enabled and `false` otherwise. * * These events are only supported on iOS: * * - `boldTextChanged`: iOS-only event. Fires when the state of the bold text toggle changes. * The argument to the event handler is a boolean. The boolean is `true` when a bold text * is enabled and `false` otherwise. * - `grayscaleChanged`: iOS-only event. Fires when the state of the gray scale toggle changes. * The argument to the event handler is a boolean. The boolean is `true` when a gray scale * is enabled and `false` otherwise. * - `invertColorsChanged`: iOS-only event. Fires when the state of the invert colors toggle * changes. The argument to the event handler is a boolean. The boolean is `true` when a invert * colors is enabled and `false` otherwise. * - `reduceTransparencyChanged`: iOS-only event. Fires when the state of the reduce transparency * toggle changes. The argument to the event handler is a boolean. The boolean is `true` * when a reduce transparency is enabled and `false` otherwise. * - `announcementFinished`: iOS-only event. Fires when the screen reader has * finished making an announcement. The argument to the event handler is a * dictionary with these keys: * - `announcement`: The string announced by the screen reader. * - `success`: A boolean indicating whether the announcement was * successfully made. * * See https://reactnative.dev/docs/accessibilityinfo#addeventlistener */ addEventListener>( eventName: K, handler: (...$ElementType) => void, ): EventSubscription; /** * Set accessibility focus to a React component. * * See https://reactnative.dev/docs/accessibilityinfo#setaccessibilityfocus */ setAccessibilityFocus: (reactTag: number) => void; /** * Send a named accessibility event to a HostComponent. */ sendAccessibilityEvent: ( handle: ElementRef>, eventType: AccessibilityEventTypes, ) => void; /** * Post a string to be announced by the screen reader. * * See https://reactnative.dev/docs/accessibilityinfo#announceforaccessibility */ announceForAccessibility: (announcement: string) => void; /** * Post a string to be announced by the screen reader. * - `announcement`: The string announced by the screen reader. * - `options`: An object that configures the reading options. * - `queue`: The announcement will be queued behind existing announcements. iOS only. */ announceForAccessibilityWithOptions: ( announcement: string, options: {queue?: boolean}, ) => void; /** * Get the recommended timeout for changes to the UI needed by this user. * * See https://reactnative.dev/docs/accessibilityinfo#getrecommendedtimeoutmillis */ getRecommendedTimeoutMillis: (originalTimeout: number) => Promise; }