From 606a92f0b31be1ce052a834237b99f6523bdf2d8 Mon Sep 17 00:00:00 2001 From: Ramanpreet Nara Date: Mon, 21 Aug 2023 12:43:42 -0700 Subject: [PATCH] Show RedBox when reloads fail Summary: When reloads fail, React Native currently just renders a blank screen. We should provde some sort of feedback to the developer. Hence, this diff makes the RedBox show up. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D48335851 fbshipit-source-id: 0681cd40f8c83960f9133853481013765634f5cf --- .../react/bridgeless/ReactHostImpl.java | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridgeless/ReactHostImpl.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridgeless/ReactHostImpl.java index 3ef32a03be4..87039ea85ae 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridgeless/ReactHostImpl.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/bridgeless/ReactHostImpl.java @@ -443,16 +443,27 @@ public class ReactHostImpl implements ReactHost { if (ReactFeatureFlags.enableBridgelessArchitectureNewCreateReloadDestroy) { return Task.call( () -> { + Task reloadTask = null; if (mDestroyTask != null) { - log( - method, - "Destroying React Native. Waiting for destroy to finish, before reloading React Native."); - return mDestroyTask - .continueWithTask(task -> newGetOrCreateReloadTask(reason), mBGExecutor) - .makeVoid(); + log(method, "Waiting for destroy to finish, before reloading React Native."); + reloadTask = + mDestroyTask + .continueWithTask(task -> newGetOrCreateReloadTask(reason), mBGExecutor) + .makeVoid(); + } else { + reloadTask = newGetOrCreateReloadTask(reason).makeVoid(); } - return newGetOrCreateReloadTask(reason).makeVoid(); + return reloadTask.continueWithTask( + task -> { + if (task.isFaulted()) { + mReactHostDelegate.handleInstanceException(task.getError()); + return newGetOrCreateDestroyTask("Reload failed", task.getError()); + } + + return task; + }, + mBGExecutor); }, mBGExecutor) .continueWithTask(Task::getResult);