123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- /**
- * Copyright (c) Facebook, Inc. and its affiliates.
- *
- * This source code is licensed under the MIT license found in the
- * LICENSE file in the root directory of this source tree.
- *
- * @format
- * @flow
- */
- 'use strict';
- const RCTDeviceEventEmitter = require('../../EventEmitter/RCTDeviceEventEmitter');
- const UIManager = require('../../ReactNative/UIManager');
- import NativeAccessibilityInfo from './NativeAccessibilityInfo';
- const REDUCE_MOTION_EVENT = 'reduceMotionDidChange';
- const TOUCH_EXPLORATION_EVENT = 'touchExplorationDidChange';
- type ChangeEventName = $Keys<{
- change: string,
- reduceMotionChanged: string,
- screenReaderChanged: string,
- ...
- }>;
- const _subscriptions = new Map();
- /**
- * 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.html
- */
- const AccessibilityInfo = {
- /**
- * iOS only
- */
- isBoldTextEnabled: function(): Promise<boolean> {
- return Promise.resolve(false);
- },
- /**
- * iOS only
- */
- isGrayscaleEnabled: function(): Promise<boolean> {
- return Promise.resolve(false);
- },
- /**
- * iOS only
- */
- isInvertColorsEnabled: function(): Promise<boolean> {
- return Promise.resolve(false);
- },
- isReduceMotionEnabled: function(): Promise<boolean> {
- return new Promise((resolve, reject) => {
- if (NativeAccessibilityInfo) {
- NativeAccessibilityInfo.isReduceMotionEnabled(resolve);
- } else {
- reject(false);
- }
- });
- },
- /**
- * iOS only
- */
- isReduceTransparencyEnabled: function(): Promise<boolean> {
- return Promise.resolve(false);
- },
- isScreenReaderEnabled: function(): Promise<boolean> {
- return new Promise((resolve, reject) => {
- if (NativeAccessibilityInfo) {
- NativeAccessibilityInfo.isTouchExplorationEnabled(resolve);
- } else {
- reject(false);
- }
- });
- },
- /**
- * Deprecated
- *
- * Same as `isScreenReaderEnabled`
- */
- get fetch(): () => Promise<boolean> {
- console.warn(
- 'AccessibilityInfo.fetch is deprecated, call AccessibilityInfo.isScreenReaderEnabled instead',
- );
- return this.isScreenReaderEnabled;
- },
- addEventListener: function(
- eventName: ChangeEventName,
- handler: Function,
- ): void {
- let listener;
- if (eventName === 'change' || eventName === 'screenReaderChanged') {
- listener = RCTDeviceEventEmitter.addListener(
- TOUCH_EXPLORATION_EVENT,
- enabled => {
- handler(enabled);
- },
- );
- } else if (eventName === 'reduceMotionChanged') {
- listener = RCTDeviceEventEmitter.addListener(
- REDUCE_MOTION_EVENT,
- enabled => {
- handler(enabled);
- },
- );
- }
- _subscriptions.set(handler, listener);
- },
- removeEventListener: function(
- eventName: ChangeEventName,
- handler: Function,
- ): void {
- const listener = _subscriptions.get(handler);
- if (!listener) {
- return;
- }
- listener.remove();
- _subscriptions.delete(handler);
- },
- /**
- * Set accessibility focus to a react component.
- *
- * See https://reactnative.dev/docs/accessibilityinfo.html#setaccessibilityfocus
- */
- setAccessibilityFocus: function(reactTag: number): void {
- UIManager.sendAccessibilityEvent(
- reactTag,
- UIManager.getConstants().AccessibilityEventTypes.typeViewFocused,
- );
- },
- /**
- * Post a string to be announced by the screen reader.
- *
- * See https://reactnative.dev/docs/accessibilityinfo.html#announceforaccessibility
- */
- announceForAccessibility: function(announcement: string): void {
- if (NativeAccessibilityInfo) {
- NativeAccessibilityInfo.announceForAccessibility(announcement);
- }
- },
- };
- module.exports = AccessibilityInfo;
|