From bcf48e74aee77d8e5604047b1412154247370f12 Mon Sep 17 00:00:00 2001 From: Adam Comella Date: Thu, 1 Sep 2016 02:38:37 -0700 Subject: [PATCH] Include image dimensions & url in Image's onLoad callback Summary: This is similar to the iOS feature that was implemented by 84f68c338a09d6d0dc29985874b54e7d23fcc933. **Test plan (required)** Verified that the image dimensions are included in the `onLoad` callback in a test app. Also, this change is used in my team's app. Adam Comella Microsoft Corp. Closes https://github.com/facebook/react-native/pull/9608 Differential Revision: D3797659 Pulled By: foghina fbshipit-source-id: ea83a907bf6b0b61d9bc1e90fc7c64b7132db81f --- .../react/views/image/ImageLoadEvent.java | 33 ++++++++++++++++--- .../react/views/image/ReactImageView.java | 3 +- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/image/ImageLoadEvent.java b/ReactAndroid/src/main/java/com/facebook/react/views/image/ImageLoadEvent.java index cee5ebc34..f47c34540 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/image/ImageLoadEvent.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/image/ImageLoadEvent.java @@ -36,22 +36,32 @@ public class ImageLoadEvent extends Event { private final int mEventType; private final @Nullable String mImageUri; + private final int mWidth; + private final int mHeight; public ImageLoadEvent(int viewId, @ImageEventType int eventType) { this(viewId, eventType, null); } + public ImageLoadEvent(int viewId, @ImageEventType int eventType, String imageUri) { + this(viewId, eventType, imageUri, 0, 0); + } + public ImageLoadEvent( int viewId, @ImageEventType int eventType, - @Nullable String imageUri) { + @Nullable String imageUri, + int width, + int height) { super(viewId); mEventType = eventType; mImageUri = imageUri; + mWidth = width; + mHeight = height; } public static String eventNameForType(@ImageEventType int eventType) { - switch(eventType) { + switch (eventType) { case ON_ERROR: return "topError"; case ON_LOAD: @@ -82,10 +92,25 @@ public class ImageLoadEvent extends Event { @Override public void dispatch(RCTEventEmitter rctEventEmitter) { WritableMap eventData = null; - if (mImageUri != null) { + + if (mImageUri != null || mEventType == ON_LOAD) { eventData = Arguments.createMap(); - eventData.putString("uri", mImageUri); + + if (mImageUri != null) { + eventData.putString("uri", mImageUri); + } + + if (mEventType == ON_LOAD) { + WritableMap source = Arguments.createMap(); + source.putDouble("width", mWidth); + source.putDouble("height", mHeight); + if (mImageUri != null) { + source.putString("url", mImageUri); + } + eventData.putMap("source", source); + } } + rctEventEmitter.receiveEvent(getViewTag(), getEventName(), eventData); } } diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.java b/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.java index ad3ac5cf9..3c6214b60 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.java @@ -201,7 +201,8 @@ public class ReactImageView extends GenericDraweeView { @Nullable Animatable animatable) { if (imageInfo != null) { mEventDispatcher.dispatchEvent( - new ImageLoadEvent(getId(), ImageLoadEvent.ON_LOAD)); + new ImageLoadEvent(getId(), ImageLoadEvent.ON_LOAD, + mImageSource.getSource(), imageInfo.getWidth(), imageInfo.getHeight())); mEventDispatcher.dispatchEvent( new ImageLoadEvent(getId(), ImageLoadEvent.ON_LOAD_END)); }