react-native-tvos 0.83.1-0 → 0.83.2-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.
- package/Libraries/Core/ReactNativeVersion.js +1 -1
- package/React/Base/RCTVersion.m +1 -1
- package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +0 -12
- package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +1 -14
- package/React/Views/RCTTVView.h +6 -0
- package/ReactAndroid/gradle.properties +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewGroup.kt +8 -20
- package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.kt +1 -1
- package/ReactCommon/cxxreact/ReactNativeVersion.h +2 -2
- package/package.json +10 -9
- package/sdks/.hermesversion +1 -1
- package/sdks/hermes-engine/version.properties +1 -1
- package/tvosCommands.js +51 -0
- package/types/public/ReactNativeTVTypes.d.ts +7 -0
package/React/Base/RCTVersion.m
CHANGED
|
@@ -1146,13 +1146,11 @@ static inline UIViewAnimationOptions animationOptionsWithCurve(UIViewAnimationCu
|
|
|
1146
1146
|
if (context.nextFocusedView == self) {
|
|
1147
1147
|
[self becomeFirstResponder];
|
|
1148
1148
|
[self addSwipeGestureRecognizers];
|
|
1149
|
-
[self sendFocusNotification];
|
|
1150
1149
|
// if we enter the scroll view from different view then block first touch event since it is the event that triggered the focus
|
|
1151
1150
|
_blockFirstTouch = (unsigned long)context.focusHeading != 0;
|
|
1152
1151
|
[self addArrowsListeners];
|
|
1153
1152
|
} else if (context.previouslyFocusedView == self) {
|
|
1154
1153
|
[self removeArrowsListeners];
|
|
1155
|
-
[self sendBlurNotification];
|
|
1156
1154
|
[self removeSwipeGestureRecognizers];
|
|
1157
1155
|
[self resignFirstResponder];
|
|
1158
1156
|
// If scrolling is enabled:
|
|
@@ -1261,16 +1259,6 @@ static inline UIViewAnimationOptions animationOptionsWithCurve(UIViewAnimationCu
|
|
|
1261
1259
|
return [super shouldUpdateFocusInContext:context];
|
|
1262
1260
|
}
|
|
1263
1261
|
|
|
1264
|
-
- (void)sendFocusNotification
|
|
1265
|
-
{
|
|
1266
|
-
[[NSNotificationCenter defaultCenter] postNavigationFocusEventWithTag:@(self.tag) target:nil];
|
|
1267
|
-
}
|
|
1268
|
-
|
|
1269
|
-
- (void)sendBlurNotification
|
|
1270
|
-
{
|
|
1271
|
-
[[NSNotificationCenter defaultCenter] postNavigationBlurEventWithTag:@(self.tag) target:nil];
|
|
1272
|
-
}
|
|
1273
|
-
|
|
1274
1262
|
- (NSInteger)swipeVerticalInterval
|
|
1275
1263
|
{
|
|
1276
1264
|
RCTEnhancedScrollView *scrollView = (RCTEnhancedScrollView *)_scrollView;
|
|
@@ -265,16 +265,6 @@ const CGFloat BACKGROUND_COLOR_ZPOSITION = -1024.0f;
|
|
|
265
265
|
[self handleFocusGuide];
|
|
266
266
|
}
|
|
267
267
|
|
|
268
|
-
- (void)sendFocusNotification:(__unused UIFocusUpdateContext *)context
|
|
269
|
-
{
|
|
270
|
-
[[NSNotificationCenter defaultCenter] postNavigationFocusEventWithTag:@(self.tag) target:@(self.tag)];
|
|
271
|
-
}
|
|
272
|
-
|
|
273
|
-
- (void)sendBlurNotification:(__unused UIFocusUpdateContext *)context
|
|
274
|
-
{
|
|
275
|
-
[[NSNotificationCenter defaultCenter] postNavigationBlurEventWithTag:@(self.tag) target:@(self.tag)];
|
|
276
|
-
}
|
|
277
|
-
|
|
278
268
|
- (void)sendSelectNotification
|
|
279
269
|
{
|
|
280
270
|
[[NSNotificationCenter defaultCenter] postNavigationPressEventWithType:RCTTVRemoteEventSelect keyAction:RCTTVRemoteEventKeyActionUp tag:@(self.tag) target:@(self.tag)];
|
|
@@ -596,7 +586,6 @@ const CGFloat BACKGROUND_COLOR_ZPOSITION = -1024.0f;
|
|
|
596
586
|
[self enableDirectionalFocusGuides];
|
|
597
587
|
[coordinator addCoordinatedAnimations:^(void){
|
|
598
588
|
if (self->_eventEmitter) self->_eventEmitter->onFocus();
|
|
599
|
-
[self sendFocusNotification:context];
|
|
600
589
|
[self addParallaxMotionEffects];
|
|
601
590
|
} completion:^(void){}];
|
|
602
591
|
// Without this check, onBlur would also trigger when `TVFocusGuideView` transfers focus to its children.
|
|
@@ -607,7 +596,6 @@ const CGFloat BACKGROUND_COLOR_ZPOSITION = -1024.0f;
|
|
|
607
596
|
[coordinator addCoordinatedAnimations:^(void){
|
|
608
597
|
[self removeParallaxMotionEffects];
|
|
609
598
|
if (self->_eventEmitter) self->_eventEmitter->onBlur();
|
|
610
|
-
[self sendBlurNotification:context];
|
|
611
599
|
} completion:^(void){}];
|
|
612
600
|
[self resignFirstResponder];
|
|
613
601
|
}
|
|
@@ -1166,7 +1154,6 @@ const CGFloat BACKGROUND_COLOR_ZPOSITION = -1024.0f;
|
|
|
1166
1154
|
// `autoFocus`
|
|
1167
1155
|
if (oldViewProps.autoFocus != newViewProps.autoFocus) {
|
|
1168
1156
|
_autoFocus = newViewProps.autoFocus;
|
|
1169
|
-
[self handleFocusGuide];
|
|
1170
1157
|
}
|
|
1171
1158
|
|
|
1172
1159
|
_trapFocusUp = newViewProps.trapFocusUp;
|
|
@@ -1228,7 +1215,7 @@ const CGFloat BACKGROUND_COLOR_ZPOSITION = -1024.0f;
|
|
|
1228
1215
|
[self requestFocusSelf];
|
|
1229
1216
|
}
|
|
1230
1217
|
}
|
|
1231
|
-
|
|
1218
|
+
[self handleFocusGuide];
|
|
1232
1219
|
#endif
|
|
1233
1220
|
|
|
1234
1221
|
if (_swiftUIWrapper != nullptr) {
|
package/React/Views/RCTTVView.h
CHANGED
|
@@ -70,11 +70,17 @@
|
|
|
70
70
|
|
|
71
71
|
/**
|
|
72
72
|
* Send Focus Notifications to listeners
|
|
73
|
+
* @deprecated This method emits focus events to TVEventHandler, which is deprecated.
|
|
74
|
+
* Use onFocus/onBlur component props instead. Will be removed when old arch is removed.
|
|
75
|
+
* See: https://github.com/react-native-tvos/react-native-tvos/issues/1037
|
|
73
76
|
*/
|
|
74
77
|
- (void)sendFocusNotification:(UIFocusUpdateContext *)context;
|
|
75
78
|
|
|
76
79
|
/**
|
|
77
80
|
* Send Blur Notifications to listeners
|
|
81
|
+
* @deprecated This method emits blur events to TVEventHandler, which is deprecated.
|
|
82
|
+
* Use onFocus/onBlur component props instead. Will be removed when old arch is removed.
|
|
83
|
+
* See: https://github.com/react-native-tvos/react-native-tvos/issues/1037
|
|
78
84
|
*/
|
|
79
85
|
- (void)sendBlurNotification:(UIFocusUpdateContext *)context;
|
|
80
86
|
|
|
@@ -1448,7 +1448,13 @@ public open class ReactViewGroup public constructor(context: Context?) :
|
|
|
1448
1448
|
if (isFocusDestinationsSet) {
|
|
1449
1449
|
val destination = findDestinationView()
|
|
1450
1450
|
|
|
1451
|
-
|
|
1451
|
+
// Destination is set but there's no such element on the tree
|
|
1452
|
+
// Just skip it to prevent cyclic issues.
|
|
1453
|
+
if (destination == null) {
|
|
1454
|
+
return false
|
|
1455
|
+
}
|
|
1456
|
+
|
|
1457
|
+
if (destination.requestFocus()) {
|
|
1452
1458
|
return true
|
|
1453
1459
|
}
|
|
1454
1460
|
}
|
|
@@ -1472,9 +1478,7 @@ public open class ReactViewGroup public constructor(context: Context?) :
|
|
|
1472
1478
|
}
|
|
1473
1479
|
|
|
1474
1480
|
// Try moving the focus to the first focusable element otherwise.
|
|
1475
|
-
|
|
1476
|
-
return true
|
|
1477
|
-
}
|
|
1481
|
+
return moveFocusToFirstFocusable(this)
|
|
1478
1482
|
}
|
|
1479
1483
|
|
|
1480
1484
|
return super.requestFocus(direction, previouslyFocusedRect)
|
|
@@ -1606,21 +1610,5 @@ public open class ReactViewGroup public constructor(context: Context?) :
|
|
|
1606
1610
|
fun setViewClipped(view: View, clipped: Boolean) {
|
|
1607
1611
|
view.setTag(R.id.view_clipped, clipped)
|
|
1608
1612
|
}
|
|
1609
|
-
|
|
1610
|
-
private fun requestFocusViewOrAncestor(destination: View): Boolean {
|
|
1611
|
-
var v: View? = destination
|
|
1612
|
-
while (v != null) {
|
|
1613
|
-
if (v.requestFocus()) {
|
|
1614
|
-
return true
|
|
1615
|
-
}
|
|
1616
|
-
val parent = v.parent
|
|
1617
|
-
v = if (parent is View) {
|
|
1618
|
-
parent
|
|
1619
|
-
} else {
|
|
1620
|
-
null
|
|
1621
|
-
}
|
|
1622
|
-
}
|
|
1623
|
-
return false
|
|
1624
|
-
}
|
|
1625
1613
|
}
|
|
1626
1614
|
}
|
|
@@ -109,13 +109,13 @@ public open class ReactViewManager : ReactClippingViewManager<ReactViewGroup>()
|
|
|
109
109
|
|
|
110
110
|
@ReactProp(name = "tvFocusable")
|
|
111
111
|
public open fun setTvFocusable(view: ReactViewGroup, focusable: Boolean) {
|
|
112
|
-
setFocusable(view, focusable)
|
|
113
112
|
if (!focusable) {
|
|
114
113
|
view.isFocusable = false
|
|
115
114
|
view.descendantFocusability = ViewGroup.FOCUS_BLOCK_DESCENDANTS
|
|
116
115
|
} else {
|
|
117
116
|
view.descendantFocusability = ViewGroup.FOCUS_AFTER_DESCENDANTS
|
|
118
117
|
}
|
|
118
|
+
setFocusable(view, focusable)
|
|
119
119
|
}
|
|
120
120
|
|
|
121
121
|
@ReactProp(name = ViewProps.ACCESSIBILITY_ORDER)
|
|
@@ -14,14 +14,14 @@
|
|
|
14
14
|
|
|
15
15
|
#define REACT_NATIVE_VERSION_MAJOR 0
|
|
16
16
|
#define REACT_NATIVE_VERSION_MINOR 83
|
|
17
|
-
#define REACT_NATIVE_VERSION_PATCH
|
|
17
|
+
#define REACT_NATIVE_VERSION_PATCH 2
|
|
18
18
|
|
|
19
19
|
namespace facebook::react {
|
|
20
20
|
|
|
21
21
|
constexpr struct {
|
|
22
22
|
int32_t Major = 0;
|
|
23
23
|
int32_t Minor = 83;
|
|
24
|
-
int32_t Patch =
|
|
24
|
+
int32_t Patch = 2;
|
|
25
25
|
std::string_view Prerelease = "0";
|
|
26
26
|
} ReactNativeVersion;
|
|
27
27
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-tvos",
|
|
3
|
-
"version": "0.83.
|
|
3
|
+
"version": "0.83.2-0",
|
|
4
4
|
"description": "A framework for building native apps using React",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -91,6 +91,7 @@
|
|
|
91
91
|
"React-Core.podspec",
|
|
92
92
|
"React-Core-prebuilt.podspec",
|
|
93
93
|
"react-native.config.js",
|
|
94
|
+
"tvosCommands.js",
|
|
94
95
|
"React.podspec",
|
|
95
96
|
"React",
|
|
96
97
|
"!React/Fabric/RCTThirdPartyFabricComponentsProvider.*",
|
|
@@ -164,12 +165,12 @@
|
|
|
164
165
|
},
|
|
165
166
|
"dependencies": {
|
|
166
167
|
"@jest/create-cache-key-function": "^29.7.0",
|
|
167
|
-
"@react-native/assets-registry": "0.83.
|
|
168
|
-
"@react-native/codegen": "0.83.
|
|
169
|
-
"@react-native/community-cli-plugin": "0.83.
|
|
170
|
-
"@react-native/gradle-plugin": "0.83.
|
|
171
|
-
"@react-native/js-polyfills": "0.83.
|
|
172
|
-
"@react-native/normalize-colors": "0.83.
|
|
168
|
+
"@react-native/assets-registry": "0.83.2",
|
|
169
|
+
"@react-native/codegen": "0.83.2",
|
|
170
|
+
"@react-native/community-cli-plugin": "0.83.2",
|
|
171
|
+
"@react-native/gradle-plugin": "0.83.2",
|
|
172
|
+
"@react-native/js-polyfills": "0.83.2",
|
|
173
|
+
"@react-native/normalize-colors": "0.83.2",
|
|
173
174
|
"abort-controller": "^3.0.0",
|
|
174
175
|
"anser": "^1.4.9",
|
|
175
176
|
"ansi-regex": "^5.0.0",
|
|
@@ -179,7 +180,7 @@
|
|
|
179
180
|
"commander": "^12.0.0",
|
|
180
181
|
"flow-enums-runtime": "^0.0.6",
|
|
181
182
|
"glob": "^7.1.1",
|
|
182
|
-
"hermes-compiler": "0.14.
|
|
183
|
+
"hermes-compiler": "0.14.1",
|
|
183
184
|
"invariant": "^2.2.4",
|
|
184
185
|
"jest-environment-node": "^29.7.0",
|
|
185
186
|
"memoize-one": "^5.0.0",
|
|
@@ -197,7 +198,7 @@
|
|
|
197
198
|
"whatwg-fetch": "^3.0.0",
|
|
198
199
|
"ws": "^7.5.10",
|
|
199
200
|
"yargs": "^17.6.2",
|
|
200
|
-
"@react-native-tvos/virtualized-lists": "0.83.
|
|
201
|
+
"@react-native-tvos/virtualized-lists": "0.83.2-0"
|
|
201
202
|
},
|
|
202
203
|
"codegenConfig": {
|
|
203
204
|
"libraries": [
|
package/sdks/.hermesversion
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
hermes-v0.14.
|
|
1
|
+
hermes-v0.14.1
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
HERMES_VERSION_NAME=0.14.
|
|
1
|
+
HERMES_VERSION_NAME=0.14.1
|
|
2
2
|
HERMES_V1_VERSION_NAME=250829098.0.4
|
package/tvosCommands.js
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @flow
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
let apple;
|
|
6
|
+
try {
|
|
7
|
+
apple = require('@react-native-community/cli-platform-apple');
|
|
8
|
+
} catch {
|
|
9
|
+
if (verbose) {
|
|
10
|
+
console.warn(
|
|
11
|
+
'@react-native-community/cli-platform-apple not found, the react-native.config.js may be unusable.'
|
|
12
|
+
);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const platformName = 'tvos';
|
|
17
|
+
|
|
18
|
+
const run = {
|
|
19
|
+
name: `run-${platformName}`,
|
|
20
|
+
description: 'builds your app and starts it on a tvOS simulator or Apple TV device',
|
|
21
|
+
func: apple.createRun({platformName}),
|
|
22
|
+
examples: [
|
|
23
|
+
{
|
|
24
|
+
desc: 'Run on a specific simulator',
|
|
25
|
+
cmd: `npx react-native run-${platformName} --simulator "Apple TV"`,
|
|
26
|
+
},
|
|
27
|
+
],
|
|
28
|
+
options: apple.getRunOptions({platformName}),
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const log = {
|
|
32
|
+
name: `log-${platformName}`,
|
|
33
|
+
description: 'displays system logs from a connected tvOS device or simulator',
|
|
34
|
+
func: apple.createLog({platformName: platformName}),
|
|
35
|
+
options: apple.getLogOptions({platformName}),
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const build = {
|
|
39
|
+
name: `build-${platformName}`,
|
|
40
|
+
description: 'builds your app for tvOS',
|
|
41
|
+
func: apple.createBuild({platformName}),
|
|
42
|
+
examples: [
|
|
43
|
+
{
|
|
44
|
+
desc: 'Build the app for all tvOS devices in Release mode',
|
|
45
|
+
cmd: `npx react-native build-${platformName} --mode "Release"`,
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
options: apple.getBuildOptions({platformName}),
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
module.exports = [run, log, build];
|
|
@@ -52,6 +52,13 @@ declare module 'react-native' {
|
|
|
52
52
|
disableGestureHandlersCancelTouches(): void;
|
|
53
53
|
};
|
|
54
54
|
|
|
55
|
+
/**
|
|
56
|
+
* Hardware event received from TVEventHandler
|
|
57
|
+
*
|
|
58
|
+
* Note: The 'blur' and 'focus' event types are deprecated and will no longer be
|
|
59
|
+
* emitted on new architecture (Fabric). Use onFocus/onBlur component props instead.
|
|
60
|
+
* See: https://github.com/react-native-tvos/react-native-tvos/issues/1037
|
|
61
|
+
*/
|
|
55
62
|
export type HWEvent = {
|
|
56
63
|
eventType: 'up' | 'down' | 'right' | 'left' | 'longUp' | 'longDown' | 'longRight' | 'longLeft' | 'blur' | 'focus' | 'pan' | string;
|
|
57
64
|
eventKeyAction?: -1 | 1 | 0 | number | undefined;
|