| Index: chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java
|
| 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 bf321e3fa397c46ed849d3a3b375c13a05708db6..1b40047500418bd1f2de7194ec9a8be5a2b43395 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
|
| @@ -5,6 +5,7 @@
|
| package org.chromium.chrome.browser.customtabs;
|
|
|
| import android.content.Intent;
|
| +import android.graphics.Bitmap;
|
| import android.net.Uri;
|
| import android.os.IBinder;
|
| import android.support.customtabs.CustomTabsCallback;
|
| @@ -18,6 +19,7 @@ import android.view.Window;
|
|
|
| import org.chromium.base.ApiCompatibilityUtils;
|
| import org.chromium.base.Log;
|
| +import org.chromium.base.ThreadUtils;
|
| import org.chromium.base.VisibleForTesting;
|
| import org.chromium.base.metrics.RecordHistogram;
|
| import org.chromium.base.metrics.RecordUserAction;
|
| @@ -91,6 +93,24 @@ public class CustomTabActivity extends ChromeActivity {
|
| return true;
|
| }
|
|
|
| + /**
|
| + * Checks whether the active {@link CustomTabContentHandler} belongs to the given session, and
|
| + * if true, update toolbar's action button.
|
| + * @param session The {@link IBinder} that the calling client represents.
|
| + * @param bitmap The new icon for action button.
|
| + * @param description The new content description for the action button.
|
| + * @return Whether the update is successful.
|
| + */
|
| + static boolean updateActionButton(IBinder session, Bitmap bitmap, String description) {
|
| + ThreadUtils.assertOnUiThread();
|
| + // Do nothing if there is no activity or the activity does not belong to this session.
|
| + if (sActiveContentHandler == null || sActiveContentHandler.getSession() == null
|
| + || !sActiveContentHandler.getSession().equals(session)) {
|
| + return false;
|
| + }
|
| + return sActiveContentHandler.updateActionButton(bitmap, description);
|
| + }
|
| +
|
| @Override
|
| public boolean isCustomTab() {
|
| return true;
|
| @@ -143,17 +163,7 @@ public class CustomTabActivity extends ChromeActivity {
|
|
|
| // Setting task title and icon to be null will preserve the client app's title and icon.
|
| ApiCompatibilityUtils.setTaskDescription(this, null, null, toolbarColor);
|
| - if (mIntentDataProvider.shouldShowActionButton()) {
|
| - getToolbarManager().addCustomActionButton(mIntentDataProvider.getActionButtonIcon(),
|
| - mIntentDataProvider.getActionButtonDescription(), new OnClickListener() {
|
| - @Override
|
| - public void onClick(View v) {
|
| - mIntentDataProvider.sendButtonPendingIntentWithUrl(
|
| - getApplicationContext(), mTab.getUrl());
|
| - RecordUserAction.record("CustomTabsCustomActionButtonClick");
|
| - }
|
| - });
|
| - }
|
| + showActionButton();
|
| }
|
|
|
| @Override
|
| @@ -210,6 +220,12 @@ public class CustomTabActivity extends ChromeActivity {
|
| public boolean shouldIgnoreIntent(Intent intent) {
|
| return mIntentHandler.shouldIgnoreIntent(CustomTabActivity.this, intent);
|
| }
|
| +
|
| + @Override
|
| + public boolean updateActionButton(Bitmap bitmap, String description) {
|
| + mIntentDataProvider.getActionButtonParams().update(bitmap, description);
|
| + return showActionButton();
|
| + }
|
| };
|
| loadUrlInCurrentTab(new LoadUrlParams(url),
|
| IntentHandler.getTimestampFromIntent(getIntent()));
|
| @@ -230,7 +246,6 @@ public class CustomTabActivity extends ChromeActivity {
|
| }
|
| }
|
|
|
| -
|
| @Override
|
| public void onPauseWithNative() {
|
| super.onPauseWithNative();
|
| @@ -318,6 +333,27 @@ public class CustomTabActivity extends ChromeActivity {
|
| return true;
|
| }
|
|
|
| + /**
|
| + * Properly setup action button on the toolbar. Does nothing if invalid data is provided by
|
| + * clients.
|
| + */
|
| + private boolean showActionButton() {
|
| + if (!mIntentDataProvider.shouldShowActionButton()) return false;
|
| + ActionButtonParams params = mIntentDataProvider.getActionButtonParams();
|
| + getToolbarManager().setCustomActionButton(
|
| + params.getIcon(getResources()),
|
| + params.getDescription(),
|
| + new OnClickListener() {
|
| + @Override
|
| + public void onClick(View v) {
|
| + mIntentDataProvider.sendButtonPendingIntentWithUrl(
|
| + getApplicationContext(), mTab.getUrl());
|
| + RecordUserAction.record("CustomTabsCustomActionButtonClick");
|
| + }
|
| + });
|
| + return true;
|
| + }
|
| +
|
| @Override
|
| public boolean shouldShowAppMenu() {
|
| return mTab != null && getToolbarManager().isInitialized();
|
|
|