From c566ac06ce438d1ba8ff65441af6b3a1e4fe65a6 Mon Sep 17 00:00:00 2001 From: Matt Chowning Date: Thu, 19 Dec 2019 14:23:49 -0500 Subject: [PATCH] Add Android Native handling of http error codes for failed requests --- .../RNReactNativeGutenbergBridgeModule.java | 11 ++++++++++- .../mobile/WPAndroidGlue/RequestExecutor.java | 4 +++- .../mobile/WPAndroidGlue/WPAndroidGlueCode.java | 3 +-- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/react-native-gutenberg-bridge/android/src/main/java/org/wordpress/mobile/ReactNativeGutenbergBridge/RNReactNativeGutenbergBridgeModule.java b/react-native-gutenberg-bridge/android/src/main/java/org/wordpress/mobile/ReactNativeGutenbergBridge/RNReactNativeGutenbergBridgeModule.java index d599eb5735..ad6229f25c 100644 --- a/react-native-gutenberg-bridge/android/src/main/java/org/wordpress/mobile/ReactNativeGutenbergBridge/RNReactNativeGutenbergBridgeModule.java +++ b/react-native-gutenberg-bridge/android/src/main/java/org/wordpress/mobile/ReactNativeGutenbergBridge/RNReactNativeGutenbergBridgeModule.java @@ -2,6 +2,7 @@ import androidx.annotation.Nullable; +import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.Callback; import com.facebook.react.bridge.Promise; import com.facebook.react.bridge.ReactApplicationContext; @@ -191,7 +192,15 @@ public void getOtherMediaOptions(ReadableArray filter, final Callback jsCallback public void fetchRequest(String path, Promise promise) { mGutenbergBridgeJS2Parent.performRequest(path, promise::resolve, - errorMessage -> promise.reject(new Error(errorMessage))); + errorMap -> { + Object code = errorMap.remove("code"); + WritableMap writableMap = Arguments.makeNativeMap(errorMap); + if (code == null) { + promise.reject(new Error(), writableMap); + } else { + promise.reject(String.valueOf(code), new Error(), writableMap); + } + }); } private OtherMediaOptionsReceivedCallback getNewOtherMediaReceivedCallback(final Callback jsCallback) { diff --git a/react-native-gutenberg-bridge/android/src/main/java/org/wordpress/mobile/WPAndroidGlue/RequestExecutor.java b/react-native-gutenberg-bridge/android/src/main/java/org/wordpress/mobile/WPAndroidGlue/RequestExecutor.java index d0e0981fe0..cdb1a4a427 100644 --- a/react-native-gutenberg-bridge/android/src/main/java/org/wordpress/mobile/WPAndroidGlue/RequestExecutor.java +++ b/react-native-gutenberg-bridge/android/src/main/java/org/wordpress/mobile/WPAndroidGlue/RequestExecutor.java @@ -2,6 +2,8 @@ import androidx.core.util.Consumer; +import java.util.Map; + public interface RequestExecutor { - void performRequest(String path, Consumer onSuccess, Consumer onError); + void performRequest(String path, Consumer onSuccess, Consumer> onError); } diff --git a/react-native-gutenberg-bridge/android/src/main/java/org/wordpress/mobile/WPAndroidGlue/WPAndroidGlueCode.java b/react-native-gutenberg-bridge/android/src/main/java/org/wordpress/mobile/WPAndroidGlue/WPAndroidGlueCode.java index 118ff95bdd..f021b0d65f 100644 --- a/react-native-gutenberg-bridge/android/src/main/java/org/wordpress/mobile/WPAndroidGlue/WPAndroidGlueCode.java +++ b/react-native-gutenberg-bridge/android/src/main/java/org/wordpress/mobile/WPAndroidGlue/WPAndroidGlueCode.java @@ -23,7 +23,6 @@ import com.facebook.react.ReactInstanceManagerBuilder; import com.facebook.react.ReactPackage; import com.facebook.react.ReactRootView; -import com.facebook.react.bridge.Promise; import com.facebook.react.bridge.ReactContext; import com.facebook.react.bridge.ReadableArray; import com.facebook.react.common.LifecycleState; @@ -297,7 +296,7 @@ public void requestMediaPickFrom(String mediaSource, } @Override - public void performRequest(String pathFromJS, Consumer onSuccess, Consumer onError) { + public void performRequest(String pathFromJS, Consumer onSuccess, Consumer> onError) { mRequestExecutor.performRequest(pathFromJS, onSuccess, onError); }