diff --git a/android/src/main/java/com/wix/RNCameraKit/GalleryAdapter.java b/android/src/main/java/com/wix/RNCameraKit/GalleryAdapter.java index 57131b0..0099e1a 100644 --- a/android/src/main/java/com/wix/RNCameraKit/GalleryAdapter.java +++ b/android/src/main/java/com/wix/RNCameraKit/GalleryAdapter.java @@ -1,10 +1,10 @@ package com.wix.RNCameraKit; +import android.app.Activity; import android.content.Context; import android.database.Cursor; import android.graphics.Bitmap; -import android.graphics.BitmapFactory; -import android.os.AsyncTask; +import android.graphics.Color; import android.provider.MediaStore; import android.support.v7.widget.RecyclerView; import android.view.View; @@ -12,6 +12,10 @@ import android.view.ViewGroup; import android.widget.ImageView; import java.util.ArrayList; +import java.util.Collections; +import java.util.concurrent.LinkedBlockingDeque; +import java.util.concurrent.ThreadPoolExecutor; +import java.util.concurrent.TimeUnit; /** * Created by yedidyak on 30/06/2016. @@ -20,25 +24,32 @@ public class GalleryAdapter extends RecyclerView.Adapter images = new ArrayList<>(); + private ArrayList uris = new ArrayList<>(); + private ArrayList ids = new ArrayList<>(); public class StupidHolder extends RecyclerView.ViewHolder { public StupidHolder(View itemView) { super(itemView); } + int id; + String uri; } private Context context; + private ThreadPoolExecutor executor; public GalleryAdapter(Context context) { this.context = context; + int cores = Runtime.getRuntime().availableProcessors(); + executor = new ThreadPoolExecutor(cores, cores, 1, TimeUnit.SECONDS, new LinkedBlockingDeque()); } public void setAlbum(String albumName) { - images.clear(); + ids.clear(); String selection = null; if(albumName != null || !albumName.equals("All Photos")) { @@ -55,11 +66,16 @@ public class GalleryAdapter extends RecyclerView.Adapter() { - @Override - protected Bitmap doInBackground(Void... params) { - BitmapFactory.Options options = new BitmapFactory.Options(); - options.inSampleSize = 2; - return BitmapFactory.decodeFile(images.get(position), options); - } + final ImageView imageView = (ImageView)holder.itemView; + imageView.setImageBitmap(null); + imageView.setBackgroundColor(Color.LTGRAY); + holder.id = ids.get(position); + holder.uri = uris.get(position); + executor.execute(new Runnable() { @Override - protected void onPostExecute(Bitmap bitmap) { - ((ImageView)holder.itemView).setImageBitmap(bitmap); + public void run() { + final Bitmap bmp = MediaStore.Images.Thumbnails.getThumbnail( + context.getContentResolver(), + ids.get(holder.getAdapterPosition()), + MediaStore.Images.Thumbnails.MINI_KIND, + null); + + if (holder.id == ids.get(holder.getAdapterPosition())) { + ((Activity) context).runOnUiThread(new Runnable() { + @Override + public void run() { + imageView.setImageBitmap(bmp); + } + }); + } } - }.execute(); + }); } @Override public int getItemCount() { - return images.size(); + return ids.size(); } } diff --git a/android/src/main/java/com/wix/RNCameraKit/GalleryViewManager.java b/android/src/main/java/com/wix/RNCameraKit/GalleryViewManager.java index 278ecd3..738431e 100644 --- a/android/src/main/java/com/wix/RNCameraKit/GalleryViewManager.java +++ b/android/src/main/java/com/wix/RNCameraKit/GalleryViewManager.java @@ -24,8 +24,6 @@ public class GalleryViewManager extends SimpleViewManager { view.setAlbumName(albumName); } - - @ReactProp(name = "minimumInteritemSpacing") public void setItemSpacing(GalleryView view, int itemSpacing) { view.setItemSpacing(itemSpacing/2); @@ -40,5 +38,4 @@ public class GalleryViewManager extends SimpleViewManager { public void setColumnCount(GalleryView view, int columnCount) { view.setColumnCount(columnCount); } - } diff --git a/android/src/main/java/com/wix/RNCameraKit/NativeGalleryModule.java b/android/src/main/java/com/wix/RNCameraKit/NativeGalleryModule.java index 207a977..cc5bcce 100644 --- a/android/src/main/java/com/wix/RNCameraKit/NativeGalleryModule.java +++ b/android/src/main/java/com/wix/RNCameraKit/NativeGalleryModule.java @@ -94,6 +94,7 @@ public class NativeGalleryModule extends ReactContextBaseJavaModule { } } while (imagesCursor.moveToNext()); } + imagesCursor.close(); return albums; }