diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index a0563b4..8369672 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -1485,6 +1485,19 @@
                 android:resource="@id/battery_settings" />
         </activity>
 
+        <activity android:name="Settings$AccountSettingsActivity"
+            android:label="@string/account_settings_title"
+            android:taskAffinity=""
+            android:parentActivityName="Settings">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <action android:name="android.settings.SYNC_SETTINGS" />
+                <category android:name="android.intent.category.DEFAULT" />
+            </intent-filter>
+            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
+                android:value="com.android.settings.accounts.AccountSettings" />
+        </activity>
+
         <activity android:name="Settings$AccountSyncSettingsActivity"
             android:label="@string/account_sync_settings_title"
             android:taskAffinity=""
@@ -1500,19 +1513,6 @@
                 android:resource="@id/account_settings" />
         </activity>
 
-        <activity android:name=".accounts.SyncSettingsActivity"
-            android:label="@string/account_sync_settings_title">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <action android:name="android.settings.SYNC_SETTINGS" />
-                <category android:name="android.intent.category.DEFAULT" />
-            </intent-filter>
-            <meta-data android:name="com.android.settings.FRAGMENT_CLASS"
-                       android:value="com.android.settings.accounts.AccountSyncSettings" />
-            <meta-data android:name="com.android.settings.TOP_LEVEL_HEADER_ID"
-                       android:resource="@id/account_settings" />
-        </activity>
-
         <activity android:name="com.android.settings.accounts.AddAccountSettings"
             android:theme="@android:style/Theme.Translucent.NoTitleBar"
             android:configChanges="orientation|keyboardHidden|screenSize"
@@ -1659,7 +1659,7 @@
         </activity>
 
         <activity android:name="Settings$NotificationAccessSettingsActivity"
-                  android:label="@string/manage_notification_access"
+                  android:label="@string/manage_notification_access_title"
                   android:taskAffinity="">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
@@ -1824,5 +1824,19 @@
             </intent-filter>
         </provider>
 
+        <receiver android:name=".search.HomePackageReceiver"
+                  android:exported="false">
+            <intent-filter>
+                <action android:name="android.intent.action.PACKAGE_ADDED" />
+                <action android:name="android.intent.action.PACKAGE_CHANGED" />
+                <action android:name="android.intent.action.PACKAGE_REMOVED" />
+
+                <category android:name="android.intent.category.HOME" />
+                <category android:name="android.intent.category.LAUNCHER" />
+
+                <data android:scheme="package"/>
+            </intent-filter>
+        </receiver>
+
     </application>
 </manifest>
diff --git a/res/drawable-hdpi/data_grid_border.9.png b/res/drawable-hdpi/data_grid_border.9.png
index a857fae..8d22e10 100644
--- a/res/drawable-hdpi/data_grid_border.9.png
+++ b/res/drawable-hdpi/data_grid_border.9.png
Binary files differ
diff --git a/res/drawable-hdpi/data_grid_primary.9.png b/res/drawable-hdpi/data_grid_primary.9.png
deleted file mode 100644
index 93bdc6b..0000000
--- a/res/drawable-hdpi/data_grid_primary.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/data_grid_secondary.9.png b/res/drawable-hdpi/data_grid_secondary.9.png
deleted file mode 100644
index 23330d1..0000000
--- a/res/drawable-hdpi/data_grid_secondary.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/data_sweep_left_activated.9.png b/res/drawable-hdpi/data_sweep_left_activated.9.png
deleted file mode 100644
index 7a18e20..0000000
--- a/res/drawable-hdpi/data_sweep_left_activated.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/data_sweep_left_default.9.png b/res/drawable-hdpi/data_sweep_left_default.9.png
deleted file mode 100644
index 5088150..0000000
--- a/res/drawable-hdpi/data_sweep_left_default.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/data_sweep_limit_activated.9.png b/res/drawable-hdpi/data_sweep_limit_activated.9.png
index 36be41a..598ebd3 100644
--- a/res/drawable-hdpi/data_sweep_limit_activated.9.png
+++ b/res/drawable-hdpi/data_sweep_limit_activated.9.png
Binary files differ
diff --git a/res/drawable-hdpi/data_sweep_limit_default.9.png b/res/drawable-hdpi/data_sweep_limit_default.9.png
deleted file mode 100644
index 658d1d9..0000000
--- a/res/drawable-hdpi/data_sweep_limit_default.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/data_sweep_right_activated.9.png b/res/drawable-hdpi/data_sweep_right_activated.9.png
deleted file mode 100644
index 96ffbf6..0000000
--- a/res/drawable-hdpi/data_sweep_right_activated.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/data_sweep_right_default.9.png b/res/drawable-hdpi/data_sweep_right_default.9.png
deleted file mode 100644
index 22831a9..0000000
--- a/res/drawable-hdpi/data_sweep_right_default.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/data_sweep_warning_activated.9.png b/res/drawable-hdpi/data_sweep_warning_activated.9.png
index 83b8a65..b10dff6 100644
--- a/res/drawable-hdpi/data_sweep_warning_activated.9.png
+++ b/res/drawable-hdpi/data_sweep_warning_activated.9.png
Binary files differ
diff --git a/res/drawable-hdpi/data_sweep_warning_default.9.png b/res/drawable-hdpi/data_sweep_warning_default.9.png
deleted file mode 100644
index 3b2c1a7..0000000
--- a/res/drawable-hdpi/data_sweep_warning_default.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/data_grid_border.9.png b/res/drawable-mdpi/data_grid_border.9.png
index 699c513..942f4ea 100644
--- a/res/drawable-mdpi/data_grid_border.9.png
+++ b/res/drawable-mdpi/data_grid_border.9.png
Binary files differ
diff --git a/res/drawable-mdpi/data_grid_primary.9.png b/res/drawable-mdpi/data_grid_primary.9.png
deleted file mode 100644
index 83411cf..0000000
--- a/res/drawable-mdpi/data_grid_primary.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/data_grid_secondary.9.png b/res/drawable-mdpi/data_grid_secondary.9.png
deleted file mode 100644
index 23330d1..0000000
--- a/res/drawable-mdpi/data_grid_secondary.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/data_sweep_left_activated.9.png b/res/drawable-mdpi/data_sweep_left_activated.9.png
deleted file mode 100644
index 10c0687..0000000
--- a/res/drawable-mdpi/data_sweep_left_activated.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/data_sweep_left_default.9.png b/res/drawable-mdpi/data_sweep_left_default.9.png
deleted file mode 100644
index 397c459..0000000
--- a/res/drawable-mdpi/data_sweep_left_default.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/data_sweep_limit_activated.9.png b/res/drawable-mdpi/data_sweep_limit_activated.9.png
index 924384f..f2be5ea 100644
--- a/res/drawable-mdpi/data_sweep_limit_activated.9.png
+++ b/res/drawable-mdpi/data_sweep_limit_activated.9.png
Binary files differ
diff --git a/res/drawable-mdpi/data_sweep_limit_default.9.png b/res/drawable-mdpi/data_sweep_limit_default.9.png
deleted file mode 100644
index 2b8c4cb..0000000
--- a/res/drawable-mdpi/data_sweep_limit_default.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/data_sweep_right_activated.9.png b/res/drawable-mdpi/data_sweep_right_activated.9.png
deleted file mode 100644
index 5dfe594..0000000
--- a/res/drawable-mdpi/data_sweep_right_activated.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/data_sweep_right_default.9.png b/res/drawable-mdpi/data_sweep_right_default.9.png
deleted file mode 100644
index 5b8e108..0000000
--- a/res/drawable-mdpi/data_sweep_right_default.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/data_sweep_warning_activated.9.png b/res/drawable-mdpi/data_sweep_warning_activated.9.png
index 97f93da..cd795d2 100644
--- a/res/drawable-mdpi/data_sweep_warning_activated.9.png
+++ b/res/drawable-mdpi/data_sweep_warning_activated.9.png
Binary files differ
diff --git a/res/drawable-mdpi/data_sweep_warning_default.9.png b/res/drawable-mdpi/data_sweep_warning_default.9.png
deleted file mode 100644
index 5f65750..0000000
--- a/res/drawable-mdpi/data_sweep_warning_default.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/data_grid_border.9.png b/res/drawable-xhdpi/data_grid_border.9.png
index 7557115..6d55288 100644
--- a/res/drawable-xhdpi/data_grid_border.9.png
+++ b/res/drawable-xhdpi/data_grid_border.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/data_grid_primary.9.png b/res/drawable-xhdpi/data_grid_primary.9.png
deleted file mode 100644
index ff69fd8..0000000
--- a/res/drawable-xhdpi/data_grid_primary.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/data_grid_secondary.9.png b/res/drawable-xhdpi/data_grid_secondary.9.png
deleted file mode 100644
index 09065bf..0000000
--- a/res/drawable-xhdpi/data_grid_secondary.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/data_sweep_left_activated.9.png b/res/drawable-xhdpi/data_sweep_left_activated.9.png
deleted file mode 100644
index bcd91f8..0000000
--- a/res/drawable-xhdpi/data_sweep_left_activated.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/data_sweep_left_default.9.png b/res/drawable-xhdpi/data_sweep_left_default.9.png
deleted file mode 100644
index 4abe6cd..0000000
--- a/res/drawable-xhdpi/data_sweep_left_default.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/data_sweep_limit_activated.9.png b/res/drawable-xhdpi/data_sweep_limit_activated.9.png
index 24ac571..8f1e496 100644
--- a/res/drawable-xhdpi/data_sweep_limit_activated.9.png
+++ b/res/drawable-xhdpi/data_sweep_limit_activated.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/data_sweep_limit_default.9.png b/res/drawable-xhdpi/data_sweep_limit_default.9.png
deleted file mode 100644
index 9ce466a..0000000
--- a/res/drawable-xhdpi/data_sweep_limit_default.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/data_sweep_right_activated.9.png b/res/drawable-xhdpi/data_sweep_right_activated.9.png
deleted file mode 100644
index 0a3f2db..0000000
--- a/res/drawable-xhdpi/data_sweep_right_activated.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/data_sweep_right_default.9.png b/res/drawable-xhdpi/data_sweep_right_default.9.png
deleted file mode 100644
index 1f29778..0000000
--- a/res/drawable-xhdpi/data_sweep_right_default.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/data_sweep_warning_activated.9.png b/res/drawable-xhdpi/data_sweep_warning_activated.9.png
index b624228..cfc92e1 100644
--- a/res/drawable-xhdpi/data_sweep_warning_activated.9.png
+++ b/res/drawable-xhdpi/data_sweep_warning_activated.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/data_sweep_warning_default.9.png b/res/drawable-xhdpi/data_sweep_warning_default.9.png
deleted file mode 100644
index b79e811..0000000
--- a/res/drawable-xhdpi/data_sweep_warning_default.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/data_grid_border.9.png b/res/drawable-xxhdpi/data_grid_border.9.png
new file mode 100644
index 0000000..d33a7d7
--- /dev/null
+++ b/res/drawable-xxhdpi/data_grid_border.9.png
Binary files differ
diff --git a/res/drawable-xxhdpi/data_sweep_limit_activated.9.png b/res/drawable-xxhdpi/data_sweep_limit_activated.9.png
new file mode 100644
index 0000000..0457329
--- /dev/null
+++ b/res/drawable-xxhdpi/data_sweep_limit_activated.9.png
Binary files differ
diff --git a/res/drawable-xxhdpi/data_sweep_warning_activated.9.png b/res/drawable-xxhdpi/data_sweep_warning_activated.9.png
new file mode 100644
index 0000000..670bc19
--- /dev/null
+++ b/res/drawable-xxhdpi/data_sweep_warning_activated.9.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/data_grid_border.9.png b/res/drawable-xxxhdpi/data_grid_border.9.png
new file mode 100644
index 0000000..4ddd222
--- /dev/null
+++ b/res/drawable-xxxhdpi/data_grid_border.9.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/data_sweep_limit_activated.9.png b/res/drawable-xxxhdpi/data_sweep_limit_activated.9.png
new file mode 100644
index 0000000..3159b04
--- /dev/null
+++ b/res/drawable-xxxhdpi/data_sweep_limit_activated.9.png
Binary files differ
diff --git a/res/drawable-xxxhdpi/data_sweep_warning_activated.9.png b/res/drawable-xxxhdpi/data_sweep_warning_activated.9.png
new file mode 100644
index 0000000..c12f302
--- /dev/null
+++ b/res/drawable-xxxhdpi/data_sweep_warning_activated.9.png
Binary files differ
diff --git a/res/drawable/data_sweep_left.xml b/res/drawable/data_sweep_left.xml
deleted file mode 100644
index 3532cbc..0000000
--- a/res/drawable/data_sweep_left.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:enterFadeDuration="@android:integer/config_mediumAnimTime"
-    android:exitFadeDuration="@android:integer/config_mediumAnimTime">
-
-    <item android:state_activated="true" android:state_enabled="true" android:drawable="@drawable/data_sweep_left_activated" />
-    <item android:drawable="@drawable/data_sweep_left_default" />
-</selector>
diff --git a/res/drawable/data_sweep_limit.xml b/res/drawable/data_sweep_limit.xml
index cfdbfbb..eba023f 100644
--- a/res/drawable/data_sweep_limit.xml
+++ b/res/drawable/data_sweep_limit.xml
@@ -14,10 +14,6 @@
      limitations under the License.
 -->
 
-<selector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:enterFadeDuration="@android:integer/config_mediumAnimTime"
-    android:exitFadeDuration="@android:integer/config_mediumAnimTime">
-
-    <item android:state_activated="true" android:state_enabled="true" android:drawable="@drawable/data_sweep_limit_activated" />
-    <item android:drawable="@drawable/data_sweep_limit_default" />
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/data_sweep_limit_activated" />
 </selector>
diff --git a/res/drawable/data_sweep_right.xml b/res/drawable/data_sweep_right.xml
deleted file mode 100644
index cbe2a85..0000000
--- a/res/drawable/data_sweep_right.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:enterFadeDuration="@android:integer/config_mediumAnimTime"
-    android:exitFadeDuration="@android:integer/config_mediumAnimTime">
-
-    <item android:state_activated="true" android:state_enabled="true" android:drawable="@drawable/data_sweep_right_activated" />
-    <item android:drawable="@drawable/data_sweep_right_default" />
-</selector>
diff --git a/res/drawable/data_sweep_warning.xml b/res/drawable/data_sweep_warning.xml
index 8fbe8e7..5c0a1e9 100644
--- a/res/drawable/data_sweep_warning.xml
+++ b/res/drawable/data_sweep_warning.xml
@@ -14,10 +14,6 @@
      limitations under the License.
 -->
 
-<selector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:enterFadeDuration="@android:integer/config_mediumAnimTime"
-    android:exitFadeDuration="@android:integer/config_mediumAnimTime">
-
-    <item android:state_activated="true" android:state_enabled="true" android:drawable="@drawable/data_sweep_warning_activated" />
-    <item android:drawable="@drawable/data_sweep_warning_default" />
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:drawable="@drawable/data_sweep_warning_activated" />
 </selector>
diff --git a/res/drawable/switch_inner.xml b/res/drawable/switch_inner.xml
deleted file mode 100644
index c6d39ef..0000000
--- a/res/drawable/switch_inner.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_enabled="false" android:state_checked="true">
-        <bitmap android:src="@*android:drawable/btn_switch_to_off_mtrl_000"
-                    android:tint="?android:attr/colorControlNormal"
-                    android:alpha="?android:attr/disabledAlpha" />
-    </item>
-    <item android:state_enabled="false">
-        <bitmap android:src="@*android:drawable/btn_switch_to_on_mtrl_000"
-                    android:tint="?android:attr/colorControlNormal"
-                    android:alpha="?android:attr/disabledAlpha" />
-    </item>
-    <item android:state_checked="true">
-        <bitmap android:src="@*android:drawable/btn_switch_to_off_mtrl_000"
-                    android:tint="@color/switch_accent_color" />
-    </item>
-    <item>
-        <bitmap android:src="@*android:drawable/btn_switch_to_on_mtrl_000"
-                    android:tint="?android:attr/colorControlNormal" />
-    </item>
-</selector>
-
diff --git a/res/drawable/switch_track.xml b/res/drawable/switch_track.xml
deleted file mode 100644
index 2655da0..0000000
--- a/res/drawable/switch_track.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_checked="true">
-        <nine-patch android:src="@*android:drawable/switch_track_mtrl_alpha"
-                    android:tint="@color/switch_accent_color" />
-    </item>
-    <item>
-        <nine-patch android:src="@*android:drawable/switch_track_mtrl_alpha"
-                    android:tint="?android:attr/colorControlNormal" />
-    </item>
-</selector>
diff --git a/res/layout/app_percentage_item.xml b/res/layout/app_percentage_item.xml
index 9f5ae55..83d88e0 100644
--- a/res/layout/app_percentage_item.xml
+++ b/res/layout/app_percentage_item.xml
@@ -18,14 +18,14 @@
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:minHeight="?android:attr/listPreferredItemHeight"
-    android:paddingTop="8dip"
-    android:paddingBottom="8dip"
+    android:paddingTop="14dp"
+    android:paddingBottom="14dp"
     android:columnCount="3">
 
     <ImageView
         android:id="@android:id/icon"
-        android:layout_width="@android:dimen/app_icon_size"
-        android:layout_height="@android:dimen/app_icon_size"
+        android:layout_width="40dp"
+        android:layout_height="40dp"
         android:layout_gravity="center"
         android:scaleType="fitXY"
         android:layout_rowSpan="3"
@@ -39,21 +39,23 @@
         android:layout_marginTop="2dip"
         android:singleLine="true"
         android:ellipsize="marquee"
-        android:textAppearance="?android:attr/textAppearanceMedium"
+        android:textAppearance="@android:style/TextAppearance.Material.Subhead"
+        android:textColor="?android:attr/textColorPrimary"
         android:textAlignment="viewStart" />
 
     <TextView
         android:id="@android:id/text1"
         android:layout_marginStart="6dip"
         android:layout_marginTop="2dip"
-        android:textAppearance="?android:attr/textAppearanceSmall" />
+        android:textAppearance="@android:style/TextAppearance.Material.Subhead"
+        android:textColor="?android:attr/textColorSecondary" />
 
     <ProgressBar
         android:id="@android:id/progress"
-        android:layout_height="8dip"
+        android:layout_height="wrap_content"
         android:layout_columnSpan="2"
         android:layout_gravity="fill_horizontal|top"
-        android:layout_marginTop="8dip"
+        android:layout_marginTop="4dip"
         android:max="100"
         android:progressDrawable="@drawable/data_usage_bar"
         style="?android:attr/progressBarStyleHorizontal" />
diff --git a/res/layout/data_usage_app_title.xml b/res/layout/data_usage_app_title.xml
index 272d8f2..2b5e26c 100644
--- a/res/layout/data_usage_app_title.xml
+++ b/res/layout/data_usage_app_title.xml
@@ -14,10 +14,24 @@
      limitations under the License.
 -->
 
-<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
-    android:layout_height="wrap_content"
-    android:singleLine="true"
-    android:ellipsize="marquee"
-    android:textAppearance="?android:attr/textAppearanceMedium"
-    android:textAlignment="viewStart" />
+    android:layout_height="wrap_content">
+    <TextView
+        android:id="@+id/app_title"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:singleLine="true"
+        android:ellipsize="marquee"
+        android:textAppearance="@android:style/TextAppearance.Material.Subhead"
+        android:textColor="?android:attr/textColorPrimary"
+        android:textAlignment="viewStart" />
+    <TextView
+        android:id="@+id/app_summary"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:textAppearance="@android:style/TextAppearance.Material.Body1"
+        android:textColor="?android:attr/textColorSecondary"
+        android:textAlignment="viewEnd" />
+</LinearLayout>
diff --git a/res/layout/data_usage_chart.xml b/res/layout/data_usage_chart.xml
index 76cfc6d..2f9d962 100644
--- a/res/layout/data_usage_chart.xml
+++ b/res/layout/data_usage_chart.xml
@@ -14,65 +14,48 @@
      limitations under the License.
 -->
 
+<!-- NOTE: this explicitly uses right/left padding, since the
+     graph isn't swapped in RTL languages -->
 <com.android.settings.widget.ChartDataUsageView
     xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:settings="http://schemas.android.com/apk/res/com.android.settings"
     android:id="@+id/chart"
     android:layout_width="match_parent"
     android:layout_height="@dimen/data_usage_chart_height"
-    android:layout_marginStart="-16dip"
-    android:layout_marginEnd="-16dip"
-    android:layout_marginBottom="-32dip"
-    android:paddingStart="24dip"
-    android:paddingEnd="24dip"
-    android:paddingTop="16dip"
-    android:paddingBottom="48dip"
-    settings:optimalWidth="@dimen/data_usage_chart_optimalWidth"
-    settings:optimalWidthWeight="0.4">
+    android:paddingLeft="?android:attr/listPreferredItemPaddingStart"
+    android:paddingRight="40dp"
+    android:paddingTop="16dp"
+    android:paddingBottom="24dp">
 
     <com.android.settings.widget.ChartGridView
         android:id="@+id/grid"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_gravity="start|bottom"
-        settings:primaryDrawable="@drawable/data_grid_primary"
-        settings:secondaryDrawable="@drawable/data_grid_secondary"
-        settings:borderDrawable="@drawable/data_grid_border"
-        settings:labelColor="@android:color/holo_blue_light" />
+        android:paddingBottom="24dp"
+        android:textColor="?android:attr/textColorPrimary"
+        android:textAppearance="@android:style/TextAppearance.Material.Caption"
+        settings:borderDrawable="@drawable/data_grid_border" />
 
     <com.android.settings.widget.ChartNetworkSeriesView
         android:id="@+id/series"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_gravity="start|bottom"
-        settings:strokeColor="@android:color/holo_blue_light"
-        settings:fillColor="#c033b5e5"
-        settings:fillColorSecondary="#6633b5e5" />
+        settings:strokeColor="#00000000"
+        settings:fillColor="#ff009688"
+        settings:fillColorSecondary="#ff80cbc4"
+        settings:safeRegion="3dp" />
 
     <com.android.settings.widget.ChartNetworkSeriesView
         android:id="@+id/detail_series"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:layout_gravity="start|bottom"
-        settings:strokeColor="@color/theme_accent"
-        settings:fillColor="#c0ba7f3e"
-        settings:fillColorSecondary="#60ba7f3e" />
-
-    <com.android.settings.widget.ChartSweepView
-        android:id="@+id/sweep_left"
-        android:layout_width="wrap_content"
-        android:layout_height="match_parent"
-        settings:sweepDrawable="@drawable/data_sweep_left"
-        settings:followAxis="horizontal"
-        settings:neighborMargin="5dip" />
-
-    <com.android.settings.widget.ChartSweepView
-        android:id="@+id/sweep_right"
-        android:layout_width="wrap_content"
-        android:layout_height="match_parent"
-        settings:sweepDrawable="@drawable/data_sweep_right"
-        settings:followAxis="horizontal"
-        settings:neighborMargin="5dip" />
+        settings:strokeColor="#00000000"
+        settings:fillColor="#ff009688"
+        settings:fillColorSecondary="#ff009688"
+        settings:safeRegion="3dp" />
 
     <com.android.settings.widget.ChartSweepView
         android:id="@+id/sweep_warning"
@@ -84,7 +67,8 @@
         settings:neighborMargin="5dip"
         settings:labelSize="60dip"
         settings:labelTemplate="@string/data_usage_sweep_warning"
-        settings:labelColor="#f7931d" />
+        settings:labelColor="#ff37474f"
+        settings:safeRegion="4dp" />
 
     <com.android.settings.widget.ChartSweepView
         android:id="@+id/sweep_limit"
@@ -96,6 +80,7 @@
         settings:neighborMargin="5dip"
         settings:labelSize="60dip"
         settings:labelTemplate="@string/data_usage_sweep_limit"
-        settings:labelColor="#c01a2c" />
+        settings:labelColor="#fff4511e"
+        settings:safeRegion="4dp" />
 
 </com.android.settings.widget.ChartDataUsageView>
diff --git a/res/layout/data_usage_cycle_item.xml b/res/layout/data_usage_cycle_item.xml
new file mode 100644
index 0000000..015608d
--- /dev/null
+++ b/res/layout/data_usage_cycle_item.xml
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@android:id/text1"
+    style="?android:attr/spinnerItemStyle"
+    android:singleLine="true"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:paddingStart="0dp"
+    android:ellipsize="marquee"
+    android:textAppearance="@android:style/TextAppearance.Material.Subhead"
+    android:textColor="?android:attr/textColorPrimary"
+    android:textAlignment="inherit" />
diff --git a/res/layout/data_usage_cycle_item_dropdown.xml b/res/layout/data_usage_cycle_item_dropdown.xml
new file mode 100644
index 0000000..a900521
--- /dev/null
+++ b/res/layout/data_usage_cycle_item_dropdown.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@android:id/text1"
+    style="?android:attr/spinnerDropDownItemStyle"
+    android:singleLine="true"
+    android:layout_width="match_parent"
+    android:layout_height="?android:attr/listPreferredItemHeightSmall"
+    android:ellipsize="marquee"
+    android:textAppearance="@android:style/TextAppearance.Material.Subhead"
+    android:textColor="?android:attr/textColorPrimary"
+    android:textAlignment="inherit" />
diff --git a/res/layout/data_usage_cycles.xml b/res/layout/data_usage_cycles.xml
index 02aa567..45143ec 100644
--- a/res/layout/data_usage_cycles.xml
+++ b/res/layout/data_usage_cycles.xml
@@ -15,22 +15,30 @@
 -->
 
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/cycles"
     android:layout_width="match_parent"
-    android:layout_height="40dip"
-    android:orientation="horizontal"
-    android:gravity="center_vertical">
-
-    <TextView
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_gravity="center_vertical"
-        android:text="@string/data_usage_cycle" />
+    android:layout_height="wrap_content"
+    android:minHeight="?android:attr/listPreferredItemHeightSmall"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+    android:orientation="horizontal">
 
     <Spinner
         android:id="@+id/cycles_spinner"
-        android:layout_width="0dip"
+        android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_weight="1" />
+        android:layout_gravity="center_vertical"
+        android:paddingLeft="0dp"
+        android:textAppearance="@android:style/TextAppearance.Material.Subhead"
+        android:textColor="?android:attr/textColorPrimary" />
+
+    <TextView
+        android:id="@+id/cycle_summary"
+        android:layout_width="0dp"
+        android:layout_height="wrap_content"
+        android:layout_weight="1"
+        android:layout_gravity="center_vertical"
+        android:textAppearance="@android:style/TextAppearance.Material.Subhead"
+        android:textColor="?android:attr/textColorPrimary"
+        android:textAlignment="viewEnd" />
 
 </LinearLayout>
diff --git a/res/layout/data_usage_detail.xml b/res/layout/data_usage_detail.xml
index 3bca030..914e8ca 100644
--- a/res/layout/data_usage_detail.xml
+++ b/res/layout/data_usage_detail.xml
@@ -18,6 +18,7 @@
     android:id="@+id/app_detail"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
+    android:paddingTop="4dp"
     android:orientation="vertical"
     android:visibility="gone">
 
@@ -26,82 +27,107 @@
         android:layout_height="wrap_content"
         android:layout_marginStart="?android:attr/listPreferredItemPaddingStart"
         android:layout_marginEnd="?android:attr/listPreferredItemPaddingEnd"
+        android:layout_marginBottom="16dip"
         android:orientation="horizontal">
 
+        <ImageView
+            android:id="@+id/app_icon"
+            android:layout_width="@android:dimen/app_icon_size"
+            android:layout_height="@android:dimen/app_icon_size"
+            android:layout_marginEnd="8dip"
+            android:scaleType="centerInside"
+            android:contentDescription="@null" />
+
         <LinearLayout
             android:layout_width="0dip"
             android:layout_height="wrap_content"
             android:layout_weight="1"
             android:layout_marginTop="8dip"
-            android:layout_marginEnd="8dip"
             android:orientation="vertical">
 
-            <ImageView
-                android:id="@+id/app_icon"
-                android:layout_width="48dip"
-                android:layout_height="48dip"
-                android:scaleType="centerInside"
-                android:contentDescription="@null" />
-
             <LinearLayout
                 android:id="@+id/app_titles"
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:layout_marginTop="8dip"
                 android:orientation="vertical"
+                android:paddingBottom="4dip"
                 android:textAlignment="viewStart" />
 
-            <TextView
+            <LinearLayout
                 android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="8dip"
-                android:textColor="@color/theme_accent"
-                android:text="@string/data_usage_label_foreground"
-                android:textAlignment="viewStart" />
+                android:layout_height="wrap_content">
+                <TextView
+                    android:id="@+id/app_title"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:singleLine="true"
+                    android:ellipsize="marquee"
+                    android:text="@string/data_usage_label_foreground"
+                    android:textAppearance="@android:style/TextAppearance.Material.Body1"
+                    android:textColor="?android:attr/textColorSecondary"
+                    android:textAlignment="viewStart" />
+                <TextView
+                    android:id="@+id/app_foreground"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:textAppearance="@android:style/TextAppearance.Material.Body1"
+                    android:textColor="?android:attr/textColorSecondary"
+                    android:textAlignment="viewEnd" />
+            </LinearLayout>
 
-            <TextView
-                android:id="@+id/app_foreground"
+            <LinearLayout
                 android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:textColor="@color/theme_accent"
-                android:textAlignment="viewStart" />
-
-            <TextView
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="8dip"
-                android:text="@string/data_usage_label_background"
-                android:textAlignment="viewStart" />
-
-            <TextView
-                android:id="@+id/app_background"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:textAlignment="viewStart" />
+                android:layout_height="wrap_content">
+                <TextView
+                    android:id="@+id/app_title"
+                    android:layout_width="0dp"
+                    android:layout_height="wrap_content"
+                    android:layout_weight="1"
+                    android:singleLine="true"
+                    android:ellipsize="marquee"
+                    android:text="@string/data_usage_label_background"
+                    android:textAppearance="@android:style/TextAppearance.Material.Body1"
+                    android:textColor="?android:attr/textColorSecondary"
+                    android:textAlignment="viewStart" />
+                <TextView
+                    android:id="@+id/app_background"
+                    android:layout_width="wrap_content"
+                    android:layout_height="wrap_content"
+                    android:textAppearance="@android:style/TextAppearance.Material.Body1"
+                    android:textColor="?android:attr/textColorSecondary"
+                    android:textAlignment="viewEnd" />
+            </LinearLayout>
 
         </LinearLayout>
 
-        <com.android.settings.widget.PieChartView
-            android:id="@+id/app_pie_chart"
-            android:layout_width="160dip"
-            android:layout_height="160dip" />
-
     </LinearLayout>
 
-    <Button
-        android:id="@+id/app_settings"
+    <LinearLayout
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:layout_marginStart="?android:attr/listPreferredItemPaddingStart"
         android:layout_marginEnd="?android:attr/listPreferredItemPaddingEnd"
-        android:layout_marginTop="16dip"
         android:layout_marginBottom="16dip"
-        android:text="@string/data_usage_app_settings" />
+        android:orientation="horizontal">
+        <Space
+            android:layout_width="0dp"
+            android:layout_height="0dp"
+            android:layout_weight="0.5" />
+        <Button
+            android:id="@+id/app_settings"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="0.5"
+            android:text="@string/data_usage_app_settings" />
+    </LinearLayout>
 
     <LinearLayout
         android:id="@+id/app_switches"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:orientation="vertical" />
+        android:orientation="vertical"
+        android:showDividers="beginning|middle"
+        android:divider="?android:attr/listDivider" />
 
 </LinearLayout>
diff --git a/res/layout/data_usage_header.xml b/res/layout/data_usage_header.xml
index bc92c34..2fcceec 100644
--- a/res/layout/data_usage_header.xml
+++ b/res/layout/data_usage_header.xml
@@ -19,9 +19,7 @@
     android:layout_height="wrap_content"
     android:orientation="vertical"
     android:clipChildren="false"
-    android:clipToPadding="false"
-    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
-    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
+    android:clipToPadding="false">
 
     <FrameLayout
         android:id="@+id/network_switches_container"
@@ -36,29 +34,39 @@
             android:divider="?android:attr/listDivider" />
     </FrameLayout>
 
-    <include layout="@layout/data_usage_cycles" />
     <include layout="@layout/data_usage_chart" />
 
     <TextView
-        android:id="@+id/usage_summary"
+        android:id="@+id/disclaimer"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
+        android:gravity="center_vertical"
+        android:text="@string/data_usage_disclaimer"
+        android:textAppearance="@android:style/TextAppearance.Material.Body1"
+        android:textColor="?android:attr/textColorSecondary"
         android:paddingStart="?android:attr/listPreferredItemPaddingStart"
         android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
-        android:paddingTop="8dip"
-        android:paddingBottom="8dip"
-        android:textAppearance="?android:attr/textAppearanceSmall" />
+        android:paddingTop="8dp"
+        android:paddingBottom="0dp" />
 
     <TextView
         android:id="@android:id/empty"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
+        android:gravity="center_vertical"
         android:visibility="gone"
+        android:text="@string/data_usage_empty"
+        android:textAppearance="@android:style/TextAppearance.Material.Body1"
+        android:textColor="?android:attr/textColorSecondary"
         android:paddingStart="?android:attr/listPreferredItemPaddingStart"
         android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
-        android:paddingBottom="8dip"
-        android:text="@string/data_usage_empty"
-        android:textAppearance="?android:attr/textAppearanceSmall" />
+        android:paddingTop="4dp"
+        android:paddingBottom="0dp" />
+
+    <View
+        android:id="@+id/stupid_padding"
+        android:layout_width="match_parent"
+        android:layout_height="8dp" />
 
     <include layout="@layout/data_usage_detail" />
 
diff --git a/res/layout/preference.xml b/res/layout/preference.xml
index 9645679..bfe5da4 100644
--- a/res/layout/preference.xml
+++ b/res/layout/preference.xml
@@ -17,23 +17,26 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
-    android:minHeight="48dip"
+    android:minHeight="?android:attr/listPreferredItemHeightSmall"
     android:gravity="center_vertical"
+    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
+    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
     android:background="?android:attr/selectableItemBackground">
 
     <RelativeLayout
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_weight="1"
-        android:paddingTop="6dip"
-        android:paddingBottom="6dip">
+        android:paddingTop="16dip"
+        android:paddingBottom="16dip">
 
         <TextView
             android:id="@+android:id/title"
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:singleLine="true"
-            android:textAppearance="?android:attr/textAppearanceMedium"
+            android:textAppearance="@android:style/TextAppearance.Material.Subhead"
+            android:textColor="?android:attr/textColorPrimary"
             android:ellipsize="marquee"
             android:fadingEdge="horizontal" />
 
@@ -44,9 +47,10 @@
             android:layout_below="@android:id/title"
             android:layout_alignStart="@android:id/title"
             android:visibility="gone"
-            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:textAlignment="viewStart"
+            android:textAppearance="@android:style/TextAppearance.Material.Body1"
             android:textColor="?android:attr/textColorSecondary"
-            android:maxLines="4" />
+            android:maxLines="10" />
 
     </RelativeLayout>
 
@@ -54,7 +58,8 @@
         android:id="@android:id/widget_frame"
         android:layout_width="wrap_content"
         android:layout_height="match_parent"
-        android:gravity="center_vertical"
+        android:minWidth="58dip"
+        android:gravity="end|center_vertical"
         android:orientation="vertical" />
 
 </LinearLayout>
diff --git a/res/layout/switch_bar.xml b/res/layout/switch_bar.xml
index 6b37e4c..5dbeb55 100644
--- a/res/layout/switch_bar.xml
+++ b/res/layout/switch_bar.xml
@@ -31,7 +31,8 @@
             android:layout_width="wrap_content"
             android:layout_height="wrap_content"
             android:layout_gravity="center_vertical"
-            android:background="@null" />
+            android:background="@null"
+            android:theme="@style/ThemeOverlay.SwitchBar" />
 
 </merge>
 
diff --git a/res/menu/account_settings.xml b/res/menu/account_settings.xml
new file mode 100644
index 0000000..88feb66
--- /dev/null
+++ b/res/menu/account_settings.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<menu xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:id="@+id/account_settings_menu_auto_sync"
+        android:title="@string/account_settings_menu_auto_sync"
+        android:checkable="true" />
+    <item
+        android:id="@+id/account_settings_menu_auto_sync_personal"
+        android:title="@string/account_settings_menu_auto_sync_personal"
+        android:checkable="true" />
+    <item
+        android:id="@+id/account_settings_menu_auto_sync_work"
+        android:title="@string/account_settings_menu_auto_sync_work"
+        android:checkable="true" />
+</menu>
diff --git a/res/menu/data_usage.xml b/res/menu/data_usage.xml
index ea3effa..749eb16 100644
--- a/res/menu/data_usage.xml
+++ b/res/menu/data_usage.xml
@@ -16,33 +16,24 @@
 
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
     <item
-        android:id="@+id/data_usage_menu_roaming"
-        android:title="@string/data_usage_menu_roaming"
-        android:checkable="true" />
-    <item
         android:id="@+id/data_usage_menu_restrict_background"
-        android:title="@string/data_usage_menu_restrict_background"
-        android:checkable="true" />
-    <item
-        android:id="@+id/data_usage_menu_split_4g"
-        android:title="@string/data_usage_menu_split_4g"
-        android:checkable="true" />
-    <item
-        android:id="@+id/data_usage_menu_auto_sync"
-        android:title="@string/data_usage_menu_auto_sync"
-        android:checkable="true" />
+        android:title="@string/data_usage_menu_restrict_background" />
     <item
         android:id="@+id/data_usage_menu_show_wifi"
-        android:title="@string/data_usage_menu_show_wifi"
-        android:checkable="true" />
+        android:title="@string/data_usage_menu_show_wifi" />
     <item
         android:id="@+id/data_usage_menu_show_ethernet"
-        android:title="@string/data_usage_menu_show_ethernet"
-        android:checkable="true" />
+        android:title="@string/data_usage_menu_show_ethernet" />
     <item
         android:id="@+id/data_usage_menu_metered"
         android:title="@string/data_usage_menu_metered" />
     <item
+        android:id="@+id/data_usage_menu_sim_cards"
+        android:title="@string/data_usage_menu_sim_cards" />
+    <item
+        android:id="@+id/data_usage_menu_cellular_networks"
+        android:title="@string/data_usage_menu_cellular_networks" />
+    <item
         android:id="@+id/data_usage_menu_help"
         android:title="@string/help_label" />
 </menu>
diff --git a/res/values/arrays.xml b/res/values/arrays.xml
index 7de1652..4b69114 100644
--- a/res/values/arrays.xml
+++ b/res/values/arrays.xml
@@ -310,7 +310,6 @@
    <!-- Note that adding/removing/moving the items will need wifi settings code change. -->
     <string-array name="wifi_ap_security">
         <item>@string/wifi_security_none</item>
-        <item>@string/wifi_security_wpa</item>
         <item>@string/wifi_security_wpa2</item>
     </string-array>
 
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index 2987de1..675df62 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -75,19 +75,22 @@
         <attr name="labelSize" format="dimension" />
         <attr name="labelTemplate" format="reference" />
         <attr name="labelColor" format="color" />
+        <attr name="safeRegion" format="dimension" />
     </declare-styleable>
 
     <declare-styleable name="ChartGridView">
         <attr name="primaryDrawable" format="reference" />
         <attr name="secondaryDrawable" format="reference" />
         <attr name="borderDrawable" format="reference" />
-        <attr name="labelColor" />
+        <attr name="android:textColor" />
+        <attr name="android:textAppearance" />
     </declare-styleable>
 
     <declare-styleable name="ChartNetworkSeriesView">
         <attr name="strokeColor" format="color" />
         <attr name="fillColor" format="color" />
         <attr name="fillColorSecondary" format="color" />
+        <attr name="safeRegion" />
     </declare-styleable>
 
     <attr name="apnPreferenceStyle" format="reference" />
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index b7b2af0..cb0369f 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -31,7 +31,7 @@
 
     <dimen name="battery_history_chart_height">120dp</dimen>
 
-    <dimen name="data_usage_chart_height">252dip</dimen>
+    <dimen name="data_usage_chart_height">228dip</dimen>
     <dimen name="data_usage_chart_optimalWidth">440dip</dimen>
 
     <dimen name="volume_seekbar_side_margin">8dip</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index bbce4e4..77fd6de 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4784,20 +4784,37 @@
     <string name="data_usage_data_limit">Set data limit</string>
     <!-- Title for option to pick visible time range from a list available usage periods. [CHAR LIMIT=25] -->
     <string name="data_usage_cycle">Data usage cycle</string>
-    <!-- Title for checkbox menu option to enable mobile data when roaming. [CHAR LIMIT=26] -->
+    <!-- Title for menu option to enable mobile data when roaming. [CHAR LIMIT=26] -->
     <string name="data_usage_menu_roaming">Data roaming</string>
-    <!-- Title for checkbox menu option to restrict background data usage. [CHAR LIMIT=26] -->
+    <!-- Title for menu option to restrict background data usage. [CHAR LIMIT=26] -->
     <string name="data_usage_menu_restrict_background">Restrict background data</string>
-    <!-- Title for checkbox menu option to show 4G mobile data usage separate from other mobile data usage. [CHAR LIMIT=26] -->
+    <!-- Title for menu option to allow background data usage. [CHAR LIMIT=26] -->
+    <string name="data_usage_menu_allow_background">Allow background data</string>
+    <!-- Title for menu option to show 4G mobile data usage separate from other mobile data usage. [CHAR LIMIT=26] -->
     <string name="data_usage_menu_split_4g">Separate 4G usage</string>
-    <!-- Title for checkbox menu option to show Wi-Fi data usage. [CHAR LIMIT=26] -->
+    <!-- Title for menu option to show Wi-Fi data usage. [CHAR LIMIT=26] -->
     <string name="data_usage_menu_show_wifi">Show Wi\u2011Fi</string>
-    <!-- Title for checkbox menu option to show Ethernet data usage. [CHAR LIMIT=26] -->
+    <!-- Title for menu option to hide Wi-Fi data usage. [CHAR LIMIT=26] -->
+    <string name="data_usage_menu_hide_wifi">Hide Wi\u2011Fi</string>
+    <!-- Title for menu option to show Ethernet data usage. [CHAR LIMIT=26] -->
     <string name="data_usage_menu_show_ethernet">Show Ethernet usage</string>
+    <!-- Title for menu option to hide Ethernet data usage. [CHAR LIMIT=26] -->
+    <string name="data_usage_menu_hide_ethernet">Hide Ethernet usage</string>
     <!-- Title for menu option to configure metered networks. [CHAR LIMIT=26] -->
-    <string name="data_usage_menu_metered">Mobile hotspots</string>
-    <!--  Title for menu option to enable global auto-sync of account data -->
+    <string name="data_usage_menu_metered">Network restrictions</string>
+    <!-- Title for menu option to enable global auto-sync of account data -->
     <string name="data_usage_menu_auto_sync">Auto-sync data</string>
+    <!-- Title for menu option to show details for all SIM cards. [CHAR LIMIT=26] -->
+    <string name="data_usage_menu_sim_cards">SIM cards</string>
+    <!-- Title for menu option to show details for all cellular networks. [CHAR LIMIT=26] -->
+    <string name="data_usage_menu_cellular_networks">Cellular networks</string>
+
+    <!--  Title for menu option to enable global auto-sync of personal account data [CHAR LIMIT=30] -->
+    <string name="account_settings_menu_auto_sync">Auto-sync data</string>
+    <!--  Title for menu option to enable global auto-sync of personal account data [CHAR LIMIT=30] -->
+    <string name="account_settings_menu_auto_sync_personal">Auto-sync personal data</string>
+    <!--  Title for menu option to enable global auto-sync of work account data [CHAR LIMIT=30] -->
+    <string name="account_settings_menu_auto_sync_work">Auto-sync work data</string>
 
     <!-- Title for option to change data usage cycle day. [CHAR LIMIT=32] -->
     <string name="data_usage_change_cycle">Change cycle\u2026</string>
@@ -4852,7 +4869,7 @@
     <!-- Data Usage Background label.  [CHAR LIMIT=40] -->
     <string name="data_usage_background_label">Background:</string>
     <!-- Button title for launching application-specific data usage settings. [CHAR LIMIT=32] -->
-    <string name="data_usage_app_settings">View app settings</string>
+    <string name="data_usage_app_settings">App settings</string>
     <!-- Checkbox label that restricts background data usage of a specific application. [CHAR LIMIT=40] -->
     <string name="data_usage_app_restrict_background">Restrict app background data</string>
     <!-- Summary message for checkbox that restricts background data usage of a specific application. [CHAR LIMIT=64] -->
@@ -4924,15 +4941,18 @@
     <string name="data_usage_total_during_range_mobile" product="default"><xliff:g id="range" example="Jul 1 - Jul 31">%2$s</xliff:g>: about <xliff:g id="total" example="128KB">%1$s</xliff:g> used, as measured by your phone. Your carrier\'s data usage accounting may differ.</string>
 
     <!-- Dialog title for selecting metered networks. [CHAR LIMIT=25] -->
-    <string name="data_usage_metered_title">Mobile hotspots</string>
+    <string name="data_usage_metered_title">Network restrictions</string>
     <!-- Dialog body for selecting paid networks. [CHAR LIMIT=NONE] -->
-    <string name="data_usage_metered_body">Select the Wi\u2011Fi networks which are mobile hotspots.  Apps can be restricted from using these networks when in the background.  Apps may also warn before using these networks for large downloads.</string>
+    <string name="data_usage_metered_body">Metered networks are treated like cellular when background data is restricted. Apps may warn before using these networks for large downloads.</string>
     <!-- Header for list of mobile networks. [CHAR LIMIT=32] -->
     <string name="data_usage_metered_mobile">Cellular networks</string>
     <!-- Header for list of Wi-Fi networks. [CHAR LIMIT=32] -->
-    <string name="data_usage_metered_wifi">Wi\u2011Fi networks</string>
+    <string name="data_usage_metered_wifi">Metered Wi\u2011Fi networks</string>
     <!-- Body text prompting user to enable Wi-Fi to configure metered networks. [CHAR LIMIT=64] -->
-    <string name="data_usage_metered_wifi_disabled">To select mobile hotspots, turn Wi\u2011Fi on.</string>
+    <string name="data_usage_metered_wifi_disabled">To select metered networks, turn Wi\u2011Fi on.</string>
+
+    <!-- Disclaimer string for data usage measured by device. [CHAR LIMIT=80] -->
+    <string name="data_usage_disclaimer">Carrier data accounting may differ from your device.</string>
 
     <!-- Button at the bottom of the CryptKeeper screen to make an emergency call. -->
     <string name="cryptkeeper_emergency_call">Emergency call</string>
@@ -5457,6 +5477,7 @@
     <string name="keywords_wifi">wifi wi-fi network connection</string>
     <string name="keywords_more_default_sms_app">text message</string>
     <string name="keywords_more_mobile_networks">cellular cell carrier wireless</string>
+    <string name="keywords_home">launcher</string>
     <string name="keywords_display">screen touchscreen</string>
     <string name="keywords_display_brightness_level">dim screen touchscreen</string>
     <string name="keywords_display_auto_brightness">dim screen touchscreen</string>
@@ -5708,7 +5729,7 @@
     <string name="zen_mode_entry_conditions_title">Automatically turn on</string>
 
     <!-- [CHAR LIMIT=40] General divider text when concatenating multiple items in a text summary -->
-    <string name="summary_divider_text">, </string>
+    <string name="summary_divider_text">,\u0020</string>
 
     <!-- [CHAR LIMIT=40] Zen mode settings: Entry conditions option: value when blank -->
     <string name="zen_mode_entry_conditions_summary_none">Never</string>
@@ -5732,7 +5753,7 @@
     <string name="zen_mode_from_starred">Starred contacts only</string>
 
     <!-- [CHAR LIMIT=60] Zen mode settings: Reminder text about alarms -->
-    <string name="zen_mode_alarm_info">Alarms and timers are always priority interruptions</string>
+    <string name="zen_mode_alarm_info">Alarms are always priority interruptions</string>
 
     <!-- [CHAR LIMIT=20] Zen mode settings: When option -->
     <string name="zen_mode_when">Automatically turn on</string>
diff --git a/res/values/themes.xml b/res/values/themes.xml
index d54819d..898274f 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -204,4 +204,10 @@
         <item name="@android:numbersBackgroundColor">@android:color/white</item>
     </style>
 
+    <!-- Used to color the switch bar controls -->
+    <style name="ThemeOverlay.SwitchBar" parent="@android:style/ThemeOverlay">
+        <!-- Used by controls, e.g. CheckBox, ProgressBar, etc. -->
+        <item name="android:colorAccent">@color/switch_accent_color</item>
+    </style>
+
 </resources>
diff --git a/res/xml/data_usage_metered_prefs.xml b/res/xml/data_usage_metered_prefs.xml
index 5026a35..5915101 100644
--- a/res/xml/data_usage_metered_prefs.xml
+++ b/res/xml/data_usage_metered_prefs.xml
@@ -17,11 +17,6 @@
 <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
                   android:title="@string/display_settings">
 
-    <Preference
-        android:summary="@string/data_usage_metered_body"
-        android:persistent="false"
-        android:selectable="false" />
-
     <PreferenceCategory
         android:key="mobile"
         android:title="@string/data_usage_metered_mobile"
@@ -40,4 +35,9 @@
 
     </PreferenceCategory>
 
+    <Preference
+        android:summary="@string/data_usage_metered_body"
+        android:persistent="false"
+        android:selectable="false" />
+
 </PreferenceScreen>
diff --git a/res/xml/zen_mode_settings.xml b/res/xml/zen_mode_settings.xml
index 6f2fc2e..a4084cb 100644
--- a/res/xml/zen_mode_settings.xml
+++ b/res/xml/zen_mode_settings.xml
@@ -31,17 +31,25 @@
 
         <SwitchPreference
             android:key="phone_calls"
+            android:title="@string/zen_mode_phone_calls"
             android:persistent="false"
             android:switchTextOff=""
-            android:switchTextOn=""
-            android:title="@string/zen_mode_phone_calls" />
+            android:switchTextOn="" />
 
         <SwitchPreference
             android:key="messages"
+            android:title="@string/zen_mode_messages"
             android:persistent="false"
             android:switchTextOff=""
-            android:switchTextOn=""
-            android:title="@string/zen_mode_messages" />
+            android:switchTextOn="" />
+
+        <Preference
+            android:key="alarm_info"
+            android:title=""
+            android:textAppearance="?android:attr/textAppearanceSmall"
+            android:textColor="?android:attr/colorForegroundInverse"
+            android:selectable="false"
+            android:summary="@string/zen_mode_alarm_info" />
 
     </PreferenceCategory>
 
diff --git a/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java
index dbef6cb..f8f285f 100644
--- a/src/com/android/settings/DataUsageSummary.java
+++ b/src/com/android/settings/DataUsageSummary.java
@@ -55,6 +55,7 @@
 import android.app.Fragment;
 import android.app.FragmentTransaction;
 import android.app.LoaderManager.LoaderCallbacks;
+import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.DialogInterface;
@@ -63,6 +64,7 @@
 import android.content.SharedPreferences;
 import android.content.pm.PackageManager;
 import android.content.res.Resources;
+import android.content.res.TypedArray;
 import android.graphics.Color;
 import android.graphics.drawable.ColorDrawable;
 import android.graphics.drawable.Drawable;
@@ -107,9 +109,6 @@
 import android.widget.ArrayAdapter;
 import android.widget.BaseAdapter;
 import android.widget.Button;
-import android.widget.CheckBox;
-import android.widget.CompoundButton;
-import android.widget.CompoundButton.OnCheckedChangeListener;
 import android.widget.ImageView;
 import android.widget.LinearLayout;
 import android.widget.ListView;
@@ -138,7 +137,6 @@
 import com.android.settings.search.SearchIndexableRaw;
 import com.android.settings.widget.ChartDataUsageView;
 import com.android.settings.widget.ChartDataUsageView.DataUsageChartListener;
-import com.android.settings.widget.PieChartView;
 import com.google.android.collect.Lists;
 
 import libcore.util.Objects;
@@ -170,7 +168,6 @@
     private static final String TAB_ETHERNET = "ethernet";
 
     private static final String TAG_CONFIRM_DATA_DISABLE = "confirmDataDisable";
-    private static final String TAG_CONFIRM_DATA_ROAMING = "confirmDataRoaming";
     private static final String TAG_CONFIRM_LIMIT = "confirmLimit";
     private static final String TAG_CYCLE_EDITOR = "cycleEditor";
     private static final String TAG_WARNING_EDITOR = "warningEditor";
@@ -189,15 +186,11 @@
     private static final int LOADER_CHART_DATA = 2;
     private static final int LOADER_SUMMARY = 3;
 
-    private static final int FOREGROUND_BYTES_COLOR = 0xff009688;
-    private static final int DEFAULT_BYTES_COLOR = 0xffced7db;
-
     private INetworkManagementService mNetworkService;
     private INetworkStatsService mStatsService;
     private NetworkPolicyManager mPolicyManager;
     private TelephonyManager mTelephonyManager;
 
-
     private INetworkStatsSession mStatsSession;
 
     private static final String PREF_FILE = "data_usage";
@@ -219,29 +212,33 @@
 
     private ViewGroup mNetworkSwitchesContainer;
     private LinearLayout mNetworkSwitches;
+    private boolean mDataEnabledSupported;
     private Switch mDataEnabled;
     private View mDataEnabledView;
-    private CheckBox mDisableAtLimit;
+    private boolean mDisableAtLimitSupported;
+    private Switch mDisableAtLimit;
     private View mDisableAtLimitView;
 
     private View mCycleView;
     private Spinner mCycleSpinner;
     private CycleAdapter mCycleAdapter;
+    private TextView mCycleSummary;
 
     private ChartDataUsageView mChart;
-    private TextView mUsageSummary;
+    private View mDisclaimer;
     private TextView mEmpty;
+    private View mStupidPadding;
 
     private View mAppDetail;
     private ImageView mAppIcon;
     private ViewGroup mAppTitles;
-    private PieChartView mAppPieChart;
+    private TextView mAppTotal;
     private TextView mAppForeground;
     private TextView mAppBackground;
     private Button mAppSettings;
 
     private LinearLayout mAppSwitches;
-    private CheckBox mAppRestrict;
+    private Switch mAppRestrict;
     private View mAppRestrictView;
 
     private boolean mShowWifi = false;
@@ -259,9 +256,11 @@
     private String mCurrentTab = null;
     private String mIntentTab = null;
 
-    private MenuItem mMenuDataRoaming;
     private MenuItem mMenuRestrictBackground;
-    private MenuItem mMenuAutoSync;
+    private MenuItem mMenuShowWifi;
+    private MenuItem mMenuShowEthernet;
+    private MenuItem mMenuSimCards;
+    private MenuItem mMenuCellularNetworks;
 
     /** Flag used to ignore listeners during binding. */
     private boolean mBinding;
@@ -359,13 +358,17 @@
             mNetworkSwitches = (LinearLayout) mHeader.findViewById(R.id.network_switches);
 
             mDataEnabled = new Switch(inflater.getContext());
+            mDataEnabled.setClickable(false);
+            mDataEnabled.setFocusable(false);
             mDataEnabledView = inflatePreference(inflater, mNetworkSwitches, mDataEnabled);
             mDataEnabledView.setTag(R.id.preference_highlight_key,
                     DATA_USAGE_ENABLE_MOBILE_KEY);
-            mDataEnabled.setOnCheckedChangeListener(mDataEnabledListener);
+            mDataEnabledView.setClickable(true);
+            mDataEnabledView.setFocusable(true);
+            mDataEnabledView.setOnClickListener(mDataEnabledListener);
             mNetworkSwitches.addView(mDataEnabledView);
 
-            mDisableAtLimit = new CheckBox(inflater.getContext());
+            mDisableAtLimit = new Switch(inflater.getContext());
             mDisableAtLimit.setClickable(false);
             mDisableAtLimit.setFocusable(false);
             mDisableAtLimitView = inflatePreference(inflater, mNetworkSwitches, mDisableAtLimit);
@@ -375,15 +378,16 @@
             mDisableAtLimitView.setFocusable(true);
             mDisableAtLimitView.setOnClickListener(mDisableAtLimitListener);
             mNetworkSwitches.addView(mDisableAtLimitView);
-        }
 
-        // bind cycle dropdown
-        mCycleView = mHeader.findViewById(R.id.cycles);
-        mCycleView.setTag(R.id.preference_highlight_key, DATA_USAGE_CYCLE_KEY);
-        mCycleSpinner = (Spinner) mCycleView.findViewById(R.id.cycles_spinner);
-        mCycleAdapter = new CycleAdapter(context);
-        mCycleSpinner.setAdapter(mCycleAdapter);
-        mCycleSpinner.setOnItemSelectedListener(mCycleListener);
+            mCycleView = inflater.inflate(R.layout.data_usage_cycles, mNetworkSwitches, false);
+            mCycleView.setTag(R.id.preference_highlight_key, DATA_USAGE_CYCLE_KEY);
+            mCycleSpinner = (Spinner) mCycleView.findViewById(R.id.cycles_spinner);
+            mCycleAdapter = new CycleAdapter(context);
+            mCycleSpinner.setAdapter(mCycleAdapter);
+            mCycleSpinner.setOnItemSelectedListener(mCycleListener);
+            mCycleSummary = (TextView) mCycleView.findViewById(R.id.cycle_summary);
+            mNetworkSwitches.addView(mCycleView);
+        }
 
         mChart = (ChartDataUsageView) mHeader.findViewById(R.id.chart);
         mChart.setListener(mChartListener);
@@ -394,7 +398,6 @@
             mAppDetail = mHeader.findViewById(R.id.app_detail);
             mAppIcon = (ImageView) mAppDetail.findViewById(R.id.app_icon);
             mAppTitles = (ViewGroup) mAppDetail.findViewById(R.id.app_titles);
-            mAppPieChart = (PieChartView) mAppDetail.findViewById(R.id.app_pie_chart);
             mAppForeground = (TextView) mAppDetail.findViewById(R.id.app_foreground);
             mAppBackground = (TextView) mAppDetail.findViewById(R.id.app_background);
             mAppSwitches = (LinearLayout) mAppDetail.findViewById(R.id.app_switches);
@@ -402,7 +405,7 @@
             mAppSettings = (Button) mAppDetail.findViewById(R.id.app_settings);
             mAppSettings.setOnClickListener(mAppSettingsListener);
 
-            mAppRestrict = new CheckBox(inflater.getContext());
+            mAppRestrict = new Switch(inflater.getContext());
             mAppRestrict.setClickable(false);
             mAppRestrict.setFocusable(false);
             mAppRestrictView = inflatePreference(inflater, mAppSwitches, mAppRestrict);
@@ -412,8 +415,9 @@
             mAppSwitches.addView(mAppRestrictView);
         }
 
-        mUsageSummary = (TextView) mHeader.findViewById(R.id.usage_summary);
+        mDisclaimer = mHeader.findViewById(R.id.disclaimer);
         mEmpty = (TextView) mHeader.findViewById(android.R.id.empty);
+        mStupidPadding = mHeader.findViewById(R.id.stupid_padding);
 
         mAdapter = new DataUsageAdapter(mUidDetailProvider, mInsetSide);
         mListView.setOnItemClickListener(mListListener);
@@ -480,38 +484,24 @@
         final boolean appDetailMode = isAppDetailMode();
         final boolean isOwner = ActivityManager.getCurrentUser() == UserHandle.USER_OWNER;
 
-        mMenuDataRoaming = menu.findItem(R.id.data_usage_menu_roaming);
-        mMenuDataRoaming.setVisible(hasReadyMobileRadio(context) && !appDetailMode);
-        mMenuDataRoaming.setChecked(getDataRoaming());
+        mMenuShowWifi = menu.findItem(R.id.data_usage_menu_show_wifi);
+        // TODO: Define behavior of this sync button. See: http://b/16076571
+        if (hasWifiRadio(context) && hasReadyMobileRadio(context)) {
+            mMenuShowWifi.setVisible(!appDetailMode);
+        } else {
+            mMenuShowWifi.setVisible(false);
+        }
+
+        mMenuShowEthernet = menu.findItem(R.id.data_usage_menu_show_ethernet);
+        if (hasEthernet(context) && hasReadyMobileRadio(context)) {
+            mMenuShowEthernet.setVisible(!appDetailMode);
+        } else {
+            mMenuShowEthernet.setVisible(false);
+        }
 
         mMenuRestrictBackground = menu.findItem(R.id.data_usage_menu_restrict_background);
         mMenuRestrictBackground.setVisible(
                 hasReadyMobileRadio(context) && isOwner && !appDetailMode);
-        mMenuRestrictBackground.setChecked(mPolicyManager.getRestrictBackground());
-
-        mMenuAutoSync = menu.findItem(R.id.data_usage_menu_auto_sync);
-        mMenuAutoSync.setChecked(ContentResolver.getMasterSyncAutomatically());
-        mMenuAutoSync.setVisible(!appDetailMode);
-
-        final MenuItem split4g = menu.findItem(R.id.data_usage_menu_split_4g);
-        split4g.setVisible(hasReadyMobile4gRadio(context) && isOwner && !appDetailMode);
-        split4g.setChecked(isMobilePolicySplit());
-
-        final MenuItem showWifi = menu.findItem(R.id.data_usage_menu_show_wifi);
-        if (hasWifiRadio(context) && hasReadyMobileRadio(context)) {
-            showWifi.setVisible(!appDetailMode);
-            showWifi.setChecked(mShowWifi);
-        } else {
-            showWifi.setVisible(false);
-        }
-
-        final MenuItem showEthernet = menu.findItem(R.id.data_usage_menu_show_ethernet);
-        if (hasEthernet(context) && hasReadyMobileRadio(context)) {
-            showEthernet.setVisible(!appDetailMode);
-            showEthernet.setChecked(mShowEthernet);
-        } else {
-            showEthernet.setVisible(false);
-        }
 
         final MenuItem metered = menu.findItem(R.id.data_usage_menu_metered);
         if (hasReadyMobileRadio(context) || hasWifiRadio(context)) {
@@ -520,6 +510,17 @@
             metered.setVisible(false);
         }
 
+        // TODO: show when multiple sims available
+        mMenuSimCards = menu.findItem(R.id.data_usage_menu_sim_cards);
+        mMenuSimCards.setVisible(false);
+
+        mMenuCellularNetworks = menu.findItem(R.id.data_usage_menu_cellular_networks);
+        if (hasReadyMobileRadio(context)) {
+            mMenuCellularNetworks.setVisible(!appDetailMode);
+        } else {
+            mMenuCellularNetworks.setVisible(false);
+        }
+
         final MenuItem help = menu.findItem(R.id.data_usage_menu_help);
         String helpUrl;
         if (!TextUtils.isEmpty(helpUrl = getResources().getString(R.string.help_url_data_usage))) {
@@ -527,23 +528,35 @@
         } else {
             help.setVisible(false);
         }
+
+        updateMenuTitles();
+    }
+
+    private void updateMenuTitles() {
+        if (mPolicyManager.getRestrictBackground()) {
+            mMenuRestrictBackground.setTitle(R.string.data_usage_menu_allow_background);
+        } else {
+            mMenuRestrictBackground.setTitle(R.string.data_usage_menu_restrict_background);
+        }
+
+        if (mShowWifi) {
+            mMenuShowWifi.setTitle(R.string.data_usage_menu_hide_wifi);
+        } else {
+            mMenuShowWifi.setTitle(R.string.data_usage_menu_show_wifi);
+        }
+
+        if (mShowEthernet) {
+            mMenuShowEthernet.setTitle(R.string.data_usage_menu_hide_ethernet);
+        } else {
+            mMenuShowEthernet.setTitle(R.string.data_usage_menu_show_ethernet);
+        }
     }
 
     @Override
     public boolean onOptionsItemSelected(MenuItem item) {
         switch (item.getItemId()) {
-            case R.id.data_usage_menu_roaming: {
-                final boolean dataRoaming = !item.isChecked();
-                if (dataRoaming) {
-                    ConfirmDataRoamingFragment.show(this);
-                } else {
-                    // no confirmation to disable roaming
-                    setDataRoaming(false);
-                }
-                return true;
-            }
             case R.id.data_usage_menu_restrict_background: {
-                final boolean restrictBackground = !item.isChecked();
+                final boolean restrictBackground = !mPolicyManager.getRestrictBackground();
                 if (restrictBackground) {
                     ConfirmRestrictFragment.show(this);
                 } else {
@@ -552,41 +565,37 @@
                 }
                 return true;
             }
-            case R.id.data_usage_menu_split_4g: {
-                final boolean mobileSplit = !item.isChecked();
-                setMobilePolicySplit(mobileSplit);
-                item.setChecked(isMobilePolicySplit());
-                updateTabs();
-                return true;
-            }
             case R.id.data_usage_menu_show_wifi: {
-                mShowWifi = !item.isChecked();
+                mShowWifi = !mShowWifi;
                 mPrefs.edit().putBoolean(PREF_SHOW_WIFI, mShowWifi).apply();
-                item.setChecked(mShowWifi);
+                updateMenuTitles();
                 updateTabs();
                 return true;
             }
             case R.id.data_usage_menu_show_ethernet: {
-                mShowEthernet = !item.isChecked();
+                mShowEthernet = !mShowEthernet;
                 mPrefs.edit().putBoolean(PREF_SHOW_ETHERNET, mShowEthernet).apply();
-                item.setChecked(mShowEthernet);
+                updateMenuTitles();
                 updateTabs();
                 return true;
             }
+            case R.id.data_usage_menu_sim_cards: {
+                // TODO: hook up to sim cards
+                return true;
+            }
+            case R.id.data_usage_menu_cellular_networks: {
+                final Intent intent = new Intent(Intent.ACTION_MAIN);
+                intent.setComponent(new ComponentName("com.android.phone",
+                        "com.android.phone.MobileNetworkSettings"));
+                startActivity(intent);
+                return true;
+            }
             case R.id.data_usage_menu_metered: {
                 final SettingsActivity sa = (SettingsActivity) getActivity();
                 sa.startPreferencePanel(DataUsageMeteredSettings.class.getCanonicalName(), null,
                         R.string.data_usage_metered_title, null, this, 0);
                 return true;
             }
-            case R.id.data_usage_menu_auto_sync: {
-                if (ActivityManager.isUserAMonkey()) {
-                    Log.d("SyncState", "ignoring monkey's attempt to flip global sync state");
-                } else {
-                    ConfirmAutoSyncChangeFragment.show(this, !item.isChecked());
-                }
-                return true;
-            }
         }
         return false;
     }
@@ -724,7 +733,8 @@
 
         if (LOGD) Log.d(TAG, "updateBody() with currentTab=" + currentTab);
 
-        mDataEnabledView.setVisibility(isOwner ? View.VISIBLE : View.GONE);
+        mDataEnabledSupported = isOwner;
+        mDisableAtLimitSupported = true;
 
         // TODO: remove mobile tabs when SIM isn't ready
 
@@ -747,14 +757,14 @@
 
         } else if (TAB_WIFI.equals(currentTab)) {
             // wifi doesn't have any controls
-            mDataEnabledView.setVisibility(View.GONE);
-            mDisableAtLimitView.setVisibility(View.GONE);
+            mDataEnabledSupported = false;
+            mDisableAtLimitSupported = false;
             mTemplate = buildTemplateWifiWildcard();
 
         } else if (TAB_ETHERNET.equals(currentTab)) {
             // ethernet doesn't have any controls
-            mDataEnabledView.setVisibility(View.GONE);
-            mDisableAtLimitView.setVisibility(View.GONE);
+            mDataEnabledSupported = false;
+            mDisableAtLimitSupported = false;
             mTemplate = buildTemplateEthernet();
 
         } else {
@@ -807,12 +817,25 @@
         mAppIcon.setImageDrawable(detail.icon);
 
         mAppTitles.removeAllViews();
+
+        View title = null;
         if (detail.detailLabels != null) {
             for (CharSequence label : detail.detailLabels) {
-                mAppTitles.addView(inflateAppTitle(inflater, mAppTitles, label));
+                title = inflater.inflate(R.layout.data_usage_app_title, mAppTitles, false);
+                ((TextView) title.findViewById(R.id.app_title)).setText(label);
+                mAppTitles.addView(title);
             }
         } else {
-            mAppTitles.addView(inflateAppTitle(inflater, mAppTitles, detail.label));
+            title = inflater.inflate(R.layout.data_usage_app_title, mAppTitles, false);
+            ((TextView) title.findViewById(R.id.app_title)).setText(detail.label);
+            mAppTitles.addView(title);
+        }
+
+        // Remember last slot for summary
+        if (title != null) {
+            mAppTotal = (TextView) title.findViewById(R.id.app_summary);
+        } else {
+            mAppTotal = null;
         }
 
         // enable settings button when package provides it
@@ -903,24 +926,9 @@
         }
     }
 
-    private boolean getDataRoaming() {
-        final ContentResolver resolver = getActivity().getContentResolver();
-        return android.provider.Settings.Global.getInt(resolver,
-                android.provider.Settings.Global.DATA_ROAMING, 0) != 0;
-    }
-
-    private void setDataRoaming(boolean enabled) {
-        // TODO: teach telephony DataConnectionTracker to watch and apply
-        // updates when changed.
-        final ContentResolver resolver = getActivity().getContentResolver();
-        android.provider.Settings.Global.putInt(resolver,
-                android.provider.Settings.Global.DATA_ROAMING, enabled ? 1 : 0);
-        mMenuDataRoaming.setChecked(enabled);
-    }
-
     public void setRestrictBackground(boolean restrictBackground) {
         mPolicyManager.setRestrictBackground(restrictBackground);
-        mMenuRestrictBackground.setChecked(restrictBackground);
+        updateMenuTitles();
     }
 
     private boolean getAppRestrictBackground() {
@@ -942,10 +950,12 @@
      * current {@link #mTemplate}.
      */
     private void updatePolicy(boolean refreshCycle) {
+        boolean dataEnabledVisible = mDataEnabledSupported;
+        boolean disableAtLimitVisible = mDisableAtLimitSupported;
+
         if (isAppDetailMode()) {
-            mNetworkSwitches.setVisibility(View.GONE);
-        } else {
-            mNetworkSwitches.setVisibility(View.VISIBLE);
+            dataEnabledVisible = false;
+            disableAtLimitVisible = false;
         }
 
         // TODO: move enabled state directly into policy
@@ -957,7 +967,6 @@
 
         final NetworkPolicy policy = mPolicyEditor.getPolicy(mTemplate);
         if (isNetworkPolicyModifiable(policy)) {
-            mDisableAtLimitView.setVisibility(View.VISIBLE);
             mDisableAtLimit.setChecked(policy != null && policy.limitBytes != LIMIT_DISABLED);
             if (!isAppDetailMode()) {
                 mChart.bindNetworkPolicy(policy);
@@ -965,10 +974,13 @@
 
         } else {
             // controls are disabled; don't bind warning/limit sweeps
-            mDisableAtLimitView.setVisibility(View.GONE);
+            disableAtLimitVisible = false;
             mChart.bindNetworkPolicy(null);
         }
 
+        mDataEnabledView.setVisibility(dataEnabledVisible ? View.VISIBLE : View.GONE);
+        mDisableAtLimitView.setVisibility(disableAtLimitVisible ? View.VISIBLE : View.GONE);
+
         if (refreshCycle) {
             // generate cycle list based on policy and available history
             updateCycleList(policy);
@@ -1048,12 +1060,12 @@
         }
     }
 
-    private OnCheckedChangeListener mDataEnabledListener = new OnCheckedChangeListener() {
+    private View.OnClickListener mDataEnabledListener = new View.OnClickListener() {
         @Override
-        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+        public void onClick(View v) {
             if (mBinding) return;
 
-            final boolean dataEnabled = isChecked;
+            final boolean dataEnabled = !mDataEnabled.isChecked();
             final String currentTab = mCurrentTab;
             if (TAB_MOBILE.equals(currentTab)) {
                 if (dataEnabled) {
@@ -1177,15 +1189,11 @@
             final long defaultBytes = entry.rxBytes + entry.txBytes;
             entry = mChartData.detailForeground.getValues(start, end, now, entry);
             final long foregroundBytes = entry.rxBytes + entry.txBytes;
+            final long totalBytes = defaultBytes + foregroundBytes;
 
-            mAppPieChart.setOriginAngle(175);
-
-            mAppPieChart.removeAllSlices();
-            mAppPieChart.addSlice(foregroundBytes, FOREGROUND_BYTES_COLOR);
-            mAppPieChart.addSlice(defaultBytes, DEFAULT_BYTES_COLOR);
-
-            mAppPieChart.generatePath();
-
+            if (mAppTotal != null) {
+                mAppTotal.setText(Formatter.formatFileSize(context, totalBytes));
+            }
             mAppBackground.setText(Formatter.formatFileSize(context, defaultBytes));
             mAppForeground.setText(Formatter.formatFileSize(context, foregroundBytes));
 
@@ -1194,11 +1202,15 @@
 
             getLoaderManager().destroyLoader(LOADER_SUMMARY);
 
+            mCycleSummary.setVisibility(View.GONE);
+
         } else {
             if (mChartData != null) {
                 entry = mChartData.network.getValues(start, end, now, null);
             }
 
+            mCycleSummary.setVisibility(View.VISIBLE);
+
             // kick off loader for detailed stats
             getLoaderManager().restartLoader(LOADER_SUMMARY,
                     SummaryForAllUidLoader.buildArgs(mTemplate, start, end), mSummaryCallbacks);
@@ -1206,18 +1218,19 @@
 
         final long totalBytes = entry != null ? entry.rxBytes + entry.txBytes : 0;
         final String totalPhrase = Formatter.formatFileSize(context, totalBytes);
-        final String rangePhrase = formatDateRange(context, start, end);
+        mCycleSummary.setText(totalPhrase);
 
-        final int summaryRes;
         if (TAB_MOBILE.equals(mCurrentTab) || TAB_3G.equals(mCurrentTab)
                 || TAB_4G.equals(mCurrentTab)) {
-            summaryRes = R.string.data_usage_total_during_range_mobile;
+            if (isAppDetailMode()) {
+                mDisclaimer.setVisibility(View.GONE);
+            } else {
+                mDisclaimer.setVisibility(View.VISIBLE);
+            }
         } else {
-            summaryRes = R.string.data_usage_total_during_range;
+            mDisclaimer.setVisibility(View.GONE);
         }
 
-        mUsageSummary.setText(getString(summaryRes, totalPhrase, rangePhrase));
-
         // initial layout is finished above, ensure we have transitions
         ensureLayoutTransitions();
     }
@@ -1277,6 +1290,7 @@
         private void updateEmptyVisible() {
             final boolean isEmpty = mAdapter.isEmpty() && !isAppDetailMode();
             mEmpty.setVisibility(isEmpty ? View.VISIBLE : View.GONE);
+            mStupidPadding.setVisibility(isEmpty ? View.VISIBLE : View.GONE);
         }
     };
 
@@ -1308,12 +1322,6 @@
 
     private DataUsageChartListener mChartListener = new DataUsageChartListener() {
         @Override
-        public void onInspectRangeChanged() {
-            if (LOGD) Log.d(TAG, "onInspectRangeChanged()");
-            updateDetailData();
-        }
-
-        @Override
         public void onWarningChanged() {
             setPolicyWarningBytes(mChart.getWarningBytes());
         }
@@ -1403,8 +1411,8 @@
         private final CycleChangeItem mChangeItem;
 
         public CycleAdapter(Context context) {
-            super(context, android.R.layout.simple_spinner_item);
-            setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
+            super(context, R.layout.data_usage_cycle_item);
+            setDropDownViewResource(R.layout.data_usage_cycle_item_dropdown);
             mChangeItem = new CycleChangeItem(context);
         }
 
@@ -1446,11 +1454,21 @@
     }
 
     public static class AppItem implements Comparable<AppItem>, Parcelable {
+        public static final int CATEGORY_USER = 0;
+        public static final int CATEGORY_APP_TITLE = 1;
+        public static final int CATEGORY_APP = 2;
+
         public final int key;
         public boolean restricted;
+        public int category;
+
         public SparseBooleanArray uids = new SparseBooleanArray();
         public long total;
 
+        public AppItem() {
+            this.key = 0;
+        }
+
         public AppItem(int key) {
             this.key = key;
         }
@@ -1479,7 +1497,11 @@
 
         @Override
         public int compareTo(AppItem another) {
-            return Long.compare(another.total, total);
+            int comparison = Integer.compare(another.category, category);
+            if (comparison == 0) {
+                comparison = Long.compare(another.total, total);
+            }
+            return comparison;
         }
 
         public static final Creator<AppItem> CREATOR = new Creator<AppItem>() {
@@ -1515,9 +1537,11 @@
          */
         public void bindStats(NetworkStats stats, int[] restrictedUids) {
             mItems.clear();
+            mLargest = 0;
 
             final int currentUserId = ActivityManager.getCurrentUser();
             final SparseArray<AppItem> knownItems = new SparseArray<AppItem>();
+            boolean hasApps = false;
 
             NetworkStats.Entry entry = null;
             final int size = stats != null ? stats.size() : 0;
@@ -1547,6 +1571,9 @@
                 }
                 item.addUid(uid);
                 item.total += entry.rxBytes + entry.txBytes;
+                if (item.total > mLargest) {
+                    mLargest = item.total;
+                }
             }
 
             for (int uid : restrictedUids) {
@@ -1563,8 +1590,14 @@
                 item.restricted = true;
             }
 
+            hasApps = !mItems.isEmpty();
+            if (hasApps) {
+                final AppItem title = new AppItem();
+                title.category = AppItem.CATEGORY_APP_TITLE;
+                mItems.add(title);
+            }
+
             Collections.sort(mItems);
-            mLargest = (mItems.size() > 0) ? mItems.get(0).total : 0;
             notifyDataSetChanged();
         }
 
@@ -1584,36 +1617,72 @@
         }
 
         @Override
-        public View getView(int position, View convertView, ViewGroup parent) {
-            if (convertView == null) {
-                convertView = LayoutInflater.from(parent.getContext()).inflate(
-                        R.layout.data_usage_item, parent, false);
+        public int getViewTypeCount() {
+            return 2;
+        }
 
-                if (mInsetSide > 0) {
-                    convertView.setPaddingRelative(mInsetSide, 0, mInsetSide, 0);
-                }
-            }
-
-            final Context context = parent.getContext();
-
-            final TextView text1 = (TextView) convertView.findViewById(android.R.id.text1);
-            final ProgressBar progress = (ProgressBar) convertView.findViewById(
-                    android.R.id.progress);
-
-            // kick off async load of app details
+        @Override
+        public int getItemViewType(int position) {
             final AppItem item = mItems.get(position);
-            UidDetailTask.bindView(mProvider, item, convertView);
-
-            if (item.restricted && item.total <= 0) {
-                text1.setText(R.string.data_usage_app_restricted);
-                progress.setVisibility(View.GONE);
+            if (item.category == AppItem.CATEGORY_APP_TITLE) {
+                return 1;
             } else {
-                text1.setText(Formatter.formatFileSize(context, item.total));
-                progress.setVisibility(View.VISIBLE);
+                return 0;
             }
+        }
 
-            final int percentTotal = mLargest != 0 ? (int) (item.total * 100 / mLargest) : 0;
-            progress.setProgress(percentTotal);
+        @Override
+        public boolean areAllItemsEnabled() {
+            return false;
+        }
+
+        @Override
+        public boolean isEnabled(int position) {
+            return getItemViewType(position) == 0;
+        }
+
+        @Override
+        public View getView(int position, View convertView, ViewGroup parent) {
+            final AppItem item = mItems.get(position);
+            if (getItemViewType(position) == 1) {
+                if (convertView == null) {
+                    convertView = inflateCategoryHeader(LayoutInflater.from(parent.getContext()),
+                            parent);
+                }
+
+                final TextView title = (TextView) convertView.findViewById(android.R.id.title);
+                title.setText(R.string.data_usage_app);
+
+            } else {
+                if (convertView == null) {
+                    convertView = LayoutInflater.from(parent.getContext()).inflate(
+                            R.layout.data_usage_item, parent, false);
+
+                    if (mInsetSide > 0) {
+                        convertView.setPaddingRelative(mInsetSide, 0, mInsetSide, 0);
+                    }
+                }
+
+                final Context context = parent.getContext();
+
+                final TextView text1 = (TextView) convertView.findViewById(android.R.id.text1);
+                final ProgressBar progress = (ProgressBar) convertView.findViewById(
+                        android.R.id.progress);
+
+                // kick off async load of app details
+                UidDetailTask.bindView(mProvider, item, convertView);
+
+                if (item.restricted && item.total <= 0) {
+                    text1.setText(R.string.data_usage_app_restricted);
+                    progress.setVisibility(View.GONE);
+                } else {
+                    text1.setText(Formatter.formatFileSize(context, item.total));
+                    progress.setVisibility(View.VISIBLE);
+                }
+
+                final int percentTotal = mLargest != 0 ? (int) (item.total * 100 / mLargest) : 0;
+                progress.setProgress(percentTotal);
+            }
 
             return convertView;
         }
@@ -1638,7 +1707,8 @@
             final FragmentTransaction ft = parent.getFragmentManager().beginTransaction();
             ft.add(fragment, TAG_APP_DETAILS);
             ft.addToBackStack(TAG_APP_DETAILS);
-            ft.setBreadCrumbTitle(label);
+            ft.setBreadCrumbTitle(
+                    parent.getResources().getString(R.string.data_usage_app_summary_title));
             ft.commitAllowingStateLoss();
         }
 
@@ -1947,46 +2017,6 @@
 
     /**
      * Dialog to request user confirmation before setting
-     * {@link android.provider.Settings.Global#DATA_ROAMING}.
-     */
-    public static class ConfirmDataRoamingFragment extends DialogFragment {
-        public static void show(DataUsageSummary parent) {
-            if (!parent.isAdded()) return;
-
-            final ConfirmDataRoamingFragment dialog = new ConfirmDataRoamingFragment();
-            dialog.setTargetFragment(parent, 0);
-            dialog.show(parent.getFragmentManager(), TAG_CONFIRM_DATA_ROAMING);
-        }
-
-        @Override
-        public Dialog onCreateDialog(Bundle savedInstanceState) {
-            final Context context = getActivity();
-
-            final AlertDialog.Builder builder = new AlertDialog.Builder(context);
-            builder.setTitle(R.string.roaming_reenable_title);
-            if (Utils.hasMultipleUsers(context)) {
-                builder.setMessage(R.string.roaming_warning_multiuser);
-            } else {
-                builder.setMessage(R.string.roaming_warning);
-            }
-
-            builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
-                @Override
-                public void onClick(DialogInterface dialog, int which) {
-                    final DataUsageSummary target = (DataUsageSummary) getTargetFragment();
-                    if (target != null) {
-                        target.setDataRoaming(true);
-                    }
-                }
-            });
-            builder.setNegativeButton(android.R.string.cancel, null);
-
-            return builder.create();
-        }
-    }
-
-    /**
-     * Dialog to request user confirmation before setting
      * {@link INetworkPolicyManager#setRestrictBackground(boolean)}.
      */
     public static class ConfirmRestrictFragment extends DialogFragment {
@@ -2307,12 +2337,12 @@
         return view;
     }
 
-    private static View inflateAppTitle(
-            LayoutInflater inflater, ViewGroup root, CharSequence label) {
-        final TextView view = (TextView) inflater.inflate(
-                R.layout.data_usage_app_title, root, false);
-        view.setText(label);
-        return view;
+    private static View inflateCategoryHeader(LayoutInflater inflater, ViewGroup root) {
+        final TypedArray a = inflater.getContext().obtainStyledAttributes(null,
+                com.android.internal.R.styleable.Preference,
+                com.android.internal.R.attr.preferenceCategoryStyle, 0);
+        final int resId = a.getResourceId(com.android.internal.R.styleable.Preference_layout, 0);
+        return inflater.inflate(resId, root, false);
     }
 
     /**
diff --git a/src/com/android/settings/HomeSettings.java b/src/com/android/settings/HomeSettings.java
index 8697062..6d5883c 100644
--- a/src/com/android/settings/HomeSettings.java
+++ b/src/com/android/settings/HomeSettings.java
@@ -17,17 +17,21 @@
 package com.android.settings;
 
 import java.util.ArrayList;
+import java.util.List;
 
 import android.app.ActivityManager;
+import android.content.BroadcastReceiver;
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.content.SharedPreferences;
 import android.content.pm.ActivityInfo;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
+import android.content.res.Resources;
 import android.graphics.ColorFilter;
 import android.graphics.ColorMatrix;
 import android.graphics.ColorMatrixColorFilter;
@@ -37,13 +41,17 @@
 import android.os.Handler;
 import android.preference.Preference;
 import android.preference.PreferenceGroup;
+import android.text.TextUtils;
 import android.util.Log;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.ImageView;
 import android.widget.RadioButton;
+import com.android.settings.search.BaseSearchIndexProvider;
+import com.android.settings.search.Indexable;
+import com.android.settings.search.SearchIndexableRaw;
 
-public class HomeSettings extends SettingsPreferenceFragment {
+public class HomeSettings extends SettingsPreferenceFragment implements Indexable {
     static final String TAG = "HomeSettings";
 
     static final int REQUESTING_UNINSTALL = 10;
@@ -289,4 +297,59 @@
             }
         }
     }
+
+    /**
+     * For search
+     */
+    public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
+        new BaseSearchIndexProvider() {
+            @Override
+            public List<SearchIndexableRaw> getRawDataToIndex(Context context, boolean enabled) {
+                final List<SearchIndexableRaw> result = new ArrayList<SearchIndexableRaw>();
+
+                final PackageManager pm = context.getPackageManager();
+                final ArrayList<ResolveInfo> homeActivities = new ArrayList<ResolveInfo>();
+                pm.getHomeActivities(homeActivities);
+
+                final SharedPreferences sp = context.getSharedPreferences(
+                        HomeSettings.HOME_PREFS, Context.MODE_PRIVATE);
+                final boolean doShowHome = sp.getBoolean(HomeSettings.HOME_PREFS_DO_SHOW, false);
+
+                // We index Home Launchers only if there are more than one or if we are showing the
+                // Home tile into the Dashboard
+                if (homeActivities.size() > 1 || doShowHome) {
+                    final Resources res = context.getResources();
+
+                    // Add fragment title
+                    SearchIndexableRaw data = new SearchIndexableRaw(context);
+                    data.title = res.getString(R.string.home_settings);
+                    data.screenTitle = res.getString(R.string.home_settings);
+                    data.keywords = res.getString(R.string.keywords_home);
+                    result.add(data);
+
+                    for (int i = 0; i < homeActivities.size(); i++) {
+                        final ResolveInfo resolveInfo = homeActivities.get(i);
+                        final ActivityInfo activityInfo = resolveInfo.activityInfo;
+
+                        CharSequence name;
+                        try {
+                            name = activityInfo.loadLabel(pm);
+                            if (TextUtils.isEmpty(name)) {
+                                continue;
+                            }
+                        } catch (Exception e) {
+                            Log.v(TAG, "Problem dealing with Home " + activityInfo.name, e);
+                            continue;
+                        }
+
+                        data = new SearchIndexableRaw(context);
+                        data.title = name.toString();
+                        data.screenTitle = res.getString(R.string.home_settings);
+                        result.add(data);
+                    }
+                }
+
+                return result;
+            }
+        };
 }
diff --git a/src/com/android/settings/Settings.java b/src/com/android/settings/Settings.java
index 895e9ea..01149f3 100644
--- a/src/com/android/settings/Settings.java
+++ b/src/com/android/settings/Settings.java
@@ -69,6 +69,7 @@
     public static class PowerUsageSummaryActivity extends SettingsActivity { /* empty */ }
     public static class BatterySaverSettingsActivity extends SettingsActivity { /* empty */ }
     public static class AccountSyncSettingsActivity extends SettingsActivity { /* empty */ }
+    public static class AccountSettingsActivity extends SettingsActivity { /* empty */ }
     public static class AccountSyncSettingsInAddAccountActivity extends SettingsActivity { /* empty */ }
     public static class CryptKeeperSettingsActivity extends SettingsActivity { /* empty */ }
     public static class DeviceAdminSettingsActivity extends SettingsActivity { /* empty */ }
diff --git a/src/com/android/settings/SettingsActivity.java b/src/com/android/settings/SettingsActivity.java
index 751d478..056cf8d 100644
--- a/src/com/android/settings/SettingsActivity.java
+++ b/src/com/android/settings/SettingsActivity.java
@@ -66,6 +66,7 @@
 import com.android.internal.util.XmlUtils;
 import com.android.settings.accessibility.AccessibilitySettings;
 import com.android.settings.accessibility.CaptionPropertiesFragment;
+import com.android.settings.accounts.AccountSettings;
 import com.android.settings.accounts.AccountSyncSettings;
 import com.android.settings.applications.InstalledAppDetails;
 import com.android.settings.applications.ManageApplications;
@@ -262,6 +263,7 @@
             WifiDisplaySettings.class.getName(),
             PowerUsageSummary.class.getName(),
             AccountSyncSettings.class.getName(),
+            AccountSettings.class.getName(),
             CryptKeeperSettings.class.getName(),
             DataUsageSummary.class.getName(),
             DreamSettings.class.getName(),
@@ -293,7 +295,6 @@
 
     private boolean mBatteryPresent = true;
     private BroadcastReceiver mBatteryInfoReceiver = new BroadcastReceiver() {
-
         @Override
         public void onReceive(Context context, Intent intent) {
             String action = intent.getAction();
diff --git a/src/com/android/settings/accounts/AccountSettings.java b/src/com/android/settings/accounts/AccountSettings.java
index 13878d7..88f47bc 100644
--- a/src/com/android/settings/accounts/AccountSettings.java
+++ b/src/com/android/settings/accounts/AccountSettings.java
@@ -19,7 +19,9 @@
 
 import android.accounts.Account;
 import android.accounts.AccountManager;
+import android.app.ActivityManager;
 import android.content.BroadcastReceiver;
+import android.content.ContentResolver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
@@ -29,7 +31,11 @@
 import android.os.UserManager;
 import android.util.Log;
 import android.util.SparseArray;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
 import android.preference.Preference;
+import android.preference.Preference.OnPreferenceChangeListener;
 import android.preference.Preference.OnPreferenceClickListener;
 import android.preference.PreferenceGroup;
 
@@ -54,7 +60,6 @@
         implements AuthenticatorHelper.OnAccountsUpdateListener,
         OnPreferenceClickListener {
     public static final String TAG = "AccountSettings";
-
     private static final String KEY_ACCOUNT = "account";
     private static final String KEY_ADD_ACCOUNT = "add_account";
 
@@ -68,6 +73,7 @@
     private UserManager mUm;
     private SparseArray<ProfileData> mProfiles;
     private ManagedProfileBroadcastReceiver mManagedProfileBroadcastReceiver;
+    private boolean mIsSingleProfileUi = true;
 
     /**
      * Holds data related to the accounts belonging to one profile.
@@ -97,6 +103,50 @@
         mUm = (UserManager) getSystemService(Context.USER_SERVICE);
         mProfiles = new SparseArray<ProfileData>(2);
         updateUi();
+        setHasOptionsMenu(true);
+    }
+
+    @Override
+    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
+        inflater.inflate(R.menu.account_settings, menu);
+        final UserHandle currentProfile = UserHandle.getCallingUserHandle();
+        if (mIsSingleProfileUi) {
+            menu.findItem(R.id.account_settings_menu_auto_sync)
+                    .setVisible(true)
+                    .setOnMenuItemClickListener(new MasterSyncStateClickListener(currentProfile));
+            menu.removeItem(R.id.account_settings_menu_auto_sync_personal);
+            menu.removeItem(R.id.account_settings_menu_auto_sync_work);
+        } else {
+            final UserHandle managedProfile = Utils.getManagedProfile(mUm);
+
+            menu.findItem(R.id.account_settings_menu_auto_sync_personal)
+                    .setVisible(true)
+                    .setOnMenuItemClickListener(new MasterSyncStateClickListener(currentProfile));
+            menu.findItem(R.id.account_settings_menu_auto_sync_work)
+                    .setVisible(true)
+                    .setOnMenuItemClickListener(new MasterSyncStateClickListener(managedProfile));
+            menu.removeItem(R.id.account_settings_menu_auto_sync);
+        }
+        super.onCreateOptionsMenu(menu, inflater);
+    }
+
+    @Override
+    public void onPrepareOptionsMenu(Menu menu) {
+        final UserHandle currentProfile = UserHandle.getCallingUserHandle();
+        if (mIsSingleProfileUi) {
+            menu.findItem(R.id.account_settings_menu_auto_sync)
+                    .setChecked(ContentResolver.getMasterSyncAutomaticallyAsUser(
+                            currentProfile.getIdentifier()));
+        } else {
+            final UserHandle managedProfile = Utils.getManagedProfile(mUm);
+
+            menu.findItem(R.id.account_settings_menu_auto_sync_personal)
+                    .setChecked(ContentResolver.getMasterSyncAutomaticallyAsUser(
+                            currentProfile.getIdentifier()));
+            menu.findItem(R.id.account_settings_menu_auto_sync_work)
+                    .setChecked(ContentResolver.getMasterSyncAutomaticallyAsUser(
+                            managedProfile.getIdentifier()));
+            }
     }
 
     void updateUi() {
@@ -117,12 +167,13 @@
             if (managedProfile == null) {
                 updateSingleProfileUi();
             } else {
-                updateProfileUi(currentProfile,
-                        KEY_CATEGORY_PERSONAL, KEY_ADD_ACCOUNT_PERSONAL, new ArrayList<String>());
-                final ArrayList<String> unusedPreferences = new ArrayList<String>(1);
+                mIsSingleProfileUi = false;
+                updateProfileUi(currentProfile, KEY_CATEGORY_PERSONAL, KEY_ADD_ACCOUNT_PERSONAL,
+                        new ArrayList<String>());
+                final ArrayList<String> unusedPreferences = new ArrayList<String>(2);
                 unusedPreferences.add(KEY_ADD_ACCOUNT);
-                updateProfileUi(managedProfile,
-                        KEY_CATEGORY_WORK, KEY_ADD_ACCOUNT_WORK, unusedPreferences);
+                updateProfileUi(managedProfile, KEY_CATEGORY_WORK, KEY_ADD_ACCOUNT_WORK,
+                        unusedPreferences);
                 mManagedProfileBroadcastReceiver = new ManagedProfileBroadcastReceiver();
                 mManagedProfileBroadcastReceiver.register(getActivity());
             }
@@ -141,8 +192,8 @@
                 unusedPreferences);
     }
 
-    private void updateProfileUi(UserHandle userHandle, String categoryKey, String addAccountKey,
-            ArrayList<String> unusedPreferences) {
+    private void updateProfileUi(final UserHandle userHandle, String categoryKey,
+            String addAccountKey, ArrayList<String> unusedPreferences) {
         final int count = unusedPreferences.size();
         for (int i = 0; i < count; i++) {
             removePreference(unusedPreferences.get(i));
@@ -345,6 +396,28 @@
             }
         }
     }
+
+    private class MasterSyncStateClickListener implements MenuItem.OnMenuItemClickListener {
+        private final UserHandle mUserHandle;
+
+        public MasterSyncStateClickListener(UserHandle userHandle) {
+            mUserHandle = userHandle;
+        }
+
+        @Override
+        public boolean onMenuItemClick(MenuItem item) {
+            // TODO: Add confirmation dialogs. See: http://b/16076571
+            if (ActivityManager.isUserAMonkey()) {
+                Log.d(TAG, "ignoring monkey's attempt to flip sync state");
+            } else {
+                boolean newSyncState = !item.isChecked();
+                item.setChecked(newSyncState);
+                ContentResolver.setMasterSyncAutomaticallyAsUser(newSyncState,
+                        mUserHandle.getIdentifier());
+            }
+            return true;
+        }
+    }
     // TODO Implement a {@link SearchIndexProvider} to allow Indexing and Search of account types
     // See http://b/15403806
 }
diff --git a/src/com/android/settings/accounts/SyncSettings.java b/src/com/android/settings/accounts/SyncSettings.java
deleted file mode 100644
index 3248113..0000000
--- a/src/com/android/settings/accounts/SyncSettings.java
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
- * Copyright (C) 2008 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.accounts;
-
-import android.accounts.Account;
-import android.accounts.AccountManager;
-import android.accounts.OnAccountsUpdateListener;
-import android.app.Activity;
-import android.app.ActivityManager;
-import android.content.ContentResolver;
-import android.content.Intent;
-import android.graphics.drawable.Drawable;
-import android.os.Bundle;
-import android.preference.CheckBoxPreference;
-import android.preference.Preference;
-import android.preference.Preference.OnPreferenceChangeListener;
-import android.preference.PreferenceScreen;
-import android.util.Log;
-
-import com.android.settings.AccountPreference;
-import com.android.settings.DialogCreatable;
-import com.android.settings.R;
-
-import java.util.ArrayList;
-
-public class SyncSettings extends AccountPreferenceBase
-        implements OnAccountsUpdateListener, DialogCreatable {
-
-    private static final String KEY_SYNC_SWITCH = "sync_switch";
-
-    private String[] mAuthorities;
-
-    private SettingsDialogFragment mDialogFragment;
-    private CheckBoxPreference mAutoSyncPreference;
-
-    @Override
-    public void onCreate(Bundle icicle) {
-        super.onCreate(icicle);
-
-        addPreferencesFromResource(R.xml.sync_settings);
-        mAutoSyncPreference =
-                (CheckBoxPreference) getPreferenceScreen().findPreference(KEY_SYNC_SWITCH);
-        mAutoSyncPreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
-            @Override
-            public boolean onPreferenceChange(Preference preference, Object newValue) {
-                if (ActivityManager.isUserAMonkey()) {
-                    Log.d("SyncSettings", "ignoring monkey's attempt to flip sync state");
-                } else {
-                    ContentResolver.setMasterSyncAutomatically((Boolean) newValue);
-                }
-                return true;
-            }
-        });
-
-        setHasOptionsMenu(true);
-    }
-
-    @Override
-    public void onStart() {
-        super.onStart();
-        Activity activity = getActivity();
-        AccountManager.get(activity).addOnAccountsUpdatedListener(this, null, true);
-    }
-
-    @Override
-    public void onActivityCreated(Bundle savedInstanceState) {
-        super.onActivityCreated(savedInstanceState);
-
-        final Activity activity = getActivity();
-        mAutoSyncPreference.setChecked(ContentResolver.getMasterSyncAutomatically());
-        mAuthorities = activity.getIntent().getStringArrayExtra(AUTHORITIES_FILTER_KEY);
-
-        updateAuthDescriptions();
-    }
-
-    @Override
-    public void onStop() {
-        super.onStop();
-        final Activity activity = getActivity();
-        AccountManager.get(activity).removeOnAccountsUpdatedListener(this);
-    }
-
-    @Override
-    public boolean onPreferenceTreeClick(PreferenceScreen preferences, Preference preference) {
-        if (preference instanceof AccountPreference) {
-            startAccountSettings((AccountPreference) preference);
-        } else {
-            return false;
-        }
-        return true;
-    }
-
-    private void startAccountSettings(AccountPreference acctPref) {
-        Intent intent = new Intent("android.settings.ACCOUNT_SYNC_SETTINGS");
-        intent.putExtra(AccountSyncSettings.ACCOUNT_KEY, acctPref.getAccount());
-        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        startActivity(intent);
-        finish();
-    }
-
-    @Override
-    public void showDialog(int dialogId) {
-        if (mDialogFragment != null) {
-            Log.e(TAG, "Old dialog fragment not null!");
-        }
-        mDialogFragment = new SettingsDialogFragment(this, dialogId);
-        mDialogFragment.show(getActivity().getFragmentManager(), Integer.toString(dialogId));
-    }
-
-    private void removeAccountPreferences() {
-        PreferenceScreen parent = getPreferenceScreen();
-        for (int i = 0; i < parent.getPreferenceCount(); ) {
-            if (parent.getPreference(i) instanceof AccountPreference) {
-                parent.removePreference(parent.getPreference(i));
-            } else {
-                i++;
-            }
-        }
-    }
-
-    @Override
-    public void onAccountsUpdated(Account[] accounts) {
-        if (getActivity() == null) return;
-
-        removeAccountPreferences();
-        for (int i = 0, n = accounts.length; i < n; i++) {
-            final Account account = accounts[i];
-            final ArrayList<String> auths = getAuthoritiesForAccountType(account.type);
-
-            boolean showAccount = true;
-            if (mAuthorities != null && auths != null) {
-                showAccount = false;
-                for (String requestedAuthority : mAuthorities) {
-                    if (auths.contains(requestedAuthority)) {
-                        showAccount = true;
-                        break;
-                    }
-                }
-            }
-
-            if (showAccount) {
-                final Drawable icon = getDrawableForType(account.type);
-                final AccountPreference preference =
-                        new AccountPreference(getActivity(), account, icon, auths, true);
-                getPreferenceScreen().addPreference(preference);
-                preference.setSummary(getLabelForType(account.type));
-            }
-        }
-        onSyncStateUpdated();
-    }
-
-    @Override
-    protected void onAuthDescriptionsUpdated() {
-        // Update account icons for all account preference items
-        for (int i = 0; i < getPreferenceScreen().getPreferenceCount(); i++) {
-            Preference pref = getPreferenceScreen().getPreference(i);
-            if (pref instanceof AccountPreference) {
-                AccountPreference accPref = (AccountPreference)
-                        getPreferenceScreen().getPreference(i);
-                accPref.setIcon(getDrawableForType(accPref.getAccount().type));
-                accPref.setSummary(getLabelForType(accPref.getAccount().type));
-            }
-        }
-    }
-}
diff --git a/src/com/android/settings/accounts/SyncSettingsActivity.java b/src/com/android/settings/accounts/SyncSettingsActivity.java
deleted file mode 100644
index 014c24d..0000000
--- a/src/com/android/settings/accounts/SyncSettingsActivity.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2012 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.accounts;
-
-import android.content.Intent;
-
-import com.android.settings.SettingsActivity;
-
-/**
- * Launcher activity for the SyncSettings fragment.
- *
- */
-public class SyncSettingsActivity extends SettingsActivity {
-    @Override
-    public Intent getIntent() {
-        Intent modIntent = new Intent(super.getIntent());
-        modIntent.putExtra(SettingsActivity.EXTRA_SHOW_FRAGMENT, SyncSettings.class.getName());
-        return modIntent;
-    }
-
-    @Override
-    protected boolean isValidFragment(String fragmentName) {
-        if (SyncSettings.class.getName().equals(fragmentName)) return true;
-        return false;
-    }
-}
\ No newline at end of file
diff --git a/src/com/android/settings/net/DataUsageMeteredSettings.java b/src/com/android/settings/net/DataUsageMeteredSettings.java
index 87358f6..d567c7e 100644
--- a/src/com/android/settings/net/DataUsageMeteredSettings.java
+++ b/src/com/android/settings/net/DataUsageMeteredSettings.java
@@ -29,10 +29,9 @@
 import android.net.wifi.WifiConfiguration;
 import android.net.wifi.WifiManager;
 import android.os.Bundle;
-import android.preference.CheckBoxPreference;
 import android.preference.Preference;
 import android.preference.PreferenceCategory;
-import android.provider.SearchIndexableResource;
+import android.preference.SwitchPreference;
 import android.telephony.TelephonyManager;
 
 import com.android.settings.R;
@@ -42,7 +41,6 @@
 import com.android.settings.search.SearchIndexableRaw;
 
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
 /**
@@ -117,7 +115,7 @@
         return pref;
     }
 
-    private class MeteredPreference extends CheckBoxPreference {
+    private class MeteredPreference extends SwitchPreference {
         private final NetworkTemplate mTemplate;
         private boolean mBinding;
 
diff --git a/src/com/android/settings/notification/ZenModeSettings.java b/src/com/android/settings/notification/ZenModeSettings.java
index 02bb85e..c8befa0 100644
--- a/src/com/android/settings/notification/ZenModeSettings.java
+++ b/src/com/android/settings/notification/ZenModeSettings.java
@@ -28,7 +28,6 @@
 import android.content.pm.PackageManager;
 import android.content.res.Resources;
 import android.database.ContentObserver;
-import android.graphics.Typeface;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
@@ -45,9 +44,6 @@
 import android.text.format.DateFormat;
 import android.util.Log;
 import android.util.SparseArray;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
 import android.widget.TimePicker;
 
 import com.android.settings.R;
@@ -72,6 +68,7 @@
     private static final String KEY_CALLS = "phone_calls";
     private static final String KEY_MESSAGES = "messages";
     private static final String KEY_STARRED = "starred";
+    private static final String KEY_ALARM_INFO = "alarm_info";
 
     private static final String KEY_DOWNTIME = "downtime";
     private static final String KEY_DAYS = "days";
@@ -110,6 +107,7 @@
         }
         rt.put(R.string.zen_mode_messages, KEY_MESSAGES);
         rt.put(R.string.zen_mode_from_starred, KEY_STARRED);
+        rt.put(R.string.zen_mode_alarm_info, KEY_ALARM_INFO);
         rt.put(R.string.zen_mode_downtime_category, KEY_DOWNTIME);
         rt.put(R.string.zen_mode_downtime_days, KEY_DAYS);
         rt.put(R.string.zen_mode_start_time, KEY_START_TIME);
@@ -141,8 +139,6 @@
         super.onCreate(savedInstanceState);
         mContext = getActivity();
         mPM = mContext.getPackageManager();
-        final Resources res = mContext.getResources();
-        final int padding = res.getDimensionPixelSize(R.dimen.content_margin_left);
 
         addPreferencesFromResource(R.xml.zen_mode_settings);
         final PreferenceScreen root = getPreferenceScreen();
@@ -157,6 +153,8 @@
 
         final PreferenceCategory important =
                 (PreferenceCategory) root.findPreference(KEY_IMPORTANT);
+        final Preference alarmInfo = important.findPreference(KEY_ALARM_INFO);
+        important.removePreference(alarmInfo);
 
         mCalls = (SwitchPreference) important.findPreference(KEY_CALLS);
         if (Utils.isVoiceCapable(mContext)) {
@@ -213,18 +211,6 @@
         });
         important.addPreference(mStarred);
 
-        final Preference alarmInfo = new Preference(mContext) {
-            @Override
-            public View getView(View convertView, ViewGroup parent) {
-                final TextView tv = new TextView(mContext);
-                tv.setTypeface(Typeface.create(Typeface.DEFAULT, Typeface.ITALIC));
-                tv.setPadding(padding, padding, padding, padding);
-                tv.setText(R.string.zen_mode_alarm_info);
-                return tv;
-            }
-        };
-        alarmInfo.setPersistent(false);
-        alarmInfo.setSelectable(false);
         important.addPreference(alarmInfo);
 
         final PreferenceCategory downtime = (PreferenceCategory) root.findPreference(KEY_DOWNTIME);
diff --git a/src/com/android/settings/search/DynamicIndexableContentMonitor.java b/src/com/android/settings/search/DynamicIndexableContentMonitor.java
index c0b462f..12bb6ef 100644
--- a/src/com/android/settings/search/DynamicIndexableContentMonitor.java
+++ b/src/com/android/settings/search/DynamicIndexableContentMonitor.java
@@ -78,10 +78,8 @@
             new UserDictionaryContentObserver(mHandler);
 
     private Context mContext;
-
-    private boolean mHasFeturePrinting;
-
-    private boolean mHasFetureIme;
+    private boolean mHasFeaturePrinting;
+    private boolean mHasFeatureIme;
 
     private static Intent getAccessibilityServiceIntent(String packageName) {
         final Intent intent = new Intent(AccessibilityService.SERVICE_INTERFACE);
@@ -104,9 +102,9 @@
     public void register(Context context) {
         mContext = context;
 
-        mHasFeturePrinting = mContext.getPackageManager().hasSystemFeature(
+        mHasFeaturePrinting = mContext.getPackageManager().hasSystemFeature(
                 PackageManager.FEATURE_PRINTING);
-        mHasFetureIme = mContext.getPackageManager().hasSystemFeature(
+        mHasFeatureIme = mContext.getPackageManager().hasSystemFeature(
                 PackageManager.FEATURE_INPUT_METHODS);
 
         // Cache accessibility service packages to know when they go away.
@@ -124,7 +122,7 @@
             mAccessibilityServices.add(resolveInfo.serviceInfo.packageName);
         }
 
-        if (mHasFeturePrinting) {
+        if (mHasFeaturePrinting) {
             // Cache print service packages to know when they go away.
             PrintManager printManager = (PrintManager)
                     mContext.getSystemService(Context.PRINT_SERVICE);
@@ -141,7 +139,7 @@
         }
 
         // Cache IME service packages to know when they go away.
-        if (mHasFetureIme) {
+        if (mHasFeatureIme) {
             InputMethodManager imeManager = (InputMethodManager)
                     mContext.getSystemService(Context.INPUT_METHOD_SERVICE);
             List<InputMethodInfo> inputMethods = imeManager.getInputMethodList();
@@ -174,7 +172,7 @@
                 Context.INPUT_SERVICE);
         inputManager.unregisterInputDeviceListener(this);
 
-        if (mHasFetureIme) {
+        if (mHasFeatureIme) {
             mContext.getContentResolver().unregisterContentObserver(
                     mUserDictionaryContentObserver);
         }
@@ -242,7 +240,7 @@
             }
         }
 
-        if (mHasFeturePrinting) {
+        if (mHasFeaturePrinting) {
             if (!mPrintServices.contains(packageName)) {
                 final Intent intent = getPrintServiceIntent(packageName);
                 if (!mContext.getPackageManager().queryIntentServices(intent, 0).isEmpty()) {
@@ -253,7 +251,7 @@
             }
         }
 
-        if (mHasFetureIme) {
+        if (mHasFeatureIme) {
             if (!mImeServices.contains(packageName)) {
                 Intent intent = getIMEServiceIntent(packageName);
                 if (!mContext.getPackageManager().queryIntentServices(intent, 0).isEmpty()) {
@@ -273,7 +271,7 @@
                     AccessibilitySettings.class.getName(), true, true);
         }
 
-        if (mHasFeturePrinting) {
+        if (mHasFeaturePrinting) {
             final int printIndex = mPrintServices.indexOf(packageName);
             if (printIndex >= 0) {
                 mPrintServices.remove(printIndex);
@@ -282,7 +280,7 @@
             }
         }
 
-        if (mHasFetureIme) {
+        if (mHasFeatureIme) {
             final int imeIndex = mImeServices.indexOf(packageName);
             if (imeIndex >= 0) {
                 mImeServices.remove(imeIndex);
diff --git a/src/com/android/settings/search/HomePackageReceiver.java b/src/com/android/settings/search/HomePackageReceiver.java
new file mode 100644
index 0000000..a245252
--- /dev/null
+++ b/src/com/android/settings/search/HomePackageReceiver.java
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2014 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.search;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import com.android.settings.HomeSettings;
+
+import java.util.Set;
+
+/**
+ * A BroadcastReceiver for detecting Home Launchers
+ */
+public class HomePackageReceiver extends BroadcastReceiver {
+
+    @Override
+    public void onReceive(Context context, Intent intent) {
+        Index.getInstance(context).updateFromClassNameResource(
+                HomeSettings.class.getName(), true, true);
+    }
+}
diff --git a/src/com/android/settings/search/SearchIndexableResources.java b/src/com/android/settings/search/SearchIndexableResources.java
index 228381f..4749733 100644
--- a/src/com/android/settings/search/SearchIndexableResources.java
+++ b/src/com/android/settings/search/SearchIndexableResources.java
@@ -119,7 +119,7 @@
         sResMap.put(HomeSettings.class.getName(),
                 new SearchIndexableResource(
                         Ranking.getRankForClassName(HomeSettings.class.getName()),
-                        R.xml.home_selection,
+                        NO_DATA_RES_ID,
                         HomeSettings.class.getName(),
                         R.drawable.ic_settings_home));
 
diff --git a/src/com/android/settings/widget/ChartDataUsageView.java b/src/com/android/settings/widget/ChartDataUsageView.java
index 4e16bfc..c20a8db 100644
--- a/src/com/android/settings/widget/ChartDataUsageView.java
+++ b/src/com/android/settings/widget/ChartDataUsageView.java
@@ -50,26 +50,24 @@
     private static final int MSG_UPDATE_AXIS = 100;
     private static final long DELAY_MILLIS = 250;
 
-    private static final boolean LIMIT_SWEEPS_TO_VALID_DATA = false;
-
     private ChartGridView mGrid;
     private ChartNetworkSeriesView mSeries;
     private ChartNetworkSeriesView mDetailSeries;
 
     private NetworkStatsHistory mHistory;
 
-    private ChartSweepView mSweepLeft;
-    private ChartSweepView mSweepRight;
     private ChartSweepView mSweepWarning;
     private ChartSweepView mSweepLimit;
 
+    private long mInspectStart;
+    private long mInspectEnd;
+
     private Handler mHandler;
 
     /** Current maximum value of {@link #mVert}. */
     private long mVertMax;
 
     public interface DataUsageChartListener {
-        public void onInspectRangeChanged();
         public void onWarningChanged();
         public void onLimitChanged();
         public void requestWarningEdit();
@@ -112,43 +110,27 @@
         mDetailSeries = (ChartNetworkSeriesView) findViewById(R.id.detail_series);
         mDetailSeries.setVisibility(View.GONE);
 
-        mSweepLeft = (ChartSweepView) findViewById(R.id.sweep_left);
-        mSweepRight = (ChartSweepView) findViewById(R.id.sweep_right);
         mSweepLimit = (ChartSweepView) findViewById(R.id.sweep_limit);
         mSweepWarning = (ChartSweepView) findViewById(R.id.sweep_warning);
 
         // prevent sweeps from crossing each other
-        mSweepLeft.setValidRangeDynamic(null, mSweepRight);
-        mSweepRight.setValidRangeDynamic(mSweepLeft, null);
         mSweepWarning.setValidRangeDynamic(null, mSweepLimit);
         mSweepLimit.setValidRangeDynamic(mSweepWarning, null);
 
         // mark neighbors for checking touch events against
-        mSweepLeft.setNeighbors(mSweepRight);
-        mSweepRight.setNeighbors(mSweepLeft);
-        mSweepLimit.setNeighbors(mSweepWarning, mSweepLeft, mSweepRight);
-        mSweepWarning.setNeighbors(mSweepLimit, mSweepLeft, mSweepRight);
+        mSweepLimit.setNeighbors(mSweepWarning);
+        mSweepWarning.setNeighbors(mSweepLimit);
 
-        mSweepLeft.addOnSweepListener(mHorizListener);
-        mSweepRight.addOnSweepListener(mHorizListener);
         mSweepWarning.addOnSweepListener(mVertListener);
         mSweepLimit.addOnSweepListener(mVertListener);
 
         mSweepWarning.setDragInterval(5 * MB_IN_BYTES);
         mSweepLimit.setDragInterval(5 * MB_IN_BYTES);
 
-        // TODO: make time sweeps adjustable through dpad
-        mSweepLeft.setClickable(false);
-        mSweepLeft.setFocusable(false);
-        mSweepRight.setClickable(false);
-        mSweepRight.setFocusable(false);
-
         // tell everyone about our axis
         mGrid.init(mHoriz, mVert);
         mSeries.init(mHoriz, mVert);
         mDetailSeries.init(mHoriz, mVert);
-        mSweepLeft.init(mHoriz);
-        mSweepRight.init(mHoriz);
         mSweepWarning.init(mVert);
         mSweepLimit.init(mVert);
 
@@ -194,7 +176,7 @@
             mSweepLimit.setEnabled(true);
             mSweepLimit.setValue(policy.limitBytes);
         } else {
-            mSweepLimit.setVisibility(View.VISIBLE);
+            mSweepLimit.setVisibility(View.INVISIBLE);
             mSweepLimit.setEnabled(false);
             mSweepLimit.setValue(-1);
         }
@@ -295,23 +277,6 @@
         mSeries.setEstimateVisible(estimateVisible);
     }
 
-    private OnSweepListener mHorizListener = new OnSweepListener() {
-        @Override
-        public void onSweep(ChartSweepView sweep, boolean sweepDone) {
-            updatePrimaryRange();
-
-            // update detail list only when done sweeping
-            if (sweepDone && mListener != null) {
-                mListener.onInspectRangeChanged();
-            }
-        }
-
-        @Override
-        public void requestEdit(ChartSweepView sweep) {
-            // ignored
-        }
-    };
-
     private void sendUpdateAxisDelayed(ChartSweepView sweep, boolean force) {
         if (force || !mHandler.hasMessages(MSG_UPDATE_AXIS, sweep)) {
             mHandler.sendMessageDelayed(
@@ -369,11 +334,11 @@
     }
 
     public long getInspectStart() {
-        return mSweepLeft.getValue();
+        return mInspectStart;
     }
 
     public long getInspectEnd() {
-        return mSweepRight.getValue();
+        return mInspectEnd;
     }
 
     public long getWarningBytes() {
@@ -384,14 +349,6 @@
         return mSweepLimit.getLabelValue();
     }
 
-    private long getHistoryStart() {
-        return mHistory != null ? mHistory.getStart() : Long.MAX_VALUE;
-    }
-
-    private long getHistoryEnd() {
-        return mHistory != null ? mHistory.getEnd() : Long.MIN_VALUE;
-    }
-
     /**
      * Set the exact time range that should be displayed, updating how
      * {@link ChartNetworkSeriesView} paints. Moves inspection ranges to be the
@@ -403,30 +360,8 @@
         mSeries.setBounds(visibleStart, visibleEnd);
         mDetailSeries.setBounds(visibleStart, visibleEnd);
 
-        final long historyStart = getHistoryStart();
-        final long historyEnd = getHistoryEnd();
-
-        final long validStart = historyStart == Long.MAX_VALUE ? visibleStart
-                : Math.max(visibleStart, historyStart);
-        final long validEnd = historyEnd == Long.MIN_VALUE ? visibleEnd
-                : Math.min(visibleEnd, historyEnd);
-
-        if (LIMIT_SWEEPS_TO_VALID_DATA) {
-            // prevent time sweeps from leaving valid data
-            mSweepLeft.setValidRange(validStart, validEnd);
-            mSweepRight.setValidRange(validStart, validEnd);
-        } else {
-            mSweepLeft.setValidRange(visibleStart, visibleEnd);
-            mSweepRight.setValidRange(visibleStart, visibleEnd);
-        }
-
-        // default sweeps to last week of data
-        final long halfRange = (visibleEnd + visibleStart) / 2;
-        final long sweepMax = validEnd;
-        final long sweepMin = Math.max(visibleStart, (sweepMax - DateUtils.WEEK_IN_MILLIS));
-
-        mSweepLeft.setValue(sweepMin);
-        mSweepRight.setValue(sweepMax);
+        mInspectStart = visibleStart;
+        mInspectEnd = visibleEnd;
 
         requestLayout();
         if (changed) {
@@ -440,15 +375,11 @@
     }
 
     private void updatePrimaryRange() {
-        final long left = mSweepLeft.getValue();
-        final long right = mSweepRight.getValue();
-
         // prefer showing primary range on detail series, when available
         if (mDetailSeries.getVisibility() == View.VISIBLE) {
-            mDetailSeries.setPrimaryRange(left, right);
-            mSeries.setPrimaryRange(0, 0);
+            mSeries.setSecondary(true);
         } else {
-            mSeries.setPrimaryRange(left, right);
+            mSeries.setSecondary(false);
         }
     }
 
diff --git a/src/com/android/settings/widget/ChartGridView.java b/src/com/android/settings/widget/ChartGridView.java
index ec5882c..4cd6f5f 100644
--- a/src/com/android/settings/widget/ChartGridView.java
+++ b/src/com/android/settings/widget/ChartGridView.java
@@ -19,22 +19,25 @@
 import static com.android.settings.DataUsageSummary.formatDateRange;
 
 import android.content.Context;
+import android.content.res.ColorStateList;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
 import android.graphics.Canvas;
-import android.graphics.Color;
 import android.graphics.Paint;
 import android.graphics.drawable.Drawable;
 import android.text.Layout;
 import android.text.StaticLayout;
 import android.text.TextPaint;
 import android.util.AttributeSet;
+import android.util.Log;
 import android.util.TypedValue;
 import android.view.View;
 
 import com.android.internal.util.Preconditions;
 import com.android.settings.R;
 
+import java.util.Locale;
+
 /**
  * Background of {@link ChartView} that renders grid lines as requested by
  * {@link ChartAxis#getTickPoints()}.
@@ -47,10 +50,13 @@
     private Drawable mPrimary;
     private Drawable mSecondary;
     private Drawable mBorder;
+
+    private int mLabelSize;
     private int mLabelColor;
 
-    private Layout mLayoutStart;
-    private Layout mLayoutEnd;
+    private Layout mLabelStart;
+    private Layout mLabelMid;
+    private Layout mLabelEnd;
 
     public ChartGridView(Context context) {
         this(context, null, 0);
@@ -71,7 +77,17 @@
         mPrimary = a.getDrawable(R.styleable.ChartGridView_primaryDrawable);
         mSecondary = a.getDrawable(R.styleable.ChartGridView_secondaryDrawable);
         mBorder = a.getDrawable(R.styleable.ChartGridView_borderDrawable);
-        mLabelColor = a.getColor(R.styleable.ChartGridView_labelColor, Color.RED);
+
+        final int taId = a.getResourceId(R.styleable.ChartGridView_android_textAppearance, -1);
+        final TypedArray ta = context.obtainStyledAttributes(taId,
+                com.android.internal.R.styleable.TextAppearance);
+        mLabelSize = ta.getDimensionPixelSize(
+                com.android.internal.R.styleable.TextAppearance_textSize, 0);
+        ta.recycle();
+
+        final ColorStateList labelColor = a.getColorStateList(
+                R.styleable.ChartGridView_android_textColor);
+        mLabelColor = labelColor.getDefaultColor();
 
         a.recycle();
     }
@@ -83,71 +99,83 @@
 
     void setBounds(long start, long end) {
         final Context context = getContext();
-        mLayoutStart = makeLayout(formatDateRange(context, start, start));
-        mLayoutEnd = makeLayout(formatDateRange(context, end, end));
+        final long mid = (start + end) / 2;
+        mLabelStart = makeLabel(formatDateRange(context, start, start));
+        mLabelMid = makeLabel(formatDateRange(context, mid, mid));
+        mLabelEnd = makeLabel(formatDateRange(context, end, end));
         invalidate();
     }
 
     @Override
     protected void onDraw(Canvas canvas) {
         final int width = getWidth();
-        final int height = getHeight();
+        final int height = getHeight() - getPaddingBottom();
 
         final Drawable secondary = mSecondary;
-        final int secondaryHeight = mSecondary.getIntrinsicHeight();
+        if (secondary != null) {
+            final int secondaryHeight = secondary.getIntrinsicHeight();
 
-        final float[] vertTicks = mVert.getTickPoints();
-        for (float y : vertTicks) {
-            final int bottom = (int) Math.min(y + secondaryHeight, height);
-            secondary.setBounds(0, (int) y, width, bottom);
-            secondary.draw(canvas);
+            final float[] vertTicks = mVert.getTickPoints();
+            for (float y : vertTicks) {
+                final int bottom = (int) Math.min(y + secondaryHeight, height);
+                secondary.setBounds(0, (int) y, width, bottom);
+                secondary.draw(canvas);
+            }
         }
 
         final Drawable primary = mPrimary;
-        final int primaryWidth = mPrimary.getIntrinsicWidth();
-        final int primaryHeight = mPrimary.getIntrinsicHeight();
+        if (primary != null) {
+            final int primaryWidth = primary.getIntrinsicWidth();
+            final int primaryHeight = primary.getIntrinsicHeight();
 
-        final float[] horizTicks = mHoriz.getTickPoints();
-        for (float x : horizTicks) {
-            final int right = (int) Math.min(x + primaryWidth, width);
-            primary.setBounds((int) x, 0, right, height);
-            primary.draw(canvas);
+            final float[] horizTicks = mHoriz.getTickPoints();
+            for (float x : horizTicks) {
+                final int right = (int) Math.min(x + primaryWidth, width);
+                primary.setBounds((int) x, 0, right, height);
+                primary.draw(canvas);
+            }
         }
 
         mBorder.setBounds(0, 0, width, height);
         mBorder.draw(canvas);
 
-        final int padding = mLayoutStart != null ? mLayoutStart.getHeight() / 8 : 0;
+        final int padding = mLabelStart != null ? mLabelStart.getHeight() / 8 : 0;
 
-        final Layout start = mLayoutStart;
+        final Layout start = mLabelStart;
         if (start != null) {
-            canvas.save();
+            final int saveCount = canvas.save();
             canvas.translate(0, height + padding);
             start.draw(canvas);
-            canvas.restore();
+            canvas.restoreToCount(saveCount);
         }
 
-        final Layout end = mLayoutEnd;
+        final Layout mid = mLabelMid;
+        if (mid != null) {
+            final int saveCount = canvas.save();
+            canvas.translate((width - mid.getWidth()) / 2, height + padding);
+            mid.draw(canvas);
+            canvas.restoreToCount(saveCount);
+        }
+
+        final Layout end = mLabelEnd;
         if (end != null) {
-            canvas.save();
+            final int saveCount = canvas.save();
             canvas.translate(width - end.getWidth(), height + padding);
             end.draw(canvas);
-            canvas.restore();
+            canvas.restoreToCount(saveCount);
         }
     }
 
-    private Layout makeLayout(CharSequence text) {
+    private Layout makeLabel(CharSequence text) {
         final Resources res = getResources();
         final TextPaint paint = new TextPaint(Paint.ANTI_ALIAS_FLAG);
         paint.density = res.getDisplayMetrics().density;
         paint.setCompatibilityScaling(res.getCompatibilityInfo().applicationScale);
         paint.setColor(mLabelColor);
-        paint.setTextSize(
-                TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 10, res.getDisplayMetrics()));
+        paint.setTextSize(mLabelSize);
 
         return new StaticLayout(text, paint,
                 (int) Math.ceil(Layout.getDesiredWidth(text, paint)),
                 Layout.Alignment.ALIGN_NORMAL, 1.f, 0, true);
     }
-
 }
diff --git a/src/com/android/settings/widget/ChartNetworkSeriesView.java b/src/com/android/settings/widget/ChartNetworkSeriesView.java
index 6250a25..7aaba66 100644
--- a/src/com/android/settings/widget/ChartNetworkSeriesView.java
+++ b/src/com/android/settings/widget/ChartNetworkSeriesView.java
@@ -60,17 +60,17 @@
     private Path mPathFill;
     private Path mPathEstimate;
 
+    private int mSafeRegion;
+
     private long mStart;
     private long mEnd;
 
-    private long mPrimaryLeft;
-    private long mPrimaryRight;
-
     /** Series will be extended to reach this end time. */
     private long mEndTime = Long.MIN_VALUE;
 
     private boolean mPathValid = false;
     private boolean mEstimateVisible = false;
+    private boolean mSecondary = false;
 
     private long mMax;
     private long mMaxEstimate;
@@ -93,8 +93,11 @@
         final int fill = a.getColor(R.styleable.ChartNetworkSeriesView_fillColor, Color.RED);
         final int fillSecondary = a.getColor(
                 R.styleable.ChartNetworkSeriesView_fillColorSecondary, Color.RED);
+        final int safeRegion = a.getDimensionPixelSize(
+                R.styleable.ChartNetworkSeriesView_safeRegion, 0);
 
         setChartColor(stroke, fill, fillSecondary);
+        setSafeRegion(safeRegion);
         setWillNotDraw(false);
 
         a.recycle();
@@ -134,6 +137,10 @@
         mPaintEstimate.setPathEffect(new DashPathEffect(new float[] { 10, 10 }, 1));
     }
 
+    public void setSafeRegion(int safeRegion) {
+        mSafeRegion = safeRegion;
+    }
+
     public void bindNetworkStats(NetworkStatsHistory stats) {
         mStats = stats;
         invalidatePath();
@@ -145,14 +152,8 @@
         mEnd = end;
     }
 
-    /**
-     * Set the range to paint with {@link #mPaintFill}, leaving the remaining
-     * area to be painted with {@link #mPaintFillSecondary}.
-     */
-    public void setPrimaryRange(long left, long right) {
-        mPrimaryLeft = left;
-        mPrimaryRight = right;
-        invalidate();
+    public void setSecondary(boolean secondary) {
+        mSecondary = secondary;
     }
 
     public void invalidatePath() {
@@ -322,9 +323,6 @@
             generatePath();
         }
 
-        final float primaryLeftPoint = mHoriz.convertToPoint(mPrimaryLeft);
-        final float primaryRightPoint = mHoriz.convertToPoint(mPrimaryRight);
-
         if (mEstimateVisible) {
             save = canvas.save();
             canvas.clipRect(0, 0, getWidth(), getHeight());
@@ -332,21 +330,11 @@
             canvas.restoreToCount(save);
         }
 
-        save = canvas.save();
-        canvas.clipRect(0, 0, primaryLeftPoint, getHeight());
-        canvas.drawPath(mPathFill, mPaintFillSecondary);
-        canvas.restoreToCount(save);
+        final Paint paintFill = mSecondary ? mPaintFillSecondary : mPaintFill;
 
         save = canvas.save();
-        canvas.clipRect(primaryRightPoint, 0, getWidth(), getHeight());
-        canvas.drawPath(mPathFill, mPaintFillSecondary);
+        canvas.clipRect(mSafeRegion, 0, getWidth(), getHeight() - mSafeRegion);
+        canvas.drawPath(mPathFill, paintFill);
         canvas.restoreToCount(save);
-
-        save = canvas.save();
-        canvas.clipRect(primaryLeftPoint, 0, primaryRightPoint, getHeight());
-        canvas.drawPath(mPathFill, mPaintFill);
-        canvas.drawPath(mPathStroke, mPaintStroke);
-        canvas.restoreToCount(save);
-
     }
 }
diff --git a/src/com/android/settings/widget/ChartSweepView.java b/src/com/android/settings/widget/ChartSweepView.java
index 774e5d8..04fc862 100644
--- a/src/com/android/settings/widget/ChartSweepView.java
+++ b/src/com/android/settings/widget/ChartSweepView.java
@@ -58,6 +58,7 @@
 
     private Rect mMargins = new Rect();
     private float mNeighborMargin;
+    private int mSafeRegion;
 
     private int mFollowAxis;
 
@@ -125,6 +126,7 @@
         setSweepDrawable(a.getDrawable(R.styleable.ChartSweepView_sweepDrawable));
         setFollowAxis(a.getInt(R.styleable.ChartSweepView_followAxis, -1));
         setNeighborMargin(a.getDimensionPixelSize(R.styleable.ChartSweepView_neighborMargin, 0));
+        setSafeRegion(a.getDimensionPixelSize(R.styleable.ChartSweepView_safeRegion, 0));
 
         setLabelMinSize(a.getDimensionPixelSize(R.styleable.ChartSweepView_labelSize, 0));
         setLabelTemplate(a.getResourceId(R.styleable.ChartSweepView_labelTemplate, 0));
@@ -259,7 +261,6 @@
             paint.density = getResources().getDisplayMetrics().density;
             paint.setCompatibilityScaling(getResources().getCompatibilityInfo().applicationScale);
             paint.setColor(mLabelColor);
-            paint.setShadowLayer(4 * paint.density, 0, 0, Color.BLACK);
 
             mLabelTemplate = new SpannableStringBuilder(template);
             mLabelLayout = new DynamicLayout(
@@ -383,6 +384,10 @@
         mNeighborMargin = neighborMargin;
     }
 
+    public void setSafeRegion(int safeRegion) {
+        mSafeRegion = safeRegion;
+    }
+
     /**
      * Set valid range this sweep can move within, defined by the given
      * {@link ChartSweepView}. The most restrictive combination of all valid
@@ -709,7 +714,7 @@
                 mLabelLayout.draw(canvas);
             }
             canvas.restoreToCount(count);
-            labelSize = (int) mLabelSize;
+            labelSize = (int) mLabelSize + mSafeRegion;
         } else {
             labelSize = 0;
         }
diff --git a/src/com/android/settings/widget/ChartView.java b/src/com/android/settings/widget/ChartView.java
index 69e6e94..30284bc 100644
--- a/src/com/android/settings/widget/ChartView.java
+++ b/src/com/android/settings/widget/ChartView.java
@@ -112,12 +112,18 @@
 
             parentRect.set(mContent);
 
-            if (child instanceof ChartNetworkSeriesView || child instanceof ChartGridView) {
+            if (child instanceof ChartNetworkSeriesView) {
                 // series are always laid out to fill entire graph area
                 // TODO: handle scrolling for series larger than content area
                 Gravity.apply(params.gravity, width, height, parentRect, childRect);
                 child.layout(childRect.left, childRect.top, childRect.right, childRect.bottom);
 
+            } else if (child instanceof ChartGridView) {
+                // Grid uses some extra room for labels
+                Gravity.apply(params.gravity, width, height, parentRect, childRect);
+                child.layout(childRect.left, childRect.top, childRect.right,
+                        childRect.bottom + child.getPaddingBottom());
+
             } else if (child instanceof ChartSweepView) {
                 layoutSweep((ChartSweepView) child, parentRect, childRect);
                 child.layout(childRect.left, childRect.top, childRect.right, childRect.bottom);
@@ -154,5 +160,4 @@
                     parentRect, childRect);
         }
     }
-
 }
diff --git a/src/com/android/settings/widget/PieChartView.java b/src/com/android/settings/widget/PieChartView.java
deleted file mode 100644
index 6070190..0000000
--- a/src/com/android/settings/widget/PieChartView.java
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.widget;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.Canvas;
-import android.graphics.Color;
-import android.graphics.Matrix;
-import android.graphics.Paint;
-import android.graphics.Paint.Style;
-import android.graphics.Path;
-import android.graphics.Path.Direction;
-import android.graphics.RadialGradient;
-import android.graphics.RectF;
-import android.graphics.Shader.TileMode;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.view.View;
-
-import com.google.android.collect.Lists;
-
-import java.util.ArrayList;
-
-/**
- * Pie chart with multiple items.
- */
-public class PieChartView extends View {
-    public static final String TAG = "PieChartView";
-    public static final boolean LOGD = false;
-
-    private static final boolean FILL_GRADIENT = false;
-
-    private ArrayList<Slice> mSlices = Lists.newArrayList();
-
-    private int mOriginAngle;
-    private Matrix mMatrix = new Matrix();
-
-    private Paint mPaintOutline = new Paint();
-
-    private Path mPathSide = new Path();
-    private Path mPathSideOutline = new Path();
-
-    private Path mPathOutline = new Path();
-
-    private int mSideWidth;
-
-    public class Slice {
-        public long value;
-
-        public Path path = new Path();
-        public Path pathSide = new Path();
-        public Path pathOutline = new Path();
-
-        public Paint paint;
-
-        public Slice(long value, int color) {
-            this.value = value;
-            this.paint = buildFillPaint(color, getResources());
-        }
-    }
-
-    public PieChartView(Context context) {
-        this(context, null);
-    }
-
-    public PieChartView(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public PieChartView(Context context, AttributeSet attrs, int defStyle) {
-        super(context, attrs, defStyle);
-
-        mPaintOutline.setColor(Color.BLACK);
-        mPaintOutline.setStyle(Style.STROKE);
-        mPaintOutline.setStrokeWidth(3f * getResources().getDisplayMetrics().density);
-        mPaintOutline.setAntiAlias(true);
-
-        mSideWidth = (int) (20 * getResources().getDisplayMetrics().density);
-
-        setWillNotDraw(false);
-    }
-
-    private static Paint buildFillPaint(int color, Resources res) {
-        final Paint paint = new Paint();
-
-        paint.setColor(color);
-        paint.setStyle(Style.FILL_AND_STROKE);
-        paint.setAntiAlias(true);
-
-        if (FILL_GRADIENT) {
-            final int width = (int) (280 * res.getDisplayMetrics().density);
-            paint.setShader(new RadialGradient(0, 0, width, color, darken(color), TileMode.MIRROR));
-        }
-
-        return paint;
-    }
-
-    public void setOriginAngle(int originAngle) {
-        mOriginAngle = originAngle;
-    }
-
-    public void addSlice(long value, int color) {
-        mSlices.add(new Slice(value, color));
-    }
-
-    public void removeAllSlices() {
-        mSlices.clear();
-    }
-
-    @Override
-    protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
-        final float centerX = getWidth() / 2;
-        final float centerY = getHeight() / 2;
-
-        mMatrix.reset();
-        mMatrix.postScale(0.665f, 0.95f, centerX, centerY);
-        mMatrix.postRotate(-40, centerX, centerY);
-
-        generatePath();
-    }
-
-    public void generatePath() {
-        if (LOGD) Log.d(TAG, "generatePath()");
-
-        long total = 0;
-        for (Slice slice : mSlices) {
-            slice.path.reset();
-            slice.pathSide.reset();
-            slice.pathOutline.reset();
-            total += slice.value;
-        }
-
-        mPathSide.reset();
-        mPathSideOutline.reset();
-        mPathOutline.reset();
-
-        // bail when not enough stats to render
-        if (total == 0) {
-            invalidate();
-            return;
-        }
-
-        final int width = getWidth();
-        final int height = getHeight();
-
-        final RectF rect = new RectF(0, 0, width, height);
-        final RectF rectSide = new RectF();
-        rectSide.set(rect);
-        rectSide.offset(-mSideWidth, 0);
-
-        mPathSide.addOval(rectSide, Direction.CW);
-        mPathSideOutline.addOval(rectSide, Direction.CW);
-        mPathOutline.addOval(rect, Direction.CW);
-
-        int startAngle = mOriginAngle;
-        for (Slice slice : mSlices) {
-            final int sweepAngle = (int) (slice.value * 360 / total);
-            final int endAngle = startAngle + sweepAngle;
-
-            final float startAngleMod = startAngle % 360;
-            final float endAngleMod = endAngle % 360;
-            final boolean startSideVisible = startAngleMod > 90 && startAngleMod < 270;
-            final boolean endSideVisible = endAngleMod > 90 && endAngleMod < 270;
-
-            // draw slice
-            slice.path.moveTo(rect.centerX(), rect.centerY());
-            slice.path.arcTo(rect, startAngle, sweepAngle);
-            slice.path.lineTo(rect.centerX(), rect.centerY());
-
-            if (startSideVisible || endSideVisible) {
-
-                // when start is beyond horizon, push until visible
-                final float startAngleSide = startSideVisible ? startAngle : 450;
-                final float endAngleSide = endSideVisible ? endAngle : 270;
-                final float sweepAngleSide = endAngleSide - startAngleSide;
-
-                // draw slice side
-                slice.pathSide.moveTo(rect.centerX(), rect.centerY());
-                slice.pathSide.arcTo(rect, startAngleSide, 0);
-                slice.pathSide.rLineTo(-mSideWidth, 0);
-                slice.pathSide.arcTo(rectSide, startAngleSide, sweepAngleSide);
-                slice.pathSide.rLineTo(mSideWidth, 0);
-                slice.pathSide.arcTo(rect, endAngleSide, -sweepAngleSide);
-            }
-
-            // draw slice outline
-            slice.pathOutline.moveTo(rect.centerX(), rect.centerY());
-            slice.pathOutline.arcTo(rect, startAngle, 0);
-            if (startSideVisible) {
-                slice.pathOutline.rLineTo(-mSideWidth, 0);
-            }
-            slice.pathOutline.moveTo(rect.centerX(), rect.centerY());
-            slice.pathOutline.arcTo(rect, startAngle + sweepAngle, 0);
-            if (endSideVisible) {
-                slice.pathOutline.rLineTo(-mSideWidth, 0);
-            }
-
-            startAngle += sweepAngle;
-        }
-
-        invalidate();
-    }
-
-    @Override
-    protected void onDraw(Canvas canvas) {
-
-        canvas.concat(mMatrix);
-
-        for (Slice slice : mSlices) {
-            canvas.drawPath(slice.pathSide, slice.paint);
-        }
-        canvas.drawPath(mPathSideOutline, mPaintOutline);
-
-        for (Slice slice : mSlices) {
-            canvas.drawPath(slice.path, slice.paint);
-            canvas.drawPath(slice.pathOutline, mPaintOutline);
-        }
-        canvas.drawPath(mPathOutline, mPaintOutline);
-    }
-
-    public static int darken(int color) {
-        float[] hsv = new float[3];
-        Color.colorToHSV(color, hsv);
-        hsv[2] /= 2;
-        hsv[1] /= 2;
-        return Color.HSVToColor(hsv);
-    }
-
-}
diff --git a/src/com/android/settings/widget/SwitchBar.java b/src/com/android/settings/widget/SwitchBar.java
index d974a9d..e24d83f 100644
--- a/src/com/android/settings/widget/SwitchBar.java
+++ b/src/com/android/settings/widget/SwitchBar.java
@@ -97,9 +97,6 @@
             }
         });
 
-        mSwitch.setTrackResource(R.drawable.switch_track);
-        mSwitch.setThumbResource(R.drawable.switch_inner);
-
         setOnClickListener(this);
 
         // Default is hide
diff --git a/src/com/android/settings/wifi/WifiApDialog.java b/src/com/android/settings/wifi/WifiApDialog.java
index 211e85d..fb8026a 100644
--- a/src/com/android/settings/wifi/WifiApDialog.java
+++ b/src/com/android/settings/wifi/WifiApDialog.java
@@ -47,8 +47,7 @@
     private final DialogInterface.OnClickListener mListener;
 
     public static final int OPEN_INDEX = 0;
-    public static final int WPA_INDEX = 1;
-    public static final int WPA2_INDEX = 2;
+    public static final int WPA2_INDEX = 1;
 
     private View mView;
     private TextView mSsid;
@@ -68,9 +67,7 @@
     }
 
     public static int getSecurityTypeIndex(WifiConfiguration wifiConfig) {
-        if (wifiConfig.allowedKeyManagement.get(KeyMgmt.WPA_PSK)) {
-            return WPA_INDEX;
-        } else if (wifiConfig.allowedKeyManagement.get(KeyMgmt.WPA2_PSK)) {
+        if (wifiConfig.allowedKeyManagement.get(KeyMgmt.WPA2_PSK)) {
             return WPA2_INDEX;
         }
         return OPEN_INDEX;
@@ -93,15 +90,6 @@
                 config.allowedKeyManagement.set(KeyMgmt.NONE);
                 return config;
 
-            case WPA_INDEX:
-                config.allowedKeyManagement.set(KeyMgmt.WPA_PSK);
-                config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN);
-                if (mPassword.length() != 0) {
-                    String password = mPassword.getText().toString();
-                    config.preSharedKey = password;
-                }
-                return config;
-
             case WPA2_INDEX:
                 config.allowedKeyManagement.set(KeyMgmt.WPA2_PSK);
                 config.allowedAuthAlgorithms.set(AuthAlgorithm.OPEN);
@@ -137,8 +125,7 @@
         if (mWifiConfig != null) {
             mSsid.setText(mWifiConfig.SSID);
             mSecurity.setSelection(mSecurityTypeIndex);
-            if (mSecurityTypeIndex == WPA_INDEX ||
-                    mSecurityTypeIndex == WPA2_INDEX) {
+            if (mSecurityTypeIndex == WPA2_INDEX) {
                   mPassword.setText(mWifiConfig.preSharedKey);
             }
         }
@@ -156,7 +143,7 @@
 
     private void validate() {
         if ((mSsid != null && mSsid.length() == 0) ||
-                   (((mSecurityTypeIndex == WPA_INDEX) || (mSecurityTypeIndex == WPA2_INDEX))&&
+                   ((mSecurityTypeIndex == WPA2_INDEX)&&
                         mPassword.length() < 8)) {
             getButton(BUTTON_SUBMIT).setEnabled(false);
         } else {
