diff --git a/android/build.gradle b/android/build.gradle index b9aab4871d12..0667684c187e 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -380,6 +380,13 @@ android { srcDirs += "src/reactNativeVersionPatch/ReanimatedUIManager/latest" } + // ReactHost + if (REACT_NATIVE_MINOR_VERSION <= 72) { + srcDirs += "src/reactNativeVersionPatch/ReactHost/72" + } else { + srcDirs += "src/reactNativeVersionPatch/ReactHost/latest" + } + // ReactFeatureFlags if (IS_NEW_ARCHITECTURE_ENABLED) { if (REACT_NATIVE_MINOR_VERSION <= 72) { diff --git a/android/src/main/java/com/swmansion/reanimated/nativeProxy/NativeProxyCommon.java b/android/src/main/java/com/swmansion/reanimated/nativeProxy/NativeProxyCommon.java index 427b6c832bd4..05231d5db19b 100644 --- a/android/src/main/java/com/swmansion/reanimated/nativeProxy/NativeProxyCommon.java +++ b/android/src/main/java/com/swmansion/reanimated/nativeProxy/NativeProxyCommon.java @@ -6,17 +6,16 @@ import android.util.Log; import com.facebook.jni.HybridData; import com.facebook.proguard.annotations.DoNotStrip; -import com.facebook.react.ReactApplication; import com.facebook.react.bridge.NativeModule; import com.facebook.react.bridge.ReactApplicationContext; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.ReadableNativeArray; -import com.facebook.react.devsupport.interfaces.DevSupportManager; import com.facebook.soloader.SoLoader; import com.swmansion.common.GestureHandlerStateManager; import com.swmansion.reanimated.AndroidUIScheduler; import com.swmansion.reanimated.BuildConfig; +import com.swmansion.reanimated.DevMenuUtils; import com.swmansion.reanimated.NativeProxy; import com.swmansion.reanimated.NodesManager; import com.swmansion.reanimated.ReanimatedModule; @@ -83,16 +82,7 @@ private void toggleSlowAnimations() { private void addDevMenuOption() { // In Expo, `ApplicationContext` is not an instance of `ReactApplication` - if (mContext.get().getApplicationContext() instanceof ReactApplication) { - final DevSupportManager devSupportManager = - ((ReactApplication) mContext.get().getApplicationContext()) - .getReactNativeHost() - .getReactInstanceManager() - .getDevSupportManager(); - - devSupportManager.addCustomDevOption( - "Toggle slow animations (Reanimated)", this::toggleSlowAnimations); - } + DevMenuUtils.addDevMenuOption(mContext.get(), this::toggleSlowAnimations); } @DoNotStrip diff --git a/android/src/reactNativeVersionPatch/ReactHost/72/com/swmansion/reanimated/DevMenuUtils.java b/android/src/reactNativeVersionPatch/ReactHost/72/com/swmansion/reanimated/DevMenuUtils.java new file mode 100644 index 000000000000..d39c8d6d78e9 --- /dev/null +++ b/android/src/reactNativeVersionPatch/ReactHost/72/com/swmansion/reanimated/DevMenuUtils.java @@ -0,0 +1,18 @@ +package com.swmansion.reanimated; + +public class DevMenuUtils { + + private void addDevMenuOption(ReactApplicationContext context, DevOptionHandler handler) { + // In Expo, `ApplicationContext` is not an instance of `ReactApplication` + if (context.getApplicationContext() instanceof ReactApplication) { + final DevSupportManager devSupportManager = + ((ReactApplication) context.getApplicationContext()) + .getReactNativeHost() + .getReactInstanceManager() + .getDevSupportManager(); + + devSupportManager.addCustomDevOption( + "Toggle slow animations (Reanimated)", handler); + } + } +} diff --git a/android/src/reactNativeVersionPatch/ReactHost/latest/com/swmansion/reanimated/DevMenuUtils.java b/android/src/reactNativeVersionPatch/ReactHost/latest/com/swmansion/reanimated/DevMenuUtils.java new file mode 100644 index 000000000000..36b14cee3b72 --- /dev/null +++ b/android/src/reactNativeVersionPatch/ReactHost/latest/com/swmansion/reanimated/DevMenuUtils.java @@ -0,0 +1,34 @@ +package com.swmansion.reanimated; + +import com.facebook.react.ReactApplication; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.devsupport.interfaces.DevOptionHandler; +import com.facebook.react.devsupport.interfaces.DevSupportManager; + +public class DevMenuUtils { + + public static void addDevMenuOption(ReactApplicationContext context, DevOptionHandler handler) { + // In Expo, `ApplicationContext` is not an instance of `ReactApplication` + if (context.getApplicationContext() instanceof ReactApplication) { + DevSupportManager devSupportManager; + if (context.isBridgeless()) { + devSupportManager = + ((ReactApplication) context.getApplicationContext()) + .getReactHost().getDevSupportManager(); + } else { + devSupportManager = + ((ReactApplication) context.getApplicationContext()) + .getReactNativeHost() + .getReactInstanceManager() + .getDevSupportManager(); + } + + if (devSupportManager != null) { + devSupportManager.addCustomDevOption( + "Toggle slow animations (Reanimated)", handler); + } else { + throw new RuntimeException("[Reanimated] DevSupportManager is not available"); + } + } + } +}