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.content.Context; | 7 import android.content.Context; |
8 import android.content.Intent; | 8 import android.content.Intent; |
9 import android.graphics.Bitmap; | 9 import android.graphics.Bitmap; |
10 import android.os.Handler; | 10 import android.os.Handler; |
11 import android.os.Looper; | 11 import android.os.Looper; |
12 import android.util.Base64; | 12 import android.util.Base64; |
13 import android.widget.Toast; | 13 import android.widget.Toast; |
14 | 14 |
15 import org.chromium.base.ApplicationStatus; | 15 import org.chromium.base.ApplicationStatus; |
16 import org.chromium.base.VisibleForTesting; | 16 import org.chromium.base.VisibleForTesting; |
17 import org.chromium.base.annotations.CalledByNative; | 17 import org.chromium.base.annotations.CalledByNative; |
18 import org.chromium.chrome.R; | 18 import org.chromium.chrome.R; |
19 import org.chromium.chrome.browser.tab.Tab; | 19 import org.chromium.chrome.browser.tab.Tab; |
| 20 import org.chromium.chrome.browser.webapps.WebappDataStorage; |
20 import org.chromium.chrome.browser.webapps.WebappLauncherActivity; | 21 import org.chromium.chrome.browser.webapps.WebappLauncherActivity; |
21 import org.chromium.content_public.browser.WebContents; | 22 import org.chromium.content_public.browser.WebContents; |
22 import org.chromium.content_public.common.ScreenOrientationConstants; | 23 import org.chromium.content_public.common.ScreenOrientationConstants; |
23 | 24 |
24 import java.io.ByteArrayOutputStream; | 25 import java.io.ByteArrayOutputStream; |
25 import java.util.UUID; | 26 import java.util.UUID; |
26 | 27 |
27 /** | 28 /** |
28 * This is a helper class to create shortcuts on the Android home screen. | 29 * This is a helper class to create shortcuts on the Android home screen. |
29 */ | 30 */ |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
166 if (isWebappCapable) { | 167 if (isWebappCapable) { |
167 // Encode the icon as a base64 string (Launcher drops Bitmaps in the
Intent). | 168 // Encode the icon as a base64 string (Launcher drops Bitmaps in the
Intent). |
168 String encodedIcon = ""; | 169 String encodedIcon = ""; |
169 if (icon != null) { | 170 if (icon != null) { |
170 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutpu
tStream(); | 171 ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutpu
tStream(); |
171 icon.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStr
eam); | 172 icon.compress(Bitmap.CompressFormat.PNG, 100, byteArrayOutputStr
eam); |
172 byte[] byteArray = byteArrayOutputStream.toByteArray(); | 173 byte[] byteArray = byteArrayOutputStream.toByteArray(); |
173 encodedIcon = Base64.encodeToString(byteArray, Base64.DEFAULT); | 174 encodedIcon = Base64.encodeToString(byteArray, Base64.DEFAULT); |
174 } | 175 } |
175 | 176 |
| 177 String uuid = UUID.randomUUID().toString(); |
| 178 |
176 // Add the shortcut as a launcher icon for a full-screen Activity. | 179 // Add the shortcut as a launcher icon for a full-screen Activity. |
177 shortcutIntent = new Intent(); | 180 shortcutIntent = new Intent(); |
178 shortcutIntent.setAction(sDelegate.getFullscreenAction()); | 181 shortcutIntent.setAction(sDelegate.getFullscreenAction()); |
179 shortcutIntent.putExtra(EXTRA_ICON, encodedIcon); | 182 shortcutIntent.putExtra(EXTRA_ICON, encodedIcon); |
180 shortcutIntent.putExtra(EXTRA_ID, UUID.randomUUID().toString()); | 183 shortcutIntent.putExtra(EXTRA_ID, uuid); |
181 shortcutIntent.putExtra(EXTRA_NAME, name); | 184 shortcutIntent.putExtra(EXTRA_NAME, name); |
182 shortcutIntent.putExtra(EXTRA_SHORT_NAME, shortName); | 185 shortcutIntent.putExtra(EXTRA_SHORT_NAME, shortName); |
183 shortcutIntent.putExtra(EXTRA_URL, url); | 186 shortcutIntent.putExtra(EXTRA_URL, url); |
184 shortcutIntent.putExtra(EXTRA_ORIENTATION, orientation); | 187 shortcutIntent.putExtra(EXTRA_ORIENTATION, orientation); |
185 shortcutIntent.putExtra(EXTRA_MAC, getEncodedMac(context, url)); | 188 shortcutIntent.putExtra(EXTRA_MAC, getEncodedMac(context, url)); |
186 shortcutIntent.putExtra(EXTRA_THEME_COLOR, themeColor); | 189 shortcutIntent.putExtra(EXTRA_THEME_COLOR, themeColor); |
| 190 |
| 191 WebappDataStorage.open(context, uuid).putSplashIcon(icon); |
187 } else { | 192 } else { |
188 // Add the shortcut as a launcher icon to open in the browser Activi
ty. | 193 // Add the shortcut as a launcher icon to open in the browser Activi
ty. |
189 shortcutIntent = BookmarkUtils.createShortcutIntent(url); | 194 shortcutIntent = BookmarkUtils.createShortcutIntent(url); |
190 } | 195 } |
191 | 196 |
192 // Always attach a source (one of add to homescreen menu item, app banne
r, or unknown) to | 197 // Always attach a source (one of add to homescreen menu item, app banne
r, or unknown) to |
193 // the intent. This allows us to distinguish where a shortcut was added
from in metrics. | 198 // the intent. This allows us to distinguish where a shortcut was added
from in metrics. |
194 shortcutIntent.putExtra(EXTRA_SOURCE, source); | 199 shortcutIntent.putExtra(EXTRA_SOURCE, source); |
195 shortcutIntent.setPackage(context.getPackageName()); | 200 shortcutIntent.setPackage(context.getPackageName()); |
196 sDelegate.sendBroadcast( | 201 sDelegate.sendBroadcast( |
(...skipping 22 matching lines...) Expand all Loading... |
219 // byte[] when adding the shortcut -- the Bundle received by the launche
d Activity even | 224 // byte[] when adding the shortcut -- the Bundle received by the launche
d Activity even |
220 // lacks the key for the extra. | 225 // lacks the key for the extra. |
221 byte[] mac = WebappAuthenticator.getMacForUrl(context, url); | 226 byte[] mac = WebappAuthenticator.getMacForUrl(context, url); |
222 return Base64.encodeToString(mac, Base64.DEFAULT); | 227 return Base64.encodeToString(mac, Base64.DEFAULT); |
223 } | 228 } |
224 | 229 |
225 private native long nativeInitialize(WebContents webContents); | 230 private native long nativeInitialize(WebContents webContents); |
226 private native void nativeAddShortcut(long nativeShortcutHelper, String user
RequestedTitle); | 231 private native void nativeAddShortcut(long nativeShortcutHelper, String user
RequestedTitle); |
227 private native void nativeDestroy(long nativeShortcutHelper); | 232 private native void nativeDestroy(long nativeShortcutHelper); |
228 } | 233 } |
OLD | NEW |