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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkMetaDataUtils.java

Issue 2435383002: Update WebAPKs even if the WebAPK start URL has no Web Manifest part 1/3 (Closed)
Patch Set: Merge branch 'master' into update_fail0 Created 4 years, 2 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 side-by-side diff with in-line comments
Download patch
Index: chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkMetaDataUtils.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkMetaDataUtils.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkMetaDataUtils.java
index 29cf4ba2937e14e8e5da069428cc9380b6e7c3b5..2eac6f09e07a8c5d8d1ec7b1fb5990d5abc1231b 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkMetaDataUtils.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/WebApkMetaDataUtils.java
@@ -25,13 +25,37 @@ import org.chromium.webapk.lib.common.WebApkMetaDataKeys;
*/
public class WebApkMetaDataUtils {
/**
- * Populates {@link WebappInfo} with meta data extracted from WebAPK.
+ * Populates {@link WebappInfo} with meta data extracted from WebAPK's Android Manifest.
* @param webApkPackageName Package name of the WebAPK to extract meta data from.
* @param url WebAPK start URL.
* @param source {@link ShortcutSource} that the WebAPK was opened from.
*/
public static WebappInfo extractWebappInfoFromWebApk(
String webApkPackageName, String url, int source) {
+ WebApkMetaData metaData = extractMetaDataFromWebApk(webApkPackageName);
+ if (metaData == null) return null;
+
+ PackageManager packageManager = ContextUtils.getApplicationContext().getPackageManager();
+ Resources resources;
+ try {
+ resources = packageManager.getResourcesForApplication(webApkPackageName);
+ } catch (PackageManager.NameNotFoundException e) {
+ return null;
+ }
+ Bitmap icon = BitmapFactory.decodeResource(resources, metaData.iconId);
+ String encodedIcon = ShortcutHelper.encodeBitmapAsString(icon);
+
+ return WebappInfo.create(WebApkConstants.WEBAPK_ID_PREFIX + webApkPackageName, url,
+ metaData.scope, encodedIcon, metaData.name, metaData.shortName,
+ metaData.displayMode, metaData.orientation, source, metaData.themeColor,
+ metaData.backgroundColor, TextUtils.isEmpty(metaData.iconUrl), webApkPackageName);
+ }
+
+ /**
+ * Populates {@link WebApkMetaData} with meta data extracted from WebAPK's Android Manifest.
+ * @param webApkPackageName Package name of the WebAPK to extract meta data from.
+ */
+ public static WebApkMetaData extractMetaDataFromWebApk(String webApkPackageName) {
PackageManager packageManager = ContextUtils.getApplicationContext().getPackageManager();
ApplicationInfo appInfo;
try {
@@ -40,34 +64,34 @@ public class WebApkMetaDataUtils {
} catch (PackageManager.NameNotFoundException e) {
return null;
}
- Bundle metaData = appInfo.metaData;
- String scope = IntentUtils.safeGetString(metaData, WebApkMetaDataKeys.SCOPE);
- String name = IntentUtils.safeGetString(metaData, WebApkMetaDataKeys.NAME);
- String shortName = IntentUtils.safeGetString(metaData, WebApkMetaDataKeys.SHORT_NAME);
- int displayMode = displayModeFromString(
- IntentUtils.safeGetString(metaData, WebApkMetaDataKeys.DISPLAY_MODE));
- int orientation = orientationFromString(
- IntentUtils.safeGetString(metaData, WebApkMetaDataKeys.ORIENTATION));
- long themeColor = getLongFromMetaData(metaData, WebApkMetaDataKeys.THEME_COLOR,
+ Bundle bundle = appInfo.metaData;
+
+ WebApkMetaData metaData = new WebApkMetaData();
+ metaData.shellApkVersion =
+ IntentUtils.safeGetInt(bundle, WebApkMetaDataKeys.SHELL_APK_VERSION, 0);
+ metaData.manifestUrl =
+ IntentUtils.safeGetString(bundle, WebApkMetaDataKeys.WEB_MANIFEST_URL);
+ metaData.startUrl = IntentUtils.safeGetString(bundle, WebApkMetaDataKeys.START_URL);
+ metaData.name = IntentUtils.safeGetString(bundle, WebApkMetaDataKeys.NAME);
+ metaData.shortName = IntentUtils.safeGetString(bundle, WebApkMetaDataKeys.SHORT_NAME);
+ metaData.scope = IntentUtils.safeGetString(bundle, WebApkMetaDataKeys.SCOPE);
+ metaData.displayMode = displayModeFromString(
+ IntentUtils.safeGetString(bundle, WebApkMetaDataKeys.DISPLAY_MODE));
+ metaData.orientation = orientationFromString(
+ IntentUtils.safeGetString(bundle, WebApkMetaDataKeys.ORIENTATION));
+ metaData.themeColor = getLongFromMetaData(bundle, WebApkMetaDataKeys.THEME_COLOR,
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING);
- long backgroundColor = getLongFromMetaData(metaData, WebApkMetaDataKeys.BACKGROUND_COLOR,
+ metaData.backgroundColor = getLongFromMetaData(bundle, WebApkMetaDataKeys.BACKGROUND_COLOR,
ShortcutHelper.MANIFEST_COLOR_INVALID_OR_MISSING);
- boolean isIconGenerated =
- TextUtils.isEmpty(IntentUtils.safeGetString(metaData, WebApkMetaDataKeys.ICON_URL));
+ metaData.iconId = IntentUtils.safeGetInt(bundle, WebApkMetaDataKeys.ICON_ID, 0);
+ metaData.iconUrl = IntentUtils.safeGetString(bundle, WebApkMetaDataKeys.ICON_URL);
+ metaData.iconMurmur2Hash = getIconMurmur2HashFromMetaData(bundle);
- int iconId = IntentUtils.safeGetInt(metaData, WebApkMetaDataKeys.ICON_ID, 0);
- Resources resources;
- try {
- resources = packageManager.getResourcesForApplication(webApkPackageName);
- } catch (PackageManager.NameNotFoundException e) {
- return null;
+ if (TextUtils.isEmpty(metaData.scope)) {
+ metaData.scope = ShortcutHelper.getScopeFromUrl(metaData.startUrl);
}
- Bitmap icon = BitmapFactory.decodeResource(resources, iconId);
- String encodedIcon = ShortcutHelper.encodeBitmapAsString(icon);
- return WebappInfo.create(WebApkConstants.WEBAPK_ID_PREFIX + webApkPackageName, url, scope,
- encodedIcon, name, shortName, displayMode, orientation, source, themeColor,
- backgroundColor, isIconGenerated, webApkPackageName);
+ return metaData;
}
/**

Powered by Google App Engine
This is Rietveld 408576698