From e87e181998bf4f8efba2c7e04bec0929344600b9 Mon Sep 17 00:00:00 2001 From: Adam Comella Date: Mon, 14 Nov 2016 19:42:34 -0800 Subject: [PATCH] Android: Expose Image's onError event to JavaScript Summary: iOS supports an Image onError event. Android was firing the event but it was never reaching JavaScript because Android didn't include this event in `getExportedCustomDirectEventTypeConstants`. **Test plan (required)** Verified that the `onError` event now fires in a test app. My team uses this change in our app. Adam Comella Microsoft Corp. Closes https://github.com/facebook/react-native/pull/10902 Differential Revision: D4180149 Pulled By: ericvicenti fbshipit-source-id: 4bf0b9aa7dc221d838d7b6b3e88bb47196dcadef --- Libraries/Image/Image.android.js | 8 ++++++-- Libraries/Image/Image.ios.js | 1 - .../com/facebook/react/views/image/ReactImageManager.java | 2 ++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/Libraries/Image/Image.android.js b/Libraries/Image/Image.android.js index cc2ffe258..bd5b0bd16 100644 --- a/Libraries/Image/Image.android.js +++ b/Libraries/Image/Image.android.js @@ -119,6 +119,10 @@ var Image = React.createClass({ * Invoked on load start */ onLoadStart: PropTypes.func, + /** + * Invoked on load error + */ + onError: PropTypes.func, /** * Invoked when load completes successfully */ @@ -284,10 +288,10 @@ var Image = React.createClass({ sources = source; } - const {onLoadStart, onLoad, onLoadEnd} = this.props; + const {onLoadStart, onLoad, onLoadEnd, onError} = this.props; const nativeProps = merge(this.props, { style, - shouldNotifyLoadEvents: !!(onLoadStart || onLoad || onLoadEnd), + shouldNotifyLoadEvents: !!(onLoadStart || onLoad || onLoadEnd || onError), src: sources, loadingIndicatorSrc: loadingIndicatorSource ? loadingIndicatorSource.uri : null, }); diff --git a/Libraries/Image/Image.ios.js b/Libraries/Image/Image.ios.js index b1acae8cd..04c78d6cb 100644 --- a/Libraries/Image/Image.ios.js +++ b/Libraries/Image/Image.ios.js @@ -255,7 +255,6 @@ const Image = React.createClass({ onProgress: PropTypes.func, /** * Invoked on load error with `{nativeEvent: {error}}`. - * @platform ios */ onError: PropTypes.func, /** diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageManager.java b/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageManager.java index 3acc27778..62d0e4540 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageManager.java @@ -178,6 +178,8 @@ public class ReactImageManager extends SimpleViewManager { MapBuilder.of("registrationName", "onLoadStart"), ImageLoadEvent.eventNameForType(ImageLoadEvent.ON_LOAD), MapBuilder.of("registrationName", "onLoad"), + ImageLoadEvent.eventNameForType(ImageLoadEvent.ON_ERROR), + MapBuilder.of("registrationName", "onError"), ImageLoadEvent.eventNameForType(ImageLoadEvent.ON_LOAD_END), MapBuilder.of("registrationName", "onLoadEnd")); }