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

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

Issue 1206673003: Merge java_staging/src into java/src. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 6 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_staging/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
deleted file mode 100644
index 067c3b0ae9ae36113a00bf0327497c8aa00e1b45..0000000000000000000000000000000000000000
--- a/chrome/android/java_staging/src/org/chromium/chrome/browser/customtabs/CustomTabIntentDataProvider.java
+++ /dev/null
@@ -1,318 +0,0 @@
-// 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.customtabs;
-
-import android.app.Activity;
-import android.app.PendingIntent;
-import android.app.PendingIntent.CanceledException;
-import android.content.Context;
-import android.content.Intent;
-import android.graphics.Bitmap;
-import android.graphics.Color;
-import android.net.Uri;
-import android.os.Bundle;
-import android.text.TextUtils;
-import android.util.Pair;
-
-import org.chromium.base.Log;
-import org.chromium.base.VisibleForTesting;
-import org.chromium.chrome.R;
-import org.chromium.chrome.browser.util.IntentUtils;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * A model class that parses intent from third-party apps and provides results to
- * {@link CustomTabActivity}.
- */
-public class CustomTabIntentDataProvider {
- private static final String TAG = "CustomTabIntentDataProvider";
-
- /**
- * The category name that the service intent has to have for custom tabs. This
- * category can also be used to generically resolve to the service component for custom tabs.
- */
- public static final String CATEGORY_CUSTOM_TABS = "android.intent.category.CUSTOM_TABS";
-
- /**
- * Extra used to match the session. This has to be included in the intent to open in
- * a custom tab. Can be -1 if there is no session id taken. Its value is a long returned
- * by {@link ICustomTabsConnectionService#newSession}.
- */
- public static final String EXTRA_CUSTOM_TABS_SESSION_ID =
- "android.support.CUSTOM_TABS:session_id";
-
- /**
- * Extra used to keep the caller alive. Its value is an Intent.
- */
- public static final String EXTRA_CUSTOM_TABS_KEEP_ALIVE =
- "android.support.CUSTOM_TABS:keep_alive";
-
- /**
- * Extra that changes the background color for the omnibox. colorRes is an int that specifies a
- * color
- */
- public static final String EXTRA_CUSTOM_TABS_TOOLBAR_COLOR =
- "android.support.CUSTOM_TABS:toolbar_color";
-
- /**
- * Bundle used for the action button parameters.
- */
- public static final String EXTRA_CUSTOM_TABS_ACTION_BUTTON_BUNDLE =
- "android.support.CUSTOM_TABS:action_button_bundle";
-
- /**
- * Key that specifies the Bitmap to be used as the image source for the action button.
- */
- public static final String KEY_CUSTOM_TABS_ICON = "android.support.CUSTOM_TABS:icon";
-
- /**
- * Key that specifies the PendingIntent to launch when the action button or menu item was
- * clicked. Chrome will be calling {@link PendingIntent#send()} on clicks after adding the url
- * as data. The client app can call {@link Intent#getDataString()} to get the url.
- */
- public static final String KEY_CUSTOM_TABS_PENDING_INTENT =
- "android.support.CUSTOM_TABS:pending_intent";
-
- /**
- * Use an {@code ArrayList<Bundle>} for specifying menu related params. There should be a
- * separate Bundle for each custom menu item.
- */
- public static final String EXTRA_CUSTOM_TABS_MENU_ITEMS =
- "android.support.CUSTOM_TABS:menu_items";
-
- /**
- * Key for the title of a menu item.
- */
- public static final String KEY_CUSTOM_TABS_MENU_TITLE =
- "android.support.CUSTOM_TABS:menu_title";
-
- /**
- * Bundle constructed out of ActivityOptions that Chrome will be running when it finishes
- * {@link CustomTabActivity}. A similar ActivityOptions for starting Chrome should be
- * constructed and given to the startActivity() call that launches Chrome.
- */
- public static final String EXTRA_CUSTOM_TABS_EXIT_ANIMATION_BUNDLE =
- "android.support.CUSTOM_TABS:exit_animation_bundle";
-
- /**
- * An invalid session ID, used when none is provided in the intent.
- */
- public static final long INVALID_SESSION_ID = -1;
-
- private static final String BUNDLE_PACKAGE_NAME = "android:packageName";
- private static final String BUNDLE_ENTER_ANIMATION_RESOURCE = "android:animEnterRes";
- private static final String BUNDLE_EXIT_ANIMATION_RESOURCE = "android:animExitRes";
- private final long mSessionId;
- private final Intent mKeepAliveServiceIntent;
- private int mToolbarColor;
- private Bitmap mIcon;
- private PendingIntent mActionButtonPendingIntent;
- private List<Pair<String, PendingIntent>> mMenuEntries = new ArrayList<>();
- private Bundle mAnimationBundle;
- // OnFinished listener for PendingIntents. Used for testing only.
- private PendingIntent.OnFinished mOnFinished;
-
- /**
- * Constructs a {@link CustomTabIntentDataProvider}.
- */
- public CustomTabIntentDataProvider(Intent intent, Context context) {
- if (intent == null) assert false;
-
- mSessionId = IntentUtils.safeGetLongExtra(
- intent, EXTRA_CUSTOM_TABS_SESSION_ID, INVALID_SESSION_ID);
- retrieveToolbarColor(intent, context);
-
- mKeepAliveServiceIntent = IntentUtils.safeGetParcelableExtra(
- intent, EXTRA_CUSTOM_TABS_KEEP_ALIVE);
-
- Bundle actionButtonBundle = IntentUtils.safeGetBundleExtra(
- intent, EXTRA_CUSTOM_TABS_ACTION_BUTTON_BUNDLE);
- if (actionButtonBundle != null) {
- mIcon = IntentUtils.safeGetParcelable(actionButtonBundle, KEY_CUSTOM_TABS_ICON);
- if (!checkBitmapSizeWithinBounds(context, mIcon)) {
- mIcon.recycle();
- mIcon = null;
- } else {
- mActionButtonPendingIntent = IntentUtils.safeGetParcelable(
- actionButtonBundle, KEY_CUSTOM_TABS_PENDING_INTENT);
- }
- }
-
- List<Bundle> menuItems = IntentUtils.getParcelableArrayListExtra(
- intent, EXTRA_CUSTOM_TABS_MENU_ITEMS);
- if (menuItems != null) {
- for (Bundle bundle : menuItems) {
- String title = IntentUtils.safeGetString(bundle, KEY_CUSTOM_TABS_MENU_TITLE);
- PendingIntent pendingIntent = IntentUtils.safeGetParcelable(
- bundle, KEY_CUSTOM_TABS_PENDING_INTENT);
- if (TextUtils.isEmpty(title) || pendingIntent == null) continue;
- mMenuEntries.add(new Pair<String, PendingIntent>(title, pendingIntent));
- }
- }
-
- mAnimationBundle = IntentUtils.safeGetBundleExtra(
- intent, EXTRA_CUSTOM_TABS_EXIT_ANIMATION_BUNDLE);
- }
-
- /**
- * Processes the color passed from the client app and updates {@link #mToolbarColor}.
- */
- private void retrieveToolbarColor(Intent intent, Context context) {
- int color = IntentUtils.safeGetIntExtra(intent, EXTRA_CUSTOM_TABS_TOOLBAR_COLOR,
- context.getResources().getColor(R.color.default_primary_color));
- int defaultColor = context.getResources().getColor(R.color.default_primary_color);
-
- if (color == Color.TRANSPARENT) color = defaultColor;
-
- // Ignore any transparency value.
- color |= 0xFF000000;
-
- mToolbarColor = color;
- }
-
- /**
- * @return The session ID specified in the intent. Will be
- * INVALID_SESSION_ID if it is not set in the intent.
- */
- public long getSessionId() {
- return mSessionId;
- }
-
- /**
- * @return The keep alive service intent specified in the intent, or null.
- */
- public Intent getKeepAliveServiceIntent() {
- return mKeepAliveServiceIntent;
- }
-
- /**
- * @return The toolbar color specified in the intent. Will return the color of
- * default_primary_color, if not set in the intent.
- */
- public int getToolbarColor() {
- return mToolbarColor;
- }
-
- /**
- * @return Whether the client app has provided sufficient info for the toolbar to show the
- * action button.
- */
- public boolean shouldShowActionButton() {
- return mIcon != null && mActionButtonPendingIntent != null;
- }
-
- /**
- * @return The icon used for the action button. Will be null if not set in the intent.
- */
- public Bitmap getActionButtonIcon() {
- return mIcon;
- }
-
- /**
- * @return The {@link PendingIntent} that will be sent when the user clicks the action button.
- * For testing only.
- */
- @VisibleForTesting
- public PendingIntent getActionButtonPendingIntentForTest() {
- return mActionButtonPendingIntent;
- }
-
- /**
- * @return Titles of menu items that were passed from client app via intent.
- */
- public List<String> getMenuTitles() {
- ArrayList<String> list = new ArrayList<>();
- for (Pair<String, PendingIntent> pair : mMenuEntries) {
- list.add(pair.first);
- }
- return list;
- }
-
- /**
- * Triggers the client-defined action when the user clicks a custom menu item.
- * @param menuIndex The index that the menu item is shown in the result of
- * {@link #getMenuTitles()}
- */
- public void clickMenuItemWithUrl(Context context, int menuIndex, String url) {
- Intent addedIntent = new Intent();
- addedIntent.setData(Uri.parse(url));
- try {
- PendingIntent pendingIntent = mMenuEntries.get(menuIndex).second;
- pendingIntent.send(context, 0, addedIntent, mOnFinished, null);
- } catch (CanceledException e) {
- Log.e(TAG, "Custom tab in Chrome failed to send pending intent.");
- }
- }
-
- /**
- * @return Whether chrome should animate when it finishes. We show animations only if the client
- * app has supplied the correct animation resources via intent extra.
- */
- public boolean shouldAnimateOnFinish() {
- return mAnimationBundle != null && getClientPackageName() != null;
- }
-
- /**
- * @return The package name of the client app. This is used for a workaround in order to
- * retrieve the client's animation resources.
- */
- public String getClientPackageName() {
- if (mAnimationBundle == null) return null;
- return mAnimationBundle.getString(BUNDLE_PACKAGE_NAME);
- }
-
- /**
- * @return The resource id for enter animation, which is used in
- * {@link Activity#overridePendingTransition(int, int)}.
- */
- public int getAnimationEnterRes() {
- return shouldAnimateOnFinish() ? mAnimationBundle.getInt(BUNDLE_ENTER_ANIMATION_RESOURCE)
- : 0;
- }
-
- /**
- * @return The resource id for exit animation, which is used in
- * {@link Activity#overridePendingTransition(int, int)}.
- */
- public int getAnimationExitRes() {
- return shouldAnimateOnFinish() ? mAnimationBundle.getInt(BUNDLE_EXIT_ANIMATION_RESOURCE)
- : 0;
- }
-
- /**
- * Send the pending intent for the current action button with the given url as data.
- * @param context The context to use for sending the {@link PendingIntent}.
- * @param url The url to attach as additional data to the {@link PendingIntent}.
- */
- public void sendButtonPendingIntentWithUrl(Context context, String url) {
- assert mActionButtonPendingIntent != null;
- Intent addedIntent = new Intent();
- addedIntent.setData(Uri.parse(url));
- try {
- mActionButtonPendingIntent.send(context, 0, addedIntent, mOnFinished, null);
- } catch (CanceledException e) {
- Log.e(TAG, "CanceledException while sending pending intent in custom tab");
- }
- }
-
- private boolean checkBitmapSizeWithinBounds(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;
- if (scaledWidth > 2 * height) return false;
- return true;
- }
-
- /**
- * Set the callback object for {@link PendingIntent}s that are sent in this class. For testing
- * purpose only.
- */
- @VisibleForTesting
- void setPendingIntentOnFinishedForTesting(PendingIntent.OnFinished onFinished) {
- mOnFinished = onFinished;
- }
-}

Powered by Google App Engine
This is Rietveld 408576698