Fix crash in AccessibilityManager
Summary: Fix this crash by making sure the RCTDeviceInfo is doing things on the main thread. This fixes #14043. Reviewed By: ashwinb Differential Revision: D5286746 fbshipit-source-id: cce3426a6e7e7221cff82f8bca663d9a060dd358
This commit is contained in:
parent
b1e64a448a
commit
112e3767ce
|
@ -0,0 +1,52 @@
|
|||
/**
|
||||
* Copyright (c) 2015-present, Facebook, Inc.
|
||||
* All rights reserved.
|
||||
*
|
||||
* This source code is licensed under the BSD-style license found in the
|
||||
* LICENSE file in the root directory of this source tree. An additional grant
|
||||
* of patent rights can be found in the PATENTS file in the same directory.
|
||||
*
|
||||
* @flow
|
||||
* @providesModule AccessibilityManagerTest
|
||||
*/
|
||||
'use strict';
|
||||
|
||||
const React = require('react');
|
||||
const ReactNative = require('react-native');
|
||||
const { View } = ReactNative;
|
||||
const RCTDeviceEventEmitter = require('RCTDeviceEventEmitter');
|
||||
const {
|
||||
TestModule,
|
||||
AccessibilityManager,
|
||||
} = ReactNative.NativeModules;
|
||||
|
||||
|
||||
class AccessibilityManagerTest extends React.Component {
|
||||
componentDidMount() {
|
||||
AccessibilityManager.setAccessibilityContentSizeMultipliers({
|
||||
'extraSmall': 1.0,
|
||||
'small': 2.0,
|
||||
'medium': 3.0,
|
||||
'large': 4.0,
|
||||
'extraLarge': 5.0,
|
||||
'extraExtraLarge': 6.0,
|
||||
'extraExtraExtraLarge': 7.0,
|
||||
'accessibilityMedium': 8.0,
|
||||
'accessibilityLarge': 9.0,
|
||||
'accessibilityExtraLarge': 10.0,
|
||||
'accessibilityExtraExtraLarge': 11.0,
|
||||
'accessibilityExtraExtraExtraLarge': 12.0,
|
||||
});
|
||||
RCTDeviceEventEmitter.addListener('didUpdateDimensions', update => {
|
||||
TestModule.markTestPassed(update.window.fontScale === 4.0);
|
||||
});
|
||||
}
|
||||
|
||||
render(): React.Element<any> {
|
||||
return <View />;
|
||||
}
|
||||
}
|
||||
|
||||
AccessibilityManagerTest.displayName = 'AccessibilityManagerTest';
|
||||
|
||||
module.exports = AccessibilityManagerTest;
|
|
@ -35,6 +35,7 @@ var TESTS = [
|
|||
require('./PromiseTest'),
|
||||
require('./SyncMethodTest'),
|
||||
require('./WebSocketTest'),
|
||||
require('./AccessibilityManagerTest'),
|
||||
];
|
||||
|
||||
TESTS.forEach(
|
||||
|
|
|
@ -74,6 +74,7 @@ RCT_TEST(SimpleSnapshotTest)
|
|||
RCT_TEST(SyncMethodTest)
|
||||
RCT_TEST(PromiseTest)
|
||||
RCT_TEST_ONLY_WITH_PACKAGER(WebSocketTest)
|
||||
RCT_TEST(AccessibilityManagerTest)
|
||||
|
||||
|
||||
@end
|
||||
|
|
|
@ -67,7 +67,7 @@ static NSDictionary *RCTExportedDimensions(RCTBridge *bridge)
|
|||
|
||||
- (void)invalidate
|
||||
{
|
||||
dispatch_async(dispatch_get_main_queue(), ^{
|
||||
RCTExecuteOnMainQueue(^{
|
||||
self->_bridge = nil;
|
||||
[[NSNotificationCenter defaultCenter] removeObserver:self];
|
||||
});
|
||||
|
@ -82,18 +82,30 @@ static NSDictionary *RCTExportedDimensions(RCTBridge *bridge)
|
|||
|
||||
- (void)didReceiveNewContentSizeMultiplier
|
||||
{
|
||||
// Report the event across the bridge.
|
||||
RCTBridge *bridge = _bridge;
|
||||
RCTExecuteOnMainQueue(^{
|
||||
// Report the event across the bridge.
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||
[_bridge.eventDispatcher sendDeviceEventWithName:@"didUpdateDimensions"
|
||||
body:RCTExportedDimensions(_bridge)];
|
||||
[bridge.eventDispatcher sendDeviceEventWithName:@"didUpdateDimensions"
|
||||
body:RCTExportedDimensions(bridge)];
|
||||
#pragma clang diagnostic pop
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
- (void)interfaceOrientationDidChange
|
||||
{
|
||||
#if !TARGET_OS_TV
|
||||
__weak typeof(self) weakSelf = self;
|
||||
RCTExecuteOnMainQueue(^{
|
||||
[weakSelf _interfaceOrientationDidChange];
|
||||
});
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
- (void)_interfaceOrientationDidChange
|
||||
{
|
||||
UIInterfaceOrientation nextOrientation = [RCTSharedApplication() statusBarOrientation];
|
||||
|
||||
// Update when we go from portrait to landscape, or landscape to portrait
|
||||
|
@ -109,7 +121,6 @@ static NSDictionary *RCTExportedDimensions(RCTBridge *bridge)
|
|||
}
|
||||
|
||||
_currentInterfaceOrientation = nextOrientation;
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue