From e8af34ef614d9ceade903ac860d47ceff25d23d2 Mon Sep 17 00:00:00 2001 From: Yedidya Kennard Date: Mon, 15 Aug 2016 17:50:44 +0300 Subject: [PATCH] Android supports detecting supported types --- .../RNCameraKit/gallery/GalleryAdapter.java | 84 ++++++++++++++----- .../wix/RNCameraKit/gallery/GalleryView.java | 4 + .../gallery/GalleryViewManager.java | 41 +++++++++ .../RNCameraKit/gallery/SelectableImage.java | 11 ++- 4 files changed, 117 insertions(+), 23 deletions(-) diff --git a/android/src/main/java/com/wix/RNCameraKit/gallery/GalleryAdapter.java b/android/src/main/java/com/wix/RNCameraKit/gallery/GalleryAdapter.java index e0c57ee..dc4194d 100644 --- a/android/src/main/java/com/wix/RNCameraKit/gallery/GalleryAdapter.java +++ b/android/src/main/java/com/wix/RNCameraKit/gallery/GalleryAdapter.java @@ -22,15 +22,30 @@ import java.util.concurrent.TimeUnit; */ public class GalleryAdapter extends RecyclerView.Adapter { + private class Image { + String uri; + Integer id; + String mimeType; + + public Image(String uri, Integer id, String mimeType) { + this.uri = uri; + this.id = id; + this.mimeType = mimeType; + } + } public static final String[] PROJECTION = new String[]{ MediaStore.Images.Media.DATA, - MediaStore.Images.Media._ID + MediaStore.Images.Media._ID, + MediaStore.Images.Media.MIME_TYPE }; - private ArrayList uris = new ArrayList<>(); - private ArrayList ids = new ArrayList<>(); +// private ArrayList uris = new ArrayList<>(); +// private ArrayList ids = new ArrayList<>(); + private ArrayList images = new ArrayList<>(); + private ArrayList selectedUris = new ArrayList<>(); + private ArrayList supportedFileTypes = new ArrayList<>(); private String albumName = ""; private Drawable selectedDrawable; private Drawable unselectedDrawable; @@ -53,12 +68,17 @@ public class GalleryAdapter extends RecyclerView.Adapter supportedFileTypes) { + this.supportedFileTypes = supportedFileTypes; + } + public class StupidHolder extends RecyclerView.ViewHolder { public StupidHolder(View itemView) { super(itemView); } - int id; - String uri; +// int id; +// String uri; + Image image; } private GalleryView view; @@ -88,8 +108,9 @@ public class GalleryAdapter extends RecyclerView.Adapter ids, ArrayList uris) { - this.ids = ids; - this.uris = uris; - } +// private void setData(ArrayList ids, ArrayList uris) { +// this.ids = ids; +// this.uris = uris; +// } @Override @@ -158,21 +182,37 @@ public class GalleryAdapter extends RecyclerView.Adapter 0; +// holder.id = ids.get(position); +// holder.uri = uris.get(position); +// holder.supported = + holder.image = images.get(position); + boolean selected = (selectedUris.indexOf(holder.image.uri) + 1) > 0; + boolean supported = isSupported(holder.image); selectableImageView.setDrawables(selectedDrawable, unselectedDrawable); - selectableImageView.bind(executor, selected, holder.id); + selectableImageView.bind(executor, selected, holder.image.id, supported); selectableImageView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { - view.onTapImage(holder.uri); + view.onTapImage(holder.image.uri); } }); } + private boolean isSupported(Image image) { + if(supportedFileTypes.isEmpty()) { + return true; + } else { + for(String supportedMime : supportedFileTypes) { + if (image.mimeType.toLowerCase().equals(supportedMime.toLowerCase())) { + return true; + } + } + return false; + } + } + @Override public int getItemCount() { - return ids.size(); + return images.size(); } } diff --git a/android/src/main/java/com/wix/RNCameraKit/gallery/GalleryView.java b/android/src/main/java/com/wix/RNCameraKit/gallery/GalleryView.java index a3f6593..654f78e 100644 --- a/android/src/main/java/com/wix/RNCameraKit/gallery/GalleryView.java +++ b/android/src/main/java/com/wix/RNCameraKit/gallery/GalleryView.java @@ -125,4 +125,8 @@ public class GalleryView extends RecyclerView { rctEventEmitter.receiveEvent(getId(), "onTapImage", event); } } + + public void setSupportedFileTypes(ArrayList supportedFileTypes) { + adapter.setSupportedFileTypes(supportedFileTypes); + } } diff --git a/android/src/main/java/com/wix/RNCameraKit/gallery/GalleryViewManager.java b/android/src/main/java/com/wix/RNCameraKit/gallery/GalleryViewManager.java index bd75a22..883e41a 100644 --- a/android/src/main/java/com/wix/RNCameraKit/gallery/GalleryViewManager.java +++ b/android/src/main/java/com/wix/RNCameraKit/gallery/GalleryViewManager.java @@ -99,6 +99,47 @@ public class GalleryViewManager extends SimpleViewManager { }).start(); } +// fileTypeSupport={{ +// supportedFileTypes: ['image/jpeg', 'image/png'], +// unsupportedOverlayColor: "#00000055", +// unsupportedImage: require('./images/unsupportedImage.png'), +// unsupportedText: 'Unsupported', +// unsupportedTextColor: '#ffffff' +// }} + + @ReactProp(name = "fileTypeSupport") + public void setFileTypeSupport(final GalleryView view, final ReadableMap fileTypeSupport) { + final ReadableArray supportedFileTypes = fileTypeSupport.getArray("supportedFileTypes"); + final String unsupportedOverlayColor = fileTypeSupport.getString("unsupportedOverlayColor"); + final String unsupportedImageSource = fileTypeSupport.getString("unsupportedImage"); + final String unsupportedText = fileTypeSupport.getString("unsupportedText"); + final String unsupportedTextColor = fileTypeSupport.getString("unsupportedTextColor"); + + new Thread(new Runnable() { + @Override + public void run() { + Drawable unsupportedImage = null; + if(unsupportedImageSource != null) { + unsupportedImage = ResourceDrawableIdHelper.getIcon(view.getContext(), unsupportedImageSource); + } + final ArrayList supportedFileTypesList = new ArrayList(); + if(supportedFileTypes != null && supportedFileTypes.size() != 0) { + for (int i = 0; i < supportedFileTypes.size(); i++) { + supportedFileTypesList.add(supportedFileTypes.getString(i)); + } + } + + reactContext.runOnUiQueueThread(new Runnable() { + @Override + public void run() { + view.setSupportedFileTypes(supportedFileTypesList); + } + }); + } + }).start(); + + } + @Nullable @Override public Map getExportedCustomDirectEventTypeConstants() { diff --git a/android/src/main/java/com/wix/RNCameraKit/gallery/SelectableImage.java b/android/src/main/java/com/wix/RNCameraKit/gallery/SelectableImage.java index 98f40bd..630e3e1 100644 --- a/android/src/main/java/com/wix/RNCameraKit/gallery/SelectableImage.java +++ b/android/src/main/java/com/wix/RNCameraKit/gallery/SelectableImage.java @@ -32,6 +32,7 @@ public class SelectableImage extends FrameLayout { private Runnable currentLoader; private Drawable selectedDrawable; private Drawable unselectedDrawable; + private FrameLayout unsupportedFrame; public SelectableImage(Context context) { super(context); @@ -42,6 +43,13 @@ public class SelectableImage extends FrameLayout { LayoutParams params = new FrameLayout.LayoutParams(dp22, dp22, Gravity.TOP | Gravity.RIGHT); params.setMargins(30,30,30,30); addView(selectedView, params); + createUnsupportedView(); + } + + private void createUnsupportedView() { + unsupportedFrame = new FrameLayout(getContext()); + unsupportedFrame.setBackgroundColor(Color.RED); + addView(unsupportedFrame, MATCH_PARENT, MATCH_PARENT); } @Override @@ -53,7 +61,7 @@ public class SelectableImage extends FrameLayout { imageView.setScaleType(scaleType); } - public void bind(ThreadPoolExecutor executor, boolean selected, final Integer id) { + public void bind(ThreadPoolExecutor executor, boolean selected, final Integer id, boolean supported) { // selectedView.setVisibility(selected ? VISIBLE : INVISIBLE); selectedView.setImageDrawable(selected ? selectedDrawable : unselectedDrawable); if (this.id != id) { @@ -84,6 +92,7 @@ public class SelectableImage extends FrameLayout { }; executor.execute(currentLoader); } + unsupportedFrame.setVisibility(supported ? GONE : VISIBLE); } public void setDrawables(Drawable selectedDrawable, Drawable unselectedDrawable) {