Merge "Import translations. DO NOT MERGE"
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 14e1fc8..c29c7be 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -686,6 +686,20 @@
         <item>error</item>
     </string-array>
 
+    <!-- Titles for frame time tracking preference. [CHAR LIMIT=35] -->
+    <string-array name="track_frame_time_entries">
+        <item>Off</item>
+        <item>On screen</item>
+        <item>In adb shell dumpsys gfxinfo</item>
+    </string-array>
+
+    <!-- Values for frame time tracking preference. -->
+    <string-array name="track_frame_time_values" translatable="false" >
+        <item>false</item>
+        <item>visual</item>
+        <item>true</item>
+    </string-array>
+
     <!-- Titles for app process limit preference. [CHAR LIMIT=35] -->
     <string-array name="app_process_limit_entries">
         <item>Standard limit</item>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index ee82030..426162f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -3957,8 +3957,6 @@
 
     <!-- UI debug setting: profile time taken by hardware acceleration to render apps [CHAR LIMIT=25] -->
     <string name="track_frame_time">Profile GPU rendering</string>
-    <!-- UI debug setting: profile hardware acceleration summary [CHAR LIMIT=50] -->
-    <string name="track_frame_time_summary">Measure rendering time in adb shell dumpsys gfxinfo</string>
 
     <!-- UI debug setting: scaling factor for window animations [CHAR LIMIT=25] -->
     <string name="window_animation_scale_title">Window animation scale</string>
diff --git a/res/xml/development_prefs.xml b/res/xml/development_prefs.xml
index e67aad1..616e958 100644
--- a/res/xml/development_prefs.xml
+++ b/res/xml/development_prefs.xml
@@ -183,10 +183,12 @@
             android:title="@string/show_cpu_usage"
             android:summary="@string/show_cpu_usage_summary"/>
 
-        <CheckBoxPreference
+        <ListPreference
             android:key="track_frame_time"
             android:title="@string/track_frame_time"
-            android:summary="@string/track_frame_time_summary"/>
+            android:persistent="false"
+            android:entries="@array/track_frame_time_entries"
+            android:entryValues="@array/track_frame_time_values" />
 
         <ListPreference
             android:key="enable_opengl_traces"
diff --git a/src/com/android/settings/DevelopmentSettings.java b/src/com/android/settings/DevelopmentSettings.java
index 5e7573f..0edb437 100644
--- a/src/com/android/settings/DevelopmentSettings.java
+++ b/src/com/android/settings/DevelopmentSettings.java
@@ -166,11 +166,11 @@
     private CheckBoxPreference mShowCpuUsage;
     private CheckBoxPreference mForceHardwareUi;
     private CheckBoxPreference mForceMsaa;
-    private CheckBoxPreference mTrackFrameTime;
     private CheckBoxPreference mShowHwScreenUpdates;
     private CheckBoxPreference mShowHwLayersUpdates;
     private CheckBoxPreference mShowHwOverdraw;
     private CheckBoxPreference mDebugLayout;
+    private ListPreference mTrackFrameTime;
     private ListPreference mWindowAnimationScale;
     private ListPreference mTransitionAnimationScale;
     private ListPreference mAnimatorDurationScale;
@@ -240,7 +240,9 @@
         mShowCpuUsage = findAndInitCheckboxPref(SHOW_CPU_USAGE_KEY);
         mForceHardwareUi = findAndInitCheckboxPref(FORCE_HARDWARE_UI_KEY);
         mForceMsaa = findAndInitCheckboxPref(FORCE_MSAA_KEY);
-        mTrackFrameTime = findAndInitCheckboxPref(TRACK_FRAME_TIME_KEY);
+        mTrackFrameTime = (ListPreference) findPreference(TRACK_FRAME_TIME_KEY);
+        mAllPrefs.add(mTrackFrameTime);
+        mTrackFrameTime.setOnPreferenceChangeListener(this);
         mShowHwScreenUpdates = findAndInitCheckboxPref(SHOW_HW_SCREEN_UPDATES_KEY);
         mShowHwLayersUpdates = findAndInitCheckboxPref(SHOW_HW_LAYERS_UPDATES_KEY);
         mShowHwOverdraw = findAndInitCheckboxPref(SHOW_HW_OVERDRAW_KEY);
@@ -708,14 +710,28 @@
     }
 
     private void updateTrackFrameTimeOptions() {
-        updateCheckBox(mTrackFrameTime,
-                SystemProperties.getBoolean(HardwareRenderer.PROFILE_PROPERTY, false));
+        String value = SystemProperties.get(HardwareRenderer.PROFILE_PROPERTY);
+        if (value == null) {
+            value = "";
+        }
+
+        CharSequence[] values = mTrackFrameTime.getEntryValues();
+        for (int i = 0; i < values.length; i++) {
+            if (value.contentEquals(values[i])) {
+                mTrackFrameTime.setValueIndex(i);
+                mTrackFrameTime.setSummary(mTrackFrameTime.getEntries()[i]);
+                return;
+            }
+        }
+        mTrackFrameTime.setValueIndex(0);
+        mTrackFrameTime.setSummary(mTrackFrameTime.getEntries()[0]);
     }
 
-    private void writeTrackFrameTimeOptions() {
+    private void writeTrackFrameTimeOptions(Object newValue) {
         SystemProperties.set(HardwareRenderer.PROFILE_PROPERTY,
-                mTrackFrameTime.isChecked() ? "true" : "false");
+                newValue == null ? "" : newValue.toString());
         pokeSystemProperties();
+        updateTrackFrameTimeOptions();
     }
 
     private void updateShowHwScreenUpdatesOptions() {
@@ -1071,8 +1087,6 @@
             writeHardwareUiOptions();
         } else if (preference == mForceMsaa) {
             writeMsaaOptions();
-        } else if (preference == mTrackFrameTime) {
-            writeTrackFrameTimeOptions();
         } else if (preference == mShowHwScreenUpdates) {
             writeShowHwScreenUpdatesOptions();
         } else if (preference == mShowHwLayersUpdates) {
@@ -1108,6 +1122,9 @@
         } else if (preference == mOpenGLTraces) {
             writeOpenGLTracesOptions(newValue);
             return true;
+        } else if (preference == mTrackFrameTime) {
+            writeTrackFrameTimeOptions(newValue);
+            return true;
         } else if (preference == mEnableTracesPref) {
             writeEnableTracesOptions();
             return true;
diff --git a/src/com/android/settings/ProxySelector.java b/src/com/android/settings/ProxySelector.java
index f521d6d..9bb6dca 100644
--- a/src/com/android/settings/ProxySelector.java
+++ b/src/com/android/settings/ProxySelector.java
@@ -58,12 +58,16 @@
     Button      mClearButton;
     Button      mDefaultButton;
 
+    // Allows underscore char to supports proxies that do not
+    // follow the spec
+    private static final String HC = "a-zA-Z0-9\\_";
+
     // Matches blank input, ips, and domain names
     private static final String HOSTNAME_REGEXP =
-            "^$|^[a-zA-Z0-9]+(\\-[a-zA-Z0-9]+)*(\\.[a-zA-Z0-9]+(\\-[a-zA-Z0-9]+)*)*$";
+            "^$|^[" + HC + "]+(\\-[" + HC + "]+)*(\\.[" + HC + "]+(\\-[" + HC + "]+)*)*$";
     private static final Pattern HOSTNAME_PATTERN;
     private static final String EXCLUSION_REGEXP =
-            "$|^[a-zA-Z0-9]+(\\-[a-zA-Z0-9]+)*(\\.[a-zA-Z0-9]+(\\-[a-zA-Z0-9]+)*)*$";
+            "$|^[" + HC + "]+(\\-[" + HC + "]+)*(\\.[" + HC + "]+(\\-[" + HC + "]+)*)*$";
     private static final Pattern EXCLUSION_PATTERN;
     static {
         HOSTNAME_PATTERN = Pattern.compile(HOSTNAME_REGEXP);