react-native-tvos 0.68.0-0 → 0.68.1-0

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.
Files changed (64) hide show
  1. package/Libraries/Components/AppleTV/{TVMenuControl.js → TVEventControl.js} +8 -0
  2. package/Libraries/Components/AppleTV/tagForComponentOrHandle.js +34 -0
  3. package/Libraries/Components/Touchable/TouchableOpacity.js +10 -7
  4. package/Libraries/Core/ReactNativeVersion.js +1 -1
  5. package/README.md +3 -1
  6. package/React/Base/RCTRootView.m +2 -3
  7. package/React/Base/RCTRootViewInternal.h +1 -1
  8. package/React/Base/RCTTVRemoteHandler.h +26 -15
  9. package/React/Base/RCTTVRemoteHandler.m +128 -20
  10. package/React/Base/RCTVersion.m +1 -1
  11. package/React/Fabric/Mounting/ComponentViews/Root/RCTRootComponentView.mm +1 -1
  12. package/React/Modules/RCTTVMenuBridge.m +12 -0
  13. package/ReactAndroid/build.gradle +21 -4
  14. package/ReactAndroid/gradle.properties +1 -1
  15. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +1 -1
  16. package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
  17. package/ReactCommon/hermes/inspector/tools/msggen/yarn.lock +6 -6
  18. package/android/com/facebook/react/react-native/{0.68.0-0/react-native-0.68.0-0-sources.jar → 0.68.1-0/react-native-0.68.1-0-sources.jar} +0 -0
  19. package/android/com/facebook/react/react-native/0.68.1-0/react-native-0.68.1-0-sources.jar.md5 +1 -0
  20. package/android/com/facebook/react/react-native/0.68.1-0/react-native-0.68.1-0-sources.jar.sha1 +1 -0
  21. package/android/com/facebook/react/react-native/0.68.1-0/react-native-0.68.1-0-sources.jar.sha256 +1 -0
  22. package/android/com/facebook/react/react-native/0.68.1-0/react-native-0.68.1-0-sources.jar.sha512 +1 -0
  23. package/android/com/facebook/react/react-native/{0.68.0-0/react-native-0.68.0-0.aar → 0.68.1-0/react-native-0.68.1-0.aar} +0 -0
  24. package/android/com/facebook/react/react-native/0.68.1-0/react-native-0.68.1-0.aar.md5 +1 -0
  25. package/android/com/facebook/react/react-native/0.68.1-0/react-native-0.68.1-0.aar.sha1 +1 -0
  26. package/android/com/facebook/react/react-native/0.68.1-0/react-native-0.68.1-0.aar.sha256 +1 -0
  27. package/android/com/facebook/react/react-native/0.68.1-0/react-native-0.68.1-0.aar.sha512 +1 -0
  28. package/android/com/facebook/react/react-native/{0.68.0-0/react-native-0.68.0-0.module → 0.68.1-0/react-native-0.68.1-0.module} +15 -15
  29. package/android/com/facebook/react/react-native/0.68.1-0/react-native-0.68.1-0.module.md5 +1 -0
  30. package/android/com/facebook/react/react-native/0.68.1-0/react-native-0.68.1-0.module.sha1 +1 -0
  31. package/android/com/facebook/react/react-native/0.68.1-0/react-native-0.68.1-0.module.sha256 +1 -0
  32. package/android/com/facebook/react/react-native/0.68.1-0/react-native-0.68.1-0.module.sha512 +1 -0
  33. package/android/com/facebook/react/react-native/{0.68.0-0/react-native-0.68.0-0.pom → 0.68.1-0/react-native-0.68.1-0.pom} +1 -1
  34. package/android/com/facebook/react/react-native/0.68.1-0/react-native-0.68.1-0.pom.md5 +1 -0
  35. package/android/com/facebook/react/react-native/0.68.1-0/react-native-0.68.1-0.pom.sha1 +1 -0
  36. package/android/com/facebook/react/react-native/0.68.1-0/react-native-0.68.1-0.pom.sha256 +1 -0
  37. package/android/com/facebook/react/react-native/0.68.1-0/react-native-0.68.1-0.pom.sha512 +1 -0
  38. package/android/com/facebook/react/react-native/maven-metadata.xml +4 -4
  39. package/android/com/facebook/react/react-native/maven-metadata.xml.md5 +1 -1
  40. package/android/com/facebook/react/react-native/maven-metadata.xml.sha1 +1 -1
  41. package/android/com/facebook/react/react-native/maven-metadata.xml.sha256 +1 -1
  42. package/android/com/facebook/react/react-native/maven-metadata.xml.sha512 +1 -1
  43. package/index.js +9 -2
  44. package/package.json +4 -4
  45. package/template/Gemfile.lock +2 -2
  46. package/template/android/app/build.gradle +12 -0
  47. package/template/android/build.gradle +14 -1
  48. package/template/package.json +1 -1
  49. package/android/com/facebook/react/react-native/0.68.0-0/react-native-0.68.0-0-sources.jar.md5 +0 -1
  50. package/android/com/facebook/react/react-native/0.68.0-0/react-native-0.68.0-0-sources.jar.sha1 +0 -1
  51. package/android/com/facebook/react/react-native/0.68.0-0/react-native-0.68.0-0-sources.jar.sha256 +0 -1
  52. package/android/com/facebook/react/react-native/0.68.0-0/react-native-0.68.0-0-sources.jar.sha512 +0 -1
  53. package/android/com/facebook/react/react-native/0.68.0-0/react-native-0.68.0-0.aar.md5 +0 -1
  54. package/android/com/facebook/react/react-native/0.68.0-0/react-native-0.68.0-0.aar.sha1 +0 -1
  55. package/android/com/facebook/react/react-native/0.68.0-0/react-native-0.68.0-0.aar.sha256 +0 -1
  56. package/android/com/facebook/react/react-native/0.68.0-0/react-native-0.68.0-0.aar.sha512 +0 -1
  57. package/android/com/facebook/react/react-native/0.68.0-0/react-native-0.68.0-0.module.md5 +0 -1
  58. package/android/com/facebook/react/react-native/0.68.0-0/react-native-0.68.0-0.module.sha1 +0 -1
  59. package/android/com/facebook/react/react-native/0.68.0-0/react-native-0.68.0-0.module.sha256 +0 -1
  60. package/android/com/facebook/react/react-native/0.68.0-0/react-native-0.68.0-0.module.sha512 +0 -1
  61. package/android/com/facebook/react/react-native/0.68.0-0/react-native-0.68.0-0.pom.md5 +0 -1
  62. package/android/com/facebook/react/react-native/0.68.0-0/react-native-0.68.0-0.pom.sha1 +0 -1
  63. package/android/com/facebook/react/react-native/0.68.0-0/react-native-0.68.0-0.pom.sha256 +0 -1
  64. package/android/com/facebook/react/react-native/0.68.0-0/react-native-0.68.0-0.pom.sha512 +0 -1
@@ -1,4 +1,6 @@
1
1
  /**
2
+ * Methods to enable and disable listening for Apple TV remote events (menu key, pan gesture)
3
+ *
2
4
  * @format
3
5
  * @flow
4
6
  */
@@ -14,4 +16,10 @@ module.exports = {
14
16
  disableTVMenuKey: () => {
15
17
  TVMenuBridge && TVMenuBridge.disableTVMenuKey();
16
18
  },
19
+ enableTVPanGesture: () => {
20
+ TVMenuBridge && TVMenuBridge.enableTVPanGesture();
21
+ },
22
+ disableTVPanGesture: () => {
23
+ TVMenuBridge && TVMenuBridge.disableTVPanGesture();
24
+ },
17
25
  };
@@ -0,0 +1,34 @@
1
+ // Replacement for findNodeHandle, since we need this for converting
2
+ // components to tags when rendering nextFocus props
3
+ // @flow
4
+
5
+ // TODO: make this work for Fabric
6
+
7
+ // import {findNodeHandle} from '../../Renderer/shims/ReactNative';
8
+
9
+ type TagForComponentOrHandleType = (
10
+ component: ?(
11
+ | {_nativeTag: ?number, canonical: ?{_nativeTag: ?number}}
12
+ | number
13
+ ),
14
+ ) => ?number;
15
+
16
+ const tagForComponentOrHandle: TagForComponentOrHandleType = (
17
+ component: ?(
18
+ | {_nativeTag: ?number, canonical: ?{_nativeTag: ?number}}
19
+ | number
20
+ ),
21
+ ): ?number => {
22
+ if (typeof component === 'number') {
23
+ return component;
24
+ }
25
+ if (typeof component?._nativeTag === 'number') {
26
+ return component?._nativeTag;
27
+ }
28
+ if (typeof component?.canonical?._nativeTag === 'number') {
29
+ return component?.canonical?._nativeTag;
30
+ }
31
+ return undefined;
32
+ };
33
+
34
+ export default tagForComponentOrHandle;
@@ -20,6 +20,7 @@ import type {ViewStyleProp} from '../../StyleSheet/StyleSheet';
20
20
  import flattenStyle from '../../StyleSheet/flattenStyle';
21
21
  import Platform from '../../Utilities/Platform';
22
22
  import typeof TVParallaxPropertiesType from '../AppleTV/TVViewPropTypes';
23
+ import tagForComponentOrHandle from '../AppleTV/tagForComponentOrHandle';
23
24
 
24
25
  import * as React from 'react';
25
26
 
@@ -245,13 +246,15 @@ class TouchableOpacity extends React.Component<Props, State> {
245
246
  nativeID={this.props.nativeID}
246
247
  testID={this.props.testID}
247
248
  onLayout={this.props.onLayout}
248
- nextFocusDown={this.props.nextFocusDown}
249
- nextFocusForward={this.props.nextFocusForward}
250
- nextFocusLeft={this.props.nextFocusLeft}
251
- nextFocusRight={this.props.nextFocusRight}
252
- nextFocusUp={this.props.nextFocusUp}
249
+ nextFocusDown={tagForComponentOrHandle(this.props.nextFocusDown)}
250
+ nextFocusForward={tagForComponentOrHandle(this.props.nextFocusForward)}
251
+ nextFocusLeft={tagForComponentOrHandle(this.props.nextFocusLeft)}
252
+ nextFocusRight={tagForComponentOrHandle(this.props.nextFocusRight)}
253
+ nextFocusUp={tagForComponentOrHandle(this.props.nextFocusUp)}
253
254
  hasTVPreferredFocus={this.props.hasTVPreferredFocus === true}
254
- isTVSelectable={this.props.isTVSelectable !== false && this.props.accessible !== false}
255
+ isTVSelectable={
256
+ this.props.isTVSelectable !== false && this.props.accessible !== false
257
+ }
255
258
  tvParallaxProperties={this.props.tvParallaxProperties}
256
259
  hitSlop={this.props.hitSlop}
257
260
  focusable={
@@ -284,7 +287,7 @@ class TouchableOpacity extends React.Component<Props, State> {
284
287
  }
285
288
  },
286
289
  onPress: event => {
287
- if (this.props.onPress != null && Platform.OS !== "android") {
290
+ if (this.props.onPress != null && Platform.OS !== 'android') {
288
291
  this.props.onPress(event);
289
292
  }
290
293
  },
@@ -12,6 +12,6 @@
12
12
  exports.version = {
13
13
  major: 0,
14
14
  minor: 68,
15
- patch: 0,
15
+ patch: 1,
16
16
  prerelease: null,
17
17
  };
package/README.md CHANGED
@@ -196,7 +196,9 @@ class Game2048 extends React.Component {
196
196
 
197
197
  - _Back navigation with the TV remote menu button_: The `BackHandler` component, originally written to support the Android back button, now also supports back navigation on the Apple TV using the menu button on the TV remote.
198
198
 
199
- - _TVMenuControl_: This module provides methods to enable and disable navigation using the menu key on the TV remote. This is required in order to fix an issue with Apple's guidelines for menu key navigation (see https://github.com/facebook/react-native/issues/18930). The `RNTester` app uses this new module to implement correct menu key behavior.
199
+ - _TVEventControl_: (Formerly "TVMenuControl") (Apple TV only) This module provides methods to enable and disable firing of two types of events from the Apple TV Siri remote:
200
+ - `enableTVMenuKey`/`disableTVMenuKey`: Method to enable and disable the menu key gesture recognizer, in order to fix an issue with Apple's guidelines for menu key navigation (see https://github.com/facebook/react-native/issues/18930). The `RNTester` app uses these methods to implement correct menu key behavior for back navigation.
201
+ - `enableTVPanGesture`/`disableTVPanGesture`: Methods to enable and disable detection of finger touches that pan across the touch surface of the Siri remote. See `TVEventHandlerExample` in the `RNTester` app for a demo.
200
202
 
201
203
  - _TVFocusGuideView_: This component provides support for Apple's `UIFocusGuide` API, to help ensure that focusable controls can be navigated to, even if they are not directly in line with other controls. An example is provided in `RNTester` that shows two different ways of using this component.
202
204
 
@@ -40,8 +40,7 @@
40
40
 
41
41
  NSString *const RCTContentDidAppearNotification = @"RCTContentDidAppearNotification";
42
42
 
43
- NSString *const RCTTVEnableMenuKeyNotification = @"RCTTVEnableMenuKeyNotification";
44
- NSString *const RCTTVDisableMenuKeyNotification = @"RCTTVDisableMenuKeyNotification";
43
+
45
44
 
46
45
 
47
46
  @interface RCTUIManager (RCTRootView)
@@ -168,7 +167,7 @@ RCT_NOT_IMPLEMENTED(-(instancetype)initWithCoder : (NSCoder *)aDecoder)
168
167
  #if TARGET_OS_TV
169
168
  - (NSArray<id<UIFocusEnvironment>> *)preferredFocusEnvironments
170
169
  {
171
- if (self.reactPreferredFocusedView) {
170
+ if (self.reactPreferredFocusedView && self.reactPreferredFocusedView.window != nil) {
172
171
  return @[self.reactPreferredFocusedView];
173
172
  }
174
173
  return [super preferredFocusEnvironments];
@@ -26,7 +26,7 @@
26
26
  */
27
27
  #if TARGET_OS_TV
28
28
  @property (nonatomic, strong) RCTTVRemoteHandler *tvRemoteHandler;
29
- @property (nonatomic, strong) UIView *reactPreferredFocusedView;
29
+ @property (nonatomic, weak) UIView *reactPreferredFocusedView;
30
30
  #endif
31
31
 
32
32
  - (void)contentViewInvalidated;
@@ -7,25 +7,33 @@
7
7
 
8
8
  #import <UIKit/UIKit.h>
9
9
 
10
- extern NSString *const RCTTVRemoteEventMenu;
11
- extern NSString *const RCTTVRemoteEventPlayPause;
12
- extern NSString *const RCTTVRemoteEventSelect;
10
+ extern NSString * _Nonnull const RCTTVEnableMenuKeyNotification;
11
+ extern NSString * _Nonnull const RCTTVDisableMenuKeyNotification;
13
12
 
14
- extern NSString *const RCTTVRemoteEventLongPlayPause;
15
- extern NSString *const RCTTVRemoteEventLongSelect;
13
+ extern NSString * _Nonnull const RCTTVEnablePanGestureNotification;
14
+ extern NSString * _Nonnull const RCTTVDisablePanGestureNotification;
16
15
 
17
- extern NSString *const RCTTVRemoteEventLeft;
18
- extern NSString *const RCTTVRemoteEventRight;
19
- extern NSString *const RCTTVRemoteEventUp;
20
- extern NSString *const RCTTVRemoteEventDown;
16
+ extern NSString * _Nonnull const RCTTVRemoteEventMenu;
17
+ extern NSString * _Nonnull const RCTTVRemoteEventPlayPause;
18
+ extern NSString * _Nonnull const RCTTVRemoteEventSelect;
21
19
 
22
- extern NSString *const RCTTVRemoteEventPageUp;
23
- extern NSString *const RCTTVRemoteEventPageDown;
20
+ extern NSString * _Nonnull const RCTTVRemoteEventLongPlayPause;
21
+ extern NSString * _Nonnull const RCTTVRemoteEventLongSelect;
24
22
 
25
- extern NSString *const RCTTVRemoteEventSwipeLeft;
26
- extern NSString *const RCTTVRemoteEventSwipeRight;
27
- extern NSString *const RCTTVRemoteEventSwipeUp;
28
- extern NSString *const RCTTVRemoteEventSwipeDown;
23
+ extern NSString * _Nonnull const RCTTVRemoteEventLeft;
24
+ extern NSString * _Nonnull const RCTTVRemoteEventRight;
25
+ extern NSString * _Nonnull const RCTTVRemoteEventUp;
26
+ extern NSString * _Nonnull const RCTTVRemoteEventDown;
27
+
28
+ extern NSString * _Nonnull const RCTTVRemoteEventPageUp;
29
+ extern NSString * _Nonnull const RCTTVRemoteEventPageDown;
30
+
31
+ extern NSString * _Nonnull const RCTTVRemoteEventSwipeLeft;
32
+ extern NSString * _Nonnull const RCTTVRemoteEventSwipeRight;
33
+ extern NSString * _Nonnull const RCTTVRemoteEventSwipeUp;
34
+ extern NSString * _Nonnull const RCTTVRemoteEventSwipeDown;
35
+
36
+ extern NSString * _Nonnull const RCTTVRemoteEventPan;
29
37
 
30
38
  @interface RCTTVRemoteHandler : NSObject
31
39
 
@@ -35,4 +43,7 @@ extern NSString *const RCTTVRemoteEventSwipeDown;
35
43
  + (BOOL)useMenuKey;
36
44
  + (void)setUseMenuKey:(BOOL)useMenuKey;
37
45
 
46
+ + (BOOL)usePanGesture;
47
+ + (void)setUsePanGesture:(BOOL)usePanGesture;
48
+
38
49
  @end
@@ -20,6 +20,12 @@
20
20
  #import "RCTView.h"
21
21
  #import "UIView+React.h"
22
22
 
23
+ NSString *const RCTTVEnableMenuKeyNotification = @"RCTTVEnableMenuKeyNotification";
24
+ NSString *const RCTTVDisableMenuKeyNotification = @"RCTTVDisableMenuKeyNotification";
25
+
26
+ NSString *const RCTTVEnablePanGestureNotification = @"RCTTVEnablePanGestureNotification";
27
+ NSString *const RCTTVDisablePanGestureNotification = @"RCTTVDisablePanGestureNotification";
28
+
23
29
  NSString *const RCTTVRemoteEventMenu = @"menu";
24
30
  NSString *const RCTTVRemoteEventPlayPause = @"playPause";
25
31
  NSString *const RCTTVRemoteEventSelect = @"select";
@@ -40,10 +46,13 @@ NSString *const RCTTVRemoteEventSwipeRight = @"swipeRight";
40
46
  NSString *const RCTTVRemoteEventSwipeUp = @"swipeUp";
41
47
  NSString *const RCTTVRemoteEventSwipeDown = @"swipeDown";
42
48
 
49
+ NSString *const RCTTVRemoteEventPan = @"pan";
50
+
43
51
  @interface RCTTVRemoteHandler()
44
52
 
45
53
  @property (nonatomic, copy, readonly) NSDictionary *tvRemoteGestureRecognizers;
46
54
  @property (nonatomic, strong) UITapGestureRecognizer *tvMenuKeyRecognizer;
55
+ @property (nonatomic, strong) UIPanGestureRecognizer *tvPanGestureRecognizer;
47
56
  @property (nonatomic, weak) UIView *view;
48
57
 
49
58
  @end
@@ -53,9 +62,10 @@ NSString *const RCTTVRemoteEventSwipeDown = @"swipeDown";
53
62
  }
54
63
 
55
64
  #pragma mark -
56
- #pragma mark Static setting for using menu key
65
+ #pragma mark Static settings for menu key and pan gesture
57
66
 
58
67
  static __volatile BOOL __useMenuKey = NO;
68
+ static __volatile BOOL __usePanGesture = NO;
59
69
 
60
70
  + (BOOL)useMenuKey
61
71
  {
@@ -67,6 +77,16 @@ static __volatile BOOL __useMenuKey = NO;
67
77
  __useMenuKey = useMenuKey;
68
78
  }
69
79
 
80
+ + (BOOL)usePanGesture
81
+ {
82
+ return __usePanGesture;
83
+ }
84
+
85
+ + (void)setUsePanGesture:(BOOL)usePanGesture
86
+ {
87
+ __usePanGesture = usePanGesture;
88
+ }
89
+
70
90
  #pragma mark -
71
91
  #pragma mark Public methods
72
92
 
@@ -92,10 +112,14 @@ static __volatile BOOL __useMenuKey = NO;
92
112
  {
93
113
  _tvRemoteGestureRecognizers = [NSMutableDictionary dictionary];
94
114
  // Recognizers for Apple TV remote buttons
115
+
95
116
  // Menu recognizer
96
117
  self.tvMenuKeyRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(menuPressed:)];
97
118
  self.tvMenuKeyRecognizer.allowedPressTypes = @[@(UIPressTypeMenu)];
98
119
 
120
+ // Pan gesture recognizer
121
+ self.tvPanGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panned:)];
122
+
99
123
  // Play/Pause
100
124
  [self addTapGestureRecognizerWithSelector:@selector(playPausePressed:)
101
125
  pressType:UIPressTypePlayPause
@@ -169,7 +193,6 @@ static __volatile BOOL __useMenuKey = NO;
169
193
  [self addSwipeGestureRecognizerWithSelector:@selector(swipedRight:)
170
194
  direction:UISwipeGestureRecognizerDirectionRight
171
195
  name:RCTTVRemoteEventSwipeRight];
172
-
173
196
  }
174
197
 
175
198
  - (void)attachToView
@@ -183,6 +206,17 @@ static __volatile BOOL __useMenuKey = NO;
183
206
  selector:@selector(disableTVMenuKey)
184
207
  name:RCTTVDisableMenuKeyNotification
185
208
  object:nil];
209
+
210
+ [[NSNotificationCenter defaultCenter] addObserver:self
211
+ selector:@selector(enableTVPanGesture)
212
+ name:RCTTVEnablePanGestureNotification
213
+ object:nil];
214
+
215
+ [[NSNotificationCenter defaultCenter] addObserver:self
216
+ selector:@selector(disableTVPanGesture)
217
+ name:RCTTVDisablePanGestureNotification
218
+ object:nil];
219
+
186
220
  for (NSString *key in [self.tvRemoteGestureRecognizers allKeys]) {
187
221
  [_view addGestureRecognizer:self.tvRemoteGestureRecognizers[key]];
188
222
  }
@@ -191,6 +225,11 @@ static __volatile BOOL __useMenuKey = NO;
191
225
  } else {
192
226
  [self disableTVMenuKey];
193
227
  }
228
+ if ([RCTTVRemoteHandler usePanGesture]) {
229
+ [self enableTVPanGesture];
230
+ } else {
231
+ [self disableTVPanGesture];
232
+ }
194
233
  }
195
234
 
196
235
  - (void)detachFromView
@@ -198,6 +237,9 @@ static __volatile BOOL __useMenuKey = NO;
198
237
  if ([[self.view gestureRecognizers] containsObject:self.tvMenuKeyRecognizer]) {
199
238
  [self.view removeGestureRecognizer:self.tvMenuKeyRecognizer];
200
239
  }
240
+ if ([[self.view gestureRecognizers] containsObject:self.tvPanGestureRecognizer]) {
241
+ [self.view removeGestureRecognizer:self.tvPanGestureRecognizer];
242
+ }
201
243
  for (NSString *key in [self.tvRemoteGestureRecognizers allKeys]) {
202
244
  [_view removeGestureRecognizer:self.tvRemoteGestureRecognizers[key]];
203
245
  }
@@ -207,7 +249,13 @@ static __volatile BOOL __useMenuKey = NO;
207
249
  [[NSNotificationCenter defaultCenter] removeObserver:self
208
250
  name:RCTTVDisableMenuKeyNotification
209
251
  object:nil];
210
-
252
+ [[NSNotificationCenter defaultCenter] removeObserver:self
253
+ name:RCTTVEnablePanGestureNotification
254
+ object:nil];
255
+ [[NSNotificationCenter defaultCenter] removeObserver:self
256
+ name:RCTTVDisablePanGestureNotification
257
+ object:nil];
258
+
211
259
  }
212
260
 
213
261
  # pragma mark -
@@ -231,27 +279,45 @@ static __volatile BOOL __useMenuKey = NO;
231
279
  });
232
280
  }
233
281
 
282
+ - (void)enableTVPanGesture
283
+ {
284
+ dispatch_async(dispatch_get_main_queue(), ^{
285
+ if (![[self.view gestureRecognizers] containsObject:self.tvPanGestureRecognizer]) {
286
+ [self.view addGestureRecognizer:self.tvPanGestureRecognizer];
287
+ }
288
+ });
289
+ }
290
+
291
+ - (void)disableTVPanGesture
292
+ {
293
+ dispatch_async(dispatch_get_main_queue(), ^{
294
+ if ([[self.view gestureRecognizers] containsObject:self.tvPanGestureRecognizer]) {
295
+ [self.view removeGestureRecognizer:self.tvPanGestureRecognizer];
296
+ }
297
+ });
298
+ }
299
+
234
300
  # pragma mark -
235
301
  # pragma mark Gesture handlers
236
302
 
237
303
  - (void)playPausePressed:(UIGestureRecognizer *)r
238
304
  {
239
- [self sendAppleTVEvent:RCTTVRemoteEventPlayPause toView:r.view];
305
+ [self sendAppleTVEvent:RCTTVRemoteEventPlayPause];
240
306
  }
241
307
 
242
308
  - (void)menuPressed:(UIGestureRecognizer *)r
243
309
  {
244
- [self sendAppleTVEvent:RCTTVRemoteEventMenu toView:r.view];
310
+ [self sendAppleTVEvent:RCTTVRemoteEventMenu];
245
311
  }
246
312
 
247
313
  - (void)selectPressed:(UIGestureRecognizer *)r
248
314
  {
249
- [self sendAppleTVEvent:RCTTVRemoteEventSelect toView:r.view];
315
+ [self sendAppleTVEvent:RCTTVRemoteEventSelect];
250
316
  }
251
317
 
252
318
  - (void)longPlayPausePressed:(UIGestureRecognizer *)r
253
319
  {
254
- [self sendAppleTVEvent:RCTTVRemoteEventLongPlayPause toView:r.view];
320
+ [self sendAppleTVEvent:RCTTVRemoteEventLongPlayPause];
255
321
 
256
322
  #if RCT_DEV
257
323
  // If shake to show is enabled on device, use long play/pause event to show dev menu
@@ -261,57 +327,73 @@ static __volatile BOOL __useMenuKey = NO;
261
327
 
262
328
  - (void)longSelectPressed:(UIGestureRecognizer *)r
263
329
  {
264
- [self sendAppleTVEvent:RCTTVRemoteEventLongSelect toView:r.view];
330
+ [self sendAppleTVEvent:RCTTVRemoteEventLongSelect];
265
331
  }
266
332
 
267
333
  - (void)swipedUp:(UIGestureRecognizer *)r
268
334
  {
269
- [self sendAppleTVEvent:RCTTVRemoteEventSwipeUp toView:r.view];
335
+ [self sendAppleTVEvent:RCTTVRemoteEventSwipeUp];
270
336
  }
271
337
 
272
338
  - (void)swipedDown:(UIGestureRecognizer *)r
273
339
  {
274
- [self sendAppleTVEvent:RCTTVRemoteEventSwipeDown toView:r.view];
340
+ [self sendAppleTVEvent:RCTTVRemoteEventSwipeDown];
275
341
  }
276
342
 
277
343
  - (void)swipedLeft:(UIGestureRecognizer *)r
278
344
  {
279
- [self sendAppleTVEvent:RCTTVRemoteEventSwipeLeft toView:r.view];
345
+ [self sendAppleTVEvent:RCTTVRemoteEventSwipeLeft];
280
346
  }
281
347
 
282
348
  - (void)swipedRight:(UIGestureRecognizer *)r
283
349
  {
284
- [self sendAppleTVEvent:RCTTVRemoteEventSwipeRight toView:r.view];
350
+ [self sendAppleTVEvent:RCTTVRemoteEventSwipeRight];
285
351
  }
286
352
 
287
353
  - (void)tappedUp:(UIGestureRecognizer *)r
288
354
  {
289
- [self sendAppleTVEvent:RCTTVRemoteEventUp toView:r.view];
355
+ [self sendAppleTVEvent:RCTTVRemoteEventUp];
290
356
  }
291
357
 
292
358
  - (void)tappedDown:(UIGestureRecognizer *)r
293
359
  {
294
- [self sendAppleTVEvent:RCTTVRemoteEventDown toView:r.view];
360
+ [self sendAppleTVEvent:RCTTVRemoteEventDown];
295
361
  }
296
362
 
297
363
  - (void)tappedPageUp:(UIGestureRecognizer *)r
298
364
  {
299
- [self sendAppleTVEvent:RCTTVRemoteEventPageUp toView:r.view];
365
+ [self sendAppleTVEvent:RCTTVRemoteEventPageUp];
300
366
  }
301
367
 
302
368
  - (void)tappedPageDown:(UIGestureRecognizer *)r
303
369
  {
304
- [self sendAppleTVEvent:RCTTVRemoteEventPageDown toView:r.view];
370
+ [self sendAppleTVEvent:RCTTVRemoteEventPageDown];
305
371
  }
306
372
 
307
373
  - (void)tappedLeft:(UIGestureRecognizer *)r
308
374
  {
309
- [self sendAppleTVEvent:RCTTVRemoteEventLeft toView:r.view];
375
+ [self sendAppleTVEvent:RCTTVRemoteEventLeft];
310
376
  }
311
377
 
312
378
  - (void)tappedRight:(UIGestureRecognizer *)r
313
379
  {
314
- [self sendAppleTVEvent:RCTTVRemoteEventRight toView:r.view];
380
+ [self sendAppleTVEvent:RCTTVRemoteEventRight];
381
+ }
382
+
383
+ - (void)panned:(UIPanGestureRecognizer *)gesture {
384
+ UIView *rootView = [self view];
385
+ NSString *gestureState = [self recognizerStateToString:gesture.state];
386
+ CGPoint translation = [gesture translationInView:rootView];
387
+ CGPoint velocity = [gesture velocityInView:rootView];
388
+
389
+ if (gestureState) {
390
+ [self sendAppleTVEvent:RCTTVRemoteEventPan withBody:@{@"state": gestureState,
391
+ @"x": [NSNumber numberWithInt:translation.x],
392
+ @"y": [NSNumber numberWithInt:translation.y],
393
+ @"velocityX": [NSNumber numberWithFloat:velocity.x],
394
+ @"velocityY": [NSNumber numberWithFloat:velocity.y],
395
+ }];
396
+ }
315
397
  }
316
398
 
317
399
  #pragma mark -
@@ -345,10 +427,36 @@ static __volatile BOOL __useMenuKey = NO;
345
427
  _tvRemoteGestureRecognizers[name] = recognizer;
346
428
  }
347
429
 
348
- - (void)sendAppleTVEvent:(NSString *)eventType toView:(__unused UIView *)v
430
+ #pragma mark -
431
+ #pragma mark Helper methods
432
+
433
+ - (void)sendAppleTVEvent:(NSString *)eventType
349
434
  {
435
+ [self sendAppleTVEvent:eventType withBody: nil];
436
+ }
437
+
438
+ - (void)sendAppleTVEvent:(NSString *)eventType
439
+ withBody:(NSDictionary * __nullable)body
440
+ {
441
+ NSDictionary *payload = (body != nil) ?
442
+ @{@"eventType" : eventType, @"body": body} :
443
+ @{@"eventType" : eventType};
444
+
350
445
  [[NSNotificationCenter defaultCenter] postNotificationName:@"RCTTVNavigationEventNotification"
351
- object:@{@"eventType" : eventType}];
446
+ object:payload];
447
+ }
448
+
449
+ - (NSString *)recognizerStateToString:(UIGestureRecognizerState)state {
450
+ switch (state) {
451
+ case UIGestureRecognizerStateBegan:
452
+ return @"Began";
453
+ case UIGestureRecognizerStateChanged:
454
+ return @"Changed";
455
+ case UIGestureRecognizerStateEnded:
456
+ return @"Ended";
457
+ default:
458
+ return nil;
459
+ }
352
460
  }
353
461
 
354
462
  @end
@@ -23,7 +23,7 @@ NSDictionary* RCTGetReactNativeVersion(void)
23
23
  __rnVersion = @{
24
24
  RCTVersionMajor: @(0),
25
25
  RCTVersionMinor: @(68),
26
- RCTVersionPatch: @(0),
26
+ RCTVersionPatch: @(1),
27
27
  RCTVersionPrerelease: [NSNull null],
28
28
  };
29
29
  });
@@ -35,7 +35,7 @@ using namespace facebook::react;
35
35
  }
36
36
 
37
37
  - (NSArray<id<UIFocusEnvironment>> *)preferredFocusEnvironments {
38
- if (self.reactPreferredFocusedView) {
38
+ if (self.reactPreferredFocusedView && self.reactPreferredFocusedView.window != nil) {
39
39
  return @[self.reactPreferredFocusedView];
40
40
  }
41
41
  return [super preferredFocusEnvironments];
@@ -24,4 +24,16 @@ RCT_EXPORT_METHOD(disableTVMenuKey)
24
24
  [[NSNotificationCenter defaultCenter] postNotificationName:RCTTVDisableMenuKeyNotification object:nil];
25
25
  }
26
26
 
27
+ RCT_EXPORT_METHOD(enableTVPanGesture)
28
+ {
29
+ [RCTTVRemoteHandler setUsePanGesture:YES];
30
+ [[NSNotificationCenter defaultCenter] postNotificationName:RCTTVEnablePanGestureNotification object:nil];
31
+ }
32
+
33
+ RCT_EXPORT_METHOD(disableTVPanGesture)
34
+ {
35
+ [RCTTVRemoteHandler setUsePanGesture:NO];
36
+ [[NSNotificationCenter defaultCenter] postNotificationName:RCTTVDisablePanGestureNotification object:nil];
37
+ }
38
+
27
39
  @end
@@ -292,10 +292,13 @@ task androidSourcesJar(type: Jar) {
292
292
  android {
293
293
  compileSdkVersion 31
294
294
 
295
- // Used to override the NDK path & version on internal CI
296
- if (System.getenv("ANDROID_NDK") != null && System.getenv("LOCAL_ANDROID_NDK_VERSION") != null) {
297
- ndkPath System.getenv("ANDROID_NDK")
298
- ndkVersion System.getenv("LOCAL_ANDROID_NDK_VERSION")
295
+ // Used to override the NDK path/version on internal CI or by allowing
296
+ // users to customize the NDK path/version from their root project (e.g. for M1 support)
297
+ if (rootProject.hasProperty("ndkPath")) {
298
+ ndkPath rootProject.ext.ndkPath
299
+ }
300
+ if (rootProject.hasProperty("ndkVersion")) {
301
+ ndkVersion rootProject.ext.ndkVersion
299
302
  }
300
303
 
301
304
  defaultConfig {
@@ -329,6 +332,20 @@ android {
329
332
  // This flag will suppress "fcntl(): Bad file descriptor" warnings on local builds.
330
333
  arguments "--output-sync=none"
331
334
  }
335
+
336
+ // Note: On Windows there are limits on number of character in file paths and in command lines
337
+ // Ref: https://android.googlesource.com/platform/ndk/+/master/docs/BuildSystemMaintainers.md#Path-Length-Limits
338
+ // NDK allows circumventing command line limits using response(RSP) files as inputs using NDK_APP_SHORT_COMMANDS flag.
339
+ //
340
+ // Windows can support long file paths if configured through registry or by prefixing all file paths with a special character sequence
341
+ // The latter requires changes in NDK. And there are tools in NDK (AR) which is not able to handle long paths (>256) even after setting the registry key.
342
+ // The new architecutre source tree is too deep, and the object file naming conventions in NDK makes the matters worse, by producing incredibly long file paths.
343
+ // Other solutions such as symlinking source code etc. didn't work as expected, and makes the build scripts complicated and hard to manage.
344
+ // This change temporarily works around the issue by placing the temporary build outputs as short a path as possible within the project path.
345
+ if (Os.isFamily(Os.FAMILY_WINDOWS)) {
346
+ arguments "NDK_OUT=${rootProject.projectDir.getParent()}\\.cxx",
347
+ "NDK_APP_SHORT_COMMANDS=true"
348
+ }
332
349
  }
333
350
  }
334
351
  ndk {
@@ -1,4 +1,4 @@
1
- VERSION_NAME=0.68.0-0
1
+ VERSION_NAME=0.68.1-0
2
2
  GROUP=com.facebook.react
3
3
 
4
4
  POM_NAME=ReactNative
@@ -17,6 +17,6 @@ public class ReactNativeVersion {
17
17
  public static final Map<String, Object> VERSION = MapBuilder.<String, Object>of(
18
18
  "major", 0,
19
19
  "minor", 68,
20
- "patch", 0,
20
+ "patch", 1,
21
21
  "prerelease", null);
22
22
  }
@@ -17,7 +17,7 @@ namespace facebook::react {
17
17
  constexpr struct {
18
18
  int32_t Major = 0;
19
19
  int32_t Minor = 68;
20
- int32_t Patch = 0;
20
+ int32_t Patch = 1;
21
21
  std::string_view Prerelease = "";
22
22
  } ReactNativeVersion;
23
23
 
@@ -1502,9 +1502,9 @@ ansi-escapes@^4.2.1:
1502
1502
  type-fest "^0.21.3"
1503
1503
 
1504
1504
  ansi-regex@^4.1.0:
1505
- version "4.1.0"
1506
- resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997"
1507
- integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==
1505
+ version "4.1.1"
1506
+ resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed"
1507
+ integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==
1508
1508
 
1509
1509
  ansi-regex@^5.0.0:
1510
1510
  version "5.0.0"
@@ -4152,9 +4152,9 @@ minimatch@^3.0.4:
4152
4152
  brace-expansion "^1.1.7"
4153
4153
 
4154
4154
  minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5:
4155
- version "1.2.5"
4156
- resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
4157
- integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
4155
+ version "1.2.6"
4156
+ resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.6.tgz#8637a5b759ea0d6e98702cfb3a9283323c93af44"
4157
+ integrity sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==
4158
4158
 
4159
4159
  mississippi@^3.0.0:
4160
4160
  version "3.0.0"
@@ -0,0 +1 @@
1
+ 60ea53d0c0a552fef6466c9bf7ba7d35ec533027
@@ -0,0 +1 @@
1
+ 89dd1687a2e294efbdbb8ac0f2d5fb1eb918357241379e8ebfbef10886267667
@@ -0,0 +1 @@
1
+ 5544c3278443b89880d9a2870ae0f36b412d54ee287a9c603015f48ea7296b6dd761f6c05157d486adebc5d0683c0801aa0146fe49a81d8f5ada55010171ded5
@@ -0,0 +1 @@
1
+ 014f5939c08dca2b3daad451e988b516
@@ -0,0 +1 @@
1
+ 47e93c57dff21b477d3a5c989fac1907e401d2e0
@@ -0,0 +1 @@
1
+ eeaf129e2bcb06fd7da630d18b6a24c2adc1f51144594bba59c27567bd6b9f75
@@ -0,0 +1 @@
1
+ ad85e1cec19d8e898d2d138f6d5c6eca1fc409b26137866a4848aea5b1888f6e278ca772404477d21fb740dd7e78eb73f21ba78122d2625006b2e9b77fcb615f
@@ -3,7 +3,7 @@
3
3
  "component": {
4
4
  "group": "com.facebook.react",
5
5
  "module": "react-native",
6
- "version": "0.68.0-0",
6
+ "version": "0.68.1-0",
7
7
  "attributes": {
8
8
  "org.gradle.status": "release"
9
9
  }
@@ -131,13 +131,13 @@
131
131
  ],
132
132
  "files": [
133
133
  {
134
- "name": "react-native-0.68.0-0.aar",
135
- "url": "react-native-0.68.0-0.aar",
136
- "size": 16399348,
137
- "sha512": "43a9bde69dd33deb2f170c4caf18aaba73cffc570303eef2859d3ee76131bc757859e2bff88a6c901ff8f698259a8e97d0d2779ca32c2e7da6a9033e885e20e0",
138
- "sha256": "f516e5f35994251abf453701e9f02fe831b7b3367e68e1c82014cfcee1531270",
139
- "sha1": "fc23f8750c2a5fa717815c530d0661e0bffb503c",
140
- "md5": "857b228ad236bf2c4da55bc46ee3bfde"
134
+ "name": "react-native-0.68.1-0.aar",
135
+ "url": "react-native-0.68.1-0.aar",
136
+ "size": 16399352,
137
+ "sha512": "ad85e1cec19d8e898d2d138f6d5c6eca1fc409b26137866a4848aea5b1888f6e278ca772404477d21fb740dd7e78eb73f21ba78122d2625006b2e9b77fcb615f",
138
+ "sha256": "eeaf129e2bcb06fd7da630d18b6a24c2adc1f51144594bba59c27567bd6b9f75",
139
+ "sha1": "47e93c57dff21b477d3a5c989fac1907e401d2e0",
140
+ "md5": "014f5939c08dca2b3daad451e988b516"
141
141
  }
142
142
  ]
143
143
  },
@@ -258,13 +258,13 @@
258
258
  ],
259
259
  "files": [
260
260
  {
261
- "name": "react-native-0.68.0-0.aar",
262
- "url": "react-native-0.68.0-0.aar",
263
- "size": 16399348,
264
- "sha512": "43a9bde69dd33deb2f170c4caf18aaba73cffc570303eef2859d3ee76131bc757859e2bff88a6c901ff8f698259a8e97d0d2779ca32c2e7da6a9033e885e20e0",
265
- "sha256": "f516e5f35994251abf453701e9f02fe831b7b3367e68e1c82014cfcee1531270",
266
- "sha1": "fc23f8750c2a5fa717815c530d0661e0bffb503c",
267
- "md5": "857b228ad236bf2c4da55bc46ee3bfde"
261
+ "name": "react-native-0.68.1-0.aar",
262
+ "url": "react-native-0.68.1-0.aar",
263
+ "size": 16399352,
264
+ "sha512": "ad85e1cec19d8e898d2d138f6d5c6eca1fc409b26137866a4848aea5b1888f6e278ca772404477d21fb740dd7e78eb73f21ba78122d2625006b2e9b77fcb615f",
265
+ "sha256": "eeaf129e2bcb06fd7da630d18b6a24c2adc1f51144594bba59c27567bd6b9f75",
266
+ "sha1": "47e93c57dff21b477d3a5c989fac1907e401d2e0",
267
+ "md5": "014f5939c08dca2b3daad451e988b516"
268
268
  }
269
269
  ]
270
270
  }
@@ -0,0 +1 @@
1
+ b51090965a4962303b28e544d74d1171
@@ -0,0 +1 @@
1
+ 61f16a7880116a37a073d138b8793df0ab749ab8
@@ -0,0 +1 @@
1
+ 97ad75b46df27ecc1e84054206e3444d9e06b68dea2b3c05588abaefcabbecea
@@ -0,0 +1 @@
1
+ c524c27d9377773c8f35d46ac13645b5a52f2c079c43d301e9c446b4306b123d51d972cdd0ba07cf66de5c8816ca2c0d5975fb926bd46f70e8d905adf563a217
@@ -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.68.0-0</version>
12
+ <version>0.68.1-0</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
+ 381bcb169a745e481e55f5e062c2ec48
@@ -0,0 +1 @@
1
+ da6ab1159eb4999f5cc03ca86812866a840b52be
@@ -0,0 +1 @@
1
+ 321eb17df316aad8ca94a1628f7d6ef867cc8c0dca9f81d85064ecd7d979e3f3
@@ -0,0 +1 @@
1
+ d1afa19f14fcafcc2b2fb7f26c7e2669b0a46e2ffb357b8faee0e9a791a7d70acb092759da3b4523cacaa779eaa21998e430f143a5e5eb53d5b308bbf98800c1
@@ -3,11 +3,11 @@
3
3
  <groupId>com.facebook.react</groupId>
4
4
  <artifactId>react-native</artifactId>
5
5
  <versioning>
6
- <latest>0.68.0-0</latest>
7
- <release>0.68.0-0</release>
6
+ <latest>0.68.1-0</latest>
7
+ <release>0.68.1-0</release>
8
8
  <versions>
9
- <version>0.68.0-0</version>
9
+ <version>0.68.1-0</version>
10
10
  </versions>
11
- <lastUpdated>20220330230430</lastUpdated>
11
+ <lastUpdated>20220419010257</lastUpdated>
12
12
  </versioning>
13
13
  </metadata>
@@ -1 +1 @@
1
- 1ce7aab95695d3c1ee0fd2d754e06aa7
1
+ ac56211a2072ce90ba4f6d310e7741ba
@@ -1 +1 @@
1
- f1386a4757c6301decaf0eac32cfabe4a423fc67
1
+ fc9553a84a3fc32f43a5ceda0424b2808faa2024
@@ -1 +1 @@
1
- af92b275a7c359af1346d2e580e6409a8ca497ffe0b667ae424c6d422f98ff5c
1
+ 2ac3f0a2214b593309b37bb82a1ff50c1a43c3d98735b45366c91ee830097643
@@ -1 +1 @@
1
- 77afab33be2583bee8c446cf92e3bd63b5043134d08d175d9d02cf203bb465eab7ade96d0f858899b83e6094ceb3cb5e941664e92aa6e579dc27523a798705ea
1
+ ded2ba86349f7b5aea24adec9031e6fd7b7d2c74c563bd9ea5795e2599ea47d58e3d34c7a60a157f4346dfd9335f242d61e70fdee329f945a1e293beeb432084
package/index.js CHANGED
@@ -83,7 +83,7 @@ import typeof * as TurboModuleRegistry from './Libraries/TurboModule/TurboModule
83
83
  import typeof TabBarIOS from './Libraries/Components/TabBarIOS/TabBarIOS';
84
84
  import typeof TVEventHandler from './Libraries/Components/AppleTV/TVEventHandler';
85
85
  import typeof TVFocusGuideView from './Libraries/Components/AppleTV/TVFocusGuideView';
86
- import typeof TVMenuControl from './Libraries/Components/AppleTV/TVMenuControl';
86
+ import typeof TVEventControl from './Libraries/Components/AppleTV/TVEventControl';
87
87
  import typeof TVTextScrollView from './Libraries/Components/AppleTV/TVTextScrollView';
88
88
  import typeof UIManager from './Libraries/ReactNative/UIManager';
89
89
  import typeof useColorScheme from './Libraries/Utilities/useColorScheme';
@@ -403,6 +403,9 @@ module.exports = {
403
403
  get TurboModuleRegistry(): TurboModuleRegistry {
404
404
  return require('./Libraries/TurboModule/TurboModuleRegistry');
405
405
  },
406
+ get TVEventControl(): TVEventControl {
407
+ return require('./Libraries/Components/AppleTV/TVEventControl');
408
+ },
406
409
  get TVEventHandler(): TVEventHandler {
407
410
  return require('./Libraries/Components/AppleTV/TVEventHandler');
408
411
  },
@@ -410,7 +413,11 @@ module.exports = {
410
413
  return require('./Libraries/Components/AppleTV/TVFocusGuideView');
411
414
  },
412
415
  get TVMenuControl(): TVMenuControl {
413
- return require('./Libraries/Components/AppleTV/TVMenuControl');
416
+ warnOnce(
417
+ 'TVMenuControl-moved',
418
+ 'TVMenuControl has been moved to TVEventControl, and now supports enabling/disabling both menu key events and pan gesture events.'
419
+ );
420
+ return require('./Libraries/Components/AppleTV/TVEventControl');
414
421
  },
415
422
  get TVTextScrollView(): TVTextScrollView {
416
423
  return require('./Libraries/Components/AppleTV/TVTextScrollView');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-tvos",
3
- "version": "0.68.0-0",
3
+ "version": "0.68.1-0",
4
4
  "bin": "./cli.js",
5
5
  "description": "A framework for building native apps using React",
6
6
  "license": "MIT",
@@ -118,13 +118,13 @@
118
118
  "promise": "^8.0.3",
119
119
  "prop-types": "^15.7.2",
120
120
  "react-devtools-core": "^4.23.0",
121
- "react-native-gradle-plugin": "^0.0.5",
121
+ "react-native-gradle-plugin": "^0.0.6",
122
122
  "react-refresh": "^0.4.0",
123
123
  "react-shallow-renderer": "16.14.1",
124
124
  "regenerator-runtime": "^0.13.2",
125
125
  "scheduler": "^0.20.2",
126
126
  "stacktrace-parser": "^0.1.3",
127
- "use-subscription": "^1.0.0",
127
+ "use-subscription": ">=1.0.0 <1.6.0",
128
128
  "whatwg-fetch": "^3.0.0",
129
129
  "ws": "^6.1.4",
130
130
  "react-native-codegen": "^0.0.13"
@@ -137,7 +137,7 @@
137
137
  "@react-native-community/eslint-plugin": "*",
138
138
  "@react-native/eslint-plugin-specs": ">0.0.2",
139
139
  "@reactions/component": "^2.0.2",
140
- "async": "^2.4.0",
140
+ "async": "^3.2.2",
141
141
  "babel-eslint": "^10.1.0",
142
142
  "clang-format": "^1.2.4",
143
143
  "connect": "^3.6.5",
@@ -45,7 +45,7 @@ GEM
45
45
  public_suffix (~> 4.0)
46
46
  typhoeus (~> 1.0)
47
47
  cocoapods-deintegrate (1.0.5)
48
- cocoapods-downloader (1.6.1)
48
+ cocoapods-downloader (1.6.3)
49
49
  cocoapods-plugins (1.0.0)
50
50
  nap
51
51
  cocoapods-search (1.0.1)
@@ -71,7 +71,7 @@ GEM
71
71
  nanaimo (0.3.0)
72
72
  nap (1.1.0)
73
73
  netrc (0.11.0)
74
- public_suffix (4.0.6)
74
+ public_suffix (4.0.7)
75
75
  rexml (3.2.5)
76
76
  ruby-macho (2.5.1)
77
77
  typhoeus (1.4.0)
@@ -1,6 +1,7 @@
1
1
  apply plugin: "com.android.application"
2
2
 
3
3
  import com.android.build.OutputFile
4
+ import org.apache.tools.ant.taskdefs.condition.Os
4
5
 
5
6
  /**
6
7
  * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets
@@ -157,6 +158,17 @@ android {
157
158
  // Make sure this target name is the same you specify inside the
158
159
  // src/main/jni/Android.mk file for the `LOCAL_MODULE` variable.
159
160
  targets "helloworld_appmodules"
161
+
162
+ // Fix for windows limit on number of character in file paths and in command lines
163
+ if (Os.isFamily(Os.FAMILY_WINDOWS)) {
164
+ arguments "NDK_OUT=${rootProject.projectDir.getParent()}\\.cxx",
165
+ "NDK_APP_SHORT_COMMANDS=true"
166
+ }
167
+ }
168
+ }
169
+ if (!enableSeparateBuildPerCPUArchitecture) {
170
+ ndk {
171
+ abiFilters (*reactNativeArchitectures())
160
172
  }
161
173
  }
162
174
  }
@@ -1,3 +1,5 @@
1
+ import org.apache.tools.ant.taskdefs.condition.Os
2
+
1
3
  // Top-level build file where you can add configuration options common to all sub-projects/modules.
2
4
 
3
5
  buildscript {
@@ -6,7 +8,18 @@ buildscript {
6
8
  minSdkVersion = 21
7
9
  compileSdkVersion = 31
8
10
  targetSdkVersion = 31
9
- ndkVersion = "21.4.7075529"
11
+
12
+ if (System.properties['os.arch'] == "aarch64") {
13
+ // For M1 Users we need to use the NDK 24 which added support for aarch64
14
+ ndkVersion = "24.0.8215888"
15
+ } else if (Os.isFamily(Os.FAMILY_WINDOWS)) {
16
+ // For Android Users, we need to use NDK 23, otherwise the build will
17
+ // fail due to paths longer than the OS limit
18
+ ndkVersion = "23.1.7779620"
19
+ } else {
20
+ // Otherwise we default to the side-by-side NDK version from AGP.
21
+ ndkVersion = "21.4.7075529"
22
+ }
10
23
  }
11
24
  repositories {
12
25
  google()
@@ -11,7 +11,7 @@
11
11
  },
12
12
  "dependencies": {
13
13
  "react": "17.0.2",
14
- "react-native": "npm:react-native-tvos@0.68.0-0"
14
+ "react-native": "npm:react-native-tvos@0.68.1-0"
15
15
  },
16
16
  "devDependencies": {
17
17
  "@babel/core": "^7.12.9",
@@ -1 +0,0 @@
1
- 69a7966c4d3f06ac09ea047618e54788
@@ -1 +0,0 @@
1
- 4ffdbfa123cd164ce4310cb218e66df22d31de82
@@ -1 +0,0 @@
1
- 2628f5a2ac1d575257f0904e16b4d5fd789a83599c81003eed1f7362e65375a9
@@ -1 +0,0 @@
1
- 332870ddaa66eac0bf6108ced5248d092d2b8239653d786e034975133f5213319187a6aaf6c64d2a8dd8577ceeac794511d4e2abae5d5a132bce8bc26437285d
@@ -1 +0,0 @@
1
- 857b228ad236bf2c4da55bc46ee3bfde
@@ -1 +0,0 @@
1
- fc23f8750c2a5fa717815c530d0661e0bffb503c
@@ -1 +0,0 @@
1
- f516e5f35994251abf453701e9f02fe831b7b3367e68e1c82014cfcee1531270
@@ -1 +0,0 @@
1
- 43a9bde69dd33deb2f170c4caf18aaba73cffc570303eef2859d3ee76131bc757859e2bff88a6c901ff8f698259a8e97d0d2779ca32c2e7da6a9033e885e20e0
@@ -1 +0,0 @@
1
- f148ee6ef1669b5371862b17c19a17cf
@@ -1 +0,0 @@
1
- 2411084d038ca22756938a1074ef4f3929b832f6
@@ -1 +0,0 @@
1
- 780c977da4b6a73051b40bbee7798a61d091fd8dd6db718230ad9960797a6f8f
@@ -1 +0,0 @@
1
- 4879741e17b3f04247f14b5ebc046fafafb8c08cff46f8b26bf7d93b111c476c67a0bd690d02f248d3ff4020ad8f583027b77262dd14d45209ef43577590bb22
@@ -1 +0,0 @@
1
- 39930e51726be539bab844c7719e46e7
@@ -1 +0,0 @@
1
- 0370ec409bba4de8e21c095a7755fe3ec7ae6119
@@ -1 +0,0 @@
1
- b14988652183f35e7f93cb148de040bfda45701a666285d48ab68ca215e0499b
@@ -1 +0,0 @@
1
- 7951ee4dc675c8a0dabc049c66a8f834287ef4dd94d7d45b7c4b2e2afc76c6bee958c1499846ff6bfcf191f22b1cb49eb734fad349709ffd15ff89ec4f1b5165