Help menus for several screens.

Bug: 5144896
Change-Id: Ib2f5146f6f62f2a33261bb165c3bf1bf13b22f38
diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java
index f7e3b02..8500f8d 100644
--- a/src/com/android/settings/SettingsPreferenceFragment.java
+++ b/src/com/android/settings/SettingsPreferenceFragment.java
@@ -21,11 +21,17 @@
 import android.app.Fragment;
 import android.content.ContentResolver;
 import android.content.DialogInterface;
+import android.content.Intent;
 import android.content.pm.PackageManager;
+import android.net.Uri;
 import android.os.Bundle;
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceFragment;
+import android.text.TextUtils;
 import android.util.Log;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
 import android.widget.Button;
 
 /**
@@ -35,13 +41,51 @@
 
     private static final String TAG = "SettingsPreferenceFragment";
 
+    private static final int MENU_HELP = Menu.FIRST + 100;
+
     private SettingsDialogFragment mDialogFragment;
 
+    private String mHelpUrl;
+
+    @Override
+    public void onCreate(Bundle icicle) {
+        super.onCreate(icicle);
+
+        // Prepare help url and enable menu if necessary
+        int helpResource = getHelpResource();
+        if (helpResource != 0) {
+            mHelpUrl = getResources().getString(helpResource);
+            if (!TextUtils.isEmpty(mHelpUrl)) {
+                setHasOptionsMenu(true);
+            }
+        }
+    }
+
     @Override
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
     }
 
+    /**
+     * Override this if you want to show a help item in the menu, by returning the resource id.
+     * @return the resource id for the help url
+     */
+    protected int getHelpResource() {
+        return 0;
+    }
+
+    @Override
+    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+        if (mHelpUrl != null) {
+            Intent helpIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(mHelpUrl));
+            helpIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
+                | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
+            MenuItem helpItem = menu.add(0, MENU_HELP, 0, R.string.help_label);
+            helpItem.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
+            helpItem.setIntent(helpIntent);
+        }
+    }
+
     /*
      * The name is intentionally made different from Activity#finish(), so that
      * users won't misunderstand its meaning.