Skip to content

Commit

Permalink
RN: Cleanup ImageLoadEvent Logic (Android)
Browse files Browse the repository at this point in the history
Summary:
Cleans up `ImageLoadEvent` to minimize constructor confusion and to make the dispatching logic more predictable.

Changelog:
[Internal]

Reviewed By: mdvacca

Differential Revision: D22023141

fbshipit-source-id: 17e66de867f51121a3f9a6b782dbad700a54231a
  • Loading branch information
yungsters authored and facebook-github-bot committed Jun 16, 2020
1 parent 76fe94e commit 90997c2
Show file tree
Hide file tree
Showing 2 changed files with 46 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -30,41 +30,45 @@ public class ImageLoadEvent extends Event<ImageLoadEvent> {
public static final int ON_PROGRESS = 5;

private final int mEventType;
private final @Nullable String mImageUri;
private final @Nullable String mErrorMessage;
private final @Nullable String mSourceUri;
private final int mWidth;
private final int mHeight;
private final @Nullable String mImageError;

public ImageLoadEvent(int viewId, @ImageEventType int eventType) {
this(viewId, eventType, null);
public static final ImageLoadEvent createLoadStartEvent(int viewId) {
return new ImageLoadEvent(viewId, ON_LOAD_START);
}

public ImageLoadEvent(int viewId, @ImageEventType int eventType, boolean error, String message) {
this(viewId, eventType, null, 0, 0, message);
public static final ImageLoadEvent createLoadEvent(
int viewId, @Nullable String imageUri, int width, int height) {
return new ImageLoadEvent(viewId, ON_LOAD, null, imageUri, width, height);
}

public ImageLoadEvent(int viewId, @ImageEventType int eventType, String imageUri) {
this(viewId, eventType, imageUri, 0, 0, null);
public static final ImageLoadEvent createErrorEvent(int viewId, Throwable throwable) {
return new ImageLoadEvent(viewId, ON_ERROR, throwable.getMessage(), null, 0, 0);
}

public ImageLoadEvent(
int viewId, @ImageEventType int eventType, @Nullable String imageUri, int width, int height) {
this(viewId, eventType, imageUri, width, height, null);
public static final ImageLoadEvent createLoadEndEvent(int viewId) {
return new ImageLoadEvent(viewId, ON_LOAD_END);
}

public ImageLoadEvent(
private ImageLoadEvent(int viewId, @ImageEventType int eventType) {
this(viewId, eventType, null, null, 0, 0);
}

private ImageLoadEvent(
int viewId,
@ImageEventType int eventType,
@Nullable String imageUri,
@Nullable String errorMessage,
@Nullable String sourceUri,
int width,
int height,
@Nullable String message) {
int height) {
super(viewId);
mEventType = eventType;
mImageUri = imageUri;
mErrorMessage = errorMessage;
mSourceUri = sourceUri;
mWidth = width;
mHeight = height;
mImageError = message;
}

public static String eventNameForType(@ImageEventType int eventType) {
Expand Down Expand Up @@ -100,26 +104,29 @@ public short getCoalescingKey() {
public void dispatch(RCTEventEmitter rctEventEmitter) {
WritableMap eventData = null;

if (mImageUri != null || (mEventType == ON_LOAD || mEventType == ON_ERROR)) {
eventData = Arguments.createMap();

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);
} else if (mEventType == ON_ERROR) {
eventData.putString("error", mImageError);
}
switch (mEventType) {
case ON_LOAD:
eventData = Arguments.createMap();
// TODO: Remove this (to be less redundant and to be consistent with iOS).
eventData.putString("uri", mSourceUri);
eventData.putMap("source", createEventDataSource());
break;
case ON_ERROR:
eventData = Arguments.createMap();
// TODO: Remove this (to be less redundant and to be consistent with iOS).
eventData.putString("uri", mSourceUri);
eventData.putString("error", mErrorMessage);
break;
}

rctEventEmitter.receiveEvent(getViewTag(), getEventName(), eventData);
}

private WritableMap createEventDataSource() {
WritableMap source = Arguments.createMap();
source.putDouble("width", mWidth);
source.putDouble("height", mHeight);
source.putString("url", mSourceUri);
return source;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -240,31 +240,26 @@ public void setShouldNotifyLoadEvents(boolean shouldNotify) {
new BaseControllerListener<ImageInfo>() {
@Override
public void onSubmit(String id, Object callerContext) {
mEventDispatcher.dispatchEvent(
new ImageLoadEvent(getId(), ImageLoadEvent.ON_LOAD_START));
mEventDispatcher.dispatchEvent(ImageLoadEvent.createLoadStartEvent(getId()));
}

@Override
public void onFinalImageSet(
String id, @Nullable final ImageInfo imageInfo, @Nullable Animatable animatable) {
if (imageInfo != null) {
mEventDispatcher.dispatchEvent(
new ImageLoadEvent(
ImageLoadEvent.createLoadEvent(
getId(),
ImageLoadEvent.ON_LOAD,
mImageSource.getSource(),
imageInfo.getWidth(),
imageInfo.getHeight()));
mEventDispatcher.dispatchEvent(
new ImageLoadEvent(getId(), ImageLoadEvent.ON_LOAD_END));
mEventDispatcher.dispatchEvent(ImageLoadEvent.createLoadEndEvent(getId()));
}
}

@Override
public void onFailure(String id, Throwable throwable) {
mEventDispatcher.dispatchEvent(
new ImageLoadEvent(
getId(), ImageLoadEvent.ON_ERROR, true, throwable.getMessage()));
mEventDispatcher.dispatchEvent(ImageLoadEvent.createErrorEvent(getId(), throwable));
}
};
}
Expand Down

0 comments on commit 90997c2

Please sign in to comment.