Commit 1985193e authored by Yue Zhang's avatar Yue Zhang Committed by Commit Bot

Add favicons to tabgrid thumbnails

Add a layer of callback in MultiThumbnailCardProvider to fetch
favicon and draw with shadowed circle background in thumbnail.

Bug: 946286
Change-Id: Id4fce1c635d1f639778476730ba7cea131496376
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1574639
Commit-Queue: Yue Zhang <yuezhanggg@google.com>
Reviewed-by: default avatarYusuf Ozuysal <yusufo@chromium.org>
Cr-Commit-Position: refs/heads/master@{#652480}
parent b1603f08
...@@ -29,7 +29,12 @@ import org.chromium.chrome.R; ...@@ -29,7 +29,12 @@ import org.chromium.chrome.R;
R.dimen.tab_list_card_padding, R.dimen.tab_list_mini_card_text_size, R.dimen.tab_list_card_padding, R.dimen.tab_list_mini_card_text_size,
R.dimen.tab_list_mini_card_frame_size, R.dimen.tab_list_mini_card_radius, R.dimen.tab_list_mini_card_frame_size, R.dimen.tab_list_mini_card_radius,
R.drawable.tabstrip_favicon_background, R.dimen.swipe_to_dismiss_threshold, R.drawable.tabstrip_favicon_background, R.dimen.swipe_to_dismiss_threshold,
R.dimen.tab_grid_thumbnail_card_default_size, R.dimen.tab_list_selected_inset_kitkat}; R.dimen.tab_grid_thumbnail_card_default_size, R.dimen.tab_list_selected_inset_kitkat,
R.dimen.tab_grid_thumbnail_favicon_padding,
R.dimen.tab_grid_thumbnail_favicon_frame_padding,
R.dimen.tab_grid_thumbnail_favicon_background_radius,
R.dimen.tab_grid_thumbnail_favicon_background_padding,
R.dimen.tab_grid_thumbnail_favicon_background_down_shift};
private SilenceLintErrors() {} private SilenceLintErrors() {}
} }
...@@ -22,8 +22,8 @@ import org.chromium.chrome.browser.util.ViewUtils; ...@@ -22,8 +22,8 @@ import org.chromium.chrome.browser.util.ViewUtils;
* Provider for processed favicons in Tab list. * Provider for processed favicons in Tab list.
*/ */
public class TabListFaviconProvider { public class TabListFaviconProvider {
private static Drawable sGlobeDrawable; private static Drawable sRoundedGlobeDrawable;
private static Drawable sChromeDrawable; private static Drawable sRoundedChromeDrawable;
private final int mFaviconSize; private final int mFaviconSize;
private final Profile mProfile; private final Profile mProfile;
private final FaviconHelper mFaviconHelper; private final FaviconHelper mFaviconHelper;
...@@ -37,7 +37,7 @@ public class TabListFaviconProvider { ...@@ -37,7 +37,7 @@ public class TabListFaviconProvider {
mFaviconSize = context.getResources().getDimensionPixelSize(R.dimen.default_favicon_size); mFaviconSize = context.getResources().getDimensionPixelSize(R.dimen.default_favicon_size);
mProfile = profile; mProfile = profile;
mFaviconHelper = new FaviconHelper(); mFaviconHelper = new FaviconHelper();
if (sGlobeDrawable == null) { if (sRoundedGlobeDrawable == null) {
Drawable globeDrawable = Drawable globeDrawable =
AppCompatResources.getDrawable(context, R.drawable.ic_globe_24dp); AppCompatResources.getDrawable(context, R.drawable.ic_globe_24dp);
Bitmap globeBitmap = Bitmap globeBitmap =
...@@ -45,12 +45,12 @@ public class TabListFaviconProvider { ...@@ -45,12 +45,12 @@ public class TabListFaviconProvider {
Canvas canvas = new Canvas(globeBitmap); Canvas canvas = new Canvas(globeBitmap);
globeDrawable.setBounds(0, 0, mFaviconSize, mFaviconSize); globeDrawable.setBounds(0, 0, mFaviconSize, mFaviconSize);
globeDrawable.draw(canvas); globeDrawable.draw(canvas);
sGlobeDrawable = processBitmap(globeBitmap); sRoundedGlobeDrawable = processBitmap(globeBitmap);
} }
if (sChromeDrawable == null) { if (sRoundedChromeDrawable == null) {
Bitmap chromeBitmap = Bitmap chromeBitmap =
BitmapFactory.decodeResource(context.getResources(), R.drawable.chromelogo16); BitmapFactory.decodeResource(context.getResources(), R.drawable.chromelogo16);
sChromeDrawable = processBitmap(chromeBitmap); sRoundedChromeDrawable = processBitmap(chromeBitmap);
} }
} }
...@@ -64,7 +64,7 @@ public class TabListFaviconProvider { ...@@ -64,7 +64,7 @@ public class TabListFaviconProvider {
* @return The scaled rounded Globe Drawable as default favicon. * @return The scaled rounded Globe Drawable as default favicon.
*/ */
public Drawable getDefaultFaviconDrawable() { public Drawable getDefaultFaviconDrawable() {
return sGlobeDrawable; return sRoundedGlobeDrawable;
} }
/** /**
...@@ -76,13 +76,15 @@ public class TabListFaviconProvider { ...@@ -76,13 +76,15 @@ public class TabListFaviconProvider {
public void getFaviconForUrlAsync( public void getFaviconForUrlAsync(
String url, boolean isIncognito, Callback<Drawable> faviconCallback) { String url, boolean isIncognito, Callback<Drawable> faviconCallback) {
if (NativePageFactory.isNativePageUrl(url, isIncognito)) { if (NativePageFactory.isNativePageUrl(url, isIncognito)) {
faviconCallback.onResult(sChromeDrawable); faviconCallback.onResult(sRoundedChromeDrawable);
} else { } else {
mFaviconHelper.getLocalFaviconImageForURL( mFaviconHelper.getLocalFaviconImageForURL(
mProfile, url, mFaviconSize, (image, iconUrl) -> { mProfile, url, mFaviconSize, (image, iconUrl) -> {
if (image == null) return; if (image == null) {
Drawable drawable = processBitmap(image); faviconCallback.onResult(sRoundedGlobeDrawable);
faviconCallback.onResult(drawable); } else {
faviconCallback.onResult(processBitmap(image));
}
}); });
} }
} }
...@@ -90,14 +92,14 @@ public class TabListFaviconProvider { ...@@ -90,14 +92,14 @@ public class TabListFaviconProvider {
/** /**
* Synchronously get the processed favicon Drawable. * Synchronously get the processed favicon Drawable.
* @param url The URL whose favicon is requested. * @param url The URL whose favicon is requested.
* @param isIncognito Whether the tab is in cognito or not. * @param isIncognito Whether the tab is incognito or not.
* @param icon The favicon that was received. * @param icon The favicon that was received.
* @return The processed favicon. * @return The processed favicon.
*/ */
public Drawable getFaviconForUrlSync(String url, boolean isIncognito, Bitmap icon) { public Drawable getFaviconForUrlSync(String url, boolean isIncognito, Bitmap icon) {
if (icon == null) { if (icon == null) {
boolean isNativeUrl = NativePageFactory.isNativePageUrl(url, isIncognito); boolean isNativeUrl = NativePageFactory.isNativePageUrl(url, isIncognito);
return isNativeUrl ? sChromeDrawable : sGlobeDrawable; return isNativeUrl ? sRoundedChromeDrawable : sRoundedGlobeDrawable;
} else { } else {
return processBitmap(icon); return processBitmap(icon);
} }
......
...@@ -621,6 +621,11 @@ ...@@ -621,6 +621,11 @@
<dimen name="tab_list_mini_card_frame_size">1dp</dimen> <dimen name="tab_list_mini_card_frame_size">1dp</dimen>
<dimen name="tab_list_mini_card_text_size">12sp</dimen> <dimen name="tab_list_mini_card_text_size">12sp</dimen>
<dimen name="tab_grid_thumbnail_card_default_size">152dp</dimen> <dimen name="tab_grid_thumbnail_card_default_size">152dp</dimen>
<dimen name="tab_grid_thumbnail_favicon_frame_padding">16dp</dimen>
<dimen name="tab_grid_thumbnail_favicon_padding">24dp</dimen>
<dimen name="tab_grid_thumbnail_favicon_background_radius">3dp</dimen>
<dimen name="tab_grid_thumbnail_favicon_background_padding">2dp</dimen>
<dimen name="tab_grid_thumbnail_favicon_background_down_shift">2dp</dimen>
<dimen name="swipe_to_dismiss_threshold">72dp</dimen> <dimen name="swipe_to_dismiss_threshold">72dp</dimen>
<!-- RadioButtonWithDescription dimensions --> <!-- RadioButtonWithDescription dimensions -->
......
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