Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3581)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerCategoryView.java

Issue 2816733002: Photo Picker Dialog: Use sandboxed utility process for decoding images. (Closed)
Patch Set: Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerCategoryView.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerCategoryView.java b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerCategoryView.java
index 17dde3f751d184e8bdd61754dbf8f3b81d296824..265092bc6f83911e2b03d3d445a60abb73759630 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerCategoryView.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/photo_picker/PickerCategoryView.java
@@ -28,7 +28,9 @@ import java.util.List;
* A class for keeping track of common data associated with showing photos in
* the photo picker, for example the RecyclerView and the bitmap caches.
*/
-public class PickerCategoryView extends RelativeLayout implements OnMenuItemClickListener {
+public class PickerCategoryView extends RelativeLayout
+ implements RecyclerView.RecyclerListener, DecoderServiceHost.ServiceReadyCallback,
+ OnMenuItemClickListener {
// The dialog that owns us.
private PhotoPickerDialog mDialog;
@@ -47,6 +49,9 @@ public class PickerCategoryView extends RelativeLayout implements OnMenuItemClic
// The callback to notify the listener of decisions reached in the picker.
private PhotoPickerListener mListener;
+ // The host class for the decoding service.
+ private DecoderServiceHost mDecoderServiceHost;
+
// The RecyclerView showing the images.
private RecyclerView mRecyclerView;
@@ -92,6 +97,9 @@ public class PickerCategoryView extends RelativeLayout implements OnMenuItemClic
private void postConstruction(Context context) {
mContext = context;
+ mDecoderServiceHost = new DecoderServiceHost(this);
+ mDecoderServiceHost.bind(mContext);
+
mSelectionDelegate = new SelectionDelegate<PickerBitmap>();
View root = LayoutInflater.from(context).inflate(R.layout.photo_picker_dialog, this);
@@ -115,8 +123,16 @@ public class PickerCategoryView extends RelativeLayout implements OnMenuItemClic
mRecyclerView.addItemDecoration(new GridSpacingItemDecoration(mColumns, mPadding));
// TODO(finnur): Implement caching.
- // TODO(finnur): Remove this once the decoder service is in place.
- prepareBitmaps();
+ }
+
+ /**
+ * Severs the connection to the decoding utility process.
+ */
+ public void onDialogDismissed() {
+ if (mDecoderServiceHost != null) {
+ mDecoderServiceHost.unbind(mContext);
+ mDecoderServiceHost = null;
+ }
}
/**
@@ -134,6 +150,24 @@ public class PickerCategoryView extends RelativeLayout implements OnMenuItemClic
mListener = listener;
}
+ // DecoderServiceHost.ServiceReadyCallback:
+
+ @Override
+ public void serviceReady() {
+ prepareBitmaps();
+ }
+
+ // RecyclerView.RecyclerListener:
+
+ @Override
+ public void onViewRecycled(RecyclerView.ViewHolder holder) {
+ PickerBitmapViewHolder bitmapHolder = (PickerBitmapViewHolder) holder;
+ String filePath = bitmapHolder.getFilePath();
+ if (filePath != null) {
+ getDecoderServiceHost().cancelDecodeImage(filePath);
+ }
+ }
+
// OnMenuItemClickListener:
@Override
@@ -164,6 +198,10 @@ public class PickerCategoryView extends RelativeLayout implements OnMenuItemClic
return mPickerBitmaps;
}
+ public DecoderServiceHost getDecoderServiceHost() {
+ return mDecoderServiceHost;
+ }
+
public boolean isMultiSelectAllowed() {
return mMultiSelectionAllowed;
}
@@ -207,10 +245,18 @@ public class PickerCategoryView extends RelativeLayout implements OnMenuItemClic
mPickerBitmaps = new ArrayList<>();
mPickerBitmaps.add(0, new PickerBitmap("", 0, PickerBitmap.GALLERY));
mPickerBitmaps.add(0, new PickerBitmap("", 0, PickerBitmap.CAMERA));
- mPickerBitmaps.add(new PickerBitmap("foo/bar1.jpg", 1, PickerBitmap.PICTURE));
- mPickerBitmaps.add(new PickerBitmap("foo/bar2.jpg", 2, PickerBitmap.PICTURE));
- mPickerBitmaps.add(new PickerBitmap("foo/bar3.jpg", 3, PickerBitmap.PICTURE));
- mPickerBitmaps.add(new PickerBitmap("foo/bar4.jpg", 4, PickerBitmap.PICTURE));
+ mPickerBitmaps.add(
+ new PickerBitmap("/storage/emulated/0/DCIM/Camera/IMG_20170201_154701.jpg", 1,
+ PickerBitmap.PICTURE));
+ mPickerBitmaps.add(
+ new PickerBitmap("/storage/emulated/0/DCIM/Camera/IMG_20170201_154704.jpg", 2,
+ PickerBitmap.PICTURE));
+ mPickerBitmaps.add(
+ new PickerBitmap("/storage/emulated/0/DCIM/Camera/IMG_20170201_154707.jpg", 3,
+ PickerBitmap.PICTURE));
+ mPickerBitmaps.add(
+ new PickerBitmap("/storage/emulated/0/DCIM/Camera/IMG_20170201_154709.jpg", 4,
+ PickerBitmap.PICTURE));
Finnur 2017/04/12 14:57:42 This code is for testing only and is going away an
Theresa 2017/04/13 02:25:27 Acknowledged.
mPickerAdapter.notifyDataSetChanged();
}

Powered by Google App Engine
This is Rietveld 408576698