diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java index 22565058445..a459f15afa2 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java @@ -65,6 +65,7 @@ import com.facebook.react.fabric.mounting.mountitems.BatchMountItem; import com.facebook.react.fabric.mounting.mountitems.DispatchCommandMountItem; import com.facebook.react.fabric.mounting.mountitems.MountItem; import com.facebook.react.fabric.mounting.mountitems.MountItemFactory; +import com.facebook.react.fabric.mounting.mountitems.PrefetchResourcesMountItem; import com.facebook.react.internal.featureflags.ReactNativeFeatureFlags; import com.facebook.react.internal.featureflags.ReactNativeNewArchitectureFeatureFlags; import com.facebook.react.internal.interop.InteropEventEmitter; @@ -985,8 +986,13 @@ public class FabricUIManager */ @UnstableReactNativeAPI public void experimental_prefetchResources(String componentName, ReadableMapBuffer params) { - mMountingManager.experimental_prefetchResources( - mReactApplicationContext, componentName, params); + if (ReactNativeFeatureFlags.enableImagePrefetchingOnUiThreadAndroid()) { + mMountItemDispatcher.addMountItem( + new PrefetchResourcesMountItem(mReactApplicationContext, componentName, params)); + } else { + mMountingManager.experimental_prefetchResources( + mReactApplicationContext, componentName, params); + } } void setBinding(FabricUIManagerBinding binding) { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/PrefetchResourcesMountItem.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/PrefetchResourcesMountItem.kt new file mode 100644 index 00000000000..7b1b6e13826 --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/fabric/mounting/mountitems/PrefetchResourcesMountItem.kt @@ -0,0 +1,34 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.react.fabric.mounting.mountitems + +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.common.annotations.FrameworkAPI +import com.facebook.react.common.annotations.UnstableReactNativeAPI +import com.facebook.react.common.mapbuffer.ReadableMapBuffer +import com.facebook.react.fabric.mounting.MountingManager + +internal class PrefetchResourcesMountItem( + private val reactApplicationContext: ReactApplicationContext, + private val componentName: String, + private val params: ReadableMapBuffer, +) : MountItem { + + @OptIn(UnstableReactNativeAPI::class, FrameworkAPI::class) + override fun execute(mountingManager: MountingManager) { + mountingManager.experimental_prefetchResources( + reactApplicationContext, + componentName, + params, + ) + } + + override fun getSurfaceId(): Int = -1 /* unused */ + + override fun toString(): String = "PrefetchResourcesMountItem" +}