diff options
7 files changed, 69 insertions, 18 deletions
diff --git a/chrome/android/java/res/layout/custom_tabs_toolbar.xml b/chrome/android/java/res/layout/custom_tabs_toolbar.xml index cfca2f8..98a6c46 100644 --- a/chrome/android/java/res/layout/custom_tabs_toolbar.xml +++ b/chrome/android/java/res/layout/custom_tabs_toolbar.xml @@ -5,10 +5,9 @@ <org.chromium.chrome.browser.toolbar.CustomTabToolbar xmlns:android="http://schemas.android.com/apk/res/android"> <org.chromium.chrome.browser.widget.TintedImageButton - android:id="@+id/back_button" + android:id="@+id/close_button" style="@style/ToolbarButton" - android:layout_gravity="center_vertical" - android:src="@drawable/btn_chevron_left" /> + android:layout_gravity="center_vertical" /> <ImageButton android:id="@+id/security_button" style="@style/LocationBarButton" android:layout_width="@dimen/location_bar_icon_width" diff --git a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java index 80b95e5..7b62c75 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java @@ -117,6 +117,7 @@ public class CustomTabActivity extends ChromeActivity { @Override public void postInflationStartup() { super.postInflationStartup(); + getToolbarManager().setCloseButtonIcon(mIntentDataProvider.getCloseButtonIconResId()); getToolbarManager().setShowTitle(mIntentDataProvider.getTitleVisibilityState() == CustomTabIntentDataProvider.CUSTOM_TAB_SHOW_PAGE_TITLE); getToolbarManager().updatePrimaryColor(mIntentDataProvider.getToolbarColor()); 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 2dd0ec1..60d454e 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 @@ -53,12 +53,29 @@ public class CustomTabIntentDataProvider { /** * Extra that changes the background color for the omnibox. colorRes is an int that specifies a - * color + * color. */ public static final String EXTRA_CUSTOM_TABS_TOOLBAR_COLOR = "android.support.CUSTOM_TABS:toolbar_color"; /** + * Extra int that specifies the style of the back button on the toolbar. Default is showing a + * cross icon. + */ + public static final String EXTRA_CUSTOM_TABS_CLOSE_BUTTON_STYLE = + "android.support.CUSTOM_TABS:close_button_style"; + + /** + * Uses 'X'-like cross icon for close button. + */ + public static final int CUSTOM_TAB_CLOSE_BUTTON_CROSS = 0; + + /** + * Uses '<'-like chevron arrow icon for close button. + */ + public static final int CUSTOM_TAB_CLOSE_BUTTON_ARROW = 1; + + /** * Extra int that specifies state for showing the page title. Default is showing only the domain * and no information about the title. */ @@ -126,6 +143,7 @@ public class CustomTabIntentDataProvider { private final long mSessionId; private final Intent mKeepAliveServiceIntent; private final int mTitleVisibilityState; + private final int mCloseButtonResId; private int mToolbarColor; private Bitmap mIcon; private PendingIntent mActionButtonPendingIntent; @@ -175,6 +193,17 @@ public class CustomTabIntentDataProvider { mAnimationBundle = IntentUtils.safeGetBundleExtra( intent, EXTRA_CUSTOM_TABS_EXIT_ANIMATION_BUNDLE); + int closeButtonStyle = IntentUtils.safeGetIntExtra(intent, + EXTRA_CUSTOM_TABS_CLOSE_BUTTON_STYLE, CUSTOM_TAB_CLOSE_BUTTON_CROSS); + switch(closeButtonStyle) { + case CustomTabIntentDataProvider.CUSTOM_TAB_CLOSE_BUTTON_ARROW: + mCloseButtonResId = R.drawable.btn_chevron_left; + break; + case CustomTabIntentDataProvider.CUSTOM_TAB_CLOSE_BUTTON_CROSS: + default: + mCloseButtonResId = R.drawable.btn_close; + } + mTitleVisibilityState = IntentUtils.safeGetIntExtra( intent, EXTRA_CUSTOM_TABS_TITLE_VISIBILITY_STATE, CUSTOM_TAB_NO_TITLE); } @@ -219,6 +248,13 @@ public class CustomTabIntentDataProvider { } /** + * @return The resource id of the close button shown in the custom tab toolbar. + */ + public int getCloseButtonIconResId() { + return mCloseButtonResId; + } + + /** * @return The title visibility state for the toolbar. * Default is {@link CustomTabIntentDataProvider#CUSTOM_TAB_NO_TITLE}. */ diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/CustomTabToolbar.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/CustomTabToolbar.java index 6809b16..a7674a5 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/CustomTabToolbar.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/CustomTabToolbar.java @@ -63,7 +63,7 @@ public class CustomTabToolbar extends ToolbarLayout implements LocationBar { private ImageButton mCustomActionButton; private int mSecurityIconType; private boolean mUseDarkColors; - private TintedImageButton mReturnButton; + private TintedImageButton mCloseButton; private Animator mSecurityButtonShowAnimator; private boolean mBackgroundColorSet; @@ -88,7 +88,7 @@ public class CustomTabToolbar extends ToolbarLayout implements LocationBar { mSecurityButton = (ImageButton) findViewById(R.id.security_button); mSecurityIconType = ConnectionSecurityLevel.NONE; mCustomActionButton = (ImageButton) findViewById(R.id.action_button); - mReturnButton = (TintedImageButton) findViewById(R.id.back_button); + mCloseButton = (TintedImageButton) findViewById(R.id.close_button); mSecurityButtonShowAnimator = ObjectAnimator.ofFloat(mSecurityButton, ALPHA, 1); mSecurityButtonShowAnimator .setDuration(ToolbarPhone.URL_FOCUS_CHANGE_ANIMATION_DURATION_MS); @@ -122,8 +122,13 @@ public class CustomTabToolbar extends ToolbarLayout implements LocationBar { } @Override - public void setCustomTabReturnClickHandler(OnClickListener listener) { - mReturnButton.setOnClickListener(listener); + public void setCloseButtonImageResource(int iconRes) { + mCloseButton.setImageResource(iconRes); + } + + @Override + public void setCustomTabCloseClickHandler(OnClickListener listener) { + mCloseButton.setOnClickListener(listener); } @Override @@ -263,7 +268,7 @@ public class CustomTabToolbar extends ToolbarLayout implements LocationBar { ColorStateList colorStateList = resources.getColorStateList(mUseDarkColors ? R.color.dark_mode_tint : R.color.light_mode_tint); mMenuButton.setTint(colorStateList); - mReturnButton.setTint(colorStateList); + mCloseButton.setTint(colorStateList); mUrlBar.setUseDarkTextColors(mUseDarkColors); int titleTextColor = mUseDarkColors ? resources.getColor(R.color.url_emphasis_default_text) diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar.java index 699ce9c..be93642 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/Toolbar.java @@ -62,12 +62,6 @@ public interface Toolbar { void setBookmarkClickHandler(OnClickListener listener); /** - * Sets the OnClickListener to notify when the back button is pressed in a custom tab. - * @param listener The callback that will be notified when the back button is pressed. - */ - void setCustomTabReturnClickHandler(OnClickListener listener); - - /** * Calculates the {@link Rect} that represents the content area of the location bar. This * rect will be relative to the toolbar. * @param outRect The Rect that represents the content area of the location bar. diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarLayout.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarLayout.java index d8b9541..e9531ce 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarLayout.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarLayout.java @@ -264,8 +264,12 @@ abstract class ToolbarLayout extends FrameLayout implements Toolbar { @Override public void setBookmarkClickHandler(OnClickListener listener) { } - @Override - public void setCustomTabReturnClickHandler(OnClickListener listener) { } + + /** + * Sets the OnClickListener to notify when the close button is pressed in a custom tab. + * @param listener The callback that will be notified when the close button is pressed. + */ + public void setCustomTabCloseClickHandler(OnClickListener listener) { } /** * Gives inheriting classes the chance to update the visibility of the @@ -334,6 +338,11 @@ abstract class ToolbarLayout extends FrameLayout implements Toolbar { */ protected void onPrimaryColorChanged() { } + /** + * Sets the icon resource that the close button in the toolbar (if any) should show. + */ + public void setCloseButtonImageResource(int iconRes) { } + @Override public void addCustomActionButton(Bitmap buttonSource, OnClickListener listener) { } diff --git a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java index 38654ce..88ab7b9 100644 --- a/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java +++ b/chrome/android/java/src/org/chromium/chrome/browser/toolbar/ToolbarManager.java @@ -506,7 +506,7 @@ public class ToolbarManager implements ToolbarTabController, UrlFocusChangeListe mToolbar.setOnTabSwitcherClickHandler(tabSwitcherClickHandler); mToolbar.setOnNewTabClickHandler(newTabClickHandler); mToolbar.setBookmarkClickHandler(bookmarkClickHandler); - mToolbar.setCustomTabReturnClickHandler(customTabsBackClickHandler); + mToolbar.setCustomTabCloseClickHandler(customTabsBackClickHandler); mToolbarModel.initializeWithNative(); @@ -797,6 +797,13 @@ public class ToolbarManager implements ToolbarTabController, UrlFocusChangeListe } /** + * Sets the icon resource that the close button shows. + */ + public void setCloseButtonIcon(int iconRes) { + mToolbar.setCloseButtonImageResource(iconRes); + } + + /** * Sets whether a title should be shown within the Toolbar. * @param showTitle Whether a title should be shown. */ |