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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/ShortcutHelper.java

Issue 1845233002: Store standalone web app data in WebappDataStorage as well as the homescreen intent. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@notification-deep-linking
Patch Set: Improve comments Created 4 years, 8 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
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.chrome.browser; 5 package org.chromium.chrome.browser;
6 6
7 import android.app.ActivityManager; 7 import android.app.ActivityManager;
8 import android.content.Context; 8 import android.content.Context;
9 import android.content.Intent; 9 import android.content.Intent;
10 import android.content.pm.PackageManager; 10 import android.content.pm.PackageManager;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 */ 51 */
52 public class ShortcutHelper { 52 public class ShortcutHelper {
53 public static final String EXTRA_ICON = "org.chromium.chrome.browser.webapp_ icon"; 53 public static final String EXTRA_ICON = "org.chromium.chrome.browser.webapp_ icon";
54 public static final String EXTRA_ID = "org.chromium.chrome.browser.webapp_id "; 54 public static final String EXTRA_ID = "org.chromium.chrome.browser.webapp_id ";
55 public static final String EXTRA_MAC = "org.chromium.chrome.browser.webapp_m ac"; 55 public static final String EXTRA_MAC = "org.chromium.chrome.browser.webapp_m ac";
56 // EXTRA_TITLE is present for backward compatibility reasons 56 // EXTRA_TITLE is present for backward compatibility reasons
57 public static final String EXTRA_TITLE = "org.chromium.chrome.browser.webapp _title"; 57 public static final String EXTRA_TITLE = "org.chromium.chrome.browser.webapp _title";
58 public static final String EXTRA_NAME = "org.chromium.chrome.browser.webapp_ name"; 58 public static final String EXTRA_NAME = "org.chromium.chrome.browser.webapp_ name";
59 public static final String EXTRA_SHORT_NAME = "org.chromium.chrome.browser.w ebapp_short_name"; 59 public static final String EXTRA_SHORT_NAME = "org.chromium.chrome.browser.w ebapp_short_name";
60 public static final String EXTRA_URL = "org.chromium.chrome.browser.webapp_u rl"; 60 public static final String EXTRA_URL = "org.chromium.chrome.browser.webapp_u rl";
61 public static final String EXTRA_SCOPE = "org.chromium.chrome.browser.webapp _scope";
61 public static final String EXTRA_ORIENTATION = ScreenOrientationConstants.EX TRA_ORIENTATION; 62 public static final String EXTRA_ORIENTATION = ScreenOrientationConstants.EX TRA_ORIENTATION;
62 public static final String EXTRA_SOURCE = "org.chromium.chrome.browser.webap p_source"; 63 public static final String EXTRA_SOURCE = "org.chromium.chrome.browser.webap p_source";
63 public static final String EXTRA_THEME_COLOR = "org.chromium.chrome.browser. theme_color"; 64 public static final String EXTRA_THEME_COLOR = "org.chromium.chrome.browser. theme_color";
64 public static final String EXTRA_BACKGROUND_COLOR = 65 public static final String EXTRA_BACKGROUND_COLOR =
65 "org.chromium.chrome.browser.background_color"; 66 "org.chromium.chrome.browser.background_color";
66 public static final String EXTRA_IS_ICON_GENERATED = 67 public static final String EXTRA_IS_ICON_GENERATED =
67 "org.chromium.chrome.browser.is_icon_generated"; 68 "org.chromium.chrome.browser.is_icon_generated";
68 public static final String REUSE_URL_MATCHING_TAB_ELSE_NEW_TAB = 69 public static final String REUSE_URL_MATCHING_TAB_ELSE_NEW_TAB =
69 "REUSE_URL_MATCHING_TAB_ELSE_NEW_TAB"; 70 "REUSE_URL_MATCHING_TAB_ELSE_NEW_TAB";
70 71
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 /** 118 /**
118 * Called when we have to fire an Intent to add a shortcut to the home scree n. 119 * Called when we have to fire an Intent to add a shortcut to the home scree n.
119 * If the webpage indicated that it was capable of functioning as a webapp, it is added as a 120 * If the webpage indicated that it was capable of functioning as a webapp, it is added as a
120 * shortcut to a webapp Activity rather than as a general bookmark. User is sent to the 121 * shortcut to a webapp Activity rather than as a general bookmark. User is sent to the
121 * home screen as soon as the shortcut is created. 122 * home screen as soon as the shortcut is created.
122 */ 123 */
123 @SuppressWarnings("unused") 124 @SuppressWarnings("unused")
124 @CalledByNative 125 @CalledByNative
125 private static void addShortcut(Context context, String id, String url, fina l String userTitle, 126 private static void addShortcut(Context context, String id, String url, fina l String userTitle,
126 String name, String shortName, Bitmap icon, boolean isWebappCapable, int orientation, 127 String name, String shortName, Bitmap icon, boolean isWebappCapable, int orientation,
127 int source, long themeColor, long backgroundColor, boolean isIconGen erated) { 128 int source, long themeColor, long backgroundColor, boolean isIconGen erated,
129 final long callbackPointer) {
128 Intent shortcutIntent; 130 Intent shortcutIntent;
129 if (isWebappCapable) { 131 if (isWebappCapable) {
130 // Encode the icon as a base64 string (Launcher drops Bitmaps in the Intent). 132 shortcutIntent = createWebappShortcutIntent(id, sDelegate.getFullscr eenAction(), url,
131 String encodedIcon = encodeBitmapAsString(icon); 133 name, shortName, icon, orientation, themeColor, backgroundCo lor,
132 134 isIconGenerated);
133 // Add the shortcut as a launcher icon for a full-screen Activity. 135 shortcutIntent.putExtra(EXTRA_MAC, getEncodedMac(context, url));
134 shortcutIntent = new Intent();
135 shortcutIntent.setAction(sDelegate.getFullscreenAction())
136 .putExtra(EXTRA_ICON, encodedIcon)
137 .putExtra(EXTRA_ID, id)
138 .putExtra(EXTRA_NAME, name)
139 .putExtra(EXTRA_SHORT_NAME, shortName)
140 .putExtra(EXTRA_URL, url)
141 .putExtra(EXTRA_ORIENTATION, orientation)
142 .putExtra(EXTRA_MAC, getEncodedMac(context, url))
143 .putExtra(EXTRA_THEME_COLOR, themeColor)
144 .putExtra(EXTRA_BACKGROUND_COLOR, backgroundColor)
145 .putExtra(EXTRA_IS_ICON_GENERATED, isIconGenerated);
146 } else { 136 } else {
147 // Add the shortcut as a launcher icon to open in the browser Activi ty. 137 // Add the shortcut as a launcher icon to open in the browser Activi ty.
148 shortcutIntent = createShortcutIntent(url); 138 shortcutIntent = createShortcutIntent(url);
149 } 139 }
150 140
151 // Always attach a source (one of add to home screen menu item, app bann er, or unknown) to 141 // Always attach a source (one of add to home screen menu item, app bann er, or unknown) to
152 // the intent. This allows us to distinguish where a shortcut was added from in metrics. 142 // the intent. This allows us to distinguish where a shortcut was added from in metrics.
153 shortcutIntent.putExtra(EXTRA_SOURCE, source); 143 shortcutIntent.putExtra(EXTRA_SOURCE, source);
154 shortcutIntent.setPackage(context.getPackageName()); 144 shortcutIntent.setPackage(context.getPackageName());
155 sDelegate.sendBroadcast( 145 sDelegate.sendBroadcast(
156 context, createAddToHomeIntent(url, userTitle, icon, shortcutInt ent)); 146 context, createAddToHomeIntent(url, userTitle, icon, shortcutInt ent));
157 147
148 if (isWebappCapable) {
149 // Store the webapp data so that we can access it.
150 WebappRegistry.registerWebapp(context, id).updateFromShortcutIntent( shortcutIntent,
151 new Runnable() {
152 @Override
153 public void run() {
154 nativeOnWebappDataStored(callbackPointer, true);
155 }
156 });
157 } else {
158 nativeOnWebappDataStored(callbackPointer, false);
159 }
160
158 // Alert the user about adding the shortcut. 161 // Alert the user about adding the shortcut.
159 Handler handler = new Handler(Looper.getMainLooper()); 162 Handler handler = new Handler(Looper.getMainLooper());
160 handler.post(new Runnable() { 163 handler.post(new Runnable() {
161 @Override 164 @Override
162 public void run() { 165 public void run() {
163 Context applicationContext = ApplicationStatus.getApplicationCon text(); 166 Context applicationContext = ApplicationStatus.getApplicationCon text();
164 String toastText = 167 String toastText =
165 applicationContext.getString(R.string.added_to_homescree n, userTitle); 168 applicationContext.getString(R.string.added_to_homescree n, userTitle);
166 Toast toast = Toast.makeText(applicationContext, toastText, Toas t.LENGTH_SHORT); 169 Toast toast = Toast.makeText(applicationContext, toastText, Toas t.LENGTH_SHORT);
167 toast.show(); 170 toast.show();
168 } 171 }
169 }); 172 });
170 } 173 }
171 174
172 /** 175 /**
173 * Creates a storage location and stores the data for a web app using {@link WebappDataStorage}. 176 * Creates a storage location and stores the data for a web app using {@link WebappDataStorage}.
174 * @param context Context to open the WebappDataStorage with. 177 * @param context Context to open the WebappDataStorage with.
175 * @param id ID of the webapp which is storing data. 178 * @param id ID of the webapp which is storing data.
176 * @param scope scope of the webapp which is storing data.
177 * @param splashImage Image which should be displayed on the splash screen o f 179 * @param splashImage Image which should be displayed on the splash screen o f
178 * the webapp. This can be null of there is no image to s how. 180 * the webapp. This can be null of there is no image to s how.
179 */ 181 */
180 @SuppressWarnings("unused") 182 @SuppressWarnings("unused")
181 @CalledByNative 183 @CalledByNative
182 private static void storeWebappData(Context context, String id, String scope , 184 private static void storeWebappSplashImage(final Context context, final Stri ng id,
183 Bitmap splashImage) { 185 final Bitmap splashImage) {
184 WebappRegistry.registerWebapp(context, id, scope); 186 WebappRegistry.getWebappDataStorage(context, id,
185 WebappDataStorage.open(context, id).updateSplashScreenImage(splashImage) ; 187 new WebappRegistry.FetchWebappDataStorageCallback() {
188 @Override
189 public void onWebappDataStorageRetrieved(WebappDataStorage s torage) {
190 if (storage == null) return;
191
192 storage.updateSplashScreenImage(splashImage);
193 }
194
195 }
196 );
186 } 197 }
187 198
188 /** 199 /**
189 * Creates an intent that will add a shortcut to the home screen. 200 * Creates an intent that will add a shortcut to the home screen.
190 * @param shortcutIntent Intent to fire when the shortcut is activated. 201 * @param shortcutIntent Intent to fire when the shortcut is activated.
191 * @param url URL of the shortcut. 202 * @param url URL of the shortcut.
192 * @param title Title of the shortcut. 203 * @param title Title of the shortcut.
193 * @param icon Image that represents the shortcut. 204 * @param icon Image that represents the shortcut.
194 * @return Intent for the shortcut. 205 * @return Intent for the shortcut.
195 */ 206 */
(...skipping 12 matching lines...) Expand all
208 * @param title Title of the shortcut. 219 * @param title Title of the shortcut.
209 * @param icon Image that represents the shortcut. 220 * @param icon Image that represents the shortcut.
210 * @return Intent for the shortcut. 221 * @return Intent for the shortcut.
211 */ 222 */
212 public static Intent createAddToHomeIntent(String url, String title, Bitmap icon) { 223 public static Intent createAddToHomeIntent(String url, String title, Bitmap icon) {
213 Intent shortcutIntent = createShortcutIntent(url); 224 Intent shortcutIntent = createShortcutIntent(url);
214 return createAddToHomeIntent(url, title, icon, shortcutIntent); 225 return createAddToHomeIntent(url, title, icon, shortcutIntent);
215 } 226 }
216 227
217 /** 228 /**
229 * Webapp-capable shortcut intent for icon on home screen.
230 * @param action Intent action to open a full screen activity.
231 * @param id Id of the webapp.
gone 2016/04/01 23:44:48 nit: Align these maybe? It's kind of blobby atm.
dominickn 2016/04/04 07:26:23 Done.
232 * @param url Url of the webapp.
233 * @param name Name of the webapp.
234 * @param shortName Short name of the webapp. @param icon Icon of the webapp .
235 * @param orientation Orientation of the webapp.
236 * @param themeColor Theme color of the webapp.
237 * @param backgroundColor Background color of the webapp.
238 * @param isIconGenerated True if the icon is generated by Chromium.
239 * @return Intent for onclick action of the shortcut.
240 */
241 public static Intent createWebappShortcutIntent(String id, String action, St ring url,
242 String name, String shortName, Bitmap icon, int orientation, long th emeColor,
243 long backgroundColor, boolean isIconGenerated) {
244 // Encode the icon as a base64 string (Launcher drops Bitmaps in the Int ent).
245 String encodedIcon = encodeBitmapAsString(icon);
246
247 // Create an intent as a launcher icon for a full-screen Activity.
248 // The scope is set to the URL until the manifest scope member is availa ble.
249 Intent shortcutIntent = new Intent();
250 shortcutIntent.setAction(action)
251 .putExtra(EXTRA_ID, id)
252 .putExtra(EXTRA_URL, url)
253 .putExtra(EXTRA_SCOPE, url)
254 .putExtra(EXTRA_NAME, name)
255 .putExtra(EXTRA_SHORT_NAME, shortName)
256 .putExtra(EXTRA_ICON, encodedIcon)
257 .putExtra(EXTRA_ORIENTATION, orientation)
258 .putExtra(EXTRA_THEME_COLOR, themeColor)
259 .putExtra(EXTRA_BACKGROUND_COLOR, backgroundColor)
260 .putExtra(EXTRA_IS_ICON_GENERATED, isIconGenerated);
261 return shortcutIntent;
262 }
263
264 /**
218 * Shortcut intent for icon on home screen. 265 * Shortcut intent for icon on home screen.
219 * @param url Url of the shortcut. 266 * @param url Url of the shortcut.
220 * @return Intent for onclick action of the shortcut. 267 * @return Intent for onclick action of the shortcut.
221 */ 268 */
222 public static Intent createShortcutIntent(String url) { 269 public static Intent createShortcutIntent(String url) {
223 Intent shortcutIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); 270 Intent shortcutIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
224 shortcutIntent.putExtra(REUSE_URL_MATCHING_TAB_ELSE_NEW_TAB, true); 271 shortcutIntent.putExtra(REUSE_URL_MATCHING_TAB_ELSE_NEW_TAB, true);
225 return shortcutIntent; 272 return shortcutIntent;
226 } 273 }
227 274
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
454 Drawable drawable = ApiCompatibilityUtils.getDrawableForDensity( 501 Drawable drawable = ApiCompatibilityUtils.getDrawableForDensity(
455 context.getResources(), id, density); 502 context.getResources(), id, density);
456 503
457 if (drawable instanceof BitmapDrawable) { 504 if (drawable instanceof BitmapDrawable) {
458 BitmapDrawable bd = (BitmapDrawable) drawable; 505 BitmapDrawable bd = (BitmapDrawable) drawable;
459 return bd.getBitmap(); 506 return bd.getBitmap();
460 } 507 }
461 assert false : "The drawable was not a bitmap drawable as expected"; 508 assert false : "The drawable was not a bitmap drawable as expected";
462 return null; 509 return null;
463 } 510 }
511
512 private static native void nativeOnWebappDataStored(long callbackPointer, bo olean wasStored);
464 } 513 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698