diff --git a/packages/react-native/ReactAndroid/api/ReactAndroid.api b/packages/react-native/ReactAndroid/api/ReactAndroid.api index 861e38046f1..b6ea2cb049f 100644 --- a/packages/react-native/ReactAndroid/api/ReactAndroid.api +++ b/packages/react-native/ReactAndroid/api/ReactAndroid.api @@ -3028,6 +3028,8 @@ public abstract interface class com/facebook/react/module/model/ReactModuleInfoP } public final class com/facebook/react/modules/accessibilityinfo/AccessibilityInfoModule : com/facebook/fbreact/specs/NativeAccessibilityInfoSpec, com/facebook/react/bridge/LifecycleEventListener { + public static final field Companion Lcom/facebook/react/modules/accessibilityinfo/AccessibilityInfoModule$Companion; + public static final field NAME Ljava/lang/String; public fun (Lcom/facebook/react/bridge/ReactApplicationContext;)V public fun announceForAccessibility (Ljava/lang/String;)V public fun getRecommendedTimeoutMillis (DLcom/facebook/react/bridge/Callback;)V @@ -3043,6 +3045,9 @@ public final class com/facebook/react/modules/accessibilityinfo/AccessibilityInf public fun setAccessibilityFocus (D)V } +public final class com/facebook/react/modules/accessibilityinfo/AccessibilityInfoModule$Companion { +} + public final class com/facebook/react/modules/appearance/AppearanceModule : com/facebook/fbreact/specs/NativeAppearanceSpec { public static final field Companion Lcom/facebook/react/modules/appearance/AppearanceModule$Companion; public static final field NAME Ljava/lang/String; @@ -3387,11 +3392,16 @@ public final class com/facebook/react/modules/devloading/DevLoadingModule$Compan } public final class com/facebook/react/modules/devtoolsruntimesettings/ReactDevToolsRuntimeSettingsModule : com/facebook/fbreact/specs/NativeReactDevToolsRuntimeSettingsModuleSpec { + public static final field Companion Lcom/facebook/react/modules/devtoolsruntimesettings/ReactDevToolsRuntimeSettingsModule$Companion; + public static final field NAME Ljava/lang/String; public fun (Lcom/facebook/react/bridge/ReactApplicationContext;)V public fun getReloadAndProfileConfig ()Lcom/facebook/react/bridge/WritableMap; public fun setReloadAndProfileConfig (Lcom/facebook/react/bridge/ReadableMap;)V } +public final class com/facebook/react/modules/devtoolsruntimesettings/ReactDevToolsRuntimeSettingsModule$Companion { +} + public class com/facebook/react/modules/dialog/AlertFragment : androidx/fragment/app/DialogFragment, android/content/DialogInterface$OnClickListener { public fun ()V public fun (Lcom/facebook/react/modules/dialog/DialogModule$AlertFragmentListener;Landroid/os/Bundle;)V @@ -3414,6 +3424,7 @@ public class com/facebook/react/modules/dialog/DialogModule : com/facebook/fbrea public class com/facebook/react/modules/fresco/FrescoModule : com/facebook/react/bridge/ReactContextBaseJavaModule, com/facebook/react/bridge/LifecycleEventListener, com/facebook/react/modules/common/ModuleDataCleaner$Cleanable, com/facebook/react/turbomodule/core/interfaces/TurboModule { public static final field Companion Lcom/facebook/react/modules/fresco/FrescoModule$Companion; + public static final field NAME Ljava/lang/String; public fun (Lcom/facebook/react/bridge/ReactApplicationContext;)V public fun (Lcom/facebook/react/bridge/ReactApplicationContext;Lcom/facebook/imagepipeline/core/ImagePipeline;)V public fun (Lcom/facebook/react/bridge/ReactApplicationContext;Lcom/facebook/imagepipeline/core/ImagePipeline;Z)V @@ -3469,6 +3480,8 @@ public final class com/facebook/react/modules/fresco/XmlFormat { } public final class com/facebook/react/modules/i18nmanager/I18nManagerModule : com/facebook/fbreact/specs/NativeI18nManagerSpec { + public static final field Companion Lcom/facebook/react/modules/i18nmanager/I18nManagerModule$Companion; + public static final field NAME Ljava/lang/String; public fun (Lcom/facebook/react/bridge/ReactApplicationContext;)V public fun allowRTL (Z)V public fun forceRTL (Z)V @@ -3476,6 +3489,9 @@ public final class com/facebook/react/modules/i18nmanager/I18nManagerModule : co public fun swapLeftAndRightInRTL (Z)V } +public final class com/facebook/react/modules/i18nmanager/I18nManagerModule$Companion { +} + public final class com/facebook/react/modules/i18nmanager/I18nUtil { public static final field Companion Lcom/facebook/react/modules/i18nmanager/I18nUtil$Companion; public final fun allowRTL (Landroid/content/Context;Z)V @@ -3647,6 +3663,8 @@ public class com/facebook/react/modules/network/TLSSocketFactory : javax/net/ssl } public final class com/facebook/react/modules/permissions/PermissionsModule : com/facebook/fbreact/specs/NativePermissionsAndroidSpec, com/facebook/react/modules/core/PermissionListener { + public static final field Companion Lcom/facebook/react/modules/permissions/PermissionsModule$Companion; + public static final field NAME Ljava/lang/String; public fun (Lcom/facebook/react/bridge/ReactApplicationContext;)V public fun checkPermission (Ljava/lang/String;Lcom/facebook/react/bridge/Promise;)V public fun onRequestPermissionsResult (I[Ljava/lang/String;[I)Z @@ -3655,15 +3673,24 @@ public final class com/facebook/react/modules/permissions/PermissionsModule : co public fun shouldShowRequestPermissionRationale (Ljava/lang/String;Lcom/facebook/react/bridge/Promise;)V } +public final class com/facebook/react/modules/permissions/PermissionsModule$Companion { +} + public final class com/facebook/react/modules/reactdevtoolssettings/ReactDevToolsSettingsManagerModule : com/facebook/fbreact/specs/NativeReactDevToolsSettingsManagerSpec { + public static final field Companion Lcom/facebook/react/modules/reactdevtoolssettings/ReactDevToolsSettingsManagerModule$Companion; + public static final field NAME Ljava/lang/String; public fun (Lcom/facebook/react/bridge/ReactApplicationContext;)V public fun getGlobalHookSettings ()Ljava/lang/String; public fun setGlobalHookSettings (Ljava/lang/String;)V } +public final class com/facebook/react/modules/reactdevtoolssettings/ReactDevToolsSettingsManagerModule$Companion { +} + public final class com/facebook/react/modules/share/ShareModule : com/facebook/fbreact/specs/NativeShareModuleSpec { public static final field Companion Lcom/facebook/react/modules/share/ShareModule$Companion; public static final field ERROR_INVALID_CONTENT Ljava/lang/String; + public static final field NAME Ljava/lang/String; public fun (Lcom/facebook/react/bridge/ReactApplicationContext;)V public fun share (Lcom/facebook/react/bridge/ReadableMap;Ljava/lang/String;Lcom/facebook/react/bridge/Promise;)V } @@ -3672,10 +3699,15 @@ public final class com/facebook/react/modules/share/ShareModule$Companion { } public final class com/facebook/react/modules/sound/SoundManagerModule : com/facebook/fbreact/specs/NativeSoundManagerSpec { + public static final field Companion Lcom/facebook/react/modules/sound/SoundManagerModule$Companion; + public static final field NAME Ljava/lang/String; public fun (Lcom/facebook/react/bridge/ReactApplicationContext;)V public fun playTouchSound ()V } +public final class com/facebook/react/modules/sound/SoundManagerModule$Companion { +} + public final class com/facebook/react/modules/statusbar/StatusBarModule : com/facebook/fbreact/specs/NativeStatusBarManagerAndroidSpec { public static final field Companion Lcom/facebook/react/modules/statusbar/StatusBarModule$Companion; public static final field NAME Ljava/lang/String; @@ -3729,12 +3761,17 @@ public final class com/facebook/react/modules/toast/ToastModule$Companion { } public final class com/facebook/react/modules/vibration/VibrationModule : com/facebook/fbreact/specs/NativeVibrationSpec { + public static final field Companion Lcom/facebook/react/modules/vibration/VibrationModule$Companion; + public static final field NAME Ljava/lang/String; public fun (Lcom/facebook/react/bridge/ReactApplicationContext;)V public fun cancel ()V public fun vibrate (D)V public fun vibrateByPattern (Lcom/facebook/react/bridge/ReadableArray;D)V } +public final class com/facebook/react/modules/vibration/VibrationModule$Companion { +} + public final class com/facebook/react/modules/websocket/WebSocketModule : com/facebook/fbreact/specs/NativeWebSocketModuleSpec { public fun (Lcom/facebook/react/bridge/ReactApplicationContext;)V public fun addListener (Ljava/lang/String;)V @@ -4022,16 +4059,17 @@ public final class com/facebook/react/shell/MainPackageConfig { public final fun getFrescoConfig ()Lcom/facebook/imagepipeline/core/ImagePipelineConfig; } -public class com/facebook/react/shell/MainReactPackage : com/facebook/react/BaseReactPackage, com/facebook/react/ViewManagerOnDemandReactPackage { +public final class com/facebook/react/shell/MainReactPackage : com/facebook/react/BaseReactPackage, com/facebook/react/ViewManagerOnDemandReactPackage { public fun ()V public fun (Lcom/facebook/react/shell/MainPackageConfig;)V + public synthetic fun (Lcom/facebook/react/shell/MainPackageConfig;ILkotlin/jvm/internal/DefaultConstructorMarker;)V public fun createViewManager (Lcom/facebook/react/bridge/ReactApplicationContext;Ljava/lang/String;)Lcom/facebook/react/uimanager/ViewManager; public fun createViewManagers (Lcom/facebook/react/bridge/ReactApplicationContext;)Ljava/util/List; public fun getModule (Ljava/lang/String;Lcom/facebook/react/bridge/ReactApplicationContext;)Lcom/facebook/react/bridge/NativeModule; public fun getReactModuleInfoProvider ()Lcom/facebook/react/module/model/ReactModuleInfoProvider; public fun getViewManagerNames (Lcom/facebook/react/bridge/ReactApplicationContext;)Ljava/util/Collection; public fun getViewManagers (Lcom/facebook/react/bridge/ReactApplicationContext;)Ljava/util/List; - public fun getViewManagersMap ()Ljava/util/Map; + public final fun getViewManagersMap ()Ljava/util/Map; } public class com/facebook/react/shell/MainReactPackage$$ReactModuleInfoProvider : com/facebook/react/module/model/ReactModuleInfoProvider { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/accessibilityinfo/AccessibilityInfoModule.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/accessibilityinfo/AccessibilityInfoModule.kt index 3c975a464d4..dc18949f4fd 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/accessibilityinfo/AccessibilityInfoModule.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/accessibilityinfo/AccessibilityInfoModule.kt @@ -255,7 +255,8 @@ public class AccessibilityInfoModule(context: ReactApplicationContext) : successCallback.invoke(recommendedTimeout) } - private companion object { + public companion object { + public const val NAME: String = NativeAccessibilityInfoSpec.NAME private const val REDUCE_MOTION_EVENT_NAME = "reduceMotionDidChange" private const val HIGH_TEXT_CONTRAST_EVENT_NAME = "highTextContrastDidChange" private const val TOUCH_EXPLORATION_EVENT_NAME = "touchExplorationDidChange" diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/devtoolsruntimesettings/ReactDevToolsRuntimeSettingsModule.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/devtoolsruntimesettings/ReactDevToolsRuntimeSettingsModule.kt index 63e30b7cd96..216bbcefb56 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/devtoolsruntimesettings/ReactDevToolsRuntimeSettingsModule.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/devtoolsruntimesettings/ReactDevToolsRuntimeSettingsModule.kt @@ -25,9 +25,10 @@ private class Settings { public class ReactDevToolsRuntimeSettingsModule(reactContext: ReactApplicationContext?) : NativeReactDevToolsRuntimeSettingsModuleSpec(reactContext) { - // static to persist across Turbo Module reloads - private companion object { + public companion object { + // static to persist across Turbo Module reloads private val settings = Settings() + public const val NAME: String = NativeReactDevToolsRuntimeSettingsModuleSpec.NAME } override fun setReloadAndProfileConfig(map: ReadableMap) { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/FrescoModule.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/FrescoModule.kt index 915d8830f34..fcdff87bad9 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/FrescoModule.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/fresco/FrescoModule.kt @@ -132,7 +132,7 @@ constructor( } public companion object { - internal const val NAME = "FrescoModule" + public const val NAME: String = "FrescoModule" private var hasBeenInitialized = false /** diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/i18nmanager/I18nManagerModule.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/i18nmanager/I18nManagerModule.kt index 6b3b22565b5..946accfae03 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/i18nmanager/I18nManagerModule.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/i18nmanager/I18nManagerModule.kt @@ -35,4 +35,8 @@ public class I18nManagerModule(context: ReactApplicationContext?) : NativeI18nMa override fun swapLeftAndRightInRTL(value: Boolean) { I18nUtil.instance.swapLeftAndRightInRTL(getReactApplicationContext(), value) } + + public companion object { + public const val NAME: String = NativeI18nManagerSpec.NAME + } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/permissions/PermissionsModule.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/permissions/PermissionsModule.kt index 5de54bd0752..8920c22af8f 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/permissions/PermissionsModule.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/permissions/PermissionsModule.kt @@ -183,7 +183,8 @@ public class PermissionsModule(reactContext: ReactApplicationContext?) : return activity } - private companion object { + public companion object { + public const val NAME: String = NativePermissionsAndroidSpec.NAME private const val ERROR_INVALID_ACTIVITY = "E_INVALID_ACTIVITY" } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/reactdevtoolssettings/ReactDevToolsSettingsManagerModule.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/reactdevtoolssettings/ReactDevToolsSettingsManagerModule.kt index fc4b24e4fd3..5746061a0f3 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/reactdevtoolssettings/ReactDevToolsSettingsManagerModule.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/reactdevtoolssettings/ReactDevToolsSettingsManagerModule.kt @@ -26,7 +26,8 @@ public class ReactDevToolsSettingsManagerModule(reactContext: ReactApplicationCo public override fun getGlobalHookSettings(): String? = sharedPreferences.getString(KEY_HOOK_SETTINGS, null) - private companion object { + public companion object { + public const val NAME: String = NativeReactDevToolsSettingsManagerSpec.NAME private const val SHARED_PREFERENCES_PREFIX = "ReactNative__DevToolsSettings" private const val KEY_HOOK_SETTINGS = "HookSettings" } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/share/ShareModule.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/share/ShareModule.kt index 05fef67b2cf..2ee48db643f 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/share/ShareModule.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/share/ShareModule.kt @@ -59,6 +59,7 @@ public class ShareModule(reactContext: ReactApplicationContext) : } public companion object { + public const val NAME: String = NativeShareModuleSpec.NAME const private val ACTION_SHARED: String = "sharedAction" const public val ERROR_INVALID_CONTENT: String = "E_INVALID_CONTENT" const private val ERROR_UNABLE_TO_OPEN_DIALOG: String = "E_UNABLE_TO_OPEN_DIALOG" diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/sound/SoundManagerModule.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/sound/SoundManagerModule.kt index df45543102d..9f996d69f4a 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/sound/SoundManagerModule.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/sound/SoundManagerModule.kt @@ -23,4 +23,8 @@ public class SoundManagerModule(reactContext: ReactApplicationContext?) : getReactApplicationContext().getSystemService(Context.AUDIO_SERVICE) as AudioManager audioManager.playSoundEffect(AudioManager.FX_KEY_CLICK) } + + public companion object { + public const val NAME: String = NativeSoundManagerSpec.NAME + } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/vibration/VibrationModule.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/vibration/VibrationModule.kt index 8f91ee9fbe2..2056bbb2749 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/vibration/VibrationModule.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/vibration/VibrationModule.kt @@ -61,4 +61,8 @@ public class VibrationModule(reactContext: ReactApplicationContext) : @Suppress("DEPRECATION") getReactApplicationContext().getSystemService(Context.VIBRATOR_SERVICE) as Vibrator? } + + public companion object { + public const val NAME: String = NativeVibrationSpec.NAME + } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java deleted file mode 100644 index 089c0b2e523..00000000000 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.java +++ /dev/null @@ -1,335 +0,0 @@ -/* - * 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.shell; - -import android.annotation.SuppressLint; -import androidx.annotation.Nullable; -import com.facebook.react.BaseReactPackage; -import com.facebook.react.ViewManagerOnDemandReactPackage; -import com.facebook.react.animated.NativeAnimatedModule; -import com.facebook.react.bridge.ModuleSpec; -import com.facebook.react.bridge.NativeModule; -import com.facebook.react.bridge.ReactApplicationContext; -import com.facebook.react.common.ClassFinder; -import com.facebook.react.module.annotations.ReactModule; -import com.facebook.react.module.annotations.ReactModuleList; -import com.facebook.react.module.model.ReactModuleInfo; -import com.facebook.react.module.model.ReactModuleInfoProvider; -import com.facebook.react.modules.accessibilityinfo.AccessibilityInfoModule; -import com.facebook.react.modules.appearance.AppearanceModule; -import com.facebook.react.modules.appstate.AppStateModule; -import com.facebook.react.modules.blob.BlobModule; -import com.facebook.react.modules.blob.FileReaderModule; -import com.facebook.react.modules.camera.ImageStoreManager; -import com.facebook.react.modules.clipboard.ClipboardModule; -import com.facebook.react.modules.devloading.DevLoadingModule; -import com.facebook.react.modules.devtoolsruntimesettings.ReactDevToolsRuntimeSettingsModule; -import com.facebook.react.modules.dialog.DialogModule; -import com.facebook.react.modules.fresco.FrescoModule; -import com.facebook.react.modules.i18nmanager.I18nManagerModule; -import com.facebook.react.modules.image.ImageLoaderModule; -import com.facebook.react.modules.intent.IntentModule; -import com.facebook.react.modules.network.NetworkingModule; -import com.facebook.react.modules.permissions.PermissionsModule; -import com.facebook.react.modules.reactdevtoolssettings.ReactDevToolsSettingsManagerModule; -import com.facebook.react.modules.share.ShareModule; -import com.facebook.react.modules.sound.SoundManagerModule; -import com.facebook.react.modules.statusbar.StatusBarModule; -import com.facebook.react.modules.toast.ToastModule; -import com.facebook.react.modules.vibration.VibrationModule; -import com.facebook.react.modules.websocket.WebSocketModule; -import com.facebook.react.uimanager.UIManagerModule; -import com.facebook.react.uimanager.ViewManager; -import com.facebook.react.views.drawer.ReactDrawerLayoutManager; -import com.facebook.react.views.image.ReactImageManager; -import com.facebook.react.views.modal.ReactModalHostManager; -import com.facebook.react.views.progressbar.ReactProgressBarViewManager; -import com.facebook.react.views.safeareaview.ReactSafeAreaViewManager; -import com.facebook.react.views.scroll.ReactHorizontalScrollContainerViewManager; -import com.facebook.react.views.scroll.ReactHorizontalScrollViewManager; -import com.facebook.react.views.scroll.ReactScrollViewManager; -import com.facebook.react.views.swiperefresh.SwipeRefreshLayoutManager; -import com.facebook.react.views.switchview.ReactSwitchManager; -import com.facebook.react.views.text.ReactRawTextManager; -import com.facebook.react.views.text.ReactTextViewManager; -import com.facebook.react.views.text.ReactVirtualTextViewManager; -import com.facebook.react.views.text.frescosupport.FrescoBasedReactTextInlineImageViewManager; -import com.facebook.react.views.textinput.ReactTextInputManager; -import com.facebook.react.views.unimplementedview.ReactUnimplementedViewManager; -import com.facebook.react.views.view.ReactViewManager; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import javax.inject.Provider; - -/** Package defining basic modules and view managers. */ -@ReactModuleList( - nativeModules = { - AccessibilityInfoModule.class, - AppearanceModule.class, - AppStateModule.class, - BlobModule.class, - DevLoadingModule.class, - FileReaderModule.class, - ClipboardModule.class, - DialogModule.class, - FrescoModule.class, - I18nManagerModule.class, - ImageLoaderModule.class, - ImageStoreManager.class, - IntentModule.class, - NativeAnimatedModule.class, - NetworkingModule.class, - PermissionsModule.class, - ReactDevToolsSettingsManagerModule.class, - ReactDevToolsRuntimeSettingsModule.class, - ShareModule.class, - SoundManagerModule.class, - StatusBarModule.class, - ToastModule.class, - VibrationModule.class, - WebSocketModule.class, - }) -public class MainReactPackage extends BaseReactPackage implements ViewManagerOnDemandReactPackage { - - private MainPackageConfig mConfig; - private @Nullable Map mViewManagers; - - public MainReactPackage() {} - - /** Create a new package with configuration */ - public MainReactPackage(MainPackageConfig config) { - mConfig = config; - } - - @Override - public @Nullable NativeModule getModule(String name, ReactApplicationContext context) { - switch (name) { - case AccessibilityInfoModule.NAME: - return new AccessibilityInfoModule(context); - case AppearanceModule.NAME: - return new AppearanceModule(context); - case AppStateModule.NAME: - return new AppStateModule(context); - case BlobModule.NAME: - return new BlobModule(context); - case DevLoadingModule.NAME: - return new DevLoadingModule(context); - case FileReaderModule.NAME: - return new FileReaderModule(context); - case ClipboardModule.NAME: - return new ClipboardModule(context); - case DialogModule.NAME: - return new DialogModule(context); - case FrescoModule.NAME: - return new FrescoModule(context, true, mConfig != null ? mConfig.getFrescoConfig() : null); - case I18nManagerModule.NAME: - return new I18nManagerModule(context); - case ImageLoaderModule.NAME: - return new ImageLoaderModule(context); - case ImageStoreManager.NAME: - return new ImageStoreManager(context); - case IntentModule.NAME: - return new IntentModule(context); - case NativeAnimatedModule.NAME: - return new NativeAnimatedModule(context); - case NetworkingModule.NAME: - return new NetworkingModule(context); - case PermissionsModule.NAME: - return new PermissionsModule(context); - case ShareModule.NAME: - return new ShareModule(context); - case StatusBarModule.NAME: - return new StatusBarModule(context); - case SoundManagerModule.NAME: - return new SoundManagerModule(context); - case ToastModule.NAME: - return new ToastModule(context); - case VibrationModule.NAME: - return new VibrationModule(context); - case WebSocketModule.NAME: - return new WebSocketModule(context); - case ReactDevToolsSettingsManagerModule.NAME: - return new ReactDevToolsSettingsManagerModule(context); - case ReactDevToolsRuntimeSettingsModule.NAME: - return new ReactDevToolsRuntimeSettingsModule(context); - default: - return null; - } - } - - @Override - public List createViewManagers(ReactApplicationContext reactContext) { - List viewManagers = new ArrayList<>(); - - viewManagers.add(new ReactDrawerLayoutManager()); - viewManagers.add(new ReactHorizontalScrollViewManager()); - viewManagers.add(new ReactHorizontalScrollContainerViewManager()); - viewManagers.add(new ReactProgressBarViewManager()); - viewManagers.add(new ReactScrollViewManager()); - viewManagers.add(new ReactSwitchManager()); - viewManagers.add(new ReactSafeAreaViewManager()); - viewManagers.add(new SwipeRefreshLayoutManager()); - - // Native equivalents - viewManagers.add(new FrescoBasedReactTextInlineImageViewManager()); - viewManagers.add(new ReactImageManager()); - viewManagers.add(new ReactModalHostManager()); - viewManagers.add(new ReactRawTextManager()); - viewManagers.add(new ReactTextInputManager()); - viewManagers.add(new ReactTextViewManager()); - viewManagers.add(new ReactViewManager()); - viewManagers.add(new ReactVirtualTextViewManager()); - - viewManagers.add(new ReactUnimplementedViewManager()); - - return viewManagers; - } - - private static void appendMap( - Map map, String name, Provider provider) { - map.put(name, ModuleSpec.viewManagerSpec(provider)); - } - - /** - * @return a map of view managers that should be registered with {@link UIManagerModule} - */ - @SuppressLint("VisibleForTests") - public Map getViewManagersMap() { - if (mViewManagers == null) { - Map viewManagers = new HashMap<>(); - appendMap(viewManagers, ReactDrawerLayoutManager.REACT_CLASS, ReactDrawerLayoutManager::new); - appendMap( - viewManagers, - ReactHorizontalScrollViewManager.REACT_CLASS, - ReactHorizontalScrollViewManager::new); - appendMap( - viewManagers, - ReactHorizontalScrollContainerViewManager.REACT_CLASS, - ReactHorizontalScrollContainerViewManager::new); - appendMap( - viewManagers, ReactProgressBarViewManager.REACT_CLASS, ReactProgressBarViewManager::new); - appendMap(viewManagers, ReactSafeAreaViewManager.REACT_CLASS, ReactSafeAreaViewManager::new); - appendMap(viewManagers, ReactScrollViewManager.REACT_CLASS, ReactScrollViewManager::new); - appendMap(viewManagers, ReactSwitchManager.REACT_CLASS, ReactSwitchManager::new); - appendMap( - viewManagers, SwipeRefreshLayoutManager.REACT_CLASS, SwipeRefreshLayoutManager::new); - appendMap( - viewManagers, - FrescoBasedReactTextInlineImageViewManager.REACT_CLASS, - FrescoBasedReactTextInlineImageViewManager::new); - appendMap(viewManagers, ReactImageManager.REACT_CLASS, ReactImageManager::new); - appendMap(viewManagers, ReactModalHostManager.REACT_CLASS, ReactModalHostManager::new); - appendMap(viewManagers, ReactRawTextManager.REACT_CLASS, ReactRawTextManager::new); - appendMap(viewManagers, ReactTextInputManager.REACT_CLASS, ReactTextInputManager::new); - appendMap(viewManagers, ReactTextViewManager.REACT_CLASS, ReactTextViewManager::new); - appendMap(viewManagers, ReactViewManager.REACT_CLASS, ReactViewManager::new); - appendMap( - viewManagers, ReactVirtualTextViewManager.REACT_CLASS, ReactVirtualTextViewManager::new); - appendMap( - viewManagers, - ReactUnimplementedViewManager.REACT_CLASS, - ReactUnimplementedViewManager::new); - mViewManagers = viewManagers; - } - return mViewManagers; - } - - @Override - public List getViewManagers(ReactApplicationContext reactContext) { - return new ArrayList<>(getViewManagersMap().values()); - } - - @Override - public Collection getViewManagerNames(ReactApplicationContext reactContext) { - return getViewManagersMap().keySet(); - } - - @Override - public @Nullable ViewManager createViewManager( - ReactApplicationContext reactContext, String viewManagerName) { - ModuleSpec spec = getViewManagersMap().get(viewManagerName); - return spec != null ? (ViewManager) spec.getProvider().get() : null; - } - - @Override - public ReactModuleInfoProvider getReactModuleInfoProvider() { - if (!ClassFinder.canLoadClassesFromAnnotationProcessors()) { - return fallbackForMissingClass(); - } - try { - Class reactModuleInfoProviderClass = - ClassFinder.findClass( - "com.facebook.react.shell.MainReactPackage$$ReactModuleInfoProvider"); - return (ReactModuleInfoProvider) reactModuleInfoProviderClass.newInstance(); - } catch (ClassNotFoundException e) { - return fallbackForMissingClass(); - } catch (InstantiationException e) { - throw new RuntimeException( - "No ReactModuleInfoProvider for" - + " com.facebook.react.shell.MainReactPackage$$ReactModuleInfoProvider", - e); - } catch (IllegalAccessException e) { - throw new RuntimeException( - "No ReactModuleInfoProvider for" - + " com.facebook.react.shell.MainReactPackage$$ReactModuleInfoProvider", - e); - } - } - - private ReactModuleInfoProvider fallbackForMissingClass() { - // In the OSS case, the annotation processor does not run. - // We fall back to creating this by hand - Class[] moduleList = - new Class[] { - AccessibilityInfoModule.class, - AppearanceModule.class, - AppStateModule.class, - BlobModule.class, - DevLoadingModule.class, - FileReaderModule.class, - ClipboardModule.class, - DialogModule.class, - FrescoModule.class, - I18nManagerModule.class, - ImageLoaderModule.class, - ImageStoreManager.class, - IntentModule.class, - NativeAnimatedModule.class, - NetworkingModule.class, - PermissionsModule.class, - ReactDevToolsSettingsManagerModule.class, - ReactDevToolsRuntimeSettingsModule.class, - ShareModule.class, - StatusBarModule.class, - SoundManagerModule.class, - ToastModule.class, - VibrationModule.class, - WebSocketModule.class - }; - - final Map reactModuleInfoMap = new HashMap<>(); - for (Class moduleClass : moduleList) { - ReactModule reactModule = moduleClass.getAnnotation(ReactModule.class); - if (reactModule != null) { - reactModuleInfoMap.put( - reactModule.name(), - new ReactModuleInfo( - reactModule.name(), - moduleClass.getName(), - reactModule.canOverrideExistingModule(), - reactModule.needsEagerInit(), - reactModule.isCxxModule(), - ReactModuleInfo.classIsTurboModule(moduleClass))); - } - } - return () -> reactModuleInfoMap; - } -} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.kt new file mode 100644 index 00000000000..a7efbecb074 --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/shell/MainReactPackage.kt @@ -0,0 +1,272 @@ +/* + * 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.shell + +import android.annotation.SuppressLint +import com.facebook.react.BaseReactPackage +import com.facebook.react.ViewManagerOnDemandReactPackage +import com.facebook.react.animated.NativeAnimatedModule +import com.facebook.react.bridge.ModuleSpec +import com.facebook.react.bridge.NativeModule +import com.facebook.react.bridge.ReactApplicationContext +import com.facebook.react.common.ClassFinder +import com.facebook.react.module.annotations.ReactModule +import com.facebook.react.module.annotations.ReactModuleList +import com.facebook.react.module.model.ReactModuleInfo +import com.facebook.react.module.model.ReactModuleInfo.Companion.classIsTurboModule +import com.facebook.react.module.model.ReactModuleInfoProvider +import com.facebook.react.modules.accessibilityinfo.AccessibilityInfoModule +import com.facebook.react.modules.appearance.AppearanceModule +import com.facebook.react.modules.appstate.AppStateModule +import com.facebook.react.modules.blob.BlobModule +import com.facebook.react.modules.blob.FileReaderModule +import com.facebook.react.modules.camera.ImageStoreManager +import com.facebook.react.modules.clipboard.ClipboardModule +import com.facebook.react.modules.devloading.DevLoadingModule +import com.facebook.react.modules.devtoolsruntimesettings.ReactDevToolsRuntimeSettingsModule +import com.facebook.react.modules.dialog.DialogModule +import com.facebook.react.modules.fresco.FrescoModule +import com.facebook.react.modules.i18nmanager.I18nManagerModule +import com.facebook.react.modules.image.ImageLoaderModule +import com.facebook.react.modules.intent.IntentModule +import com.facebook.react.modules.network.NetworkingModule +import com.facebook.react.modules.permissions.PermissionsModule +import com.facebook.react.modules.reactdevtoolssettings.ReactDevToolsSettingsManagerModule +import com.facebook.react.modules.share.ShareModule +import com.facebook.react.modules.sound.SoundManagerModule +import com.facebook.react.modules.statusbar.StatusBarModule +import com.facebook.react.modules.toast.ToastModule +import com.facebook.react.modules.vibration.VibrationModule +import com.facebook.react.modules.websocket.WebSocketModule +import com.facebook.react.uimanager.ViewManager +import com.facebook.react.views.drawer.ReactDrawerLayoutManager +import com.facebook.react.views.image.ReactImageManager +import com.facebook.react.views.modal.ReactModalHostManager +import com.facebook.react.views.progressbar.ReactProgressBarViewManager +import com.facebook.react.views.safeareaview.ReactSafeAreaViewManager +import com.facebook.react.views.scroll.ReactHorizontalScrollContainerViewManager +import com.facebook.react.views.scroll.ReactHorizontalScrollViewManager +import com.facebook.react.views.scroll.ReactScrollViewManager +import com.facebook.react.views.swiperefresh.SwipeRefreshLayoutManager +import com.facebook.react.views.switchview.ReactSwitchManager +import com.facebook.react.views.text.ReactRawTextManager +import com.facebook.react.views.text.ReactTextViewManager +import com.facebook.react.views.text.ReactVirtualTextViewManager +import com.facebook.react.views.text.frescosupport.FrescoBasedReactTextInlineImageViewManager +import com.facebook.react.views.textinput.ReactTextInputManager +import com.facebook.react.views.unimplementedview.ReactUnimplementedViewManager +import com.facebook.react.views.view.ReactViewManager + +/** + * Package defining basic modules and view managers. + * + * @param config configuration for the Main package. + */ +@ReactModuleList( + nativeModules = + [ + AccessibilityInfoModule::class, + AppearanceModule::class, + AppStateModule::class, + BlobModule::class, + DevLoadingModule::class, + FileReaderModule::class, + ClipboardModule::class, + DialogModule::class, + FrescoModule::class, + I18nManagerModule::class, + ImageLoaderModule::class, + ImageStoreManager::class, + IntentModule::class, + NativeAnimatedModule::class, + NetworkingModule::class, + PermissionsModule::class, + ReactDevToolsSettingsManagerModule::class, + ReactDevToolsRuntimeSettingsModule::class, + ShareModule::class, + SoundManagerModule::class, + StatusBarModule::class, + ToastModule::class, + VibrationModule::class, + WebSocketModule::class, + ]) +public class MainReactPackage +@JvmOverloads +constructor(private val config: MainPackageConfig? = null) : + BaseReactPackage(), ViewManagerOnDemandReactPackage { + + override fun getModule(name: String, context: ReactApplicationContext): NativeModule? = + when (name) { + AccessibilityInfoModule.NAME -> AccessibilityInfoModule(context) + AppearanceModule.NAME -> AppearanceModule(context) + AppStateModule.NAME -> AppStateModule(context) + BlobModule.NAME -> BlobModule(context) + DevLoadingModule.NAME -> DevLoadingModule(context) + FileReaderModule.NAME -> FileReaderModule(context) + ClipboardModule.NAME -> ClipboardModule(context) + DialogModule.NAME -> DialogModule(context) + FrescoModule.NAME -> FrescoModule(context, true, config?.frescoConfig) + I18nManagerModule.NAME -> I18nManagerModule(context) + ImageLoaderModule.NAME -> ImageLoaderModule(context) + ImageStoreManager.NAME -> ImageStoreManager(context) + IntentModule.NAME -> IntentModule(context) + NativeAnimatedModule.NAME -> NativeAnimatedModule(context) + NetworkingModule.NAME -> NetworkingModule(context) + PermissionsModule.NAME -> PermissionsModule(context) + ShareModule.NAME -> ShareModule(context) + StatusBarModule.NAME -> StatusBarModule(context) + SoundManagerModule.NAME -> SoundManagerModule(context) + ToastModule.NAME -> ToastModule(context) + VibrationModule.NAME -> VibrationModule(context) + WebSocketModule.NAME -> WebSocketModule(context) + ReactDevToolsSettingsManagerModule.NAME -> ReactDevToolsSettingsManagerModule(context) + ReactDevToolsRuntimeSettingsModule.NAME -> ReactDevToolsRuntimeSettingsModule(context) + else -> null + } + + override fun createViewManagers(reactContext: ReactApplicationContext): List> = + listOf( + ReactDrawerLayoutManager(), + ReactHorizontalScrollViewManager(), + ReactHorizontalScrollContainerViewManager(), + ReactProgressBarViewManager(), + ReactScrollViewManager(), + ReactSwitchManager(), + ReactSafeAreaViewManager(), + SwipeRefreshLayoutManager(), + // Native equivalents + FrescoBasedReactTextInlineImageViewManager(), + ReactImageManager(), + ReactModalHostManager(), + ReactRawTextManager(), + ReactTextInputManager(), + ReactTextViewManager(), + ReactViewManager(), + ReactVirtualTextViewManager(), + ReactUnimplementedViewManager()) + + /** + * A map of view managers that should be registered with + * [com.facebook.react.uimanager.UIManagerModule] + */ + @SuppressLint("VisibleForTests") + public val viewManagersMap: Map = + mapOf( + ReactDrawerLayoutManager.REACT_CLASS to + ModuleSpec.viewManagerSpec { ReactDrawerLayoutManager() }, + ReactHorizontalScrollViewManager.REACT_CLASS to + ModuleSpec.viewManagerSpec { ReactHorizontalScrollViewManager() }, + ReactHorizontalScrollContainerViewManager.REACT_CLASS to + ModuleSpec.viewManagerSpec { ReactHorizontalScrollContainerViewManager() }, + ReactProgressBarViewManager.REACT_CLASS to + ModuleSpec.viewManagerSpec { ReactProgressBarViewManager() }, + ReactSafeAreaViewManager.REACT_CLASS to + ModuleSpec.viewManagerSpec { ReactSafeAreaViewManager() }, + ReactScrollViewManager.REACT_CLASS to + ModuleSpec.viewManagerSpec { ReactScrollViewManager() }, + ReactSwitchManager.REACT_CLASS to ModuleSpec.viewManagerSpec { ReactSwitchManager() }, + SwipeRefreshLayoutManager.REACT_CLASS to + ModuleSpec.viewManagerSpec { SwipeRefreshLayoutManager() }, + FrescoBasedReactTextInlineImageViewManager.REACT_CLASS to + ModuleSpec.viewManagerSpec { FrescoBasedReactTextInlineImageViewManager() }, + ReactImageManager.REACT_CLASS to ModuleSpec.viewManagerSpec { ReactImageManager() }, + ReactModalHostManager.REACT_CLASS to + ModuleSpec.viewManagerSpec { ReactModalHostManager() }, + ReactRawTextManager.REACT_CLASS to ModuleSpec.viewManagerSpec { ReactRawTextManager() }, + ReactTextInputManager.REACT_CLASS to + ModuleSpec.viewManagerSpec { ReactTextInputManager() }, + ReactTextViewManager.REACT_CLASS to ModuleSpec.viewManagerSpec { ReactTextViewManager() }, + ReactViewManager.REACT_CLASS to ModuleSpec.viewManagerSpec { ReactViewManager() }, + ReactVirtualTextViewManager.REACT_CLASS to + ModuleSpec.viewManagerSpec { ReactVirtualTextViewManager() }, + ReactUnimplementedViewManager.REACT_CLASS to + ModuleSpec.viewManagerSpec { ReactUnimplementedViewManager() }) + + public override fun getViewManagers(reactContext: ReactApplicationContext): List = + viewManagersMap.values.toList() + + override fun getViewManagerNames(reactContext: ReactApplicationContext): Collection = + viewManagersMap.keys + + override fun createViewManager( + reactContext: ReactApplicationContext, + viewManagerName: String + ): ViewManager<*, *>? { + val spec = viewManagersMap[viewManagerName] + return spec?.provider?.get() as? ViewManager<*, *> + } + + override fun getReactModuleInfoProvider(): ReactModuleInfoProvider { + if (!ClassFinder.canLoadClassesFromAnnotationProcessors()) { + return fallbackForMissingClass() + } + try { + val reactModuleInfoProviderClass = + ClassFinder.findClass( + "com.facebook.react.shell.MainReactPackage$\$ReactModuleInfoProvider") + @Suppress("DEPRECATION") + return reactModuleInfoProviderClass?.newInstance() as? ReactModuleInfoProvider + ?: fallbackForMissingClass() + } catch (e: ClassNotFoundException) { + return fallbackForMissingClass() + } catch (e: InstantiationException) { + throw RuntimeException( + "No ReactModuleInfoProvider for MainReactPackage$\$ReactModuleInfoProvider", e) + } catch (e: IllegalAccessException) { + throw RuntimeException( + "No ReactModuleInfoProvider for MainReactPackage$\$ReactModuleInfoProvider", e) + } + } + + private fun fallbackForMissingClass(): ReactModuleInfoProvider { + // In the OSS case, the annotation processor does not run. + // We fall back to creating this by hand + val moduleList: Array> = + arrayOf( + AccessibilityInfoModule::class.java, + AppearanceModule::class.java, + AppStateModule::class.java, + BlobModule::class.java, + DevLoadingModule::class.java, + FileReaderModule::class.java, + ClipboardModule::class.java, + DialogModule::class.java, + FrescoModule::class.java, + I18nManagerModule::class.java, + ImageLoaderModule::class.java, + ImageStoreManager::class.java, + IntentModule::class.java, + NativeAnimatedModule::class.java, + NetworkingModule::class.java, + PermissionsModule::class.java, + ReactDevToolsSettingsManagerModule::class.java, + ReactDevToolsRuntimeSettingsModule::class.java, + ShareModule::class.java, + StatusBarModule::class.java, + SoundManagerModule::class.java, + ToastModule::class.java, + VibrationModule::class.java, + WebSocketModule::class.java) + + val moduleMap = + moduleList + .filter { it.isAnnotationPresent(ReactModule::class.java) } + .associate { moduleClass -> + val reactModule = checkNotNull(moduleClass.getAnnotation(ReactModule::class.java)) + reactModule.name to + ReactModuleInfo( + reactModule.name, + moduleClass.name, + reactModule.canOverrideExistingModule, + reactModule.needsEagerInit, + reactModule.isCxxModule, + classIsTurboModule(moduleClass)) + } + return ReactModuleInfoProvider { moduleMap } + } +}