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

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..4631159453c8d604238f8d233f82067d0980739d 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,37 @@ public class AppMenuPropertiesDelegate {
mActivity.prepareMenu(menu);
}
pkotwicz 2017/02/22 20:26:10 Can you add a comment to this function? How about
gonzalon 2017/02/22 20:45:04 Done.
+ protected void prepareAddToHomescreenMenuItem(
+ Menu menu, String url, boolean homeScreenVisible) {
pkotwicz 2017/02/22 20:26:10 Perhaps rename |homeScreenVisible| to |homeScreenH
gonzalon 2017/02/22 20:45:04 Well, if I call it homeScreenHidden and it's false
pkotwicz 2017/02/23 20:46:17 Perhaps canShowHomeScreenMenuItem() to be consiste
gonzalon 2017/02/24 16:02:58 Done.
+ MenuItem homescreenItem = menu.findItem(R.id.add_to_homescreen_id);
+ MenuItem openWebApkItem = menu.findItem(R.id.open_webapk_id);
+ if (homeScreenVisible) {
+ Context context = ContextUtils.getApplicationContext();
+ long addToHomeScreenStart = SystemClock.elapsedRealtime();
+ ResolveInfo resolveInfo = WebApkValidator.queryResolveInfo(context, url);
+ RecordHistogram.recordTimesHistogram("Android.PrepareMenu.OpenWebApkVisibilityCheck",
+ SystemClock.elapsedRealtime() - addToHomeScreenStart, TimeUnit.MILLISECONDS);
+
+ boolean openWebApkItemVisible =
+ resolveInfo != null && resolveInfo.activityInfo.packageName != null;
+
+ if (openWebApkItemVisible) {
+ String appName = resolveInfo.loadLabel(context.getPackageManager()).toString();
+ openWebApkItem.setTitle(context.getString(R.string.menu_open_webapk, appName));
+
+ 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