diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 37adc02..8369672 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -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" />
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/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/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/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 04794da..c645666 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -4784,20 +4784,31 @@
     <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] -->
@@ -4858,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] -->
@@ -4930,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>
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/src/com/android/settings/DataUsageSummary.java b/src/com/android/settings/DataUsageSummary.java
index bdae072..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,39 +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());
-
-        // TODO: Define behavior of this sync button. See: http://b/16076571
-        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)) {
@@ -521,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))) {
@@ -528,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 {
@@ -553,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;
     }
@@ -725,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
 
@@ -748,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 {
@@ -808,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
@@ -904,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() {
@@ -943,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
@@ -958,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);
@@ -966,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);
@@ -1049,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) {
@@ -1178,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));
 
@@ -1195,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);
@@ -1207,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();
     }
@@ -1278,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);
         }
     };
 
@@ -1309,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());
         }
@@ -1404,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);
         }
 
@@ -1447,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;
         }
@@ -1480,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>() {
@@ -1516,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;
@@ -1548,6 +1571,9 @@
                 }
                 item.addUid(uid);
                 item.total += entry.rxBytes + entry.txBytes;
+                if (item.total > mLargest) {
+                    mLargest = item.total;
+                }
             }
 
             for (int uid : restrictedUids) {
@@ -1564,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();
         }
 
@@ -1585,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;
         }
@@ -1639,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();
         }
 
@@ -1948,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 {
@@ -2308,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/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/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);
-    }
-
-}
