Browser: add to customize and show useragent

Add for carrier feature which requires to use useragent with
specified format. We try to load carrier useragent if needed
and show useragent in "about" menu item.

CRs-Fixed: 516733

Change-Id: Ifae25644d9ad5387684e3ff1e691e20db9a45e2a
diff --git a/src/com/android/browser/BrowserActivity.java b/src/com/android/browser/BrowserActivity.java
index 74eede7..c548322 100644
--- a/src/com/android/browser/BrowserActivity.java
+++ b/src/com/android/browser/BrowserActivity.java
@@ -17,6 +17,7 @@
 package com.android.browser;
 
 import android.app.Activity;
+import android.app.AlertDialog;
 import android.app.KeyguardManager;
 import android.content.Context;
 import android.content.Intent;
@@ -34,6 +35,8 @@
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.Window;
+import android.webkit.WebSettings;
+import android.webkit.WebView;
 import android.webkit.JavascriptInterface;
 
 import com.android.browser.UI.ComboViews;
@@ -239,6 +242,22 @@
                     }
                 }, 300);
             }
+            if (item.getItemId() == R.id.about_menu_id) {
+                final AlertDialog.Builder builder = new AlertDialog.Builder(this);
+                builder.setTitle(R.string.about);
+                builder.setCancelable(true);
+                String ua = "";
+                final WebView current = getController().getCurrentWebView();
+                if (current != null) {
+                    final WebSettings s = current.getSettings();
+                    if (s != null) {
+                        ua = s.getUserAgentString();
+                    }
+                }
+                builder.setMessage("Agent:" + ua);
+                builder.setPositiveButton(android.R.string.ok, null);
+                builder.create().show();
+            }
             return super.onOptionsItemSelected(item);
         }
         return true;
diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index c390ab6..9e0971d 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -33,6 +33,7 @@
 import android.provider.Settings;
 import android.util.DisplayMetrics;
 import android.util.Log;
+import android.util.Log;
 import android.webkit.CookieManager;
 import android.webkit.GeolocationPermissions;
 import android.webkit.WebIconDatabase;
@@ -53,7 +54,9 @@
 import com.android.browser.search.SearchEngines;
 
 import java.io.InputStream;
+import java.lang.Class;
 import java.lang.ref.WeakReference;
+import java.lang.reflect.Method;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.Locale;
@@ -94,6 +97,8 @@
             HONEYCOMB_USERAGENT,
     };
 
+    private static final String TAG = "BrowserSettings";
+
     // The minimum min font size
     // Aka, the lower bounds for the min font size range
     // which is 1:5..24
@@ -342,7 +347,18 @@
         settings.setSaveFormData(saveFormdata());
         settings.setUseWideViewPort(isWideViewport());
 
-        String ua = mCustomUserAgents.get(settings);
+        // add for carrier useragent feature
+        String ua = null;
+        try {
+            Class c = Class.forName("com.qrd.useragent.UserAgentHandler");
+            Object cObj = c.newInstance();
+            Method m = c.getDeclaredMethod("getUAString", Context.class);
+            ua = (String)m.invoke(cObj, mContext);
+        } catch (Exception e) {
+            Log.e(TAG, "plug in Load failed, err " + e);
+            ua = mCustomUserAgents.get(settings);
+        }
+
         if (ua != null) {
             settings.setUserAgentString(ua);
         } else {