OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 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 | 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.webapk.shell_apk; | 5 package org.chromium.webapk.shell_apk; |
6 | 6 |
7 import android.app.Activity; | 7 import android.app.Activity; |
8 import android.content.ComponentName; | 8 import android.content.ComponentName; |
9 import android.content.Intent; | 9 import android.content.Intent; |
10 import android.content.pm.ApplicationInfo; | 10 import android.content.pm.ApplicationInfo; |
11 import android.content.pm.PackageManager; | 11 import android.content.pm.PackageManager; |
12 import android.content.pm.PackageManager.NameNotFoundException; | 12 import android.content.pm.PackageManager.NameNotFoundException; |
13 import android.graphics.Bitmap; | 13 import android.graphics.Bitmap; |
14 import android.graphics.BitmapFactory; | 14 import android.graphics.BitmapFactory; |
15 import android.os.Bundle; | 15 import android.os.Bundle; |
16 import android.util.Base64; | 16 import android.util.Base64; |
17 import android.util.Log; | 17 import android.util.Log; |
18 | 18 |
19 import org.chromium.webapk.lib.common.WebApkConstants; | 19 import org.chromium.webapk.lib.common.WebApkConstants; |
20 | 20 |
21 import java.io.ByteArrayOutputStream; | 21 import java.io.ByteArrayOutputStream; |
22 | 22 |
23 /** | 23 /** |
24 * WebAPK's main Activity. | 24 * WebAPK's main Activity. |
25 */ | 25 */ |
26 public class MainActivity extends Activity { | 26 public class MainActivity extends Activity { |
| 27 // These EXTRA_* values must stay in sync with |
| 28 // {@link org.chromium.chrome.browser.ShortcutHelper}. |
27 private static final String EXTRA_ID = "org.chromium.chrome.browser.webapp_i
d"; | 29 private static final String EXTRA_ID = "org.chromium.chrome.browser.webapp_i
d"; |
28 private static final String EXTRA_ICON = "org.chromium.chrome.browser.webapp
_icon"; | 30 private static final String EXTRA_ICON = "org.chromium.chrome.browser.webapp
_icon"; |
29 private static final String EXTRA_NAME = "org.chromium.chrome.browser.webapp
_name"; | 31 private static final String EXTRA_NAME = "org.chromium.chrome.browser.webapp
_name"; |
30 private static final String EXTRA_URL = "org.chromium.chrome.browser.webapp_
url"; | 32 private static final String EXTRA_URL = "org.chromium.chrome.browser.webapp_
url"; |
31 private static final String EXTRA_MAC = "org.chromium.chrome.browser.webapp_
mac"; | 33 private static final String EXTRA_MAC = "org.chromium.chrome.browser.webapp_
mac"; |
32 private static final String EXTRA_SCOPE = "org.chromium.chrome.browser.webap
p_scope"; | 34 private static final String EXTRA_WEBAPK_PACKAGE_NAME = |
| 35 "org.chromium.chrome.browser.webapk_package_name"; |
| 36 |
33 private static final String META_DATA_HOST_URL = "hostUrl"; | 37 private static final String META_DATA_HOST_URL = "hostUrl"; |
34 private static final String META_DATA_MAC = "mac"; | 38 private static final String META_DATA_MAC = "mac"; |
35 private static final String META_DATA_SCOPE = "scope"; | |
36 private static final String META_DATA_RUNTIME_HOST = "runtimeHost"; | 39 private static final String META_DATA_RUNTIME_HOST = "runtimeHost"; |
37 | 40 |
38 private static final String TAG = "cr_MainActivity"; | 41 private static final String TAG = "cr_MainActivity"; |
39 | 42 |
40 @Override | 43 @Override |
41 protected void onCreate(Bundle savedInstanceState) { | 44 protected void onCreate(Bundle savedInstanceState) { |
42 super.onCreate(savedInstanceState); | 45 super.onCreate(savedInstanceState); |
43 | 46 |
44 String packageName = getPackageName(); | 47 String packageName = getPackageName(); |
45 String webappId = null; | 48 String webappId = null; |
46 String mac = null; | 49 String mac = null; |
47 String name = null; | 50 String name = null; |
48 String url = null; | 51 String url = null; |
49 String scope = null; | |
50 String encodedIcon = null; | 52 String encodedIcon = null; |
51 String runtimeHost = null; | 53 String runtimeHost = null; |
52 try { | 54 try { |
53 ApplicationInfo appInfo = getPackageManager().getApplicationInfo( | 55 ApplicationInfo appInfo = getPackageManager().getApplicationInfo( |
54 packageName, PackageManager.GET_META_DATA); | 56 packageName, PackageManager.GET_META_DATA); |
55 Bundle bundle = appInfo.metaData; | 57 Bundle bundle = appInfo.metaData; |
56 url = bundle.getString(META_DATA_HOST_URL); | 58 url = bundle.getString(META_DATA_HOST_URL); |
57 | 59 |
58 String overrideUrl = getIntent().getDataString(); | 60 String overrideUrl = getIntent().getDataString(); |
59 // TODO(pkotwicz): Use same logic as {@code IntentHandler#shouldIgno
reIntent()} | 61 // TODO(pkotwicz): Use same logic as {@code IntentHandler#shouldIgno
reIntent()} |
60 if (overrideUrl != null && overrideUrl.startsWith("https:")) { | 62 if (overrideUrl != null && overrideUrl.startsWith("https:")) { |
61 url = overrideUrl; | 63 url = overrideUrl; |
62 } | 64 } |
63 | 65 |
64 scope = bundle.getString(META_DATA_SCOPE); | |
65 webappId = WebApkConstants.WEBAPK_ID_PREFIX + packageName; | 66 webappId = WebApkConstants.WEBAPK_ID_PREFIX + packageName; |
66 mac = bundle.getString(META_DATA_MAC); | 67 mac = bundle.getString(META_DATA_MAC); |
67 runtimeHost = bundle.getString(META_DATA_RUNTIME_HOST); | 68 runtimeHost = bundle.getString(META_DATA_RUNTIME_HOST); |
68 name = (String) getPackageManager().getApplicationLabel(appInfo); | 69 name = (String) getPackageManager().getApplicationLabel(appInfo); |
69 // TODO(hanxi): find a neat solution to avoid encode/decode each tim
e launch the | 70 // TODO(hanxi): find a neat solution to avoid encode/decode each tim
e launch the |
70 // activity. | 71 // activity. |
71 Bitmap icon = BitmapFactory.decodeResource(getResources(), R.drawabl
e.app_icon); | 72 Bitmap icon = BitmapFactory.decodeResource(getResources(), R.drawabl
e.app_icon); |
72 encodedIcon = encodeBitmapAsString(icon); | 73 encodedIcon = encodeBitmapAsString(icon); |
73 Log.w(TAG, "Url of the WebAPK: " + url); | 74 Log.w(TAG, "Url of the WebAPK: " + url); |
74 Log.w(TAG, "webappId of the WebAPK: " + webappId); | 75 Log.w(TAG, "WebappId of the WebAPK: " + webappId); |
75 Log.w(TAG, "name of the WebAPK:" + name); | 76 Log.w(TAG, "Name of the WebAPK:" + name); |
| 77 Log.w(TAG, "Package name of the WebAPK:" + packageName); |
| 78 |
| 79 Intent newIntent = new Intent(); |
| 80 newIntent.setComponent(new ComponentName(runtimeHost, |
| 81 "org.chromium.chrome.browser.webapps.WebappLauncherActivity"
)); |
| 82 newIntent.putExtra(EXTRA_ID, webappId) |
| 83 .putExtra(EXTRA_NAME, name) |
| 84 .putExtra(EXTRA_URL, url) |
| 85 .putExtra(EXTRA_MAC, mac) |
| 86 .putExtra(EXTRA_ICON, encodedIcon) |
| 87 .putExtra(EXTRA_WEBAPK_PACKAGE_NAME, packageName); |
| 88 startActivity(newIntent); |
| 89 finish(); |
76 } catch (NameNotFoundException e) { | 90 } catch (NameNotFoundException e) { |
77 e.printStackTrace(); | 91 e.printStackTrace(); |
78 } | 92 } |
79 | |
80 Intent newIntent = new Intent(); | |
81 newIntent.setComponent(new ComponentName(runtimeHost, | |
82 "org.chromium.chrome.browser.webapps.WebappLauncherActivity")); | |
83 newIntent.putExtra(EXTRA_ID, webappId); | |
84 newIntent.putExtra(EXTRA_NAME, name); | |
85 newIntent.putExtra(EXTRA_SCOPE, scope); | |
86 newIntent.putExtra(EXTRA_URL, url); | |
87 newIntent.putExtra(EXTRA_MAC, mac); | |
88 newIntent.putExtra(EXTRA_ICON, encodedIcon); | |
89 startActivity(newIntent); | |
90 finish(); | |
91 } | 93 } |
92 | 94 |
93 /** | 95 /** |
94 * Compresses a bitmap into a PNG and converts into a Base64 encoded string. | 96 * Compresses a bitmap into a PNG and converts into a Base64 encoded string. |
95 * The encoded string can be decoded using {@link decodeBitmapFromString(Str
ing)}. | 97 * The encoded string can be decoded using {@link decodeBitmapFromString(Str
ing)}. |
96 * @param bitmap The Bitmap to compress and encode. | 98 * @param bitmap The Bitmap to compress and encode. |
97 * @return the String encoding the Bitmap. | 99 * @return the String encoding the Bitmap. |
98 */ | 100 */ |
99 private static String encodeBitmapAsString(Bitmap bitmap) { | 101 private static String encodeBitmapAsString(Bitmap bitmap) { |
100 if (bitmap == null) return ""; | 102 if (bitmap == null) return ""; |
101 ByteArrayOutputStream output = new ByteArrayOutputStream(); | 103 ByteArrayOutputStream output = new ByteArrayOutputStream(); |
102 bitmap.compress(Bitmap.CompressFormat.PNG, 100, output); | 104 bitmap.compress(Bitmap.CompressFormat.PNG, 100, output); |
103 return Base64.encodeToString(output.toByteArray(), Base64.DEFAULT); | 105 return Base64.encodeToString(output.toByteArray(), Base64.DEFAULT); |
104 } | 106 } |
105 } | 107 } |
OLD | NEW |