provide image width and height on tap events

This commit is contained in:
Artal Druk 2017-05-28 14:42:34 +03:00
parent 6b1add2696
commit 604bc5bd2e
5 changed files with 27 additions and 12 deletions

View File

@ -41,18 +41,24 @@ public class GalleryAdapter extends RecyclerView.Adapter<GalleryAdapter.AbsViewH
private static final String[] PROJECTION = new String[]{
MediaStore.Images.Media.DATA,
MediaStore.Images.Media._ID,
MediaStore.Images.Media.MIME_TYPE
MediaStore.Images.Media.MIME_TYPE,
MediaStore.Images.Media.WIDTH,
MediaStore.Images.Media.HEIGHT
};
private class Image {
String uri;
Integer id;
String mimeType;
Integer width;
Integer height;
public Image(String uri, Integer id, String mimeType) {
public Image(String uri, Integer id, String mimeType, Integer width, Integer height) {
this.uri = uri;
this.id = id;
this.mimeType = mimeType;
this.width = width;
this.height = height;
}
}
@ -98,7 +104,7 @@ public class GalleryAdapter extends RecyclerView.Adapter<GalleryAdapter.AbsViewH
return;
}
onTapImage(image.uri);
onTapImage(image.uri, image.width, image.height);
v.setSelected(!isSelected);
}
@ -281,13 +287,15 @@ public class GalleryAdapter extends RecyclerView.Adapter<GalleryAdapter.AbsViewH
int dataIndex = cursor.getColumnIndex(MediaStore.Images.Media.DATA);
int idIndex = cursor.getColumnIndex(MediaStore.Images.Media._ID);
int mimeIndex = cursor.getColumnIndex(MediaStore.Images.Media.MIME_TYPE);
int widthIndex = cursor.getColumnIndex(MediaStore.Images.Media.WIDTH);
int heightIndex = cursor.getColumnIndex(MediaStore.Images.Media.HEIGHT);
do {
images.add(new Image(cursor.getString(dataIndex), cursor.getInt(idIndex), cursor.getString(mimeIndex)));
images.add(new Image(cursor.getString(dataIndex), cursor.getInt(idIndex), cursor.getString(mimeIndex), cursor.getInt(widthIndex), cursor.getInt(heightIndex)));
} while (cursor.moveToNext());
}
if (shouldShowCustomButton()) {
images.add(new Image(null, -1, ""));
images.add(new Image(null, -1, "", 0, 0));
}
Collections.reverse(images);
cursor.close();
@ -353,9 +361,9 @@ public class GalleryAdapter extends RecyclerView.Adapter<GalleryAdapter.AbsViewH
return customButtonImage != null;
}
public void onTapImage(String uri) {
public void onTapImage(String uri, Integer width, Integer height) {
final ReactContext reactContext = ((ReactContext) view.getContext());
reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent(new TapImageEvent(getRootViewId(), uri));
reactContext.getNativeModule(UIManagerModule.class).getEventDispatcher().dispatchEvent(new TapImageEvent(getRootViewId(), uri, width, height));
}
public void onTapCustomButton() {

View File

@ -10,11 +10,13 @@ public class TapImageEvent extends Event<TapImageEvent> {
private final int targetTag;
private WritableMap event;
TapImageEvent(int targetTag, String uri) {
TapImageEvent(int targetTag, String uri, Integer width, Integer height) {
this.targetTag = targetTag;
event = Arguments.createMap();
event.putString("selected", uri);
event.putString("id", "onTapImage");
event.putInt("width", width);
event.putInt("height", height);
init(0);
}

View File

@ -444,6 +444,9 @@ static NSString * const CustomCellReuseIdentifier = @"CustomCell";
-(void)onSelectChanged:(PHAsset*)asset {
if (self.onTapImage) {
NSMutableDictionary *imageTapInfo = [@{@"width": [NSNumber numberWithUnsignedInteger:asset.pixelWidth],
@"height": [NSNumber numberWithUnsignedInteger:asset.pixelHeight]} mutableCopy];
BOOL shouldReturnUrl = self.getUrlOnTapImage ? [self.getUrlOnTapImage boolValue] : NO;
if (shouldReturnUrl) {
PHImageRequestOptions *imageRequestOptions = [[PHImageRequestOptions alloc] init];
@ -451,7 +454,8 @@ static NSString * const CustomCellReuseIdentifier = @"CustomCell";
NSDictionary *info = [CKGalleryViewManager infoForAsset:asset imageRequestOptions:imageRequestOptions imageQuality:self.imageQualityOnTap];
NSString *uriString = info[@"uri"];
if (uriString) {
self.onTapImage(@{@"selected": uriString, @"selectedId": asset.localIdentifier});
[imageTapInfo addEntriesFromDictionary:@{@"selected": uriString, @"selectedId": asset.localIdentifier}];
self.onTapImage(imageTapInfo);
}
else {
self.onTapImage(@{@"Error": @"Could not get image uri"});
@ -459,7 +463,8 @@ static NSString * const CustomCellReuseIdentifier = @"CustomCell";
}
else {
self.onTapImage(@{@"selected":asset.localIdentifier});
[imageTapInfo addEntriesFromDictionary:@{@"selected":asset.localIdentifier}];
self.onTapImage(imageTapInfo);
}
}
}

View File

@ -19,7 +19,7 @@ async function getImagesForIds(imagesUris = []) {
async function getImageForTapEvent(nativeEvent) {
const selectedImageId = nativeEvent.selected;
const imageUri = selectedImageId && await getImageUriForId(selectedImageId);
return {selectedImageId, imageUri};
return {selectedImageId, imageUri, width: nativeEvent.width, height: nativeEvent.height};
}
async function checkDevicePhotosAuthorizationStatus() {

View File

@ -35,7 +35,7 @@ async function getImageForTapEvent(nativeEvent) {
selectedImageId = nativeEvent.selected;
imageUri = await getImageUriForId(selectedImageId);
}
return {selectedImageId, imageUri};
return {selectedImageId, imageUri, width: nativeEvent.width, height: nativeEvent.height};
}