diff --git a/packages/react-native/ReactAndroid/api/ReactAndroid.api b/packages/react-native/ReactAndroid/api/ReactAndroid.api index c83c01d7b0f..f11528dbaa1 100644 --- a/packages/react-native/ReactAndroid/api/ReactAndroid.api +++ b/packages/react-native/ReactAndroid/api/ReactAndroid.api @@ -2130,6 +2130,7 @@ public abstract class com/facebook/react/devsupport/DevSupportManagerBase : com/ public fun handleException (Ljava/lang/Exception;)V public fun hasUpToDateJSBundleInCache ()Z protected fun hideDevLoadingView ()V + public fun hidePausedInDebuggerOverlay ()V public fun hideRedboxDialog ()V public fun isPackagerRunning (Lcom/facebook/react/devsupport/interfaces/PackagerStatusCallback;)V public fun onNewReactContextCreated (Lcom/facebook/react/bridge/ReactContext;)V @@ -2149,6 +2150,7 @@ public abstract class com/facebook/react/devsupport/DevSupportManagerBase : com/ public fun showDevOptionsDialog ()V public fun showNewJSError (Ljava/lang/String;Lcom/facebook/react/bridge/ReadableArray;I)V public fun showNewJavaError (Ljava/lang/String;Ljava/lang/Throwable;)V + public fun showPausedInDebuggerOverlay (Ljava/lang/String;)V public fun startInspector ()V public fun stopInspector ()V public fun toggleElementInspector ()V @@ -2294,6 +2296,7 @@ public class com/facebook/react/devsupport/ReleaseDevSupportManager : com/facebo public fun handleException (Ljava/lang/Exception;)V public fun handleReloadJS ()V public fun hasUpToDateJSBundleInCache ()Z + public fun hidePausedInDebuggerOverlay ()V public fun hideRedboxDialog ()V public fun isPackagerRunning (Lcom/facebook/react/devsupport/interfaces/PackagerStatusCallback;)V public fun loadSplitBundleFromServer (Ljava/lang/String;Lcom/facebook/react/devsupport/interfaces/DevSplitBundleCallback;)V @@ -2313,6 +2316,7 @@ public class com/facebook/react/devsupport/ReleaseDevSupportManager : com/facebo public fun showDevOptionsDialog ()V public fun showNewJSError (Ljava/lang/String;Lcom/facebook/react/bridge/ReadableArray;I)V public fun showNewJavaError (Ljava/lang/String;Ljava/lang/Throwable;)V + public fun showPausedInDebuggerOverlay (Ljava/lang/String;)V public fun startInspector ()V public fun stopInspector ()V public fun toggleElementInspector ()V @@ -2404,6 +2408,7 @@ public abstract interface class com/facebook/react/devsupport/interfaces/DevSupp public abstract fun getSourceUrl ()Ljava/lang/String; public abstract fun handleReloadJS ()V public abstract fun hasUpToDateJSBundleInCache ()Z + public abstract fun hidePausedInDebuggerOverlay ()V public abstract fun hideRedboxDialog ()V public abstract fun isPackagerRunning (Lcom/facebook/react/devsupport/interfaces/PackagerStatusCallback;)V public abstract fun loadSplitBundleFromServer (Ljava/lang/String;Lcom/facebook/react/devsupport/interfaces/DevSplitBundleCallback;)V @@ -2423,6 +2428,7 @@ public abstract interface class com/facebook/react/devsupport/interfaces/DevSupp public abstract fun showDevOptionsDialog ()V public abstract fun showNewJSError (Ljava/lang/String;Lcom/facebook/react/bridge/ReadableArray;I)V public abstract fun showNewJavaError (Ljava/lang/String;Ljava/lang/Throwable;)V + public abstract fun showPausedInDebuggerOverlay (Ljava/lang/String;)V public abstract fun startInspector ()V public abstract fun stopInspector ()V public abstract fun toggleElementInspector ()V diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java index 98130368d4b..3159ccb9709 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java @@ -1502,7 +1502,11 @@ public class ReactInstanceManager { @Override public void onSetPausedInDebuggerMessage(@Nullable String message) { - // TODO(moti): Implement this + if (message == null) { + mDevSupportManager.hidePausedInDebuggerOverlay(); + } else { + mDevSupportManager.showPausedInDebuggerOverlay(message); + } } }); } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.java index bd4240fff3c..0646e89e473 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/DevSupportManagerBase.java @@ -1164,4 +1164,34 @@ public abstract class DevSupportManagerBase implements DevSupportManager { mDevServerHelper.openDebugger( mCurrentContext, mApplicationContext.getString(R.string.catalyst_open_debugger_error)); } + + private @Nullable AlertDialog mPausedInDebuggerDialog; + + @Override + public void showPausedInDebuggerOverlay(String message) { + UiThreadUtil.runOnUiThread( + () -> { + if (mPausedInDebuggerDialog != null) { + mPausedInDebuggerDialog.dismiss(); + } + Activity context = mReactInstanceDevHelper.getCurrentActivity(); + if (context == null || context.isFinishing()) { + return; + } + mPausedInDebuggerDialog = + new AlertDialog.Builder(context).setMessage(message).setCancelable(false).create(); + mPausedInDebuggerDialog.show(); + }); + } + + @Override + public void hidePausedInDebuggerOverlay() { + UiThreadUtil.runOnUiThread( + () -> { + if (mPausedInDebuggerDialog != null) { + mPausedInDebuggerDialog.dismiss(); + mPausedInDebuggerDialog = null; + } + }); + } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/ReleaseDevSupportManager.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/ReleaseDevSupportManager.java index 82e36f7ad48..3c2404ae27a 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/ReleaseDevSupportManager.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/ReleaseDevSupportManager.java @@ -207,4 +207,10 @@ public class ReleaseDevSupportManager implements DevSupportManager { @Override public void openDebugger() {} + + @Override + public void showPausedInDebuggerOverlay(String message) {} + + @Override + public void hidePausedInDebuggerOverlay() {} } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevSupportManager.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevSupportManager.kt index 9e6d3251ab5..802696a7069 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevSupportManager.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/interfaces/DevSupportManager.kt @@ -105,6 +105,12 @@ public interface DevSupportManager : JSExceptionHandler { /** Attempt to open the JS debugger on the host machine. */ public fun openDebugger() + /** Shows the "paused in debugger" overlay with the given message. */ + public fun showPausedInDebuggerOverlay(message: String) + + /** Hides the "paused in debugger" overlay, if currently shown. */ + public fun hidePausedInDebuggerOverlay() + /** * The PackagerLocationCustomizer allows you to have a dynamic packager location that is * determined right before loading the packager. Your customizer must call |callback|, as loading diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java index 9afc9f616f1..ca793505b4f 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java @@ -469,7 +469,11 @@ public class ReactHostImpl implements ReactHost { @DoNotStrip private void setPausedInDebuggerMessage(@Nullable String message) { - // TODO(moti): Implement this + if (message == null) { + mDevSupportManager.hidePausedInDebuggerOverlay(); + } else { + mDevSupportManager.showPausedInDebuggerOverlay(message); + } } /**