react-native-tvos 0.85.0-0rc5 → 0.85.3-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/Components/ScrollView/AndroidHorizontalScrollViewNativeComponent.js +1 -0
- package/Libraries/Components/ScrollView/ScrollView.d.ts +7 -0
- package/Libraries/Components/ScrollView/ScrollView.js +6 -0
- package/Libraries/Components/ScrollView/ScrollViewNativeComponent.js +2 -0
- package/Libraries/Components/ScrollView/ScrollViewNativeComponentType.js +1 -0
- package/Libraries/Components/TextInput/AndroidTextInputNativeComponent.js +5 -1
- package/Libraries/Components/TextInput/TextInput.flow.js +1 -0
- package/Libraries/Core/ReactNativeVersion.js +2 -2
- package/Libraries/Utilities/HMRClient.js +28 -1
- package/README.md +52 -0
- package/React/Base/RCTVersion.m +2 -2
- package/React/CoreModules/RCTDevLoadingView.mm +17 -0
- package/React/CoreModules/RCTJscSafeUrl+Internal.h +23 -0
- package/React/CoreModules/RCTJscSafeUrl.mm +38 -0
- package/React/CoreModules/RCTRedBox+Internal.h +42 -0
- package/React/CoreModules/RCTRedBox.mm +30 -471
- package/React/CoreModules/RCTRedBox2AnsiParser+Internal.h +22 -0
- package/React/CoreModules/RCTRedBox2AnsiParser.mm +55 -0
- package/React/CoreModules/RCTRedBox2Controller+Internal.h +34 -0
- package/React/CoreModules/RCTRedBox2Controller.mm +764 -0
- package/React/CoreModules/RCTRedBox2ErrorParser+Internal.h +46 -0
- package/React/CoreModules/RCTRedBox2ErrorParser.mm +57 -0
- package/React/CoreModules/RCTRedBoxController+Internal.h +31 -0
- package/React/CoreModules/RCTRedBoxController.mm +447 -0
- package/React/CoreModules/RCTRedBoxHMRClient+Internal.h +26 -0
- package/React/CoreModules/RCTRedBoxHMRClient.mm +125 -0
- package/React/CoreModules/React-CoreModules.podspec +1 -0
- package/React/DevSupport/RCTFrameTimingsObserver.h +24 -0
- package/React/DevSupport/RCTFrameTimingsObserver.mm +298 -0
- package/React/FBReactNativeSpec/FBReactNativeSpecJSI.h +40 -0
- package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTEnhancedScrollView.h +1 -0
- package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTEnhancedScrollView.mm +78 -0
- package/React/Fabric/Mounting/ComponentViews/ScrollView/RCTScrollViewComponentView.mm +32 -6
- package/React/Views/ScrollView/RCTScrollViewManager.m +1 -0
- package/ReactAndroid/build.gradle.kts +2 -0
- package/ReactAndroid/gradle.properties +1 -1
- package/ReactAndroid/hermes-engine/build.gradle.kts +17 -0
- package/ReactAndroid/publish.gradle +20 -46
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/InspectorFlags.kt +4 -0
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/FrameTimingSequence.kt +1 -1
- package/ReactAndroid/src/main/java/com/facebook/react/devsupport/inspector/FrameTimingsObserver.kt +127 -26
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlags.kt +31 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxAccessor.kt +51 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsCxxInterop.kt +11 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsDefaults.kt +12 -2
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsLocalAccessor.kt +56 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android.kt +5 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/featureflags/ReactNativeFeatureFlagsProvider.kt +11 -1
- package/ReactAndroid/src/main/java/com/facebook/react/internal/tracing/PerformanceTracer.kt +39 -0
- package/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkEventUtil.kt +8 -0
- package/ReactAndroid/src/main/java/com/facebook/react/modules/network/RequestBodyUtil.kt +2 -0
- package/ReactAndroid/src/main/java/com/facebook/react/modules/systeminfo/ReactNativeVersion.kt +2 -2
- package/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.kt +50 -10
- package/ReactAndroid/src/main/java/com/facebook/react/views/common/UiModeUtils.kt +20 -0
- package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollView.java +57 -8
- package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactHorizontalScrollViewManager.kt +5 -0
- package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollView.java +48 -2
- package/ReactAndroid/src/main/java/com/facebook/react/views/scroll/ReactScrollViewManager.kt +5 -0
- package/ReactAndroid/src/main/java/com/facebook/react/views/text/ReactTextView.java +28 -3
- package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputManager.kt +5 -0
- package/ReactAndroid/src/main/java/com/facebook/react/views/textinput/ReactTextInputSubmitEditingEvent.kt +6 -1
- package/ReactAndroid/src/main/jni/CMakeLists.txt +7 -0
- package/ReactAndroid/src/main/jni/react/devsupport/JInspectorFlags.cpp +22 -0
- package/ReactAndroid/src/main/jni/react/devsupport/JInspectorFlags.h +2 -0
- package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.cpp +71 -1
- package/ReactAndroid/src/main/jni/react/featureflags/JReactNativeFeatureFlagsCxxInterop.h +16 -1
- package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.cpp +14 -0
- package/ReactAndroid/src/main/jni/react/runtime/jni/JReactHostInspectorTarget.h +18 -4
- package/ReactCommon/React-Fabric.podspec +7 -0
- package/ReactCommon/cxxreact/ReactNativeVersion.h +3 -3
- package/ReactCommon/jsinspector-modern/HostAgent.cpp +36 -0
- package/ReactCommon/jsinspector-modern/HostTarget.cpp +7 -1
- package/ReactCommon/jsinspector-modern/HostTarget.h +25 -0
- package/ReactCommon/jsinspector-modern/HostTargetTracing.cpp +1 -1
- package/ReactCommon/jsinspector-modern/HostTargetTracing.h +4 -4
- package/ReactCommon/jsinspector-modern/InspectorFlags.cpp +12 -0
- package/ReactCommon/jsinspector-modern/InspectorFlags.h +12 -0
- package/ReactCommon/jsinspector-modern/NetworkIOAgent.cpp +1 -1
- package/ReactCommon/jsinspector-modern/RuntimeAgent.cpp +19 -0
- package/ReactCommon/jsinspector-modern/RuntimeAgent.h +7 -0
- package/ReactCommon/jsinspector-modern/RuntimeTarget.cpp +33 -0
- package/ReactCommon/jsinspector-modern/RuntimeTarget.h +6 -0
- package/ReactCommon/jsinspector-modern/tests/HostTargetTest.cpp +12 -0
- package/ReactCommon/jsinspector-modern/tests/InspectorMocks.h +3 -2
- package/ReactCommon/jsinspector-modern/tests/JsiIntegrationTest.cpp +1 -0
- package/ReactCommon/jsinspector-modern/tests/NetworkReporterTest.cpp +1 -1
- package/ReactCommon/jsinspector-modern/tests/TracingTest.cpp +1 -1
- package/ReactCommon/jsinspector-modern/tests/utils/InspectorFlagOverridesGuard.cpp +10 -0
- package/ReactCommon/jsinspector-modern/tests/utils/InspectorFlagOverridesGuard.h +3 -1
- package/ReactCommon/jsinspector-modern/tracing/CMakeLists.txt +1 -0
- package/ReactCommon/jsinspector-modern/tracing/FrameTimingSequence.h +7 -3
- package/ReactCommon/jsinspector-modern/tracing/HostTracingProfileSerializer.cpp +52 -29
- package/ReactCommon/jsinspector-modern/tracing/HostTracingProfileSerializer.h +6 -6
- package/ReactCommon/jsinspector-modern/tracing/PerformanceTracerSection.h +113 -0
- package/ReactCommon/jsinspector-modern/tracing/React-jsinspectortracing.podspec +1 -0
- package/ReactCommon/jsinspector-modern/tracing/TraceEventGenerator.cpp +12 -5
- package/ReactCommon/jsinspector-modern/tracing/TraceEventGenerator.h +3 -1
- package/ReactCommon/jsinspector-modern/tracing/TraceEventSerializer.cpp +42 -0
- package/ReactCommon/jsinspector-modern/tracing/TraceEventSerializer.h +7 -0
- package/ReactCommon/react/debug/CMakeLists.txt +2 -1
- package/ReactCommon/react/debug/React-debug.podspec +7 -1
- package/ReactCommon/react/debug/redbox/AnsiParser.cpp +139 -0
- package/ReactCommon/react/debug/redbox/AnsiParser.h +35 -0
- package/ReactCommon/react/debug/redbox/JscSafeUrl.cpp +179 -0
- package/ReactCommon/react/debug/redbox/JscSafeUrl.h +27 -0
- package/ReactCommon/react/debug/redbox/RedBoxErrorParser.cpp +171 -0
- package/ReactCommon/react/debug/redbox/RedBoxErrorParser.h +40 -0
- package/ReactCommon/react/debug/redbox/tests/AnsiParserTest.cpp +97 -0
- package/ReactCommon/react/debug/redbox/tests/JscSafeUrlTest.cpp +173 -0
- package/ReactCommon/react/debug/redbox/tests/RedBoxErrorParserTest.cpp +107 -0
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.cpp +21 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlags.h +26 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.cpp +135 -45
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsAccessor.h +12 -2
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDefaults.h +22 -2
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsDynamicProvider.h +46 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsOverridesOSSExperimental.h +9 -1
- package/ReactCommon/react/featureflags/ReactNativeFeatureFlagsProvider.h +6 -1
- package/ReactCommon/react/nativemodule/core/platform/ios/ReactCommon/RCTTurboModule.mm +3 -1
- package/ReactCommon/react/nativemodule/defaults/CMakeLists.txt +1 -0
- package/ReactCommon/react/nativemodule/defaults/DefaultTurboModules.cpp +7 -0
- package/ReactCommon/react/nativemodule/defaults/React-defaultsnativemodule.podspec +1 -0
- package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.cpp +26 -1
- package/ReactCommon/react/nativemodule/featureflags/NativeReactNativeFeatureFlags.h +11 -1
- package/ReactCommon/react/nativemodule/mutationobserver/NativeMutationObserver.h +4 -0
- package/ReactCommon/react/nativemodule/mutationobserver/React-mutationobservernativemodule.podspec +66 -0
- package/ReactCommon/react/performance/timeline/PerformanceObserver.cpp +18 -6
- package/ReactCommon/react/performance/timeline/PerformanceObserver.h +2 -0
- package/ReactCommon/react/renderer/animated/NativeAnimatedNodesManager.cpp +4 -1
- package/ReactCommon/react/renderer/animationbackend/AnimationBackend.cpp +58 -25
- package/ReactCommon/react/renderer/animationbackend/AnimationBackend.h +9 -0
- package/ReactCommon/react/renderer/animationbackend/AnimationChoreographer.h +5 -0
- package/ReactCommon/react/renderer/components/scrollview/BaseScrollViewProps.cpp +10 -0
- package/ReactCommon/react/renderer/components/scrollview/BaseScrollViewProps.h +1 -0
- package/ReactCommon/react/renderer/uimanager/UIManagerAnimationBackend.h +1 -0
- package/ReactCommon/react/runtime/platform/ios/ReactCommon/RCTHost.mm +115 -0
- package/ReactCommon/{jsinspector-modern → react/utils}/Base64.h +2 -2
- package/package.json +11 -11
- package/scripts/cocoapods/utils.rb +1 -0
- package/scripts/codegen/generate-artifacts-executor/generateAppDependencyProvider.js +4 -4
- package/scripts/codegen/generate-artifacts-executor/generateCustomURLHandlers.js +3 -3
- package/scripts/codegen/generate-artifacts-executor/generateNativeCode.js +2 -3
- package/scripts/codegen/generate-artifacts-executor/generatePackageSwift.js +2 -2
- package/scripts/codegen/generate-artifacts-executor/generateRCTModuleProviders.js +3 -2
- package/scripts/codegen/generate-artifacts-executor/generateRCTThirdPartyComponents.js +3 -2
- package/scripts/codegen/generate-artifacts-executor/generateReactCodegenPodspec.js +2 -2
- package/scripts/codegen/generate-artifacts-executor/generateUnstableModulesRequiringMainQueueSetupProvider.js +3 -3
- package/scripts/codegen/generate-artifacts-executor/utils.js +48 -0
- package/scripts/react_native_pods.rb +1 -0
- package/scripts/replace-rncore-version.js +72 -15
- package/src/private/featureflags/ReactNativeFeatureFlags.js +27 -2
- package/src/private/featureflags/specs/NativeReactNativeFeatureFlags.js +6 -1
- package/src/private/setup/setUpDefaultReactNativeEnvironment.js +6 -0
- package/types/public/ReactNativeTVTypes.d.ts +8 -0
|
@@ -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<<15a8caa185d134716c23c751d54015aa>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -61,6 +61,7 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
|
|
|
61
61
|
private var enableLayoutAnimationsOnIOSCache: Boolean? = null
|
|
62
62
|
private var enableMainQueueCoordinatorOnIOSCache: Boolean? = null
|
|
63
63
|
private var enableModuleArgumentNSNullConversionIOSCache: Boolean? = null
|
|
64
|
+
private var enableMutationObserverByDefaultCache: Boolean? = null
|
|
64
65
|
private var enableNativeCSSParsingCache: Boolean? = null
|
|
65
66
|
private var enableNetworkEventReportingCache: Boolean? = null
|
|
66
67
|
private var enablePreparedTextLayoutCache: Boolean? = null
|
|
@@ -79,13 +80,17 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
|
|
|
79
80
|
private var fixTextClippingAndroid15useBoundsForWidthCache: Boolean? = null
|
|
80
81
|
private var fuseboxAssertSingleHostStateCache: Boolean? = null
|
|
81
82
|
private var fuseboxEnabledReleaseCache: Boolean? = null
|
|
83
|
+
private var fuseboxFrameRecordingEnabledCache: Boolean? = null
|
|
82
84
|
private var fuseboxNetworkInspectionEnabledCache: Boolean? = null
|
|
85
|
+
private var fuseboxScreenshotCaptureEnabledCache: Boolean? = null
|
|
83
86
|
private var hideOffscreenVirtualViewsOnIOSCache: Boolean? = null
|
|
84
87
|
private var overrideBySynchronousMountPropsAtMountingAndroidCache: Boolean? = null
|
|
85
88
|
private var perfIssuesEnabledCache: Boolean? = null
|
|
86
89
|
private var perfMonitorV2EnabledCache: Boolean? = null
|
|
87
90
|
private var preparedTextCacheSizeCache: Double? = null
|
|
88
91
|
private var preventShadowTreeCommitExhaustionCache: Boolean? = null
|
|
92
|
+
private var redBoxV2AndroidCache: Boolean? = null
|
|
93
|
+
private var redBoxV2IOSCache: Boolean? = null
|
|
89
94
|
private var shouldPressibilityUseW3CPointerEventsForHoverCache: Boolean? = null
|
|
90
95
|
private var shouldTriggerResponderTransferOnScrollAndroidCache: Boolean? = null
|
|
91
96
|
private var skipActivityIdentityAssertionOnHostPauseCache: Boolean? = null
|
|
@@ -475,6 +480,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
|
|
|
475
480
|
return cached
|
|
476
481
|
}
|
|
477
482
|
|
|
483
|
+
override fun enableMutationObserverByDefault(): Boolean {
|
|
484
|
+
var cached = enableMutationObserverByDefaultCache
|
|
485
|
+
if (cached == null) {
|
|
486
|
+
cached = ReactNativeFeatureFlagsCxxInterop.enableMutationObserverByDefault()
|
|
487
|
+
enableMutationObserverByDefaultCache = cached
|
|
488
|
+
}
|
|
489
|
+
return cached
|
|
490
|
+
}
|
|
491
|
+
|
|
478
492
|
override fun enableNativeCSSParsing(): Boolean {
|
|
479
493
|
var cached = enableNativeCSSParsingCache
|
|
480
494
|
if (cached == null) {
|
|
@@ -637,6 +651,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
|
|
|
637
651
|
return cached
|
|
638
652
|
}
|
|
639
653
|
|
|
654
|
+
override fun fuseboxFrameRecordingEnabled(): Boolean {
|
|
655
|
+
var cached = fuseboxFrameRecordingEnabledCache
|
|
656
|
+
if (cached == null) {
|
|
657
|
+
cached = ReactNativeFeatureFlagsCxxInterop.fuseboxFrameRecordingEnabled()
|
|
658
|
+
fuseboxFrameRecordingEnabledCache = cached
|
|
659
|
+
}
|
|
660
|
+
return cached
|
|
661
|
+
}
|
|
662
|
+
|
|
640
663
|
override fun fuseboxNetworkInspectionEnabled(): Boolean {
|
|
641
664
|
var cached = fuseboxNetworkInspectionEnabledCache
|
|
642
665
|
if (cached == null) {
|
|
@@ -646,6 +669,15 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
|
|
|
646
669
|
return cached
|
|
647
670
|
}
|
|
648
671
|
|
|
672
|
+
override fun fuseboxScreenshotCaptureEnabled(): Boolean {
|
|
673
|
+
var cached = fuseboxScreenshotCaptureEnabledCache
|
|
674
|
+
if (cached == null) {
|
|
675
|
+
cached = ReactNativeFeatureFlagsCxxInterop.fuseboxScreenshotCaptureEnabled()
|
|
676
|
+
fuseboxScreenshotCaptureEnabledCache = cached
|
|
677
|
+
}
|
|
678
|
+
return cached
|
|
679
|
+
}
|
|
680
|
+
|
|
649
681
|
override fun hideOffscreenVirtualViewsOnIOS(): Boolean {
|
|
650
682
|
var cached = hideOffscreenVirtualViewsOnIOSCache
|
|
651
683
|
if (cached == null) {
|
|
@@ -700,6 +732,24 @@ internal class ReactNativeFeatureFlagsCxxAccessor : ReactNativeFeatureFlagsAcces
|
|
|
700
732
|
return cached
|
|
701
733
|
}
|
|
702
734
|
|
|
735
|
+
override fun redBoxV2Android(): Boolean {
|
|
736
|
+
var cached = redBoxV2AndroidCache
|
|
737
|
+
if (cached == null) {
|
|
738
|
+
cached = ReactNativeFeatureFlagsCxxInterop.redBoxV2Android()
|
|
739
|
+
redBoxV2AndroidCache = cached
|
|
740
|
+
}
|
|
741
|
+
return cached
|
|
742
|
+
}
|
|
743
|
+
|
|
744
|
+
override fun redBoxV2IOS(): Boolean {
|
|
745
|
+
var cached = redBoxV2IOSCache
|
|
746
|
+
if (cached == null) {
|
|
747
|
+
cached = ReactNativeFeatureFlagsCxxInterop.redBoxV2IOS()
|
|
748
|
+
redBoxV2IOSCache = cached
|
|
749
|
+
}
|
|
750
|
+
return cached
|
|
751
|
+
}
|
|
752
|
+
|
|
703
753
|
override fun shouldPressibilityUseW3CPointerEventsForHover(): Boolean {
|
|
704
754
|
var cached = shouldPressibilityUseW3CPointerEventsForHoverCache
|
|
705
755
|
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<<a648971d8196aa0950b623be31643a14>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -110,6 +110,8 @@ public object ReactNativeFeatureFlagsCxxInterop {
|
|
|
110
110
|
|
|
111
111
|
@DoNotStrip @JvmStatic public external fun enableModuleArgumentNSNullConversionIOS(): Boolean
|
|
112
112
|
|
|
113
|
+
@DoNotStrip @JvmStatic public external fun enableMutationObserverByDefault(): Boolean
|
|
114
|
+
|
|
113
115
|
@DoNotStrip @JvmStatic public external fun enableNativeCSSParsing(): Boolean
|
|
114
116
|
|
|
115
117
|
@DoNotStrip @JvmStatic public external fun enableNetworkEventReporting(): Boolean
|
|
@@ -146,8 +148,12 @@ public object ReactNativeFeatureFlagsCxxInterop {
|
|
|
146
148
|
|
|
147
149
|
@DoNotStrip @JvmStatic public external fun fuseboxEnabledRelease(): Boolean
|
|
148
150
|
|
|
151
|
+
@DoNotStrip @JvmStatic public external fun fuseboxFrameRecordingEnabled(): Boolean
|
|
152
|
+
|
|
149
153
|
@DoNotStrip @JvmStatic public external fun fuseboxNetworkInspectionEnabled(): Boolean
|
|
150
154
|
|
|
155
|
+
@DoNotStrip @JvmStatic public external fun fuseboxScreenshotCaptureEnabled(): Boolean
|
|
156
|
+
|
|
151
157
|
@DoNotStrip @JvmStatic public external fun hideOffscreenVirtualViewsOnIOS(): Boolean
|
|
152
158
|
|
|
153
159
|
@DoNotStrip @JvmStatic public external fun overrideBySynchronousMountPropsAtMountingAndroid(): Boolean
|
|
@@ -160,6 +166,10 @@ public object ReactNativeFeatureFlagsCxxInterop {
|
|
|
160
166
|
|
|
161
167
|
@DoNotStrip @JvmStatic public external fun preventShadowTreeCommitExhaustion(): Boolean
|
|
162
168
|
|
|
169
|
+
@DoNotStrip @JvmStatic public external fun redBoxV2Android(): Boolean
|
|
170
|
+
|
|
171
|
+
@DoNotStrip @JvmStatic public external fun redBoxV2IOS(): Boolean
|
|
172
|
+
|
|
163
173
|
@DoNotStrip @JvmStatic public external fun shouldPressibilityUseW3CPointerEventsForHover(): Boolean
|
|
164
174
|
|
|
165
175
|
@DoNotStrip @JvmStatic public external fun shouldTriggerResponderTransferOnScrollAndroid(): 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<<825863c146e8a0dfabe809927af1f0ce>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -57,7 +57,7 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
|
|
|
57
57
|
|
|
58
58
|
override fun enableCppPropsIteratorSetter(): Boolean = false
|
|
59
59
|
|
|
60
|
-
override fun enableCustomFocusSearchOnClippedElementsAndroid(): Boolean =
|
|
60
|
+
override fun enableCustomFocusSearchOnClippedElementsAndroid(): Boolean = false
|
|
61
61
|
|
|
62
62
|
override fun enableDestroyShadowTreeRevisionAsync(): Boolean = false
|
|
63
63
|
|
|
@@ -105,6 +105,8 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
|
|
|
105
105
|
|
|
106
106
|
override fun enableModuleArgumentNSNullConversionIOS(): Boolean = false
|
|
107
107
|
|
|
108
|
+
override fun enableMutationObserverByDefault(): Boolean = false
|
|
109
|
+
|
|
108
110
|
override fun enableNativeCSSParsing(): Boolean = false
|
|
109
111
|
|
|
110
112
|
override fun enableNetworkEventReporting(): Boolean = true
|
|
@@ -141,8 +143,12 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
|
|
|
141
143
|
|
|
142
144
|
override fun fuseboxEnabledRelease(): Boolean = false
|
|
143
145
|
|
|
146
|
+
override fun fuseboxFrameRecordingEnabled(): Boolean = false
|
|
147
|
+
|
|
144
148
|
override fun fuseboxNetworkInspectionEnabled(): Boolean = true
|
|
145
149
|
|
|
150
|
+
override fun fuseboxScreenshotCaptureEnabled(): Boolean = false
|
|
151
|
+
|
|
146
152
|
override fun hideOffscreenVirtualViewsOnIOS(): Boolean = false
|
|
147
153
|
|
|
148
154
|
override fun overrideBySynchronousMountPropsAtMountingAndroid(): Boolean = false
|
|
@@ -155,6 +161,10 @@ public open class ReactNativeFeatureFlagsDefaults : ReactNativeFeatureFlagsProvi
|
|
|
155
161
|
|
|
156
162
|
override fun preventShadowTreeCommitExhaustion(): Boolean = false
|
|
157
163
|
|
|
164
|
+
override fun redBoxV2Android(): Boolean = false
|
|
165
|
+
|
|
166
|
+
override fun redBoxV2IOS(): Boolean = false
|
|
167
|
+
|
|
158
168
|
override fun shouldPressibilityUseW3CPointerEventsForHover(): Boolean = false
|
|
159
169
|
|
|
160
170
|
override fun shouldTriggerResponderTransferOnScrollAndroid(): 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<<499aedb10bae64c096e7ad2e096bdd1f>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -65,6 +65,7 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
|
|
|
65
65
|
private var enableLayoutAnimationsOnIOSCache: Boolean? = null
|
|
66
66
|
private var enableMainQueueCoordinatorOnIOSCache: Boolean? = null
|
|
67
67
|
private var enableModuleArgumentNSNullConversionIOSCache: Boolean? = null
|
|
68
|
+
private var enableMutationObserverByDefaultCache: Boolean? = null
|
|
68
69
|
private var enableNativeCSSParsingCache: Boolean? = null
|
|
69
70
|
private var enableNetworkEventReportingCache: Boolean? = null
|
|
70
71
|
private var enablePreparedTextLayoutCache: Boolean? = null
|
|
@@ -83,13 +84,17 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
|
|
|
83
84
|
private var fixTextClippingAndroid15useBoundsForWidthCache: Boolean? = null
|
|
84
85
|
private var fuseboxAssertSingleHostStateCache: Boolean? = null
|
|
85
86
|
private var fuseboxEnabledReleaseCache: Boolean? = null
|
|
87
|
+
private var fuseboxFrameRecordingEnabledCache: Boolean? = null
|
|
86
88
|
private var fuseboxNetworkInspectionEnabledCache: Boolean? = null
|
|
89
|
+
private var fuseboxScreenshotCaptureEnabledCache: Boolean? = null
|
|
87
90
|
private var hideOffscreenVirtualViewsOnIOSCache: Boolean? = null
|
|
88
91
|
private var overrideBySynchronousMountPropsAtMountingAndroidCache: Boolean? = null
|
|
89
92
|
private var perfIssuesEnabledCache: Boolean? = null
|
|
90
93
|
private var perfMonitorV2EnabledCache: Boolean? = null
|
|
91
94
|
private var preparedTextCacheSizeCache: Double? = null
|
|
92
95
|
private var preventShadowTreeCommitExhaustionCache: Boolean? = null
|
|
96
|
+
private var redBoxV2AndroidCache: Boolean? = null
|
|
97
|
+
private var redBoxV2IOSCache: Boolean? = null
|
|
93
98
|
private var shouldPressibilityUseW3CPointerEventsForHoverCache: Boolean? = null
|
|
94
99
|
private var shouldTriggerResponderTransferOnScrollAndroidCache: Boolean? = null
|
|
95
100
|
private var skipActivityIdentityAssertionOnHostPauseCache: Boolean? = null
|
|
@@ -520,6 +525,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
|
|
|
520
525
|
return cached
|
|
521
526
|
}
|
|
522
527
|
|
|
528
|
+
override fun enableMutationObserverByDefault(): Boolean {
|
|
529
|
+
var cached = enableMutationObserverByDefaultCache
|
|
530
|
+
if (cached == null) {
|
|
531
|
+
cached = currentProvider.enableMutationObserverByDefault()
|
|
532
|
+
accessedFeatureFlags.add("enableMutationObserverByDefault")
|
|
533
|
+
enableMutationObserverByDefaultCache = cached
|
|
534
|
+
}
|
|
535
|
+
return cached
|
|
536
|
+
}
|
|
537
|
+
|
|
523
538
|
override fun enableNativeCSSParsing(): Boolean {
|
|
524
539
|
var cached = enableNativeCSSParsingCache
|
|
525
540
|
if (cached == null) {
|
|
@@ -700,6 +715,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
|
|
|
700
715
|
return cached
|
|
701
716
|
}
|
|
702
717
|
|
|
718
|
+
override fun fuseboxFrameRecordingEnabled(): Boolean {
|
|
719
|
+
var cached = fuseboxFrameRecordingEnabledCache
|
|
720
|
+
if (cached == null) {
|
|
721
|
+
cached = currentProvider.fuseboxFrameRecordingEnabled()
|
|
722
|
+
accessedFeatureFlags.add("fuseboxFrameRecordingEnabled")
|
|
723
|
+
fuseboxFrameRecordingEnabledCache = cached
|
|
724
|
+
}
|
|
725
|
+
return cached
|
|
726
|
+
}
|
|
727
|
+
|
|
703
728
|
override fun fuseboxNetworkInspectionEnabled(): Boolean {
|
|
704
729
|
var cached = fuseboxNetworkInspectionEnabledCache
|
|
705
730
|
if (cached == null) {
|
|
@@ -710,6 +735,16 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
|
|
|
710
735
|
return cached
|
|
711
736
|
}
|
|
712
737
|
|
|
738
|
+
override fun fuseboxScreenshotCaptureEnabled(): Boolean {
|
|
739
|
+
var cached = fuseboxScreenshotCaptureEnabledCache
|
|
740
|
+
if (cached == null) {
|
|
741
|
+
cached = currentProvider.fuseboxScreenshotCaptureEnabled()
|
|
742
|
+
accessedFeatureFlags.add("fuseboxScreenshotCaptureEnabled")
|
|
743
|
+
fuseboxScreenshotCaptureEnabledCache = cached
|
|
744
|
+
}
|
|
745
|
+
return cached
|
|
746
|
+
}
|
|
747
|
+
|
|
713
748
|
override fun hideOffscreenVirtualViewsOnIOS(): Boolean {
|
|
714
749
|
var cached = hideOffscreenVirtualViewsOnIOSCache
|
|
715
750
|
if (cached == null) {
|
|
@@ -770,6 +805,26 @@ internal class ReactNativeFeatureFlagsLocalAccessor : ReactNativeFeatureFlagsAcc
|
|
|
770
805
|
return cached
|
|
771
806
|
}
|
|
772
807
|
|
|
808
|
+
override fun redBoxV2Android(): Boolean {
|
|
809
|
+
var cached = redBoxV2AndroidCache
|
|
810
|
+
if (cached == null) {
|
|
811
|
+
cached = currentProvider.redBoxV2Android()
|
|
812
|
+
accessedFeatureFlags.add("redBoxV2Android")
|
|
813
|
+
redBoxV2AndroidCache = cached
|
|
814
|
+
}
|
|
815
|
+
return cached
|
|
816
|
+
}
|
|
817
|
+
|
|
818
|
+
override fun redBoxV2IOS(): Boolean {
|
|
819
|
+
var cached = redBoxV2IOSCache
|
|
820
|
+
if (cached == null) {
|
|
821
|
+
cached = currentProvider.redBoxV2IOS()
|
|
822
|
+
accessedFeatureFlags.add("redBoxV2IOS")
|
|
823
|
+
redBoxV2IOSCache = cached
|
|
824
|
+
}
|
|
825
|
+
return cached
|
|
826
|
+
}
|
|
827
|
+
|
|
773
828
|
override fun shouldPressibilityUseW3CPointerEventsForHover(): Boolean {
|
|
774
829
|
var cached = shouldPressibilityUseW3CPointerEventsForHoverCache
|
|
775
830
|
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<<2452c003ffcba8e20b7cd40c68e05e3d>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -23,6 +23,8 @@ public open class ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android :
|
|
|
23
23
|
// We could use JNI to get the defaults from C++,
|
|
24
24
|
// but that is more expensive than just duplicating the defaults here.
|
|
25
25
|
|
|
26
|
+
override fun cxxNativeAnimatedEnabled(): Boolean = true
|
|
27
|
+
|
|
26
28
|
override fun enableAccessibilityOrder(): Boolean = true
|
|
27
29
|
|
|
28
30
|
override fun enableSwiftUIBasedFilters(): Boolean = true
|
|
@@ -30,4 +32,6 @@ public open class ReactNativeFeatureFlagsOverrides_RNOSS_Experimental_Android :
|
|
|
30
32
|
override fun fixTextClippingAndroid15useBoundsForWidth(): Boolean = true
|
|
31
33
|
|
|
32
34
|
override fun preventShadowTreeCommitExhaustion(): Boolean = true
|
|
35
|
+
|
|
36
|
+
override fun useSharedAnimatedBackend(): Boolean = true
|
|
33
37
|
}
|
|
@@ -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<<4ed94743d9eafd0be32bb04471a18fc6>>
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
/**
|
|
@@ -105,6 +105,8 @@ public interface ReactNativeFeatureFlagsProvider {
|
|
|
105
105
|
|
|
106
106
|
@DoNotStrip public fun enableModuleArgumentNSNullConversionIOS(): Boolean
|
|
107
107
|
|
|
108
|
+
@DoNotStrip public fun enableMutationObserverByDefault(): Boolean
|
|
109
|
+
|
|
108
110
|
@DoNotStrip public fun enableNativeCSSParsing(): Boolean
|
|
109
111
|
|
|
110
112
|
@DoNotStrip public fun enableNetworkEventReporting(): Boolean
|
|
@@ -141,8 +143,12 @@ public interface ReactNativeFeatureFlagsProvider {
|
|
|
141
143
|
|
|
142
144
|
@DoNotStrip public fun fuseboxEnabledRelease(): Boolean
|
|
143
145
|
|
|
146
|
+
@DoNotStrip public fun fuseboxFrameRecordingEnabled(): Boolean
|
|
147
|
+
|
|
144
148
|
@DoNotStrip public fun fuseboxNetworkInspectionEnabled(): Boolean
|
|
145
149
|
|
|
150
|
+
@DoNotStrip public fun fuseboxScreenshotCaptureEnabled(): Boolean
|
|
151
|
+
|
|
146
152
|
@DoNotStrip public fun hideOffscreenVirtualViewsOnIOS(): Boolean
|
|
147
153
|
|
|
148
154
|
@DoNotStrip public fun overrideBySynchronousMountPropsAtMountingAndroid(): Boolean
|
|
@@ -155,6 +161,10 @@ public interface ReactNativeFeatureFlagsProvider {
|
|
|
155
161
|
|
|
156
162
|
@DoNotStrip public fun preventShadowTreeCommitExhaustion(): Boolean
|
|
157
163
|
|
|
164
|
+
@DoNotStrip public fun redBoxV2Android(): Boolean
|
|
165
|
+
|
|
166
|
+
@DoNotStrip public fun redBoxV2IOS(): Boolean
|
|
167
|
+
|
|
158
168
|
@DoNotStrip public fun shouldPressibilityUseW3CPointerEventsForHover(): Boolean
|
|
159
169
|
|
|
160
170
|
@DoNotStrip public fun shouldTriggerResponderTransferOnScrollAndroid(): Boolean
|
|
@@ -23,6 +23,45 @@ public object PerformanceTracer {
|
|
|
23
23
|
SoLoader.loadLibrary("react_performancetracerjni")
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
+
public fun <T> trace(name: String, block: () -> T): T {
|
|
27
|
+
return trace(name, null /* track */, null /* trackGroup */, null /* color */, block)
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public fun <T> trace(name: String, track: String, block: () -> T): T {
|
|
31
|
+
return trace(name, track, null /* trackGroup */, null /* color */, block)
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
public fun <T> trace(name: String, track: String, trackGroup: String, block: () -> T): T {
|
|
35
|
+
return trace(name, track, trackGroup, null /* color */, block)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
public fun <T> trace(
|
|
39
|
+
name: String,
|
|
40
|
+
track: String?,
|
|
41
|
+
trackGroup: String?,
|
|
42
|
+
color: String?,
|
|
43
|
+
block: () -> T,
|
|
44
|
+
): T {
|
|
45
|
+
if (!isTracing()) {
|
|
46
|
+
return block()
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
val startTimeNanos = java.lang.System.nanoTime()
|
|
50
|
+
try {
|
|
51
|
+
return block()
|
|
52
|
+
} finally {
|
|
53
|
+
val endTimeNanos = java.lang.System.nanoTime()
|
|
54
|
+
reportTimeStamp(
|
|
55
|
+
name,
|
|
56
|
+
startTimeNanos,
|
|
57
|
+
endTimeNanos,
|
|
58
|
+
track,
|
|
59
|
+
trackGroup,
|
|
60
|
+
color,
|
|
61
|
+
)
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
26
65
|
/** Callback interface for tracing state changes. */
|
|
27
66
|
@DoNotStrip
|
|
28
67
|
public interface TracingStateCallback {
|
|
@@ -19,6 +19,7 @@ import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags
|
|
|
19
19
|
import java.io.IOException
|
|
20
20
|
import java.net.SocketTimeoutException
|
|
21
21
|
import okhttp3.Headers
|
|
22
|
+
import okhttp3.MultipartBody
|
|
22
23
|
import okhttp3.RequestBody
|
|
23
24
|
import okio.Buffer
|
|
24
25
|
|
|
@@ -263,6 +264,13 @@ internal object NetworkEventUtil {
|
|
|
263
264
|
return "[Preview unavailable]"
|
|
264
265
|
}
|
|
265
266
|
|
|
267
|
+
// MultipartBody does not propagate isOneShot() from its parts, so check each
|
|
268
|
+
// part explicitly. Reading a one-shot part here would drain the underlying
|
|
269
|
+
// stream and cause the real request to fail.
|
|
270
|
+
if (body is MultipartBody && body.parts().any { it.body().isOneShot() }) {
|
|
271
|
+
return "[Preview unavailable]"
|
|
272
|
+
}
|
|
273
|
+
|
|
266
274
|
return try {
|
|
267
275
|
val buffer = Buffer()
|
|
268
276
|
body.writeTo(buffer)
|
|
@@ -12,6 +12,7 @@ import android.content.Context
|
|
|
12
12
|
import android.content.Intent
|
|
13
13
|
import android.nfc.NfcAdapter
|
|
14
14
|
import android.os.Bundle
|
|
15
|
+
import androidx.core.graphics.createBitmap
|
|
15
16
|
import com.facebook.common.logging.FLog
|
|
16
17
|
import com.facebook.infer.annotation.Assertions
|
|
17
18
|
import com.facebook.infer.annotation.ThreadConfined
|
|
@@ -447,6 +448,43 @@ public class ReactHostImpl(
|
|
|
447
448
|
InspectorNetworkHelper.loadNetworkResource(url, listener)
|
|
448
449
|
}
|
|
449
450
|
|
|
451
|
+
@DoNotStrip
|
|
452
|
+
private fun captureScreenshot(format: String, quality: Int): String? {
|
|
453
|
+
val activity = currentActivity ?: return null
|
|
454
|
+
val window = activity.window ?: return null
|
|
455
|
+
val decorView = window.decorView.rootView
|
|
456
|
+
|
|
457
|
+
val width = decorView.width
|
|
458
|
+
val height = decorView.height
|
|
459
|
+
if (width <= 0 || height <= 0) {
|
|
460
|
+
return null
|
|
461
|
+
}
|
|
462
|
+
|
|
463
|
+
val bitmap = createBitmap(width, height)
|
|
464
|
+
val canvas = android.graphics.Canvas(bitmap)
|
|
465
|
+
decorView.draw(canvas)
|
|
466
|
+
|
|
467
|
+
val outputStream = java.io.ByteArrayOutputStream()
|
|
468
|
+
val compressFormat =
|
|
469
|
+
when (format) {
|
|
470
|
+
"jpeg" -> android.graphics.Bitmap.CompressFormat.JPEG
|
|
471
|
+
"webp" ->
|
|
472
|
+
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.R) {
|
|
473
|
+
android.graphics.Bitmap.CompressFormat.WEBP_LOSSY
|
|
474
|
+
} else {
|
|
475
|
+
@Suppress("DEPRECATION") android.graphics.Bitmap.CompressFormat.WEBP
|
|
476
|
+
}
|
|
477
|
+
else -> android.graphics.Bitmap.CompressFormat.PNG
|
|
478
|
+
}
|
|
479
|
+
val compressQuality = if (quality in 0..100) quality else 80
|
|
480
|
+
|
|
481
|
+
bitmap.compress(compressFormat, compressQuality, outputStream)
|
|
482
|
+
bitmap.recycle()
|
|
483
|
+
|
|
484
|
+
val bytes = outputStream.toByteArray()
|
|
485
|
+
return android.util.Base64.encodeToString(bytes, android.util.Base64.NO_WRAP)
|
|
486
|
+
}
|
|
487
|
+
|
|
450
488
|
/**
|
|
451
489
|
* Entrypoint to destroy the ReactInstance. If the ReactInstance is reloading, will wait until
|
|
452
490
|
* reload is finished, before destroying.
|
|
@@ -1565,16 +1603,18 @@ public class ReactHostImpl(
|
|
|
1565
1603
|
when (state) {
|
|
1566
1604
|
TracingState.ENABLED_IN_BACKGROUND_MODE,
|
|
1567
1605
|
TracingState.ENABLED_IN_CDP_MODE -> {
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1606
|
+
if (InspectorFlags.getFrameRecordingEnabled()) {
|
|
1607
|
+
val observer =
|
|
1608
|
+
FrameTimingsObserver(
|
|
1609
|
+
_screenshotsEnabled,
|
|
1610
|
+
{ frameTimingsSequence ->
|
|
1611
|
+
inspectorTarget.recordFrameTimings(frameTimingsSequence)
|
|
1612
|
+
},
|
|
1613
|
+
)
|
|
1614
|
+
observer.setCurrentWindow(currentActivity?.window)
|
|
1615
|
+
observer.start()
|
|
1616
|
+
frameTimingsObserver = observer
|
|
1617
|
+
}
|
|
1578
1618
|
}
|
|
1579
1619
|
TracingState.DISABLED -> {
|
|
1580
1620
|
frameTimingsObserver?.stop()
|
|
@@ -7,12 +7,32 @@
|
|
|
7
7
|
|
|
8
8
|
package com.facebook.react.views.common
|
|
9
9
|
|
|
10
|
+
import android.app.UiModeManager
|
|
10
11
|
import android.content.Context
|
|
11
12
|
import android.content.res.Configuration
|
|
12
13
|
|
|
13
14
|
/** Utility object providing static methods for working with UI mode properties from Context. */
|
|
14
15
|
internal object UiModeUtils {
|
|
15
16
|
|
|
17
|
+
private var isTVDeviceCached: Boolean? = null
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Determines whether the device is a TV (Android TV / Fire TV).
|
|
21
|
+
* The result is cached after the first call.
|
|
22
|
+
*
|
|
23
|
+
* @param context The context to check the UI mode from
|
|
24
|
+
* @return true if the device is running in television mode, false otherwise
|
|
25
|
+
*/
|
|
26
|
+
@JvmStatic
|
|
27
|
+
fun isTVDevice(context: Context): Boolean {
|
|
28
|
+
return isTVDeviceCached ?: run {
|
|
29
|
+
val uiModeManager = context.getSystemService(Context.UI_MODE_SERVICE) as? UiModeManager
|
|
30
|
+
val result = uiModeManager?.currentModeType == Configuration.UI_MODE_TYPE_TELEVISION
|
|
31
|
+
isTVDeviceCached = result
|
|
32
|
+
result
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
16
36
|
/**
|
|
17
37
|
* Determines whether the current UI mode is dark mode
|
|
18
38
|
*
|