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

Side by Side Diff: chrome/android/webapk/shell_apk/src/org/chromium/webapk/shell_apk/MainActivity.java

Issue 2858563004: Add support for webapk without runtimeHost (Closed)
Patch Set: Fix test failure. Created 3 years, 7 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.shell_apk;
6 6
7 import android.app.Activity; 7 import android.app.Activity;
8 import android.content.ActivityNotFoundException; 8 import android.content.ActivityNotFoundException;
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.net.Uri; 13 import android.net.Uri;
14 import android.os.Bundle; 14 import android.os.Bundle;
15 import android.util.Log; 15 import android.util.Log;
16 16
17 import org.chromium.webapk.lib.common.WebApkConstants; 17 import org.chromium.webapk.lib.common.WebApkConstants;
18 import org.chromium.webapk.lib.common.WebApkMetaDataKeys; 18 import org.chromium.webapk.lib.common.WebApkMetaDataKeys;
19 19
20 import java.net.URISyntaxException;
21
22 /** 20 /**
23 * WebAPK's main Activity. 21 * WebAPK's main Activity.
24 */ 22 */
25 public class MainActivity extends Activity { 23 public class MainActivity extends Activity {
26 private static final String TAG = "cr_MainActivity"; 24 private static final String TAG = "cr_MainActivity";
27 25
28 /** 26 /**
29 * Name of class which launches browser in WebAPK mode. 27 * Name of class which launches browser in WebAPK mode.
30 */ 28 */
31 private static final String HOST_BROWSER_LAUNCHER_CLASS_NAME = 29 private static final String HOST_BROWSER_LAUNCHER_CLASS_NAME =
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 private void launch() { 67 private void launch() {
70 String overrideUrl = getOverrideUrl(); 68 String overrideUrl = getOverrideUrl();
71 String startUrl = (overrideUrl != null) ? overrideUrl : getStartUrl(); 69 String startUrl = (overrideUrl != null) ? overrideUrl : getStartUrl();
72 if (startUrl == null) { 70 if (startUrl == null) {
73 return; 71 return;
74 } 72 }
75 73
76 if (launchHostBrowserInWebApkMode(startUrl, overrideUrl)) { 74 if (launchHostBrowserInWebApkMode(startUrl, overrideUrl)) {
77 return; 75 return;
78 } 76 }
79 if (launchBrowser(startUrl)) { 77
80 return;
81 }
82 installBrowser(); 78 installBrowser();
83 } 79 }
84 80
85 /** 81 /**
86 * Launches host browser in WebAPK mode. 82 * Launches host browser in WebAPK mode.
87 * @return True if successful. 83 * @return True if successful.
88 */ 84 */
89 private boolean launchHostBrowserInWebApkMode(String startUrl, String overri deUrl) { 85 private boolean launchHostBrowserInWebApkMode(String startUrl, String overri deUrl) {
90 Log.v(TAG, "Url of the WebAPK: " + startUrl); 86 Log.v(TAG, "Url of the WebAPK: " + startUrl);
91 String packageName = getPackageName(); 87 String packageName = getPackageName();
92 Log.v(TAG, "Package name of the WebAPK:" + packageName); 88 Log.v(TAG, "Package name of the WebAPK:" + packageName);
93 89
94 String runtimeHost = WebApkUtils.getHostBrowserPackageName(this); 90 String runtimeHost = WebApkUtils.getHostBrowserPackageName(this);
91 if (runtimeHost == null) return false;
92
95 boolean isFromExternalIntent = (overrideUrl != null); 93 boolean isFromExternalIntent = (overrideUrl != null);
96 int source = getIntent().getIntExtra(WebApkConstants.EXTRA_SOURCE, 0); 94 int source = getIntent().getIntExtra(WebApkConstants.EXTRA_SOURCE, 0);
97 if (isFromExternalIntent && source == WebApkConstants.SHORTCUT_SOURCE_UN KNOWN) { 95 if (isFromExternalIntent && source == WebApkConstants.SHORTCUT_SOURCE_UN KNOWN) {
98 source = WebApkConstants.SHORTCUT_SOURCE_EXTERNAL_INTENT; 96 source = WebApkConstants.SHORTCUT_SOURCE_EXTERNAL_INTENT;
99 } 97 }
100 98
101 // The override URL is non null when the WebAPK is launched from a deep link. The WebAPK 99 // The override URL is non null when the WebAPK is launched from a deep link. The WebAPK
102 // should navigate to the URL in the deep link even if the WebAPK is alr eady open. 100 // should navigate to the URL in the deep link even if the WebAPK is alr eady open.
103 Intent intent = new Intent(); 101 Intent intent = new Intent();
104 intent.setAction(ACTION_START_WEBAPK); 102 intent.setAction(ACTION_START_WEBAPK);
105 intent.setPackage(runtimeHost); 103 intent.setPackage(runtimeHost);
106 intent.putExtra(WebApkConstants.EXTRA_URL, startUrl) 104 intent.putExtra(WebApkConstants.EXTRA_URL, startUrl)
107 .putExtra(WebApkConstants.EXTRA_SOURCE, source) 105 .putExtra(WebApkConstants.EXTRA_SOURCE, source)
108 .putExtra(WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, packageName ) 106 .putExtra(WebApkConstants.EXTRA_WEBAPK_PACKAGE_NAME, packageName )
109 .putExtra(WebApkConstants.EXTRA_WEBAPK_FORCE_NAVIGATION, isFromE xternalIntent); 107 .putExtra(WebApkConstants.EXTRA_WEBAPK_FORCE_NAVIGATION, isFromE xternalIntent);
110 108
111 try { 109 try {
112 startActivity(intent); 110 startActivity(intent);
113 return true; 111 return true;
114 } catch (ActivityNotFoundException e) { 112 } catch (ActivityNotFoundException e) {
115 Log.w(TAG, "Unable to launch browser in WebAPK mode."); 113 Log.w(TAG, "Unable to launch browser in WebAPK mode.");
116 e.printStackTrace(); 114 e.printStackTrace();
117 return false; 115 return false;
118 } 116 }
119 } 117 }
120 118
121 /** 119 /**
122 * Launches browser (not necessarily the host browser).
123 * @param startUrl URL to navigate browser to.
124 * @return True if successful.
125 */
126 private boolean launchBrowser(String startUrl) {
127 Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(startUrl));
128 intent.addCategory(Intent.CATEGORY_BROWSABLE);
129
130 // The WebAPK can handle {@link startUrl}. Set a selector to prevent the WebAPK from
131 // launching itself.
132 try {
133 Intent selectorIntent = Intent.parseUri("https://", Intent.URI_INTEN T_SCHEME);
134 intent.setSelector(selectorIntent);
135 } catch (URISyntaxException e) {
136 return false;
137 }
138
139 // Add extras in case that the URL is launched in Chrome.
140 int source =
141 getIntent().getIntExtra(WebApkConstants.EXTRA_SOURCE, Intent.URI _INTENT_SCHEME);
142 intent.putExtra(REUSE_URL_MATCHING_TAB_ELSE_NEW_TAB, true)
143 .putExtra(WebApkConstants.EXTRA_SOURCE, source);
144
145 try {
146 startActivity(intent);
147 } catch (ActivityNotFoundException e) {
148 return false;
149 }
150 return true;
151 }
152
153 /**
154 * Launches the Play Store with the host browser's page. 120 * Launches the Play Store with the host browser's page.
155 */ 121 */
156 private void installBrowser() { 122 private void installBrowser() {
157 String hostBrowserPackageName = WebApkUtils.getHostBrowserPackageName(th is); 123 String hostBrowserPackageName = WebApkConstants.DEFAULT_HOST_BROWSER;
158 if (hostBrowserPackageName == null) {
159 return;
160 }
161 124
162 try { 125 try {
163 startActivity(createInstallIntent(hostBrowserPackageName)); 126 startActivity(createInstallIntent(hostBrowserPackageName));
164 } catch (ActivityNotFoundException e) { 127 } catch (ActivityNotFoundException e) {
165 } 128 }
166 } 129 }
167 130
168 /** Retrieves URL from the intent's data. Returns null if a URL could not be retrieved. */ 131 /** Retrieves URL from the intent's data. Returns null if a URL could not be retrieved. */
169 private String getOverrideUrl() { 132 private String getOverrideUrl() {
170 String overrideUrl = getIntent().getDataString(); 133 String overrideUrl = getIntent().getDataString();
171 if (overrideUrl != null && overrideUrl.startsWith("https:")) { 134 if (overrideUrl != null && overrideUrl.startsWith("https:")) {
172 return overrideUrl; 135 return overrideUrl;
173 } 136 }
174 return null; 137 return null;
175 } 138 }
176 139
177 /** Returns the start URL from the Android Manifest. */ 140 /** Returns the start URL from the Android Manifest. */
178 private String getStartUrl() { 141 private String getStartUrl() {
179 ApplicationInfo appInfo; 142 ApplicationInfo appInfo;
180 try { 143 try {
181 appInfo = getPackageManager().getApplicationInfo( 144 appInfo = getPackageManager().getApplicationInfo(
182 getPackageName(), PackageManager.GET_META_DATA); 145 getPackageName(), PackageManager.GET_META_DATA);
183 } catch (NameNotFoundException e) { 146 } catch (NameNotFoundException e) {
184 return null; 147 return null;
185 } 148 }
186 return appInfo.metaData.getString(WebApkMetaDataKeys.START_URL); 149 return appInfo.metaData.getString(WebApkMetaDataKeys.START_URL);
187 } 150 }
188 } 151 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698