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

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

Issue 2480203002: ui: Cleanup class/struct forward declarations (Closed)
Patch Set: Sync CL to position 430550 Created 4 years, 1 month 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/ChromeWebApkHost.java
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/webapps/ChromeWebApkHost.java b/chrome/android/java/src/org/chromium/chrome/browser/webapps/ChromeWebApkHost.java
index 5f75e9039dcbd26b0a0300d16524615433debdee..e12690f63cc5cd1825b91ca2b3b7e380551f3544 100644
--- a/chrome/android/java/src/org/chromium/chrome/browser/webapps/ChromeWebApkHost.java
+++ b/chrome/android/java/src/org/chromium/chrome/browser/webapps/ChromeWebApkHost.java
@@ -4,14 +4,21 @@
package org.chromium.chrome.browser.webapps;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.Intent;
import android.os.StrictMode;
+import android.provider.Settings;
+import android.support.v7.app.AlertDialog;
import org.chromium.base.CommandLine;
import org.chromium.base.ContextUtils;
import org.chromium.base.Log;
import org.chromium.base.annotations.CalledByNative;
+import org.chromium.chrome.R;
import org.chromium.chrome.browser.ChromeFeatureList;
import org.chromium.chrome.browser.ChromeSwitches;
+import org.chromium.chrome.browser.ChromeVersionInfo;
import org.chromium.chrome.browser.preferences.ChromePreferenceManager;
import org.chromium.webapk.lib.client.WebApkValidator;
@@ -60,19 +67,97 @@ public class ChromeWebApkHost {
}
/**
+ * Show dialog warning user that "installation from unknown sources" is required by the WebAPK
+ * experiment if:
+ * - The user toggled the --enable-webapk command line flag via chrome://flags
+ * AND
+ * - WebAPKs are not disabled via variations kill switch.
+ * Must be run prior to {@link cacheEnabledStateForNextLaunch}.
+ */
+ public static void launchWebApkRequirementsDialogIfNeeded(Context context) {
+ // Show dialog on Canary & Dev. Installation via "unknown sources" is disabled via
+ // variations on other channels.
+ if (!ChromeVersionInfo.isCanaryBuild() && !ChromeVersionInfo.isDevBuild()) return;
+
+ Context applicationContext = ContextUtils.getApplicationContext();
+ boolean wasCommandLineFlagEnabled = ChromePreferenceManager.getInstance(applicationContext)
+ .getCachedWebApkCommandLineEnabled();
+ if (computeEnabled() && !wasCommandLineFlagEnabled
+ && !installingFromUnknownSourcesAllowed(applicationContext)) {
+ showUnknownSourcesNeededDialog(context);
+ }
+ }
+
+ /**
* Once native is loaded we can consult the command-line (set via about:flags) and also finch
* state to see if we should enable WebAPKs.
*/
public static void cacheEnabledStateForNextLaunch() {
- boolean wasEnabled = isEnabledInPrefs();
- CommandLine instance = CommandLine.getInstance();
- boolean isEnabled = ChromeFeatureList.isEnabled(ChromeFeatureList.WEBAPKS)
- && instance.hasSwitch(ChromeSwitches.ENABLE_WEBAPK);
+ ChromePreferenceManager preferenceManager =
+ ChromePreferenceManager.getInstance(ContextUtils.getApplicationContext());
+
+ boolean wasCommandLineEnabled = preferenceManager.getCachedWebApkCommandLineEnabled();
+ boolean isCommandLineEnabled = isCommandLineFlagSet();
+ if (isCommandLineEnabled != wasCommandLineEnabled) {
+ // {@link launchWebApkRequirementsDialogIfNeeded()} is skipped the first time Chrome is
+ // launched so do caching here instead.
+ preferenceManager.setCachedWebApkCommandLineEnabled(isCommandLineEnabled);
+ }
+ boolean wasEnabled = isEnabledInPrefs();
+ boolean isEnabled = computeEnabled();
if (isEnabled != wasEnabled) {
Log.d(TAG, "WebApk setting changed (%s => %s)", wasEnabled, isEnabled);
- ChromePreferenceManager.getInstance(ContextUtils.getApplicationContext())
- .setCachedWebApkRuntimeEnabled(isEnabled);
+ preferenceManager.setCachedWebApkRuntimeEnabled(isEnabled);
+ }
+ }
+
+ /** Returns whether the --enable-webapk command line flag is set */
+ private static boolean isCommandLineFlagSet() {
+ return CommandLine.getInstance().hasSwitch(ChromeSwitches.ENABLE_WEBAPK);
+ }
+
+ /** Returns whether we should enable WebAPKs */
+ private static boolean computeEnabled() {
+ return isCommandLineFlagSet() && ChromeFeatureList.isEnabled(ChromeFeatureList.WEBAPKS);
+ }
+
+ /**
+ * Returns whether the user has enabled installing apps from sources other than the Google Play
+ * Store.
+ */
+ private static boolean installingFromUnknownSourcesAllowed(Context context) {
+ try {
+ return Settings.Secure.getInt(
+ context.getContentResolver(), Settings.Secure.INSTALL_NON_MARKET_APPS)
+ == 1;
+ } catch (Settings.SettingNotFoundException e) {
+ return false;
}
}
+
+ /**
+ * Show dialog warning user that "installation from unknown sources" is required by the WebAPK
+ * experiment.
+ */
+ private static void showUnknownSourcesNeededDialog(final Context context) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(context);
+ builder.setTitle(R.string.webapk_unknown_sources_dialog_title);
+ builder.setMessage(R.string.webapk_unknown_sources_dialog_message);
+ builder.setPositiveButton(R.string.webapk_unknown_sources_settings_button,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int id) {
+ // Open Android Security settings.
+ Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS);
+ context.startActivity(intent);
+ }
+ });
+ builder.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int id) {}
+ });
+ AlertDialog dialog = builder.create();
+ dialog.show();
+ }
}

Powered by Google App Engine
This is Rietveld 408576698