| Index: chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
|
| diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
|
| index edc82a074ef99114b3e0aee2fa3670b3084777d8..53c437df57281584a30631560379796a7458bca8 100644
|
| --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
|
| +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
|
| @@ -42,21 +42,11 @@ public class CustomTabIntentDataProvider {
|
| public static final String EXTRA_KEEP_ALIVE = "android.support.customtabs.extra.KEEP_ALIVE";
|
|
|
| /**
|
| - * Extra int that specifies the style of the back button on the toolbar. Default is showing a
|
| - * cross icon.
|
| + * Extra bitmap that specifies the icon of the back button on the toolbar. If the client chooses
|
| + * not to customize it, a default close button will be used.
|
| */
|
| - public static final String EXTRA_CLOSE_BUTTON_STYLE =
|
| - "android.support.customtabs.extra.CLOSE_BUTTON_STYLE";
|
| -
|
| - /**
|
| - * Uses 'X'-like cross icon for close button.
|
| - */
|
| - public static final int CLOSE_BUTTON_CROSS = 0;
|
| -
|
| - /**
|
| - * Uses '<'-like chevron arrow icon for close button.
|
| - */
|
| - public static final int CLOSE_BUTTON_ARROW = 1;
|
| + public static final String EXTRA_CLOSE_BUTTON_ICON =
|
| + "android.support.customtabs.extra.CLOSE_BUTTON_ICON";
|
|
|
| /**
|
| * Extra int that specifies state for showing the page title. Default is showing only the domain
|
| @@ -88,9 +78,9 @@ public class CustomTabIntentDataProvider {
|
| private final IBinder mSession;
|
| private final Intent mKeepAliveServiceIntent;
|
| private final int mTitleVisibilityState;
|
| - private final int mCloseButtonResId;
|
| private int mToolbarColor;
|
| - private Drawable mIcon;
|
| + private Drawable mCustomButtonIcon;
|
| + private Drawable mCloseButtonIcon;
|
| private PendingIntent mActionButtonPendingIntent;
|
| private List<Pair<String, PendingIntent>> mMenuEntries = new ArrayList<>();
|
| private Bundle mAnimationBundle;
|
| @@ -112,7 +102,7 @@ public class CustomTabIntentDataProvider {
|
| if (actionButtonBundle != null) {
|
| Bitmap bitmap = IntentUtils.safeGetParcelable(actionButtonBundle,
|
| CustomTabsIntent.KEY_ICON);
|
| - if (bitmap != null && !checkBitmapSizeWithinBounds(context, bitmap)) {
|
| + if (bitmap != null && !checkCustomButtonIconWithinBounds(context, bitmap)) {
|
| bitmap.recycle();
|
| bitmap = null;
|
| } else if (bitmap != null) {
|
| @@ -121,13 +111,26 @@ public class CustomTabIntentDataProvider {
|
| boolean shouldTint = IntentUtils.safeGetBooleanExtra(intent,
|
| EXTRA_TINT_ACTION_BUTTON, false);
|
| if (shouldTint) {
|
| - mIcon = TintedDrawable.constructTintedDrawable(context.getResources(), bitmap);
|
| + mCustomButtonIcon = TintedDrawable
|
| + .constructTintedDrawable(context.getResources(), bitmap);
|
| } else {
|
| - mIcon = new BitmapDrawable(context.getResources(), bitmap);
|
| + mCustomButtonIcon = new BitmapDrawable(context.getResources(), bitmap);
|
| }
|
| }
|
| }
|
|
|
| + Bitmap bitmap = IntentUtils.safeGetParcelableExtra(intent, EXTRA_CLOSE_BUTTON_ICON);
|
| + if (bitmap != null && !checkCloseButtonSize(context, bitmap)) {
|
| + bitmap.recycle();
|
| + bitmap = null;
|
| + }
|
| + if (bitmap == null) {
|
| + mCloseButtonIcon = TintedDrawable.constructTintedDrawable(context.getResources(),
|
| + R.drawable.btn_close);
|
| + } else {
|
| + mCloseButtonIcon = new BitmapDrawable(context.getResources(), bitmap);
|
| + }
|
| +
|
| List<Bundle> menuItems =
|
| IntentUtils.getParcelableArrayListExtra(intent, CustomTabsIntent.EXTRA_MENU_ITEMS);
|
| if (menuItems != null) {
|
| @@ -143,18 +146,6 @@ public class CustomTabIntentDataProvider {
|
|
|
| mAnimationBundle = IntentUtils.safeGetBundleExtra(
|
| intent, CustomTabsIntent.EXTRA_EXIT_ANIMATION_BUNDLE);
|
| -
|
| - int closeButtonStyle =
|
| - IntentUtils.safeGetIntExtra(intent, EXTRA_CLOSE_BUTTON_STYLE, CLOSE_BUTTON_CROSS);
|
| - switch(closeButtonStyle) {
|
| - case CustomTabIntentDataProvider.CLOSE_BUTTON_ARROW:
|
| - mCloseButtonResId = R.drawable.btn_chevron_left;
|
| - break;
|
| - case CustomTabIntentDataProvider.CLOSE_BUTTON_CROSS:
|
| - default:
|
| - mCloseButtonResId = R.drawable.btn_close;
|
| - }
|
| -
|
| mTitleVisibilityState =
|
| IntentUtils.safeGetIntExtra(intent, EXTRA_TITLE_VISIBILITY_STATE, NO_TITLE);
|
| }
|
| @@ -198,10 +189,12 @@ public class CustomTabIntentDataProvider {
|
| }
|
|
|
| /**
|
| - * @return The resource id of the close button shown in the custom tab toolbar.
|
| + * @return The drawable of the icon of close button shown in the custom tab toolbar. If the
|
| + * client app provides an icon in valid size, use this icon; else return the default
|
| + * drawable.
|
| */
|
| - public int getCloseButtonIconResId() {
|
| - return mCloseButtonResId;
|
| + public Drawable getCloseButtonDrawable() {
|
| + return mCloseButtonIcon;
|
| }
|
|
|
| /**
|
| @@ -217,14 +210,14 @@ public class CustomTabIntentDataProvider {
|
| * action button.
|
| */
|
| public boolean shouldShowActionButton() {
|
| - return mIcon != null && mActionButtonPendingIntent != null;
|
| + return mCustomButtonIcon != null && mActionButtonPendingIntent != null;
|
| }
|
|
|
| /**
|
| * @return The icon used for the action button. Will be null if not set in the intent.
|
| */
|
| public Drawable getActionButtonIcon() {
|
| - return mIcon;
|
| + return mCustomButtonIcon;
|
| }
|
|
|
| /**
|
| @@ -314,7 +307,7 @@ public class CustomTabIntentDataProvider {
|
| }
|
| }
|
|
|
| - private boolean checkBitmapSizeWithinBounds(Context context, Bitmap bitmap) {
|
| + private boolean checkCustomButtonIconWithinBounds(Context context, Bitmap bitmap) {
|
| int height = context.getResources().getDimensionPixelSize(R.dimen.toolbar_icon_height);
|
| if (bitmap.getHeight() < height) return false;
|
| int scaledWidth = bitmap.getWidth() / bitmap.getHeight() * height;
|
| @@ -322,6 +315,12 @@ public class CustomTabIntentDataProvider {
|
| return true;
|
| }
|
|
|
| + private boolean checkCloseButtonSize(Context context, Bitmap bitmap) {
|
| + int size = context.getResources().getDimensionPixelSize(R.dimen.toolbar_icon_height);
|
| + if (bitmap.getHeight() == size && bitmap.getWidth() == size) return true;
|
| + return false;
|
| + }
|
| +
|
| /**
|
| * Set the callback object for {@link PendingIntent}s that are sent in this class. For testing
|
| * purpose only.
|
|
|