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

Side by Side Diff: chrome/android/java/src/android/support/customtabs/CustomTabsIntent.java

Issue 1303613002: Start using the third_party/android_tools target for customtabs library (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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package android.support.customtabs;
6
7 import android.app.Activity;
8 import android.app.ActivityOptions;
9 import android.app.PendingIntent;
10 import android.content.Intent;
11 import android.graphics.Bitmap;
12 import android.graphics.Color;
13 import android.net.Uri;
14 import android.os.Build;
15 import android.os.Bundle;
16 import android.os.IBinder;
17
18 import java.lang.reflect.InvocationTargetException;
19 import java.lang.reflect.Method;
20
21 /**
22 * Constants and utilities that will be used for low level control on customizin g the UI and
23 * functionality of a tab.
24 */
25 public class CustomTabsIntent {
26
27 /**
28 * Extra used to match the session. This has to be included in the intent to open in
29 * a custom tab. This is the same IBinder that gets passed to ICustomTabsSer vice#newSession.
30 * Null if there is no need to match any service side sessions with the inte nt.
31 */
32 public static final String EXTRA_SESSION = "android.support.customtabs.extra .SESSION";
33
34 /**
35 * Extra that changes the background color for the toolbar. colorRes is an i nt that specifies a
36 * {@link Color}, not a resource id.
37 */
38 public static final String EXTRA_TOOLBAR_COLOR =
39 "android.support.customtabs.extra.TOOLBAR_COLOR";
40
41 /**
42 * Boolean extra that enables the url bar to hide as the user scrolls down t he page
43 */
44 public static final String EXTRA_ENABLE_URLBAR_HIDING =
45 "android.support.customtabs.extra.ENABLE_URLBAR_HIDING";
46
47 /**
48 * Bundle used for adding a custom action button to the custom tab toolbar. The client can
49 * provide an icon {@link Bitmap} and a {@link PendingIntent} for the button .
50 */
51 public static final String EXTRA_ACTION_BUTTON_BUNDLE =
52 "android.support.customtabs.extra.ACTION_BUTTON_BUNDLE";
53
54 /**
55 * Key that specifies the {@link Bitmap} to be used as the image source for the action button.
56 */
57 public static final String KEY_ICON = "android.support.customtabs.customacti on.ICON";
58
59 /**
60 * Key that specifies the content description for the custom action button.
61 */
62 public static final String KEY_DESCRIPTION =
63 "android.support.customtabs.customaction.DESCRIPTION";
64
65 /**
66 * Key that specifies the PendingIntent to launch when the action button or menu item was
67 * clicked. The custom tab will be calling {@link PendingIntent#send()} on c licks after adding
68 * the url as data. The client app can call {@link Intent#getDataString()} t o get the url.
69 */
70 public static final String KEY_PENDING_INTENT =
71 "android.support.customtabs.customaction.PENDING_INTENT";
72
73 /**
74 * Use an {@code ArrayList<Bundle>} for specifying menu related params. Ther e should be a
75 * separate {@link Bundle} for each custom menu item.
76 */
77 public static final String EXTRA_MENU_ITEMS = "android.support.customtabs.ex tra.MENU_ITEMS";
78
79 /**
80 * Key for specifying the title of a menu item.
81 */
82 public static final String KEY_MENU_ITEM_TITLE =
83 "android.support.customtabs.customaction.MENU_ITEM_TITLE";
84
85 /**
86 * Bundle constructed out of {@link ActivityOptions} that will be running wh en the
87 * {@link Activity} that holds the custom tab gets finished. A similar Activ ityOptions
88 * for creation should be constructed and given to the startActivity() call that
89 * launches the custom tab.
90 */
91 public static final String EXTRA_EXIT_ANIMATION_BUNDLE =
92 "android.support.customtabs.extra.EXIT_ANIMATION_BUNDLE";
93
94 /**
95 * Convenience method to create a VIEW intent without a session for the give n package.
96 * @param packageName The package name to set in the intent.
97 * @param data The data {@link Uri} to be used in the intent.
98 * @return The intent with the given package, data and the right session extra.
99 */
100 public static Intent getViewIntentWithNoSession(String packageName, Uri data ) {
101 Intent intent = new Intent(Intent.ACTION_VIEW, data);
102 intent.setPackage(packageName);
103 Bundle extras = new Bundle();
104 if (!safePutBinder(extras, EXTRA_SESSION, null)) return null;
105 intent.putExtras(extras);
106 return intent;
107 }
108
109 /**
110 * A convenience method to handle putting an {@link IBinder} inside a {@link Bundle} for all
111 * Android version.
112 * @param bundle The bundle to insert the {@link IBinder}.
113 * @param key The key to use while putting the {@link IBinder}.
114 * @param binder The {@link IBinder} to put.
115 * @return Whether the operation was successful.
116 */
117 static boolean safePutBinder(Bundle bundle, String key, IBinder binder) {
118 try {
119 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
120 bundle.putBinder(key, binder);
121 } else {
122 Method putBinderMethod =
123 Bundle.class.getMethod("putIBinder", String.class, IBind er.class);
124 putBinderMethod.invoke(bundle, key, binder);
125 }
126 } catch (InvocationTargetException | IllegalAccessException | IllegalArg umentException
127 | NoSuchMethodException e) {
128 return false;
129 }
130 return true;
131 }
132 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698