diff --git a/packages/react-native/Libraries/LogBox/UI/LogBoxInspector.js b/packages/react-native/Libraries/LogBox/UI/LogBoxInspector.js index 646294b40f5a..4c854f539c96 100644 --- a/packages/react-native/Libraries/LogBox/UI/LogBoxInspector.js +++ b/packages/react-native/Libraries/LogBox/UI/LogBoxInspector.js @@ -11,6 +11,7 @@ import Keyboard from '../../Components/Keyboard/Keyboard'; import View from '../../Components/View/View'; import StyleSheet from '../../StyleSheet/StyleSheet'; +import BackHandler from '../../Utilities/BackHandler'; import * as LogBoxData from '../Data/LogBoxData'; import LogBoxLog, {type LogLevel} from '../Data/LogBoxLog'; import LogBoxInspectorBody from './LogBoxInspectorBody'; @@ -30,7 +31,7 @@ type Props = Readonly<{ }>; export default function LogBoxInspector(props: Props): React.Node { - const {logs, selectedIndex} = props; + const {logs, selectedIndex, onMinimize} = props; let log = logs[selectedIndex]; useEffect(() => { @@ -55,6 +56,17 @@ export default function LogBoxInspector(props: Props): React.Node { Keyboard.dismiss(); }, []); + useEffect(() => { + const subscription = BackHandler.addEventListener( + 'hardwareBackPress', + () => { + onMinimize(); + return true; + }, + ); + return () => subscription.remove(); + }, [onMinimize]); + function _handleRetry() { LogBoxData.retrySymbolicateLogNow(log); } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/LogBoxDialogSurfaceDelegate.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/LogBoxDialogSurfaceDelegate.kt index dd1e5ca616d0..0138a7c9b6ab 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/LogBoxDialogSurfaceDelegate.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/LogBoxDialogSurfaceDelegate.kt @@ -66,7 +66,11 @@ internal class LogBoxDialogSurfaceDelegate(private val devSupportManager: DevSup dialog = LogBoxDialog(context, reactRootView) dialog?.let { dialog -> - dialog.setCancelable(false) + dialog.setCancelable(true) + dialog.setCanceledOnTouchOutside(false) + dialog.setOnCancelListener { + devSupportManager.currentReactContext?.emitDeviceEvent("hardwareBackPress") + } dialog.show() } } diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/RedBoxDialogSurfaceDelegate.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/RedBoxDialogSurfaceDelegate.kt index 9346cc254123..0eb15d07552e 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/RedBoxDialogSurfaceDelegate.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/devsupport/RedBoxDialogSurfaceDelegate.kt @@ -125,6 +125,7 @@ internal class RedBoxDialogSurfaceDelegate(private val devSupportManager: DevSup .apply { requestWindowFeature(Window.FEATURE_NO_TITLE) setContentView(checkNotNull(redBoxContentView)) + setOnCancelListener { devSupportManager.hideRedboxDialog() } } } dialog?.show()