Index: chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuHelper.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuHelper.java b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuHelper.java |
index dbb62b1694e5b2f51452d42dbae5dffa2134433f..e66b192b8d373819dd56a9168441daa0a5725eb8 100644 |
--- a/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuHelper.java |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/contextmenu/ContextMenuHelper.java |
@@ -6,6 +6,8 @@ package org.chromium.chrome.browser.contextmenu; |
import android.app.Activity; |
import android.content.Context; |
+import android.graphics.Bitmap; |
+import android.graphics.BitmapFactory; |
import android.util.Pair; |
import android.view.ContextMenu; |
import android.view.ContextMenu.ContextMenuInfo; |
@@ -16,6 +18,7 @@ import org.chromium.base.Callback; |
import org.chromium.base.VisibleForTesting; |
import org.chromium.base.annotations.CalledByNative; |
import org.chromium.base.metrics.RecordHistogram; |
+import org.chromium.chrome.R; |
import org.chromium.chrome.browser.ChromeFeatureList; |
import org.chromium.chrome.browser.share.ShareHelper; |
import org.chromium.content.browser.ContentViewCore; |
@@ -37,6 +40,7 @@ public class ContextMenuHelper implements OnCreateContextMenuListener { |
private Callback<Integer> mCallback; |
private Runnable mOnMenuShown; |
private Runnable mOnMenuClosed; |
+ private Callback<Bitmap> mOnThumbnailReceivedCallback; |
private ContextMenuHelper(long nativeContextMenuHelper) { |
mNativeContextMenuHelper = nativeContextMenuHelper; |
@@ -108,9 +112,17 @@ public class ContextMenuHelper implements OnCreateContextMenuListener { |
List<Pair<Integer, List<ContextMenuItem>>> items = |
mPopulator.buildContextMenu(null, mContext, mCurrentContextMenuParams); |
- ContextMenuUi menuUi = new TabularContextMenuUi(); |
+ final ContextMenuUi menuUi = new TabularContextMenuUi(); |
menuUi.displayMenu(mContext, mCurrentContextMenuParams, items, mCallback, mOnMenuShown, |
mOnMenuClosed); |
+ if (mCurrentContextMenuParams.isImage()) { |
+ getThumbnail(new Callback<Bitmap>() { |
+ @Override |
+ public void onResult(Bitmap result) { |
+ ((TabularContextMenuUi) menuUi).onImageThumbnailRetrieved(result); |
+ } |
+ }); |
+ } |
return; |
} |
@@ -164,6 +176,27 @@ public class ContextMenuHelper implements OnCreateContextMenuListener { |
ShareHelper.shareImage(activity, jpegImageData); |
} |
+ /** |
+ * Gets the thumbnail of the current image that triggered the context menu. |
+ * @param callback Called once the the thumbnail is received. |
+ */ |
+ private void getThumbnail(Callback<Bitmap> callback) { |
+ mOnThumbnailReceivedCallback = callback; |
+ if (mNativeContextMenuHelper == 0) return; |
+ int maxSizePx = mContext.getResources().getDimensionPixelSize( |
+ R.dimen.context_menu_header_image_max_size); |
+ nativeRetrieveHeaderThumbnail(mNativeContextMenuHelper, maxSizePx); |
+ } |
+ |
+ @CalledByNative |
+ private void onHeaderThumbnailReceived(WindowAndroid windowAndroid, byte[] jpegImageData) { |
+ // TODO(tedchoc): Decode in separate process before launch. |
+ Bitmap bitmap = BitmapFactory.decodeByteArray(jpegImageData, 0, jpegImageData.length); |
+ if (mOnThumbnailReceivedCallback != null) { |
+ mOnThumbnailReceivedCallback.onResult(bitmap); |
+ } |
+ } |
+ |
@Override |
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) { |
List<Pair<Integer, List<ContextMenuItem>>> items = |
@@ -186,4 +219,5 @@ public class ContextMenuHelper implements OnCreateContextMenuListener { |
private native void nativeSearchForImage(long nativeContextMenuHelper); |
private native void nativeShareImage(long nativeContextMenuHelper); |
private native void nativeOnContextMenuClosed(long nativeContextMenuHelper); |
+ private native void nativeRetrieveHeaderThumbnail(long nativeContextMenuHelper, int maxSizePx); |
} |