Skip to content

Commit 3154847

Browse files
authored
Merge branch '0.63-stable' into animation-fix-63
2 parents 396aedd + ab3d356 commit 3154847

File tree

24 files changed

+420
-100
lines changed

24 files changed

+420
-100
lines changed

.ado/templates/apple-droid-node-patching.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,4 @@ steps:
55
- task: CmdLine@2
66
displayName: Apply Android specific patches for Office consumption
77
inputs:
8-
script: node $(System.DefaultWorkingDirectory)/android-patches/bundle/bundle.js patch $(System.DefaultWorkingDirectory) Build OfficeRNHost V8 Focus --patch-store $(System.DefaultWorkingDirectory)/android-patches/patches --log-folder $(System.DefaultWorkingDirectory)/android-patches/logs --confirm ${{ parameters.apply_office_patches }}
8+
script: node $(System.DefaultWorkingDirectory)/android-patches/bundle/bundle.js patch $(System.DefaultWorkingDirectory) Build OfficeRNHost V8 Focus ImageColor --patch-store $(System.DefaultWorkingDirectory)/android-patches/patches --log-folder $(System.DefaultWorkingDirectory)/android-patches/logs --confirm ${{ parameters.apply_office_patches }}

Libraries/Components/Button.js

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,11 @@ const invariant = require('invariant');
2323
import type {PressEvent, KeyEvent} from '../Types/CoreEventTypes';
2424
import type {FocusEvent, BlurEvent} from './TextInput/TextInput'; // TODO(OSS Candidate ISS#2710739)
2525
import type {ColorValue} from '../StyleSheet/StyleSheetTypes';
26+
import type {
27+
AccessibilityActionEvent,
28+
AccessibilityActionInfo,
29+
AccessibilityRole,
30+
} from './View/ViewAccessibility';
2631

2732
type ButtonProps = $ReadOnly<{|
2833
/**
@@ -93,6 +98,20 @@ type ButtonProps = $ReadOnly<{|
9398
* Hint text to display blindness accessibility features
9499
*/
95100
accessibilityHint?: ?string, // TODO(OSS Candidate ISS#2710739)
101+
102+
// TODO(OSS Candidate ISS#2710739)
103+
/**
104+
* Custom accessibility role -- otherwise we use button
105+
*/
106+
accessibilityRole?: ?AccessibilityRole,
107+
108+
// TODO(OSS Candidate ISS#2710739)
109+
/**
110+
* Accessibility action handlers
111+
*/
112+
accessibilityActions?: ?$ReadOnlyArray<AccessibilityActionInfo>,
113+
onAccessibilityAction?: ?(event: AccessibilityActionEvent) => mixed,
114+
96115
/**
97116
* If true, disable all interactions for this component.
98117
*/
@@ -175,6 +194,9 @@ class Button extends React.Component<ButtonProps> {
175194
const {
176195
accessibilityLabel,
177196
accessibilityHint, // TODO(OSS Candidate ISS#2710739)
197+
accessibilityRole, // TODO(OSS Candidate ISS#2710739)
198+
accessibilityActions, // TODO(OSS Candidate ISS#2710739)
199+
onAccessibilityAction, // TODO(OSS Candidate ISS#2710739)
178200
color,
179201
onPress,
180202
touchSoundDisabled,
@@ -225,8 +247,10 @@ class Button extends React.Component<ButtonProps> {
225247
<Touchable
226248
accessibilityLabel={accessibilityLabel}
227249
accessibilityHint={accessibilityHint} // TODO(OSS Candidate ISS#2710739)
228-
accessibilityRole="button"
250+
accessibilityRole={accessibilityRole || 'button'} // TODO(OSS Candidate ISS#2710739)
229251
accessibilityState={accessibilityState}
252+
accessibilityActions={accessibilityActions}
253+
onAccessibilityAction={onAccessibilityAction}
230254
hasTVPreferredFocus={hasTVPreferredFocus}
231255
nextFocusDown={nextFocusDown}
232256
nextFocusForward={nextFocusForward}

Libraries/Components/View/ReactNativeViewViewConfig.js

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -45,18 +45,6 @@ const ReactNativeViewConfig = {
4545
captured: 'onFocusCapture',
4646
},
4747
},
48-
topKeyUp: {
49-
phasedRegistrationNames: {
50-
bubbled: 'onKeyUp',
51-
captured: 'onKeyUpCapture',
52-
},
53-
},
54-
topKeyDown: {
55-
phasedRegistrationNames: {
56-
bubbled: 'onKeyDown',
57-
captured: 'onKeyDownCapture',
58-
},
59-
},
6048
topKeyPress: {
6149
phasedRegistrationNames: {
6250
bubbled: 'onKeyPress',
@@ -118,6 +106,12 @@ const ReactNativeViewConfig = {
118106
topMagicTap: {
119107
registrationName: 'onMagicTap',
120108
},
109+
topKeyUp: {
110+
registrationName: 'onKeyUp',
111+
},
112+
topKeyDown: {
113+
registrationName: 'onKeyDown',
114+
},
121115
// Events for react-native-gesture-handler (T45765076)
122116
// Remove once this library can handle JS View Configs
123117
onGestureHandlerEvent: {

Libraries/Components/View/ViewAccessibility.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@ export type AccessibilityRole =
4545
| 'tab'
4646
| 'tablist'
4747
| 'timer'
48-
| 'toolbar';
48+
| 'toolbar'
49+
| 'popupbutton'
50+
| 'menubutton';
4951

5052
// the info associated with an accessibility action
5153
export type AccessibilityActionInfo = $ReadOnly<{

RNTester/RNTester-macOS/AppDelegate.mm

Lines changed: 88 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,45 @@
99
#import "AppDelegate.h"
1010

1111
#import <React/JSCExecutorFactory.h>
12+
#import <React/RCTJSIExecutorRuntimeInstaller.h>
1213
#import <React/RCTBridge.h>
1314
#import <React/RCTBundleURLProvider.h>
1415
#import <React/RCTCxxBridgeDelegate.h>
16+
#import <React/RCTJavaScriptLoader.h>
1517
#import <React/RCTLinkingManager.h>
18+
#import <React/RCTImageLoader.h>
19+
#import <React/RCTLocalAssetImageLoader.h>
20+
#import <React/RCTGIFImageDecoder.h>
21+
#import <React/RCTNetworking.h>
22+
#import <React/RCTHTTPRequestHandler.h>
23+
#import <React/RCTDataRequestHandler.h>
24+
#import <React/RCTFileRequestHandler.h>
25+
#import <React/RCTRootView.h>
26+
27+
#import <cxxreact/JSExecutor.h>
28+
29+
#if !TARGET_OS_TV && !TARGET_OS_UIKITFORMAC
1630
#import <React/RCTPushNotificationManager.h>
17-
#import <React/RCTTextAttributes.h>
18-
#import <ReactCommon/TurboModule.h>
19-
#import "../NativeModuleExample/ScreenshotMacOS.h"
31+
#endif
32+
33+
#ifdef RN_FABRIC_ENABLED
34+
#import <React/RCTSurfacePresenter.h>
35+
#import <React/RCTFabricSurfaceHostingProxyRootView.h>
36+
#endif
2037

2138
#import <ReactCommon/RCTTurboModuleManager.h>
39+
#import <React/RCTTextAttributes.h> // TODO(OSS Candidate ISS#2710739)
40+
41+
#import "RNTesterTurboModuleProvider.h"
2242

2343
NSString *kBundleNameJS = @"RNTesterApp";
2444

25-
@interface AppDelegate () <RCTCxxBridgeDelegate, NSUserNotificationCenterDelegate>
45+
@interface AppDelegate () <RCTCxxBridgeDelegate, RCTTurboModuleManagerDelegate, NSUserNotificationCenterDelegate>
2646
{
27-
ScreenshotManagerTurboModuleManagerDelegate *_turboModuleManagerDelegate;
47+
#ifdef RN_FABRIC_ENABLED
48+
RCTSurfacePresenter *_surfacePresenter;
49+
#endif
50+
2851
RCTTurboModuleManager *_turboModuleManager;
2952
}
3053
@end
@@ -37,6 +60,8 @@ @implementation AppDelegate
3760
- (void)awakeFromNib
3861
{
3962
[super awakeFromNib];
63+
64+
RCTEnableTurboModule(YES);
4065

4166
_bridge = [[RCTBridge alloc] initWithDelegate:self
4267
launchOptions:nil];
@@ -84,20 +109,64 @@ - (NSURL *)sourceURLForBridge:(__unused RCTBridge *)bridge
84109

85110
- (std::unique_ptr<facebook::react::JSExecutorFactory>)jsExecutorFactoryForBridge:(RCTBridge *)bridge
86111
{
112+
_turboModuleManager = [[RCTTurboModuleManager alloc] initWithBridge:bridge
113+
delegate:self
114+
jsInvoker:bridge.jsCallInvoker];
87115
__weak __typeof(self) weakSelf = self;
88-
return std::make_unique<facebook::react::JSCExecutorFactory>([weakSelf, bridge](facebook::jsi::Runtime &runtime) {
89-
if (!bridge) {
90-
return;
91-
}
92-
__typeof(self) strongSelf = weakSelf;
93-
if (strongSelf) {
94-
strongSelf->_turboModuleManagerDelegate = [ScreenshotManagerTurboModuleManagerDelegate new];
95-
strongSelf->_turboModuleManager = [[RCTTurboModuleManager alloc] initWithBridge:bridge
96-
delegate:strongSelf->_turboModuleManagerDelegate
97-
jsInvoker:bridge.jsCallInvoker];
98-
[strongSelf->_turboModuleManager installJSBindingWithRuntime:&runtime];
99-
}
100-
});
116+
return std::make_unique<facebook::react::JSCExecutorFactory>(
117+
facebook::react::RCTJSIExecutorRuntimeInstaller([weakSelf, bridge](facebook::jsi::Runtime &runtime) {
118+
if (!bridge) {
119+
return;
120+
}
121+
__typeof(self) strongSelf = weakSelf;
122+
if (strongSelf) {
123+
[strongSelf->_turboModuleManager installJSBindingWithRuntime:&runtime];
124+
}
125+
})
126+
);
127+
}
128+
129+
#pragma mark RCTTurboModuleManagerDelegate
130+
131+
- (Class)getModuleClassFromName:(const char *)name
132+
{
133+
return facebook::react::RNTesterTurboModuleClassProvider(name);
134+
}
135+
136+
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:(const std::string &)name
137+
jsInvoker:(std::shared_ptr<facebook::react::CallInvoker>)jsInvoker
138+
{
139+
return facebook::react::RNTesterTurboModuleProvider(name, jsInvoker);
140+
}
141+
142+
- (std::shared_ptr<facebook::react::TurboModule>)getTurboModule:(const std::string &)name
143+
instance:(id<RCTTurboModule>)instance
144+
jsInvoker:(std::shared_ptr<facebook::react::CallInvoker>)jsInvoker
145+
nativeInvoker:(std::shared_ptr<facebook::react::CallInvoker>)nativeInvoker
146+
perfLogger:(id<RCTTurboModulePerformanceLogger>)perfLogger
147+
{
148+
return facebook::react::RNTesterTurboModuleProvider(name, instance, jsInvoker, nativeInvoker, perfLogger);
149+
}
150+
151+
- (id<RCTTurboModule>)getModuleInstanceFromClass:(Class)moduleClass
152+
{
153+
if (moduleClass == RCTImageLoader.class) {
154+
return [[moduleClass alloc] initWithRedirectDelegate:nil loadersProvider:^NSArray<id<RCTImageURLLoader>> *{
155+
return @[[RCTLocalAssetImageLoader new]];
156+
} decodersProvider:^NSArray<id<RCTImageDataDecoder>> *{
157+
return @[[RCTGIFImageDecoder new]];
158+
}];
159+
} else if (moduleClass == RCTNetworking.class) {
160+
return [[moduleClass alloc] initWithHandlersProvider:^NSArray<id<RCTURLRequestHandler>> *{
161+
return @[
162+
[RCTHTTPRequestHandler new],
163+
[RCTDataRequestHandler new],
164+
[RCTFileRequestHandler new],
165+
];
166+
}];
167+
}
168+
// No custom initializer here.
169+
return [moduleClass new];
101170
}
102171

103172
# pragma mark - Push Notifications
@@ -135,4 +204,4 @@ - (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentN
135204
return YES;
136205
}
137206

138-
@end
207+
@end
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/**
2+
* Copyright (c) 2015-present, Facebook, Inc.
3+
*
4+
* This source code is licensed under the MIT license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*
7+
* @format
8+
* @flow
9+
*/
10+
11+
'use strict'; // TODO(OSS Candidate ISS#2710739)
12+
13+
const React = require('react');
14+
const ReactNative = require('react-native');
15+
const {Button, Text, View} = ReactNative;
16+
17+
import {Platform} from 'react-native';
18+
import type {AccessibilityActionEvent} from 'react-native/Libraries/Components/View/ViewAccessibility';
19+
20+
class AccessibilityShowMenu extends React.Component<{}> {
21+
onClick: () => void = () => {
22+
console.log('received click event\n');
23+
};
24+
25+
onAccessibilityAction: (e: AccessibilityActionEvent) => void = e => {
26+
if (e.nativeEvent.actionName === 'showMenu') {
27+
console.log('received accessibility show event\n');
28+
}
29+
};
30+
31+
render() {
32+
return (
33+
<View>
34+
<Text>
35+
Accessibility Show Menu action is dispatched when the OS triggers it
36+
</Text>
37+
<View>
38+
{Platform.OS === 'macos' ? (
39+
<Button
40+
title={'Test button'}
41+
onPress={this.onClick}
42+
accessibilityRole={'menubutton'}
43+
accessibilityActions={[{name: 'showMenu'}]}
44+
accessibilityHint={
45+
'For more options, press Control-Option-Shift-M'
46+
}
47+
onAccessibilityAction={this.onAccessibilityAction}
48+
/>
49+
) : null}
50+
</View>
51+
</View>
52+
);
53+
}
54+
}
55+
56+
exports.title = 'Accessibiltiy Show Menu action';
57+
exports.description =
58+
'Examples that show how Accessibility Show Menu action can be used.';
59+
exports.examples = [
60+
{
61+
title: 'AccessibilityShowMenu',
62+
render: function(): React.Element<any> {
63+
return <AccessibilityShowMenu />;
64+
},
65+
},
66+
];

RNTester/js/examples/KeyboardEventsExample/KeyboardEventsExample.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,15 +33,15 @@ class KeyEventExample extends React.Component<{}, State> {
3333
this.setState({characters: e.nativeEvent.key});
3434
this.setState(prevState => ({
3535
eventStream:
36-
prevState.eventStream + prevState.characters + '\nKey Down: ',
36+
prevState.eventStream + '\nKey Down: ' + prevState.characters,
3737
}));
3838
};
3939

4040
onKeyUpEvent: (e: KeyEvent) => void = (e: KeyEvent) => {
4141
console.log('received key up event\n', e.nativeEvent.key);
4242
this.setState({characters: e.nativeEvent.key});
4343
this.setState(prevState => ({
44-
eventStream: prevState.eventStream + prevState.characters + '\nKey Up: ',
44+
eventStream: prevState.eventStream + '\nKey Up: ' + prevState.characters,
4545
}));
4646
};
4747

RNTester/js/utils/RNTesterList.ios.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,11 @@ const ComponentExamples: Array<RNTesterExample> = [
5656
module: require('../examples/KeyboardEventsExample/KeyboardEventsExample'),
5757
supportsTVOS: false,
5858
}, // ]TODO(OSS Candidate ISS#2710739)
59+
{
60+
key: 'AccessibilityShowMenu',
61+
module: require('../examples/AccessibilityShowMenu/AccessibilityShowMenu'),
62+
supportsTVOS: false,
63+
}, // ]TODO(OSS Candidate ISS#2710739)
5964
{
6065
key: 'ImageExample',
6166
module: require('../examples/Image/ImageExample'),

React/Base/RCTConvert.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1358,6 +1358,8 @@ + (NSString*)accessibilityRoleFromTrait:(NSString*)trait
13581358
@"disclosure": NSAccessibilityDisclosureTriangleRole,
13591359
@"group": NSAccessibilityGroupRole,
13601360
@"list": NSAccessibilityListRole,
1361+
@"popupbutton": NSAccessibilityPopUpButtonRole,
1362+
@"menubutton": NSAccessibilityMenuButtonRole,
13611363
};
13621364
});
13631365

React/CoreModules/RCTDevSettings.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,13 @@
2828
*/
2929
- (id)settingForKey:(NSString *)key;
3030

31+
// [TODO(macOS ISS#2323203)
32+
/**
33+
* Returns all keys that are overridden
34+
*/
35+
- (NSArray<NSString *> *)overridenKeys;
36+
// ]TODO(macOS ISS#2323203)
37+
3138
@end
3239

3340
@interface RCTDevSettings : RCTEventEmitter

0 commit comments

Comments
 (0)