react-native-tvos 0.84.0-0rc0 → 0.84.0-0rc5

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 (36) hide show
  1. package/Libraries/Core/ReactNativeVersion.js +1 -1
  2. package/React/Base/RCTVersion.m +1 -1
  3. package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +0 -12
  4. package/React/Fabric/Mounting/ComponentViews/View/RCTViewComponentView.mm +0 -12
  5. package/React/Views/RCTTVView.h +6 -0
  6. package/ReactAndroid/gradle.properties +1 -1
  7. package/ReactAndroid/hermes-engine/build.gradle.kts +101 -22
  8. package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.kt +1 -1
  9. package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +1 -1
  10. package/ReactAndroid/src/main/java/com/facebook/react/views/view/ReactViewManager.kt +1 -1
  11. package/ReactAndroid/src/main/jni/react/hermes/reactexecutor/CMakeLists.txt +0 -4
  12. package/ReactAndroid/src/main/jni/react/runtime/hermes/jni/CMakeLists.txt +0 -4
  13. package/ReactAndroid/src/main/jni/react/runtime/jni/CMakeLists.txt +0 -4
  14. package/ReactCommon/cmake-utils/react-native-flags.cmake +3 -0
  15. package/ReactCommon/cxxreact/ReactNativeVersion.h +1 -1
  16. package/ReactCommon/hermes/executor/CMakeLists.txt +0 -4
  17. package/ReactCommon/hermes/executor/HermesExecutorFactory.cpp +2 -0
  18. package/ReactCommon/hermes/inspector-modern/CMakeLists.txt +0 -4
  19. package/ReactCommon/react/renderer/animationbackend/AnimatedPropSerializer.cpp +408 -0
  20. package/ReactCommon/react/renderer/animationbackend/AnimatedProps.h +66 -1
  21. package/ReactCommon/react/renderer/animationbackend/AnimatedPropsBuilder.h +58 -2
  22. package/ReactCommon/react/renderer/animationbackend/AnimatedPropsRegistry.h +52 -0
  23. package/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp +6 -9
  24. package/ReactCommon/react/runtime/CMakeLists.txt +0 -4
  25. package/ReactCommon/react/runtime/hermes/CMakeLists.txt +0 -4
  26. package/package.json +11 -10
  27. package/scripts/codegen/generate-artifacts-executor/generateRCTThirdPartyComponents.js +5 -5
  28. package/scripts/ios-configure-glog.sh +18 -0
  29. package/scripts/react_native_pods.rb +5 -0
  30. package/sdks/.hermesv1version +1 -1
  31. package/sdks/.hermesversion +1 -1
  32. package/sdks/hermes-engine/hermes-engine.podspec +15 -6
  33. package/sdks/hermes-engine/hermes-utils.rb +1 -1
  34. package/sdks/hermes-engine/version.properties +2 -2
  35. package/third-party-podspecs/glog.podspec +1 -0
  36. package/types/public/ReactNativeTVTypes.d.ts +7 -0
@@ -29,7 +29,7 @@ export default class ReactNativeVersion {
29
29
  static major: number = 0;
30
30
  static minor: number = 84;
31
31
  static patch: number = 0;
32
- static prerelease: string | null = '0rc0';
32
+ static prerelease: string | null = '0rc5';
33
33
 
34
34
  static getVersionString(): string {
35
35
  return `${this.major}.${this.minor}.${this.patch}${this.prerelease != null ? `-${this.prerelease}` : ''}`;
@@ -24,7 +24,7 @@ NSDictionary* RCTGetReactNativeVersion(void)
24
24
  RCTVersionMajor: @(0),
25
25
  RCTVersionMinor: @(84),
26
26
  RCTVersionPatch: @(0),
27
- RCTVersionPrerelease: @"0rc0",
27
+ RCTVersionPrerelease: @"0rc5",
28
28
  };
29
29
  });
30
30
  return __rnVersion;
@@ -1148,13 +1148,11 @@ static inline UIViewAnimationOptions animationOptionsWithCurve(UIViewAnimationCu
1148
1148
  if (context.nextFocusedView == self) {
1149
1149
  [self becomeFirstResponder];
1150
1150
  [self addSwipeGestureRecognizers];
1151
- [self sendFocusNotification];
1152
1151
  // if we enter the scroll view from different view then block first touch event since it is the event that triggered the focus
1153
1152
  _blockFirstTouch = (unsigned long)context.focusHeading != 0;
1154
1153
  [self addArrowsListeners];
1155
1154
  } else if (context.previouslyFocusedView == self) {
1156
1155
  [self removeArrowsListeners];
1157
- [self sendBlurNotification];
1158
1156
  [self removeSwipeGestureRecognizers];
1159
1157
  [self resignFirstResponder];
1160
1158
  // If scrolling is enabled:
@@ -1263,16 +1261,6 @@ static inline UIViewAnimationOptions animationOptionsWithCurve(UIViewAnimationCu
1263
1261
  return [super shouldUpdateFocusInContext:context];
1264
1262
  }
1265
1263
 
1266
- - (void)sendFocusNotification
1267
- {
1268
- [[NSNotificationCenter defaultCenter] postNavigationFocusEventWithTag:@(self.tag) target:nil];
1269
- }
1270
-
1271
- - (void)sendBlurNotification
1272
- {
1273
- [[NSNotificationCenter defaultCenter] postNavigationBlurEventWithTag:@(self.tag) target:nil];
1274
- }
1275
-
1276
1264
  - (NSInteger)swipeVerticalInterval
1277
1265
  {
1278
1266
  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
  }
@@ -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
 
@@ -1,4 +1,4 @@
1
- VERSION_NAME=0.84.0-0rc0
1
+ VERSION_NAME=0.84.0-0rc5
2
2
  react.internal.publishingGroup=io.github.react-native-tvos
3
3
  react.internal.hermesPublishingGroup=com.facebook.hermes
4
4
 
@@ -151,28 +151,55 @@ val installCMake by
151
151
  )
152
152
  }
153
153
 
154
+ fun configureBuildForHermesCommandLineArgs(
155
+ hermesBuildDir: File,
156
+ jsiDir: File,
157
+ enableDebugger: Boolean,
158
+ ): List<String> {
159
+ var cmakeCommandLine =
160
+ windowsAwareCommandLine(
161
+ cmakeBinaryPath,
162
+ // Suppress all warnings as this is the Hermes build and we can't fix them.
163
+ "--log-level=ERROR",
164
+ "-Wno-dev",
165
+ "-S",
166
+ ".",
167
+ "-B",
168
+ hermesBuildDir.toString(),
169
+ "-DJSI_DIR=" + jsiDir.absolutePath,
170
+ "-DCMAKE_BUILD_TYPE=Release",
171
+ )
172
+ if (enableDebugger) {
173
+ cmakeCommandLine = cmakeCommandLine + "-DHERMES_ENABLE_DEBUGGER=True"
174
+ }
175
+ if (Os.isFamily(Os.FAMILY_WINDOWS)) {
176
+ cmakeCommandLine = cmakeCommandLine + "-GNMake Makefiles"
177
+ }
178
+ if (hermesV1Enabled) {
179
+ cmakeCommandLine = cmakeCommandLine + "-DHERMESVM_HEAP_HV_MODE=HEAP_HV_PREFER32"
180
+ }
181
+
182
+ return cmakeCommandLine
183
+ }
184
+
185
+ fun buildHermesCCommandLineArgs() =
186
+ listOf(
187
+ cmakeBinaryPath,
188
+ "--build",
189
+ hermesBuildDir.toString(),
190
+ "--target",
191
+ "hermesc",
192
+ "-j",
193
+ ndkBuildJobs,
194
+ )
195
+
154
196
  val configureBuildForHermes by
155
197
  tasks.registering(CustomExecTask::class) {
156
198
  dependsOn(installCMake)
157
199
  workingDir(hermesDir)
158
200
  inputs.dir(hermesDir)
159
201
  outputs.files(hermesBuildOutputFileTree)
160
- var cmakeCommandLine =
161
- windowsAwareCommandLine(
162
- cmakeBinaryPath,
163
- // Suppress all warnings as this is the Hermes build and we can't fix them.
164
- "--log-level=ERROR",
165
- "-Wno-dev",
166
- "-S",
167
- ".",
168
- "-B",
169
- hermesBuildDir.toString(),
170
- "-DJSI_DIR=" + jsiDir.absolutePath,
171
- "-DCMAKE_BUILD_TYPE=Release",
172
- )
173
- if (Os.isFamily(Os.FAMILY_WINDOWS)) {
174
- cmakeCommandLine = cmakeCommandLine + "-GNMake Makefiles"
175
- }
202
+ val cmakeCommandLine = configureBuildForHermesCommandLineArgs(hermesBuildDir, jsiDir, false)
176
203
  commandLine(cmakeCommandLine)
177
204
  standardOutputFile.set(project.file("$buildDir/configure-hermesc.log"))
178
205
  }
@@ -183,22 +210,69 @@ val buildHermesC by
183
210
  workingDir(hermesDir)
184
211
  inputs.files(hermesBuildOutputFileTree)
185
212
  outputs.file(hermesCOutputBinary)
213
+ val cmakeCommandLine = buildHermesCCommandLineArgs()
214
+ commandLine(cmakeCommandLine)
215
+ standardOutputFile.set(project.file("$buildDir/build-hermesc.log"))
216
+ errorOutputFile.set(project.file("$buildDir/build-hermesc.error.log"))
217
+ }
218
+
219
+ val prepareHeadersForPrefab by
220
+ tasks.registering(Copy::class) {
221
+ dependsOn(buildHermesC)
222
+ from("$hermesDir/API")
223
+ from("$hermesDir/public")
224
+ include("**/*.h")
225
+ exclude("jsi/**")
226
+ into(prefabHeadersDir)
227
+ }
228
+
229
+ val buildHermesLib by
230
+ tasks.registering(CustomExecTask::class) {
231
+ dependsOn(buildHermesC)
232
+ workingDir(hermesDir)
233
+ inputs.files(hermesBuildOutputFileTree)
186
234
  commandLine(
187
235
  cmakeBinaryPath,
188
236
  "--build",
189
237
  hermesBuildDir.toString(),
190
238
  "--target",
191
- "hermesc",
239
+ "hermesvm",
192
240
  "-j",
193
241
  ndkBuildJobs,
194
242
  )
243
+ standardOutputFile.set(project.file("$buildDir/build-hermes-lib.log"))
244
+ errorOutputFile.set(project.file("$buildDir/build-hermes-lib.error.log"))
245
+ }
246
+
247
+ // The repeated tasks below named "*WithDebugger" are required by Fantom.
248
+ // Hermes V1 by default builds with the debugger disabled, while Fantom needs
249
+ // it to be enabled as it does a debug build of React Native.
250
+ val configureBuildForHermesWithDebugger by
251
+ tasks.registering(CustomExecTask::class) {
252
+ dependsOn(installCMake)
253
+ workingDir(hermesDir)
254
+ inputs.dir(hermesDir)
255
+ outputs.files(hermesBuildOutputFileTree)
256
+ val cmakeCommandLine = configureBuildForHermesCommandLineArgs(hermesBuildDir, jsiDir, true)
257
+ commandLine(cmakeCommandLine)
258
+ standardOutputFile.set(project.file("$buildDir/configure-hermesc.log"))
259
+ }
260
+
261
+ val buildHermesCWithDebugger by
262
+ tasks.registering(CustomExecTask::class) {
263
+ dependsOn(configureBuildForHermesWithDebugger)
264
+ workingDir(hermesDir)
265
+ inputs.files(hermesBuildOutputFileTree)
266
+ outputs.file(hermesCOutputBinary)
267
+ val cmakeCommandLine = buildHermesCCommandLineArgs()
268
+ commandLine(cmakeCommandLine)
195
269
  standardOutputFile.set(project.file("$buildDir/build-hermesc.log"))
196
270
  errorOutputFile.set(project.file("$buildDir/build-hermesc.error.log"))
197
271
  }
198
272
 
199
- val prepareHeadersForPrefab by
273
+ val prepareHeadersForPrefabWithDebugger by
200
274
  tasks.registering(Copy::class) {
201
- dependsOn(buildHermesC)
275
+ dependsOn(buildHermesCWithDebugger)
202
276
  from("$hermesDir/API")
203
277
  from("$hermesDir/public")
204
278
  include("**/*.h")
@@ -206,9 +280,9 @@ val prepareHeadersForPrefab by
206
280
  into(prefabHeadersDir)
207
281
  }
208
282
 
209
- val buildHermesLib by
283
+ val buildHermesLibWithDebugger by
210
284
  tasks.registering(CustomExecTask::class) {
211
- dependsOn(buildHermesC)
285
+ dependsOn(buildHermesCWithDebugger)
212
286
  workingDir(hermesDir)
213
287
  inputs.files(hermesBuildOutputFileTree)
214
288
  commandLine(
@@ -349,7 +423,10 @@ android {
349
423
  java.srcDirs("$hermesDir/lib/Platform/Intl/java", "$hermesDir/lib/Platform/Unicode/java")
350
424
  }
351
425
 
352
- buildFeatures { prefab = true }
426
+ buildFeatures {
427
+ prefab = true
428
+ prefabPublishing = true
429
+ }
353
430
 
354
431
  dependencies {
355
432
  implementation(libs.fbjni)
@@ -372,6 +449,8 @@ afterEvaluate {
372
449
  // download/unzip Hermes from Github then.
373
450
  tasks.getByName("configureBuildForHermes").dependsOn(unzipHermes)
374
451
  tasks.getByName("prepareHeadersForPrefab").dependsOn(unzipHermes)
452
+ tasks.getByName("configureBuildForHermesWithDebugger").dependsOn(unzipHermes)
453
+ tasks.getByName("prepareHeadersForPrefabWithDebugger").dependsOn(unzipHermes)
375
454
  }
376
455
  tasks.getByName("preBuild").dependsOn(buildHermesC)
377
456
  tasks.getByName("preBuild").dependsOn(prepareHeadersForPrefab)
@@ -644,7 +644,7 @@ public class NetworkingModule(
644
644
  reactApplicationContext,
645
645
  requestId,
646
646
  devToolsRequestId,
647
- url,
647
+ response.request().url().toString(),
648
648
  response,
649
649
  )
650
650
 
@@ -15,6 +15,6 @@ public object ReactNativeVersion {
15
15
  "major" to 0,
16
16
  "minor" to 84,
17
17
  "patch" to 0,
18
- "prerelease" to "0rc0"
18
+ "prerelease" to "0rc5"
19
19
  )
20
20
  }
@@ -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)
@@ -27,8 +27,4 @@ target_link_libraries(
27
27
  target_compile_reactnative_options(hermes_executor PRIVATE)
28
28
  if(${CMAKE_BUILD_TYPE} MATCHES Debug OR REACT_NATIVE_DEBUG_OPTIMIZED)
29
29
  target_compile_options(hermes_executor PRIVATE -DHERMES_ENABLE_DEBUGGER=1)
30
-
31
- if (HERMES_V1_ENABLED)
32
- target_compile_options(hermes_executor PRIVATE -DHERMES_V1_ENABLED=1)
33
- endif()
34
30
  endif()
@@ -29,8 +29,4 @@ target_link_libraries(hermesinstancejni
29
29
  target_compile_reactnative_options(hermesinstancejni PRIVATE)
30
30
  if(${CMAKE_BUILD_TYPE} MATCHES Debug OR REACT_NATIVE_DEBUG_OPTIMIZED)
31
31
  target_compile_options(hermesinstancejni PRIVATE -DHERMES_ENABLE_DEBUGGER=1)
32
-
33
- if (HERMES_V1_ENABLED)
34
- target_compile_options(hermesinstancejni PRIVATE -DHERMES_V1_ENABLED=1)
35
- endif()
36
32
  endif ()
@@ -19,10 +19,6 @@ add_library(rninstance
19
19
  target_compile_reactnative_options(rninstance PRIVATE)
20
20
  if(${CMAKE_BUILD_TYPE} MATCHES Debug OR REACT_NATIVE_DEBUG_OPTIMIZED)
21
21
  target_compile_options(rninstance PRIVATE -DHERMES_ENABLE_DEBUGGER=1)
22
-
23
- if (HERMES_V1_ENABLED)
24
- target_compile_options(rninstance PRIVATE -DHERMES_V1_ENABLED=1)
25
- endif()
26
22
  endif ()
27
23
 
28
24
  target_merge_so(rninstance)
@@ -32,4 +32,7 @@ function(target_compile_reactnative_options target_name scope)
32
32
  if(ANDROID)
33
33
  target_compile_definitions(${target_name} ${scope} RN_SERIALIZABLE_STATE)
34
34
  endif()
35
+ if(HERMES_V1_ENABLED)
36
+ target_compile_definitions(${target_name} ${scope} HERMES_V1_ENABLED=1)
37
+ endif()
35
38
  endfunction()
@@ -22,7 +22,7 @@ constexpr struct {
22
22
  int32_t Major = 0;
23
23
  int32_t Minor = 84;
24
24
  int32_t Patch = 0;
25
- std::string_view Prerelease = "0rc0";
25
+ std::string_view Prerelease = "0rc5";
26
26
  } ReactNativeVersion;
27
27
 
28
28
  } // namespace facebook::react
@@ -32,10 +32,6 @@ if(${CMAKE_BUILD_TYPE} MATCHES Debug OR REACT_NATIVE_DEBUG_OPTIMIZED)
32
32
  PRIVATE
33
33
  -DHERMES_ENABLE_DEBUGGER=1
34
34
  )
35
-
36
- if (HERMES_V1_ENABLED)
37
- target_compile_options(hermes_executor_common PRIVATE -DHERMES_V1_ENABLED=1)
38
- endif()
39
35
  else()
40
36
  target_compile_options(
41
37
  hermes_executor_common
@@ -13,6 +13,8 @@
13
13
  #include <jsi/decorator.h>
14
14
  #include <jsinspector-modern/InspectorFlags.h>
15
15
 
16
+ #include <thread>
17
+
16
18
  #include <hermes/inspector-modern/chrome/HermesRuntimeTargetDelegate.h>
17
19
 
18
20
  #if defined(HERMES_ENABLE_DEBUGGER) && !defined(HERMES_V1_ENABLED)
@@ -23,10 +23,6 @@ if(${CMAKE_BUILD_TYPE} MATCHES Debug OR REACT_NATIVE_DEBUG_OPTIMIZED)
23
23
  PRIVATE
24
24
  -DHERMES_ENABLE_DEBUGGER=1
25
25
  )
26
-
27
- if (HERMES_V1_ENABLED)
28
- target_compile_options(hermes_inspector_modern PRIVATE -DHERMES_V1_ENABLED=1)
29
- endif()
30
26
  endif()
31
27
 
32
28
  target_include_directories(hermes_inspector_modern PUBLIC ${REACT_COMMON_DIR})