Updated SWE Browser "About" menu item

- Changed "About" menu to preference screen layout,
  instead of popup
- Added Version, Build date, Build Hash, User Agent, Help
  and Feedback

Change-Id: I2c5b8f74f9ffc945adb305042c1ebcd61283e047
diff --git a/src/com/android/browser/BrowserPreferencesPage.java b/src/com/android/browser/BrowserPreferencesPage.java
index 8f31ef9..a40c7c7 100644
--- a/src/com/android/browser/BrowserPreferencesPage.java
+++ b/src/com/android/browser/BrowserPreferencesPage.java
@@ -17,12 +17,17 @@
 package com.android.browser;
 
 import android.app.Activity;
+import android.app.Fragment;
 import android.content.Intent;
 import android.os.Bundle;
 import android.preference.PreferenceActivity;
 
+import com.android.browser.preferences.AboutPreferencesFragment;
 import com.android.browser.preferences.GeneralPreferencesFragment;
 
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
+
 public class BrowserPreferencesPage extends Activity {
 
     public static void startPreferencesForResult(Activity callerActivity, String url, int requestCode) {
@@ -37,6 +42,16 @@
         callerActivity.startActivityForResult(intent, requestCode);
     }
 
+    public static void startPreferenceFragmentExtraForResult(Activity callerActivity,
+                                                             String fragmentName,
+                                                             Bundle bundle,
+                                                             int requestCode) {
+        final Intent intent = new Intent(callerActivity, BrowserPreferencesPage.class);
+        intent.putExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT, fragmentName);
+        intent.putExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS, bundle);
+        callerActivity.startActivityForResult(intent, requestCode);
+    }
+
 
     @Override
     public void onCreate(Bundle icicle) {
@@ -49,6 +64,35 @@
             if ("android.intent.action.MANAGE_NETWORK_USAGE".equals(action)) {
                 // TODO: switch to the Network fragment here?
             }
+
+            Bundle extras = intent.getExtras();
+            String fragment = (String) extras.getCharSequence(PreferenceActivity.EXTRA_SHOW_FRAGMENT);
+            if (fragment != null) {
+                try {
+                    Class<?> cls = Class.forName(fragment);
+                    Constructor<?> ctor = cls.getConstructor();
+                    Object obj = ctor.newInstance();
+
+                    if (obj instanceof Fragment) {
+                        Fragment frag = (Fragment) obj;
+
+                        Bundle bundle = extras.getBundle(PreferenceActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS);
+                        if (bundle != null) {
+                            frag.setArguments(bundle);
+                        }
+
+                        getFragmentManager().beginTransaction().replace(
+                                android.R.id.content,
+                                (Fragment) obj).commit();
+                    }
+                } catch (ClassNotFoundException e) {
+                } catch (NoSuchMethodException e) {
+                } catch (InvocationTargetException e) {
+                } catch (InstantiationException e) {
+                } catch (IllegalAccessException e) {
+                }
+                return;
+            }
         }
 
         getFragmentManager().beginTransaction().replace(android.R.id.content,