OLD | NEW |
---|---|
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 15 matching lines...) Expand all Loading... | |
26 import android.util.Base64; | 26 import android.util.Base64; |
27 import android.util.DisplayMetrics; | 27 import android.util.DisplayMetrics; |
28 import android.util.TypedValue; | 28 import android.util.TypedValue; |
29 | 29 |
30 import org.chromium.base.ApiCompatibilityUtils; | 30 import org.chromium.base.ApiCompatibilityUtils; |
31 import org.chromium.base.ApplicationStatus; | 31 import org.chromium.base.ApplicationStatus; |
32 import org.chromium.base.Log; | 32 import org.chromium.base.Log; |
33 import org.chromium.base.VisibleForTesting; | 33 import org.chromium.base.VisibleForTesting; |
34 import org.chromium.base.annotations.CalledByNative; | 34 import org.chromium.base.annotations.CalledByNative; |
35 import org.chromium.chrome.R; | 35 import org.chromium.chrome.R; |
36 import org.chromium.chrome.browser.webapps.WebappDataStorage; | |
36 import org.chromium.chrome.browser.webapps.WebappLauncherActivity; | 37 import org.chromium.chrome.browser.webapps.WebappLauncherActivity; |
37 import org.chromium.chrome.browser.widget.RoundedIconGenerator; | 38 import org.chromium.chrome.browser.widget.RoundedIconGenerator; |
38 import org.chromium.content_public.common.ScreenOrientationConstants; | 39 import org.chromium.content_public.common.ScreenOrientationConstants; |
39 import org.chromium.ui.widget.Toast; | 40 import org.chromium.ui.widget.Toast; |
40 | 41 |
41 import java.io.ByteArrayOutputStream; | 42 import java.io.ByteArrayOutputStream; |
42 import java.util.List; | 43 import java.util.List; |
43 import java.util.UUID; | |
44 | 44 |
45 /** | 45 /** |
46 * This is a helper class to create shortcuts on the Android home screen. | 46 * This is a helper class to create shortcuts on the Android home screen. |
47 */ | 47 */ |
48 public class ShortcutHelper { | 48 public class ShortcutHelper { |
49 public static final String EXTRA_ICON = "org.chromium.chrome.browser.webapp_ icon"; | 49 public static final String EXTRA_ICON = "org.chromium.chrome.browser.webapp_ icon"; |
50 public static final String EXTRA_ID = "org.chromium.chrome.browser.webapp_id "; | 50 public static final String EXTRA_ID = "org.chromium.chrome.browser.webapp_id "; |
51 public static final String EXTRA_MAC = "org.chromium.chrome.browser.webapp_m ac"; | 51 public static final String EXTRA_MAC = "org.chromium.chrome.browser.webapp_m ac"; |
52 // EXTRA_TITLE is present for backward compatibility reasons | 52 // EXTRA_TITLE is present for backward compatibility reasons |
53 public static final String EXTRA_TITLE = "org.chromium.chrome.browser.webapp _title"; | 53 public static final String EXTRA_TITLE = "org.chromium.chrome.browser.webapp _title"; |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
106 } | 106 } |
107 | 107 |
108 /** | 108 /** |
109 * Called when we have to fire an Intent to add a shortcut to the homescreen . | 109 * Called when we have to fire an Intent to add a shortcut to the homescreen . |
110 * If the webpage indicated that it was capable of functioning as a webapp, it is added as a | 110 * If the webpage indicated that it was capable of functioning as a webapp, it is added as a |
111 * shortcut to a webapp Activity rather than as a general bookmark. User is sent to the | 111 * shortcut to a webapp Activity rather than as a general bookmark. User is sent to the |
112 * homescreen as soon as the shortcut is created. | 112 * homescreen as soon as the shortcut is created. |
113 */ | 113 */ |
114 @SuppressWarnings("unused") | 114 @SuppressWarnings("unused") |
115 @CalledByNative | 115 @CalledByNative |
116 private static void addShortcut(Context context, String url, String userTitl e, String name, | 116 private static void addShortcut(Context context, String id, String url, Stri ng userTitle, |
117 String shortName, Bitmap icon, boolean isWebappCapable, int orientat ion, int source, | 117 String name, String shortName, Bitmap icon, boolean isWebappCapable, int orientation, |
118 long themeColor, long backgroundColor) { | 118 int source, long themeColor, long backgroundColor) { |
119 Intent shortcutIntent; | 119 Intent shortcutIntent; |
120 if (isWebappCapable) { | 120 if (isWebappCapable) { |
121 // Encode the icon as a base64 string (Launcher drops Bitmaps in the Intent). | 121 // Encode the icon as a base64 string (Launcher drops Bitmaps in the Intent). |
122 String encodedIcon = ""; | 122 String encodedIcon = ""; |
123 if (icon != null) { | 123 if (icon != null) { |
124 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutpu tStream(); | 124 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutpu tStream(); |
125 icon.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStr eam); | 125 icon.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStr eam); |
126 byte[] byteArray = byteArrayOutputStream.toByteArray(); | 126 byte[] byteArray = byteArrayOutputStream.toByteArray(); |
127 encodedIcon = Base64.encodeToString(byteArray, Base64.DEFAULT); | 127 encodedIcon = Base64.encodeToString(byteArray, Base64.DEFAULT); |
128 } | 128 } |
129 | 129 |
130 // Add the shortcut as a launcher icon for a full-screen Activity. | 130 // Add the shortcut as a launcher icon for a full-screen Activity. |
131 shortcutIntent = new Intent(); | 131 shortcutIntent = new Intent(); |
132 shortcutIntent.setAction(sDelegate.getFullscreenAction()); | 132 shortcutIntent.setAction(sDelegate.getFullscreenAction()); |
133 shortcutIntent.putExtra(EXTRA_ICON, encodedIcon); | 133 shortcutIntent.putExtra(EXTRA_ICON, encodedIcon); |
134 shortcutIntent.putExtra(EXTRA_ID, UUID.randomUUID().toString()); | 134 shortcutIntent.putExtra(EXTRA_ID, id); |
135 shortcutIntent.putExtra(EXTRA_NAME, name); | 135 shortcutIntent.putExtra(EXTRA_NAME, name); |
136 shortcutIntent.putExtra(EXTRA_SHORT_NAME, shortName); | 136 shortcutIntent.putExtra(EXTRA_SHORT_NAME, shortName); |
137 shortcutIntent.putExtra(EXTRA_URL, url); | 137 shortcutIntent.putExtra(EXTRA_URL, url); |
138 shortcutIntent.putExtra(EXTRA_ORIENTATION, orientation); | 138 shortcutIntent.putExtra(EXTRA_ORIENTATION, orientation); |
139 shortcutIntent.putExtra(EXTRA_MAC, getEncodedMac(context, url)); | 139 shortcutIntent.putExtra(EXTRA_MAC, getEncodedMac(context, url)); |
140 shortcutIntent.putExtra(EXTRA_THEME_COLOR, themeColor); | 140 shortcutIntent.putExtra(EXTRA_THEME_COLOR, themeColor); |
141 shortcutIntent.putExtra(EXTRA_BACKGROUND_COLOR, backgroundColor); | 141 shortcutIntent.putExtra(EXTRA_BACKGROUND_COLOR, backgroundColor); |
142 } else { | 142 } else { |
143 // Add the shortcut as a launcher icon to open in the browser Activi ty. | 143 // Add the shortcut as a launcher icon to open in the browser Activi ty. |
144 shortcutIntent = createShortcutIntent(url); | 144 shortcutIntent = createShortcutIntent(url); |
(...skipping 14 matching lines...) Expand all Loading... | |
159 public void run() { | 159 public void run() { |
160 Context applicationContext = ApplicationStatus.getApplicationCon text(); | 160 Context applicationContext = ApplicationStatus.getApplicationCon text(); |
161 String toastText = | 161 String toastText = |
162 applicationContext.getString(R.string.added_to_homescree n, shortUrl); | 162 applicationContext.getString(R.string.added_to_homescree n, shortUrl); |
163 Toast toast = Toast.makeText(applicationContext, toastText, Toas t.LENGTH_SHORT); | 163 Toast toast = Toast.makeText(applicationContext, toastText, Toas t.LENGTH_SHORT); |
164 toast.show(); | 164 toast.show(); |
165 } | 165 } |
166 }); | 166 }); |
167 } | 167 } |
168 | 168 |
169 /** | 169 /** |
gone
2015/08/26 02:01:19
TODO what?
Lalit Maganti
2015/08/26 13:11:55
Add javadoc which I have now done.
| |
170 * TODO(lalitm) | |
171 */ | |
172 @SuppressWarnings("unused") | |
173 @CalledByNative | |
174 private static void addSplashscreenIconToWebappData(Context context, | |
Lalit Maganti
2015/08/26 13:11:55
I've changed the name of this method to be more fu
| |
175 String id, Bitmap splashIcon) { | |
176 WebappDataStorage.open(context, id).putSplashIcon(splashIcon); | |
177 } | |
178 | |
179 /** | |
170 * Creates an intent that will add a shortcut to the home screen. | 180 * Creates an intent that will add a shortcut to the home screen. |
171 * @param shortcutIntent Intent to fire when the shortcut is activated. | 181 * @param shortcutIntent Intent to fire when the shortcut is activated. |
172 * @param url URL of the shortcut. | 182 * @param url URL of the shortcut. |
173 * @param title Title of the shortcut. | 183 * @param title Title of the shortcut. |
174 * @param icon Image that represents the shortcut. | 184 * @param icon Image that represents the shortcut. |
175 * @return Intent for the shortcut. | 185 * @return Intent for the shortcut. |
176 */ | 186 */ |
177 public static Intent createAddToHomeIntent(String url, String title, | 187 public static Intent createAddToHomeIntent(String url, String title, |
178 Bitmap icon, Intent shortcutIntent) { | 188 Bitmap icon, Intent shortcutIntent) { |
179 Intent i = new Intent(INSTALL_SHORTCUT); | 189 Intent i = new Intent(INSTALL_SHORTCUT); |
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
327 * @return String that can be used to verify that a WebappActivity is being started by Chrome. | 337 * @return String that can be used to verify that a WebappActivity is being started by Chrome. |
328 */ | 338 */ |
329 public static String getEncodedMac(Context context, String url) { | 339 public static String getEncodedMac(Context context, String url) { |
330 // The only reason we convert to a String here is because Android inexpl icably eats a | 340 // The only reason we convert to a String here is because Android inexpl icably eats a |
331 // byte[] when adding the shortcut -- the Bundle received by the launche d Activity even | 341 // byte[] when adding the shortcut -- the Bundle received by the launche d Activity even |
332 // lacks the key for the extra. | 342 // lacks the key for the extra. |
333 byte[] mac = WebappAuthenticator.getMacForUrl(context, url); | 343 byte[] mac = WebappAuthenticator.getMacForUrl(context, url); |
334 return Base64.encodeToString(mac, Base64.DEFAULT); | 344 return Base64.encodeToString(mac, Base64.DEFAULT); |
335 } | 345 } |
336 } | 346 } |
OLD | NEW |