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

Unified Diff: chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegate.java

Issue 2707993003: [Android]: Hide add-to-homescreen app menu item when WebAPK is installed (Closed)
Patch Set: Add new state for 'Add to Homescreen' Menu item Created 3 years, 10 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/appmenu/AppMenuPropertiesDelegate.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegate.java b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegate.java
index d72051fda974fcb1a8dde4b2718dfd4b07361938..4be88f42297b1e4bdb7719d16e42cf4a10afb4a6 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegate.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/appmenu/AppMenuPropertiesDelegate.java
@@ -4,13 +4,18 @@
package org.chromium.chrome.browser.appmenu;
+import android.content.Context;
+import android.content.pm.ResolveInfo;
import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
+import android.os.SystemClock;
import android.view.Menu;
import android.view.MenuItem;
import org.chromium.base.ApiCompatibilityUtils;
import org.chromium.base.CommandLine;
+import org.chromium.base.ContextUtils;
+import org.chromium.base.metrics.RecordHistogram;
import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.ChromeFeatureList;
@@ -28,6 +33,9 @@ import org.chromium.chrome.browser.share.ShareHelper;
import org.chromium.chrome.browser.tab.Tab;
import org.chromium.components.dom_distiller.core.DomDistillerUrlUtils;
import org.chromium.ui.base.DeviceFormFactor;
+import org.chromium.webapk.lib.client.WebApkValidator;
+
+import java.util.concurrent.TimeUnit;
/**
* App Menu helper that handles hiding and showing menu items based on activity state.
@@ -162,13 +170,9 @@ public class AppMenuPropertiesDelegate {
// access to the resource via FLAG_GRANT_READ_URI_PERMISSION, and that
// is not persisted when adding to the homescreen.
// * If creating shortcuts it not supported by the current home screen.
- MenuItem homescreenItem = menu.findItem(R.id.add_to_homescreen_id);
- boolean homescreenItemVisible = ShortcutHelper.isAddToHomeIntentSupported(mActivity)
+ boolean homeScreenVisible = ShortcutHelper.isAddToHomeIntentSupported(mActivity)
&& !isChromeScheme && !isFileScheme && !isContentScheme && !isIncognito;
- if (homescreenItemVisible) {
- homescreenItem.setTitle(AppBannerManager.getHomescreenLanguageOption());
- }
- homescreenItem.setVisible(homescreenItemVisible);
+ prepareAddToHomescreenMenuItem(menu, currentTab.getUrl(), homeScreenVisible);
// Hide request desktop site on all chrome:// pages except for the NTP. Check request
// desktop site if it's activated on this page.
@@ -217,6 +221,36 @@ public class AppMenuPropertiesDelegate {
mActivity.prepareMenu(menu);
}
+ protected void prepareAddToHomescreenMenuItem(
+ Menu menu, String url, boolean homeScreenVisible) {
+ Context context = ContextUtils.getApplicationContext();
+ long addToHomeScreenStart = SystemClock.elapsedRealtime();
+ ResolveInfo resolveInfo = WebApkValidator.queryWebApk(context, url);
+ RecordHistogram.recordTimesHistogram("Android.PrepareMenu.DisableAddToHomescreenCheck",
pkotwicz 2017/02/22 16:50:19 Nit: Rename this histogram to "Android.PrepareMenu
gonzalon 2017/02/22 17:17:40 Done.
+ SystemClock.elapsedRealtime() - addToHomeScreenStart, TimeUnit.MILLISECONDS);
+
+ boolean openWebApkItemVisible = homeScreenVisible && resolveInfo != null
+ && resolveInfo.activityInfo.packageName != null;
+
+ MenuItem homescreenItem = menu.findItem(R.id.add_to_homescreen_id);
+ MenuItem openWebApkItem = menu.findItem(R.id.open_webapk_id);
+ if (homeScreenVisible) {
pkotwicz 2017/02/22 16:50:19 I'd move the fetching of |resolveInfo| and the com
gonzalon 2017/02/22 17:17:40 Done.
+ if (openWebApkItemVisible) {
+ String appName = resolveInfo.loadLabel(context.getPackageManager()).toString();
+ openWebApkItem.setTitle(context.getString(R.string.menu_open_webapk, appName));
pkotwicz 2017/02/22 16:50:19 Nit: Can you please add a new line?
gonzalon 2017/02/22 17:17:40 Done.
+ homescreenItem.setVisible(false);
+ openWebApkItem.setVisible(true);
+ } else {
+ homescreenItem.setTitle(AppBannerManager.getHomescreenLanguageOption());
+ homescreenItem.setVisible(true);
+ openWebApkItem.setVisible(false);
+ }
+ } else {
+ homescreenItem.setVisible(false);
+ openWebApkItem.setVisible(false);
+ }
+ }
+
/**
* Notify the delegate that the load state changed.
* @param isLoading Whether the page is currently loading.

Powered by Google App Engine
This is Rietveld 408576698