react-native-tvos 0.66.3-0 → 0.66.3-1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Libraries/Components/AppleTV/TVFocusEventHandler.js +51 -0
- package/Libraries/Components/Pressable/Pressable.js +26 -8
- package/Libraries/Components/Touchable/Touchable.js +14 -18
- package/React/Fabric/Mounting/ComponentViews/Modal/RCTModalHostViewComponentView.mm +8 -0
- package/React/Fabric/Mounting/ComponentViews/RCTFabricComponentsPlugins.h +6 -0
- package/React/Fabric/Mounting/ComponentViews/RCTFabricComponentsPlugins.mm +6 -0
- package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +2 -0
- package/React/Fabric/Mounting/ComponentViews/Text/RCTParagraphComponentView.mm +3 -1
- package/React/Fabric/Mounting/ComponentViews/TextInput/RCTTextInputComponentView.mm +4 -1
- package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +2 -0
- package/React/React-RCTFabric.podspec +3 -0
- package/ReactAndroid/gradle.properties +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java +5 -0
- package/ReactAndroid/src/main/java/com/facebook/react/modules/core/ReactAndroidHWInputDeviceHelper.java +10 -4
- package/android/com/facebook/react/react-native/{0.66.3-0/react-native-0.66.3-0.aar → 0.66.3-1/react-native-0.66.3-1.aar} +0 -0
- package/android/com/facebook/react/react-native/0.66.3-1/react-native-0.66.3-1.aar.md5 +1 -0
- package/android/com/facebook/react/react-native/0.66.3-1/react-native-0.66.3-1.aar.sha1 +1 -0
- package/android/com/facebook/react/react-native/0.66.3-1/react-native-0.66.3-1.aar.sha256 +1 -0
- package/android/com/facebook/react/react-native/0.66.3-1/react-native-0.66.3-1.aar.sha512 +1 -0
- package/android/com/facebook/react/react-native/{0.66.3-0/react-native-0.66.3-0.module → 0.66.3-1/react-native-0.66.3-1.module} +16 -16
- package/android/com/facebook/react/react-native/0.66.3-1/react-native-0.66.3-1.module.md5 +1 -0
- package/android/com/facebook/react/react-native/0.66.3-1/react-native-0.66.3-1.module.sha1 +1 -0
- package/android/com/facebook/react/react-native/0.66.3-1/react-native-0.66.3-1.module.sha256 +1 -0
- package/android/com/facebook/react/react-native/0.66.3-1/react-native-0.66.3-1.module.sha512 +1 -0
- package/android/com/facebook/react/react-native/{0.66.3-0/react-native-0.66.3-0.pom → 0.66.3-1/react-native-0.66.3-1.pom} +1 -1
- package/android/com/facebook/react/react-native/0.66.3-1/react-native-0.66.3-1.pom.md5 +1 -0
- package/android/com/facebook/react/react-native/0.66.3-1/react-native-0.66.3-1.pom.sha1 +1 -0
- package/android/com/facebook/react/react-native/0.66.3-1/react-native-0.66.3-1.pom.sha256 +1 -0
- package/android/com/facebook/react/react-native/0.66.3-1/react-native-0.66.3-1.pom.sha512 +1 -0
- package/android/com/facebook/react/react-native/maven-metadata.xml +4 -4
- package/android/com/facebook/react/react-native/maven-metadata.xml.md5 +1 -1
- package/android/com/facebook/react/react-native/maven-metadata.xml.sha1 +1 -1
- package/android/com/facebook/react/react-native/maven-metadata.xml.sha256 +1 -1
- package/android/com/facebook/react/react-native/maven-metadata.xml.sha512 +1 -1
- package/package.json +1 -1
- package/template/android/app/src/main/java/com/helloworld/MainApplication.java +5 -0
- package/template/package.json +1 -1
- package/third-party-podspecs/RCT-Folly.podspec +2 -1
- package/android/com/facebook/react/react-native/0.66.3-0/react-native-0.66.3-0.aar.md5 +0 -1
- package/android/com/facebook/react/react-native/0.66.3-0/react-native-0.66.3-0.aar.sha1 +0 -1
- package/android/com/facebook/react/react-native/0.66.3-0/react-native-0.66.3-0.aar.sha256 +0 -1
- package/android/com/facebook/react/react-native/0.66.3-0/react-native-0.66.3-0.aar.sha512 +0 -1
- package/android/com/facebook/react/react-native/0.66.3-0/react-native-0.66.3-0.module.md5 +0 -1
- package/android/com/facebook/react/react-native/0.66.3-0/react-native-0.66.3-0.module.sha1 +0 -1
- package/android/com/facebook/react/react-native/0.66.3-0/react-native-0.66.3-0.module.sha256 +0 -1
- package/android/com/facebook/react/react-native/0.66.3-0/react-native-0.66.3-0.module.sha512 +0 -1
- package/android/com/facebook/react/react-native/0.66.3-0/react-native-0.66.3-0.pom.md5 +0 -1
- package/android/com/facebook/react/react-native/0.66.3-0/react-native-0.66.3-0.pom.sha1 +0 -1
- package/android/com/facebook/react/react-native/0.66.3-0/react-native-0.66.3-0.pom.sha256 +0 -1
- package/android/com/facebook/react/react-native/0.66.3-0/react-native-0.66.3-0.pom.sha512 +0 -1
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Copyright (c) Facebook, Inc. and its affiliates.
|
|
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';
|
|
12
|
+
|
|
13
|
+
import NativeEventEmitter from '../../EventEmitter/NativeEventEmitter';
|
|
14
|
+
import Platform from '../../Utilities/Platform';
|
|
15
|
+
import {type EventSubscription} from '../../vendor/emitter/EventEmitter';
|
|
16
|
+
import NativeTVNavigationEventEmitter from './NativeTVNavigationEventEmitter';
|
|
17
|
+
|
|
18
|
+
class TVFocusEventHandler {
|
|
19
|
+
__nativeTVNavigationEventListener: ?EventSubscription = null;
|
|
20
|
+
__nativeTVNavigationEventEmitter: ?NativeEventEmitter = null;
|
|
21
|
+
__callbackMap: Map<any, Function> = new Map();
|
|
22
|
+
|
|
23
|
+
constructor() {
|
|
24
|
+
if (Platform.OS === 'ios' && !NativeTVNavigationEventEmitter) {
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
this.__nativeTVNavigationEventEmitter = new NativeEventEmitter(
|
|
29
|
+
NativeTVNavigationEventEmitter,
|
|
30
|
+
);
|
|
31
|
+
this.__nativeTVNavigationEventListener = this.__nativeTVNavigationEventEmitter.addListener(
|
|
32
|
+
'onHWKeyEvent',
|
|
33
|
+
data => {
|
|
34
|
+
const callback = this.__callbackMap.get(data.tag);
|
|
35
|
+
if (callback) {
|
|
36
|
+
callback(data);
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
register(componentTag: ?any, callback: Function): void {
|
|
43
|
+
this.__callbackMap.set(componentTag, callback);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
unregister(componentTag: ?any): void {
|
|
47
|
+
this.__callbackMap.delete(componentTag);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export const tvFocusEventHandler: TVFocusEventHandler | null = Platform.isTV ? new TVFocusEventHandler() : null;
|
|
@@ -9,7 +9,14 @@
|
|
|
9
9
|
*/
|
|
10
10
|
|
|
11
11
|
import * as React from 'react';
|
|
12
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
useMemo,
|
|
14
|
+
useState,
|
|
15
|
+
useRef,
|
|
16
|
+
useImperativeHandle,
|
|
17
|
+
useCallback,
|
|
18
|
+
useEffect,
|
|
19
|
+
} from 'react';
|
|
13
20
|
import useAndroidRippleForView, {
|
|
14
21
|
type RippleConfig,
|
|
15
22
|
} from './useAndroidRippleForView';
|
|
@@ -26,8 +33,8 @@ import {normalizeRect, type RectOrSize} from '../../StyleSheet/Rect';
|
|
|
26
33
|
import type {LayoutEvent, PressEvent} from '../../Types/CoreEventTypes';
|
|
27
34
|
import View from '../View/View';
|
|
28
35
|
import typeof TVParallaxPropertiesType from '../AppleTV/TVViewPropTypes';
|
|
29
|
-
import useTVEventHandler from '../AppleTV/useTVEventHandler';
|
|
30
36
|
import Platform from '../../Utilities/Platform';
|
|
37
|
+
import {tvFocusEventHandler} from '../AppleTV/TVFocusEventHandler';
|
|
31
38
|
|
|
32
39
|
type ViewStyleProp = $ElementType<React.ElementConfig<typeof View>, 'style'>;
|
|
33
40
|
|
|
@@ -269,9 +276,9 @@ function Pressable(props: Props, forwardedRef): React.Node {
|
|
|
269
276
|
);
|
|
270
277
|
const eventHandlers = usePressability(config);
|
|
271
278
|
|
|
272
|
-
const
|
|
273
|
-
|
|
274
|
-
if (
|
|
279
|
+
const pressableTVFocusEventHandler = useCallback(
|
|
280
|
+
(evt: Event) => {
|
|
281
|
+
if (isTVSelectable !== false || focusable !== false) {
|
|
275
282
|
if (evt?.eventType === 'focus') {
|
|
276
283
|
setFocused(true);
|
|
277
284
|
onFocus && onFocus(evt);
|
|
@@ -280,7 +287,7 @@ function Pressable(props: Props, forwardedRef): React.Node {
|
|
|
280
287
|
setFocused(false);
|
|
281
288
|
}
|
|
282
289
|
}
|
|
283
|
-
// Use these on tvOS only.
|
|
290
|
+
// Use these on tvOS only. Android press events go to onClick() so we don't
|
|
284
291
|
// need to call onPress() again here
|
|
285
292
|
if (Platform.isTVOS) {
|
|
286
293
|
if (focused && evt.eventType === 'select') {
|
|
@@ -290,9 +297,20 @@ function Pressable(props: Props, forwardedRef): React.Node {
|
|
|
290
297
|
onLongPress && onLongPress(evt);
|
|
291
298
|
}
|
|
292
299
|
}
|
|
300
|
+
},
|
|
301
|
+
[focused, onBlur, onFocus, onLongPress, onPress, focusable, isTVSelectable],
|
|
302
|
+
);
|
|
303
|
+
|
|
304
|
+
useEffect(() => {
|
|
305
|
+
if (!tvFocusEventHandler) {
|
|
306
|
+
return;
|
|
293
307
|
}
|
|
294
|
-
|
|
295
|
-
|
|
308
|
+
const viewTag = viewRef?.current?._nativeTag;
|
|
309
|
+
tvFocusEventHandler.register(viewTag, pressableTVFocusEventHandler);
|
|
310
|
+
return () => {
|
|
311
|
+
tvFocusEventHandler.unregister(viewTag);
|
|
312
|
+
};
|
|
313
|
+
}, [pressableTVFocusEventHandler]);
|
|
296
314
|
|
|
297
315
|
return (
|
|
298
316
|
<View
|
|
@@ -15,7 +15,7 @@ import Platform from '../../Utilities/Platform';
|
|
|
15
15
|
import Position from './Position';
|
|
16
16
|
import UIManager from '../../ReactNative/UIManager';
|
|
17
17
|
import SoundManager from '../Sound/SoundManager';
|
|
18
|
-
import
|
|
18
|
+
import {tvFocusEventHandler} from '../AppleTV/TVFocusEventHandler';
|
|
19
19
|
|
|
20
20
|
import {PressabilityDebugView} from '../../Pressability/PressabilityDebug';
|
|
21
21
|
|
|
@@ -364,24 +364,21 @@ const LONG_PRESS_ALLOWED_MOVEMENT = 10;
|
|
|
364
364
|
*/
|
|
365
365
|
const TouchableMixin = {
|
|
366
366
|
componentDidMount: function() {
|
|
367
|
-
if (!
|
|
367
|
+
if (!tvFocusEventHandler) {
|
|
368
368
|
return;
|
|
369
369
|
}
|
|
370
370
|
|
|
371
|
-
this.
|
|
372
|
-
|
|
373
|
-
const myTag = ReactNative.findNodeHandle(cmp);
|
|
371
|
+
this._componentTag = ReactNative.findNodeHandle(this);
|
|
372
|
+
tvFocusEventHandler.register(this._componentTag, evt => {
|
|
374
373
|
evt.dispatchConfig = {};
|
|
375
|
-
if (
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
cmp.touchableHandlePress(evt);
|
|
384
|
-
}
|
|
374
|
+
if (evt.eventType === 'focus') {
|
|
375
|
+
this.touchableHandleFocus(evt);
|
|
376
|
+
} else if (evt.eventType === 'blur') {
|
|
377
|
+
this.touchableHandleBlur(evt);
|
|
378
|
+
} else if (evt.eventType === 'select' && Platform.OS !== 'android') {
|
|
379
|
+
this.touchableHandlePress &&
|
|
380
|
+
!this.props.disabled &&
|
|
381
|
+
this.touchableHandlePress(evt);
|
|
385
382
|
}
|
|
386
383
|
});
|
|
387
384
|
},
|
|
@@ -390,9 +387,8 @@ const TouchableMixin = {
|
|
|
390
387
|
* Clear all timeouts on unmount
|
|
391
388
|
*/
|
|
392
389
|
componentWillUnmount: function() {
|
|
393
|
-
if (
|
|
394
|
-
this.
|
|
395
|
-
delete this._tvEventHandler;
|
|
390
|
+
if (tvFocusEventHandler) {
|
|
391
|
+
tvFocusEventHandler.unregister(this._componentTag);
|
|
396
392
|
}
|
|
397
393
|
this.touchableDelayTimeout && clearTimeout(this.touchableDelayTimeout);
|
|
398
394
|
this.longPressDelayTimeout && clearTimeout(this.longPressDelayTimeout);
|
|
@@ -79,9 +79,17 @@ static UIModalPresentationStyle presentationConfiguration(ModalHostViewProps con
|
|
|
79
79
|
case ModalHostViewPresentationStyle::FullScreen:
|
|
80
80
|
return UIModalPresentationFullScreen;
|
|
81
81
|
case ModalHostViewPresentationStyle::PageSheet:
|
|
82
|
+
#if TARGET_OS_TV
|
|
83
|
+
return UIModalPresentationOverFullScreen;
|
|
84
|
+
#else
|
|
82
85
|
return UIModalPresentationPageSheet;
|
|
86
|
+
#endif
|
|
83
87
|
case ModalHostViewPresentationStyle::FormSheet:
|
|
88
|
+
#if TARGET_OS_TV
|
|
89
|
+
return UIModalPresentationOverFullScreen;
|
|
90
|
+
#else
|
|
84
91
|
return UIModalPresentationFormSheet;
|
|
92
|
+
#endif
|
|
85
93
|
case ModalHostViewPresentationStyle::OverFullScreen:
|
|
86
94
|
return UIModalPresentationOverFullScreen;
|
|
87
95
|
}
|
|
@@ -31,14 +31,20 @@ Class<RCTComponentViewProtocol> RCTFabricComponentsProvider(const char *name);
|
|
|
31
31
|
// Lookup functions
|
|
32
32
|
Class<RCTComponentViewProtocol> RCTSafeAreaViewCls(void) __attribute__((used));
|
|
33
33
|
Class<RCTComponentViewProtocol> RCTScrollViewCls(void) __attribute__((used));
|
|
34
|
+
#if !TARGET_OS_TV
|
|
34
35
|
Class<RCTComponentViewProtocol> RCTPullToRefreshViewCls(void) __attribute__((used));
|
|
36
|
+
#endif
|
|
35
37
|
Class<RCTComponentViewProtocol> RCTActivityIndicatorViewCls(void) __attribute__((used));
|
|
38
|
+
#if !TARGET_OS_TV
|
|
36
39
|
Class<RCTComponentViewProtocol> RCTSliderCls(void) __attribute__((used));
|
|
37
40
|
Class<RCTComponentViewProtocol> RCTSwitchCls(void) __attribute__((used));
|
|
41
|
+
#endif
|
|
38
42
|
Class<RCTComponentViewProtocol> RCTUnimplementedNativeViewCls(void) __attribute__((used));
|
|
39
43
|
Class<RCTComponentViewProtocol> RCTParagraphCls(void) __attribute__((used));
|
|
40
44
|
Class<RCTComponentViewProtocol> RCTTextInputCls(void) __attribute__((used));
|
|
45
|
+
#if !TARGET_OS_TV
|
|
41
46
|
Class<RCTComponentViewProtocol> RCTInputAccessoryCls(void) __attribute__((used));
|
|
47
|
+
#endif
|
|
42
48
|
Class<RCTComponentViewProtocol> RCTViewCls(void) __attribute__((used));
|
|
43
49
|
Class<RCTComponentViewProtocol> RCTImageCls(void) __attribute__((used));
|
|
44
50
|
|
|
@@ -20,14 +20,20 @@ Class<RCTComponentViewProtocol> RCTFabricComponentsProvider(const char *name) {
|
|
|
20
20
|
static std::unordered_map<std::string, Class (*)(void)> sFabricComponentsClassMap = {
|
|
21
21
|
{"SafeAreaView", RCTSafeAreaViewCls},
|
|
22
22
|
{"ScrollView", RCTScrollViewCls},
|
|
23
|
+
#if !TARGET_OS_TV
|
|
23
24
|
{"PullToRefreshView", RCTPullToRefreshViewCls},
|
|
25
|
+
#endif
|
|
24
26
|
{"ActivityIndicatorView", RCTActivityIndicatorViewCls},
|
|
27
|
+
#if !TARGET_OS_TV
|
|
25
28
|
{"Slider", RCTSliderCls},
|
|
26
29
|
{"Switch", RCTSwitchCls},
|
|
30
|
+
#endif
|
|
27
31
|
{"UnimplementedNativeView", RCTUnimplementedNativeViewCls},
|
|
28
32
|
{"Paragraph", RCTParagraphCls},
|
|
29
33
|
{"TextInput", RCTTextInputCls},
|
|
34
|
+
#if !TARGET_OS_TV
|
|
30
35
|
{"InputAccessoryView", RCTInputAccessoryCls},
|
|
36
|
+
#endif
|
|
31
37
|
{"View", RCTViewCls},
|
|
32
38
|
{"Image", RCTImageCls},
|
|
33
39
|
};
|
|
@@ -195,9 +195,11 @@ static void RCTSendPaperScrollEvent_DEPRECATED(UIScrollView *scrollView, NSInteg
|
|
|
195
195
|
MAP_SCROLL_VIEW_PROP(maximumZoomScale);
|
|
196
196
|
MAP_SCROLL_VIEW_PROP(minimumZoomScale);
|
|
197
197
|
MAP_SCROLL_VIEW_PROP(scrollEnabled);
|
|
198
|
+
#if !TARGET_OS_TV
|
|
198
199
|
MAP_SCROLL_VIEW_PROP(pagingEnabled);
|
|
199
200
|
MAP_SCROLL_VIEW_PROP(pinchGestureEnabled);
|
|
200
201
|
MAP_SCROLL_VIEW_PROP(scrollsToTop);
|
|
202
|
+
#endif
|
|
201
203
|
MAP_SCROLL_VIEW_PROP(showsHorizontalScrollIndicator);
|
|
202
204
|
MAP_SCROLL_VIEW_PROP(showsVerticalScrollIndicator);
|
|
203
205
|
|
|
@@ -233,7 +233,7 @@ using namespace facebook::react;
|
|
|
233
233
|
- (void)handleLongPress:(UILongPressGestureRecognizer *)gesture
|
|
234
234
|
{
|
|
235
235
|
// TODO: Adopt showMenuFromRect (necessary for UIKitForMac)
|
|
236
|
-
#if !TARGET_OS_UIKITFORMAC
|
|
236
|
+
#if !TARGET_OS_UIKITFORMAC && !TARGET_OS_TV
|
|
237
237
|
UIMenuController *menuController = [UIMenuController sharedMenuController];
|
|
238
238
|
|
|
239
239
|
if (menuController.isMenuVisible) {
|
|
@@ -268,6 +268,7 @@ using namespace facebook::react;
|
|
|
268
268
|
|
|
269
269
|
- (void)copy:(id)sender
|
|
270
270
|
{
|
|
271
|
+
#if !TARGET_OS_TV
|
|
271
272
|
NSAttributedString *attributedText = self.attributedText;
|
|
272
273
|
|
|
273
274
|
NSMutableDictionary *item = [NSMutableDictionary new];
|
|
@@ -284,6 +285,7 @@ using namespace facebook::react;
|
|
|
284
285
|
|
|
285
286
|
UIPasteboard *pasteboard = [UIPasteboard generalPasteboard];
|
|
286
287
|
pasteboard.items = @[ item ];
|
|
288
|
+
#endif
|
|
287
289
|
}
|
|
288
290
|
|
|
289
291
|
@end
|
|
@@ -464,6 +464,7 @@ using namespace facebook::react;
|
|
|
464
464
|
return;
|
|
465
465
|
}
|
|
466
466
|
|
|
467
|
+
#if !TARGET_OS_TV
|
|
467
468
|
if (shouldHaveInputAccesoryView) {
|
|
468
469
|
UIToolbar *toolbarView = [[UIToolbar alloc] init];
|
|
469
470
|
[toolbarView sizeToFit];
|
|
@@ -475,7 +476,9 @@ using namespace facebook::react;
|
|
|
475
476
|
action:@selector(handleInputAccessoryDoneButton)];
|
|
476
477
|
toolbarView.items = @[ flexibleSpace, doneButton ];
|
|
477
478
|
_backedTextInputView.inputAccessoryView = toolbarView;
|
|
478
|
-
} else
|
|
479
|
+
} else
|
|
480
|
+
#endif
|
|
481
|
+
{
|
|
479
482
|
_backedTextInputView.inputAccessoryView = nil;
|
|
480
483
|
}
|
|
481
484
|
|
|
@@ -35,7 +35,9 @@ using namespace facebook::react;
|
|
|
35
35
|
static auto const defaultProps = std::make_shared<ViewProps const>();
|
|
36
36
|
_props = defaultProps;
|
|
37
37
|
_reactSubviews = [NSMutableArray new];
|
|
38
|
+
#if !TARGET_OS_TV
|
|
38
39
|
self.multipleTouchEnabled = YES;
|
|
40
|
+
#endif
|
|
39
41
|
}
|
|
40
42
|
return self;
|
|
41
43
|
}
|
|
@@ -33,6 +33,9 @@ Pod::Spec.new do |s|
|
|
|
33
33
|
s.source_files = "Fabric/**/*.{c,h,m,mm,S,cpp}"
|
|
34
34
|
s.exclude_files = "**/tests/*",
|
|
35
35
|
"**/android/*",
|
|
36
|
+
s.tvos.exclude_files = "Fabric/**/RCTPullToRefreshViewComponentView*",
|
|
37
|
+
"Fabric/**/RCTSwitchComponentView*",
|
|
38
|
+
"Fabric/**/RCTSliderComponentView*"
|
|
36
39
|
s.compiler_flags = folly_compiler_flags + ' ' + boost_compiler_flags
|
|
37
40
|
s.header_dir = "React"
|
|
38
41
|
s.framework = "JavaScriptCore"
|
|
@@ -89,4 +89,9 @@ public class ReactFeatureFlags {
|
|
|
89
89
|
public static boolean enableLockFreeEventDispatcher = false;
|
|
90
90
|
|
|
91
91
|
public static boolean enableAggressiveEventEmitterCleanup = false;
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Send key down events as well as key up events
|
|
95
|
+
*/
|
|
96
|
+
public static boolean enableKeyDownEvents = false;
|
|
92
97
|
}
|
|
@@ -15,6 +15,7 @@ import com.facebook.react.bridge.WritableMap;
|
|
|
15
15
|
import com.facebook.react.bridge.WritableNativeMap;
|
|
16
16
|
import com.facebook.react.common.MapBuilder;
|
|
17
17
|
import com.facebook.react.common.SystemClock;
|
|
18
|
+
import com.facebook.react.config.ReactFeatureFlags;
|
|
18
19
|
|
|
19
20
|
import java.util.Map;
|
|
20
21
|
|
|
@@ -79,10 +80,7 @@ public class ReactAndroidHWInputDeviceHelper {
|
|
|
79
80
|
&& isSelectEvent(eventKeyCode) && mLastKeyDownTime == 0) {
|
|
80
81
|
mLastKeyDownTime = time;
|
|
81
82
|
}
|
|
82
|
-
|
|
83
|
-
// if ((eventKeyAction == KeyEvent.ACTION_UP || eventKeyAction == KeyEvent.ACTION_DOWN)
|
|
84
|
-
if ((eventKeyAction == KeyEvent.ACTION_UP)
|
|
85
|
-
&& KEY_EVENTS_ACTIONS.containsKey(eventKeyCode)) {
|
|
83
|
+
if (shouldDispatchEvent(eventKeyCode, eventKeyAction)) {
|
|
86
84
|
long delta = time - mLastKeyDownTime;
|
|
87
85
|
if (isSelectEvent(eventKeyCode) && (delta > mPressedDelta)) {
|
|
88
86
|
dispatchEvent("longSelect", mLastFocusedViewId, eventKeyAction, context);
|
|
@@ -93,6 +91,14 @@ public class ReactAndroidHWInputDeviceHelper {
|
|
|
93
91
|
}
|
|
94
92
|
}
|
|
95
93
|
|
|
94
|
+
// Android TV: Only send key up actions, unless key down events are enabled
|
|
95
|
+
private boolean shouldDispatchEvent(int eventKeyCode, int eventKeyAction) {
|
|
96
|
+
return KEY_EVENTS_ACTIONS.containsKey(eventKeyCode) && (
|
|
97
|
+
(eventKeyAction == KeyEvent.ACTION_UP) ||
|
|
98
|
+
(eventKeyAction == KeyEvent.ACTION_DOWN && ReactFeatureFlags.enableKeyDownEvents)
|
|
99
|
+
);
|
|
100
|
+
}
|
|
101
|
+
|
|
96
102
|
/** Called from {@link com.facebook.react.ReactRootView} when focused view changes. */
|
|
97
103
|
public void onFocusChanged(View newFocusedView, ReactContext context) {
|
|
98
104
|
if (mLastFocusedViewId == newFocusedView.getId()) {
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
46cf104eee6c41eca9cb466e8455307a
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
efb83c1ec79d703c3df555b76b83172ee2331562
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
a3dbee139f1c56948fa1a4f3860d03437eff302766b86cb2ea4b223990c91d00
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
89acf10cea8de9aeaef9ba71a5c94cebab83459eabe03dc7e44a4ede027199289898690f2052675586bb44c04e6f86c316ca0df594f1b3a47d6e872af9dd0723
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"component": {
|
|
4
4
|
"group": "com.facebook.react",
|
|
5
5
|
"module": "react-native",
|
|
6
|
-
"version": "0.66.3-
|
|
6
|
+
"version": "0.66.3-1",
|
|
7
7
|
"attributes": {
|
|
8
8
|
"org.gradle.status": "release"
|
|
9
9
|
}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"createdBy": {
|
|
12
12
|
"gradle": {
|
|
13
13
|
"version": "6.9",
|
|
14
|
-
"buildId": "
|
|
14
|
+
"buildId": "56p567vwizeihou4ojzp5vvcj4"
|
|
15
15
|
}
|
|
16
16
|
},
|
|
17
17
|
"variants": [
|
|
@@ -132,13 +132,13 @@
|
|
|
132
132
|
],
|
|
133
133
|
"files": [
|
|
134
134
|
{
|
|
135
|
-
"name": "react-native-0.66.3-
|
|
136
|
-
"url": "react-native-0.66.3-
|
|
137
|
-
"size":
|
|
138
|
-
"sha512": "
|
|
139
|
-
"sha256": "
|
|
140
|
-
"sha1": "
|
|
141
|
-
"md5": "
|
|
135
|
+
"name": "react-native-0.66.3-1.aar",
|
|
136
|
+
"url": "react-native-0.66.3-1.aar",
|
|
137
|
+
"size": 17696445,
|
|
138
|
+
"sha512": "89acf10cea8de9aeaef9ba71a5c94cebab83459eabe03dc7e44a4ede027199289898690f2052675586bb44c04e6f86c316ca0df594f1b3a47d6e872af9dd0723",
|
|
139
|
+
"sha256": "a3dbee139f1c56948fa1a4f3860d03437eff302766b86cb2ea4b223990c91d00",
|
|
140
|
+
"sha1": "efb83c1ec79d703c3df555b76b83172ee2331562",
|
|
141
|
+
"md5": "46cf104eee6c41eca9cb466e8455307a"
|
|
142
142
|
}
|
|
143
143
|
]
|
|
144
144
|
},
|
|
@@ -259,13 +259,13 @@
|
|
|
259
259
|
],
|
|
260
260
|
"files": [
|
|
261
261
|
{
|
|
262
|
-
"name": "react-native-0.66.3-
|
|
263
|
-
"url": "react-native-0.66.3-
|
|
264
|
-
"size":
|
|
265
|
-
"sha512": "
|
|
266
|
-
"sha256": "
|
|
267
|
-
"sha1": "
|
|
268
|
-
"md5": "
|
|
262
|
+
"name": "react-native-0.66.3-1.aar",
|
|
263
|
+
"url": "react-native-0.66.3-1.aar",
|
|
264
|
+
"size": 17696445,
|
|
265
|
+
"sha512": "89acf10cea8de9aeaef9ba71a5c94cebab83459eabe03dc7e44a4ede027199289898690f2052675586bb44c04e6f86c316ca0df594f1b3a47d6e872af9dd0723",
|
|
266
|
+
"sha256": "a3dbee139f1c56948fa1a4f3860d03437eff302766b86cb2ea4b223990c91d00",
|
|
267
|
+
"sha1": "efb83c1ec79d703c3df555b76b83172ee2331562",
|
|
268
|
+
"md5": "46cf104eee6c41eca9cb466e8455307a"
|
|
269
269
|
}
|
|
270
270
|
]
|
|
271
271
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
0b1f9e7c12865292d70772a18b29fbd9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
070f3ed9a405342361b206967dbe931f1baea1ee
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
c09f3bbcc7d0ece03f71f077f12e080e9a145bf21e5b19356aae61beadf928a3
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2ce6ac522ab00a1237405a63a0a98a3a38682e2cf334e37d344c8b3eeebc7ec7e0eaa11a165d686d80d40c8d5d5f6526846da030a433df07229897b5b12c2eaf
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
<modelVersion>4.0.0</modelVersion>
|
|
10
10
|
<groupId>com.facebook.react</groupId>
|
|
11
11
|
<artifactId>react-native</artifactId>
|
|
12
|
-
<version>0.66.3-
|
|
12
|
+
<version>0.66.3-1</version>
|
|
13
13
|
<packaging>aar</packaging>
|
|
14
14
|
<name>ReactNative</name>
|
|
15
15
|
<description>A framework for building native apps with React</description>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
d1db56cd56564d2c6e8904544c296b5b
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
73068e7288bc699e905c212ba55bfd3da00bed94
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
7e6e3c83108d5dea31500940b461443ff98bda5fa2df16c4736cc19268e99ff0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
2be19348c787728b536eb6dd90ba390b0370df423e5140d86198c6ad6152a6dbf35307d1bd5cf1e1ba3a089f9301f04503ad3004beac32ddf555817d3534687d
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
<groupId>com.facebook.react</groupId>
|
|
4
4
|
<artifactId>react-native</artifactId>
|
|
5
5
|
<versioning>
|
|
6
|
-
<latest>0.66.3-
|
|
7
|
-
<release>0.66.3-
|
|
6
|
+
<latest>0.66.3-1</latest>
|
|
7
|
+
<release>0.66.3-1</release>
|
|
8
8
|
<versions>
|
|
9
|
-
<version>0.66.3-
|
|
9
|
+
<version>0.66.3-1</version>
|
|
10
10
|
</versions>
|
|
11
|
-
<lastUpdated>
|
|
11
|
+
<lastUpdated>20220127193953</lastUpdated>
|
|
12
12
|
</versioning>
|
|
13
13
|
</metadata>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
6bb08bc0081892c6ebd2e43ffa0ed7c9
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
37e8136e80c5c693ab8817b785db4aaf255b2d3d
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
a21d20fc3c83b47564b900f537265bbaedaaeb30518a41487e4aa3ef1132db96
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
ecd6426fc2ace2f752448d98b31656524dd9c86601b7c3f2047758a5d3b9799af05c58b884e75aa502ba2da099dabdcd324f2cd0bc3b0f47a518b48e80ae74d5
|
package/package.json
CHANGED
|
@@ -7,6 +7,7 @@ import com.facebook.react.ReactApplication;
|
|
|
7
7
|
import com.facebook.react.ReactInstanceManager;
|
|
8
8
|
import com.facebook.react.ReactNativeHost;
|
|
9
9
|
import com.facebook.react.ReactPackage;
|
|
10
|
+
import com.facebook.react.config.ReactFeatureFlags;
|
|
10
11
|
import com.facebook.soloader.SoLoader;
|
|
11
12
|
import java.lang.reflect.InvocationTargetException;
|
|
12
13
|
import java.util.List;
|
|
@@ -44,6 +45,10 @@ public class MainApplication extends Application implements ReactApplication {
|
|
|
44
45
|
public void onCreate() {
|
|
45
46
|
super.onCreate();
|
|
46
47
|
SoLoader.init(this, /* native exopackage */ false);
|
|
48
|
+
// Normally we only send key up events in ReactAndroidHWInputDeviceHelper
|
|
49
|
+
// Change enableKeyDownEvents to true to send both key down and key up events
|
|
50
|
+
ReactFeatureFlags.enableKeyDownEvents = false;
|
|
51
|
+
|
|
47
52
|
initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
|
|
48
53
|
}
|
|
49
54
|
|
package/template/package.json
CHANGED
|
@@ -20,6 +20,7 @@ Pod::Spec.new do |spec|
|
|
|
20
20
|
spec.dependency 'boost'
|
|
21
21
|
spec.dependency 'DoubleConversion'
|
|
22
22
|
spec.dependency 'glog'
|
|
23
|
+
spec.dependency 'fmt'
|
|
23
24
|
spec.compiler_flags = '-DFOLLY_NO_CONFIG -DFOLLY_MOBILE=1 -DFOLLY_USE_LIBCPP=1 -DFOLLY_HAVE_PTHREAD=1 -Wno-comma -Wno-shorten-64-to-32 -Wno-documentation -faligned-new'
|
|
24
25
|
spec.source_files = 'folly/String.cpp',
|
|
25
26
|
'folly/Conv.cpp',
|
|
@@ -74,7 +75,7 @@ Pod::Spec.new do |spec|
|
|
|
74
75
|
spec.libraries = "stdc++", "c++abi" # NOTE Apple-only: Keep c++abi here due to https://github.com/react-native-community/releases/issues/251
|
|
75
76
|
spec.pod_target_xcconfig = { "USE_HEADERMAP" => "NO",
|
|
76
77
|
"CLANG_CXX_LANGUAGE_STANDARD" => "c++17",
|
|
77
|
-
"HEADER_SEARCH_PATHS" => "\"$(PODS_TARGET_SRCROOT)\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/libevent/include/\"" }
|
|
78
|
+
"HEADER_SEARCH_PATHS" => "\"$(PODS_TARGET_SRCROOT)\" \"$(PODS_ROOT)/boost\" \"$(PODS_ROOT)/DoubleConversion\" \"$(PODS_ROOT)/libevent/include/\" \"$(PODS_ROOT)/fmt/include\"" }
|
|
78
79
|
|
|
79
80
|
# TODO: The boost spec should really be selecting these files so that dependents of Folly can also access the required headers.
|
|
80
81
|
spec.user_target_xcconfig = { "HEADER_SEARCH_PATHS" => "\"$(PODS_ROOT)/boost\"" }
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
1b47b6b0a0d5167234f3af9707eb3748
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
17615f561c980aa5cef4dda3e9283c0aa547f50f
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
635394db2f89ce75aef9a15d13b66b4a73704fef1703516b38675a128f2763dd
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
db39a4b5018cc373751e7bd3c580f7286e5895b218f7a3f96f98cd4b6cff30f27291277eb98d4e056255b8615fca3bd7bbddeb10dec6bd979c331f8c7d48de89
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
6093fe782839bdb074ebfe6cacb23ee1
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
cc596b67ea6dc97f0c7b999ed5e2482bc3baa74d
|
package/android/com/facebook/react/react-native/0.66.3-0/react-native-0.66.3-0.module.sha256
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
6401af7bcf022bb298ba8f505026e8e9eb58490a4186f7b27dc7081ef3fe439b
|
package/android/com/facebook/react/react-native/0.66.3-0/react-native-0.66.3-0.module.sha512
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
97596adccaecefcb1d664c0290a1faf7e4ac90662ebc70434ba9980567fc2eaab2f459849f5d074b8484759a2aad413cbd3548b605e42540998d0d508fe001f6
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
fb2141b014d0691ed775de9998d75811
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
cebed70f1c852634479bb6a2ab1b5d8bfc4c5f68
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
0b6a1fde99ab0604611e214fc464cc266e856705ffc0be120e3c01a39b64845e
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
621103d6b1f6218b29f53f4d9fb6e2ac91689c278428dcfe4c74985f04a428ed40e5618b084565e79cc1ecb4468e3407c2e86d94e3c93a0ad17289446afca7c0
|