Re-implement UserAgent in browser

- Remove calls to SWE's WebSetting API and use the newer implementation of
  the engine. The newer implementation tracks UserAgent per navigation
  entry.
- Allow to override the UserAgent using command line switches.
- Remove debug option to change UserAgent string.
- BrowserConfig class cleanup.

Change-Id: Ib1cc4763e0cbf0207793d1f4e6b1644a9dbb5c08
diff --git a/src/com/android/browser/BrowserSettings.java b/src/com/android/browser/BrowserSettings.java
index 255aaf8..7e07721 100644
--- a/src/com/android/browser/BrowserSettings.java
+++ b/src/com/android/browser/BrowserSettings.java
@@ -40,7 +40,6 @@
 import java.lang.ref.WeakReference;
 import java.util.Iterator;
 import java.util.LinkedList;
-import java.util.Locale;
 import java.util.WeakHashMap;
 
 import org.codeaurora.swe.AutoFillProfile;
@@ -60,35 +59,6 @@
 public class BrowserSettings implements OnSharedPreferenceChangeListener,
         PreferenceKeys {
 
-    // TODO: Do something with this UserAgent stuff
-    private static final String DESKTOP_USERAGENT = "Mozilla/5.0 (X11; " +
-        "Linux x86_64) AppleWebKit/534.24 (KHTML, like Gecko) " +
-        "Chrome/11.0.696.34 Safari/534.24";
-
-    private static final String IPHONE_USERAGENT = "Mozilla/5.0 (iPhone; U; " +
-        "CPU iPhone OS 4_0 like Mac OS X; en-us) AppleWebKit/532.9 " +
-        "(KHTML, like Gecko) Version/4.0.5 Mobile/8A293 Safari/6531.22.7";
-
-    private static final String IPAD_USERAGENT = "Mozilla/5.0 (iPad; U; " +
-        "CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 " +
-        "(KHTML, like Gecko) Version/4.0.4 Mobile/7B367 Safari/531.21.10";
-
-    private static final String FROYO_USERAGENT = "Mozilla/5.0 (Linux; U; " +
-        "Android 2.2; en-us; Nexus One Build/FRF91) AppleWebKit/533.1 " +
-        "(KHTML, like Gecko) Version/4.0 Mobile Safari/533.1";
-
-    private static final String HONEYCOMB_USERAGENT = "Mozilla/5.0 (Linux; U; " +
-        "Android 3.1; en-us; Xoom Build/HMJ25) AppleWebKit/534.13 " +
-        "(KHTML, like Gecko) Version/4.0 Safari/534.13";
-
-    private static final String USER_AGENTS[] = { null,
-            DESKTOP_USERAGENT,
-            IPHONE_USERAGENT,
-            IPAD_USERAGENT,
-            FROYO_USERAGENT,
-            HONEYCOMB_USERAGENT,
-    };
-
     private static final String TAG = "BrowserSettings";
     // The minimum min font size
     // Aka, the lower bounds for the min font size range
@@ -113,7 +83,6 @@
     private Controller mController;
     private WebStorageSizeManager mWebStorageSizeManager;
     private AutofillHandler mAutofillHandler;
-    private WeakHashMap<WebSettings, String> mCustomUserAgents;
     private static boolean sInitialized = false;
     private boolean mNeedsSharedSync = true;
     private float mFontSizeMult = 1.0f;
@@ -146,7 +115,6 @@
         mContext = context.getApplicationContext();
         mPrefs = PreferenceManager.getDefaultSharedPreferences(mContext);
         mManagedSettings = new LinkedList<WeakReference<WebSettings>>();
-        mCustomUserAgents = new WeakHashMap<WebSettings, String>();
         BackgroundHandler.execute(mSetup);
     }
 
@@ -290,7 +258,6 @@
         settings.setSaveFormData(saveFormdata());
         settings.setUseWideViewPort(isWideViewport());
         settings.setDoNotTrack(doNotTrack());
-        setUserAgent(settings);
         settings.setMediaPlaybackRequiresUserGesture(false);
         settings.setAllowMediaDownloads(allowMediaDownloads());
         setExtraHTTPRequestHeaders(settings);
@@ -318,22 +285,6 @@
         settingsClassic.setLinkPrefetchEnabled(mLinkPrefetchAllowed);
     }
 
-    private void setUserAgent(WebSettings settings){
-        String ua = mContext.getResources().getString(R.string.def_useragent);
-
-        if (!TextUtils.isEmpty(ua))
-            ua = constructUserAgent(ua);
-
-        if (TextUtils.isEmpty(ua))
-            ua = mCustomUserAgents.get(settings);
-
-        if (!TextUtils.isEmpty(ua)){
-            settings.setUserAgentString(ua);
-        } else {
-            settings.setUserAgentString(USER_AGENTS[getUserAgent()]);
-        }
-    }
-
     private void setExtraHTTPRequestHeaders(WebSettings settings){
         String headers = mContext.getResources().getString(R.string.def_extra_http_headers);
         if (!TextUtils.isEmpty(headers)){
@@ -341,19 +292,6 @@
         }
     }
 
-    private String constructUserAgent(String userAgent) {
-        try {
-            userAgent = userAgent.replaceAll("<%build_model>", Build.MODEL);
-            userAgent = userAgent.replaceAll("<%build_version>", Build.VERSION.RELEASE);
-            userAgent = userAgent.replaceAll("<%build_id>", Build.ID);
-            userAgent = userAgent.replaceAll("<%language>", Locale.getDefault().getLanguage());
-            userAgent = userAgent.replaceAll("<%country>", Locale.getDefault().getCountry());
-            return userAgent;
-        } catch (Exception ex) {
-            return null;
-        }
-    }
-
     /**
      * Syncs all the settings that have no UI
      * These cannot change, so we only need to set them once per WebSettings
@@ -650,21 +588,17 @@
     }
 
     public boolean hasDesktopUseragent(WebView view) {
-        return view != null && mCustomUserAgents.get(view.getSettings()) != null;
+        return view != null && view.getUseDesktopUserAgent();
     }
 
     public void toggleDesktopUseragent(WebView view) {
         if (view == null) {
             return;
         }
-        WebSettings settings = view.getSettings();
-        if (mCustomUserAgents.get(settings) != null) {
-            mCustomUserAgents.remove(settings);
-            setUserAgent(settings);
-        } else {
-            mCustomUserAgents.put(settings, DESKTOP_USERAGENT);
-            settings.setUserAgentString(DESKTOP_USERAGENT);
-        }
+        if (hasDesktopUseragent(view))
+            view.setUseDesktopUserAgent(false, true);
+        else
+            view.setUseDesktopUserAgent(true, true);
     }
 
     public static int getAdjustedMinimumFontSize(int rawValue) {
@@ -878,13 +812,6 @@
         return mPrefs.getBoolean(PREF_ENABLE_HARDWARE_ACCEL_SKIA, false);
     }
 
-    public int getUserAgent() {
-        if (!isDebugEnabled()) {
-            return 0;
-        }
-        return Integer.parseInt(mPrefs.getString(PREF_USER_AGENT, "0"));
-    }
-
     // -----------------------------
     // getter/setters for hidden_debug_preferences.xml
     // -----------------------------