From eacc94005b1b1d33d47b3bea88a6fd242560dafb Mon Sep 17 00:00:00 2001 From: David Vacca Date: Sat, 20 Mar 2021 02:58:27 -0700 Subject: [PATCH] Extend AccessibilityInfo.sendAccessibilityEvent to support 'click' event for Android Summary: This diff extends AccessibilityInfo.sendAccessibilityEvent to support 'click' event on RN Android changelog: [internal] internal Reviewed By: kacieb Differential Revision: D27060395 fbshipit-source-id: 5bf7479d72efb66c3a388fc3ea11990e285ca054 --- .../AccessibilityInfo/AccessibilityInfo.android.js | 9 +++++++-- .../AccessibilityInfo/AccessibilityInfo.ios.js | 3 ++- .../legacySendAccessibilityEvent.android.js | 6 ++++++ 3 files changed, 15 insertions(+), 3 deletions(-) diff --git a/Libraries/Components/AccessibilityInfo/AccessibilityInfo.android.js b/Libraries/Components/AccessibilityInfo/AccessibilityInfo.android.js index d619b89725..28e794d19a 100644 --- a/Libraries/Components/AccessibilityInfo/AccessibilityInfo.android.js +++ b/Libraries/Components/AccessibilityInfo/AccessibilityInfo.android.js @@ -26,7 +26,7 @@ type AccessibilityEventDefinitions = { change: [boolean], }; -type AccessibilityEventTypes = 'focus'; +type AccessibilityEventTypes = 'focus' | 'click'; const _subscriptions = new Map(); @@ -162,7 +162,12 @@ const AccessibilityInfo = { eventType: AccessibilityEventTypes, ) { // route through React renderer to distinguish between Fabric and non-Fabric handles - sendAccessibilityEvent(handle, eventType); + // iOS only supports 'focus' event types + if (eventType === 'focus') { + sendAccessibilityEvent(handle, eventType); + } else if (eventType === 'click') { + // Do nothing! + } }, /** diff --git a/Libraries/Components/AccessibilityInfo/AccessibilityInfo.ios.js b/Libraries/Components/AccessibilityInfo/AccessibilityInfo.ios.js index bcdefd1eae..c55be9371e 100644 --- a/Libraries/Components/AccessibilityInfo/AccessibilityInfo.ios.js +++ b/Libraries/Components/AccessibilityInfo/AccessibilityInfo.ios.js @@ -43,7 +43,8 @@ type AccessibilityEventDefinitions = { ], }; -type AccessibilityEventTypes = 'focus'; +// 'click' event type is not implemented in iOS. It's declared here to avoid flow type errors +type AccessibilityEventTypes = 'focus' | 'click'; const _subscriptions = new Map(); diff --git a/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.android.js b/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.android.js index edc950427d..3bb1c55495 100644 --- a/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.android.js +++ b/Libraries/Components/AccessibilityInfo/legacySendAccessibilityEvent.android.js @@ -24,6 +24,12 @@ function legacySendAccessibilityEvent( UIManager.getConstants().AccessibilityEventTypes.typeViewFocused, ); } + if (eventType === 'click') { + UIManager.sendAccessibilityEvent( + reactTag, + UIManager.getConstants().AccessibilityEventTypes.typeViewClicked, + ); + } } module.exports = legacySendAccessibilityEvent;