From 1b2e398fd0b16f3c97a67ff589bf392fe73ecfdf Mon Sep 17 00:00:00 2001 From: michalchudziak Date: Thu, 16 May 2019 11:44:05 +0200 Subject: [PATCH 1/3] [TM] Add specs for AccessibilityInfo --- .../AccessibilityInfo.android.js | 9 +++--- .../NativeAccessibilityInfo.js | 31 +++++++++++++++++++ 2 files changed, 35 insertions(+), 5 deletions(-) create mode 100644 Libraries/Components/AccessibilityInfo/NativeAccessibilityInfo.js diff --git a/Libraries/Components/AccessibilityInfo/AccessibilityInfo.android.js b/Libraries/Components/AccessibilityInfo/AccessibilityInfo.android.js index a924b742e46e..6591c9226de8 100644 --- a/Libraries/Components/AccessibilityInfo/AccessibilityInfo.android.js +++ b/Libraries/Components/AccessibilityInfo/AccessibilityInfo.android.js @@ -10,11 +10,10 @@ 'use strict'; -const NativeModules = require('../../BatchedBridge/NativeModules'); const RCTDeviceEventEmitter = require('../../EventEmitter/RCTDeviceEventEmitter'); const UIManager = require('../../ReactNative/UIManager'); -const RCTAccessibilityInfo = NativeModules.AccessibilityInfo; +const NativeAccessibilityInfo = require('./NativeAccessibilityInfo').default; const REDUCE_MOTION_EVENT = 'reduceMotionDidChange'; const TOUCH_EXPLORATION_EVENT = 'touchExplorationDidChange'; @@ -61,7 +60,7 @@ const AccessibilityInfo = { isReduceMotionEnabled: function(): Promise { return new Promise((resolve, reject) => { - RCTAccessibilityInfo.isReduceMotionEnabled(resolve); + NativeAccessibilityInfo.isReduceMotionEnabled(resolve); }); }, @@ -74,7 +73,7 @@ const AccessibilityInfo = { isScreenReaderEnabled: function(): Promise { return new Promise((resolve, reject) => { - RCTAccessibilityInfo.isTouchExplorationEnabled(resolve); + NativeAccessibilityInfo.isTouchExplorationEnabled(resolve); }); }, @@ -142,7 +141,7 @@ const AccessibilityInfo = { * See http://facebook.github.io/react-native/docs/accessibilityinfo.html#announceforaccessibility */ announceForAccessibility: function(announcement: string): void { - RCTAccessibilityInfo.announceForAccessibility(announcement); + NativeAccessibilityInfo.announceForAccessibility(announcement); }, }; diff --git a/Libraries/Components/AccessibilityInfo/NativeAccessibilityInfo.js b/Libraries/Components/AccessibilityInfo/NativeAccessibilityInfo.js new file mode 100644 index 000000000000..78729d00360f --- /dev/null +++ b/Libraries/Components/AccessibilityInfo/NativeAccessibilityInfo.js @@ -0,0 +1,31 @@ +/** + * 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. + * + * @flow + * @format + */ + +'use strict'; + +import type {TurboModule} from 'RCTExport'; +import * as TurboModuleRegistry from 'TurboModuleRegistry'; + +export interface Spec extends TurboModule { + +isReduceMotionEnabled: ( + resolve: (isReduceMotionEnabled: boolean) => void, + ) => void; + +isTouchExplorationEnabled: ( + resolve: (isScreenReaderEnabled: boolean) => void, + ) => void; + +setAccessibilityFocus: (reactTag: number) => void; + +announceForAccessibility: (announcement: string) => void; + + // RCTDeviceEventEmitter + +addListener: (eventName: string, handler: Function) => Object; + +removeListeners: (eventName: string, handler: Function) => void; +} + +export default TurboModuleRegistry.getEnforcing('AccessibilityInfo'); From 149626f2064af1ac32e7529a7080dd1796830e54 Mon Sep 17 00:00:00 2001 From: michalchudziak Date: Fri, 17 May 2019 11:08:47 +0200 Subject: [PATCH 2/3] Refactor callback names, remove event emitter methods --- .../AccessibilityInfo/NativeAccessibilityInfo.js | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/Libraries/Components/AccessibilityInfo/NativeAccessibilityInfo.js b/Libraries/Components/AccessibilityInfo/NativeAccessibilityInfo.js index 78729d00360f..97f306d058f2 100644 --- a/Libraries/Components/AccessibilityInfo/NativeAccessibilityInfo.js +++ b/Libraries/Components/AccessibilityInfo/NativeAccessibilityInfo.js @@ -10,22 +10,20 @@ 'use strict'; +import {Platform} from 'react-native'; import type {TurboModule} from 'RCTExport'; import * as TurboModuleRegistry from 'TurboModuleRegistry'; export interface Spec extends TurboModule { +isReduceMotionEnabled: ( - resolve: (isReduceMotionEnabled: boolean) => void, + onSuccess: (isReduceMotionEnabled: boolean) => void, ) => void; +isTouchExplorationEnabled: ( - resolve: (isScreenReaderEnabled: boolean) => void, + onSuccess: (isScreenReaderEnabled: boolean) => void, ) => void; +setAccessibilityFocus: (reactTag: number) => void; +announceForAccessibility: (announcement: string) => void; - - // RCTDeviceEventEmitter - +addListener: (eventName: string, handler: Function) => Object; - +removeListeners: (eventName: string, handler: Function) => void; } - -export default TurboModuleRegistry.getEnforcing('AccessibilityInfo'); +export default (Platform.OS === 'android' + ? TurboModuleRegistry.getEnforcing('AccessibilityInfo') + : null); From 5581ca3b186f98b1f1af1532e18e9df3275509c9 Mon Sep 17 00:00:00 2001 From: michalchudziak Date: Fri, 17 May 2019 11:29:05 +0200 Subject: [PATCH 3/3] Fix flow issues, change require to import --- .../AccessibilityInfo.android.js | 20 ++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/Libraries/Components/AccessibilityInfo/AccessibilityInfo.android.js b/Libraries/Components/AccessibilityInfo/AccessibilityInfo.android.js index 6591c9226de8..f13c80a58b05 100644 --- a/Libraries/Components/AccessibilityInfo/AccessibilityInfo.android.js +++ b/Libraries/Components/AccessibilityInfo/AccessibilityInfo.android.js @@ -10,11 +10,11 @@ 'use strict'; +import NativeAccessibilityInfo from './NativeAccessibilityInfo'; + const RCTDeviceEventEmitter = require('../../EventEmitter/RCTDeviceEventEmitter'); const UIManager = require('../../ReactNative/UIManager'); -const NativeAccessibilityInfo = require('./NativeAccessibilityInfo').default; - const REDUCE_MOTION_EVENT = 'reduceMotionDidChange'; const TOUCH_EXPLORATION_EVENT = 'touchExplorationDidChange'; @@ -60,7 +60,11 @@ const AccessibilityInfo = { isReduceMotionEnabled: function(): Promise { return new Promise((resolve, reject) => { - NativeAccessibilityInfo.isReduceMotionEnabled(resolve); + if (NativeAccessibilityInfo) { + NativeAccessibilityInfo.isReduceMotionEnabled(resolve); + } else { + reject(false); + } }); }, @@ -73,7 +77,11 @@ const AccessibilityInfo = { isScreenReaderEnabled: function(): Promise { return new Promise((resolve, reject) => { - NativeAccessibilityInfo.isTouchExplorationEnabled(resolve); + if (NativeAccessibilityInfo) { + NativeAccessibilityInfo.isTouchExplorationEnabled(resolve); + } else { + reject(false); + } }); }, @@ -141,7 +149,9 @@ const AccessibilityInfo = { * See http://facebook.github.io/react-native/docs/accessibilityinfo.html#announceforaccessibility */ announceForAccessibility: function(announcement: string): void { - NativeAccessibilityInfo.announceForAccessibility(announcement); + if (NativeAccessibilityInfo) { + NativeAccessibilityInfo.announceForAccessibility(announcement); + } }, };