mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
add getRecommendedTimeoutMillis to AccessibilityInfo (#31063)
Summary: resolve https://github.com/facebook/react-native/issues/30866 This PR is for using `getRecommendedTimeoutMillis` with React Native, which is available on Android 10 and above. This allows the Android "Time to take action (Accessibility timeout)" setting to be reflected in the app. ## Changelog <!-- Help reviewers and the release process by writing your own changelog entry. For an example, see: https://github.com/facebook/react-native/wiki/Changelog --> [Android] [Added] - Add `getRecommendedTimeoutMillis` to AccessibilityInfo Pull Request resolved: https://github.com/facebook/react-native/pull/31063 Test Plan: I couldn't find any tests at the code level, so I tested them on my Android device. --- ### Android 10 (Pixel4a) #### Settings <img src="https://user-images.githubusercontent.com/40130327/109322854-210f2400-7896-11eb-9f3b-b88afa27abfb.png" width="400" alt="Set the timeout to 1 minute on the settings screen." /> #### App <img src="https://user-images.githubusercontent.com/40130327/109322895-32583080-7896-11eb-9c48-c4aa9afb94d9.png" width="400" alt="The baseline timeout is 3000 ms, but the result of `getRecommendedTimeoutMillis` returns 60000 ms." /> --- ### Android 7, iOS(Simulator) Return the original timeout. <img src="https://user-images.githubusercontent.com/40130327/109323217-911daa00-7896-11eb-9eba-659bc623f2ac.png" width="400" alt="Return the original timeout on Android 7." /> <img src="https://user-images.githubusercontent.com/40130327/109323357-b7dbe080-7896-11eb-89e9-305eea8b801b.png" width="400" alt="Return the original timeout on iOS simulator." /> Reviewed By: lunaleaps Differential Revision: D27475370 Pulled By: nadiia fbshipit-source-id: 4cdd9eb5ddb20d89c1d870e640b4b7e3c3c1b14d
This commit is contained in:
committed by
Facebook GitHub Bot
parent
2785ce7e61
commit
d29a7e7a89
@@ -167,6 +167,29 @@ const AccessibilityInfo = {
|
||||
NativeAccessibilityInfo.announceForAccessibility(announcement);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Get the recommended timeout for changes to the UI needed by this user.
|
||||
*
|
||||
* See https://reactnative.dev/docs/accessibilityinfo.html#getRecommendedTimeoutMillis
|
||||
*/
|
||||
getRecommendedTimeoutMillis: function(
|
||||
originalTimeout: number,
|
||||
): Promise<number> {
|
||||
return new Promise((resolve, reject) => {
|
||||
if (
|
||||
NativeAccessibilityInfo &&
|
||||
NativeAccessibilityInfo.getRecommendedTimeoutMillis
|
||||
) {
|
||||
NativeAccessibilityInfo.getRecommendedTimeoutMillis(
|
||||
originalTimeout,
|
||||
resolve,
|
||||
);
|
||||
} else {
|
||||
resolve(originalTimeout);
|
||||
}
|
||||
});
|
||||
},
|
||||
};
|
||||
|
||||
module.exports = AccessibilityInfo;
|
||||
|
||||
@@ -275,6 +275,15 @@ const AccessibilityInfo = {
|
||||
// $FlowFixMe[escaped-generic]
|
||||
_subscriptions.delete(handler);
|
||||
},
|
||||
|
||||
/**
|
||||
* Android only
|
||||
*/
|
||||
getRecommendedTimeoutMillis: function(
|
||||
originalTimeout: number,
|
||||
): Promise<number> {
|
||||
return Promise.resolve(originalTimeout);
|
||||
},
|
||||
};
|
||||
|
||||
module.exports = AccessibilityInfo;
|
||||
|
||||
@@ -20,6 +20,10 @@ export interface Spec extends TurboModule {
|
||||
) => void;
|
||||
+setAccessibilityFocus: (reactTag: number) => void;
|
||||
+announceForAccessibility: (announcement: string) => void;
|
||||
+getRecommendedTimeoutMillis?: (
|
||||
mSec: number,
|
||||
onSuccess: (recommendedTimeoutMillis: number) => void,
|
||||
) => void;
|
||||
}
|
||||
|
||||
export default (TurboModuleRegistry.get<Spec>('AccessibilityInfo'): ?Spec);
|
||||
|
||||
+13
@@ -67,6 +67,7 @@ public class AccessibilityInfoModule extends NativeAccessibilityInfoSpec
|
||||
private final ContentResolver mContentResolver;
|
||||
private boolean mReduceMotionEnabled = false;
|
||||
private boolean mTouchExplorationEnabled = false;
|
||||
private int mRecommendedTimeout;
|
||||
|
||||
private static final String REDUCE_MOTION_EVENT_NAME = "reduceMotionDidChange";
|
||||
private static final String TOUCH_EXPLORATION_EVENT_NAME = "touchExplorationDidChange";
|
||||
@@ -193,4 +194,16 @@ public class AccessibilityInfoModule extends NativeAccessibilityInfoSpec
|
||||
public void setAccessibilityFocus(double reactTag) {
|
||||
// iOS only
|
||||
}
|
||||
|
||||
@Override
|
||||
public void getRecommendedTimeoutMillis(double originalTimeout, Callback successCallback) {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
|
||||
successCallback.invoke((int) originalTimeout);
|
||||
return;
|
||||
}
|
||||
mRecommendedTimeout =
|
||||
mAccessibilityManager.getRecommendedTimeoutMillis(
|
||||
(int) originalTimeout, AccessibilityManager.FLAG_CONTENT_CONTROLS);
|
||||
successCallback.invoke(mRecommendedTimeout);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -128,6 +128,7 @@ jest
|
||||
removeEventListener: jest.fn(),
|
||||
setAccessibilityFocus: jest.fn(),
|
||||
sendAccessibilityEvent_unstable: jest.fn(),
|
||||
getRecommendedTimeoutMillis: jest.fn(),
|
||||
}))
|
||||
.mock('../Libraries/Components/RefreshControl/RefreshControl', () =>
|
||||
jest.requireActual(
|
||||
|
||||
Reference in New Issue
Block a user