Merge "[WifiSetup] Update Wi-Fi icon color"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index aec34bc..6e7b19e 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -62,6 +62,7 @@
     <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
     <uses-permission android:name="android.permission.COPY_PROTECTED_DATA" />
     <uses-permission android:name="android.permission.MANAGE_USERS" />
+    <uses-permission android:name="android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS" />
     <uses-permission android:name="android.permission.READ_PROFILE" />
     <uses-permission android:name="android.permission.CONFIGURE_WIFI_DISPLAY" />
     <uses-permission android:name="android.permission.SET_TIME" />
diff --git a/res/drawable-hdpi/ic_wifi_lock_signal_0_teal.png b/res/drawable-hdpi/ic_wifi_lock_signal_0_teal.png
deleted file mode 100644
index d0c9b30..0000000
--- a/res/drawable-hdpi/ic_wifi_lock_signal_0_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_wifi_lock_signal_1_teal.png b/res/drawable-hdpi/ic_wifi_lock_signal_1_teal.png
deleted file mode 100644
index 0bef891..0000000
--- a/res/drawable-hdpi/ic_wifi_lock_signal_1_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_wifi_lock_signal_2_teal.png b/res/drawable-hdpi/ic_wifi_lock_signal_2_teal.png
deleted file mode 100644
index 9252d90..0000000
--- a/res/drawable-hdpi/ic_wifi_lock_signal_2_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_wifi_lock_signal_3_teal.png b/res/drawable-hdpi/ic_wifi_lock_signal_3_teal.png
deleted file mode 100644
index a758ad4..0000000
--- a/res/drawable-hdpi/ic_wifi_lock_signal_3_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_wifi_lock_signal_4_teal.png b/res/drawable-hdpi/ic_wifi_lock_signal_4_teal.png
deleted file mode 100644
index 8378399..0000000
--- a/res/drawable-hdpi/ic_wifi_lock_signal_4_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_wifi_signal_0_teal.png b/res/drawable-hdpi/ic_wifi_signal_0_teal.png
deleted file mode 100644
index 3030279..0000000
--- a/res/drawable-hdpi/ic_wifi_signal_0_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_wifi_signal_1_teal.png b/res/drawable-hdpi/ic_wifi_signal_1_teal.png
deleted file mode 100644
index 3340d95..0000000
--- a/res/drawable-hdpi/ic_wifi_signal_1_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_wifi_signal_2_teal.png b/res/drawable-hdpi/ic_wifi_signal_2_teal.png
deleted file mode 100644
index 180f7b1..0000000
--- a/res/drawable-hdpi/ic_wifi_signal_2_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_wifi_signal_3_teal.png b/res/drawable-hdpi/ic_wifi_signal_3_teal.png
deleted file mode 100644
index af27fb0..0000000
--- a/res/drawable-hdpi/ic_wifi_signal_3_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_wifi_signal_4_teal.png b/res/drawable-hdpi/ic_wifi_signal_4_teal.png
deleted file mode 100644
index 5c82e8b..0000000
--- a/res/drawable-hdpi/ic_wifi_signal_4_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_wifi_lock_signal_0_teal.png b/res/drawable-mdpi/ic_wifi_lock_signal_0_teal.png
deleted file mode 100644
index d746c1e..0000000
--- a/res/drawable-mdpi/ic_wifi_lock_signal_0_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_wifi_lock_signal_1_teal.png b/res/drawable-mdpi/ic_wifi_lock_signal_1_teal.png
deleted file mode 100644
index 01f6f87..0000000
--- a/res/drawable-mdpi/ic_wifi_lock_signal_1_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_wifi_lock_signal_2_teal.png b/res/drawable-mdpi/ic_wifi_lock_signal_2_teal.png
deleted file mode 100644
index 230b1a3..0000000
--- a/res/drawable-mdpi/ic_wifi_lock_signal_2_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_wifi_lock_signal_3_teal.png b/res/drawable-mdpi/ic_wifi_lock_signal_3_teal.png
deleted file mode 100644
index 20fe9a5..0000000
--- a/res/drawable-mdpi/ic_wifi_lock_signal_3_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_wifi_lock_signal_4_teal.png b/res/drawable-mdpi/ic_wifi_lock_signal_4_teal.png
deleted file mode 100644
index 938a203..0000000
--- a/res/drawable-mdpi/ic_wifi_lock_signal_4_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_wifi_signal_0_teal.png b/res/drawable-mdpi/ic_wifi_signal_0_teal.png
deleted file mode 100644
index 9dcdf91..0000000
--- a/res/drawable-mdpi/ic_wifi_signal_0_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_wifi_signal_1_teal.png b/res/drawable-mdpi/ic_wifi_signal_1_teal.png
deleted file mode 100644
index b58d5f4..0000000
--- a/res/drawable-mdpi/ic_wifi_signal_1_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_wifi_signal_2_teal.png b/res/drawable-mdpi/ic_wifi_signal_2_teal.png
deleted file mode 100644
index 5cbb5a3..0000000
--- a/res/drawable-mdpi/ic_wifi_signal_2_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_wifi_signal_3_teal.png b/res/drawable-mdpi/ic_wifi_signal_3_teal.png
deleted file mode 100644
index cec46b0..0000000
--- a/res/drawable-mdpi/ic_wifi_signal_3_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_wifi_signal_4_teal.png b/res/drawable-mdpi/ic_wifi_signal_4_teal.png
deleted file mode 100644
index 6b81932f..0000000
--- a/res/drawable-mdpi/ic_wifi_signal_4_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_wifi_lock_signal_0_teal.png b/res/drawable-xhdpi/ic_wifi_lock_signal_0_teal.png
deleted file mode 100644
index 8d99e31..0000000
--- a/res/drawable-xhdpi/ic_wifi_lock_signal_0_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_wifi_lock_signal_1_teal.png b/res/drawable-xhdpi/ic_wifi_lock_signal_1_teal.png
deleted file mode 100644
index da282b6..0000000
--- a/res/drawable-xhdpi/ic_wifi_lock_signal_1_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_wifi_lock_signal_2_teal.png b/res/drawable-xhdpi/ic_wifi_lock_signal_2_teal.png
deleted file mode 100644
index b6a378f..0000000
--- a/res/drawable-xhdpi/ic_wifi_lock_signal_2_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_wifi_lock_signal_3_teal.png b/res/drawable-xhdpi/ic_wifi_lock_signal_3_teal.png
deleted file mode 100644
index 7227b08..0000000
--- a/res/drawable-xhdpi/ic_wifi_lock_signal_3_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_wifi_lock_signal_4_teal.png b/res/drawable-xhdpi/ic_wifi_lock_signal_4_teal.png
deleted file mode 100644
index 92257c3..0000000
--- a/res/drawable-xhdpi/ic_wifi_lock_signal_4_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_wifi_signal_0_teal.png b/res/drawable-xhdpi/ic_wifi_signal_0_teal.png
deleted file mode 100644
index 08aba96..0000000
--- a/res/drawable-xhdpi/ic_wifi_signal_0_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_wifi_signal_1_teal.png b/res/drawable-xhdpi/ic_wifi_signal_1_teal.png
deleted file mode 100644
index 8d282c9..0000000
--- a/res/drawable-xhdpi/ic_wifi_signal_1_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_wifi_signal_2_teal.png b/res/drawable-xhdpi/ic_wifi_signal_2_teal.png
deleted file mode 100644
index 6caedf9..0000000
--- a/res/drawable-xhdpi/ic_wifi_signal_2_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_wifi_signal_3_teal.png b/res/drawable-xhdpi/ic_wifi_signal_3_teal.png
deleted file mode 100644
index 799c9e3..0000000
--- a/res/drawable-xhdpi/ic_wifi_signal_3_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_wifi_signal_4_teal.png b/res/drawable-xhdpi/ic_wifi_signal_4_teal.png
deleted file mode 100644
index ad6a98e..0000000
--- a/res/drawable-xhdpi/ic_wifi_signal_4_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_wifi_lock_signal_0_teal.png b/res/drawable-xxhdpi/ic_wifi_lock_signal_0_teal.png
deleted file mode 100644
index 544c041..0000000
--- a/res/drawable-xxhdpi/ic_wifi_lock_signal_0_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_wifi_lock_signal_1_teal.png b/res/drawable-xxhdpi/ic_wifi_lock_signal_1_teal.png
deleted file mode 100644
index ac0cb62..0000000
--- a/res/drawable-xxhdpi/ic_wifi_lock_signal_1_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_wifi_lock_signal_2_teal.png b/res/drawable-xxhdpi/ic_wifi_lock_signal_2_teal.png
deleted file mode 100644
index beb6e12..0000000
--- a/res/drawable-xxhdpi/ic_wifi_lock_signal_2_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_wifi_lock_signal_3_teal.png b/res/drawable-xxhdpi/ic_wifi_lock_signal_3_teal.png
deleted file mode 100644
index 3eaaf39..0000000
--- a/res/drawable-xxhdpi/ic_wifi_lock_signal_3_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_wifi_lock_signal_4_teal.png b/res/drawable-xxhdpi/ic_wifi_lock_signal_4_teal.png
deleted file mode 100644
index 8b6bfb1..0000000
--- a/res/drawable-xxhdpi/ic_wifi_lock_signal_4_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_wifi_signal_0_teal.png b/res/drawable-xxhdpi/ic_wifi_signal_0_teal.png
deleted file mode 100644
index f28f0ad..0000000
--- a/res/drawable-xxhdpi/ic_wifi_signal_0_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_wifi_signal_1_teal.png b/res/drawable-xxhdpi/ic_wifi_signal_1_teal.png
deleted file mode 100644
index 1728dc7..0000000
--- a/res/drawable-xxhdpi/ic_wifi_signal_1_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_wifi_signal_2_teal.png b/res/drawable-xxhdpi/ic_wifi_signal_2_teal.png
deleted file mode 100644
index e7e4788..0000000
--- a/res/drawable-xxhdpi/ic_wifi_signal_2_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_wifi_signal_3_teal.png b/res/drawable-xxhdpi/ic_wifi_signal_3_teal.png
deleted file mode 100644
index c2967ed..0000000
--- a/res/drawable-xxhdpi/ic_wifi_signal_3_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_wifi_signal_4_teal.png b/res/drawable-xxhdpi/ic_wifi_signal_4_teal.png
deleted file mode 100644
index 3058e98..0000000
--- a/res/drawable-xxhdpi/ic_wifi_signal_4_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_wifi_lock_signal_0_teal.png b/res/drawable-xxxhdpi/ic_wifi_lock_signal_0_teal.png
deleted file mode 100644
index 74c9c31..0000000
--- a/res/drawable-xxxhdpi/ic_wifi_lock_signal_0_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_wifi_lock_signal_1_teal.png b/res/drawable-xxxhdpi/ic_wifi_lock_signal_1_teal.png
deleted file mode 100644
index dab15c4..0000000
--- a/res/drawable-xxxhdpi/ic_wifi_lock_signal_1_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_wifi_lock_signal_2_teal.png b/res/drawable-xxxhdpi/ic_wifi_lock_signal_2_teal.png
deleted file mode 100644
index 66a7736..0000000
--- a/res/drawable-xxxhdpi/ic_wifi_lock_signal_2_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_wifi_lock_signal_3_teal.png b/res/drawable-xxxhdpi/ic_wifi_lock_signal_3_teal.png
deleted file mode 100644
index d23cf22..0000000
--- a/res/drawable-xxxhdpi/ic_wifi_lock_signal_3_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_wifi_lock_signal_4_teal.png b/res/drawable-xxxhdpi/ic_wifi_lock_signal_4_teal.png
deleted file mode 100644
index 83e4988..0000000
--- a/res/drawable-xxxhdpi/ic_wifi_lock_signal_4_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_wifi_signal_0_teal.png b/res/drawable-xxxhdpi/ic_wifi_signal_0_teal.png
deleted file mode 100644
index 3dc5cbe..0000000
--- a/res/drawable-xxxhdpi/ic_wifi_signal_0_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_wifi_signal_1_teal.png b/res/drawable-xxxhdpi/ic_wifi_signal_1_teal.png
deleted file mode 100644
index d80ac48..0000000
--- a/res/drawable-xxxhdpi/ic_wifi_signal_1_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_wifi_signal_2_teal.png b/res/drawable-xxxhdpi/ic_wifi_signal_2_teal.png
deleted file mode 100644
index 4fdd825..0000000
--- a/res/drawable-xxxhdpi/ic_wifi_signal_2_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_wifi_signal_3_teal.png b/res/drawable-xxxhdpi/ic_wifi_signal_3_teal.png
deleted file mode 100644
index e1cbcb8..0000000
--- a/res/drawable-xxxhdpi/ic_wifi_signal_3_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_wifi_signal_4_teal.png b/res/drawable-xxxhdpi/ic_wifi_signal_4_teal.png
deleted file mode 100644
index bcc4233..0000000
--- a/res/drawable-xxxhdpi/ic_wifi_signal_4_teal.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/ic_wifi_signal_0.xml b/res/drawable/ic_wifi_signal_0.xml
new file mode 100644
index 0000000..3888161
--- /dev/null
+++ b/res/drawable/ic_wifi_signal_0.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2015 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="26dp"
+    android:height="24dp"
+    android:viewportWidth="26"
+    android:viewportHeight="24">
+    <path
+        android:fillAlpha="0.3"
+        android:fillColor="?attr/wifi_signal_color"
+        android:pathData="M13.0,22.0L25.6,6.5C25.1,6.1 20.3,2.1 13.0,2.1S0.9,6.1 0.4,6.5L13.0,22.0L13.0,22.0L13.0,22.0L13.0,22.0L13.0,22.0z"/>
+</vector>
diff --git a/res/drawable/ic_wifi_signal_1.xml b/res/drawable/ic_wifi_signal_1.xml
new file mode 100644
index 0000000..e0a2072
--- /dev/null
+++ b/res/drawable/ic_wifi_signal_1.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2015 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="26dp"
+    android:height="24dp"
+    android:viewportWidth="26"
+    android:viewportHeight="24">
+    <path
+        android:fillAlpha="0.3"
+        android:fillColor="?attr/wifi_signal_color"
+        android:pathData="M13.1,22.0L25.6,6.5C25.1,6.1 20.3,2.1 13.0,2.1S0.9,6.1 0.5,6.5L13.1,22.0L13.1,22.0L13.1,22.0L13.1,22.0L13.1,22.0z"/>
+    <path
+        android:fillColor="?attr/wifi_signal_color"
+        android:pathData="M13.1,22.0l5.5,-6.8c-0.2,-0.2 -2.3,-1.9 -5.5,-1.9s-5.3,1.8 -5.5,1.9L13.1,22.0L13.1,22.0L13.1,22.0L13.1,22.0L13.1,22.0z"/>
+</vector>
diff --git a/res/drawable/ic_wifi_signal_2.xml b/res/drawable/ic_wifi_signal_2.xml
new file mode 100644
index 0000000..d0daa60
--- /dev/null
+++ b/res/drawable/ic_wifi_signal_2.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2015 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="26dp"
+    android:height="24dp"
+    android:viewportWidth="26"
+    android:viewportHeight="24">
+    <path
+        android:fillAlpha="0.3"
+        android:fillColor="?attr/wifi_signal_color"
+        android:pathData="M13.0,22.0L25.6,6.5C25.1,6.1 20.3,2.1 13.0,2.1S0.9,6.1 0.4,6.5L13.0,22.0L13.0,22.0L13.0,22.0L13.0,22.0L13.0,22.0z"/>
+    <path
+        android:fillColor="?attr/wifi_signal_color"
+        android:pathData="M13.0,22.0l7.6,-9.4C20.3,12.4 17.4,10.0 13.0,10.0s-7.3,2.4 -7.6,2.7L13.0,22.0L13.0,22.0L13.0,22.0L13.0,22.0L13.0,22.0z"/>
+</vector>
diff --git a/res/drawable/ic_wifi_signal_3.xml b/res/drawable/ic_wifi_signal_3.xml
new file mode 100644
index 0000000..c542c69
--- /dev/null
+++ b/res/drawable/ic_wifi_signal_3.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2015 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="26dp"
+    android:height="24dp"
+    android:viewportWidth="26"
+    android:viewportHeight="24">
+    <path
+        android:fillAlpha="0.3"
+        android:fillColor="?attr/wifi_signal_color"
+        android:pathData="M13.0,22.0L25.6,6.5C25.1,6.1 20.3,2.1 13.0,2.1S0.9,6.1 0.4,6.5L13.0,22.0L13.0,22.0L13.0,22.0L13.0,22.0L13.0,22.0z"/>
+    <path
+        android:fillColor="?attr/wifi_signal_color"
+        android:pathData="M13.0,22.0l9.2,-11.4c-0.4,-0.3 -3.9,-3.2 -9.2,-3.2s-8.9,3.0 -9.2,3.2L13.0,22.0L13.0,22.0L13.0,22.0L13.0,22.0L13.0,22.0z"/>
+</vector>
diff --git a/res/drawable/ic_wifi_signal_4.xml b/res/drawable/ic_wifi_signal_4.xml
new file mode 100644
index 0000000..bb7dbd0
--- /dev/null
+++ b/res/drawable/ic_wifi_signal_4.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2015 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="26dp"
+    android:height="24dp"
+    android:viewportWidth="26"
+    android:viewportHeight="24">
+    <path
+        android:fillColor="?attr/wifi_signal_color"
+        android:pathData="M13.0,22.0L25.6,6.5C25.1,6.1 20.3,2.1 13.0,2.1S0.9,6.1 0.4,6.5L13.0,22.0L13.0,22.0L13.0,22.0L13.0,22.0L13.0,22.0z"/>
+</vector>
diff --git a/res/drawable/ic_wifi_signal_lock.xml b/res/drawable/ic_wifi_signal_lock.xml
new file mode 100644
index 0000000..b94f06c
--- /dev/null
+++ b/res/drawable/ic_wifi_signal_lock.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (C) 2015 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="24dp"
+    android:height="24dp"
+    android:viewportWidth="72"
+    android:viewportHeight="72">
+    <group
+        android:translateX="52.0"
+        android:translateY="42.0">
+        <path
+            android:fillColor="?attr/wifi_signal_color"
+            android:pathData="M18.0,8.0l-1.0,0.0L17.0,6.0c0.0,-2.76 -2.24,-5.0 -5.0,-5.0S7.0,3.24 7.0,6.0l0.0,2.0L6.0,8.0c-1.1,0.0 -2.0,0.9 -2.0,2.0l0.0,10.0c0.0,1.0 0.9,2.0 2.0,2.0l12.0,0.0c1.1,0.0 2.0,-0.9 2.0,-2.0L20.0,10.0c0.0,-1.1 -0.9,-2.0 -2.0,-2.0zm-6.0,9.0c-1.1,0.0 -2.0,-0.9 -2.0,-2.0s0.9,-2.0 2.0,-2.0 2.0,0.9 2.0,2.0 -0.9,2.0 -2.0,2.0zm3.1,-9.0L8.9,8.0L8.9,6.0c0.0,-1.71 1.39,-3.1 3.1,-3.1 1.71,0.0 3.1,1.39 3.1,3.1l0.0,2.0z"/>
+    </group>
+</vector>
\ No newline at end of file
diff --git a/res/drawable/wifi_signal.xml b/res/drawable/wifi_signal.xml
new file mode 100644
index 0000000..7854075
--- /dev/null
+++ b/res/drawable/wifi_signal.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
+    <item settings:state_encrypted="true">
+        <layer-list>
+            <item>
+                <level-list>
+                    <item android:maxLevel="0" android:drawable="@drawable/ic_wifi_signal_1" />
+                    <item android:maxLevel="1" android:drawable="@drawable/ic_wifi_signal_2" />
+                    <item android:maxLevel="2" android:drawable="@drawable/ic_wifi_signal_3" />
+                    <item android:maxLevel="3" android:drawable="@drawable/ic_wifi_signal_4" />
+                </level-list>
+            </item>
+            <item android:drawable="@drawable/ic_wifi_signal_lock" />
+        </layer-list>
+    </item>
+    <item settings:state_encrypted="false">
+        <level-list>
+            <item android:maxLevel="0" android:drawable="@drawable/ic_wifi_signal_1" />
+            <item android:maxLevel="1" android:drawable="@drawable/ic_wifi_signal_2" />
+            <item android:maxLevel="2" android:drawable="@drawable/ic_wifi_signal_3" />
+            <item android:maxLevel="3" android:drawable="@drawable/ic_wifi_signal_4" />
+        </level-list>
+    </item>
+</selector>
+
diff --git a/res/drawable/wifi_signal_colored.xml b/res/drawable/wifi_signal_colored.xml
deleted file mode 100644
index 91f8b88..0000000
--- a/res/drawable/wifi_signal_colored.xml
+++ /dev/null
@@ -1,68 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android"
-        xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
-    <item settings:state_encrypted="true">
-        <level-list>
-            <item android:maxLevel="0">
-                <bitmap
-                    android:src="@drawable/ic_wifi_lock_signal_1_teal"
-                    android:tint="?attr/wifi_signal_color" />
-            </item>
-            <item android:maxLevel="1">
-                <bitmap
-                    android:src="@drawable/ic_wifi_lock_signal_2_teal"
-                    android:tint="?attr/wifi_signal_color" />
-            </item>
-            <item android:maxLevel="2">
-                <bitmap
-                    android:src="@drawable/ic_wifi_lock_signal_3_teal"
-                    android:tint="?attr/wifi_signal_color" />
-            </item>
-            <item android:maxLevel="3">
-                <bitmap
-                    android:src="@drawable/ic_wifi_lock_signal_4_teal"
-                    android:tint="?attr/wifi_signal_color" />
-            </item>
-        </level-list>
-    </item>
-    <item settings:state_encrypted="false">
-        <level-list>
-            <item android:maxLevel="0">
-                <bitmap
-                    android:src="@drawable/ic_wifi_signal_1_teal"
-                    android:tint="?attr/wifi_signal_color" />
-            </item>
-            <item android:maxLevel="1">
-                <bitmap
-                    android:src="@drawable/ic_wifi_signal_2_teal"
-                    android:tint="?attr/wifi_signal_color" />
-            </item>
-            <item android:maxLevel="2">
-                <bitmap
-                    android:src="@drawable/ic_wifi_signal_3_teal"
-                    android:tint="?attr/wifi_signal_color" />
-            </item>
-            <item android:maxLevel="3">
-                <bitmap
-                    android:src="@drawable/ic_wifi_signal_4_teal"
-                    android:tint="?attr/wifi_signal_color" />
-            </item>
-        </level-list>
-    </item>
-</selector>
-
diff --git a/res/drawable/wifi_signal_lock_teal.xml b/res/drawable/wifi_signal_lock_teal.xml
deleted file mode 100644
index 2e79274..0000000
--- a/res/drawable/wifi_signal_lock_teal.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<level-list xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:maxLevel="0" android:drawable="@drawable/ic_wifi_lock_signal_1_teal" />
-    <item android:maxLevel="1" android:drawable="@drawable/ic_wifi_lock_signal_2_teal" />
-    <item android:maxLevel="2" android:drawable="@drawable/ic_wifi_lock_signal_3_teal" />
-    <item android:maxLevel="3" android:drawable="@drawable/ic_wifi_lock_signal_4_teal" />
-</level-list>
-
diff --git a/res/drawable/wifi_signal_open_teal.xml b/res/drawable/wifi_signal_open_teal.xml
deleted file mode 100644
index eb4ba8a..0000000
--- a/res/drawable/wifi_signal_open_teal.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<level-list xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:maxLevel="0" android:drawable="@drawable/ic_wifi_signal_1_teal" />
-    <item android:maxLevel="1" android:drawable="@drawable/ic_wifi_signal_2_teal" />
-    <item android:maxLevel="2" android:drawable="@drawable/ic_wifi_signal_3_teal" />
-    <item android:maxLevel="3" android:drawable="@drawable/ic_wifi_signal_4_teal" />
-</level-list>
-
diff --git a/res/drawable/wifi_signal_teal.xml b/res/drawable/wifi_signal_teal.xml
deleted file mode 100644
index 637336f..0000000
--- a/res/drawable/wifi_signal_teal.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android"
-        xmlns:settings="http://schemas.android.com/apk/res/com.android.settings">
-    <item settings:state_encrypted="true" android:drawable="@drawable/wifi_signal_lock_teal" />
-    <item settings:state_encrypted="false" android:drawable="@drawable/wifi_signal_open_teal" />
-</selector>
diff --git a/res/layout/ownerinfo.xml b/res/layout/ownerinfo.xml
index 6adec7d..80f0192 100644
--- a/res/layout/ownerinfo.xml
+++ b/res/layout/ownerinfo.xml
@@ -16,70 +16,29 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
+    android:paddingStart="20dip"
+    android:paddingEnd="20dip"
+    android:paddingTop="20dip"
     android:orientation="vertical"
-    android:scrollbars="vertical"
     android:background="@android:color/white">
 
-    <ScrollView
+    <EditText
+        android:id="@+id/owner_info_edit_text"
         android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:scrollbarStyle="outsideOverlay"
-        android:fillViewport="true">
+        android:layout_height="wrap_content"
+        android:gravity="top"
+        android:hint="@string/owner_info_settings_edit_text_hint"
+        android:maxLength="100"
+        android:inputType="textMultiLine|textCapSentences"
+        />
 
-        <LinearLayout
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:orientation="vertical"
-            android:paddingStart="?android:attr/listPreferredItemPaddingStart"
-            android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
-
-            <View
-                android:paddingTop="53dip"
-                android:layout_width="match_parent"
-                android:layout_height="1dip"
-                android:background="#ff404040"
-                />
-
-            <EditText android:id="@+id/owner_info_nickname"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginTop="8dip"
-                android:gravity="top"
-                android:hint="@string/user_nickname"
-                android:inputType="textCapWords"
-            />
-
-            <CheckBox android:id="@+id/show_owner_info_on_lockscreen_checkbox"
-                android:layout_width="match_parent"
-                android:layout_height="64dip"
-                android:gravity="center_vertical"
-                android:layout_marginTop="8dip"
-                android:text="@string/show_owner_info_on_lockscreen_label"
-                android:textAppearance="?android:attr/textAppearanceMedium"
-                android:textColor="?android:attr/textColorSecondary"
-            />
-
-            <View
-                android:layout_width="match_parent"
-                android:layout_height="1dip"
-                android:background="#ff404040"
-                />
-
-            <EditText android:id="@+id/owner_info_edit_text"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:layout_marginStart="62dip"
-                android:layout_marginTop="40dip"
-                android:gravity="top"
-                android:hint="@string/owner_info_settings_edit_text_hint"
-                android:lines="8"
-                android:maxLines="8"
-                android:inputType="textMultiLine|textCapSentences"
-            />
-
-        </LinearLayout>
-
-    </ScrollView>
+    <TextView
+        android:id="@+id/owner_info_status"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:gravity="end"
+        android:textAppearance="?android:attr/textAppearanceSmall"
+        />
 
 </LinearLayout>
 
diff --git a/res/values/colors.xml b/res/values/colors.xml
index a3b0455..3115da3 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -75,6 +75,7 @@
     <color name="switch_accent_color">#ff7fcac3</color>
 
     <color name="wifi_divider">#ffe0e0e0</color>
+    <color name="wifi_signal_icon_color">#ff009688</color>
     <color name="sim_noitification">@*android:color/material_deep_teal_500</color>
 
     <color name="warning">#ff5621</color>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 3c8e8ce..f2732fa 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -700,17 +700,17 @@
     <!-- Text shown next to checkbox for showing owner info on LockScreen [CHAR LIMIT=50]-->
     <string name="show_owner_info_on_lockscreen_label">Show owner info on lock screen</string>
     <!-- Text shown for title of owner info setting [CHAR LIMIT=20]-->
-    <string name="owner_info_settings_title">Owner info</string>
+    <string name="owner_info_settings_title">Lock screen message</string>
     <!-- Text shown for title of settings checkbox to enable widgets [CHAR LIMIT=20]-->
     <string name="security_enable_widgets_title">Enable widgets</string>
     <!-- Summary for settings checkbox to disable widgets when the setting has been disabled by an installed device admin [CHAR LIMIT=50] -->
     <string name="security_enable_widgets_disabled_summary">Disabled by administrator</string>
-    <!-- Text shown for summary of owner info setting [CHAR LIMIT=40]-->
-    <string name="owner_info_settings_summary"></string>
+    <!-- Text shown for summary of owner info setting (if none set) [CHAR LIMIT=40]-->
+    <string name="owner_info_settings_summary">None</string>
+    <!-- Description of how many characters are used in owner info [CHAR LIMIT=40]-->
+    <string name="owner_info_settings_status"><xliff:g id="count" example="90">%1$d</xliff:g> / <xliff:g id="count" example="100">%2$d</xliff:g></string>
     <!-- Hint text shown in owner info edit text [CHAR LIMIT=50] -->
-    <string name="owner_info_settings_edit_text_hint">Type text to display on the lock screen</string>
-    <!-- Text shown next to checkbox for showing user info on LockScreen [CHAR LIMIT=50]-->
-    <string name="show_user_info_on_lockscreen_label">Show user info on lock screen</string>
+    <string name="owner_info_settings_edit_text_hint">E.g., Joe\'s Android.</string>
     <!-- Text shown for title of user info setting [CHAR LIMIT=20]-->
     <string name="user_info_settings_title">User info</string>
     <!-- Text shown next to checkbox for showing profile info on LockScreen [CHAR LIMIT=50]-->
@@ -750,7 +750,7 @@
     </plurals>
     <!-- Introduction title shown in fingerprint enrollment dialog [CHAR LIMIT=22] -->
     <string name="security_settings_fingerprint_enroll_onboard_title">Fingerprint setup</string>
-    <!-- Introduction message shown in fingerprint enrollment dialog when the user needs to choose an 
+    <!-- Introduction message shown in fingerprint enrollment dialog when the user needs to choose an
          alternate screen unlock (pin, pattern or password) as a backup to fingerprint. -->
     <string name="security_settings_fingerprint_enroll_onboard_message">
         To use your fingerprint to unlock your screen or confirm purchases, we\'ll need to:
@@ -5800,6 +5800,7 @@
     <string name="keywords_keyboard_and_ime">text correction correct sound vibrate auto language gesture suggest suggestion theme offensive word type emoji international</string>
     <string name="keywords_reset_apps">reset preferences default</string>
     <string name="keywords_emergency_app">emergency ice app default</string>
+    <string name="keywords_default_dialer_app">dialer default</string>
     <string name="keywords_all_apps">apps download applications system</string>
     <string name="keywords_app_permissions">apps permissions security</string>
     <string name="keywords_default_apps">apps default</string>
@@ -6365,8 +6366,10 @@
    <!-- Title of storage preference to control where app is stored -->
    <string name="storage_used">Storage used</string>
 
+   <!-- Label for notification settings for an specific app [CHAR LIMIT=40] -->
+   <string name="notifications_label">Notifications</string>
    <!-- App notification summary with notifications enabled [CHAR LIMIT=40] -->
-   <string name="notifications_enabled">On</string>
+   <string name="notifications_enabled">Normal</string>
    <!-- App notification summary with notifications disabled [CHAR LIMIT=40] -->
    <string name="notifications_disabled">Block</string>
    <!-- App notification summary with notifications sensitive [CHAR LIMIT=40] -->
@@ -6461,6 +6464,9 @@
     <!-- Summary for No Default Browser settings [CHAR LIMIT=45] -->
     <string name="default_browser_title_none">No default Browser</string>
 
+    <!--  Title for Default Dialer settings [CHAR LIMIT=30] -->
+    <string name="default_dialer_title">Dialer app</string>
+
     <!-- Label of default app for current setting [CHAR LIMIT=40] -->
     <string name="default_app">(Default)</string>
 
diff --git a/res/values/themes.xml b/res/values/themes.xml
index a52ea04..f3d5e40 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -41,7 +41,7 @@
         <item name="setup_divider_color">@color/setup_divider_color_dark</item>
         <item name="side_margin">0dip</item>
         <item name="wifi_signal_color">@color/setup_wizard_wifi_color_dark</item>
-        <item name="wifi_signal">@drawable/wifi_signal_colored</item>
+        <item name="wifi_signal">@drawable/wifi_signal</item>
         <item name="preferenceBackgroundColor">?android:attr/colorBackground</item>
 
         <!-- LockPatternView colors -->
@@ -62,7 +62,7 @@
         <item name="setup_divider_color">@color/setup_divider_color_light</item>
         <item name="side_margin">0dip</item>
         <item name="wifi_signal_color">@color/setup_wizard_wifi_color_light</item>
-        <item name="wifi_signal">@drawable/wifi_signal_colored</item>
+        <item name="wifi_signal">@drawable/wifi_signal</item>
         <item name="preferenceBackgroundColor">?android:attr/colorBackground</item>
 
         <!-- LockPatternView colors -->
@@ -106,7 +106,8 @@
         <item name="ic_menu_add">@drawable/ic_menu_add_dark</item>
         <item name="ic_menu_moreoverflow">@*android:drawable/ic_menu_moreoverflow_holo_dark</item>
         <item name="ic_wps">@drawable/ic_wps_light</item>
-        <item name="wifi_signal">@drawable/wifi_signal_teal</item>
+        <item name="wifi_signal">@drawable/wifi_signal</item>
+        <item name="wifi_signal_color">@color/wifi_signal_icon_color</item>
         <item name="side_margin">@dimen/settings_side_margin</item>
 
         <!-- Redefine the ActionBar style for contentInsetStart -->
diff --git a/res/xml/default_apps.xml b/res/xml/default_apps.xml
index 392dd85..301c248 100644
--- a/res/xml/default_apps.xml
+++ b/res/xml/default_apps.xml
@@ -25,6 +25,12 @@
             android:summary="@string/default_browser_title_none"
             />
 
+    <com.android.settings.applications.DefaultDialerPreference
+            android:key="default_dialer"
+            android:title="@string/default_dialer_title"
+            settings:keywords="@string/keywords_default_dialer_app"
+            />
+
     <com.android.settings.applications.DefaultEmergencyPreference
             android:key="default_emergency_app"
             android:title="@string/default_emergency_app"
diff --git a/res/xml/installed_app_details.xml b/res/xml/installed_app_details.xml
index 09f5bb3..233331d 100644
--- a/res/xml/installed_app_details.xml
+++ b/res/xml/installed_app_details.xml
@@ -37,7 +37,7 @@
 
     <Preference
         android:key="notification_settings"
-        android:title="@string/notification_section_header"
+        android:title="@string/notifications_label"
         android:selectable="true" />
 
     <Preference
diff --git a/res/xml/security_settings_chooser.xml b/res/xml/security_settings_chooser.xml
index 4c1d809..af7bfeb 100644
--- a/res/xml/security_settings_chooser.xml
+++ b/res/xml/security_settings_chooser.xml
@@ -27,9 +27,8 @@
             android:summary="@string/unlock_set_unlock_mode_none"
             android:persistent="false"/>
 
-        <PreferenceScreen
+        <com.android.settings.SingleLineSummaryPreference
             android:key="owner_info_settings"
-            android:fragment="com.android.settings.OwnerInfoSettings"
             android:title="@string/owner_info_settings_title"
             android:summary="@string/owner_info_settings_summary"/>
 
diff --git a/res/xml/security_settings_lockscreen.xml b/res/xml/security_settings_lockscreen.xml
index 88df74b..480d6ee 100644
--- a/res/xml/security_settings_lockscreen.xml
+++ b/res/xml/security_settings_lockscreen.xml
@@ -29,9 +29,8 @@
             settings:keywords="@string/keywords_lockscreen"
             android:persistent="false"/>
 
-        <PreferenceScreen
+        <com.android.settings.SingleLineSummaryPreference
             android:key="owner_info_settings"
-            android:fragment="com.android.settings.OwnerInfoSettings"
             android:title="@string/owner_info_settings_title"
             android:summary="@string/owner_info_settings_summary"/>
 
diff --git a/res/xml/security_settings_password.xml b/res/xml/security_settings_password.xml
index 9f1092a..b610562 100644
--- a/res/xml/security_settings_password.xml
+++ b/res/xml/security_settings_password.xml
@@ -41,9 +41,8 @@
             android:key="power_button_instantly_locks"
             android:title="@string/lockpattern_settings_enable_power_button_instantly_locks"/>
 
-        <PreferenceScreen
+        <com.android.settings.SingleLineSummaryPreference
             android:key="owner_info_settings"
-            android:fragment="com.android.settings.OwnerInfoSettings"
             android:title="@string/owner_info_settings_title"
             android:summary="@string/owner_info_settings_summary"/>
 
diff --git a/res/xml/security_settings_pattern.xml b/res/xml/security_settings_pattern.xml
index ceb749c..867bed4 100644
--- a/res/xml/security_settings_pattern.xml
+++ b/res/xml/security_settings_pattern.xml
@@ -45,8 +45,7 @@
             android:key="power_button_instantly_locks"
             android:title="@string/lockpattern_settings_enable_power_button_instantly_locks"/>
 
-        <PreferenceScreen
-            android:fragment="com.android.settings.OwnerInfoSettings"
+        <com.android.settings.SingleLineSummaryPreference
             android:key="owner_info_settings"
             android:title="@string/owner_info_settings_title"
             android:summary="@string/owner_info_settings_summary"/>
diff --git a/res/xml/security_settings_pin.xml b/res/xml/security_settings_pin.xml
index 4470b1d..ac09a2c 100644
--- a/res/xml/security_settings_pin.xml
+++ b/res/xml/security_settings_pin.xml
@@ -41,9 +41,8 @@
             android:key="power_button_instantly_locks"
             android:title="@string/lockpattern_settings_enable_power_button_instantly_locks"/>
 
-        <PreferenceScreen
+        <com.android.settings.SingleLineSummaryPreference
             android:key="owner_info_settings"
-            android:fragment="com.android.settings.OwnerInfoSettings"
             android:title="@string/owner_info_settings_title"
             android:summary="@string/owner_info_settings_summary"/>
 
diff --git a/src/com/android/settings/OwnerInfoSettings.java b/src/com/android/settings/OwnerInfoSettings.java
index 54b7cab..56da637 100644
--- a/src/com/android/settings/OwnerInfoSettings.java
+++ b/src/com/android/settings/OwnerInfoSettings.java
@@ -16,110 +16,105 @@
 
 package com.android.settings;
 
+import android.app.AlertDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
 import android.app.Fragment;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
 import android.os.Bundle;
 import android.os.UserHandle;
-import android.os.UserManager;
+import android.text.Editable;
 import android.text.TextUtils;
+import android.text.TextWatcher;
 import android.view.LayoutInflater;
 import android.view.View;
-import android.view.ViewGroup;
-import android.widget.CheckBox;
-import android.widget.CompoundButton;
 import android.widget.EditText;
-import android.widget.CompoundButton.OnCheckedChangeListener;
+import android.widget.TextView;
 
-import com.android.internal.logging.MetricsLogger;
 import com.android.internal.widget.LockPatternUtils;
 
-public class OwnerInfoSettings extends InstrumentedFragment {
+public class OwnerInfoSettings extends DialogFragment implements OnClickListener {
 
-    public static final String EXTRA_SHOW_NICKNAME = "show_nickname";
+    private static final String TAG_OWNER_INFO = "ownerInfo";
+
+    private static final int MAX_CHARS = 100;
 
     private View mView;
-    private CheckBox mCheckbox;
     private int mUserId;
     private LockPatternUtils mLockPatternUtils;
     private EditText mOwnerInfo;
-    private EditText mNickname;
-    private boolean mShowNickname;
+    private TextView mOwnerInfoStatus;
 
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        Bundle args = getArguments();
-        if (args != null && args.containsKey(EXTRA_SHOW_NICKNAME)) {
-            mShowNickname = args.getBoolean(EXTRA_SHOW_NICKNAME);
-        }
+        mUserId = UserHandle.myUserId();
+        mLockPatternUtils = new LockPatternUtils(getActivity());
     }
 
     @Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container,
-            Bundle savedInstanceState) {
-        mView = inflater.inflate(R.layout.ownerinfo, container, false);
-        mUserId = UserHandle.myUserId();
-        mLockPatternUtils = new LockPatternUtils(getActivity());
+    public Dialog onCreateDialog(Bundle savedInstanceState) {
+        mView = LayoutInflater.from(getActivity()).inflate(R.layout.ownerinfo, null);
         initView();
-        return mView;
+        return new AlertDialog.Builder(getActivity())
+                .setTitle(R.string.owner_info_settings_title)
+                .setView(mView)
+                .setPositiveButton(R.string.save, this)
+                .setNegativeButton(R.string.cancel, this)
+                .show();
     }
 
     private void initView() {
-        mNickname = (EditText) mView.findViewById(R.id.owner_info_nickname);
-        if (!mShowNickname) {
-            mNickname.setVisibility(View.GONE);
-        } else {
-            mNickname.setText(UserManager.get(getActivity()).getUserName());
-            mNickname.setSelected(true);
-        }
-
-        final boolean enabled = mLockPatternUtils.isOwnerInfoEnabled();
-
-        mCheckbox = (CheckBox) mView.findViewById(R.id.show_owner_info_on_lockscreen_checkbox);
-        mCheckbox.setChecked(enabled);
-        if (UserHandle.myUserId() != UserHandle.USER_OWNER) {
-            if (UserManager.get(getActivity()).isLinkedUser()) {
-                mCheckbox.setText(R.string.show_profile_info_on_lockscreen_label);
-            } else {
-                mCheckbox.setText(R.string.show_user_info_on_lockscreen_label);
-            }
-        }
-        mCheckbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
-            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
-                mLockPatternUtils.setOwnerInfoEnabled(isChecked);
-                mOwnerInfo.setEnabled(isChecked); // disable text field if not enabled
-            }
-        });
-
         String info = mLockPatternUtils.getOwnerInfo(mUserId);
 
         mOwnerInfo = (EditText) mView.findViewById(R.id.owner_info_edit_text);
-        mOwnerInfo.setEnabled(enabled);
         if (!TextUtils.isEmpty(info)) {
             mOwnerInfo.setText(info);
         }
+        mOwnerInfoStatus = (TextView) mView.findViewById(R.id.owner_info_status);
+        updateOwnerInfoStatus();
+
+        mOwnerInfo.addTextChangedListener(new TextWatcher() {
+            @Override
+            public void onTextChanged(CharSequence s, int start, int before, int count) {
+            }
+
+            @Override
+            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+            }
+
+            @Override
+            public void afterTextChanged(Editable s) {
+                updateOwnerInfoStatus();
+            }
+        });
+    }
+
+    private void updateOwnerInfoStatus() {
+        String status = getString(R.string.owner_info_settings_status,
+                mOwnerInfo.getText().toString().length(), MAX_CHARS);
+        mOwnerInfoStatus.setText(status);
     }
 
     @Override
-    protected int getMetricsCategory() {
-        return MetricsLogger.OWNER_INFO;
-    }
+    public void onClick(DialogInterface dialog, int which) {
+        if (which == AlertDialog.BUTTON_POSITIVE) {
+            String info = mOwnerInfo.getText().toString();
+            mLockPatternUtils.setOwnerInfoEnabled(!TextUtils.isEmpty(info));
+            mLockPatternUtils.setOwnerInfo(info, mUserId);
 
-    @Override
-    public void onPause() {
-        super.onPause();
-        saveChanges();
-    }
-
-    void saveChanges() {
-        String info = mOwnerInfo.getText().toString();
-        mLockPatternUtils.setOwnerInfo(info, mUserId);
-        if (mShowNickname) {
-            String oldName = UserManager.get(getActivity()).getUserName();
-            CharSequence newName = mNickname.getText();
-            if (!TextUtils.isEmpty(newName) && !newName.equals(oldName)) {
-                UserManager.get(getActivity()).setUserName(UserHandle.myUserId(),
-                        newName.toString());
+            if (getTargetFragment() instanceof SecuritySettings) {
+                ((SecuritySettings) getTargetFragment()).updateOwnerInfo();
             }
         }
     }
+
+    public static void show(Fragment parent) {
+        if (!parent.isAdded()) return;
+
+        final OwnerInfoSettings dialog = new OwnerInfoSettings();
+        dialog.setTargetFragment(parent, 0);
+        dialog.show(parent.getFragmentManager(), TAG_OWNER_INFO);
+    }
 }
diff --git a/src/com/android/settings/SecuritySettings.java b/src/com/android/settings/SecuritySettings.java
index 30b7590..59816ac 100644
--- a/src/com/android/settings/SecuritySettings.java
+++ b/src/com/android/settings/SecuritySettings.java
@@ -17,6 +17,8 @@
 package com.android.settings;
 
 
+import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
+
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.admin.DevicePolicyManager;
@@ -26,26 +28,26 @@
 import android.content.Intent;
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
-import android.content.pm.UserInfo;
 import android.content.res.Resources;
+import android.hardware.fingerprint.Fingerprint;
+import android.hardware.fingerprint.FingerprintManager;
 import android.os.Bundle;
 import android.os.UserHandle;
 import android.os.UserManager;
-import android.preference.SwitchPreference;
 import android.preference.ListPreference;
 import android.preference.Preference;
 import android.preference.Preference.OnPreferenceChangeListener;
+import android.preference.Preference.OnPreferenceClickListener;
 import android.preference.PreferenceGroup;
 import android.preference.PreferenceScreen;
+import android.preference.SwitchPreference;
 import android.provider.SearchIndexableResource;
 import android.provider.Settings;
 import android.security.KeyStore;
-import android.hardware.fingerprint.Fingerprint;
-import android.hardware.fingerprint.FingerprintManager;
 import android.service.trust.TrustAgentService;
-import android.telephony.TelephonyManager;
-import android.telephony.SubscriptionManager;
 import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 import android.util.Log;
 
@@ -60,8 +62,6 @@
 import java.util.ArrayList;
 import java.util.List;
 
-import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
-
 /**
  * Gesture lock pattern settings.
  */
@@ -129,6 +129,7 @@
     private boolean mIsPrimary;
 
     private Intent mTrustAgentClickIntent;
+    private Preference mOwnerInfoPref;
 
     @Override
     protected int getMetricsCategory() {
@@ -202,16 +203,15 @@
         // Add options for device encryption
         mIsPrimary = UserHandle.myUserId() == UserHandle.USER_OWNER;
 
-        if (!mIsPrimary) {
-            // Rename owner info settings
-            Preference ownerInfoPref = findPreference(KEY_OWNER_INFO_SETTINGS);
-            if (ownerInfoPref != null) {
-                if (UserManager.get(getActivity()).isLinkedUser()) {
-                    ownerInfoPref.setTitle(R.string.profile_info_settings_title);
-                } else {
-                    ownerInfoPref.setTitle(R.string.user_info_settings_title);
+        mOwnerInfoPref = findPreference(KEY_OWNER_INFO_SETTINGS);
+        if (mOwnerInfoPref != null) {
+            mOwnerInfoPref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
+                @Override
+                public boolean onPreferenceClick(Preference preference) {
+                    OwnerInfoSettings.show(SecuritySettings.this);
+                    return true;
                 }
-            }
+            });
         }
 
         if (mIsPrimary) {
@@ -603,6 +603,16 @@
         if (mResetCredentials != null) {
             mResetCredentials.setEnabled(!mKeyStore.isEmpty());
         }
+
+        updateOwnerInfo();
+    }
+
+    public void updateOwnerInfo() {
+        if (mOwnerInfoPref != null) {
+            mOwnerInfoPref.setSummary(mLockPatternUtils.isOwnerInfoEnabled()
+                    ? mLockPatternUtils.getOwnerInfo(UserHandle.myUserId())
+                    : getString(R.string.owner_info_settings_summary));
+        }
     }
 
     @Override
diff --git a/src/com/android/settings/SingleLineSummaryPreference.java b/src/com/android/settings/SingleLineSummaryPreference.java
new file mode 100644
index 0000000..420fe08
--- /dev/null
+++ b/src/com/android/settings/SingleLineSummaryPreference.java
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2015 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;
+
+import android.content.Context;
+import android.preference.Preference;
+import android.text.TextUtils.TruncateAt;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.TextView;
+
+public class SingleLineSummaryPreference extends Preference {
+
+    public SingleLineSummaryPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+    }
+
+    @Override
+    protected void onBindView(View view) {
+        super.onBindView(view);
+
+        final TextView summaryView = (TextView) view.findViewById(
+                com.android.internal.R.id.summary);
+        summaryView.setSingleLine();
+        summaryView.setEllipsize(TruncateAt.END);
+    }
+
+}
diff --git a/src/com/android/settings/applications/AppStorageSettings.java b/src/com/android/settings/applications/AppStorageSettings.java
index 647be4d..5c367d7 100644
--- a/src/com/android/settings/applications/AppStorageSettings.java
+++ b/src/com/android/settings/applications/AppStorageSettings.java
@@ -168,7 +168,7 @@
 
         // If not current volume, kick off move wizard
         final VolumeInfo targetVol = (VolumeInfo) value;
-        final VolumeInfo currentVol = context.getPackageManager().getApplicationCurrentVolume(
+        final VolumeInfo currentVol = context.getPackageManager().getPackageCurrentVolume(
                 mAppEntry.info);
         if (!Objects.equals(targetVol, currentVol)) {
             final Intent intent = new Intent(context, StorageWizardMoveConfirm.class);
@@ -261,7 +261,7 @@
         refreshSizeInfo();
 
         final VolumeInfo currentVol = getActivity().getPackageManager()
-                .getApplicationCurrentVolume(mAppEntry.info);
+                .getPackageCurrentVolume(mAppEntry.info);
         mMoveDropDown.setSelectedValue(currentVol);
 
         return true;
@@ -303,7 +303,7 @@
         final StorageManager storage = context.getSystemService(StorageManager.class);
 
         final List<VolumeInfo> candidates = context.getPackageManager()
-                .getApplicationCandidateVolumes(mAppEntry.info);
+                .getPackageCandidateVolumes(mAppEntry.info);
         Collections.sort(candidates, VolumeInfo.getDescriptionComparator());
 
         mMoveDropDown.clearItems();
diff --git a/src/com/android/settings/applications/DefaultDialerPreference.java b/src/com/android/settings/applications/DefaultDialerPreference.java
new file mode 100644
index 0000000..ce16966
--- /dev/null
+++ b/src/com/android/settings/applications/DefaultDialerPreference.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2015 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.applications;
+
+import android.content.ComponentName;
+import android.content.Context;
+import android.os.UserManager;
+import android.telecom.DefaultDialerManager;
+import android.telephony.TelephonyManager;
+import android.text.TextUtils;
+import android.util.AttributeSet;
+
+import com.android.settings.AppListPreference;
+
+import java.util.List;
+import java.util.Objects;
+
+public class DefaultDialerPreference extends AppListPreference {
+
+    public DefaultDialerPreference(Context context, AttributeSet attrs) {
+        super(context, attrs);
+
+        if (isAvailable(context)) {
+            loadDialerApps();
+        }
+    }
+
+    @Override
+    protected boolean persistString(String value) {
+        if (!TextUtils.isEmpty(value) && !Objects.equals(value, getDefaultPackage())) {
+            DefaultDialerManager.setDefaultPhoneApplication(getContext(), value);
+        }
+        setSummary(getEntry());
+        return true;
+    }
+
+    private void loadDialerApps() {
+        List<ComponentName> dialerComponents =
+                DefaultDialerManager.getInstalledDialerApplications(getContext());
+
+        final String[] dialers = new String[dialerComponents.size()];
+        for (int i = 0; i < dialerComponents.size(); i++) {
+            dialers[i] = dialerComponents.get(i).getPackageName();
+        }
+        setPackageNames(dialers, getDefaultPackage());
+    }
+
+    private String getDefaultPackage() {
+        ComponentName appName = DefaultDialerManager.getDefaultDialerApplication(getContext());
+        if (appName != null) {
+            return appName.getPackageName();
+        }
+        return null;
+    }
+
+    public static boolean isAvailable(Context context) {
+        final TelephonyManager tm =
+                (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
+        if (!tm.isVoiceCapable()) {
+            return false;
+        }
+
+        final UserManager um =
+                (UserManager) context.getSystemService(Context.USER_SERVICE);
+        return !um.hasUserRestriction(UserManager.DISALLOW_OUTGOING_CALLS);
+    }
+}
diff --git a/src/com/android/settings/applications/ManageApplications.java b/src/com/android/settings/applications/ManageApplications.java
index 273bcfe..58061c0 100644
--- a/src/com/android/settings/applications/ManageApplications.java
+++ b/src/com/android/settings/applications/ManageApplications.java
@@ -550,9 +550,7 @@
             ApplicationsState.AppEntry entry = mApplications.getAppEntry(position);
             mCurrentPkgName = entry.info.packageName;
             mCurrentUid = entry.info.uid;
-            if (isAppEntryViewEnabled(entry)) {
-                startApplicationDetailsActivity();
-            }
+            startApplicationDetailsActivity();
         }
     }
 
@@ -658,13 +656,6 @@
 
     }
 
-    private static boolean isAppEntryViewEnabled(AppEntry entry) {
-        if ((entry.info.flags&ApplicationInfo.FLAG_INSTALLED) == 0 || !entry.info.enabled) {
-            return false;
-        }
-        return true;
-    }
-
     /*
      * Custom adapter implementation for the ListView
      * This adapter maintains a map for each displayed application and its properties
@@ -827,7 +818,7 @@
             }
             notifyDataSetChanged();
 
-            if (mEntries.size() != 0
+            if (mSession.getAllApps().size() != 0
                     && mManageApplications.mListContainer.getVisibility() != View.VISIBLE) {
                 Utils.handleLoadingContainer(mManageApplications.mLoadingContainer,
                         mManageApplications.mListContainer, true, true);
@@ -842,7 +833,7 @@
 
         private void updateLoading() {
             Utils.handleLoadingContainer(mManageApplications.mLoadingContainer,
-                    mManageApplications.mListContainer, mEntries.size() != 0, false);
+                    mManageApplications.mListContainer, mSession.getAllApps().size() != 0, false);
         }
 
         private boolean hasDisabledApps() {
@@ -991,7 +982,6 @@
                     holder.appIcon.setImageDrawable(entry.icon);
                 }
                 updateSummary(holder);
-                convertView.setEnabled(isAppEntryViewEnabled(entry));
                 if ((entry.info.flags&ApplicationInfo.FLAG_INSTALLED) == 0) {
                     holder.disabled.setVisibility(View.VISIBLE);
                     holder.disabled.setText(R.string.not_installed);
diff --git a/src/com/android/settings/applications/ManageDefaultApps.java b/src/com/android/settings/applications/ManageDefaultApps.java
index 326de22..6f58612 100644
--- a/src/com/android/settings/applications/ManageDefaultApps.java
+++ b/src/com/android/settings/applications/ManageDefaultApps.java
@@ -26,6 +26,7 @@
 import android.os.UserManager;
 import android.preference.Preference;
 import android.provider.SearchIndexableResource;
+import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.View;
@@ -47,8 +48,9 @@
     private static final String TAG = ManageDefaultApps.class.getSimpleName();
 
     private static final String KEY_DEFAULT_BROWSER = "default_browser";
-    private static final String KEY_SMS_APPLICATION = "default_sms_app";
+    private static final String KEY_DEFAULT_DIALER = "default_dialer";
     private static final String KEY_DEFAULT_EMERGENCY_APP = "default_emergency_app";
+    private static final String KEY_SMS_APPLICATION = "default_sms_app";
 
     private DefaultBrowserPreference mDefaultBrowserPreference;
     private PackageManager mPm;
@@ -84,6 +86,10 @@
             removePreference(KEY_SMS_APPLICATION);
         }
 
+        if (!DefaultDialerPreference.isAvailable(getActivity())) {
+            removePreference(KEY_DEFAULT_DIALER);
+        }
+
         if (!DefaultEmergencyPreference.isAvailable(getActivity())) {
             removePreference(KEY_DEFAULT_EMERGENCY_APP);
         }
diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java
index b1d2cba..31aa0df 100644
--- a/src/com/android/settings/dashboard/DashboardSummary.java
+++ b/src/com/android/settings/dashboard/DashboardSummary.java
@@ -22,11 +22,13 @@
 import android.content.IntentFilter;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
 import android.text.TextUtils;
 import android.util.Log;
+import android.util.TypedValue;
 import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuInflater;
@@ -174,8 +176,16 @@
 
         if (!TextUtils.isEmpty(tile.iconPkg)) {
             try {
-                tileIcon.setImageDrawable(context.getPackageManager()
-                        .getResourcesForApplication(tile.iconPkg).getDrawable(tile.iconRes, null));
+                Drawable drawable = context.getPackageManager()
+                        .getResourcesForApplication(tile.iconPkg).getDrawable(tile.iconRes, null);
+                if (!tile.iconPkg.equals(context.getPackageName()) && drawable != null) {
+                    // If this drawable is coming from outside Settings, tint it to match the color.
+                    TypedValue tintColor = new TypedValue();
+                    context.getTheme().resolveAttribute(com.android.internal.R.attr.colorAccent,
+                            tintColor, true);
+                    drawable.setTint(tintColor.data);
+                }
+                tileIcon.setImageDrawable(drawable);
             } catch (NameNotFoundException | Resources.NotFoundException e) {
                 tileIcon.setImageDrawable(null);
                 tileIcon.setBackground(null);
diff --git a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
index 00fb094..492051d 100644
--- a/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
+++ b/src/com/android/settings/deviceinfo/PrivateVolumeSettings.java
@@ -57,9 +57,10 @@
 import com.android.settings.SettingsPreferenceFragment;
 import com.android.settings.Utils;
 import com.android.settings.applications.ManageApplications;
-import com.android.settings.deviceinfo.StorageMeasurement.MeasurementDetails;
-import com.android.settings.deviceinfo.StorageMeasurement.MeasurementReceiver;
 import com.android.settings.deviceinfo.StorageSettings.MountTask;
+import com.android.settingslib.deviceinfo.StorageMeasurement;
+import com.android.settingslib.deviceinfo.StorageMeasurement.MeasurementDetails;
+import com.android.settingslib.deviceinfo.StorageMeasurement.MeasurementReceiver;
 import com.google.android.collect.Lists;
 
 import java.io.File;
diff --git a/src/com/android/settings/deviceinfo/StorageMeasurement.java b/src/com/android/settings/deviceinfo/StorageMeasurement.java
deleted file mode 100644
index b6c35e3..0000000
--- a/src/com/android/settings/deviceinfo/StorageMeasurement.java
+++ /dev/null
@@ -1,441 +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.deviceinfo;
-
-import android.app.ActivityManager;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.ServiceConnection;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.IPackageStatsObserver;
-import android.content.pm.PackageManager;
-import android.content.pm.PackageStats;
-import android.content.pm.UserInfo;
-import android.os.Environment;
-import android.os.Handler;
-import android.os.HandlerThread;
-import android.os.IBinder;
-import android.os.Looper;
-import android.os.Message;
-import android.os.UserHandle;
-import android.os.UserManager;
-import android.os.storage.StorageVolume;
-import android.os.storage.VolumeInfo;
-import android.util.Log;
-import android.util.SparseLongArray;
-
-import com.android.internal.app.IMediaContainerService;
-import com.android.internal.util.ArrayUtils;
-import com.google.android.collect.Sets;
-
-import java.io.File;
-import java.lang.ref.WeakReference;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Objects;
-import java.util.Set;
-
-/**
- * Utility for measuring the disk usage of internal storage or a physical
- * {@link StorageVolume}. Connects with a remote {@link IMediaContainerService}
- * and delivers results to {@link MeasurementReceiver}.
- */
-public class StorageMeasurement {
-    private static final String TAG = "StorageMeasurement";
-
-    private static final boolean LOCAL_LOGV = true;
-    static final boolean LOGV = LOCAL_LOGV && Log.isLoggable(TAG, Log.VERBOSE);
-
-    private static final String DEFAULT_CONTAINER_PACKAGE = "com.android.defcontainer";
-
-    public static final ComponentName DEFAULT_CONTAINER_COMPONENT = new ComponentName(
-            DEFAULT_CONTAINER_PACKAGE, "com.android.defcontainer.DefaultContainerService");
-
-    /** Media types to measure on external storage. */
-    private static final Set<String> sMeasureMediaTypes = Sets.newHashSet(
-            Environment.DIRECTORY_DCIM, Environment.DIRECTORY_MOVIES,
-            Environment.DIRECTORY_PICTURES, Environment.DIRECTORY_MUSIC,
-            Environment.DIRECTORY_ALARMS, Environment.DIRECTORY_NOTIFICATIONS,
-            Environment.DIRECTORY_RINGTONES, Environment.DIRECTORY_PODCASTS,
-            Environment.DIRECTORY_DOWNLOADS, Environment.DIRECTORY_ANDROID);
-
-    public static class MeasurementDetails {
-        /**
-         * Total apps disk usage.
-         * <p>
-         * When measuring internal storage, this value includes the code size of
-         * all apps (regardless of install status for current user), and
-         * internal disk used by the current user's apps. When the device
-         * emulates external storage, this value also includes emulated storage
-         * used by the current user's apps.
-         * <p>
-         * When measuring a physical {@link StorageVolume}, this value includes
-         * usage by all apps on that volume.
-         */
-        public long appsSize;
-
-        /**
-         * Total cache disk usage by apps.
-         */
-        public long cacheSize;
-
-        /**
-         * Total media disk usage, categorized by types such as
-         * {@link Environment#DIRECTORY_MUSIC}.
-         * <p>
-         * When measuring internal storage, this reflects media on emulated
-         * storage for the current user.
-         * <p>
-         * When measuring a physical {@link StorageVolume}, this reflects media
-         * on that volume.
-         */
-        public HashMap<String, Long> mediaSize = new HashMap<>();
-
-        /**
-         * Misc external disk usage for the current user, unaccounted in
-         * {@link #mediaSize}.
-         */
-        public long miscSize;
-
-        /**
-         * Total disk usage for users, which is only meaningful for emulated
-         * internal storage. Key is {@link UserHandle}.
-         */
-        public SparseLongArray usersSize = new SparseLongArray();
-    }
-
-    public interface MeasurementReceiver {
-        public void onDetailsChanged(MeasurementDetails details);
-    }
-
-    private WeakReference<MeasurementReceiver> mReceiver;
-
-    private final Context mContext;
-
-    private final VolumeInfo mVolume;
-    private final VolumeInfo mSharedVolume;
-
-    private final MainHandler mMainHandler;
-    private final MeasurementHandler mMeasurementHandler;
-
-    public StorageMeasurement(Context context, VolumeInfo volume, VolumeInfo sharedVolume) {
-        mContext = context.getApplicationContext();
-
-        mVolume = volume;
-        mSharedVolume = sharedVolume;
-
-        // Start the thread that will measure the disk usage.
-        final HandlerThread handlerThread = new HandlerThread("MemoryMeasurement");
-        handlerThread.start();
-
-        mMainHandler = new MainHandler();
-        mMeasurementHandler = new MeasurementHandler(handlerThread.getLooper());
-    }
-
-    public void setReceiver(MeasurementReceiver receiver) {
-        if (mReceiver == null || mReceiver.get() == null) {
-            mReceiver = new WeakReference<MeasurementReceiver>(receiver);
-        }
-    }
-
-    public void forceMeasure() {
-        invalidate();
-        measure();
-    }
-
-    public void measure() {
-        if (!mMeasurementHandler.hasMessages(MeasurementHandler.MSG_MEASURE)) {
-            mMeasurementHandler.sendEmptyMessage(MeasurementHandler.MSG_MEASURE);
-        }
-    }
-
-    public void onDestroy() {
-        mReceiver = null;
-        mMeasurementHandler.removeMessages(MeasurementHandler.MSG_MEASURE);
-        mMeasurementHandler.sendEmptyMessage(MeasurementHandler.MSG_DISCONNECT);
-    }
-
-    private void invalidate() {
-        mMeasurementHandler.sendEmptyMessage(MeasurementHandler.MSG_INVALIDATE);
-    }
-
-    private static class StatsObserver extends IPackageStatsObserver.Stub {
-        private final boolean mIsPrivate;
-        private final MeasurementDetails mDetails;
-        private final int mCurrentUser;
-        private final Message mFinished;
-
-        private int mRemaining;
-
-        public StatsObserver(boolean isPrivate, MeasurementDetails details, int currentUser,
-                Message finished, int remaining) {
-            mIsPrivate = isPrivate;
-            mDetails = details;
-            mCurrentUser = currentUser;
-            mFinished = finished;
-            mRemaining = remaining;
-        }
-
-        @Override
-        public void onGetStatsCompleted(PackageStats stats, boolean succeeded) {
-            synchronized (mDetails) {
-                if (succeeded) {
-                    addStatsLocked(stats);
-                }
-                if (--mRemaining == 0) {
-                    mFinished.sendToTarget();
-                }
-            }
-        }
-
-        private void addStatsLocked(PackageStats stats) {
-            if (mIsPrivate) {
-                long codeSize = stats.codeSize;
-                long dataSize = stats.dataSize;
-                long cacheSize = stats.cacheSize;
-                if (Environment.isExternalStorageEmulated()) {
-                    // Include emulated storage when measuring internal. OBB is
-                    // shared on emulated storage, so treat as code.
-                    codeSize += stats.externalCodeSize + stats.externalObbSize;
-                    dataSize += stats.externalDataSize + stats.externalMediaSize;
-                    cacheSize += stats.externalCacheSize;
-                }
-
-                // Count code and data for current user
-                if (stats.userHandle == mCurrentUser) {
-                    mDetails.appsSize += codeSize;
-                    mDetails.appsSize += dataSize;
-                }
-
-                // User summary only includes data (code is only counted once
-                // for the current user)
-                addValue(mDetails.usersSize, stats.userHandle, dataSize);
-
-                // Include cache for all users
-                mDetails.cacheSize += cacheSize;
-
-            } else {
-                // Physical storage; only count external sizes
-                mDetails.appsSize += stats.externalCodeSize + stats.externalDataSize
-                        + stats.externalMediaSize + stats.externalObbSize;
-                mDetails.cacheSize += stats.externalCacheSize;
-            }
-        }
-    }
-
-    private class MainHandler extends Handler {
-        @Override
-        public void handleMessage(Message msg) {
-            final MeasurementDetails details = (MeasurementDetails) msg.obj;
-            final MeasurementReceiver receiver = (mReceiver != null) ? mReceiver.get() : null;
-            if (receiver != null) {
-                receiver.onDetailsChanged(details);
-            }
-        }
-    }
-
-    private class MeasurementHandler extends Handler {
-        public static final int MSG_MEASURE = 1;
-        public static final int MSG_CONNECTED = 2;
-        public static final int MSG_DISCONNECT = 3;
-        public static final int MSG_COMPLETED = 4;
-        public static final int MSG_INVALIDATE = 5;
-
-        private Object mLock = new Object();
-
-        private IMediaContainerService mDefaultContainer;
-
-        private volatile boolean mBound = false;
-
-        private MeasurementDetails mCached;
-
-        private final ServiceConnection mDefContainerConn = new ServiceConnection() {
-            @Override
-            public void onServiceConnected(ComponentName name, IBinder service) {
-                final IMediaContainerService imcs = IMediaContainerService.Stub.asInterface(
-                        service);
-                mDefaultContainer = imcs;
-                mBound = true;
-                sendMessage(obtainMessage(MSG_CONNECTED, imcs));
-            }
-
-            @Override
-            public void onServiceDisconnected(ComponentName name) {
-                mBound = false;
-                removeMessages(MSG_CONNECTED);
-            }
-        };
-
-        public MeasurementHandler(Looper looper) {
-            super(looper);
-        }
-
-        @Override
-        public void handleMessage(Message msg) {
-            switch (msg.what) {
-                case MSG_MEASURE: {
-                    if (mCached != null) {
-                        mMainHandler.obtainMessage(0, mCached).sendToTarget();
-                        break;
-                    }
-
-                    synchronized (mLock) {
-                        if (mBound) {
-                            removeMessages(MSG_DISCONNECT);
-                            sendMessage(obtainMessage(MSG_CONNECTED, mDefaultContainer));
-                        } else {
-                            Intent service = new Intent().setComponent(DEFAULT_CONTAINER_COMPONENT);
-                            mContext.bindServiceAsUser(service, mDefContainerConn,
-                                    Context.BIND_AUTO_CREATE, UserHandle.OWNER);
-                        }
-                    }
-                    break;
-                }
-                case MSG_CONNECTED: {
-                    final IMediaContainerService imcs = (IMediaContainerService) msg.obj;
-                    measureExactStorage(imcs);
-                    break;
-                }
-                case MSG_DISCONNECT: {
-                    synchronized (mLock) {
-                        if (mBound) {
-                            mBound = false;
-                            mContext.unbindService(mDefContainerConn);
-                        }
-                    }
-                    break;
-                }
-                case MSG_COMPLETED: {
-                    mCached = (MeasurementDetails) msg.obj;
-                    mMainHandler.obtainMessage(0, mCached).sendToTarget();
-                    break;
-                }
-                case MSG_INVALIDATE: {
-                    mCached = null;
-                    break;
-                }
-            }
-        }
-    }
-
-    private void measureExactStorage(IMediaContainerService imcs) {
-        final UserManager userManager = mContext.getSystemService(UserManager.class);
-        final PackageManager packageManager = mContext.getPackageManager();
-
-        final List<UserInfo> users = userManager.getUsers();
-        final int currentUser = ActivityManager.getCurrentUser();
-
-        final MeasurementDetails details = new MeasurementDetails();
-        final Message finished = mMeasurementHandler.obtainMessage(MeasurementHandler.MSG_COMPLETED,
-                details);
-
-        if (mSharedVolume != null && mSharedVolume.isMountedReadable()) {
-            final File basePath = mSharedVolume.getPathForUser(currentUser);
-
-            // Measure media types for emulated storage, or for primary physical
-            // external volume
-            for (String type : sMeasureMediaTypes) {
-                final File path = new File(basePath, type);
-                final long size = getDirectorySize(imcs, path);
-                details.mediaSize.put(type, size);
-            }
-
-            // Measure misc files not counted under media
-            details.miscSize = measureMisc(imcs, basePath);
-
-            if (mSharedVolume.getType() == VolumeInfo.TYPE_EMULATED) {
-                // Measure total emulated storage of all users; internal apps data
-                // will be spliced in later
-                for (UserInfo user : users) {
-                    final File userPath = mSharedVolume.getPathForUser(user.id);
-                    final long size = getDirectorySize(imcs, userPath);
-                    addValue(details.usersSize, user.id, size);
-                }
-            }
-        }
-
-        // Measure all apps hosted on this volume for all users
-        if (mVolume.getType() == VolumeInfo.TYPE_PRIVATE) {
-            final List<ApplicationInfo> apps = packageManager.getInstalledApplications(
-                    PackageManager.GET_UNINSTALLED_PACKAGES
-                    | PackageManager.GET_DISABLED_COMPONENTS);
-
-            final List<ApplicationInfo> volumeApps = new ArrayList<>();
-            for (ApplicationInfo app : apps) {
-                if (Objects.equals(app.volumeUuid, mVolume.getFsUuid())) {
-                    volumeApps.add(app);
-                }
-            }
-
-            final int count = users.size() * volumeApps.size();
-            if (count == 0) {
-                finished.sendToTarget();
-                return;
-            }
-
-            final StatsObserver observer = new StatsObserver(
-                    true, details, currentUser, finished, count);
-            for (UserInfo user : users) {
-                for (ApplicationInfo app : volumeApps) {
-                    packageManager.getPackageSizeInfo(app.packageName, user.id, observer);
-                }
-            }
-
-        } else {
-            finished.sendToTarget();
-            return;
-        }
-    }
-
-    private static long getDirectorySize(IMediaContainerService imcs, File path) {
-        try {
-            final long size = imcs.calculateDirectorySize(path.toString());
-            Log.d(TAG, "getDirectorySize(" + path + ") returned " + size);
-            return size;
-        } catch (Exception e) {
-            Log.w(TAG, "Could not read memory from default container service for " + path, e);
-            return 0;
-        }
-    }
-
-    private long measureMisc(IMediaContainerService imcs, File dir) {
-        final File[] files = dir.listFiles();
-        if (ArrayUtils.isEmpty(files)) return 0;
-
-        // Get sizes of all top level nodes except the ones already computed
-        long miscSize = 0;
-        for (File file : files) {
-            final String name = file.getName();
-            if (sMeasureMediaTypes.contains(name)) {
-                continue;
-            }
-
-            if (file.isFile()) {
-                miscSize += file.length();
-            } else if (file.isDirectory()) {
-                miscSize += getDirectorySize(imcs, file);
-            }
-        }
-        return miscSize;
-    }
-
-    private static void addValue(SparseLongArray array, int key, long value) {
-        array.put(key, array.get(key) + value);
-    }
-}
diff --git a/src/com/android/settings/deviceinfo/StorageWizardMoveConfirm.java b/src/com/android/settings/deviceinfo/StorageWizardMoveConfirm.java
index 36750c0..3a802a3 100644
--- a/src/com/android/settings/deviceinfo/StorageWizardMoveConfirm.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardMoveConfirm.java
@@ -16,11 +16,15 @@
 
 package com.android.settings.deviceinfo;
 
+import static android.content.Intent.EXTRA_PACKAGE_NAME;
+import static android.content.Intent.EXTRA_TITLE;
+import static android.content.pm.PackageManager.EXTRA_MOVE_ID;
+import static android.os.storage.VolumeInfo.EXTRA_VOLUME_ID;
+
 import android.content.Intent;
 import android.content.pm.ApplicationInfo;
 import android.content.pm.PackageManager.NameNotFoundException;
 import android.os.Bundle;
-import android.os.storage.VolumeInfo;
 
 import com.android.internal.util.Preconditions;
 import com.android.settings.R;
@@ -35,7 +39,7 @@
         setContentView(R.layout.storage_wizard_generic);
 
         try {
-            mPackageName = getIntent().getStringExtra(Intent.EXTRA_PACKAGE_NAME);
+            mPackageName = getIntent().getStringExtra(EXTRA_PACKAGE_NAME);
             mApp = getPackageManager().getApplicationInfo(mPackageName, 0);
         } catch (NameNotFoundException e) {
             throw new RuntimeException(e);
@@ -46,7 +50,7 @@
 
         // Sanity check that target volume is candidate
         Preconditions.checkState(
-                getPackageManager().getApplicationCandidateVolumes(mApp).contains(mVolume));
+                getPackageManager().getPackageCandidateVolumes(mApp).contains(mVolume));
 
         final String appName = getPackageManager().getApplicationLabel(mApp).toString();
         final String volumeName = mStorage.getBestVolumeDescription(mVolume);
@@ -59,9 +63,14 @@
 
     @Override
     public void onNavigateNext() {
+        // Kick off move before we transition
+        final String appName = getPackageManager().getApplicationLabel(mApp).toString();
+        final int moveId = getPackageManager().movePackage(mPackageName, mVolume);
+
         final Intent intent = new Intent(this, StorageWizardMoveProgress.class);
-        intent.putExtra(VolumeInfo.EXTRA_VOLUME_ID, mVolume.getId());
-        intent.putExtra(Intent.EXTRA_PACKAGE_NAME, mPackageName);
+        intent.putExtra(EXTRA_MOVE_ID, moveId);
+        intent.putExtra(EXTRA_TITLE, appName);
+        intent.putExtra(EXTRA_VOLUME_ID, mVolume.getId());
         startActivity(intent);
         finishAffinity();
     }
diff --git a/src/com/android/settings/deviceinfo/StorageWizardMoveProgress.java b/src/com/android/settings/deviceinfo/StorageWizardMoveProgress.java
index 2023335..b0946c5 100644
--- a/src/com/android/settings/deviceinfo/StorageWizardMoveProgress.java
+++ b/src/com/android/settings/deviceinfo/StorageWizardMoveProgress.java
@@ -16,59 +16,72 @@
 
 package com.android.settings.deviceinfo;
 
+import static android.content.Intent.EXTRA_TITLE;
+import static android.content.pm.PackageManager.EXTRA_MOVE_ID;
 import static com.android.settings.deviceinfo.StorageSettings.TAG;
 
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.ApplicationInfo;
-import android.content.pm.IPackageMoveObserver;
 import android.content.pm.PackageManager;
-import android.content.pm.PackageManager.NameNotFoundException;
-import android.os.AsyncTask;
+import android.content.pm.PackageManager.MoveCallback;
 import android.os.Bundle;
-import android.os.RemoteException;
-import android.os.storage.VolumeInfo;
+import android.os.Handler;
 import android.util.Log;
 import android.view.View;
 import android.widget.Toast;
 
-import com.android.internal.util.Preconditions;
 import com.android.settings.R;
 
-import java.util.concurrent.CountDownLatch;
-
 public class StorageWizardMoveProgress extends StorageWizardBase {
-    private String mPackageName;
-    private ApplicationInfo mApp;
+    private int mMoveId;
 
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.storage_wizard_progress);
 
-        try {
-            mPackageName = getIntent().getStringExtra(Intent.EXTRA_PACKAGE_NAME);
-            mApp = getPackageManager().getApplicationInfo(mPackageName, 0);
-        } catch (NameNotFoundException e) {
-            throw new RuntimeException(e);
-        }
-
-        Preconditions.checkNotNull(mVolume);
-        Preconditions.checkNotNull(mApp);
-
-        final String appName = getPackageManager().getApplicationLabel(mApp).toString();
+        mMoveId = getIntent().getIntExtra(EXTRA_MOVE_ID, -1);
+        final String appName = getIntent().getStringExtra(EXTRA_TITLE);
         final String volumeName = mStorage.getBestVolumeDescription(mVolume);
 
         setHeaderText(R.string.storage_wizard_move_progress_title, appName);
         setBodyText(R.string.storage_wizard_move_progress_body, volumeName, appName);
 
-        setCurrentProgress(20);
-
         getNextButton().setVisibility(View.GONE);
 
-        new MoveTask().execute();
+        // Register for updates and push through current status
+        getPackageManager().registerMoveCallback(mCallback, new Handler());
+        mCallback.onStatusChanged(mMoveId, getPackageManager().getMoveStatus(mMoveId), -1);
     }
 
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+        getPackageManager().unregisterMoveCallback(mCallback);
+    }
+
+    private final MoveCallback mCallback = new MoveCallback() {
+        @Override
+        public void onStarted(int moveId, String title) {
+            // Ignored
+        }
+
+        @Override
+        public void onStatusChanged(int moveId, int status, long estMillis) {
+            if (mMoveId != moveId) return;
+
+            if (PackageManager.isMoveStatusFinished(status)) {
+                Log.d(TAG, "Finished with status " + status);
+                if (status != PackageManager.MOVE_SUCCEEDED) {
+                    Toast.makeText(StorageWizardMoveProgress.this, moveStatusToMessage(status),
+                            Toast.LENGTH_LONG).show();
+                }
+                finishAffinity();
+
+            } else {
+                setCurrentProgress(status);
+            }
+        }
+    };
+
     private CharSequence moveStatusToMessage(int returnCode) {
         switch (returnCode) {
             case PackageManager.MOVE_FAILED_INSUFFICIENT_STORAGE:
@@ -86,53 +99,4 @@
                 return getString(R.string.insufficient_storage);
         }
     }
-
-    private class LocalPackageMoveObserver extends IPackageMoveObserver.Stub {
-        public int returnCode;
-        public CountDownLatch finished = new CountDownLatch(1);
-
-        @Override
-        public void packageMoved(String packageName, int returnCode) throws RemoteException {
-            this.returnCode = returnCode;
-            this.finished.countDown();
-        }
-    }
-
-    public class MoveTask extends AsyncTask<Void, Void, Integer> {
-        @Override
-        protected Integer doInBackground(Void... params) {
-            try {
-                final LocalPackageMoveObserver observer = new LocalPackageMoveObserver();
-
-                if (mApp.isExternalAsec()) {
-                    getPackageManager().movePackage(mPackageName, observer,
-                            PackageManager.MOVE_INTERNAL);
-                } else if (mVolume.getType() == VolumeInfo.TYPE_PUBLIC) {
-                    getPackageManager().movePackage(mPackageName, observer,
-                            PackageManager.MOVE_EXTERNAL_MEDIA);
-                } else {
-                    getPackageManager().movePackageAndData(mPackageName, mVolume.fsUuid, observer);
-                }
-
-                observer.finished.await();
-                return observer.returnCode;
-            } catch (Exception e) {
-                Log.e(TAG, "Failed to move", e);
-                return PackageManager.MOVE_FAILED_INTERNAL_ERROR;
-            }
-        }
-
-        @Override
-        protected void onPostExecute(Integer returnCode) {
-            final Context context = StorageWizardMoveProgress.this;
-            if (returnCode == PackageManager.MOVE_SUCCEEDED) {
-                finishAffinity();
-
-            } else {
-                Log.w(TAG, "Move failed with status " + returnCode);
-                Toast.makeText(context, moveStatusToMessage(returnCode), Toast.LENGTH_LONG).show();
-                finishAffinity();
-            }
-        }
-    }
 }
diff --git a/src/com/android/settings/notification/ZenModeAutomationSettings.java b/src/com/android/settings/notification/ZenModeAutomationSettings.java
index 6636b33..dab0a0d 100644
--- a/src/com/android/settings/notification/ZenModeAutomationSettings.java
+++ b/src/com/android/settings/notification/ZenModeAutomationSettings.java
@@ -48,10 +48,11 @@
 import java.util.TreeSet;
 
 public class ZenModeAutomationSettings extends ZenModeSettingsBase {
-    private static final SimpleDateFormat DAY_FORMAT = new SimpleDateFormat("EEE");
 
     static final Config CONFIG = getConditionProviderConfig();
 
+    // per-instance to ensure we're always using the current locale
+    private final SimpleDateFormat mDayFormat = new SimpleDateFormat("EEE");
     private final Calendar mCalendar = Calendar.getInstance();
 
     private ServiceListing mServiceListing;
@@ -218,7 +219,7 @@
 
     private String dayString(int day) {
         mCalendar.set(Calendar.DAY_OF_WEEK, day);
-        return DAY_FORMAT.format(mCalendar.getTime());
+        return mDayFormat.format(mCalendar.getTime());
     }
 
     private static Config getConditionProviderConfig() {
diff --git a/src/com/android/settings/notification/ZenModeScheduleDaysSelection.java b/src/com/android/settings/notification/ZenModeScheduleDaysSelection.java
index 6d11ffb..3e88046 100644
--- a/src/com/android/settings/notification/ZenModeScheduleDaysSelection.java
+++ b/src/com/android/settings/notification/ZenModeScheduleDaysSelection.java
@@ -41,8 +41,9 @@
         Calendar.FRIDAY,
         Calendar.SATURDAY,
     };
-    private static final SimpleDateFormat DAY_FORMAT = new SimpleDateFormat("EEEE");
 
+    // per-instance to ensure we're always using the current locale
+    private final SimpleDateFormat mDayFormat = new SimpleDateFormat("EEEE");
     private final SparseBooleanArray mDays = new SparseBooleanArray();
     private final LinearLayout mLayout;
 
@@ -66,7 +67,7 @@
             final CheckBox checkBox = (CheckBox) inflater.inflate(R.layout.zen_schedule_rule_day,
                     this, false);
             c.set(Calendar.DAY_OF_WEEK, day);
-            checkBox.setText(DAY_FORMAT.format(c.getTime()));
+            checkBox.setText(mDayFormat.format(c.getTime()));
             checkBox.setChecked(mDays.get(day));
             checkBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                 @Override
diff --git a/src/com/android/settings/notification/ZenModeScheduleRuleSettings.java b/src/com/android/settings/notification/ZenModeScheduleRuleSettings.java
index f7015d3..fef3175 100644
--- a/src/com/android/settings/notification/ZenModeScheduleRuleSettings.java
+++ b/src/com/android/settings/notification/ZenModeScheduleRuleSettings.java
@@ -50,10 +50,11 @@
     private static final String KEY_START_TIME = "start_time";
     private static final String KEY_END_TIME = "end_time";
 
-    private static final SimpleDateFormat DAY_FORMAT = new SimpleDateFormat("EEE");
-
     public static final String ACTION = Settings.ACTION_ZEN_MODE_SCHEDULE_RULE_SETTINGS;
 
+    // per-instance to ensure we're always using the current locale
+    private final SimpleDateFormat mDayFormat = new SimpleDateFormat("EEE");
+
     private Preference mDays;
     private TimePickerPreference mStart;
     private TimePickerPreference mEnd;
@@ -147,7 +148,7 @@
                         if (sb.length() > 0) {
                             sb.append(mContext.getString(R.string.summary_divider_text));
                         }
-                        sb.append(DAY_FORMAT.format(c.getTime()));
+                        sb.append(mDayFormat.format(c.getTime()));
                         break;
                     }
                 }
diff --git a/src/com/android/settings/users/UserSettings.java b/src/com/android/settings/users/UserSettings.java
index 6d0cc5a..f3b60fc 100644
--- a/src/com/android/settings/users/UserSettings.java
+++ b/src/com/android/settings/users/UserSettings.java
@@ -461,16 +461,7 @@
                     null, 0);
         } else if (info.id == UserHandle.myUserId()) {
             // Jump to owner info panel
-            Bundle extras = new Bundle();
-            if (!info.isRestricted()) {
-                extras.putBoolean(OwnerInfoSettings.EXTRA_SHOW_NICKNAME, true);
-            }
-            int titleResId = info.id == UserHandle.USER_OWNER ? R.string.owner_info_settings_title
-                    : (info.isRestricted() ? R.string.profile_info_settings_title
-                            : R.string.user_info_settings_title);
-            ((SettingsActivity) getActivity()).startPreferencePanel(
-                    OwnerInfoSettings.class.getName(),
-                    extras, titleResId, null, null, 0);
+            OwnerInfoSettings.show(this);
         } else if (mIsOwner) {
             Bundle extras = new Bundle();
             extras.putInt(UserDetailsSettings.EXTRA_USER_ID, userId);
diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java
index c947456..4122f60 100644
--- a/src/com/android/settings/wifi/WifiSettings.java
+++ b/src/com/android/settings/wifi/WifiSettings.java
@@ -508,29 +508,31 @@
     }
 
     private void showDialog(AccessPoint accessPoint, boolean edit) {
-        WifiConfiguration config = accessPoint.getConfig();
-        if (isCreatorDeviceOwner(getActivity(), config) && accessPoint.isActive()) {
-            final int userId = UserHandle.getUserId(config.creatorUid);
-            final PackageManager pm = getActivity().getPackageManager();
-            final IPackageManager ipm = AppGlobals.getPackageManager();
-            String appName = pm.getNameForUid(config.creatorUid);
-            try {
-                final ApplicationInfo appInfo = ipm.getApplicationInfo(appName, /* flags */ 0,
-                        userId);
-                final CharSequence label = pm.getApplicationLabel(appInfo);
-                if (label != null) {
-                    appName = label.toString();
+        if (accessPoint != null) {
+            WifiConfiguration config = accessPoint.getConfig();
+            if (isCreatorDeviceOwner(getActivity(), config) && accessPoint.isActive()) {
+                final int userId = UserHandle.getUserId(config.creatorUid);
+                final PackageManager pm = getActivity().getPackageManager();
+                final IPackageManager ipm = AppGlobals.getPackageManager();
+                String appName = pm.getNameForUid(config.creatorUid);
+                try {
+                    final ApplicationInfo appInfo = ipm.getApplicationInfo(appName, /* flags */ 0,
+                            userId);
+                    final CharSequence label = pm.getApplicationLabel(appInfo);
+                    if (label != null) {
+                        appName = label.toString();
+                    }
+                } catch (RemoteException e) {
+                    // leave appName as packageName
                 }
-            } catch (RemoteException e) {
-                // leave appName as packageName
+                final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+                builder.setTitle(accessPoint.getSsid())
+                        .setMessage(getString(R.string.wifi_alert_lockdown_by_device_owner,
+                                appName))
+                        .setPositiveButton(android.R.string.ok, null)
+                        .show();
+                return;
             }
-            final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
-            builder.setTitle(accessPoint.getSsid())
-                    .setMessage(getString(R.string.wifi_alert_lockdown_by_device_owner,
-                            appName))
-                    .setPositiveButton(android.R.string.ok, null)
-                    .show();
-            return;
         }
 
         if (mDialog != null) {
@@ -561,10 +563,11 @@
                 }
                 // If it's null, fine, it's for Add Network
                 mSelectedAccessPoint = ap;
+                final boolean hideForget = (ap == null || isCreatorDeviceOwner(getActivity(),
+                        ap.getConfig()));
                 mDialog = new WifiDialog(getActivity(), this, ap, mDlgEdit,
                         /* no hide submit/connect */ false,
-                        /* hide forget if config locked down */ isCreatorDeviceOwner(getActivity(),
-                                ap.getConfig()));
+                        /* hide forget if config locked down */ hideForget);
                 return mDialog;
             case WPS_PBC_DIALOG_ID:
                 return new WpsDialog(getActivity(), WpsInfo.PBC);