react-native-tvos 0.74.0-0rc3 → 0.74.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/AppDelegate/RCTAppDelegate+Protected.h +16 -0
- package/Libraries/AppDelegate/RCTAppDelegate.mm +32 -1
- package/Libraries/AppDelegate/React-RCTAppDelegate.podspec +1 -0
- package/Libraries/Components/Pressable/Pressable.js +9 -5
- package/Libraries/Components/TextInput/TextInput.js +6 -3
- package/Libraries/Components/Touchable/TouchableBounce.js +1 -0
- package/Libraries/Components/Touchable/TouchableOpacity.js +1 -0
- package/Libraries/Core/ReactNativeVersion.js +2 -2
- package/Libraries/ReactNative/RendererImplementation.js +2 -0
- package/README.md +29 -9
- package/React/Base/RCTUtils.m +28 -8
- package/React/Base/RCTVersion.m +2 -2
- package/React/Base/Surface/SurfaceHostingView/RCTSurfaceHostingProxyRootView.mm +2 -4
- package/React/Fabric/Mounting/ComponentViews/Root/RCTRootComponentView.mm +22 -2
- package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +5 -1
- package/React/Fabric/RCTScheduler.h +2 -0
- package/React/Fabric/RCTScheduler.mm +6 -0
- package/React/Fabric/RCTSurfacePresenter.mm +5 -0
- package/React/Modules/RCTUIManager.m +8 -9
- package/React/Views/RCTComponentData.m +14 -1
- package/React/Views/ScrollView/RCTScrollView.m +30 -14
- package/ReactAndroid/api/ReactAndroid.api +1 -2
- package/ReactAndroid/gradle.properties +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/ReactActivity.java +2 -2
- package/ReactAndroid/src/main/java/com/facebook/react/ReactDelegate.java +24 -9
- package/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNewArchitectureEntryPoint.kt +15 -0
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +19 -7
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +31 -11
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +7 -3
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +7 -3
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +34 -12
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +7 -3
- package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.java +2 -2
- package/ReactAndroid/src/main/java/com/facebook/react/runtime/BridgelessCatalystInstance.kt +11 -18
- package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java +27 -14
- package/ReactAndroid/src/main/java/com/facebook/react/views/modal/ReactModalHostView.java +1 -3
- package/ReactAndroid/src/main/jni/react/fabric/Binding.cpp +38 -3
- package/ReactAndroid/src/main/jni/react/fabric/Binding.h +8 -0
- package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +43 -15
- package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +10 -4
- package/ReactCommon/ReactCommon.podspec +1 -0
- package/ReactCommon/cxxreact/ReactNativeVersion.h +2 -2
- package/ReactCommon/jsc/JSCRuntime.cpp +2 -0
- package/ReactCommon/jsinspector-modern/React-jsinspector.podspec +2 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +13 -5
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +16 -6
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +62 -26
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +8 -4
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +13 -5
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +4 -2
- package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +16 -6
- package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +7 -3
- package/ReactCommon/react/renderer/components/textinput/platform/ios/react/renderer/components/iostextinput/TextInputEventEmitter.cpp +53 -1
- package/ReactCommon/react/renderer/mounting/MountingTransaction.cpp +13 -0
- package/ReactCommon/react/renderer/mounting/MountingTransaction.h +9 -0
- package/ReactCommon/react/renderer/scheduler/Scheduler.cpp +7 -2
- package/ReactCommon/react/renderer/scheduler/SchedulerDelegate.h +11 -0
- package/cli.js +11 -3
- package/package.json +12 -12
- package/scripts/cocoapods/privacy_manifest_utils.rb +173 -0
- package/scripts/cocoapods/utils.rb +1 -38
- package/scripts/ios-configure-glog.sh +9 -2
- package/scripts/react_native_pods.rb +14 -3
- package/sdks/.hermesversion +1 -1
- package/sdks/hermesc/osx-bin/hermes +0 -0
- package/sdks/hermesc/osx-bin/hermesc +0 -0
- package/sdks/hermesc/win64-bin/hermesc.exe +0 -0
- package/src/private/featureflags/NativeReactNativeFeatureFlags.js +4 -2
- package/src/private/featureflags/ReactNativeFeatureFlags.js +16 -6
- package/template/package.json +5 -5
- package/third-party-podspecs/RCT-Folly.podspec +1 -0
- package/types/public/ReactNativeTVTypes.d.ts +6 -10
- package/Libraries/React-Native +0 -214
- package/ReactAndroid/src/main/java/com/facebook/react/ReactAndroidHWInputDeviceHelper.java +0 -98
|
@@ -92,7 +92,7 @@ public abstract class com/facebook/react/ReactActivity : androidx/appcompat/app/
|
|
|
92
92
|
protected fun <init> ()V
|
|
93
93
|
protected fun createReactActivityDelegate ()Lcom/facebook/react/ReactActivityDelegate;
|
|
94
94
|
protected fun getMainComponentName ()Ljava/lang/String;
|
|
95
|
-
public fun getReactDelegate ()
|
|
95
|
+
public fun getReactDelegate ()Lcom/facebook/react/ReactDelegate;
|
|
96
96
|
protected final fun getReactInstanceManager ()Lcom/facebook/react/ReactInstanceManager;
|
|
97
97
|
protected final fun getReactNativeHost ()Lcom/facebook/react/ReactNativeHost;
|
|
98
98
|
public fun invokeDefaultOnBackPressed ()V
|
|
@@ -7697,4 +7697,3 @@ public class com/facebook/react/views/view/ViewGroupClickEvent : com/facebook/re
|
|
|
7697
7697
|
protected fun getEventData ()Lcom/facebook/react/bridge/WritableMap;
|
|
7698
7698
|
public fun getEventName ()Ljava/lang/String;
|
|
7699
7699
|
}
|
|
7700
|
-
|
|
@@ -65,8 +65,8 @@ public abstract class ReactActivity extends AppCompatActivity
|
|
|
65
65
|
mDelegate.onDestroy();
|
|
66
66
|
}
|
|
67
67
|
|
|
68
|
-
public
|
|
69
|
-
mDelegate.getReactDelegate();
|
|
68
|
+
public @Nullable ReactDelegate getReactDelegate() {
|
|
69
|
+
return mDelegate.getReactDelegate();
|
|
70
70
|
}
|
|
71
71
|
|
|
72
72
|
@Override
|
|
@@ -15,6 +15,7 @@ import android.view.KeyEvent;
|
|
|
15
15
|
import androidx.annotation.NonNull;
|
|
16
16
|
import androidx.annotation.Nullable;
|
|
17
17
|
import com.facebook.infer.annotation.Assertions;
|
|
18
|
+
import com.facebook.react.bridge.UiThreadUtil;
|
|
18
19
|
import com.facebook.react.config.ReactFeatureFlags;
|
|
19
20
|
import com.facebook.react.devsupport.DisabledDevSupportManager;
|
|
20
21
|
import com.facebook.react.devsupport.DoubleTapReloadRecognizer;
|
|
@@ -99,7 +100,7 @@ public class ReactDelegate {
|
|
|
99
100
|
&& mReactHost.getDevSupportManager() != null) {
|
|
100
101
|
return mReactHost.getDevSupportManager();
|
|
101
102
|
} else if (getReactNativeHost().hasInstance()
|
|
102
|
-
&& getReactNativeHost().
|
|
103
|
+
&& getReactNativeHost().getReactInstanceManager() != null) {
|
|
103
104
|
return getReactNativeHost().getReactInstanceManager().getDevSupportManager();
|
|
104
105
|
} else {
|
|
105
106
|
return null;
|
|
@@ -241,17 +242,31 @@ public class ReactDelegate {
|
|
|
241
242
|
|
|
242
243
|
public void reload() {
|
|
243
244
|
DevSupportManager devSupportManager = getDevSupportManager();
|
|
244
|
-
if (devSupportManager
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
245
|
+
if (devSupportManager == null) {
|
|
246
|
+
return;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
// Reload in RELEASE mode
|
|
250
|
+
if (devSupportManager instanceof DisabledDevSupportManager) {
|
|
251
|
+
// Do not reload the bundle from JS as there is no bundler running in release mode.
|
|
252
|
+
if (ReactFeatureFlags.enableBridgelessArchitecture) {
|
|
253
|
+
if (mReactHost != null) {
|
|
254
|
+
mReactHost.reload("ReactDelegate.reload()");
|
|
255
|
+
}
|
|
251
256
|
} else {
|
|
252
|
-
|
|
257
|
+
UiThreadUtil.runOnUiThread(
|
|
258
|
+
() -> {
|
|
259
|
+
if (mReactNativeHost.hasInstance()
|
|
260
|
+
&& mReactNativeHost.getReactInstanceManager() != null) {
|
|
261
|
+
mReactNativeHost.getReactInstanceManager().recreateReactContextInBackground();
|
|
262
|
+
}
|
|
263
|
+
});
|
|
253
264
|
}
|
|
265
|
+
return;
|
|
254
266
|
}
|
|
267
|
+
|
|
268
|
+
// Reload in DEBUG mode
|
|
269
|
+
devSupportManager.handleReloadJS();
|
|
255
270
|
}
|
|
256
271
|
|
|
257
272
|
public void loadApp() {
|
package/ReactAndroid/src/main/java/com/facebook/react/defaults/DefaultNewArchitectureEntryPoint.kt
CHANGED
|
@@ -11,6 +11,8 @@ package com.facebook.react.defaults
|
|
|
11
11
|
|
|
12
12
|
import com.facebook.react.common.annotations.VisibleForTesting
|
|
13
13
|
import com.facebook.react.config.ReactFeatureFlags
|
|
14
|
+
import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags
|
|
15
|
+
import com.facebook.react.internal.featureflags.ReactNativeFeatureFlagsDefaults
|
|
14
16
|
|
|
15
17
|
/**
|
|
16
18
|
* A utility class that serves as an entry point for users setup the New Architecture.
|
|
@@ -45,6 +47,19 @@ public object DefaultNewArchitectureEntryPoint {
|
|
|
45
47
|
ReactFeatureFlags.unstable_useTurboModuleInterop = bridgelessEnabled
|
|
46
48
|
ReactFeatureFlags.enableFabricPendingEventQueue = fabricEnabled
|
|
47
49
|
|
|
50
|
+
if (bridgelessEnabled) {
|
|
51
|
+
ReactNativeFeatureFlags.override(
|
|
52
|
+
object : ReactNativeFeatureFlagsDefaults() {
|
|
53
|
+
override fun useModernRuntimeScheduler(): Boolean = true
|
|
54
|
+
|
|
55
|
+
override fun enableMicrotasks(): Boolean = true
|
|
56
|
+
|
|
57
|
+
override fun batchRenderingUpdatesInEventLoop(): Boolean = true
|
|
58
|
+
|
|
59
|
+
override fun androidEnablePendingFabricTransactions(): Boolean = true
|
|
60
|
+
})
|
|
61
|
+
}
|
|
62
|
+
|
|
48
63
|
privateFabricEnabled = fabricEnabled
|
|
49
64
|
privateTurboModulesEnabled = turboModulesEnabled
|
|
50
65
|
privateConcurrentReactEnabled = fabricEnabled
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*
|
|
7
|
-
* @generated SignedSource<<
|
|
7
|
+
* @generated SignedSource<<b86e9fd5499308ce65b389342eb436a2>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -34,6 +34,24 @@ public object ReactNativeFeatureFlags {
|
|
|
34
34
|
@JvmStatic
|
|
35
35
|
public fun commonTestFlag(): Boolean = accessor.commonTestFlag()
|
|
36
36
|
|
|
37
|
+
/**
|
|
38
|
+
* To be used with batchRenderingUpdatesInEventLoop. When enbled, the Android mounting layer will concatenate pending transactions to ensure they're applied atomatically
|
|
39
|
+
*/
|
|
40
|
+
@JvmStatic
|
|
41
|
+
public fun androidEnablePendingFabricTransactions(): Boolean = accessor.androidEnablePendingFabricTransactions()
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* When enabled, the RuntimeScheduler processing the event loop will batch all rendering updates and dispatch them together at the end of each iteration of the loop.
|
|
45
|
+
*/
|
|
46
|
+
@JvmStatic
|
|
47
|
+
public fun batchRenderingUpdatesInEventLoop(): Boolean = accessor.batchRenderingUpdatesInEventLoop()
|
|
48
|
+
|
|
49
|
+
/**
|
|
50
|
+
* When enabled, ReactInstanceManager will clean up Fabric surfaces on destroy().
|
|
51
|
+
*/
|
|
52
|
+
@JvmStatic
|
|
53
|
+
public fun destroyFabricSurfacesInReactInstanceManager(): Boolean = accessor.destroyFabricSurfacesInReactInstanceManager()
|
|
54
|
+
|
|
37
55
|
/**
|
|
38
56
|
* Enables the use of a background executor to compute layout and commit updates on Fabric (this system is deprecated and should not be used).
|
|
39
57
|
*/
|
|
@@ -52,12 +70,6 @@ public object ReactNativeFeatureFlags {
|
|
|
52
70
|
@JvmStatic
|
|
53
71
|
public fun enableMicrotasks(): Boolean = accessor.enableMicrotasks()
|
|
54
72
|
|
|
55
|
-
/**
|
|
56
|
-
* When enabled, the RuntimeScheduler processing the event loop will batch all rendering updates and dispatch them together at the end of each iteration of the loop.
|
|
57
|
-
*/
|
|
58
|
-
@JvmStatic
|
|
59
|
-
public fun batchRenderingUpdatesInEventLoop(): Boolean = accessor.batchRenderingUpdatesInEventLoop()
|
|
60
|
-
|
|
61
73
|
/**
|
|
62
74
|
* Uses new, deduplicated logic for constructing Android Spannables from text fragments
|
|
63
75
|
*/
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*
|
|
7
|
-
* @generated SignedSource<<
|
|
7
|
+
* @generated SignedSource<<c0a85b92bca9bb03f28af67224239c09>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -21,10 +21,12 @@ package com.facebook.react.internal.featureflags
|
|
|
21
21
|
|
|
22
22
|
public class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAccessor {
|
|
23
23
|
private var commonTestFlagCache: Boolean? = null
|
|
24
|
+
private var androidEnablePendingFabricTransactionsCache: Boolean? = null
|
|
25
|
+
private var batchRenderingUpdatesInEventLoopCache: Boolean? = null
|
|
26
|
+
private var destroyFabricSurfacesInReactInstanceManagerCache: Boolean? = null
|
|
24
27
|
private var enableBackgroundExecutorCache: Boolean? = null
|
|
25
28
|
private var useModernRuntimeSchedulerCache: Boolean? = null
|
|
26
29
|
private var enableMicrotasksCache: Boolean? = null
|
|
27
|
-
private var batchRenderingUpdatesInEventLoopCache: Boolean? = null
|
|
28
30
|
private var enableSpannableBuildingUnificationCache: Boolean? = null
|
|
29
31
|
private var enableCustomDrawOrderFabricCache: Boolean? = null
|
|
30
32
|
private var enableFixForClippedSubviewsCrashCache: Boolean? = null
|
|
@@ -40,6 +42,33 @@ public class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAccesso
|
|
|
40
42
|
return cached
|
|
41
43
|
}
|
|
42
44
|
|
|
45
|
+
override fun androidEnablePendingFabricTransactions(): Boolean {
|
|
46
|
+
var cached = androidEnablePendingFabricTransactionsCache
|
|
47
|
+
if (cached == null) {
|
|
48
|
+
cached = ReactNativeFeatureFlagsCxxInterop.androidEnablePendingFabricTransactions()
|
|
49
|
+
androidEnablePendingFabricTransactionsCache = cached
|
|
50
|
+
}
|
|
51
|
+
return cached
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
override fun batchRenderingUpdatesInEventLoop(): Boolean {
|
|
55
|
+
var cached = batchRenderingUpdatesInEventLoopCache
|
|
56
|
+
if (cached == null) {
|
|
57
|
+
cached = ReactNativeFeatureFlagsCxxInterop.batchRenderingUpdatesInEventLoop()
|
|
58
|
+
batchRenderingUpdatesInEventLoopCache = cached
|
|
59
|
+
}
|
|
60
|
+
return cached
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
override fun destroyFabricSurfacesInReactInstanceManager(): Boolean {
|
|
64
|
+
var cached = destroyFabricSurfacesInReactInstanceManagerCache
|
|
65
|
+
if (cached == null) {
|
|
66
|
+
cached = ReactNativeFeatureFlagsCxxInterop.destroyFabricSurfacesInReactInstanceManager()
|
|
67
|
+
destroyFabricSurfacesInReactInstanceManagerCache = cached
|
|
68
|
+
}
|
|
69
|
+
return cached
|
|
70
|
+
}
|
|
71
|
+
|
|
43
72
|
override fun enableBackgroundExecutor(): Boolean {
|
|
44
73
|
var cached = enableBackgroundExecutorCache
|
|
45
74
|
if (cached == null) {
|
|
@@ -67,15 +96,6 @@ public class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAccesso
|
|
|
67
96
|
return cached
|
|
68
97
|
}
|
|
69
98
|
|
|
70
|
-
override fun batchRenderingUpdatesInEventLoop(): Boolean {
|
|
71
|
-
var cached = batchRenderingUpdatesInEventLoopCache
|
|
72
|
-
if (cached == null) {
|
|
73
|
-
cached = ReactNativeFeatureFlagsCxxInterop.batchRenderingUpdatesInEventLoop()
|
|
74
|
-
batchRenderingUpdatesInEventLoopCache = cached
|
|
75
|
-
}
|
|
76
|
-
return cached
|
|
77
|
-
}
|
|
78
|
-
|
|
79
99
|
override fun enableSpannableBuildingUnification(): Boolean {
|
|
80
100
|
var cached = enableSpannableBuildingUnificationCache
|
|
81
101
|
if (cached == null) {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*
|
|
7
|
-
* @generated SignedSource<<
|
|
7
|
+
* @generated SignedSource<<5fece1bcbbd750b82b8e4b125c57101e>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -30,14 +30,18 @@ public object ReactNativeFeatureFlagsCxxInterop {
|
|
|
30
30
|
|
|
31
31
|
@DoNotStrip @JvmStatic public external fun commonTestFlag(): Boolean
|
|
32
32
|
|
|
33
|
+
@DoNotStrip @JvmStatic public external fun androidEnablePendingFabricTransactions(): Boolean
|
|
34
|
+
|
|
35
|
+
@DoNotStrip @JvmStatic public external fun batchRenderingUpdatesInEventLoop(): Boolean
|
|
36
|
+
|
|
37
|
+
@DoNotStrip @JvmStatic public external fun destroyFabricSurfacesInReactInstanceManager(): Boolean
|
|
38
|
+
|
|
33
39
|
@DoNotStrip @JvmStatic public external fun enableBackgroundExecutor(): Boolean
|
|
34
40
|
|
|
35
41
|
@DoNotStrip @JvmStatic public external fun useModernRuntimeScheduler(): Boolean
|
|
36
42
|
|
|
37
43
|
@DoNotStrip @JvmStatic public external fun enableMicrotasks(): Boolean
|
|
38
44
|
|
|
39
|
-
@DoNotStrip @JvmStatic public external fun batchRenderingUpdatesInEventLoop(): Boolean
|
|
40
|
-
|
|
41
45
|
@DoNotStrip @JvmStatic public external fun enableSpannableBuildingUnification(): Boolean
|
|
42
46
|
|
|
43
47
|
@DoNotStrip @JvmStatic public external fun enableCustomDrawOrderFabric(): Boolean
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*
|
|
7
|
-
* @generated SignedSource<<
|
|
7
|
+
* @generated SignedSource<<4462edcf10a85654be7c71a7438a2288>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -25,14 +25,18 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
|
|
|
25
25
|
|
|
26
26
|
override fun commonTestFlag(): Boolean = false
|
|
27
27
|
|
|
28
|
+
override fun androidEnablePendingFabricTransactions(): Boolean = false
|
|
29
|
+
|
|
30
|
+
override fun batchRenderingUpdatesInEventLoop(): Boolean = false
|
|
31
|
+
|
|
32
|
+
override fun destroyFabricSurfacesInReactInstanceManager(): Boolean = false
|
|
33
|
+
|
|
28
34
|
override fun enableBackgroundExecutor(): Boolean = false
|
|
29
35
|
|
|
30
36
|
override fun useModernRuntimeScheduler(): Boolean = false
|
|
31
37
|
|
|
32
38
|
override fun enableMicrotasks(): Boolean = false
|
|
33
39
|
|
|
34
|
-
override fun batchRenderingUpdatesInEventLoop(): Boolean = false
|
|
35
|
-
|
|
36
40
|
override fun enableSpannableBuildingUnification(): Boolean = false
|
|
37
41
|
|
|
38
42
|
override fun enableCustomDrawOrderFabric(): Boolean = false
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*
|
|
7
|
-
* @generated SignedSource<<
|
|
7
|
+
* @generated SignedSource<<e02f6a9473a98f27ee44ff303db9e0b7>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -25,10 +25,12 @@ public class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcces
|
|
|
25
25
|
private val accessedFeatureFlags = mutableSetOf<String>()
|
|
26
26
|
|
|
27
27
|
private var commonTestFlagCache: Boolean? = null
|
|
28
|
+
private var androidEnablePendingFabricTransactionsCache: Boolean? = null
|
|
29
|
+
private var batchRenderingUpdatesInEventLoopCache: Boolean? = null
|
|
30
|
+
private var destroyFabricSurfacesInReactInstanceManagerCache: Boolean? = null
|
|
28
31
|
private var enableBackgroundExecutorCache: Boolean? = null
|
|
29
32
|
private var useModernRuntimeSchedulerCache: Boolean? = null
|
|
30
33
|
private var enableMicrotasksCache: Boolean? = null
|
|
31
|
-
private var batchRenderingUpdatesInEventLoopCache: Boolean? = null
|
|
32
34
|
private var enableSpannableBuildingUnificationCache: Boolean? = null
|
|
33
35
|
private var enableCustomDrawOrderFabricCache: Boolean? = null
|
|
34
36
|
private var enableFixForClippedSubviewsCrashCache: Boolean? = null
|
|
@@ -45,6 +47,36 @@ public class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcces
|
|
|
45
47
|
return cached
|
|
46
48
|
}
|
|
47
49
|
|
|
50
|
+
override fun androidEnablePendingFabricTransactions(): Boolean {
|
|
51
|
+
var cached = androidEnablePendingFabricTransactionsCache
|
|
52
|
+
if (cached == null) {
|
|
53
|
+
cached = currentProvider.androidEnablePendingFabricTransactions()
|
|
54
|
+
accessedFeatureFlags.add("androidEnablePendingFabricTransactions")
|
|
55
|
+
androidEnablePendingFabricTransactionsCache = cached
|
|
56
|
+
}
|
|
57
|
+
return cached
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
override fun batchRenderingUpdatesInEventLoop(): Boolean {
|
|
61
|
+
var cached = batchRenderingUpdatesInEventLoopCache
|
|
62
|
+
if (cached == null) {
|
|
63
|
+
cached = currentProvider.batchRenderingUpdatesInEventLoop()
|
|
64
|
+
accessedFeatureFlags.add("batchRenderingUpdatesInEventLoop")
|
|
65
|
+
batchRenderingUpdatesInEventLoopCache = cached
|
|
66
|
+
}
|
|
67
|
+
return cached
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
override fun destroyFabricSurfacesInReactInstanceManager(): Boolean {
|
|
71
|
+
var cached = destroyFabricSurfacesInReactInstanceManagerCache
|
|
72
|
+
if (cached == null) {
|
|
73
|
+
cached = currentProvider.destroyFabricSurfacesInReactInstanceManager()
|
|
74
|
+
accessedFeatureFlags.add("destroyFabricSurfacesInReactInstanceManager")
|
|
75
|
+
destroyFabricSurfacesInReactInstanceManagerCache = cached
|
|
76
|
+
}
|
|
77
|
+
return cached
|
|
78
|
+
}
|
|
79
|
+
|
|
48
80
|
override fun enableBackgroundExecutor(): Boolean {
|
|
49
81
|
var cached = enableBackgroundExecutorCache
|
|
50
82
|
if (cached == null) {
|
|
@@ -75,16 +107,6 @@ public class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcces
|
|
|
75
107
|
return cached
|
|
76
108
|
}
|
|
77
109
|
|
|
78
|
-
override fun batchRenderingUpdatesInEventLoop(): Boolean {
|
|
79
|
-
var cached = batchRenderingUpdatesInEventLoopCache
|
|
80
|
-
if (cached == null) {
|
|
81
|
-
cached = currentProvider.batchRenderingUpdatesInEventLoop()
|
|
82
|
-
accessedFeatureFlags.add("batchRenderingUpdatesInEventLoop")
|
|
83
|
-
batchRenderingUpdatesInEventLoopCache = cached
|
|
84
|
-
}
|
|
85
|
-
return cached
|
|
86
|
-
}
|
|
87
|
-
|
|
88
110
|
override fun enableSpannableBuildingUnification(): Boolean {
|
|
89
111
|
var cached = enableSpannableBuildingUnificationCache
|
|
90
112
|
if (cached == null) {
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* This source code is licensed under the MIT license found in the
|
|
5
5
|
* LICENSE file in the root directory of this source tree.
|
|
6
6
|
*
|
|
7
|
-
* @generated SignedSource<<
|
|
7
|
+
* @generated SignedSource<<9190129a45a19b25dd23126f05b03356>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -25,14 +25,18 @@ import com.facebook.proguard.annotations.DoNotStrip
|
|
|
25
25
|
public interface ReactNativeFeatureFlagsProvider {
|
|
26
26
|
@DoNotStrip public fun commonTestFlag(): Boolean
|
|
27
27
|
|
|
28
|
+
@DoNotStrip public fun androidEnablePendingFabricTransactions(): Boolean
|
|
29
|
+
|
|
30
|
+
@DoNotStrip public fun batchRenderingUpdatesInEventLoop(): Boolean
|
|
31
|
+
|
|
32
|
+
@DoNotStrip public fun destroyFabricSurfacesInReactInstanceManager(): Boolean
|
|
33
|
+
|
|
28
34
|
@DoNotStrip public fun enableBackgroundExecutor(): Boolean
|
|
29
35
|
|
|
30
36
|
@DoNotStrip public fun useModernRuntimeScheduler(): Boolean
|
|
31
37
|
|
|
32
38
|
@DoNotStrip public fun enableMicrotasks(): Boolean
|
|
33
39
|
|
|
34
|
-
@DoNotStrip public fun batchRenderingUpdatesInEventLoop(): Boolean
|
|
35
|
-
|
|
36
40
|
@DoNotStrip public fun enableSpannableBuildingUnification(): Boolean
|
|
37
41
|
|
|
38
42
|
@DoNotStrip public fun enableCustomDrawOrderFabric(): Boolean
|
|
@@ -92,25 +92,20 @@ public class BridgelessCatalystInstance(private val reactHost: ReactHostImpl) :
|
|
|
92
92
|
throw UnsupportedOperationException("Unimplemented method 'initialize'")
|
|
93
93
|
}
|
|
94
94
|
|
|
95
|
-
override fun getReactQueueConfiguration(): ReactQueueConfiguration
|
|
96
|
-
|
|
97
|
-
}
|
|
95
|
+
override fun getReactQueueConfiguration(): ReactQueueConfiguration =
|
|
96
|
+
reactHost.reactQueueConfiguration!!
|
|
98
97
|
|
|
99
|
-
override fun <T : JavaScriptModule> getJSModule(jsInterface: Class<T>): T
|
|
100
|
-
|
|
101
|
-
}
|
|
98
|
+
override fun <T : JavaScriptModule> getJSModule(jsInterface: Class<T>): T =
|
|
99
|
+
reactHost.currentReactContext?.getJSModule(jsInterface)!!
|
|
102
100
|
|
|
103
|
-
override fun <T : NativeModule> hasNativeModule(nativeModuleInterface: Class<T>): Boolean
|
|
104
|
-
|
|
105
|
-
}
|
|
101
|
+
override fun <T : NativeModule> hasNativeModule(nativeModuleInterface: Class<T>): Boolean =
|
|
102
|
+
reactHost.hasNativeModule(nativeModuleInterface)
|
|
106
103
|
|
|
107
|
-
override fun <T : NativeModule> getNativeModule(nativeModuleInterface: Class<T>): T?
|
|
108
|
-
|
|
109
|
-
}
|
|
104
|
+
override fun <T : NativeModule> getNativeModule(nativeModuleInterface: Class<T>): T? =
|
|
105
|
+
reactHost.getNativeModule(nativeModuleInterface)
|
|
110
106
|
|
|
111
|
-
override fun getNativeModule(moduleName: String): NativeModule?
|
|
112
|
-
|
|
113
|
-
}
|
|
107
|
+
override fun getNativeModule(moduleName: String): NativeModule? =
|
|
108
|
+
reactHost.getNativeModule(moduleName)
|
|
114
109
|
|
|
115
110
|
@Deprecated(
|
|
116
111
|
message =
|
|
@@ -119,9 +114,7 @@ public class BridgelessCatalystInstance(private val reactHost: ReactHostImpl) :
|
|
|
119
114
|
throw UnsupportedOperationException("Unimplemented method 'getJSIModule'")
|
|
120
115
|
}
|
|
121
116
|
|
|
122
|
-
override fun getNativeModules(): Collection<NativeModule>
|
|
123
|
-
throw UnsupportedOperationException("Unimplemented method 'getNativeModules'")
|
|
124
|
-
}
|
|
117
|
+
override fun getNativeModules(): Collection<NativeModule> = reactHost.getNativeModules()
|
|
125
118
|
|
|
126
119
|
override fun extendNativeModules(modules: NativeModuleRegistry) {
|
|
127
120
|
throw UnsupportedOperationException("Unimplemented method 'extendNativeModules'")
|
|
@@ -592,6 +592,16 @@ public class ReactHostImpl implements ReactHost {
|
|
|
592
592
|
return null;
|
|
593
593
|
}
|
|
594
594
|
|
|
595
|
+
/* package */
|
|
596
|
+
@Nullable
|
|
597
|
+
NativeModule getNativeModule(String nativeModuleName) {
|
|
598
|
+
final ReactInstance reactInstance = mReactInstanceTaskRef.get().getResult();
|
|
599
|
+
if (reactInstance != null) {
|
|
600
|
+
return reactInstance.getNativeModule(nativeModuleName);
|
|
601
|
+
}
|
|
602
|
+
return null;
|
|
603
|
+
}
|
|
604
|
+
|
|
595
605
|
/* package */
|
|
596
606
|
@Nullable
|
|
597
607
|
RuntimeExecutor getRuntimeExecutor() {
|
|
@@ -643,11 +653,12 @@ public class ReactHostImpl implements ReactHost {
|
|
|
643
653
|
ReactContext currentContext = getCurrentReactContext();
|
|
644
654
|
if (currentContext != null) {
|
|
645
655
|
currentContext.onActivityResult(activity, requestCode, resultCode, data);
|
|
656
|
+
} else {
|
|
657
|
+
ReactSoftExceptionLogger.logSoftException(
|
|
658
|
+
TAG,
|
|
659
|
+
new ReactNoCrashSoftException(
|
|
660
|
+
"Tried to access onActivityResult while context is not ready"));
|
|
646
661
|
}
|
|
647
|
-
ReactSoftExceptionLogger.logSoftException(
|
|
648
|
-
TAG,
|
|
649
|
-
new ReactNoCrashSoftException(
|
|
650
|
-
"Tried to access onActivityResult while context is not ready"));
|
|
651
662
|
}
|
|
652
663
|
|
|
653
664
|
/* To be called when focus has changed for the hosting window. */
|
|
@@ -660,11 +671,12 @@ public class ReactHostImpl implements ReactHost {
|
|
|
660
671
|
ReactContext currentContext = getCurrentReactContext();
|
|
661
672
|
if (currentContext != null) {
|
|
662
673
|
currentContext.onWindowFocusChange(hasFocus);
|
|
674
|
+
} else {
|
|
675
|
+
ReactSoftExceptionLogger.logSoftException(
|
|
676
|
+
TAG,
|
|
677
|
+
new ReactNoCrashSoftException(
|
|
678
|
+
"Tried to access onWindowFocusChange while context is not ready"));
|
|
663
679
|
}
|
|
664
|
-
ReactSoftExceptionLogger.logSoftException(
|
|
665
|
-
TAG,
|
|
666
|
-
new ReactNoCrashSoftException(
|
|
667
|
-
"Tried to access onWindowFocusChange while context is not ready"));
|
|
668
680
|
}
|
|
669
681
|
|
|
670
682
|
/* This method will give JS the opportunity to receive intents via Linking.
|
|
@@ -691,10 +703,11 @@ public class ReactHostImpl implements ReactHost {
|
|
|
691
703
|
}
|
|
692
704
|
}
|
|
693
705
|
currentContext.onNewIntent(getCurrentActivity(), intent);
|
|
706
|
+
} else {
|
|
707
|
+
ReactSoftExceptionLogger.logSoftException(
|
|
708
|
+
TAG,
|
|
709
|
+
new ReactNoCrashSoftException("Tried to access onNewIntent while context is not ready"));
|
|
694
710
|
}
|
|
695
|
-
ReactSoftExceptionLogger.logSoftException(
|
|
696
|
-
TAG,
|
|
697
|
-
new ReactNoCrashSoftException("Tried to access onNewIntent while context is not ready"));
|
|
698
711
|
}
|
|
699
712
|
|
|
700
713
|
@ThreadConfined(UI)
|
|
@@ -1513,9 +1526,9 @@ public class ReactHostImpl implements ReactHost {
|
|
|
1513
1526
|
|
|
1514
1527
|
// Step 3: Stop all React Native surfaces
|
|
1515
1528
|
stopAttachedSurfaces(method, reactInstance);
|
|
1516
|
-
|
|
1517
|
-
|
|
1518
|
-
|
|
1529
|
+
synchronized (mAttachedSurfaces) {
|
|
1530
|
+
mAttachedSurfaces.clear();
|
|
1531
|
+
}
|
|
1519
1532
|
|
|
1520
1533
|
return task;
|
|
1521
1534
|
},
|
|
@@ -90,8 +90,6 @@ public class ReactModalHostView extends ViewGroup implements LifecycleEventListe
|
|
|
90
90
|
private boolean mPropertyRequiresNewDialog;
|
|
91
91
|
private @Nullable DialogInterface.OnShowListener mOnShowListener;
|
|
92
92
|
private @Nullable OnRequestCloseListener mOnRequestCloseListener;
|
|
93
|
-
private final ReactAndroidHWInputDeviceHelper mAndroidHWInputDeviceHelper =
|
|
94
|
-
new ReactAndroidHWInputDeviceHelper();
|
|
95
93
|
|
|
96
94
|
public ReactModalHostView(ThemedReactContext context) {
|
|
97
95
|
super(context);
|
|
@@ -305,7 +303,7 @@ public class ReactModalHostView extends ViewGroup implements LifecycleEventListe
|
|
|
305
303
|
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
|
|
306
304
|
// Modal needs to send the key event to its own TV event handler
|
|
307
305
|
// https://github.com/react-native-tvos/react-native-tvos/issues/609
|
|
308
|
-
mAndroidHWInputDeviceHelper.handleKeyEvent(event, mHostView.mReactContext);
|
|
306
|
+
mHostView.mAndroidHWInputDeviceHelper.handleKeyEvent(event, mHostView.mReactContext);
|
|
309
307
|
if (event.getAction() == KeyEvent.ACTION_UP) {
|
|
310
308
|
// We need to stop the BACK button and ESCAPE key from closing the dialog by default
|
|
311
309
|
// so we capture that event and instead inform JS so that it can make the decision as
|
|
@@ -474,8 +474,7 @@ std::shared_ptr<FabricMountingManager> Binding::getMountingManager(
|
|
|
474
474
|
|
|
475
475
|
void Binding::schedulerDidFinishTransaction(
|
|
476
476
|
const MountingCoordinator::Shared& mountingCoordinator) {
|
|
477
|
-
|
|
478
|
-
if (!mountingManager) {
|
|
477
|
+
if (!ReactNativeFeatureFlags::androidEnablePendingFabricTransactions()) {
|
|
479
478
|
return;
|
|
480
479
|
}
|
|
481
480
|
|
|
@@ -483,7 +482,43 @@ void Binding::schedulerDidFinishTransaction(
|
|
|
483
482
|
if (!mountingTransaction.has_value()) {
|
|
484
483
|
return;
|
|
485
484
|
}
|
|
486
|
-
|
|
485
|
+
|
|
486
|
+
std::unique_lock<std::mutex> lock(pendingTransactionsMutex_);
|
|
487
|
+
auto pendingTransaction = std::find_if(
|
|
488
|
+
pendingTransactions_.begin(),
|
|
489
|
+
pendingTransactions_.end(),
|
|
490
|
+
[&](const auto& transaction) {
|
|
491
|
+
return transaction.getSurfaceId() ==
|
|
492
|
+
mountingTransaction->getSurfaceId();
|
|
493
|
+
});
|
|
494
|
+
|
|
495
|
+
if (pendingTransaction != pendingTransactions_.end()) {
|
|
496
|
+
pendingTransaction->mergeWith(std::move(*mountingTransaction));
|
|
497
|
+
} else {
|
|
498
|
+
pendingTransactions_.push_back(std::move(*mountingTransaction));
|
|
499
|
+
}
|
|
500
|
+
}
|
|
501
|
+
|
|
502
|
+
void Binding::schedulerShouldRenderTransactions(
|
|
503
|
+
const MountingCoordinator::Shared& mountingCoordinator) {
|
|
504
|
+
auto mountingManager =
|
|
505
|
+
getMountingManager("schedulerShouldRenderTransactions");
|
|
506
|
+
if (!mountingManager) {
|
|
507
|
+
return;
|
|
508
|
+
}
|
|
509
|
+
|
|
510
|
+
if (ReactNativeFeatureFlags::androidEnablePendingFabricTransactions()) {
|
|
511
|
+
std::unique_lock<std::mutex> lock(pendingTransactionsMutex_);
|
|
512
|
+
for (auto& transaction : pendingTransactions_) {
|
|
513
|
+
mountingManager->executeMount(transaction);
|
|
514
|
+
}
|
|
515
|
+
pendingTransactions_.clear();
|
|
516
|
+
} else {
|
|
517
|
+
auto mountingTransaction = mountingCoordinator->pullTransaction();
|
|
518
|
+
if (mountingTransaction.has_value()) {
|
|
519
|
+
mountingManager->executeMount(*mountingTransaction);
|
|
520
|
+
}
|
|
521
|
+
}
|
|
487
522
|
}
|
|
488
523
|
|
|
489
524
|
void Binding::schedulerDidRequestPreliminaryViewAllocation(
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
#pragma once
|
|
9
9
|
|
|
10
10
|
#include <memory>
|
|
11
|
+
#include <mutex>
|
|
11
12
|
#include <shared_mutex>
|
|
12
13
|
#include <unordered_map>
|
|
13
14
|
|
|
@@ -101,6 +102,9 @@ class Binding : public jni::HybridClass<Binding, JBinding>,
|
|
|
101
102
|
void schedulerDidFinishTransaction(
|
|
102
103
|
const MountingCoordinator::Shared& mountingCoordinator) override;
|
|
103
104
|
|
|
105
|
+
void schedulerShouldRenderTransactions(
|
|
106
|
+
const MountingCoordinator::Shared& mountingCoordinator) override;
|
|
107
|
+
|
|
104
108
|
void schedulerDidRequestPreliminaryViewAllocation(
|
|
105
109
|
const SurfaceId surfaceId,
|
|
106
110
|
const ShadowNode& shadowNode) override;
|
|
@@ -146,6 +150,10 @@ class Binding : public jni::HybridClass<Binding, JBinding>,
|
|
|
146
150
|
std::shared_mutex
|
|
147
151
|
surfaceHandlerRegistryMutex_; // Protects `surfaceHandlerRegistry_`.
|
|
148
152
|
|
|
153
|
+
// Track pending transactions, one per surfaceId
|
|
154
|
+
std::mutex pendingTransactionsMutex_;
|
|
155
|
+
std::vector<MountingTransaction> pendingTransactions_;
|
|
156
|
+
|
|
149
157
|
float pointScaleFactor_ = 1;
|
|
150
158
|
|
|
151
159
|
std::shared_ptr<const ReactNativeConfig> reactNativeConfig_{nullptr};
|