Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(966)

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/customtabs/CustomTabActivity.java

Issue 1305253006: [Custom Tabs]Add API for updating action button as ContentProvider (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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();

Powered by Google App Engine
This is Rietveld 408576698