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

Unified Diff: chrome/android/java_staging/src/org/chromium/chrome/browser/ntp/BookmarkItemView.java

Issue 1141283003: Upstream oodles of Chrome for Android code into Chromium. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: final patch? Created 5 years, 7 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_staging/src/org/chromium/chrome/browser/ntp/BookmarkItemView.java
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/ntp/BookmarkItemView.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/ntp/BookmarkItemView.java
new file mode 100644
index 0000000000000000000000000000000000000000..c5a9c257d63c9e15fad0a112c7da3dbb7360cb10
--- /dev/null
+++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/ntp/BookmarkItemView.java
@@ -0,0 +1,258 @@
+// Copyright 2015 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+package org.chromium.chrome.browser.ntp;
+
+import android.annotation.SuppressLint;
+import android.content.Context;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
+import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.Drawable;
+import android.support.v7.widget.AppCompatTextView;
+import android.text.TextUtils;
+import android.util.TypedValue;
+import android.view.ContextMenu;
+import android.view.ContextMenu.ContextMenuInfo;
+import android.view.Gravity;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.view.View.OnCreateContextMenuListener;
+
+import com.google.android.apps.chrome.R;
+
+import org.chromium.base.ApiCompatibilityUtils;
+import org.chromium.chrome.browser.ntp.BookmarksPageView.BookmarksPageManager;
+import org.chromium.chrome.browser.widget.TintedDrawable;
+import org.chromium.components.bookmarks.BookmarkId;
+
+/**
+ * Displays the bookmark item along with the favicon. This item can be clicked to be taken to that
+ * page.
+ */
+class BookmarkItemView extends AppCompatTextView implements OnCreateContextMenuListener,
+ MenuItem.OnMenuItemClickListener, OnClickListener {
+
+ // Context menu item IDs.
+ static final int ID_OPEN_IN_NEW_TAB = 0;
+ static final int ID_OPEN_IN_INCOGNITO_TAB = 1;
+ static final int ID_DELETE = 2;
+ static final int ID_EDIT = 3;
+
+ /**
+ * Drawing-related values that can be shared between instances of BookmarkItem.
+ */
+ static final class DrawingData {
+
+ private final int mPadding;
+ private final int mMinHeight;
+ private final int mFaviconSize;
+ private final int mFaviconContainerSize;
+ private final int mTextSize;
+ private final int mTextColor;
+
+ /**
+ * Initialize shared values used for drawing the favicon, borders and shadows.
+ * @param context The view context in which the BookmarkItem will be drawn.
+ */
+ DrawingData(Context context) {
+ Resources res = context.getResources();
+ mPadding = res.getDimensionPixelOffset(R.dimen.ntp_list_item_padding);
+ mMinHeight = res.getDimensionPixelSize(R.dimen.ntp_list_item_min_height);
+ mFaviconSize = res.getDimensionPixelSize(R.dimen.ntp_list_item_favicon_size);
+ mFaviconContainerSize = res.getDimensionPixelSize(
+ R.dimen.ntp_list_item_favicon_container_size);
+ mTextSize = res.getDimensionPixelSize(R.dimen.ntp_list_item_text_size);
+ mTextColor = res.getColor(R.color.ntp_list_item_text);
+ }
+ }
+
+ private final BookmarksPageManager mManager;
+ private final DrawingData mDrawingData;
+ private String mTitle;
+ private String mUrl;
+ private BookmarkId mId;
+ private boolean mIsFolder;
+ private boolean mIsEditable;
+ private boolean mIsManaged;
+ private Bitmap mFavicon;
+
+ /**
+ * @param context The view context in which this item will be shown.
+ * @param manager The BookmarksPageManager used to handle clicks.
+ * @param id The id of the bookmark item.
+ * @param title The title of the page.
+ * @param url The URL of the page.
+ * @param isEditable Whether this bookmark item can be edited.
+ * @param isManaged Whether this is a managed bookmark.
+ */
+ @SuppressLint("InlinedApi")
+ BookmarkItemView(Context context, BookmarksPageManager manager, BookmarkId id, String title,
+ String url, boolean isEditable, boolean isManaged, DrawingData drawingData) {
+ super(context);
+ mManager = manager;
+ mDrawingData = drawingData;
+
+ setTextColor(mDrawingData.mTextColor);
+ setTextSize(TypedValue.COMPLEX_UNIT_PX, mDrawingData.mTextSize);
+ setMinimumHeight(mDrawingData.mMinHeight);
+ setGravity(Gravity.CENTER_VERTICAL);
+ setSingleLine();
+ setEllipsize(TextUtils.TruncateAt.END);
+ ApiCompatibilityUtils.setTextAlignment(this, View.TEXT_ALIGNMENT_VIEW_START);
+
+ TypedArray a = context.getTheme().obtainStyledAttributes(
+ new int[] { R.attr.listChoiceBackgroundIndicator });
+ Drawable background = a.getDrawable(0);
+ a.recycle();
+ setBackground(background);
+
+ setOnClickListener(this);
+ setOnCreateContextMenuListener(this);
+
+ reset(id, title, url, isEditable, isManaged);
+ }
+
+ /**
+ * Resets the view contents so that it can be reused in the listview.
+ * @param id The id of the bookmark item.
+ * @param title The title of the page.
+ * @param url The URL of the page.
+ * @param isEditable Whether this bookmark item can be edited.
+ * @param isManaged Whether this is a managed bookmark.
+ * @return boolean Whether the values were reset needing a favicon refetch.
+ */
+ public boolean reset(BookmarkId id, String title, String url, boolean isEditable,
+ boolean isManaged) {
+ // Reset drawable state so ripples don't continue when the view is reused.
+ jumpDrawablesToCurrentState();
+
+ if (mId != null && mId.equals(id) && TextUtils.equals(title, mTitle)
+ && TextUtils.equals(url, mUrl) && isEditable == mIsEditable
+ && isManaged == mIsManaged) {
+ return false;
+ }
+ mTitle = title;
+ mUrl = url;
+ mIsFolder = TextUtils.isEmpty(mUrl);
+ mIsEditable = isEditable;
+ mIsManaged = isManaged;
+ mId = id;
+ setText(mTitle);
+ setFavicon(null);
+ if (mIsFolder) {
+ setContentDescription(getResources().getString(
+ R.string.accessibility_bookmark_folder, mTitle));
+ }
+ return true;
+ }
+
+ /** @return The URL of this bookmark item. */
+ public String getUrl() {
+ return mUrl;
+ }
+
+ /** @return The title of this bookmark item. */
+ public String getTitle() {
+ return mTitle;
+ }
+
+ /** @return Whether the BookmarkItem is a folder. */
+ public boolean isFolder() {
+ return mIsFolder;
+ }
+
+ /** @return The bookmark/folder id. */
+ public BookmarkId getBookmarkId() {
+ return mId;
+ }
+
+ /** @return The favicon of this bookmark item. */
+ public Bitmap getFavicon() {
+ return mFavicon;
+ }
+
+ /**
+ * Updates the favicon and triggers a redraw with the new favicon
+ * @param favicon The new favicon to display. May be null.
+ */
+ void setFavicon(Bitmap favicon) {
+ int padding = mDrawingData.mPadding;
+ int startPadding = padding;
+ int drawablePadding = mDrawingData.mPadding;
+ Drawable faviconDrawable = null;
+ mFavicon = favicon;
+ if (favicon != null || mIsFolder) {
+ int iconSize;
+ if (mIsFolder) {
+ faviconDrawable = TintedDrawable.constructTintedDrawable(getResources(),
+ mIsManaged ? R.drawable.eb_managed : R.drawable.eb_others);
+ iconSize = mDrawingData.mFaviconContainerSize;
+ } else {
+ faviconDrawable = new BitmapDrawable(getResources(), favicon);
+ iconSize = mDrawingData.mFaviconSize;
+ startPadding += (mDrawingData.mFaviconContainerSize - iconSize) / 2;
+ drawablePadding += (mDrawingData.mFaviconContainerSize - iconSize + 1) / 2;
+ }
+ faviconDrawable.setBounds(0, 0, iconSize, iconSize);
+ setCompoundDrawablePadding(drawablePadding);
+ } else {
+ startPadding = 2 * padding + mDrawingData.mFaviconContainerSize;
+ }
+ ApiCompatibilityUtils.setPaddingRelative(this, startPadding, 0, padding, 0);
+ ApiCompatibilityUtils.setCompoundDrawablesRelative(this, faviconDrawable, null, null, null);
+ }
+
+ @Override
+ public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
+ if (mManager.isDestroyed()) return;
+ if (!mManager.isContextMenuEnabled()) return;
+ if (!mIsFolder && mManager.shouldShowOpenInNewTab()) {
+ menu.add(Menu.NONE, ID_OPEN_IN_NEW_TAB, Menu.NONE,
+ R.string.contextmenu_open_in_new_tab).setOnMenuItemClickListener(this);
+ }
+ if (!mIsFolder && mManager.shouldShowOpenInNewIncognitoTab()) {
+ menu.add(Menu.NONE, ID_OPEN_IN_INCOGNITO_TAB, Menu.NONE,
+ R.string.contextmenu_open_in_incognito_tab).setOnMenuItemClickListener(this);
+ }
+ if (mIsEditable && !mManager.isIncognito()) {
+ menu.add(Menu.NONE, ID_EDIT, Menu.NONE, mIsFolder
+ ? R.string.contextmenu_edit_folder : R.string.contextmenu_edit_bookmark)
+ .setOnMenuItemClickListener(this);
+ menu.add(Menu.NONE, ID_DELETE, Menu.NONE, mIsFolder
+ ? R.string.contextmenu_delete_folder : R.string.contextmenu_delete_bookmark)
+ .setOnMenuItemClickListener(this);
+ }
+ }
+
+ @Override
+ public boolean onMenuItemClick(MenuItem item) {
+ if (mManager.isDestroyed()) return true;
+ switch (item.getItemId()) {
+ case ID_OPEN_IN_NEW_TAB:
+ mManager.openInNewTab(this);
+ return true;
+ case ID_OPEN_IN_INCOGNITO_TAB:
+ mManager.openInNewIncognitoTab(this);
+ return true;
+ case ID_DELETE:
+ mManager.delete(this);
+ return true;
+ case ID_EDIT:
+ mManager.edit(this);
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ @Override
+ public void onClick(View v) {
+ if (mManager.isDestroyed()) return;
+ mManager.open(this);
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698