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

Side by Side Diff: chrome/android/webapk/libs/runtime_library/src/org/chromium/webapk/lib/runtime_library/HostBrowserLauncher.java

Issue 2101433002: WebAPK: Move MainActivity#onCreate() to runtime library (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Merge branch 'webapk_more_meta2' into webapk_more_meta2_loader Created 4 years, 5 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 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.lib.runtime_library;
6 6
7 import android.app.Activity; 7 import android.content.ActivityNotFoundException;
8 import android.content.ComponentName; 8 import android.content.ComponentName;
9 import android.content.Context;
9 import android.content.Intent; 10 import android.content.Intent;
10 import android.content.pm.ApplicationInfo; 11 import android.content.pm.ApplicationInfo;
11 import android.content.pm.PackageManager; 12 import android.content.pm.PackageManager;
12 import android.content.pm.PackageManager.NameNotFoundException; 13 import android.content.pm.PackageManager.NameNotFoundException;
13 import android.graphics.Bitmap; 14 import android.graphics.Bitmap;
14 import android.graphics.BitmapFactory; 15 import android.graphics.BitmapFactory;
15 import android.os.Bundle; 16 import android.os.Bundle;
16 import android.text.TextUtils; 17 import android.text.TextUtils;
17 import android.util.Base64; 18 import android.util.Base64;
18 import android.util.Log; 19 import android.util.Log;
19 20
20 import org.chromium.webapk.lib.common.WebApkConstants; 21 import org.chromium.webapk.lib.common.WebApkConstants;
21 22
22 import java.io.ByteArrayOutputStream; 23 import java.io.ByteArrayOutputStream;
23 24
24 /** 25 /**
25 * WebAPK's main Activity. 26 * Launches Chrome in WebAPK mode.
26 */ 27 */
27 public class MainActivity extends Activity { 28 public class HostBrowserLauncher {
28 // These EXTRA_* values must stay in sync with 29 // These EXTRA_* values must stay in sync with
29 // {@link org.chromium.chrome.browser.ShortcutHelper}. 30 // {@link org.chromium.chrome.browser.ShortcutHelper}.
30 private static final String EXTRA_ID = "org.chromium.chrome.browser.webapp_i d"; 31 private static final String EXTRA_ID = "org.chromium.chrome.browser.webapp_i d";
31 private static final String EXTRA_ICON = "org.chromium.chrome.browser.webapp _icon"; 32 private static final String EXTRA_ICON = "org.chromium.chrome.browser.webapp _icon";
32 private static final String EXTRA_SHORT_NAME = "org.chromium.chrome.browser. webapp_short_name"; 33 private static final String EXTRA_SHORT_NAME = "org.chromium.chrome.browser. webapp_short_name";
33 private static final String EXTRA_NAME = "org.chromium.chrome.browser.webapp _name"; 34 private static final String EXTRA_NAME = "org.chromium.chrome.browser.webapp _name";
34 private static final String EXTRA_URL = "org.chromium.chrome.browser.webapp_ url"; 35 private static final String EXTRA_URL = "org.chromium.chrome.browser.webapp_ url";
35 private static final String EXTRA_SOURCE = "org.chromium.chrome.browser.weba pp_source"; 36 private static final String EXTRA_SOURCE = "org.chromium.chrome.browser.weba pp_source";
36 private static final String EXTRA_THEME_COLOR = "org.chromium.chrome.browser .theme_color"; 37 private static final String EXTRA_THEME_COLOR = "org.chromium.chrome.browser .theme_color";
37 private static final String EXTRA_BACKGROUND_COLOR = 38 private static final String EXTRA_BACKGROUND_COLOR =
38 "org.chromium.chrome.browser.background_color"; 39 "org.chromium.chrome.browser.background_color";
39 private static final String EXTRA_IS_ICON_GENERATED = 40 private static final String EXTRA_IS_ICON_GENERATED =
40 "org.chromium.chrome.browser.is_icon_generated"; 41 "org.chromium.chrome.browser.is_icon_generated";
41 private static final String EXTRA_WEBAPK_PACKAGE_NAME = 42 private static final String EXTRA_WEBAPK_PACKAGE_NAME =
42 "org.chromium.chrome.browser.webapk_package_name"; 43 "org.chromium.chrome.browser.webapk_package_name";
43 44
44 private static final String META_DATA_RUNTIME_HOST = "runtimeHost"; 45 private static final String META_DATA_RUNTIME_HOST = "runtimeHost";
45 private static final String META_DATA_START_URL = "startUrl"; 46 private static final String META_DATA_START_URL = "startUrl";
46 private static final String META_DATA_NAME = "name"; 47 private static final String META_DATA_NAME = "name";
47 private static final String META_DATA_DISPLAY_MODE = "displayMode"; 48 private static final String META_DATA_DISPLAY_MODE = "displayMode";
48 private static final String META_DATA_ORIENTATION = "orientation"; 49 private static final String META_DATA_ORIENTATION = "orientation";
49 private static final String META_DATA_THEME_COLOR = "themeColor"; 50 private static final String META_DATA_THEME_COLOR = "themeColor";
50 private static final String META_DATA_BACKGROUND_COLOR = "backgroundColor"; 51 private static final String META_DATA_BACKGROUND_COLOR = "backgroundColor";
51 private static final String META_DATA_ICON_URL = "iconUrl"; 52 private static final String META_DATA_ICON_URL = "iconUrl";
52 53
53 private static final String TAG = "cr_MainActivity"; 54 /**
55 * Key for passing app icon id in Bundle to {@link #launch()}.
56 */
57 private static final String KEY_APP_ICON_ID = "app_icon_id";
Xi Han 2016/06/27 18:27:08 How about to put it in the WebApkConstants? So we
pkotwicz 2016/06/27 20:44:28 I want to keep libs/common as small as possible. l
Xi Han 2016/06/28 13:53:39 It makes sense.
54 58
55 @Override 59 private static final String TAG = "cr_HostBrowserLauncher";
56 protected void onCreate(Bundle savedInstanceState) {
57 super.onCreate(savedInstanceState);
58 60
59 String packageName = getPackageName(); 61 /**
62 * Launches Chrome in WebAPK mode.
63 * @param context Application context.
64 * @param intent Intent used to launch WebAPK.
65 * @param bundle Contains extra parameters.
66 */
67 public void launch(Context context, Intent intent, Bundle bundle) {
68 int appIconId = bundle.getInt(KEY_APP_ICON_ID);
69
70 String packageName = context.getPackageName();
71 ApplicationInfo appInfo;
60 try { 72 try {
61 ApplicationInfo appInfo = getPackageManager().getApplicationInfo( 73 appInfo = context.getPackageManager().getApplicationInfo(
62 packageName, PackageManager.GET_META_DATA); 74 packageName, PackageManager.GET_META_DATA);
63 Bundle bundle = appInfo.metaData; 75 } catch (NameNotFoundException e) {
64 String url = bundle.getString(META_DATA_START_URL); 76 return;
77 }
65 78
66 Intent intent = getIntent(); 79 Bundle metaBundle = appInfo.metaData;
67 String overrideUrl = intent.getDataString(); 80 String url = metaBundle.getString(META_DATA_START_URL);
68 // TODO(pkotwicz): Use same logic as {@code IntentHandler#shouldIgno reIntent()}
69 if (overrideUrl != null && overrideUrl.startsWith("https:")) {
70 url = overrideUrl;
71 }
72 int source = intent.getIntExtra(EXTRA_SOURCE, 0);
73 81
74 String webappId = WebApkConstants.WEBAPK_ID_PREFIX + packageName; 82 String overrideUrl = intent.getDataString();
75 String runtimeHost = bundle.getString(META_DATA_RUNTIME_HOST); 83 // TODO(pkotwicz): Use same logic as {@code IntentHandler#shouldIgnoreIn tent()}
76 String shortName = (String) getPackageManager().getApplicationLabel( appInfo); 84 if (overrideUrl != null && overrideUrl.startsWith("https:")) {
77 // TODO(hanxi): find a neat solution to avoid encode/decode each tim e launch the 85 url = overrideUrl;
78 // activity. 86 }
79 Bitmap icon = BitmapFactory.decodeResource(getResources(), R.drawabl e.app_icon); 87 int source = intent.getIntExtra(EXTRA_SOURCE, 0);
80 String encodedIcon = encodeBitmapAsString(icon);
81 String name = bundle.getString(META_DATA_NAME);
82 String displayMode = bundle.getString(META_DATA_DISPLAY_MODE);
83 String orientation = bundle.getString(META_DATA_ORIENTATION);
84 long themeColor = getLongFromBundle(bundle, META_DATA_THEME_COLOR);
85 long backgroundColor = getLongFromBundle(bundle, META_DATA_BACKGROUN D_COLOR);
86 boolean isIconGenerated = TextUtils.isEmpty(bundle.getString(META_DA TA_ICON_URL));
87 Log.w(TAG, "Url of the WebAPK: " + url);
88 Log.w(TAG, "WebappId of the WebAPK: " + webappId);
89 Log.w(TAG, "Name of the WebAPK:" + name);
90 Log.w(TAG, "Package name of the WebAPK:" + packageName);
91 88
92 Intent newIntent = new Intent(); 89 String webappId = WebApkConstants.WEBAPK_ID_PREFIX + packageName;
93 newIntent.setComponent(new ComponentName(runtimeHost, 90 String runtimeHost = metaBundle.getString(META_DATA_RUNTIME_HOST);
94 "org.chromium.chrome.browser.webapps.WebappLauncherActivity" )); 91 String shortName = (String) context.getPackageManager().getApplicationLa bel(appInfo);
95 newIntent.putExtra(EXTRA_ID, webappId) 92 // TODO(hanxi): find a neat solution to avoid encode/decode each time la unch the
96 .putExtra(EXTRA_SHORT_NAME, shortName) 93 // activity.
97 .putExtra(EXTRA_NAME, name) 94 Bitmap icon = BitmapFactory.decodeResource(context.getResources(), appIc onId);
98 .putExtra(EXTRA_URL, url) 95 String encodedIcon = encodeBitmapAsString(icon);
99 .putExtra(EXTRA_ICON, encodedIcon) 96 String name = metaBundle.getString(META_DATA_NAME);
100 .putExtra(EXTRA_SOURCE, source) 97 String displayMode = metaBundle.getString(META_DATA_DISPLAY_MODE);
101 .putExtra(EXTRA_THEME_COLOR, themeColor) 98 String orientation = metaBundle.getString(META_DATA_ORIENTATION);
102 .putExtra(EXTRA_BACKGROUND_COLOR, backgroundColor) 99 long themeColor = getLongFromBundle(metaBundle, META_DATA_THEME_COLOR);
103 .putExtra(EXTRA_IS_ICON_GENERATED, isIconGenerated) 100 long backgroundColor = getLongFromBundle(metaBundle, META_DATA_BACKGROUN D_COLOR);
104 .putExtra(EXTRA_WEBAPK_PACKAGE_NAME, packageName) 101 boolean isIconGenerated = TextUtils.isEmpty(metaBundle.getString(META_DA TA_ICON_URL));
105 .putExtra(WebApkConstants.EXTRA_DISPLAY_MODE, displayMode) 102 Log.w(TAG, "Url of the WebAPK: " + url);
106 .putExtra(WebApkConstants.EXTRA_ORIENTATION, orientation); 103 Log.w(TAG, "WebappId of the WebAPK: " + webappId);
107 startActivity(newIntent); 104 Log.w(TAG, "Name of the WebAPK:" + name);
108 finish(); 105 Log.w(TAG, "Package name of the WebAPK:" + packageName);
109 } catch (NameNotFoundException e) { 106
107 Intent newIntent = new Intent();
108 newIntent.setComponent(new ComponentName(
109 runtimeHost, "org.chromium.chrome.browser.webapps.WebappLauncher Activity"));
110 newIntent.putExtra(EXTRA_ID, webappId)
111 .putExtra(EXTRA_SHORT_NAME, shortName)
112 .putExtra(EXTRA_NAME, name)
113 .putExtra(EXTRA_URL, url)
114 .putExtra(EXTRA_ICON, encodedIcon)
115 .putExtra(EXTRA_SOURCE, source)
116 .putExtra(EXTRA_THEME_COLOR, themeColor)
117 .putExtra(EXTRA_BACKGROUND_COLOR, backgroundColor)
118 .putExtra(EXTRA_IS_ICON_GENERATED, isIconGenerated)
119 .putExtra(EXTRA_WEBAPK_PACKAGE_NAME, packageName)
120 .putExtra(WebApkConstants.EXTRA_DISPLAY_MODE, displayMode)
121 .putExtra(WebApkConstants.EXTRA_ORIENTATION, orientation);
122
123 try {
124 context.startActivity(newIntent);
125 } catch (ActivityNotFoundException e) {
110 e.printStackTrace(); 126 e.printStackTrace();
111 } 127 }
112 } 128 }
113 129
114 /** 130 /**
115 * Compresses a bitmap into a PNG and converts into a Base64 encoded string. 131 * Compresses a bitmap into a PNG and converts into a Base64 encoded string.
116 * The encoded string can be decoded using {@link decodeBitmapFromString(Str ing)}. 132 * The encoded string can be decoded using {@link decodeBitmapFromString(Str ing)}.
117 * @param bitmap The Bitmap to compress and encode. 133 * @param bitmap The Bitmap to compress and encode.
118 * @return the String encoding the Bitmap. 134 * @return the String encoding the Bitmap.
119 */ 135 */
(...skipping 13 matching lines...) Expand all
133 if (value == null || !value.endsWith("L")) { 149 if (value == null || !value.endsWith("L")) {
134 return 0; 150 return 0;
135 } 151 }
136 try { 152 try {
137 return Long.parseLong(value.substring(0, value.length() - 1)); 153 return Long.parseLong(value.substring(0, value.length() - 1));
138 } catch (NumberFormatException e) { 154 } catch (NumberFormatException e) {
139 } 155 }
140 return 0; 156 return 0;
141 } 157 }
142 } 158 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698