| // 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; |
| |
| import android.content.Context; |
| import android.graphics.Bitmap; |
| import android.text.TextUtils; |
| |
| import org.chromium.chrome.browser.widget.RoundedIconGenerator; |
| |
| /** |
| * Generates icons suitable for Activities in the recent tasks list. |
| */ |
| public class ActivityTaskDescriptionIconGenerator { |
| private static final int APP_ICON_MIN_SIZE_DP = 32; |
| private static final int APP_ICON_SIZE_DP = 64; |
| private static final int APP_ICON_CORNER_RADIUS_DP = 3; |
| private static final int APP_ICON_TEXT_SIZE_DP = 30; |
| private static final int APP_ICON_DEFAULT_BACKGROUND_COLOR = 0xFF323232; |
| |
| private Context mContext; |
| private int mMinSizePx; |
| |
| /** |
| * The page URL for which {@link #mGeneratedIcon} was generated. |
| */ |
| private String mGeneratedPageUrl; |
| |
| /** |
| * The most recently generated icon. |
| */ |
| private Bitmap mGeneratedIcon; |
| |
| /** |
| * Generates the icon if there is no adequate favicon. |
| */ |
| private RoundedIconGenerator mGenerator; |
| |
| public ActivityTaskDescriptionIconGenerator(Context context) { |
| mContext = context; |
| mMinSizePx = |
| (int) mContext.getResources().getDisplayMetrics().density * APP_ICON_MIN_SIZE_DP; |
| } |
| |
| /** |
| * Returns the icon to use for the Activity in the recent tasks list. Returns the favicon if it |
| * is adequate. If the passed in favicon is not adequate, an icon is generated from the |
| * page URL. |
| * |
| * @param pageUrl The URL of the tab. |
| * @param largestFavicon The largest favicon available at the page URL. |
| * @return The icon to use in the recent tasks list. |
| */ |
| public Bitmap getBitmap(String pageUrl, Bitmap largestFavicon) { |
| if (largestFavicon != null && largestFavicon.getWidth() >= mMinSizePx |
| && largestFavicon.getHeight() >= mMinSizePx) { |
| return largestFavicon; |
| } |
| |
| if (TextUtils.equals(pageUrl, mGeneratedPageUrl)) { |
| return mGeneratedIcon; |
| } |
| |
| if (mGenerator == null) { |
| mGenerator = new RoundedIconGenerator(mContext.getResources(), APP_ICON_SIZE_DP, |
| APP_ICON_SIZE_DP, APP_ICON_CORNER_RADIUS_DP, APP_ICON_DEFAULT_BACKGROUND_COLOR, |
| APP_ICON_TEXT_SIZE_DP); |
| } |
| |
| mGeneratedPageUrl = pageUrl; |
| mGeneratedIcon = mGenerator.generateIconForUrl(pageUrl); |
| return mGeneratedIcon; |
| } |
| } |