Moving HelpUtils to SettingsLib

Moved HelpUtils to SettingsLib in frameworks/base so it can be shared by
packageinstaller as well.

Bug: b/22096093
Change-Id: I8d620abcde8279a3b4d11bbcff8ae9b6f46a1895
diff --git a/src/com/android/settings/HelpUtils.java b/src/com/android/settings/HelpUtils.java
deleted file mode 100644
index 3c36edb..0000000
--- a/src/com/android/settings/HelpUtils.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings;
-
-import android.app.Activity;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageInfo;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.content.res.Resources.Theme;
-import android.net.Uri;
-import android.text.TextUtils;
-import android.util.Log;
-import android.util.TypedValue;
-import android.view.Menu;
-import android.view.MenuItem;
-import android.view.MenuItem.OnMenuItemClickListener;
-
-import java.net.URISyntaxException;
-import java.util.Locale;
-
-/**
- * Functions to easily prepare contextual help menu option items with an intent that opens up the
- * browser to a particular URL, while taking into account the preferred language and app version.
- */
-public class HelpUtils {
-    private final static String TAG = HelpUtils.class.getSimpleName();
-
-    private static final int MENU_HELP = Menu.FIRST + 100;
-
-    /**
-     * Help URL query parameter key for the preferred language.
-     */
-    private final static String PARAM_LANGUAGE_CODE = "hl";
-
-    /**
-     * Help URL query parameter key for the app version.
-     */
-    private final static String PARAM_VERSION = "version";
-
-    // Constants for help intents.
-    private static final String EXTRA_CONTEXT = "EXTRA_CONTEXT";
-    private static final String EXTRA_THEME = "EXTRA_THEME";
-    private static final String EXTRA_PRIMARY_COLOR = "EXTRA_PRIMARY_COLOR";
-    private static final String EXTRA_BACKUP_URI = "EXTRA_BACKUP_URI";
-
-    /**
-     * Cached version code to prevent repeated calls to the package manager.
-     */
-    private static String sCachedVersionCode = null;
-
-    /** Static helper that is not instantiable*/
-    private HelpUtils() { }
-
-    public static boolean prepareHelpMenuItem(Activity activity, Menu menu, String helpUri,
-            String backupContext) {
-        MenuItem helpItem = menu.add(0, MENU_HELP, 0, R.string.help_label);
-        return prepareHelpMenuItem(activity, helpItem, helpUri, backupContext);
-    }
-
-    public static boolean prepareHelpMenuItem(Activity activity, Menu menu, int helpUriResource,
-            String backupContext) {
-        MenuItem helpItem = menu.add(0, MENU_HELP, 0, R.string.help_label);
-        return prepareHelpMenuItem(activity, helpItem, activity.getString(helpUriResource),
-                backupContext);
-    }
-
-    /**
-     * Prepares the help menu item by doing the following.
-     * - If the helpUrlString is empty or null, the help menu item is made invisible.
-     * - Otherwise, this makes the help menu item visible and sets the intent for the help menu
-     *   item to view the URL.
-     *
-     * @return returns whether the help menu item has been made visible.
-     */
-    public static boolean prepareHelpMenuItem(final Activity activity, MenuItem helpMenuItem,
-            String helpUriString, String backupContext) {
-        if (TextUtils.isEmpty(helpUriString)) {
-            // The help url string is empty or null, so set the help menu item to be invisible.
-            helpMenuItem.setVisible(false);
-
-            // return that the help menu item is not visible (i.e. false)
-            return false;
-        } else {
-            final Intent intent = getHelpIntent(activity, helpUriString, backupContext);
-
-            // Set the intent to the help menu item, show the help menu item in the overflow
-            // menu, and make it visible.
-            if (intent != null) {
-                helpMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
-                    @Override
-                    public boolean onMenuItemClick(MenuItem item) {
-                        activity.startActivityForResult(intent, 0);
-                        return true;
-                    }
-                });
-                helpMenuItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
-                helpMenuItem.setVisible(true);
-            } else {
-                helpMenuItem.setVisible(false);
-                return false;
-            }
-
-            // return that the help menu item is visible (i.e., true)
-            return true;
-        }
-    }
-
-    public static Intent getHelpIntent(Context context, String helpUriString,
-            String backupContext) {
-        // Try to handle as Intent Uri, otherwise just treat as Uri.
-        try {
-            Intent intent = Intent.parseUri(helpUriString,
-                    Intent.URI_ANDROID_APP_SCHEME | Intent.URI_INTENT_SCHEME);
-            addIntentParameters(context, intent, backupContext);
-            ComponentName component = intent.resolveActivity(context.getPackageManager());
-            if (component != null) {
-                return intent;
-            } else if (intent.hasExtra(EXTRA_BACKUP_URI)) {
-                // This extra contains a backup URI for when the intent isn't available.
-                return getHelpIntent(context, intent.getStringExtra(EXTRA_BACKUP_URI),
-                        backupContext);
-            } else {
-                return null;
-            }
-        } catch (URISyntaxException e) {
-        }
-        // The help url string exists, so first add in some extra query parameters.
-        final Uri fullUri = uriWithAddedParameters(context, Uri.parse(helpUriString));
-
-        // Then, create an intent that will be fired when the user
-        // selects this help menu item.
-        Intent intent = new Intent(Intent.ACTION_VIEW, fullUri);
-        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
-                | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
-        return intent;
-    }
-
-    private static void addIntentParameters(Context context, Intent intent, String backupContext) {
-        if (!intent.hasExtra(EXTRA_CONTEXT)) {
-            // Insert some context if none exists.
-            intent.putExtra(EXTRA_CONTEXT, backupContext);
-        }
-        intent.putExtra(EXTRA_THEME, 1 /* Light, dark action bar */);
-        Theme theme = context.getTheme();
-        TypedValue typedValue = new TypedValue();
-        theme.resolveAttribute(android.R.attr.colorPrimary, typedValue, true);
-        intent.putExtra(EXTRA_PRIMARY_COLOR, context.getColor(typedValue.resourceId));
-    }
-
-    /**
-     * Adds two query parameters into the Uri, namely the language code and the version code
-     * of the app's package as gotten via the context.
-     * @return the uri with added query parameters
-     */
-    public static Uri uriWithAddedParameters(Context context, Uri baseUri) {
-        Uri.Builder builder = baseUri.buildUpon();
-
-        // Add in the preferred language
-        builder.appendQueryParameter(PARAM_LANGUAGE_CODE, Locale.getDefault().toString());
-
-        // Add in the package version code
-        if (sCachedVersionCode == null) {
-            // There is no cached version code, so try to get it from the package manager.
-            try {
-                // cache the version code
-                PackageInfo info = context.getPackageManager().getPackageInfo(
-                        context.getPackageName(), 0);
-                sCachedVersionCode = Integer.toString(info.versionCode);
-
-                // append the version code to the uri
-                builder.appendQueryParameter(PARAM_VERSION, sCachedVersionCode);
-            } catch (NameNotFoundException e) {
-                // Cannot find the package name, so don't add in the version parameter
-                // This shouldn't happen.
-                Log.wtf(TAG, "Invalid package name for context", e);
-            }
-        } else {
-            builder.appendQueryParameter(PARAM_VERSION, sCachedVersionCode);
-        }
-
-        // Build the full uri and return it
-        return builder.build();
-    }
-}
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index 16df343..e0a2844 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -44,6 +44,7 @@
 import android.widget.Button;
 import com.android.settings.applications.LayoutPreference;
 import com.android.settings.widget.FloatingActionButton;
+import com.android.settingslib.HelpUtils;
 
 import java.util.UUID;
 
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java
index 5a29cb7..35771e3 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/ManageApplications.java
@@ -52,7 +52,7 @@
 import android.widget.Spinner;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.AppHeader;
-import com.android.settings.HelpUtils;
+import com.android.settingslib.HelpUtils;
 import com.android.settings.InstrumentedFragment;
 import com.android.settings.R;
 import com.android.settings.Settings.AllApplicationsActivity;
diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java
index 5d9a79b..b345950 100644
--- a/src/com/android/settings/dashboard/DashboardSummary.java
+++ b/src/com/android/settings/dashboard/DashboardSummary.java
@@ -27,7 +27,7 @@
 import android.view.ViewGroup;
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.MetricsProto.MetricsEvent;
-import com.android.settings.HelpUtils;
+import com.android.settingslib.HelpUtils;
 import com.android.settings.InstrumentedFragment;
 import com.android.settings.R;
 import com.android.settings.Settings;
diff --git a/src/com/android/settings/fingerprint/FingerprintEnrollIntroduction.java b/src/com/android/settings/fingerprint/FingerprintEnrollIntroduction.java
index 7a805cb..31aed6c 100644
--- a/src/com/android/settings/fingerprint/FingerprintEnrollIntroduction.java
+++ b/src/com/android/settings/fingerprint/FingerprintEnrollIntroduction.java
@@ -39,7 +39,7 @@
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.ChooseLockGeneric;
 import com.android.settings.ChooseLockSettingsHelper;
-import com.android.settings.HelpUtils;
+import com.android.settingslib.HelpUtils;
 import com.android.settings.R;
 import com.android.setupwizardlib.SetupWizardRecyclerLayout;
 import com.android.setupwizardlib.items.IItem;
diff --git a/src/com/android/settings/fingerprint/FingerprintSettings.java b/src/com/android/settings/fingerprint/FingerprintSettings.java
index 3b00168..9e2c5ff 100644
--- a/src/com/android/settings/fingerprint/FingerprintSettings.java
+++ b/src/com/android/settings/fingerprint/FingerprintSettings.java
@@ -63,7 +63,7 @@
 import com.android.internal.logging.MetricsProto.MetricsEvent;
 import com.android.settings.ChooseLockGeneric;
 import com.android.settings.ChooseLockSettingsHelper;
-import com.android.settings.HelpUtils;
+import com.android.settingslib.HelpUtils;
 import com.android.settings.R;
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.SubSettings;
diff --git a/src/com/android/settings/nfc/AndroidBeam.java b/src/com/android/settings/nfc/AndroidBeam.java
index dfdf0dc..cc4c4af 100644
--- a/src/com/android/settings/nfc/AndroidBeam.java
+++ b/src/com/android/settings/nfc/AndroidBeam.java
@@ -30,7 +30,7 @@
 import android.widget.Switch;
 
 import com.android.internal.logging.MetricsProto.MetricsEvent;
-import com.android.settings.HelpUtils;
+import com.android.settingslib.HelpUtils;
 import com.android.settings.InstrumentedFragment;
 import com.android.settings.R;
 import com.android.settings.SettingsActivity;