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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/history/HistoryItemView.java

Issue 2571933002: [Android History] Add favicons to history item views (Closed)
Patch Set: [Android History] Add favicons to history item views Created 4 years 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/history/HistoryItemView.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryItemView.java b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryItemView.java
index 0a56bcdf563308d0a074a2a10a2ecb82ac3aaf72..26e1b70b0c97ac28151ca1213562df9c0688ecdd 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryItemView.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/history/HistoryItemView.java
@@ -5,24 +5,49 @@
package org.chromium.chrome.browser.history;
import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.drawable.BitmapDrawable;
+import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
+import android.support.v4.graphics.drawable.RoundedBitmapDrawableFactory;
import android.util.AttributeSet;
import android.view.View;
+import android.widget.ImageView;
import android.widget.TextView;
+import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.chrome.R;
+import org.chromium.chrome.browser.favicon.LargeIconBridge.LargeIconCallback;
+import org.chromium.chrome.browser.widget.RoundedIconGenerator;
import org.chromium.chrome.browser.widget.TintedImageButton;
import org.chromium.chrome.browser.widget.selection.SelectableItemView;
/**
* The SelectableItemView for items displayed in the browsing history UI.
*/
-public class HistoryItemView extends SelectableItemView<HistoryItem> {
+public class HistoryItemView extends SelectableItemView<HistoryItem> implements LargeIconCallback {
private TextView mTitle;
private TextView mDomain;
private TintedImageButton mRemoveButton;
+ private ImageView mIconImageView;
+
+ private HistoryManager mHistoryManager;
+ private final RoundedIconGenerator mIconGenerator;
+
+ private final int mMinIconSize;
+ private final int mDisplayedIconSize;
+ private final int mCornerRadius;
public HistoryItemView(Context context, AttributeSet attrs) {
super(context, attrs);
+
+ mCornerRadius = getResources().getDimensionPixelSize(R.dimen.default_favicon_corner_radius);
+ mMinIconSize = getResources().getDimensionPixelSize(R.dimen.default_favicon_min_size);
+ mDisplayedIconSize = getResources().getDimensionPixelSize(R.dimen.default_favicon_size);
+ int textSize = getResources().getDimensionPixelSize(R.dimen.default_favicon_icon_text_size);
+ int iconColor = ApiCompatibilityUtils.getColor(
+ getResources(), R.color.default_favicon_background_color);
+ mIconGenerator = new RoundedIconGenerator(mDisplayedIconSize , mDisplayedIconSize,
+ mCornerRadius, iconColor, textSize);
}
@Override
@@ -30,6 +55,7 @@ public class HistoryItemView extends SelectableItemView<HistoryItem> {
super.onFinishInflate();
mTitle = (TextView) findViewById(R.id.title);
mDomain = (TextView) findViewById(R.id.domain);
+ mIconImageView = (ImageView) findViewById(R.id.icon_view);
mRemoveButton = (TintedImageButton) findViewById(R.id.remove);
mRemoveButton.setOnClickListener(new OnClickListener() {
@Override
@@ -41,9 +67,14 @@ public class HistoryItemView extends SelectableItemView<HistoryItem> {
@Override
public void setItem(HistoryItem item) {
+ if (getItem() == item) return;
+
super.setItem(item);
+
mTitle.setText(item.getTitle());
mDomain.setText(item.getDomain());
+ mIconImageView.setImageResource(R.drawable.default_favicon);
+ if (mHistoryManager != null) requestIcon();
}
/**
@@ -51,6 +82,10 @@ public class HistoryItemView extends SelectableItemView<HistoryItem> {
*/
public void setHistoryManager(HistoryManager manager) {
getItem().setHistoryManager(manager);
+ if (mHistoryManager == manager) return;
+
+ mHistoryManager = manager;
+ requestIcon();
}
/**
@@ -64,4 +99,26 @@ public class HistoryItemView extends SelectableItemView<HistoryItem> {
protected void onClick() {
if (getItem() != null) getItem().open();
}
+
+ @Override
+ public void onLargeIconAvailable(Bitmap icon, int fallbackColor,
+ boolean isFallbackColorDefault) {
+ // TODO(twellington): move this somewhere that can be shared with bookmarks.
+ if (icon == null) {
+ mIconGenerator.setBackgroundColor(fallbackColor);
+ icon = mIconGenerator.generateIconForUrl(getItem().getUrl());
+ mIconImageView.setImageDrawable(new BitmapDrawable(getResources(), icon));
+ } else {
+ RoundedBitmapDrawable roundedIcon = RoundedBitmapDrawableFactory.create(
+ getResources(),
+ Bitmap.createScaledBitmap(icon, mDisplayedIconSize, mDisplayedIconSize, false));
+ roundedIcon.setCornerRadius(mCornerRadius);
+ mIconImageView.setImageDrawable(roundedIcon);
+ }
+ }
+
+ private void requestIcon() {
+ mHistoryManager.getLargeIconBridge().getLargeIconForUrl(
+ getItem().getUrl(), mMinIconSize, this);
+ }
}

Powered by Google App Engine
This is Rietveld 408576698