Commit 9ec83db6 authored by Henrique Nakashima's avatar Henrique Nakashima Committed by Commit Bot

Refactor duplicated code to generate favicons.

Move it to FaviconUtils.

Change-Id: Ifd693bd6ee62625282b0a175235f27dcb7213749
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1846399
Commit-Queue: Henrique Nakashima <hnakashima@chromium.org>
Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Cr-Commit-Position: refs/heads/master@{#704701}
parent d29350f4
...@@ -6,7 +6,7 @@ package org.chromium.chrome.browser.bookmarks; ...@@ -6,7 +6,7 @@ package org.chromium.chrome.browser.bookmarks;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable;
import android.util.AttributeSet; import android.util.AttributeSet;
import org.chromium.chrome.R; import org.chromium.chrome.R;
...@@ -76,14 +76,8 @@ public class BookmarkItemRow extends BookmarkRow implements LargeIconCallback { ...@@ -76,14 +76,8 @@ public class BookmarkItemRow extends BookmarkRow implements LargeIconCallback {
@Override @Override
public void onLargeIconAvailable(Bitmap icon, int fallbackColor, boolean isFallbackColorDefault, public void onLargeIconAvailable(Bitmap icon, int fallbackColor, boolean isFallbackColorDefault,
@IconType int iconType) { @IconType int iconType) {
if (icon == null) { Drawable iconDrawable = FaviconUtils.getIconDrawableWithoutFilter(
mIconGenerator.setBackgroundColor(fallbackColor); icon, mUrl, fallbackColor, mIconGenerator, getResources(), mDisplayedIconSize);
icon = mIconGenerator.generateIconForUrl(mUrl); setIconDrawable(iconDrawable);
setIconDrawable(new BitmapDrawable(getResources(), icon));
} else {
setIconDrawable(FaviconUtils.createRoundedBitmapDrawable(getResources(),
Bitmap.createScaledBitmap(
icon, mDisplayedIconSize, mDisplayedIconSize, false)));
}
} }
} }
...@@ -6,7 +6,6 @@ package org.chromium.chrome.browser.compositor.bottombar.ephemeraltab; ...@@ -6,7 +6,6 @@ package org.chromium.chrome.browser.compositor.bottombar.ephemeraltab;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Handler; import android.os.Handler;
...@@ -232,14 +231,8 @@ public class EphemeralTabCoordinator { ...@@ -232,14 +231,8 @@ public class EphemeralTabCoordinator {
*/ */
private Drawable faviconDrawable(Bitmap image, String url) { private Drawable faviconDrawable(Bitmap image, String url) {
if (url == null) return null; if (url == null) return null;
if (image == null) { return FaviconUtils.getIconDrawableWithFilter(
image = mIconGenerator.generateIconForUrl(url); image, url, mIconGenerator, mContext.getResources(), mFaviconSize);
return new BitmapDrawable(mContext.getResources(),
Bitmap.createScaledBitmap(image, mFaviconSize, mFaviconSize, true));
}
return FaviconUtils.createRoundedBitmapDrawable(mContext.getResources(),
Bitmap.createScaledBitmap(image, mFaviconSize, mFaviconSize, true));
} }
} }
} }
...@@ -6,8 +6,12 @@ package org.chromium.chrome.browser.favicon; ...@@ -6,8 +6,12 @@ package org.chromium.chrome.browser.favicon;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.support.v4.graphics.drawable.RoundedBitmapDrawable; import android.support.v4.graphics.drawable.RoundedBitmapDrawable;
import androidx.annotation.Nullable;
import org.chromium.base.ApiCompatibilityUtils; import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.chrome.R; import org.chromium.chrome.R;
import org.chromium.chrome.browser.ui.widget.RoundedIconGenerator; import org.chromium.chrome.browser.ui.widget.RoundedIconGenerator;
...@@ -59,6 +63,56 @@ public class FaviconUtils { ...@@ -59,6 +63,56 @@ public class FaviconUtils {
resources.getDimensionPixelSize(R.dimen.default_favicon_corner_radius)); resources.getDimensionPixelSize(R.dimen.default_favicon_corner_radius));
} }
/**
* Creates a {@link Drawable} with the provided icon with
* nearest-neighbor scaling through {@link Bitmap#createScaledBitmap(Bitmap, int, int,
* boolean)}, or a fallback monogram.
* @param icon {@link Bitmap} with the icon to display. If null, a fallback monogram will be
* generated.
* @param url Url to generate a monogram. Used only if {@code icon} is null.
* @param fallbackColor Color to generate a monogram. Used only if {@code icon} is null.
* @param iconGenerator RoundedIconGenerator to generate a monogram. Used only if {@code icon}
* is null. Side effect: {@link RoundedIconGenerator#setBackgroundColor(int)} will be
* called.
* @param resources {@link Resources} to create a {@link BitmapDrawable}.
* @param iconSize Width and height of the returned icon in px.
* @return A {@link Drawable} to be displayed as the favicon.
*/
public static Drawable getIconDrawableWithoutFilter(@Nullable Bitmap icon, String url,
int fallbackColor, RoundedIconGenerator iconGenerator, Resources resources,
int iconSize) {
if (icon == null) {
iconGenerator.setBackgroundColor(fallbackColor);
icon = iconGenerator.generateIconForUrl(url);
return new BitmapDrawable(resources, icon);
}
return createRoundedBitmapDrawable(
resources, Bitmap.createScaledBitmap(icon, iconSize, iconSize, false));
}
/**
* Creates a {@link Drawable} with the provided icon, or a fallback monogram, with bilinear
* scaling through {@link Bitmap#createScaledBitmap(Bitmap, int, int, boolean)}.
* @param icon {@link Bitmap} with the icon to display. If null, a fallback monogram will be
* generated.
* @param url Url to generate a monogram. Used only if {@code icon} is null.
* @param iconGenerator RoundedIconGenerator to generate a monogram. Used only if {@code icon}
* is null.
* @param resources {@link Resources} to create a {@link BitmapDrawable}.
* @param iconSize Width and height of the returned icon.
* @return A {@link Drawable} to be displayed as the favicon.
*/
public static Drawable getIconDrawableWithFilter(@Nullable Bitmap icon, String url,
RoundedIconGenerator iconGenerator, Resources resources, int iconSize) {
if (icon == null) {
icon = iconGenerator.generateIconForUrl(url);
return new BitmapDrawable(
resources, Bitmap.createScaledBitmap(icon, iconSize, iconSize, true));
}
return createRoundedBitmapDrawable(
resources, Bitmap.createScaledBitmap(icon, iconSize, iconSize, true));
}
private static int getIconColor(Resources resources) { private static int getIconColor(Resources resources) {
return ApiCompatibilityUtils.getColor(resources, R.color.default_favicon_background_color); return ApiCompatibilityUtils.getColor(resources, R.color.default_favicon_background_color);
} }
......
...@@ -6,7 +6,7 @@ package org.chromium.chrome.browser.history; ...@@ -6,7 +6,7 @@ package org.chromium.chrome.browser.history;
import android.content.Context; import android.content.Context;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable;
import android.support.graphics.drawable.VectorDrawableCompat; import android.support.graphics.drawable.VectorDrawableCompat;
import android.support.v4.view.ViewCompat; import android.support.v4.view.ViewCompat;
import android.support.v7.content.res.AppCompatResources; import android.support.v7.content.res.AppCompatResources;
...@@ -163,16 +163,9 @@ public class HistoryItemView extends SelectableItemView<HistoryItem> implements ...@@ -163,16 +163,9 @@ public class HistoryItemView extends SelectableItemView<HistoryItem> implements
@Override @Override
public void onLargeIconAvailable(Bitmap icon, int fallbackColor, boolean isFallbackColorDefault, public void onLargeIconAvailable(Bitmap icon, int fallbackColor, boolean isFallbackColorDefault,
@IconType int iconType) { @IconType int iconType) {
// TODO(twellington): move this somewhere that can be shared with bookmarks. Drawable drawable = FaviconUtils.getIconDrawableWithoutFilter(icon, getItem().getUrl(),
if (icon == null) { fallbackColor, mIconGenerator, getResources(), mDisplayedIconSize);
mIconGenerator.setBackgroundColor(fallbackColor); setIconDrawable(drawable);
icon = mIconGenerator.generateIconForUrl(getItem().getUrl());
setIconDrawable(new BitmapDrawable(getResources(), icon));
} else {
setIconDrawable(FaviconUtils.createRoundedBitmapDrawable(getResources(),
Bitmap.createScaledBitmap(
icon, mDisplayedIconSize, mDisplayedIconSize, false)));
}
} }
private void requestIcon() { private void requestIcon() {
......
...@@ -9,7 +9,6 @@ import android.content.res.Resources; ...@@ -9,7 +9,6 @@ import android.content.res.Resources;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.BitmapFactory; import android.graphics.BitmapFactory;
import android.graphics.PorterDuff; import android.graphics.PorterDuff;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.LruCache; import android.util.LruCache;
...@@ -505,9 +504,11 @@ public class RecentTabsRowAdapter extends BaseExpandableListAdapter { ...@@ -505,9 +504,11 @@ public class RecentTabsRowAdapter extends BaseExpandableListAdapter {
viewHolder.textView.setText(R.string.show_full_history); viewHolder.textView.setText(R.string.show_full_history);
Bitmap historyIcon = BitmapFactory.decodeResource( Bitmap historyIcon = BitmapFactory.decodeResource(
mActivity.getResources(), R.drawable.ic_watch_later_24dp); mActivity.getResources(), R.drawable.ic_watch_later_24dp);
Drawable drawable = getRoundedFavicon(historyIcon, int size = mActivity.getResources().getDimensionPixelSize(
mActivity.getResources().getDimensionPixelSize( R.dimen.tile_view_icon_size_modern);
R.dimen.tile_view_icon_size_modern)); Drawable drawable =
FaviconUtils.createRoundedBitmapDrawable(mActivity.getResources(),
Bitmap.createScaledBitmap(historyIcon, size, size, true));
drawable.setColorFilter(ApiCompatibilityUtils.getColor(mActivity.getResources(), drawable.setColorFilter(ApiCompatibilityUtils.getColor(mActivity.getResources(),
R.color.default_icon_color), R.color.default_icon_color),
PorterDuff.Mode.SRC_IN); PorterDuff.Mode.SRC_IN);
...@@ -703,19 +704,8 @@ public class RecentTabsRowAdapter extends BaseExpandableListAdapter { ...@@ -703,19 +704,8 @@ public class RecentTabsRowAdapter extends BaseExpandableListAdapter {
private Drawable faviconDrawable(Bitmap image, String url) { private Drawable faviconDrawable(Bitmap image, String url) {
if (url == null) return null; if (url == null) return null;
if (image == null) { return FaviconUtils.getIconDrawableWithFilter(
image = mIconGenerator.generateIconForUrl(url); image, url, mIconGenerator, mActivity.getResources(), mFaviconSize);
return new BitmapDrawable(mActivity.getResources(),
Bitmap.createScaledBitmap(image, mFaviconSize, mFaviconSize, true));
}
return getRoundedFavicon(image, mFaviconSize);
}
private Drawable getRoundedFavicon(Bitmap image, int size) {
// TODO(injae): Move shared code between Bookmarks/History/Downloads/here to ViewUtils.java.
// Also applies to RoundedIconGenerator. crbug.com/829550
return FaviconUtils.createRoundedBitmapDrawable(
mActivity.getResources(), Bitmap.createScaledBitmap(image, size, size, true));
} }
private void loadForeignFavicon(final ViewHolder viewHolder, final String url) { private void loadForeignFavicon(final ViewHolder viewHolder, final String url) {
......
...@@ -12,7 +12,6 @@ import android.content.DialogInterface; ...@@ -12,7 +12,6 @@ import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.Bitmap; import android.graphics.Bitmap;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.os.Bundle; import android.os.Bundle;
import android.support.v4.app.DialogFragment; import android.support.v4.app.DialogFragment;
...@@ -117,23 +116,13 @@ public class ConfirmImportantSitesDialogFragment extends DialogFragment { ...@@ -117,23 +116,13 @@ public class ConfirmImportantSitesDialogFragment extends DialogFragment {
public void onLargeIconAvailable(Bitmap icon, int fallbackColor, public void onLargeIconAvailable(Bitmap icon, int fallbackColor,
boolean isFallbackColorDefault, @IconType int iconType) { boolean isFallbackColorDefault, @IconType int iconType) {
if (this != viewHolder.imageCallback) return; if (this != viewHolder.imageCallback) return;
Drawable image = getFaviconDrawable(icon, fallbackColor, url); Drawable image = FaviconUtils.getIconDrawableWithoutFilter(
icon, url, fallbackColor, mIconGenerator, getResources(), mFaviconSize);
viewHolder.imageView.setImageDrawable(image); viewHolder.imageView.setImageDrawable(image);
} }
}; };
mLargeIconBridge.getLargeIconForUrl(url, mFaviconSize, viewHolder.imageCallback); mLargeIconBridge.getLargeIconForUrl(url, mFaviconSize, viewHolder.imageCallback);
} }
private Drawable getFaviconDrawable(Bitmap icon, int fallbackColor, String url) {
if (icon == null) {
mIconGenerator.setBackgroundColor(fallbackColor);
icon = mIconGenerator.generateIconForUrl(url);
return new BitmapDrawable(getResources(), icon);
} else {
return FaviconUtils.createRoundedBitmapDrawable(getResources(),
Bitmap.createScaledBitmap(icon, mFaviconSize, mFaviconSize, false));
}
}
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment