| Index: chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticleViewHolder.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticleViewHolder.java b/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticleViewHolder.java
|
| index b53b89abe0fbdf8e155baa518051db558bcc9757..18d51dbc3690d30c02f837f85d2f6b31117a0365 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticleViewHolder.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/ntp/snippets/SnippetArticleViewHolder.java
|
| @@ -13,6 +13,9 @@ import android.graphics.drawable.TransitionDrawable;
|
| import android.media.ThumbnailUtils;
|
| import android.support.v4.text.BidiFormatter;
|
| import android.text.format.DateUtils;
|
| +import android.view.ContextMenu;
|
| +import android.view.Menu;
|
| +import android.view.MenuItem;
|
| import android.view.View;
|
| import android.view.View.MeasureSpec;
|
| import android.view.ViewTreeObserver;
|
| @@ -40,7 +43,8 @@ import java.net.URISyntaxException;
|
| /**
|
| * A class that represents the view for a single card snippet.
|
| */
|
| -public class SnippetArticleViewHolder extends CardViewHolder {
|
| +public class SnippetArticleViewHolder extends CardViewHolder
|
| + implements MenuItem.OnMenuItemClickListener {
|
| private static final String TAG = "NtpSnippets";
|
| private static final String PUBLISHER_FORMAT_STRING = "%s - %s";
|
| private static final int FADE_IN_ANIMATION_TIME_MS = 300;
|
| @@ -52,6 +56,12 @@ public class SnippetArticleViewHolder extends CardViewHolder {
|
| private static final String PARAMETER_FAVICON_SERVICE_NAME = "favicons_fetch_from_service";
|
| private static final String PARAMETER_DISABLED_VALUE = "off";
|
|
|
| + // ContextMenu item ids. These must be unique.
|
| + private static final int ID_OPEN_IN_NEW_WINDOW = 0;
|
| + private static final int ID_OPEN_IN_NEW_TAB = 1;
|
| + private static final int ID_OPEN_IN_INCOGNITO_TAB = 2;
|
| + private static final int ID_REMOVE = 3;
|
| +
|
| private final NewTabPageManager mNewTabPageManager;
|
| private final SnippetsBridge mSnippetsBridge;
|
| private final TextView mHeadlineTextView;
|
| @@ -137,6 +147,51 @@ public class SnippetArticleViewHolder extends CardViewHolder {
|
| }
|
|
|
| @Override
|
| + protected void createContextMenu(ContextMenu menu) {
|
| + // Create a context menu akin to the one shown for MostVisitedItems.
|
| + if (mNewTabPageManager.isOpenInNewWindowEnabled()) {
|
| + addContextMenuItem(menu, ID_OPEN_IN_NEW_WINDOW, R.string.contextmenu_open_in_new_tab);
|
| + }
|
| +
|
| + addContextMenuItem(menu, ID_OPEN_IN_NEW_TAB, R.string.contextmenu_open_in_new_tab);
|
| +
|
| + if (mNewTabPageManager.isOpenInIncognitoEnabled()) {
|
| + addContextMenuItem(menu, ID_OPEN_IN_INCOGNITO_TAB,
|
| + R.string.contextmenu_open_in_incognito_tab);
|
| + }
|
| +
|
| + addContextMenuItem(menu, ID_REMOVE, R.string.remove);
|
| + }
|
| +
|
| + /**
|
| + * Convenience method to reduce multi-line function call to single line.
|
| + */
|
| + private void addContextMenuItem(ContextMenu menu, int id, int resourceId) {
|
| + menu.add(Menu.NONE, id, Menu.NONE, resourceId).setOnMenuItemClickListener(this);
|
| + }
|
| +
|
| + @Override
|
| + public boolean onMenuItemClick(MenuItem item) {
|
| + switch (item.getItemId()) {
|
| + case ID_OPEN_IN_NEW_WINDOW:
|
| + mNewTabPageManager.openUrlInNewWindow(mArticle.mUrl);
|
| + return true;
|
| + case ID_OPEN_IN_NEW_TAB:
|
| + mNewTabPageManager.openUrlInNewTab(mArticle.mUrl, false);
|
| + return true;
|
| + case ID_OPEN_IN_INCOGNITO_TAB:
|
| + mNewTabPageManager.openUrlInNewTab(mArticle.mUrl, true);
|
| + return true;
|
| + case ID_REMOVE:
|
| + assert isDismissable() : "Context menu should not be shown for peeking card.";
|
| + dismiss();
|
| + return true;
|
| + default:
|
| + return false;
|
| + }
|
| + }
|
| +
|
| + @Override
|
| public void onBindViewHolder(NewTabPageListItem article) {
|
| super.onBindViewHolder(article);
|
|
|
|
|