diff --git a/res/layout-watch/settings.xml b/res/color/btn_colored_background_material.xml
similarity index 64%
copy from res/layout-watch/settings.xml
copy to res/color/btn_colored_background_material.xml
index 46249d5..a6cd089 100644
--- a/res/layout-watch/settings.xml
+++ b/res/color/btn_colored_background_material.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
+<!-- Copyright (C) 2016 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.
@@ -13,9 +13,9 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/container"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-    <include layout="@layout/settings_internal" />
-</FrameLayout>
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+    <item android:state_enabled="false"
+            android:alpha="?android:disabledAlpha"
+            android:color="?android:colorButtonNormal" />
+    <item android:color="?android:colorAccent" />
+</selector>
diff --git a/res/drawable-watch-280dpi/ic_cc_cancel.png b/res/drawable-watch-280dpi/ic_cc_cancel.png
deleted file mode 100644
index 249b869..0000000
--- a/res/drawable-watch-280dpi/ic_cc_cancel.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-280dpi/ic_cc_checkmark.png b/res/drawable-watch-280dpi/ic_cc_checkmark.png
deleted file mode 100644
index 94db9ab..0000000
--- a/res/drawable-watch-280dpi/ic_cc_checkmark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-280dpi/ic_cc_deny.png b/res/drawable-watch-280dpi/ic_cc_deny.png
deleted file mode 100644
index 1733669..0000000
--- a/res/drawable-watch-280dpi/ic_cc_deny.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-280dpi/ic_permission_calendar.png b/res/drawable-watch-280dpi/ic_permission_calendar.png
deleted file mode 100644
index 602bddf..0000000
--- a/res/drawable-watch-280dpi/ic_permission_calendar.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-280dpi/ic_permission_calendardisable.png b/res/drawable-watch-280dpi/ic_permission_calendardisable.png
deleted file mode 100644
index b855932..0000000
--- a/res/drawable-watch-280dpi/ic_permission_calendardisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-280dpi/ic_permission_call.png b/res/drawable-watch-280dpi/ic_permission_call.png
deleted file mode 100644
index bcf4f86..0000000
--- a/res/drawable-watch-280dpi/ic_permission_call.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-280dpi/ic_permission_calldisable.png b/res/drawable-watch-280dpi/ic_permission_calldisable.png
deleted file mode 100644
index 4781e1f..0000000
--- a/res/drawable-watch-280dpi/ic_permission_calldisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-280dpi/ic_permission_camera.png b/res/drawable-watch-280dpi/ic_permission_camera.png
deleted file mode 100644
index 3d27269..0000000
--- a/res/drawable-watch-280dpi/ic_permission_camera.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-280dpi/ic_permission_cameradisable.png b/res/drawable-watch-280dpi/ic_permission_cameradisable.png
deleted file mode 100644
index 51fa2c3..0000000
--- a/res/drawable-watch-280dpi/ic_permission_cameradisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-280dpi/ic_permission_contact.png b/res/drawable-watch-280dpi/ic_permission_contact.png
deleted file mode 100644
index 3e26bfb..0000000
--- a/res/drawable-watch-280dpi/ic_permission_contact.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-280dpi/ic_permission_contactdisable.png b/res/drawable-watch-280dpi/ic_permission_contactdisable.png
deleted file mode 100644
index 059b147..0000000
--- a/res/drawable-watch-280dpi/ic_permission_contactdisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-280dpi/ic_permission_location.png b/res/drawable-watch-280dpi/ic_permission_location.png
deleted file mode 100644
index f002a9c..0000000
--- a/res/drawable-watch-280dpi/ic_permission_location.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-280dpi/ic_permission_locationdisable.png b/res/drawable-watch-280dpi/ic_permission_locationdisable.png
deleted file mode 100644
index 98bbb86..0000000
--- a/res/drawable-watch-280dpi/ic_permission_locationdisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-280dpi/ic_permission_mic.png b/res/drawable-watch-280dpi/ic_permission_mic.png
deleted file mode 100644
index 1ed9c94..0000000
--- a/res/drawable-watch-280dpi/ic_permission_mic.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-280dpi/ic_permission_micdisable.png b/res/drawable-watch-280dpi/ic_permission_micdisable.png
deleted file mode 100644
index d74f59b..0000000
--- a/res/drawable-watch-280dpi/ic_permission_micdisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-280dpi/ic_permission_more.png b/res/drawable-watch-280dpi/ic_permission_more.png
deleted file mode 100644
index f33e02b..0000000
--- a/res/drawable-watch-280dpi/ic_permission_more.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-280dpi/ic_permission_sensor.png b/res/drawable-watch-280dpi/ic_permission_sensor.png
deleted file mode 100644
index 712c5d4..0000000
--- a/res/drawable-watch-280dpi/ic_permission_sensor.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-280dpi/ic_permission_sensordisable.png b/res/drawable-watch-280dpi/ic_permission_sensordisable.png
deleted file mode 100644
index 8faa436..0000000
--- a/res/drawable-watch-280dpi/ic_permission_sensordisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-280dpi/ic_permission_shield.png b/res/drawable-watch-280dpi/ic_permission_shield.png
deleted file mode 100644
index 78d6742..0000000
--- a/res/drawable-watch-280dpi/ic_permission_shield.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-280dpi/ic_permission_shielddisable.png b/res/drawable-watch-280dpi/ic_permission_shielddisable.png
deleted file mode 100644
index f0ef413..0000000
--- a/res/drawable-watch-280dpi/ic_permission_shielddisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-280dpi/ic_permission_sms.png b/res/drawable-watch-280dpi/ic_permission_sms.png
deleted file mode 100644
index 39bb4b3..0000000
--- a/res/drawable-watch-280dpi/ic_permission_sms.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-280dpi/ic_permission_smsdisable.png b/res/drawable-watch-280dpi/ic_permission_smsdisable.png
deleted file mode 100644
index e9375b1..0000000
--- a/res/drawable-watch-280dpi/ic_permission_smsdisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-280dpi/ic_permission_storage.png b/res/drawable-watch-280dpi/ic_permission_storage.png
deleted file mode 100644
index 60ec50c..0000000
--- a/res/drawable-watch-280dpi/ic_permission_storage.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-280dpi/ic_permission_storagedisable.png b/res/drawable-watch-280dpi/ic_permission_storagedisable.png
deleted file mode 100644
index 987b824..0000000
--- a/res/drawable-watch-280dpi/ic_permission_storagedisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-hdpi/ic_cc_cancel.png b/res/drawable-watch-hdpi/ic_cc_cancel.png
deleted file mode 100644
index a57893e..0000000
--- a/res/drawable-watch-hdpi/ic_cc_cancel.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-hdpi/ic_cc_checkmark.png b/res/drawable-watch-hdpi/ic_cc_checkmark.png
deleted file mode 100644
index a18fe7a..0000000
--- a/res/drawable-watch-hdpi/ic_cc_checkmark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-hdpi/ic_cc_deny.png b/res/drawable-watch-hdpi/ic_cc_deny.png
deleted file mode 100644
index bab22a3..0000000
--- a/res/drawable-watch-hdpi/ic_cc_deny.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-hdpi/ic_permission_calendar.png b/res/drawable-watch-hdpi/ic_permission_calendar.png
deleted file mode 100644
index b742469..0000000
--- a/res/drawable-watch-hdpi/ic_permission_calendar.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-hdpi/ic_permission_calendardisable.png b/res/drawable-watch-hdpi/ic_permission_calendardisable.png
deleted file mode 100644
index def76b0..0000000
--- a/res/drawable-watch-hdpi/ic_permission_calendardisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-hdpi/ic_permission_call.png b/res/drawable-watch-hdpi/ic_permission_call.png
deleted file mode 100644
index e14a6bd..0000000
--- a/res/drawable-watch-hdpi/ic_permission_call.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-hdpi/ic_permission_calldisable.png b/res/drawable-watch-hdpi/ic_permission_calldisable.png
deleted file mode 100644
index e0f535f..0000000
--- a/res/drawable-watch-hdpi/ic_permission_calldisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-hdpi/ic_permission_camera.png b/res/drawable-watch-hdpi/ic_permission_camera.png
deleted file mode 100644
index 7c1df6b..0000000
--- a/res/drawable-watch-hdpi/ic_permission_camera.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-hdpi/ic_permission_cameradisable.png b/res/drawable-watch-hdpi/ic_permission_cameradisable.png
deleted file mode 100644
index 9637808..0000000
--- a/res/drawable-watch-hdpi/ic_permission_cameradisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-hdpi/ic_permission_contact.png b/res/drawable-watch-hdpi/ic_permission_contact.png
deleted file mode 100644
index 532e3a2..0000000
--- a/res/drawable-watch-hdpi/ic_permission_contact.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-hdpi/ic_permission_contactdisable.png b/res/drawable-watch-hdpi/ic_permission_contactdisable.png
deleted file mode 100644
index 32b45c5..0000000
--- a/res/drawable-watch-hdpi/ic_permission_contactdisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-hdpi/ic_permission_location.png b/res/drawable-watch-hdpi/ic_permission_location.png
deleted file mode 100644
index 3d6c0b9..0000000
--- a/res/drawable-watch-hdpi/ic_permission_location.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-hdpi/ic_permission_locationdisable.png b/res/drawable-watch-hdpi/ic_permission_locationdisable.png
deleted file mode 100644
index c2475e2..0000000
--- a/res/drawable-watch-hdpi/ic_permission_locationdisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-hdpi/ic_permission_mic.png b/res/drawable-watch-hdpi/ic_permission_mic.png
deleted file mode 100644
index 8acb4c5..0000000
--- a/res/drawable-watch-hdpi/ic_permission_mic.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-hdpi/ic_permission_micdisable.png b/res/drawable-watch-hdpi/ic_permission_micdisable.png
deleted file mode 100644
index a37a4e2..0000000
--- a/res/drawable-watch-hdpi/ic_permission_micdisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-hdpi/ic_permission_more.png b/res/drawable-watch-hdpi/ic_permission_more.png
deleted file mode 100644
index 08808bc..0000000
--- a/res/drawable-watch-hdpi/ic_permission_more.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-hdpi/ic_permission_sensor.png b/res/drawable-watch-hdpi/ic_permission_sensor.png
deleted file mode 100644
index fd2939a..0000000
--- a/res/drawable-watch-hdpi/ic_permission_sensor.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-hdpi/ic_permission_sensordisable.png b/res/drawable-watch-hdpi/ic_permission_sensordisable.png
deleted file mode 100644
index 487a486..0000000
--- a/res/drawable-watch-hdpi/ic_permission_sensordisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-hdpi/ic_permission_shield.png b/res/drawable-watch-hdpi/ic_permission_shield.png
deleted file mode 100644
index cab08e4..0000000
--- a/res/drawable-watch-hdpi/ic_permission_shield.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-hdpi/ic_permission_shielddisable.png b/res/drawable-watch-hdpi/ic_permission_shielddisable.png
deleted file mode 100644
index 548ac56..0000000
--- a/res/drawable-watch-hdpi/ic_permission_shielddisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-hdpi/ic_permission_sms.png b/res/drawable-watch-hdpi/ic_permission_sms.png
deleted file mode 100644
index dc3db2f..0000000
--- a/res/drawable-watch-hdpi/ic_permission_sms.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-hdpi/ic_permission_smsdisable.png b/res/drawable-watch-hdpi/ic_permission_smsdisable.png
deleted file mode 100644
index 608c4d0..0000000
--- a/res/drawable-watch-hdpi/ic_permission_smsdisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-hdpi/ic_permission_storage.png b/res/drawable-watch-hdpi/ic_permission_storage.png
deleted file mode 100644
index 031d989..0000000
--- a/res/drawable-watch-hdpi/ic_permission_storage.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-hdpi/ic_permission_storagedisable.png b/res/drawable-watch-hdpi/ic_permission_storagedisable.png
deleted file mode 100644
index 08dc662..0000000
--- a/res/drawable-watch-hdpi/ic_permission_storagedisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-mdpi/ic_cc_cancel.png b/res/drawable-watch-mdpi/ic_cc_cancel.png
deleted file mode 100644
index 87fc65a..0000000
--- a/res/drawable-watch-mdpi/ic_cc_cancel.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-mdpi/ic_cc_checkmark.png b/res/drawable-watch-mdpi/ic_cc_checkmark.png
deleted file mode 100644
index 02c22b1..0000000
--- a/res/drawable-watch-mdpi/ic_cc_checkmark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-mdpi/ic_cc_deny.png b/res/drawable-watch-mdpi/ic_cc_deny.png
deleted file mode 100644
index f3b29f7..0000000
--- a/res/drawable-watch-mdpi/ic_cc_deny.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-mdpi/ic_permission_calendar.png b/res/drawable-watch-mdpi/ic_permission_calendar.png
deleted file mode 100644
index 6ae2442..0000000
--- a/res/drawable-watch-mdpi/ic_permission_calendar.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-mdpi/ic_permission_calendardisable.png b/res/drawable-watch-mdpi/ic_permission_calendardisable.png
deleted file mode 100644
index 639109f..0000000
--- a/res/drawable-watch-mdpi/ic_permission_calendardisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-mdpi/ic_permission_call.png b/res/drawable-watch-mdpi/ic_permission_call.png
deleted file mode 100644
index d67a03a..0000000
--- a/res/drawable-watch-mdpi/ic_permission_call.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-mdpi/ic_permission_calldisable.png b/res/drawable-watch-mdpi/ic_permission_calldisable.png
deleted file mode 100644
index 39760b7..0000000
--- a/res/drawable-watch-mdpi/ic_permission_calldisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-mdpi/ic_permission_camera.png b/res/drawable-watch-mdpi/ic_permission_camera.png
deleted file mode 100644
index 807a66f..0000000
--- a/res/drawable-watch-mdpi/ic_permission_camera.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-mdpi/ic_permission_cameradisable.png b/res/drawable-watch-mdpi/ic_permission_cameradisable.png
deleted file mode 100644
index edf4f7a..0000000
--- a/res/drawable-watch-mdpi/ic_permission_cameradisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-mdpi/ic_permission_contact.png b/res/drawable-watch-mdpi/ic_permission_contact.png
deleted file mode 100644
index 2e146e2..0000000
--- a/res/drawable-watch-mdpi/ic_permission_contact.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-mdpi/ic_permission_contactdisable.png b/res/drawable-watch-mdpi/ic_permission_contactdisable.png
deleted file mode 100644
index e390351..0000000
--- a/res/drawable-watch-mdpi/ic_permission_contactdisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-mdpi/ic_permission_location.png b/res/drawable-watch-mdpi/ic_permission_location.png
deleted file mode 100644
index 3862b24..0000000
--- a/res/drawable-watch-mdpi/ic_permission_location.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-mdpi/ic_permission_locationdisable.png b/res/drawable-watch-mdpi/ic_permission_locationdisable.png
deleted file mode 100644
index 1f875bd..0000000
--- a/res/drawable-watch-mdpi/ic_permission_locationdisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-mdpi/ic_permission_mic.png b/res/drawable-watch-mdpi/ic_permission_mic.png
deleted file mode 100644
index 33327f0..0000000
--- a/res/drawable-watch-mdpi/ic_permission_mic.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-mdpi/ic_permission_micdisable.png b/res/drawable-watch-mdpi/ic_permission_micdisable.png
deleted file mode 100644
index 7a1b39c..0000000
--- a/res/drawable-watch-mdpi/ic_permission_micdisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-mdpi/ic_permission_more.png b/res/drawable-watch-mdpi/ic_permission_more.png
deleted file mode 100644
index a563f1a..0000000
--- a/res/drawable-watch-mdpi/ic_permission_more.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-mdpi/ic_permission_sensor.png b/res/drawable-watch-mdpi/ic_permission_sensor.png
deleted file mode 100644
index 59e1c01..0000000
--- a/res/drawable-watch-mdpi/ic_permission_sensor.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-mdpi/ic_permission_sensordisable.png b/res/drawable-watch-mdpi/ic_permission_sensordisable.png
deleted file mode 100644
index d8d55c6..0000000
--- a/res/drawable-watch-mdpi/ic_permission_sensordisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-mdpi/ic_permission_shield.png b/res/drawable-watch-mdpi/ic_permission_shield.png
deleted file mode 100644
index 7773fa4..0000000
--- a/res/drawable-watch-mdpi/ic_permission_shield.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-mdpi/ic_permission_shielddisable.png b/res/drawable-watch-mdpi/ic_permission_shielddisable.png
deleted file mode 100644
index 42f452b..0000000
--- a/res/drawable-watch-mdpi/ic_permission_shielddisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-mdpi/ic_permission_sms.png b/res/drawable-watch-mdpi/ic_permission_sms.png
deleted file mode 100644
index 11333dd..0000000
--- a/res/drawable-watch-mdpi/ic_permission_sms.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-mdpi/ic_permission_smsdisable.png b/res/drawable-watch-mdpi/ic_permission_smsdisable.png
deleted file mode 100644
index b4416f4..0000000
--- a/res/drawable-watch-mdpi/ic_permission_smsdisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-mdpi/ic_permission_storage.png b/res/drawable-watch-mdpi/ic_permission_storage.png
deleted file mode 100644
index 07bd8f9..0000000
--- a/res/drawable-watch-mdpi/ic_permission_storage.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-mdpi/ic_permission_storagedisable.png b/res/drawable-watch-mdpi/ic_permission_storagedisable.png
deleted file mode 100644
index ed8af41..0000000
--- a/res/drawable-watch-mdpi/ic_permission_storagedisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-xhdpi/ic_cc_cancel.png b/res/drawable-watch-xhdpi/ic_cc_cancel.png
deleted file mode 100644
index fec6ecb..0000000
--- a/res/drawable-watch-xhdpi/ic_cc_cancel.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-xhdpi/ic_cc_checkmark.png b/res/drawable-watch-xhdpi/ic_cc_checkmark.png
deleted file mode 100644
index 1302723..0000000
--- a/res/drawable-watch-xhdpi/ic_cc_checkmark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-xhdpi/ic_cc_deny.png b/res/drawable-watch-xhdpi/ic_cc_deny.png
deleted file mode 100644
index a5f8dc1..0000000
--- a/res/drawable-watch-xhdpi/ic_cc_deny.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-xhdpi/ic_permission_calendar.png b/res/drawable-watch-xhdpi/ic_permission_calendar.png
deleted file mode 100644
index 806438c..0000000
--- a/res/drawable-watch-xhdpi/ic_permission_calendar.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-xhdpi/ic_permission_calendardisable.png b/res/drawable-watch-xhdpi/ic_permission_calendardisable.png
deleted file mode 100644
index 821462e..0000000
--- a/res/drawable-watch-xhdpi/ic_permission_calendardisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-xhdpi/ic_permission_call.png b/res/drawable-watch-xhdpi/ic_permission_call.png
deleted file mode 100644
index 079942b..0000000
--- a/res/drawable-watch-xhdpi/ic_permission_call.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-xhdpi/ic_permission_calldisable.png b/res/drawable-watch-xhdpi/ic_permission_calldisable.png
deleted file mode 100644
index 13cd805..0000000
--- a/res/drawable-watch-xhdpi/ic_permission_calldisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-xhdpi/ic_permission_camera.png b/res/drawable-watch-xhdpi/ic_permission_camera.png
deleted file mode 100644
index 03b0d8d..0000000
--- a/res/drawable-watch-xhdpi/ic_permission_camera.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-xhdpi/ic_permission_cameradisable.png b/res/drawable-watch-xhdpi/ic_permission_cameradisable.png
deleted file mode 100644
index bcb2a35..0000000
--- a/res/drawable-watch-xhdpi/ic_permission_cameradisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-xhdpi/ic_permission_contact.png b/res/drawable-watch-xhdpi/ic_permission_contact.png
deleted file mode 100644
index 996fe39..0000000
--- a/res/drawable-watch-xhdpi/ic_permission_contact.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-xhdpi/ic_permission_contactdisable.png b/res/drawable-watch-xhdpi/ic_permission_contactdisable.png
deleted file mode 100644
index 1063f17..0000000
--- a/res/drawable-watch-xhdpi/ic_permission_contactdisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-xhdpi/ic_permission_location.png b/res/drawable-watch-xhdpi/ic_permission_location.png
deleted file mode 100644
index d9dc1fc..0000000
--- a/res/drawable-watch-xhdpi/ic_permission_location.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-xhdpi/ic_permission_locationdisable.png b/res/drawable-watch-xhdpi/ic_permission_locationdisable.png
deleted file mode 100644
index c3e7ae9..0000000
--- a/res/drawable-watch-xhdpi/ic_permission_locationdisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-xhdpi/ic_permission_mic.png b/res/drawable-watch-xhdpi/ic_permission_mic.png
deleted file mode 100644
index 3a951ea..0000000
--- a/res/drawable-watch-xhdpi/ic_permission_mic.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-xhdpi/ic_permission_micdisable.png b/res/drawable-watch-xhdpi/ic_permission_micdisable.png
deleted file mode 100644
index a9c7c81..0000000
--- a/res/drawable-watch-xhdpi/ic_permission_micdisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-xhdpi/ic_permission_more.png b/res/drawable-watch-xhdpi/ic_permission_more.png
deleted file mode 100644
index a3f7ee5..0000000
--- a/res/drawable-watch-xhdpi/ic_permission_more.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-xhdpi/ic_permission_sensor.png b/res/drawable-watch-xhdpi/ic_permission_sensor.png
deleted file mode 100644
index 7356401..0000000
--- a/res/drawable-watch-xhdpi/ic_permission_sensor.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-xhdpi/ic_permission_sensordisable.png b/res/drawable-watch-xhdpi/ic_permission_sensordisable.png
deleted file mode 100644
index ef135a7..0000000
--- a/res/drawable-watch-xhdpi/ic_permission_sensordisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-xhdpi/ic_permission_shield.png b/res/drawable-watch-xhdpi/ic_permission_shield.png
deleted file mode 100644
index 2fc8fd0..0000000
--- a/res/drawable-watch-xhdpi/ic_permission_shield.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-xhdpi/ic_permission_shielddisable.png b/res/drawable-watch-xhdpi/ic_permission_shielddisable.png
deleted file mode 100644
index 08a862e..0000000
--- a/res/drawable-watch-xhdpi/ic_permission_shielddisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-xhdpi/ic_permission_sms.png b/res/drawable-watch-xhdpi/ic_permission_sms.png
deleted file mode 100644
index c74ce08..0000000
--- a/res/drawable-watch-xhdpi/ic_permission_sms.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-xhdpi/ic_permission_smsdisable.png b/res/drawable-watch-xhdpi/ic_permission_smsdisable.png
deleted file mode 100644
index b725677..0000000
--- a/res/drawable-watch-xhdpi/ic_permission_smsdisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-xhdpi/ic_permission_storage.png b/res/drawable-watch-xhdpi/ic_permission_storage.png
deleted file mode 100644
index 1f16bdb..0000000
--- a/res/drawable-watch-xhdpi/ic_permission_storage.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch-xhdpi/ic_permission_storagedisable.png b/res/drawable-watch-xhdpi/ic_permission_storagedisable.png
deleted file mode 100644
index 41d42d5..0000000
--- a/res/drawable-watch-xhdpi/ic_permission_storagedisable.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-watch/accept_deny_dialog_negative_bg.xml b/res/drawable-watch/accept_deny_dialog_negative_bg.xml
new file mode 100644
index 0000000..1ccc40a
--- /dev/null
+++ b/res/drawable-watch/accept_deny_dialog_negative_bg.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2016 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.
+-->
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item>
+        <ripple android:color="?android:colorControlHighlight" />
+    </item>
+    <item>
+        <ripple android:color="?android:colorControlHighlight">
+            <item>
+                <shape android:shape="oval"
+                        android:tint="?android:colorButtonNormal">
+                    <solid android:color="@android:color/white" />
+                    <size android:width="@dimen/diag_button_size"
+                            android:height="@dimen/diag_button_size" />
+                </shape>
+            </item>
+        </ripple>
+    </item>
+</layer-list>
diff --git a/res/drawable-watch/accept_deny_dialog_positive_bg.xml b/res/drawable-watch/accept_deny_dialog_positive_bg.xml
new file mode 100644
index 0000000..786a35b
--- /dev/null
+++ b/res/drawable-watch/accept_deny_dialog_positive_bg.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- Copyright (C) 2016 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.
+-->
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item>
+        <ripple android:color="?android:colorAccent" />
+    </item>
+    <item>
+        <ripple android:color="?android:colorControlHighlight">
+            <item>
+                <shape android:shape="oval"
+                        android:tint="@color/btn_colored_background_material">
+                    <solid android:color="@android:color/white" />
+                    <size android:width="@dimen/diag_button_size"
+                            android:height="@dimen/diag_button_size" />
+                </shape>
+            </item>
+        </ripple>
+    </item>
+</layer-list>
diff --git a/res/drawable-watch/action_negative_bg.xml b/res/drawable-watch/action_negative_bg.xml
index 7b21ba6..994ae8e 100644
--- a/res/drawable-watch/action_negative_bg.xml
+++ b/res/drawable-watch/action_negative_bg.xml
@@ -13,23 +13,12 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_enabled="false">
-        <shape android:shape="oval">
-            <solid android:color="@color/circular_button_disabled"/>
-            <size android:width="40dp" android:height="40dp" />
-        </shape>
-    </item>
-    <item android:state_pressed="true">
-        <shape android:shape="oval">
-            <solid android:color="#757575"/>
-            <size android:width="40dp" android:height="40dp" />
-        </shape>
-    </item>
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+        android:color="?android:colorControlHighlight">
     <item>
-        <shape android:shape="oval">
-            <solid android:color="#BDBDBD"/>
+        <shape android:shape="oval" android:tint="?android:colorButtonNormal">
+            <solid android:color="@android:color/white" />
             <size android:width="40dp" android:height="40dp" />
         </shape>
     </item>
-</selector>
+</ripple>
diff --git a/res/drawable-watch/action_positive_bg.xml b/res/drawable-watch/action_positive_bg.xml
index f3457c1..3e8590f 100644
--- a/res/drawable-watch/action_positive_bg.xml
+++ b/res/drawable-watch/action_positive_bg.xml
@@ -13,23 +13,12 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:state_enabled="false">
-        <shape android:shape="oval">
-            <solid android:color="@color/circular_button_disabled"/>
-            <size android:width="40dp" android:height="40dp" />
-        </shape>
-    </item>
-    <item android:state_pressed="true">
-        <shape android:shape="oval">
-            <solid android:color="#009688"/>
-            <size android:width="40dp" android:height="40dp" />
-        </shape>
-    </item>
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+        android:color="?android:colorControlHighlight">
     <item>
-        <shape android:shape="oval">
-            <solid android:color="#00BFA5"/>
+        <shape android:shape="oval" android:tint="@color/btn_colored_background_material">
+            <solid android:color="@android:color/white" />
             <size android:width="40dp" android:height="40dp" />
         </shape>
     </item>
-</selector>
+</ripple>
diff --git a/res/drawable-watch/cancel_button.xml b/res/drawable-watch/cancel_button.xml
index 641526a..8e4d2d4 100644
--- a/res/drawable-watch/cancel_button.xml
+++ b/res/drawable-watch/cancel_button.xml
@@ -15,7 +15,5 @@
 -->
 <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
     <item android:drawable="@drawable/action_negative_bg" />
-    <item>
-        <bitmap android:src="@drawable/ic_cc_cancel" android:gravity="center" />
-    </item>
+    <item android:drawable="@drawable/ic_cc_clear" android:gravity="center" />
 </layer-list>
diff --git a/res/drawable-watch/confirm_button.xml b/res/drawable-watch/confirm_button.xml
index 2b53e42..d1bfae3 100644
--- a/res/drawable-watch/confirm_button.xml
+++ b/res/drawable-watch/confirm_button.xml
@@ -15,7 +15,5 @@
 -->
 <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
     <item android:drawable="@drawable/action_positive_bg" />
-    <item>
-        <bitmap android:src="@drawable/ic_cc_checkmark" android:gravity="center" />
-    </item>
+    <item android:drawable="@drawable/ic_cc_checkmark" android:gravity="center" />
 </layer-list>
diff --git a/res/drawable-watch/deny_button.xml b/res/drawable-watch/deny_button.xml
index 1e7582b..0a2e1ae 100644
--- a/res/drawable-watch/deny_button.xml
+++ b/res/drawable-watch/deny_button.xml
@@ -15,7 +15,5 @@
 -->
 <layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
     <item android:drawable="@drawable/action_negative_bg" />
-    <item>
-        <bitmap android:src="@drawable/ic_cc_deny" android:gravity="center" />
-    </item>
+    <item android:drawable="@drawable/ic_cc_deny" android:gravity="center" />
 </layer-list>
diff --git a/res/layout-watch/settings.xml b/res/drawable-watch/ic_cc_checkmark.xml
similarity index 60%
copy from res/layout-watch/settings.xml
copy to res/drawable-watch/ic_cc_checkmark.xml
index 46249d5..832e090 100644
--- a/res/layout-watch/settings.xml
+++ b/res/drawable-watch/ic_cc_checkmark.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
+<!-- Copyright (C) 2016 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.
@@ -13,9 +13,12 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/container"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-    <include layout="@layout/settings_internal" />
-</FrameLayout>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+        android:width="24dp"
+        android:height="24dp"
+        android:viewportWidth="24.0"
+        android:viewportHeight="24.0">
+    <path
+            android:pathData="M9,16.17L4.83,12l-1.42,1.41L9,19 21,7l-1.41,-1.41z"
+            android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/res/drawable-watch/ic_cc_clear.xml b/res/drawable-watch/ic_cc_clear.xml
new file mode 100644
index 0000000..06bb30b
--- /dev/null
+++ b/res/drawable-watch/ic_cc_clear.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 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="24.0"
+        android:viewportHeight="24.0">
+    <path
+            android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"
+            android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/res/drawable-watch/ic_cc_deny.xml b/res/drawable-watch/ic_cc_deny.xml
new file mode 100644
index 0000000..971dfcc
--- /dev/null
+++ b/res/drawable-watch/ic_cc_deny.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 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="24.0"
+        android:viewportHeight="24.0">
+    <path
+            android:pathData="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zM4 12c0-4.42 3.58-8 8-8 1.85 0 3.55.63 4.9 1.69L5.69 16.9C4.63 15.55 4 13.85 4 12zm8 8c-1.85 0-3.55-.63-4.9-1.69L18.31 7.1C19.37 8.45 20 10.15 20 12c0 4.42-3.58 8-8 8z"
+            android:fillColor="#FFFFFF"/>
+</vector>
diff --git a/res/layout-watch/accept_deny_dialog.xml b/res/layout-watch/accept_deny_dialog.xml
new file mode 100644
index 0000000..89167cb
--- /dev/null
+++ b/res/layout-watch/accept_deny_dialog.xml
@@ -0,0 +1,108 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 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.
+-->
+<ScrollView
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        android:fillViewport="true"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent">
+    <LinearLayout
+            android:id="@android:id/content"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical">
+
+        <FrameLayout
+                android:minHeight="@dimen/diag_preferred_padding"
+                android:gravity="top|center_horizontal"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent">
+            <ImageView
+                    android:id="@android:id/icon"
+                    android:layout_marginTop="8dp"
+                    android:layout_marginBottom="8dp"
+                    android:layout_gravity="center_horizontal"
+                    android:layout_height="20dp"
+                    android:layout_width="20dp"
+                    android:scaleType="centerInside"
+                    android:visibility="gone" />
+        </FrameLayout>
+
+        <TextView
+                android:id="@android:id/title"
+                android:gravity="center"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent"
+                android:paddingLeft="@dimen/diag_preferred_padding"
+                android:paddingRight="@dimen/diag_preferred_padding"
+                android:textAppearance="@android:style/TextAppearance.Material.Title" />
+
+        <TextView
+                android:id="@android:id/message"
+                android:gravity="center"
+                android:layout_marginBottom="8dp"
+                android:layout_height="wrap_content"
+                android:layout_width="match_parent"
+                android:paddingLeft="@dimen/diag_preferred_padding"
+                android:paddingRight="@dimen/diag_preferred_padding"
+                android:textAppearance="@android:style/TextAppearance.Material.Subhead"
+                android:visibility="gone" />
+
+        <FrameLayout
+                android:id="@+id/buttonPanel"
+                android:layout_weight="1"
+                android:layout_width="match_parent"
+                android:layout_height="wrap_content">
+            <LinearLayout
+                    android:id="@+id/buttonContainer"
+                    android:orientation="horizontal"
+                    android:gravity="center_horizontal|top"
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:layout_gravity="bottom"
+                    android:paddingTop="8dp"
+                    android:paddingBottom="@dimen/diag_button_padding_bottom"
+                    android:paddingLeft="@dimen/diag_button_padding_horizontal"
+                    android:paddingRight="@dimen/diag_button_padding_horizontal"
+                    style="?android:attr/buttonBarStyle">
+
+                <ImageButton
+                        android:id="@android:id/button2"
+                        android:src="@drawable/ic_cc_clear"
+                        android:background="@drawable/accept_deny_dialog_negative_bg"
+                        android:contentDescription="@string/generic_cancel"
+                        android:layout_width="@dimen/diag_button_size"
+                        android:layout_height="@dimen/diag_button_size"
+                        android:visibility="gone" />
+
+                <Space
+                        android:id="@+id/spacer"
+                        android:layout_width="0dp"
+                        android:layout_height="0dp"
+                        android:visibility="gone"
+                        android:layout_weight="1" />
+
+                <ImageButton
+                        android:id="@android:id/button1"
+                        android:src="@drawable/ic_cc_checkmark"
+                        android:background="@drawable/accept_deny_dialog_positive_bg"
+                        android:contentDescription="@string/generic_yes"
+                        android:layout_width="@dimen/diag_button_size"
+                        android:layout_height="@dimen/diag_button_size"
+                        android:visibility="gone" />
+            </LinearLayout>
+        </FrameLayout>
+    </LinearLayout>
+</ScrollView>
diff --git a/res/layout-watch/confirmation_dialog.xml b/res/layout-watch/confirmation_dialog.xml
deleted file mode 100644
index b780e77..0000000
--- a/res/layout-watch/confirmation_dialog.xml
+++ /dev/null
@@ -1,133 +0,0 @@
-<?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.
--->
-<FrameLayout
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/confirmation"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-
-    <ScrollView
-            android:id="@+id/scrolling_container"
-            android:overScrollMode="never"
-            android:scrollbars="none"
-            android:layout_width="match_parent"
-            android:layout_height="match_parent">
-
-        <LinearLayout
-                android:id="@+id/content"
-                android:orientation="vertical"
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:paddingTop="@dimen/conf_diag_content_padding_top">
-
-            <LinearLayout
-                    android:orientation="vertical"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:minHeight="@dimen/conf_diag_min_space_above_message"
-                    android:gravity="bottom">
-                <TextView
-                        android:id="@+id/current_page_text"
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:layout_gravity="center_horizontal"
-                        android:layout_marginTop="@dimen/grant_permissions_app_breadcrumb_margin_top"
-                        android:textAppearance="@style/GrantPermissions.BreadcrumbText" />
-
-                <ImageView
-                        android:id="@+id/icon"
-                        android:layout_width="@dimen/grant_permissions_app_icon_size"
-                        android:layout_height="@dimen/grant_permissions_app_icon_size"
-                        android:tint="@color/grant_permissions_app_color"
-                        android:layout_gravity="center_horizontal"
-                        android:layout_marginTop="@dimen/grant_permissions_app_icon_margin_top"/>
-            </LinearLayout>
-
-            <TextView
-                    android:id="@+id/message"
-                    android:layout_width="match_parent"
-                    android:layout_height="wrap_content"
-                    android:layout_marginTop="@dimen/grant_permissions_title_margin_top"
-                    android:paddingLeft="@dimen/grant_permissions_message_side_padding"
-                    android:paddingRight="@dimen/grant_permissions_message_side_padding"
-                    android:gravity="center"
-                    android:textAppearance="@style/GrantPermissions.TitleText"/>
-        </LinearLayout>
-    </ScrollView>
-
-    <!-- TODO: Change this to use a ViewStub instead of show/hiding the two layouts -->
-    <FrameLayout android:id="@+id/button_bar_container"
-                 android:layout_width="match_parent"
-                 android:layout_height="wrap_content"
-                 android:layout_gravity="bottom"
-                 android:background="#FF606060">
-        <FrameLayout
-            android:id="@+id/horizontal_button_bar"
-            android:layout_width="match_parent"
-            android:layout_height="@dimen/conf_diag_button_container_height">
-            <Button
-                android:id="@+id/permission_deny_button"
-                android:layout_width="54dp"
-                android:layout_height="54dp"
-                android:layout_gravity="top|left"
-                android:layout_marginLeft="@dimen/conf_diag_2button_margin_side"
-                android:layout_marginTop="@dimen/conf_diag_2button_margin_top"
-                android:background="@drawable/cancel_button"
-                android:contentDescription="@string/grant_dialog_button_deny"/>
-
-            <Button
-                android:id="@+id/permission_allow_button"
-                android:layout_width="54dp"
-                android:layout_height="54dp"
-                android:layout_gravity="top|right"
-                android:layout_marginRight="@dimen/conf_diag_2button_margin_side"
-                android:layout_marginTop="@dimen/conf_diag_2button_margin_top"
-                android:background="@drawable/confirm_button"
-                android:contentDescription="@string/grant_dialog_button_allow"/>
-        </FrameLayout>
-
-        <FrameLayout
-            android:id="@+id/vertical_button_bar"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:paddingLeft="@dimen/conf_diag_3button_padding_side"
-            android:paddingRight="@dimen/conf_diag_3button_padding_side"
-            android:visibility="gone">
-            <LinearLayout
-                android:id="@+id/buttonPanel"
-                android:layout_width="wrap_content"
-                android:layout_height="wrap_content"
-                android:orientation="vertical">
-                <Button
-                    android:id="@+id/vertical_button1"
-                    style="@style/Widget.WearDiag.Button"/>
-
-                <Button
-                    android:id="@+id/vertical_button2"
-                    style="@style/Widget.WearDiag.Button"/>
-
-                <Button
-                    android:id="@+id/vertical_button3"
-                    style="@style/Widget.WearDiag.Button"/>
-
-                <!-- Adding padding to the bottom button causes rendering issues, so add
-                     an empty view here instead -->
-                <Space android:layout_width="match_parent"
-                       android:layout_height="@dimen/conf_diag_3button_padding_bottom"/>
-            </LinearLayout>
-        </FrameLayout>
-    </FrameLayout>
-</FrameLayout>
diff --git a/res/layout-watch/permissions_settings_item.xml b/res/layout-watch/permissions_settings_item.xml
deleted file mode 100644
index b370f1a..0000000
--- a/res/layout-watch/permissions_settings_item.xml
+++ /dev/null
@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<LinearLayout
-    xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    android:layout_width="match_parent"
-    android:layout_height="wrap_content" >
-    <android.support.wearable.view.CircledImageView
-        android:id="@+id/image"
-        android:alpha="0.5"
-        android:layout_height="52dp"
-        android:layout_width="52dp"
-        android:layout_gravity="center_vertical"
-        app:circle_border_color="#FFFFFFFF"
-        app:circle_border_width="1dp"
-        app:circle_color="#00000000"
-        app:image_tint="#FFFFFFFF"/>
-
-    <LinearLayout
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginLeft="@dimen/settings_text_margin_left"
-        android:layout_gravity="center_vertical"
-        android:orientation="vertical" >
-
-        <TextView
-            android:id="@+id/text"
-            android:alpha="0.5"
-            android:fontFamily="sans-serif-condensed-light"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:textColor="@color/permissions_settings_item_color"
-            android:textSize="14sp"
-            android:maxLines="2"
-            android:ellipsize="end"/>
-        <TextView
-            android:id="@+id/state"
-            android:alpha="0.5"
-            android:fontFamily="sans-serif-condensed-light"
-            android:layout_width="wrap_content"
-            android:layout_height="wrap_content"
-            android:textColor="@color/permissions_settings_item_color"
-            android:textSize="14sp"
-            android:maxLines="1"
-            android:ellipsize="end"/>
-    </LinearLayout>
-
-</LinearLayout>
diff --git a/res/layout-watch/settings_internal.xml b/res/layout-watch/settings_internal.xml
deleted file mode 100644
index e1947aa..0000000
--- a/res/layout-watch/settings_internal.xml
+++ /dev/null
@@ -1,56 +0,0 @@
-<?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.
--->
-<merge xmlns:android="http://schemas.android.com/apk/res/android">
-    <LinearLayout
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        android:orientation="vertical">
-        <TextView
-            android:id="@+id/header"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:minHeight="@dimen/settings_header_base_height"
-            android:layout_marginLeft="16dp"
-            android:layout_marginTop="@dimen/settings_header_top_margin"
-            android:textSize="@dimen/setting_short_header_text_size"
-            android:maxLines="2"
-            android:ellipsize="end"
-            android:textColor="#9E9E9E"
-            android:fontFamily="sans-serif-condensed-light"
-        />
-
-        <TextView
-            android:id="@+id/details"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:minHeight="@dimen/settings_header_base_height"
-            android:layout_marginLeft="16dp"
-            android:layout_marginTop="@dimen/settings_header_top_margin"
-            android:maxLines="2"
-            android:ellipsize="end"
-            android:textColor="@color/permissions_settings_item_color"
-            android:textSize="14sp"
-            android:visibility="gone"
-        />
-    </LinearLayout>
-
-    <android.support.wearable.view.WearableListView
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/wheel"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent"
-        />
-</merge>
diff --git a/res/layout-watch/settings.xml b/res/values-notround-watch/dimens.xml
similarity index 64%
copy from res/layout-watch/settings.xml
copy to res/values-notround-watch/dimens.xml
index 46249d5..8001a8b 100644
--- a/res/layout-watch/settings.xml
+++ b/res/values-notround-watch/dimens.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
+<!-- Copyright (C) 2016 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.
@@ -13,9 +13,10 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/container"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-    <include layout="@layout/settings_internal" />
-</FrameLayout>
+<resources>
+    <!-- Dimens for dialog layouts -->
+    <dimen name="diag_button_size">44dp</dimen>
+    <dimen name="diag_preferred_padding">8dp</dimen>
+    <dimen name="diag_button_padding_horizontal">16dp</dimen>
+    <dimen name="diag_button_padding_bottom">8dp</dimen>
+</resources>
diff --git a/res/values-round-watch/dimens.xml b/res/values-round-watch/dimens.xml
new file mode 100644
index 0000000..b7fe283
--- /dev/null
+++ b/res/values-round-watch/dimens.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2016 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.
+-->
+<resources>
+    <!-- Dimens for dialog layouts -->
+    <dimen name="diag_button_size">48dp</dimen>
+    <dimen name="diag_preferred_padding">@dimen/screen_percentage_15</dimen>
+    <dimen name="diag_button_padding_horizontal">@dimen/screen_percentage_15</dimen>
+    <dimen name="diag_button_padding_bottom">@dimen/screen_percentage_12</dimen>
+</resources>
diff --git a/res/values-round/dimens.xml b/res/values-round/dimens.xml
deleted file mode 100644
index bed41ce..0000000
--- a/res/values-round/dimens.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?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.
--->
-
-<resources>
-    <!-- Dimensions for the Grant permissions Confirmation Dialog -->
-    <dimen name="conf_diag_button_container_height">96dp</dimen>
-    <dimen name="conf_diag_2button_margin_side">32dp</dimen>
-    <dimen name="conf_diag_2button_margin_top">10dp</dimen>
-    <!-- On round screens, the message can't be too close to the top or the corners will be
-         clipped. -->
-    <dimen name="conf_diag_min_space_above_message">26dp</dimen>
-
-</resources>
diff --git a/res/layout-watch/settings.xml b/res/values-sw180dp-notround-watch/dimens.xml
similarity index 65%
copy from res/layout-watch/settings.xml
copy to res/values-sw180dp-notround-watch/dimens.xml
index 46249d5..84072a2 100644
--- a/res/layout-watch/settings.xml
+++ b/res/values-sw180dp-notround-watch/dimens.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
+<!-- Copyright (C) 2016 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.
@@ -13,9 +13,7 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/container"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-    <include layout="@layout/settings_internal" />
-</FrameLayout>
+<resources>
+    <!-- Dimens for dialog layouts -->
+    <dimen name="diag_button_size">48dp</dimen>
+</resources>
diff --git a/res/layout-watch/settings.xml b/res/values-sw192dp-watch/dimens_percent.xml
similarity index 65%
copy from res/layout-watch/settings.xml
copy to res/values-sw192dp-watch/dimens_percent.xml
index 46249d5..b5beca3 100644
--- a/res/layout-watch/settings.xml
+++ b/res/values-sw192dp-watch/dimens_percent.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
+<!-- Copyright (C) 2016 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.
@@ -13,9 +13,9 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/container"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-    <include layout="@layout/settings_internal" />
-</FrameLayout>
+<resources>
+    <dimen name="screen_percentage_05">9.6dp</dimen>
+    <dimen name="screen_percentage_10">19.2dp</dimen>
+    <dimen name="screen_percentage_12">23.04dp</dimen>
+    <dimen name="screen_percentage_15">28.8dp</dimen>
+</resources>
diff --git a/res/layout-watch/settings.xml b/res/values-sw205dp-watch/dimens_percent.xml
similarity index 65%
rename from res/layout-watch/settings.xml
rename to res/values-sw205dp-watch/dimens_percent.xml
index 46249d5..302d23e 100644
--- a/res/layout-watch/settings.xml
+++ b/res/values-sw205dp-watch/dimens_percent.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
+<!-- Copyright (C) 2016 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.
@@ -13,9 +13,9 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/container"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-    <include layout="@layout/settings_internal" />
-</FrameLayout>
+<resources>
+    <dimen name="screen_percentage_05">10.25dp</dimen>
+    <dimen name="screen_percentage_10">20.5dp</dimen>
+    <dimen name="screen_percentage_12">24.6dp</dimen>
+    <dimen name="screen_percentage_15">30.75dp</dimen>
+</resources>
diff --git a/res/layout-watch/settings.xml b/res/values-sw210dp-round-watch/dimens.xml
similarity index 65%
copy from res/layout-watch/settings.xml
copy to res/values-sw210dp-round-watch/dimens.xml
index 46249d5..d896138 100644
--- a/res/layout-watch/settings.xml
+++ b/res/values-sw210dp-round-watch/dimens.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
+<!-- Copyright (C) 2016 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.
@@ -13,9 +13,7 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/container"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-    <include layout="@layout/settings_internal" />
-</FrameLayout>
+<resources>
+    <!-- Dimens for dialog layouts -->
+    <dimen name="diag_button_size">54dp</dimen>
+</resources>
diff --git a/res/layout-watch/settings.xml b/res/values-sw225dp-watch/dimens_percent.xml
similarity index 65%
copy from res/layout-watch/settings.xml
copy to res/values-sw225dp-watch/dimens_percent.xml
index 46249d5..937c5d0 100644
--- a/res/layout-watch/settings.xml
+++ b/res/values-sw225dp-watch/dimens_percent.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
+<!-- Copyright (C) 2016 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.
@@ -13,9 +13,9 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/container"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-    <include layout="@layout/settings_internal" />
-</FrameLayout>
+<resources>
+    <dimen name="screen_percentage_05">11.25dp</dimen>
+    <dimen name="screen_percentage_10">22.5dp</dimen>
+    <dimen name="screen_percentage_12">27dp</dimen>
+    <dimen name="screen_percentage_15">33.75dp</dimen>
+</resources>
diff --git a/res/layout-watch/settings.xml b/res/values-sw228dp-watch/dimens_percent.xml
similarity index 65%
copy from res/layout-watch/settings.xml
copy to res/values-sw228dp-watch/dimens_percent.xml
index 46249d5..b2ad334 100644
--- a/res/layout-watch/settings.xml
+++ b/res/values-sw228dp-watch/dimens_percent.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
+<!-- Copyright (C) 2016 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.
@@ -13,9 +13,9 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/container"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-    <include layout="@layout/settings_internal" />
-</FrameLayout>
+<resources>
+    <dimen name="screen_percentage_05">11.4dp</dimen>
+    <dimen name="screen_percentage_10">22.8dp</dimen>
+    <dimen name="screen_percentage_12">27.36dp</dimen>
+    <dimen name="screen_percentage_15">34.2dp</dimen>
+</resources>
diff --git a/res/layout-watch/settings.xml b/res/values-sw240dp-watch/dimens_percent.xml
similarity index 65%
copy from res/layout-watch/settings.xml
copy to res/values-sw240dp-watch/dimens_percent.xml
index 46249d5..ebc8c75 100644
--- a/res/layout-watch/settings.xml
+++ b/res/values-sw240dp-watch/dimens_percent.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
+<!-- Copyright (C) 2016 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.
@@ -13,9 +13,9 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/container"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-    <include layout="@layout/settings_internal" />
-</FrameLayout>
+<resources>
+    <dimen name="screen_percentage_05">12dp</dimen>
+    <dimen name="screen_percentage_10">24dp</dimen>
+    <dimen name="screen_percentage_12">28.8dp</dimen>
+    <dimen name="screen_percentage_15">36dp</dimen>
+</resources>
diff --git a/res/values-watch/colors.xml b/res/values-watch/colors.xml
index b81d6e3..81d0459 100644
--- a/res/values-watch/colors.xml
+++ b/res/values-watch/colors.xml
@@ -15,22 +15,6 @@
 -->
 
 <resources>
-    <color name="grant_permissions_app_color">@color/grant_permissions_white_text_alpha_100</color>
-    <color name="grant_permissions_progress_color">@color/grant_permissions_white_text_alpha_100</color>
-    <color name="grant_permissions_title_color">@color/grant_permissions_white_text_alpha_70</color>
-
-    <color name="grant_permissions_white_text_alpha_100">@color/off_white</color>
-    <color name="grant_permissions_white_text_alpha_70">#b2eeeeee</color>
-
-    <color name="permissions_settings_item_color">#FFFFFFFF</color>
-
-    <color name="off_white">#ffeeeeee</color>
-
-    <color name="primary_text_light">#424242</color>
-
     <!-- Copied from wearable support -->
     <color name="circular_button_disabled">#757575</color>
-
-    <!-- Copied from wearable Clockwork Settings -->
-    <color name="cw_dark_gray">#424242</color>
 </resources>
diff --git a/res/values-watch/dimens.xml b/res/values-watch/dimens.xml
deleted file mode 100644
index 96f3214..0000000
--- a/res/values-watch/dimens.xml
+++ /dev/null
@@ -1,57 +0,0 @@
-<?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.
--->
-
-<resources>
-    <dimen name="grant_permissions_app_icon_size">20dp</dimen>
-    <dimen name="grant_permissions_app_icon_margin_top">6dp</dimen>
-
-    <dimen name="grant_permissions_app_breadcrumb_margin_top">6dp</dimen>
-    <dimen name="grant_permissions_title_margin_top">6dp</dimen>
-    <dimen name="grant_permissions_message_side_padding">32dp</dimen>
-
-    <dimen name="action_dialog_z">16dp</dimen>
-
-    <!-- Dimensions for the Grant permissions Confirmation Dialog -->
-    <dimen name="conf_diag_floating_height">16dp</dimen>
-    <dimen name="conf_diag_button_container_top_margin">6dp</dimen>
-    <dimen name="conf_diag_button_container_height">72dp</dimen>
-    <dimen name="conf_diag_2button_margin_side">16dp</dimen>
-    <dimen name="conf_diag_2button_margin_top">9dp</dimen>
-    <dimen name="conf_diag_3button_padding_side">32dp</dimen>
-    <dimen name="conf_diag_3button_padding_bottom">22dp</dimen>
-    <dimen name="conf_diag_content_padding_top">6dp</dimen>
-    <!-- On square screens, the message can be at the top of the screen. -->
-    <dimen name="conf_diag_min_space_above_message">0dp</dimen>
-
-
-    <!-- START: Ported values -->
-    <item name="default_settings_circle_radius_percent" format="fraction" type="dimen">40%</item>
-    <item name="selected_settings_circle_radius_percent" format="fraction" type="dimen">50%</item>
-    <dimen name="round_content_padding_left">40dp</dimen>
-    <dimen name="round_content_padding_right">24dp</dimen>
-    <dimen name="content_padding_left">12dp</dimen>
-    <dimen name="settings_wearable_list_view_vertical_padding_round">14dp</dimen>
-    <dimen name="setting_header_extra_line_height">16dp</dimen>
-    <dimen name="setting_long_header_text_size">20dp</dimen>
-    <dimen name="settings_header_base_height">50dp</dimen>
-    <dimen name="settings_header_top_margin">14dp</dimen>
-    <dimen name="settings_header_top_margin_circular">18dp</dimen>
-    <dimen name="settings_header_top_margin_multiline">6dp</dimen>
-    <dimen name="settings_header_top_margin_circular_multiline">16dp</dimen>
-    <dimen name="setting_short_header_text_size">24dp</dimen>
-    <dimen name="settings_text_margin_left">10dp</dimen>
-    <!-- END: Ported values -->
-</resources>
diff --git a/res/values-watch/strings.xml b/res/values-watch/strings.xml
index 82fe4ae..f940eae 100644
--- a/res/values-watch/strings.xml
+++ b/res/values-watch/strings.xml
@@ -30,8 +30,9 @@
     <!-- Summary of a permission switch when it's enforced by policy [CHAR LIMIT=17] -->
     <string name="permission_summary_enforced_by_policy">Can\'t be changed</string>
 
-    <!-- Generic text to indicate that a setting is enabled. Should be in all caps. [CHAR LIMIT=40] -->
-    <string name="generic_enabled">ENABLED</string>
-    <!-- Generic text to indicate that a setting is disabled. Should be in all caps. [CHAR LIMIT=40] -->
-    <string name="generic_disabled">DISABLED</string>
+    <!-- Generic text to indicate a yes. [CHAR LIMIT=10] -->
+    <string name="generic_yes">Yes</string>
+
+    <!-- Generic text to indicate Cancel. [CHAR LIMIT=10] -->
+    <string name="generic_cancel">Cancel</string>
 </resources>
diff --git a/res/values-watch/styles.xml b/res/values-watch/styles.xml
index 01ab90e..18fce93 100644
--- a/res/values-watch/styles.xml
+++ b/res/values-watch/styles.xml
@@ -17,33 +17,6 @@
 <resources>
     <style name="Theme.DialogWhenLarge" parent="@android:style/Theme.DeviceDefault.NoActionBar"/>
 
-    <!-- START: Ported values -->
-    <style name="TextAppearance.Wearable.Small" parent="android:TextAppearance.Medium">
-        <item name="android:textSize">16sp</item>
-        <item name="android:textColor">@color/primary_text_light</item>
-    </style>
-
-    <style name="TextView.Small" parent="@android:style/Widget.Holo.Light">
-        <item name="android:fontFamily">sans-serif-condensed</item>
-        <item name="android:textAppearance">@style/TextAppearance.Wearable.Small</item>
-    </style>
-
-    <style name="TextView.Small.Light">
-        <item name="android:fontFamily">sans-serif-condensed-light</item>
-        <item name="android:textAppearance">@style/TextAppearance.Wearable.Small</item>
-    </style>
-
-    <style name="TextAppearance.Settings.Label" parent="android:TextAppearance.Medium">
-        <item name="android:textSize">14sp</item>
-        <item name="android:textColor">#FFFFFFFF</item>
-    </style>
-
-    <style name="TextAppearance.Settings.Label.Large">
-        <item name="android:textSize">16sp</item>
-    </style>
-
-    <style name="TextView.Settings.Label" parent="TextView.Small.Light">
-        <item name="android:textAppearance">@style/TextAppearance.Settings.Label</item>
-    </style>
-    <!-- END: Ported values -->
+    <style name="BreadcrumbText" parent="@android:style/TextAppearance.Material.Body2"/>
+    <style name="TitleText" parent="@android:style/TextAppearance.Material.Subhead"/>
 </resources>
diff --git a/res/values-watch/themes.xml b/res/values-watch/themes.xml
index dea4290..a8186dd 100644
--- a/res/values-watch/themes.xml
+++ b/res/values-watch/themes.xml
@@ -16,49 +16,9 @@
   -->
 
 <resources>
-    <style name="Settings" parent="@android:style/Theme.DeviceDefault.NoActionBar">
-        <item name="preferenceTheme">@style/PreferenceThemeOverlay.v14.Permissions</item>
-        <item name="android:windowBackground">@color/cw_dark_gray</item>
-        <item name="android:colorBackground">@color/cw_dark_gray</item>
-    </style>
+    <style name="Settings" parent="@android:style/Theme.DeviceDefault.NoActionBar" />
 
-    <style name="GrantPermissions" parent="Settings">
-        <item name="android:windowIsFloating">true</item>
-        <item name="android:windowElevation">@dimen/action_dialog_z</item>
-        <item name="android:windowSwipeToDismiss">false</item>
-    </style>
-
-    <style name="GrantPermissions.BreadcrumbText">
-        <item name="android:fontFamily">sans-serif-condensed</item>
-        <item name="android:textSize">16sp</item>
-        <item name="android:textColor">@color/grant_permissions_progress_color</item>
-    </style>
-
-    <style name="GrantPermissions.TitleText">
-        <item name="android:fontFamily">sans-serif-condensed-light</item>
-        <item name="android:textSize">18sp</item>
-        <item name="android:textColor">@color/grant_permissions_title_color</item>
-        <item name="android:lineSpacingMultiplier">1.221</item>
-    </style>
-
-    <!-- Copied from WearableSupport lib -->
-    <style name="TextAppearance.WearDiag" parent="android:TextAppearance.Medium">
-        <item name="android:textColor">#FFFFFF</item>
-        <item name="android:textSize">16sp</item>
-    </style>
-    <style name="TextAppearance.WearDiag.Button">
-        <item name="android:textSize">16sp</item>
-    </style>
-    <style name="Widget.WearDiag.Button" parent="@android:style/Widget.DeviceDefault.Button">
-        <item name="android:fontFamily">sans-serif-condensed-light</item>
-        <item name="android:gravity">center_vertical|left</item>
-        <item name="android:textAppearance">@style/TextAppearance.WearDiag.Button</item>
-        <item name="android:background">@android:color/transparent</item>
-        <item name="android:minLines">1</item>
-        <item name="android:maxLines">3</item>
-        <item name="android:ellipsize">marquee</item>
-        <item name="android:layout_height">60dp</item>
-        <item name="android:layout_width">wrap_content</item>
-        <item name="android:drawablePadding">12dp</item>
+    <style name="GrantPermissions" parent="@android:style/Theme.DeviceDefault.NoActionBar">
+        <item name="android:windowBackground">@android:color/transparent</item>
     </style>
 </resources>
diff --git a/res/layout-watch/settings.xml b/res/xml-watch/watch_permissions.xml
similarity index 63%
copy from res/layout-watch/settings.xml
copy to res/xml-watch/watch_permissions.xml
index 46249d5..8ec8d19 100644
--- a/res/layout-watch/settings.xml
+++ b/res/xml-watch/watch_permissions.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2015 The Android Open Source Project
+<!-- Copyright (C) 2016 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.
@@ -13,9 +13,10 @@
      See the License for the specific language governing permissions and
      limitations under the License.
 -->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
-        android:id="@+id/container"
-        android:layout_width="match_parent"
-        android:layout_height="match_parent">
-    <include layout="@layout/settings_internal" />
-</FrameLayout>
+<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
+        android:title="@string/app_permissions"
+        android:orderingFromXml="true">
+    <Preference
+            android:key="no_permissions"
+            android:title="@string/no_permissions" />
+</PreferenceScreen>
diff --git a/src/android/support/wearable/view/AcceptDenyDialog.java b/src/android/support/wearable/view/AcceptDenyDialog.java
new file mode 100644
index 0000000..8ccccd5
--- /dev/null
+++ b/src/android/support/wearable/view/AcceptDenyDialog.java
@@ -0,0 +1,190 @@
+/*
+ * Copyright (C) 2016 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 android.support.wearable.view;
+
+import android.annotation.TargetApi;
+import android.app.Dialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.graphics.drawable.Drawable;
+import android.os.Build;
+import android.support.annotation.StyleRes;
+import android.view.View;
+import android.widget.ImageButton;
+import android.widget.ImageView;
+import android.widget.Space;
+import android.widget.TextView;
+
+import com.android.packageinstaller.R;
+
+/**
+ * A dialog to display a title, a message, and/or an icon with a positive and a negative button.
+ *
+ * <p>The buttons are hidden away unless there is a listener attached to the button. Since there's
+ * no click listener attached by default, the buttons are hidden be default.
+ */
+@TargetApi(Build.VERSION_CODES.LOLLIPOP)
+public class AcceptDenyDialog extends Dialog implements View.OnClickListener {
+    /** Icon at the top of the dialog. */
+    protected ImageView mIcon;
+    /** Title at the top of the dialog. */
+    protected TextView mTitle;
+    /** Message content of the dialog. */
+    protected TextView mMessage;
+    /** Panel containing the buttons. */
+    protected View mButtonPanel;
+    /** Positive button in the button panel. */
+    protected ImageButton mPositiveButton;
+    /** Negative button in the button panel. */
+    protected ImageButton mNegativeButton;
+    /**
+     * Click listener for the positive button. Positive button should hide if this is <code>null
+     * </code>.
+     */
+    protected DialogInterface.OnClickListener mPositiveButtonListener;
+    /**
+     * Click listener for the negative button. Negative button should hide if this is <code>null
+     * </code>.
+     */
+    protected DialogInterface.OnClickListener mNegativeButtonListener;
+    /** Spacer between the positive and negative button. Hidden if one button is hidden. */
+    protected View mSpacer;
+
+    public AcceptDenyDialog(Context context) {
+        this(context, 0 /* use default context theme */);
+    }
+
+    public AcceptDenyDialog(Context context, @StyleRes int themeResId) {
+        super(context, themeResId);
+
+        setContentView(R.layout.accept_deny_dialog);
+
+        mTitle = (TextView) findViewById(android.R.id.title);
+        mMessage = (TextView) findViewById(android.R.id.message);
+        mIcon = (ImageView) findViewById(android.R.id.icon);
+        mPositiveButton = (ImageButton) findViewById(android.R.id.button1);
+        mPositiveButton.setOnClickListener(this);
+        mNegativeButton = (ImageButton) findViewById(android.R.id.button2);
+        mNegativeButton.setOnClickListener(this);
+        mSpacer = (Space) findViewById(R.id.spacer);
+        mButtonPanel = findViewById(R.id.buttonPanel);
+    }
+
+    @Override
+    public void onClick(View v) {
+        switch (v.getId()) {
+            case android.R.id.button1:
+                if (mPositiveButtonListener != null) {
+                    mPositiveButtonListener.onClick(this, DialogInterface.BUTTON_POSITIVE);
+                }
+                dismiss();
+                break;
+            case android.R.id.button2:
+                if (mNegativeButtonListener != null) {
+                    mNegativeButtonListener.onClick(this, DialogInterface.BUTTON_NEGATIVE);
+                }
+                dismiss();
+                break;
+        }
+    }
+
+    public ImageButton getButton(int whichButton) {
+        switch (whichButton) {
+            case DialogInterface.BUTTON_POSITIVE:
+                return mPositiveButton;
+            case DialogInterface.BUTTON_NEGATIVE:
+                return mNegativeButton;
+            default:
+                return null;
+        }
+    }
+
+    public void setIcon(Drawable icon) {
+        mIcon.setVisibility(icon == null ? View.GONE : View.VISIBLE);
+        mIcon.setImageDrawable(icon);
+    }
+
+    /**
+     * @param resId the resourceId of the drawable to use as the icon or 0 if you don't want an icon.
+     */
+    public void setIcon(int resId) {
+        mIcon.setVisibility(resId == 0 ? View.GONE : View.VISIBLE);
+        mIcon.setImageResource(resId);
+    }
+
+    /** @param message the content message text of the dialog. */
+    public void setMessage(CharSequence message) {
+        mMessage.setText(message);
+        mMessage.setVisibility(message == null ? View.GONE : View.VISIBLE);
+    }
+
+    /** @param title the title text of the dialog. */
+    @Override
+    public void setTitle(CharSequence title) {
+        mTitle.setText(title);
+    }
+
+    /**
+     * Sets a click listener for a button.
+     *
+     * <p>Will hide button bar if all buttons are hidden (i.e. their click listeners are <code>null
+     * </code>).
+     *
+     * @param whichButton {@link DialogInterface.BUTTON_POSITIVE} or {@link
+     *     DialogInterface.BUTTON_NEGATIVE}
+     * @param listener the listener to set for the button. Hide button if <code>null</code>.
+     */
+    public void setButton(int whichButton, DialogInterface.OnClickListener listener) {
+        switch (whichButton) {
+            case DialogInterface.BUTTON_POSITIVE:
+                mPositiveButtonListener = listener;
+                break;
+            case DialogInterface.BUTTON_NEGATIVE:
+                mNegativeButtonListener = listener;
+                break;
+            default:
+                return;
+        }
+
+        mSpacer.setVisibility(mPositiveButtonListener == null || mNegativeButtonListener == null
+                ? View.GONE : View.INVISIBLE);
+        mPositiveButton.setVisibility(
+                mPositiveButtonListener == null ? View.GONE : View.VISIBLE);
+        mNegativeButton.setVisibility(
+                mNegativeButtonListener == null ? View.GONE : View.VISIBLE);
+        mButtonPanel.setVisibility(
+                mPositiveButtonListener == null && mNegativeButtonListener == null
+                ? View.GONE : View.VISIBLE);
+    }
+
+    /**
+     * Convenience method for <code>setButton(DialogInterface.BUTTON_POSITIVE, listener)</code>.
+     *
+     * @param listener the listener for the positive button.
+     */
+    public void setPositiveButton(DialogInterface.OnClickListener listener) {
+        setButton(DialogInterface.BUTTON_POSITIVE, listener);
+    }
+
+    /**
+     * Convenience method for <code>setButton(DialogInterface.BUTTON_NEGATIVE, listener)</code>.
+     *
+     * @param listener the listener for the positive button.
+     */
+    public void setNegativeButton(DialogInterface.OnClickListener listener) {
+        setButton(DialogInterface.BUTTON_NEGATIVE, listener);
+    }
+}
diff --git a/src/android/support/wearable/view/WearableDialogHelper.java b/src/android/support/wearable/view/WearableDialogHelper.java
new file mode 100644
index 0000000..0bdc1cc
--- /dev/null
+++ b/src/android/support/wearable/view/WearableDialogHelper.java
@@ -0,0 +1,217 @@
+/*
+ * Copyright (C) 2016 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 android.support.wearable.view;
+
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.support.annotation.DrawableRes;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
+import android.support.annotation.VisibleForTesting;
+import android.util.Log;
+import android.widget.Button;
+
+/**
+ * Helper to add icons to AlertDialog buttons.AlertDialog buttons.
+ */
+public class WearableDialogHelper {
+    private static final String TAG = "WearableDialogHelper";
+
+    private int mPositiveIconId;
+    private Drawable mPositiveIcon;
+
+    private int mNeutralIconId;
+    private Drawable mNeutralIcon;
+
+    private int mNegativeIconId;
+    private Drawable mNegativeIcon;
+
+    @VisibleForTesting /* package */ Resources mResources;
+    @VisibleForTesting /* package */ Resources.Theme mTheme;
+
+    /**
+     * Convenience constructor, equivalent to {@code new WearableDialogHelper(context.getResources(),
+     * context.getTheme())}.
+     */
+    public WearableDialogHelper(@NonNull Context context) {
+        this(context.getResources(), context.getTheme());
+    }
+
+    /**
+     * @param resources the Resources used to obtain Drawables from resource IDs.
+     * @param theme the Theme used to properly obtain Drawables from resource IDs.
+     */
+    public WearableDialogHelper(@NonNull Resources resources, @NonNull Resources.Theme theme) {
+        mResources = resources;
+        mTheme = theme;
+    }
+
+    @Nullable
+    public Drawable getPositiveIcon() {
+        return resolveDrawable(mPositiveIcon, mPositiveIconId);
+    }
+
+    @Nullable
+    public Drawable getNegativeIcon() {
+        return resolveDrawable(mNegativeIcon, mNegativeIconId);
+    }
+
+    @Nullable
+    public Drawable getNeutralIcon() {
+        return resolveDrawable(mNeutralIcon, mNeutralIconId);
+    }
+
+    @NonNull
+    public WearableDialogHelper setPositiveIcon(@DrawableRes int resId) {
+        mPositiveIconId = resId;
+        mPositiveIcon = null;
+        return this;
+    }
+
+    @NonNull
+    public WearableDialogHelper setPositiveIcon(@Nullable Drawable icon) {
+        mPositiveIcon = icon;
+        mPositiveIconId = 0;
+        return this;
+    }
+
+    @NonNull
+    public WearableDialogHelper setNegativeIcon(@DrawableRes int resId) {
+        mNegativeIconId = resId;
+        mNegativeIcon = null;
+        return this;
+    }
+
+    @NonNull
+    public WearableDialogHelper setNegativeIcon(@Nullable Drawable icon) {
+        mNegativeIcon = icon;
+        mNegativeIconId = 0;
+        return this;
+    }
+
+    @NonNull
+    public WearableDialogHelper setNeutralIcon(@DrawableRes int resId) {
+        mNeutralIconId = resId;
+        mNeutralIcon = null;
+        return this;
+    }
+
+    @NonNull
+    public WearableDialogHelper setNeutralIcon(@Nullable Drawable icon) {
+        mNeutralIcon = icon;
+        mNeutralIconId = 0;
+        return this;
+    }
+
+    /**
+     * Applies the button icons setup in the helper to the buttons in the dialog.
+     *
+     * <p>Note that this should be called after {@code AlertDialog.create()}, NOT {@code
+     * AlertDialog.Builder.create()}. Calling {@code AlertDialog.Builder.show()} would also accomplish
+     * the same thing.
+     *
+     * @param dialog the AlertDialog to style with the helper.
+     */
+    public void apply(@NonNull AlertDialog dialog) {
+        applyButton(dialog.getButton(DialogInterface.BUTTON_POSITIVE), getPositiveIcon());
+        applyButton(dialog.getButton(DialogInterface.BUTTON_NEGATIVE), getNegativeIcon());
+        applyButton(dialog.getButton(DialogInterface.BUTTON_NEUTRAL), getNeutralIcon());
+    }
+
+    /** Applies the specified drawable to the button. */
+    @VisibleForTesting
+    /* package */ void applyButton(@Nullable Button button, @Nullable Drawable drawable) {
+        if (button != null) {
+            button.setCompoundDrawablesRelativeWithIntrinsicBounds(drawable, null, null, null);
+            button.setAllCaps(false);
+        } else if (drawable != null) {
+            Log.w(TAG, "non-null drawable used with missing button, did you call AlertDialog.create()?");
+        }
+    }
+
+    /** Obtain a drawable between a drawable and a resource ID. */
+    @VisibleForTesting
+    /* package */ Drawable resolveDrawable(@Nullable Drawable drawable, @DrawableRes int resId) {
+        return drawable == null && resId != 0 ? mResources.getDrawable(resId, mTheme) : drawable;
+    }
+
+    /** Convenience builder to generate an AlertDialog with icons in buttons. */
+    public static class DialogBuilder extends AlertDialog.Builder {
+        private final WearableDialogHelper mHelper;
+
+        public DialogBuilder(Context context) {
+            super(context);
+            mHelper = new WearableDialogHelper(context.getResources(), context.getTheme());
+        }
+
+        public DialogBuilder(Context context, int themeResId) {
+            super(context, themeResId);
+            mHelper = new WearableDialogHelper(context.getResources(), context.getTheme());
+        }
+
+        public WearableDialogHelper getHelper() {
+            return mHelper;
+        }
+
+        public DialogBuilder setPositiveIcon(@DrawableRes int iconId) {
+            mHelper.setPositiveIcon(iconId);
+            return this;
+        }
+
+        public DialogBuilder setPositiveIcon(@Nullable Drawable icon) {
+            mHelper.setPositiveIcon(icon);
+            return this;
+        }
+
+        public DialogBuilder setNegativeIcon(@DrawableRes int iconId) {
+            mHelper.setNegativeIcon(iconId);
+            return this;
+        }
+
+        public DialogBuilder setNegativeIcon(@Nullable Drawable icon) {
+            mHelper.setNegativeIcon(icon);
+            return this;
+        }
+
+        public DialogBuilder setNeutralIcon(@DrawableRes int iconId) {
+            mHelper.setNeutralIcon(iconId);
+            return this;
+        }
+
+        public DialogBuilder setNeutralIcon(@Nullable Drawable icon) {
+            mHelper.setNeutralIcon(icon);
+            return this;
+        }
+
+        @Override
+        public AlertDialog create() {
+            final AlertDialog dialog = super.create();
+            dialog.create();
+            mHelper.apply(dialog);
+            return dialog;
+        }
+
+        @Override
+        public AlertDialog show() {
+            final AlertDialog dialog = this.create();
+            dialog.show();
+            return dialog;
+        }
+    }
+}
diff --git a/src/com/android/packageinstaller/permission/ui/GrantPermissionsWatchViewHandler.java b/src/com/android/packageinstaller/permission/ui/GrantPermissionsWatchViewHandler.java
index 21042f0..b50b5d8 100644
--- a/src/com/android/packageinstaller/permission/ui/GrantPermissionsWatchViewHandler.java
+++ b/src/com/android/packageinstaller/permission/ui/GrantPermissionsWatchViewHandler.java
@@ -1,30 +1,51 @@
 package com.android.packageinstaller.permission.ui;
 
+import android.app.AlertDialog;
+import android.app.Dialog;
 import android.content.Context;
-import android.graphics.PixelFormat;
+import android.content.DialogInterface;
+import android.content.res.TypedArray;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.Icon;
+import android.graphics.PixelFormat;
+import android.graphics.PorterDuff;
 import android.os.Bundle;
+import android.support.wearable.view.AcceptDenyDialog;
+import android.support.wearable.view.WearableDialogHelper;
+import android.text.SpannableStringBuilder;
+import android.text.Spanned;
+import android.text.style.ImageSpan;
+import android.text.style.TextAppearanceSpan;
+import android.text.TextUtils;
 import android.util.Log;
+import android.view.LayoutInflater;
 import android.view.View;
 import android.view.WindowManager;
+import android.widget.Space;
 
 import com.android.packageinstaller.R;
-import com.android.packageinstaller.permission.ui.wear.ConfirmationViewHandler;
 
 /**
  * Watch-specific view handler for the grant permissions activity.
  */
-final class GrantPermissionsWatchViewHandler extends ConfirmationViewHandler
-        implements GrantPermissionsViewHandler {
+final class GrantPermissionsWatchViewHandler implements GrantPermissionsViewHandler,
+        DialogInterface.OnClickListener {
     private static final String TAG = "GrantPermsWatchViewH";
 
-    private static final String ARG_GROUP_NAME = "ARG_GROUP_NAME";
+    private static final String WATCH_HANDLER_BUNDLE = "watch_handler_bundle";
+    private static final String DIALOG_BUNDLE = "dialog_bundle";
+    private static final String GROUP_NAME = "group_name";
+    private static final String SHOW_DO_NOT_ASK = "show_do_not_ask";
+    private static final String ICON = "icon";
+    private static final String MESSAGE = "message";
+    private static final String CURRENT_PAGE_TEXT = "current_page_text";
 
     private final Context mContext;
-    
+
     private ResultListener mResultListener;
-    
+
+    private Dialog mDialog;
+
     private String mGroupName;
     private boolean mShowDoNotAsk;
 
@@ -33,7 +54,6 @@
     private Icon mIcon;
 
     GrantPermissionsWatchViewHandler(Context context) {
-        super(context);
         mContext = context;
     }
 
@@ -45,13 +65,8 @@
 
     @Override
     public View createView() {
-        if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, "createView()");
-        }
-
-        mShowDoNotAsk = false;
-
-        return super.createView();
+        showDialog(null);
+        return new Space(mContext);
     }
 
     @Override
@@ -79,96 +94,121 @@
         mShowDoNotAsk = showDoNotAsk;
         mMessage = message;
         mIcon = icon;
-        mCurrentPageText = (groupCount > 1 ?
-                mContext.getString(R.string.current_permission_template, groupIndex + 1, groupCount)
-                : null);
+        mCurrentPageText = groupCount > 1
+                ? mContext.getString(R.string.current_permission_template,
+                        groupIndex + 1, groupCount)
+                : null;
+        showDialog(null);
+    }
 
-        invalidate();
+    private void showDialog(Bundle savedInstanceState) {
+        TypedArray a = mContext.obtainStyledAttributes(
+                new int[] { android.R.attr.textColorPrimary });
+        int color = a.getColor(0, mContext.getColor(android.R.color.white));
+        a.recycle();
+        Drawable drawable = mIcon == null ? null : mIcon.setTint(color).loadDrawable(mContext);
+
+        SpannableStringBuilder ssb = new SpannableStringBuilder();
+        if (!TextUtils.isEmpty(mCurrentPageText)) {
+            ssb.append(mCurrentPageText, new TextAppearanceSpan(mContext, R.style.BreadcrumbText),
+                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+            ssb.append('\n');
+        }
+        if (!TextUtils.isEmpty(mMessage)) {
+            ssb.append(mMessage, new TextAppearanceSpan(mContext, R.style.TitleText),
+                    Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
+        }
+
+        if (mShowDoNotAsk) {
+            if (mDialog instanceof AlertDialog) {
+                AlertDialog alertDialog = (AlertDialog) mDialog;
+                alertDialog.setTitle(ssb);
+                alertDialog.setIcon(drawable);
+            } else {
+                if (mDialog != null) {
+                    mDialog.dismiss();
+                    mDialog = null;
+                }
+                mDialog = new WearableDialogHelper.DialogBuilder(mContext)
+                        .setPositiveIcon(R.drawable.confirm_button)
+                        .setNeutralIcon(R.drawable.cancel_button)
+                        .setNegativeIcon(R.drawable.deny_button)
+                        .setTitle(ssb)
+                        .setIcon(drawable)
+                        .setPositiveButton(R.string.grant_dialog_button_allow, this)
+                        .setNeutralButton(R.string.grant_dialog_button_deny, this)
+                        .setNegativeButton(R.string.grant_dialog_button_deny_dont_ask_again, this)
+                        .show();
+                mDialog.setCancelable(false);
+            }
+        } else {
+            if (mDialog instanceof AcceptDenyDialog) {
+                AcceptDenyDialog acceptDenyDialog = (AcceptDenyDialog) mDialog;
+                acceptDenyDialog.setTitle(ssb);
+                acceptDenyDialog.setIcon(drawable);
+            } else {
+                if (mDialog != null) {
+                    mDialog.dismiss();
+                    mDialog = null;
+                }
+
+                AcceptDenyDialog acceptDenyDialog = new AcceptDenyDialog(mContext);
+                acceptDenyDialog.setTitle(ssb);
+                acceptDenyDialog.setIcon(drawable);
+                acceptDenyDialog.setPositiveButton(this);
+                acceptDenyDialog.setNegativeButton(this);
+                acceptDenyDialog.show();
+                mDialog = acceptDenyDialog;
+                mDialog.setCancelable(false);
+            }
+        }
+
+        if (savedInstanceState != null) {
+            mDialog.onRestoreInstanceState(savedInstanceState);
+        }
     }
 
     @Override
     public void saveInstanceState(Bundle outState) {
-        outState.putString(ARG_GROUP_NAME, mGroupName);
+        Bundle b = new Bundle();
+        b.putByte(SHOW_DO_NOT_ASK, (byte) (mShowDoNotAsk ? 1 : 0));
+        b.putString(GROUP_NAME, mGroupName);
+        b.putBundle(DIALOG_BUNDLE, mDialog.onSaveInstanceState());
+
+        outState.putBundle(WATCH_HANDLER_BUNDLE, b);
     }
 
     @Override
     public void loadInstanceState(Bundle savedInstanceState) {
-        mGroupName = savedInstanceState.getString(ARG_GROUP_NAME);
+        Bundle b = savedInstanceState.getBundle(WATCH_HANDLER_BUNDLE);
+        mShowDoNotAsk = b.getByte(SHOW_DO_NOT_ASK) == 1;
+        mGroupName = b.getString(GROUP_NAME);
+        showDialog(b.getBundle(DIALOG_BUNDLE));
     }
 
     @Override
     public void onBackPressed() {
-        if (mResultListener != null) {
-            mResultListener.onPermissionGrantResult(mGroupName, false, false);
+        notifyListener(false, false);
+    }
+
+    @Override
+    public void onClick(DialogInterface dialog, int which) {
+        switch (which) {
+            case DialogInterface.BUTTON_POSITIVE:
+                notifyListener(true, false);
+                break;
+            case DialogInterface.BUTTON_NEUTRAL:
+                notifyListener(false, false);
+                break;
+            case DialogInterface.BUTTON_NEGATIVE:
+                notifyListener(false,
+                        /* In AlertDialog, the negative button is also a don't ask again button. */
+                        dialog instanceof AlertDialog);
+                break;
         }
     }
 
-    @Override // ConfirmationViewHandler
-    public void onButton1() {
-        onClick(true /* granted */, false /* doNotAskAgain */);
-    }
-
-    @Override // ConfirmationViewHandler
-    public void onButton2() {
-        onClick(false /* granted */, false /* doNotAskAgain */);
-    }
-
-    @Override // ConfirmationViewHandler
-    public void onButton3() {
-        onClick(false /* granted */, true /* doNotAskAgain */);
-    }
-
-    @Override // ConfirmationViewHandler
-    public CharSequence getCurrentPageText() {
-        return mCurrentPageText;
-    }
-
-    @Override // ConfirmationViewHandler
-    public Icon getPermissionIcon() {
-        return mIcon;
-    }
-
-    @Override // ConfirmationViewHandler
-    public CharSequence getMessage() {
-        return mMessage;
-    }
-
-    @Override // ConfirmationViewHandler
-    public int getButtonBarMode() {
-        return mShowDoNotAsk ? MODE_VERTICAL_BUTTONS : MODE_HORIZONTAL_BUTTONS;
-    }
-
-    @Override // ConfirmationViewHandler
-    public CharSequence getVerticalButton1Text() {
-        return mContext.getString(R.string.grant_dialog_button_allow);
-    }
-
-    @Override // ConfirmationViewHandler
-    public CharSequence getVerticalButton2Text() {
-        return mContext.getString(R.string.grant_dialog_button_deny);
-    }
-
-    @Override // ConfirmationViewHandler
-    public CharSequence getVerticalButton3Text() {
-        return mContext.getString(R.string.grant_dialog_button_deny_dont_ask_again);
-    }
-
-    @Override // ConfirmationViewHandler
-    public Drawable getVerticalButton1Icon(){
-        return mContext.getDrawable(R.drawable.confirm_button);
-    }
-
-    @Override // ConfirmationViewHandler
-    public Drawable getVerticalButton2Icon(){
-        return mContext.getDrawable(R.drawable.cancel_button);
-    }
-
-    @Override // ConfirmationViewHandler
-    public Drawable getVerticalButton3Icon(){
-        return mContext.getDrawable(R.drawable.deny_button);
-    }
-
-    private void onClick(boolean granted, boolean doNotAskAgain) {
+    private void notifyListener(boolean granted, boolean doNotAskAgain) {
         if (mResultListener != null) {
             mResultListener.onPermissionGrantResult(mGroupName, granted, doNotAskAgain);
         }
diff --git a/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java b/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java
index db1c94d..9e82106 100644
--- a/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java
+++ b/src/com/android/packageinstaller/permission/ui/wear/AppPermissionsFragmentWear.java
@@ -23,7 +23,10 @@
 import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.os.Bundle;
-import android.support.wearable.view.WearableListView;
+import android.preference.Preference;
+import android.preference.PreferenceFragment;
+import android.preference.SwitchPreference;
+import android.support.wearable.view.WearableDialogHelper;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -33,8 +36,6 @@
 import com.android.packageinstaller.R;
 import com.android.packageinstaller.permission.model.AppPermissionGroup;
 import com.android.packageinstaller.permission.model.AppPermissions;
-import com.android.packageinstaller.permission.ui.wear.settings.PermissionsSettingsAdapter;
-import com.android.packageinstaller.permission.ui.wear.settings.SettingsAdapter;
 import com.android.packageinstaller.permission.utils.LocationUtils;
 import com.android.packageinstaller.permission.utils.SafetyNetLogger;
 import com.android.packageinstaller.permission.utils.Utils;
@@ -42,16 +43,10 @@
 import java.util.ArrayList;
 import java.util.List;
 
-public final class AppPermissionsFragmentWear extends TitledSettingsFragment {
+public final class AppPermissionsFragmentWear extends PreferenceFragment {
+    private static final String LOG_TAG = "AppPermFragWear";
 
-    private static final String LOG_TAG = "ManagePermsFragment";
-
-    private static final int WARNING_CONFIRMATION_REQUEST = 252;
-    private List<AppPermissionGroup> mToggledGroups;
-    private AppPermissions mAppPermissions;
-    private PermissionsSettingsAdapter mAdapter;
-
-    private boolean mHasConfirmedRevoke;
+    private static final String KEY_NO_PERMISSIONS = "no_permissions";
 
     public static AppPermissionsFragmentWear newInstance(String packageName) {
         return setPackageName(new AppPermissionsFragmentWear(), packageName);
@@ -64,6 +59,11 @@
         return fragment;
     }
 
+    private List<AppPermissionGroup> mToggledGroups;
+    private AppPermissions mAppPermissions;
+
+    private boolean mHasConfirmedRevoke;
+
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -86,172 +86,117 @@
             return;
         }
 
-        mAppPermissions = new AppPermissions(activity, packageInfo, null, true, new Runnable() {
-            @Override
-            public void run() {
-                getActivity().finish();
-            }
-        });
+        mAppPermissions = new AppPermissions(
+                activity, packageInfo, null, true, () -> getActivity().finish());
 
-        mAdapter = new PermissionsSettingsAdapter(getContext());
-
+        addPreferencesFromResource(R.xml.watch_permissions);
         initializePermissionGroupList();
     }
 
     @Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container,
-            Bundle savedInstanceState) {
-        return inflater.inflate(R.layout.settings, container, false);
-    }
-
-    @Override
     public void onResume() {
         super.onResume();
         mAppPermissions.refresh();
 
         // Also refresh the UI
-        final int count = mAdapter.getItemCount();
-        for (int i = 0; i < count; ++i) {
-            updatePermissionGroupSetting(i);
-        }
-    }
-
-    @Override
-    public void onViewCreated(View view, Bundle savedInstanceState) {
-        super.onViewCreated(view, savedInstanceState);
-        if (mAppPermissions != null) {
-            initializeLayout(mAdapter);
-            mHeader.setText(R.string.app_permissions);
-            mDetails.setText(R.string.no_permissions);
-            if (mAdapter.getItemCount() == 0) {
-                mDetails.setVisibility(View.VISIBLE);
-                mWheel.setVisibility(View.GONE);
-            } else {
-                mDetails.setVisibility(View.GONE);
-                mWheel.setVisibility(View.VISIBLE);
+        for (final AppPermissionGroup group : mAppPermissions.getPermissionGroups()) {
+            Preference pref = findPreference(group.getName());
+            if (pref instanceof SwitchPreference) {
+                ((SwitchPreference) pref).setChecked(group.areRuntimePermissionsGranted());
             }
         }
     }
 
-    private void initializePermissionGroupList() {
-        final String packageName = mAppPermissions.getPackageInfo().packageName;
-        List<AppPermissionGroup> groups = mAppPermissions.getPermissionGroups();
-        List<SettingsAdapter.Setting<AppPermissionGroup>> nonSystemGroups = new ArrayList<>();
-
-        final int count = groups.size();
-        for (int i = 0; i < count; ++i) {
-            final AppPermissionGroup group = groups.get(i);
-            if (!Utils.shouldShowPermission(group, packageName)) {
-                continue;
-            }
-
-            boolean isPlatform = group.getDeclaringPackage().equals(Utils.OS_PKG);
-
-            SettingsAdapter.Setting<AppPermissionGroup> setting =
-                    new SettingsAdapter.Setting<AppPermissionGroup>(
-                            group.getLabel(),
-                            getPermissionGroupIcon(group),
-                            i);
-            setting.data = group;
-
-            // The UI shows System settings first, then non-system settings
-            if (isPlatform) {
-                mAdapter.addSetting(setting);
-            } else {
-                nonSystemGroups.add(setting);
-            }
-        }
-
-        // Now add the non-system settings to the end of the list
-        final int nonSystemCount = nonSystemGroups.size();
-        for (int i = 0; i < nonSystemCount; ++i) {
-            final SettingsAdapter.Setting<AppPermissionGroup> setting = nonSystemGroups.get(i);
-            mAdapter.addSetting(setting);
-        }
-    }
-
     @Override
     public void onPause() {
         super.onPause();
         logAndClearToggledGroups();
     }
 
-    @Override
-    public void onClick(WearableListView.ViewHolder view) {
-        final int index = view.getPosition();
-        SettingsAdapter.Setting<AppPermissionGroup> setting = mAdapter.get(index);
-        final AppPermissionGroup group = setting.data;
+    private void initializePermissionGroupList() {
+        final String packageName = mAppPermissions.getPackageInfo().packageName;
+        List<AppPermissionGroup> groups = mAppPermissions.getPermissionGroups();
+        List<SwitchPreference> nonSystemGroups = new ArrayList<>();
 
-        if (group == null) {
-            Log.e(LOG_TAG, "Error: AppPermissionGroup is null");
-            return;
+        if (!groups.isEmpty()) {
+            getPreferenceScreen().removePreference(findPreference(KEY_NO_PERMISSIONS));
         }
 
-        // The way WearableListView is designed, there is no way to avoid this click handler
-        // Since the policy is fixed, ignore the click as the user is not able to change the state
-        // of this permission group
-        if (group.isPolicyFixed()) {
-            return;
+        for (final AppPermissionGroup group : groups) {
+            if (!Utils.shouldShowPermission(group, packageName)) {
+                continue;
+            }
+
+            boolean isPlatform = group.getDeclaringPackage().equals(Utils.OS_PKG);
+
+            final SwitchPreference pref = new SwitchPreference(getContext());
+            pref.setKey(group.getName());
+            pref.setTitle(group.getLabel());
+            pref.setChecked(group.areRuntimePermissionsGranted());
+
+            if (group.isPolicyFixed()) {
+                pref.setEnabled(false);
+            } else {
+                pref.setOnPreferenceChangeListener((p, newVal) -> {
+                    if (LocationUtils.isLocationGroupAndProvider(
+                            group.getName(), group.getApp().packageName)) {
+                        LocationUtils.showLocationDialog(
+                                getContext(), mAppPermissions.getAppLabel());
+                        return false;
+                    }
+
+                    if ((Boolean) newVal) {
+                        setPermission(group, pref, true);
+                    } else {
+                        final boolean grantedByDefault = group.hasGrantedByDefaultPermission();
+                        if (grantedByDefault
+                                || (!group.hasRuntimePermission() && !mHasConfirmedRevoke)) {
+                            new WearableDialogHelper.DialogBuilder(getContext())
+                                    .setNegativeIcon(R.drawable.confirm_button)
+                                    .setPositiveIcon(R.drawable.cancel_button)
+                                    .setNegativeButton(R.string.grant_dialog_button_deny_anyway,
+                                            (dialog, which) -> {
+                                                setPermission(group, pref, false);
+                                                if (!group.hasGrantedByDefaultPermission()) {
+                                                    mHasConfirmedRevoke = true;
+                                                }
+                                            })
+                                    .setPositiveButton(R.string.cancel, (dialog, which) -> {})
+                                    .setMessage(grantedByDefault ?
+                                            R.string.system_warning : R.string.old_sdk_deny_warning)
+                                    .show();
+                            return false;
+                        } else {
+                            setPermission(group, pref, false);
+                        }
+                    }
+
+                    return true;
+                });
+            }
+
+            // The UI shows System settings first, then non-system settings
+            if (isPlatform) {
+                getPreferenceScreen().addPreference(pref);
+            } else {
+                nonSystemGroups.add(pref);
+            }
         }
 
-        addToggledGroup(group);
-
-        if (LocationUtils.isLocationGroupAndProvider(group.getName(), group.getApp().packageName)) {
-            LocationUtils.showLocationDialog(getContext(), mAppPermissions.getAppLabel());
-            return;
+        // Now add the non-system settings to the end of the list
+        for (SwitchPreference nonSystemGroup : nonSystemGroups) {
+            getPreferenceScreen().addPreference(nonSystemGroup);
         }
+    }
 
-        if (!group.areRuntimePermissionsGranted()) {
+    private void setPermission(AppPermissionGroup group, SwitchPreference pref, boolean grant) {
+        if (grant) {
             group.grantRuntimePermissions(false);
         } else {
-            final boolean grantedByDefault = group.hasGrantedByDefaultPermission();
-            if (grantedByDefault || (!group.hasRuntimePermission() && !mHasConfirmedRevoke)) {
-                Intent intent = new Intent(getActivity(), WarningConfirmationActivity.class);
-                intent.putExtra(WarningConfirmationActivity.EXTRA_WARNING_MESSAGE,
-                        getString(grantedByDefault ?
-                                R.string.system_warning : R.string.old_sdk_deny_warning));
-                intent.putExtra(WarningConfirmationActivity.EXTRA_INDEX, index);
-                startActivityForResult(intent, WARNING_CONFIRMATION_REQUEST);
-            } else {
-                group.revokeRuntimePermissions(false);
-            }
+            group.revokeRuntimePermissions(false);
         }
-
-        updatePermissionGroupSetting(index);
-    }
-
-    @Override
-    public void onActivityResult(int requestCode, int resultCode, Intent data) {
-        if (requestCode == WARNING_CONFIRMATION_REQUEST) {
-            if (resultCode == Activity.RESULT_OK) {
-                int index = data.getIntExtra(WarningConfirmationActivity.EXTRA_INDEX, -1);
-                if (index == -1) {
-                    Log.e(LOG_TAG, "Warning confirmation request came back with no index.");
-                    return;
-                }
-
-                SettingsAdapter.Setting<AppPermissionGroup> setting = mAdapter.get(index);
-                final AppPermissionGroup group = setting.data;
-                group.revokeRuntimePermissions(false);
-                if (!group.hasGrantedByDefaultPermission()) {
-                    mHasConfirmedRevoke = true;
-                }
-
-                updatePermissionGroupSetting(index);
-            }
-        } else {
-            super.onActivityResult(requestCode, resultCode, data);
-        }
-    }
-
-    private void updatePermissionGroupSetting(int index) {
-        SettingsAdapter.Setting<AppPermissionGroup> setting = mAdapter.get(index);
-        AppPermissionGroup group = setting.data;
-        mAdapter.updateSetting(
-                index,
-                group.getLabel(),
-                getPermissionGroupIcon(group),
-                group);
+        addToggledGroup(group);
+        pref.setChecked(grant);
     }
 
     private void addToggledGroup(AppPermissionGroup group) {
@@ -273,54 +218,4 @@
             mToggledGroups = null;
         }
     }
-
-    private int getPermissionGroupIcon(AppPermissionGroup group) {
-        String groupName = group.getName();
-        boolean isEnabled = group.areRuntimePermissionsGranted();
-        int resId;
-
-        switch (groupName) {
-            case Manifest.permission_group.CALENDAR:
-                resId = isEnabled ? R.drawable.ic_permission_calendar
-                        : R.drawable.ic_permission_calendardisable;
-                break;
-            case Manifest.permission_group.CAMERA:
-                resId = isEnabled ? R.drawable.ic_permission_camera
-                        : R.drawable.ic_permission_cameradisable;
-                break;
-            case Manifest.permission_group.CONTACTS:
-                resId = isEnabled ? R.drawable.ic_permission_contact
-                        : R.drawable.ic_permission_contactdisable;
-                break;
-            case Manifest.permission_group.LOCATION:
-                resId = isEnabled ? R.drawable.ic_permission_location
-                        : R.drawable.ic_permission_locationdisable;
-                break;
-            case Manifest.permission_group.MICROPHONE:
-                resId = isEnabled ? R.drawable.ic_permission_mic
-                        : R.drawable.ic_permission_micdisable;
-                break;
-            case Manifest.permission_group.PHONE:
-                resId = isEnabled ? R.drawable.ic_permission_call
-                        : R.drawable.ic_permission_calldisable;
-                break;
-            case Manifest.permission_group.SENSORS:
-                resId = isEnabled ? R.drawable.ic_permission_sensor
-                        : R.drawable.ic_permission_sensordisable;
-                break;
-            case Manifest.permission_group.SMS:
-                resId = isEnabled ? R.drawable.ic_permission_sms
-                        : R.drawable.ic_permission_smsdisable;
-                break;
-            case Manifest.permission_group.STORAGE:
-                resId = isEnabled ? R.drawable.ic_permission_storage
-                        : R.drawable.ic_permission_storagedisable;
-                break;
-            default:
-                resId = isEnabled ? R.drawable.ic_permission_shield
-                        : R.drawable.ic_permission_shielddisable;
-        }
-
-        return resId;
-    }
 }
diff --git a/src/com/android/packageinstaller/permission/ui/wear/ConfirmationViewHandler.java b/src/com/android/packageinstaller/permission/ui/wear/ConfirmationViewHandler.java
deleted file mode 100644
index b063ad5..0000000
--- a/src/com/android/packageinstaller/permission/ui/wear/ConfirmationViewHandler.java
+++ /dev/null
@@ -1,384 +0,0 @@
-package com.android.packageinstaller.permission.ui.wear;
-
-import android.animation.ObjectAnimator;
-import android.animation.PropertyValuesHolder;
-import android.content.Context;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.Icon;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import android.text.TextUtils;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.ViewTreeObserver;
-import android.view.animation.AnimationUtils;
-import android.view.animation.Interpolator;
-import android.widget.Button;
-import android.widget.ImageView;
-import android.widget.ScrollView;
-import android.widget.TextView;
-
-import com.android.packageinstaller.R;
-
-public abstract class ConfirmationViewHandler implements
-        Handler.Callback,
-        View.OnClickListener,
-        ViewTreeObserver.OnScrollChangedListener,
-        ViewTreeObserver.OnGlobalLayoutListener {
-    private static final String TAG = "ConfirmationViewHandler";
-    
-    public static final int MODE_HORIZONTAL_BUTTONS = 0;
-    public static final int MODE_VERTICAL_BUTTONS = 1;
-
-    private static final int MSG_SHOW_BUTTON_BAR = 1001;
-    private static final int MSG_HIDE_BUTTON_BAR = 1002;
-    private static final long HIDE_ANIM_DURATION = 500;
-
-    private View mRoot;
-    private TextView mCurrentPageText;
-    private ImageView mIcon;
-    private TextView mMessage;
-    private ScrollView mScrollingContainer;
-    private ViewGroup mContent;
-    private ViewGroup mHorizontalButtonBar;
-    private ViewGroup mVerticalButtonBar;
-    private Button mVerticalButton1;
-    private Button mVerticalButton2;
-    private Button mVerticalButton3;
-    private View mButtonBarContainer;
-
-    private Context mContext;
-
-    private Handler mHideHandler;
-    private Interpolator mInterpolator;
-    private float mButtonBarFloatingHeight;
-    private ObjectAnimator mButtonBarAnimator;
-    private float mCurrentTranslation;
-    private boolean mHiddenBefore;
-
-    // TODO: Move these into a builder
-    /** In the 2 button layout, this is allow button */
-    public abstract void onButton1();
-    /** In the 2 button layout, this is deny button */
-    public abstract void onButton2();
-    public abstract void onButton3();
-    public abstract CharSequence getVerticalButton1Text();
-    public abstract CharSequence getVerticalButton2Text();
-    public abstract CharSequence getVerticalButton3Text();
-    public abstract Drawable getVerticalButton1Icon();
-    public abstract Drawable getVerticalButton2Icon();
-    public abstract Drawable getVerticalButton3Icon();
-    public abstract CharSequence getCurrentPageText();
-    public abstract Icon getPermissionIcon();
-    public abstract CharSequence getMessage();
-
-    public ConfirmationViewHandler(Context context) {
-        mContext = context;
-    }
-
-    public View createView() {
-        mRoot = LayoutInflater.from(mContext).inflate(R.layout.confirmation_dialog, null);
-
-        mMessage = (TextView) mRoot.findViewById(R.id.message);
-        mCurrentPageText = (TextView) mRoot.findViewById(R.id.current_page_text);
-        mIcon = (ImageView) mRoot.findViewById(R.id.icon);
-        mButtonBarContainer = mRoot.findViewById(R.id.button_bar_container);
-        mContent = (ViewGroup) mRoot.findViewById(R.id.content);
-        mScrollingContainer = (ScrollView) mRoot.findViewById(R.id.scrolling_container);
-        mHorizontalButtonBar = (ViewGroup) mRoot.findViewById(R.id.horizontal_button_bar);
-        mVerticalButtonBar = (ViewGroup) mRoot.findViewById(R.id.vertical_button_bar);
-
-        Button horizontalAllow = (Button) mRoot.findViewById(R.id.permission_allow_button);
-        Button horizontalDeny = (Button) mRoot.findViewById(R.id.permission_deny_button);
-        horizontalAllow.setOnClickListener(this);
-        horizontalDeny.setOnClickListener(this);
-
-        mVerticalButton1 = (Button) mRoot.findViewById(R.id.vertical_button1);
-        mVerticalButton2 = (Button) mRoot.findViewById(R.id.vertical_button2);
-        mVerticalButton3 = (Button) mRoot.findViewById(R.id.vertical_button3);
-        mVerticalButton1.setOnClickListener(this);
-        mVerticalButton2.setOnClickListener(this);
-        mVerticalButton3.setOnClickListener(this);
-
-        mInterpolator = AnimationUtils.loadInterpolator(mContext,
-                android.R.interpolator.fast_out_slow_in);
-        mButtonBarFloatingHeight = mContext.getResources().getDimension(
-                R.dimen.conf_diag_floating_height);
-        mHideHandler = new Handler(Looper.getMainLooper(), this);
-
-        mScrollingContainer.getViewTreeObserver().addOnScrollChangedListener(this);
-        mRoot.getViewTreeObserver().addOnGlobalLayoutListener(this);
-
-        return mRoot;
-    }
-
-    /**
-     * Child class should override this for other modes.  Call invalidate() to update the UI to the
-     * new button mode.
-     * @return The current mode the layout should use for the buttons
-     */
-    public int getButtonBarMode() {
-        return MODE_HORIZONTAL_BUTTONS;
-    }
-
-    public void invalidate() {
-        CharSequence currentPageText = getCurrentPageText();
-        if (!TextUtils.isEmpty(currentPageText)) {
-            mCurrentPageText.setText(currentPageText);
-            mCurrentPageText.setVisibility(View.VISIBLE);
-        } else {
-            mCurrentPageText.setVisibility(View.GONE);
-        }
-
-        Icon icon = getPermissionIcon();
-        if (icon != null) {
-            mIcon.setImageIcon(icon);
-            mIcon.setVisibility(View.VISIBLE);
-        } else {
-            mIcon.setVisibility(View.GONE);
-        }
-
-        CharSequence messageString = getMessage();
-        mMessage.setText(messageString);
-        mRoot.announceForAccessibility(messageString);
-
-        switch (getButtonBarMode()) {
-            case MODE_HORIZONTAL_BUTTONS:
-                mHorizontalButtonBar.setVisibility(View.VISIBLE);
-                mVerticalButtonBar.setVisibility(View.GONE);
-                break;
-            case MODE_VERTICAL_BUTTONS:
-                mHorizontalButtonBar.setVisibility(View.GONE);
-                mVerticalButtonBar.setVisibility(View.VISIBLE);
-
-                mVerticalButton1.setText(getVerticalButton1Text());
-                mVerticalButton2.setText(getVerticalButton2Text());
-
-                mVerticalButton1.setCompoundDrawablesWithIntrinsicBounds(
-                        getVerticalButton1Icon(), null, null, null);
-                mVerticalButton2.setCompoundDrawablesWithIntrinsicBounds(
-                        getVerticalButton2Icon(), null, null, null);
-
-                CharSequence verticalButton3Text = getVerticalButton3Text();
-                if (TextUtils.isEmpty(verticalButton3Text)) {
-                    mVerticalButton3.setVisibility(View.GONE);
-                } else {
-                    mVerticalButton3.setText(getVerticalButton3Text());
-                    mVerticalButton3.setCompoundDrawablesWithIntrinsicBounds(
-                            getVerticalButton3Icon(), null, null, null);
-                }
-                break;
-        }
-
-        mScrollingContainer.scrollTo(0, 0);
-
-        mHideHandler.removeMessages(MSG_HIDE_BUTTON_BAR);
-        mHideHandler.removeMessages(MSG_SHOW_BUTTON_BAR);
-    }
-
-    @Override
-    public void onGlobalLayout() {
-        if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, "onGlobalLayout");
-            Log.d(TAG, "    contentHeight: " + mContent.getHeight());
-        }
-
-        if (mButtonBarAnimator != null) {
-            mButtonBarAnimator.cancel();
-        }
-
-        // In order to fake the buttons peeking at the bottom, need to do set the
-        // padding properly.
-        if (mContent.getPaddingBottom() != mButtonBarContainer.getHeight()) {
-            mContent.setPadding(mContent.getPaddingLeft(), mContent.getPaddingTop(),
-                    mContent.getPaddingRight(), mButtonBarContainer.getHeight());
-            if (Log.isLoggable(TAG, Log.DEBUG)) {
-                Log.d(TAG, "    set mContent.PaddingBottom: " + mButtonBarContainer.getHeight());
-            }
-        }
-
-        mButtonBarContainer.setTranslationY(mButtonBarContainer.getHeight());
-
-        // Give everything a chance to render
-        mHideHandler.removeMessages(MSG_HIDE_BUTTON_BAR);
-        mHideHandler.removeMessages(MSG_SHOW_BUTTON_BAR);
-        mHideHandler.sendEmptyMessageDelayed(MSG_SHOW_BUTTON_BAR, 50);
-    }
-
-    @Override
-    public void onClick(View v) {
-        int id = v.getId();
-        switch (id) {
-            case R.id.permission_allow_button:
-            case R.id.vertical_button1:
-                onButton1();
-                break;
-            case R.id.permission_deny_button:
-            case R.id.vertical_button2:
-                onButton2();
-                break;
-            case R.id.vertical_button3:
-                onButton3();
-                break;
-        }
-    }
-
-    @Override
-    public boolean handleMessage (Message msg) {
-        switch (msg.what) {
-            case MSG_SHOW_BUTTON_BAR:
-                showButtonBar();
-                return true;
-            case MSG_HIDE_BUTTON_BAR:
-                hideButtonBar();
-                return true;
-        }
-        return false;
-    }
-
-    @Override
-    public void onScrollChanged () {
-        if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, "onScrollChanged");
-        }
-        mHideHandler.removeMessages(MSG_HIDE_BUTTON_BAR);
-        hideButtonBar();
-    }
-
-    private void showButtonBar() {
-        if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, "showButtonBar");
-        }
-
-        // Setup Button animation.
-        // pop the button bar back to full height, stop all animation
-        if (mButtonBarAnimator != null) {
-            mButtonBarAnimator.cancel();
-        }
-
-        // stop any calls to hide the button bar in the future
-        mHideHandler.removeMessages(MSG_HIDE_BUTTON_BAR);
-        mHiddenBefore = false;
-
-        // Evaluate the max height the button bar can go
-        final int screenHeight = mRoot.getHeight();
-        final int halfScreenHeight = screenHeight / 2;
-        final int buttonBarHeight = mButtonBarContainer.getHeight();
-        final int contentHeight = mContent.getHeight() - buttonBarHeight;
-        final int buttonBarMaxHeight =
-                Math.min(buttonBarHeight, halfScreenHeight);
-
-        if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, "    screenHeight: " + screenHeight);
-            Log.d(TAG, "    contentHeight: " + contentHeight);
-            Log.d(TAG, "    buttonBarHeight: " + buttonBarHeight);
-            Log.d(TAG, "    buttonBarMaxHeight: " + buttonBarMaxHeight);
-        }
-
-        mButtonBarContainer.setTranslationZ(mButtonBarFloatingHeight);
-
-        // Only hide the button bar if it is occluding the content or the button bar is bigger than
-        // half the screen
-        if (contentHeight > (screenHeight - buttonBarHeight)
-                || buttonBarHeight > halfScreenHeight) {
-            mHideHandler.sendEmptyMessageDelayed(MSG_HIDE_BUTTON_BAR, 3000);
-        }
-
-        generateButtonBarAnimator(buttonBarHeight,
-                buttonBarHeight - buttonBarMaxHeight, 0, mButtonBarFloatingHeight, 1000);
-    }
-
-    private void hideButtonBar() {
-        if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, "hideButtonBar");
-        }
-
-        // The desired margin space between the button bar and the bottom of the dialog text
-        final int topMargin = mContext.getResources().getDimensionPixelSize(
-                R.dimen.conf_diag_button_container_top_margin);
-        final int contentHeight = mContent.getHeight() + topMargin;
-        final int screenHeight = mRoot.getHeight();
-        final int buttonBarHeight = mButtonBarContainer.getHeight();
-
-        final int offset = screenHeight + buttonBarHeight
-                - contentHeight + Math.max(mScrollingContainer.getScrollY(), 0);
-        final int translationY = (offset > 0 ?
-                mButtonBarContainer.getHeight() - offset : mButtonBarContainer.getHeight());
-
-        if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, "    topMargin: " + topMargin);
-            Log.d(TAG, "    contentHeight: " + contentHeight);
-            Log.d(TAG, "    screenHeight: " + screenHeight);
-            Log.d(TAG, "    offset: " + offset);
-            Log.d(TAG, "    buttonBarHeight: " + buttonBarHeight);
-            Log.d(TAG, "    mContent.getPaddingBottom(): " + mContent.getPaddingBottom());
-            Log.d(TAG, "    mScrollingContainer.getScrollY(): " + mScrollingContainer.getScrollY());
-            Log.d(TAG, "    translationY: " + translationY);
-        }
-
-        if (!mHiddenBefore || mButtonBarAnimator == null) {
-            // Remove previous call to MSG_SHOW_BUTTON_BAR if the user scrolled or something before
-            // the animation got a chance to play
-            mHideHandler.removeMessages(MSG_SHOW_BUTTON_BAR);
-
-            if(mButtonBarAnimator != null) {
-                mButtonBarAnimator.cancel(); // stop current animation if there is one playing
-            }
-
-            // hasn't hidden the bar yet, just hide now to the right height
-            generateButtonBarAnimator(
-                    mButtonBarContainer.getTranslationY(), translationY,
-                    mButtonBarFloatingHeight, 0, HIDE_ANIM_DURATION);
-        } else if (mButtonBarAnimator.isRunning()) {
-            // we are animating the button bar closing, change to animate to the right place
-            if (Math.abs(mCurrentTranslation - translationY) > 1e-2f) {
-                mButtonBarAnimator.cancel(); // stop current animation
-
-                if (Math.abs(mButtonBarContainer.getTranslationY() - translationY) > 1e-2f) {
-                    long duration = Math.max((long) (
-                            (float) HIDE_ANIM_DURATION
-                                    * (translationY - mButtonBarContainer.getTranslationY())
-                                    / mButtonBarContainer.getHeight()), 0);
-
-                    generateButtonBarAnimator(
-                            mButtonBarContainer.getTranslationY(), translationY,
-                            mButtonBarFloatingHeight, 0, duration);
-                } else {
-                    mButtonBarContainer.setTranslationY(translationY);
-                    mButtonBarContainer.setTranslationZ(0);
-                }
-            }
-        } else {
-            // not currently animating, have already hidden, snap to the right offset
-            mButtonBarContainer.setTranslationY(translationY);
-            mButtonBarContainer.setTranslationZ(0);
-        }
-
-        mHiddenBefore = true;
-    }
-
-    private void generateButtonBarAnimator(
-            float startY, float endY, float startZ, float endZ, long duration) {
-        if (Log.isLoggable(TAG, Log.DEBUG)) {
-            Log.d(TAG, "generateButtonBarAnimator");
-            Log.d(TAG, "    startY: " + startY);
-            Log.d(TAG, "    endY: " + endY);
-            Log.d(TAG, "    startZ: " + startZ);
-            Log.d(TAG, "    endZ: " + endZ);
-            Log.d(TAG, "    duration: " + duration);
-        }
-
-        mButtonBarAnimator =
-                ObjectAnimator.ofPropertyValuesHolder(
-                        mButtonBarContainer,
-                        PropertyValuesHolder.ofFloat(View.TRANSLATION_Y, startY, endY),
-                        PropertyValuesHolder.ofFloat(View.TRANSLATION_Z, startZ, endZ));
-        mCurrentTranslation = endY;
-        mButtonBarAnimator.setDuration(duration);
-        mButtonBarAnimator.setInterpolator(mInterpolator);
-        mButtonBarAnimator.start();
-    }
-}
diff --git a/src/com/android/packageinstaller/permission/ui/wear/TitledSettingsFragment.java b/src/com/android/packageinstaller/permission/ui/wear/TitledSettingsFragment.java
deleted file mode 100644
index b673a49..0000000
--- a/src/com/android/packageinstaller/permission/ui/wear/TitledSettingsFragment.java
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * 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.packageinstaller.permission.ui.wear;
-
-import android.app.Fragment;
-import android.content.Context;
-import android.os.Bundle;
-import android.support.v7.widget.RecyclerView;
-import android.support.wearable.view.WearableListView;
-import android.text.Editable;
-import android.text.TextWatcher;
-import android.util.TypedValue;
-import android.view.Gravity;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.WindowInsets;
-import android.widget.LinearLayout;
-import android.widget.TextView;
-
-import com.android.packageinstaller.permission.ui.wear.settings.ViewUtils;
-import com.android.packageinstaller.R;
-
-/**
- * Base settings Fragment that shows a title at the top of the page.
- */
-public abstract class TitledSettingsFragment extends Fragment implements
-        View.OnLayoutChangeListener, WearableListView.ClickListener {
-
-    private static final int ITEM_CHANGE_DURATION_MS = 120;
-
-    private static final String TAG = "TitledSettingsFragment";
-    private int mInitialHeaderHeight;
-
-    protected TextView mHeader;
-    protected TextView mDetails;
-    protected WearableListView mWheel;
-
-    private int mCharLimitShortTitle;
-    private int mCharLimitLine;
-    private int mChinOffset;
-
-    private TextWatcher mHeaderTextWatcher = new TextWatcher() {
-        @Override
-        public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
-
-        @Override
-        public void onTextChanged(CharSequence s, int start, int before, int count) {}
-
-        @Override
-        public void afterTextChanged(Editable editable) {
-            adjustHeaderSize();
-        }
-    };
-
-    private void adjustHeaderTranslation() {
-        int translation = 0;
-        if (mWheel.getChildCount() > 0) {
-            translation = mWheel.getCentralViewTop() - mWheel.getChildAt(0).getTop();
-        }
-
-        float newTranslation = Math.min(Math.max(-mInitialHeaderHeight, -translation), 0);
-
-        int position = mWheel.getChildAdapterPosition(mWheel.getChildAt(0));
-        if (position == 0 || newTranslation < 0) {
-            mHeader.setTranslationY(newTranslation);
-        }
-    }
-
-    @Override
-    public void onTopEmptyRegionClick() {
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        mCharLimitShortTitle = getResources().getInteger(R.integer.short_title_length);
-        mCharLimitLine = getResources().getInteger(R.integer.char_limit_per_line);
-    }
-
-    @Override
-    public void onLayoutChange(View view, int left, int top, int right, int bottom, int oldLeft,
-                               int oldTop, int oldRight, int oldBottom) {
-        if (view == mHeader) {
-            mInitialHeaderHeight = bottom - top;
-            if (ViewUtils.getIsCircular(getContext())) {
-                // We are adding more margin on circular screens, so we need to account for it and use
-                // it for hiding the header.
-                mInitialHeaderHeight +=
-                        ((ViewGroup.MarginLayoutParams) view.getLayoutParams()).topMargin;
-            }
-        } else if (view == mWheel) {
-            adjustHeaderTranslation();
-        }
-    }
-
-    protected void initializeLayout(RecyclerView.Adapter adapter) {
-        View v = getView();
-        mWheel = (WearableListView) v.findViewById(R.id.wheel);
-
-        mHeader = (TextView) v.findViewById(R.id.header);
-        mHeader.addOnLayoutChangeListener(this);
-        mHeader.addTextChangedListener(mHeaderTextWatcher);
-
-        mDetails = (TextView) v.findViewById(R.id.details);
-        mDetails.addOnLayoutChangeListener(this);
-
-        mWheel.setAdapter(adapter);
-        mWheel.addOnScrollListener(new RecyclerView.OnScrollListener() {
-            @Override
-            public void onScrollStateChanged(RecyclerView recyclerView, int newState) {
-            }
-
-            @Override
-            public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
-                adjustHeaderTranslation();
-            }
-        });
-        mWheel.setClickListener(this);
-        mWheel.addOnLayoutChangeListener(this);
-
-        // Decrease item change animation duration to approximately half of the default duration.
-        RecyclerView.ItemAnimator itemAnimator = mWheel.getItemAnimator();
-        itemAnimator.setChangeDuration(ITEM_CHANGE_DURATION_MS);
-
-        adjustHeaderSize();
-
-        positionOnCircular(getContext(), mHeader, mDetails, mWheel);
-    }
-
-    public void positionOnCircular(Context context, View header, View details,
-            final ViewGroup wheel) {
-        if (ViewUtils.getIsCircular(context)) {
-            LinearLayout.LayoutParams params =
-                    (LinearLayout.LayoutParams) header.getLayoutParams();
-            params.topMargin = (int) context.getResources().getDimension(
-                    R.dimen.settings_header_top_margin_circular);
-            // Note that the margins are made symmetrical here. Since they're symmetrical we choose
-            // the smaller value to maximize usable width.
-            final int margin = (int) Math.min(context.getResources().getDimension(
-                    R.dimen.round_content_padding_left), context.getResources().getDimension(
-                    R.dimen.round_content_padding_right));
-            params.leftMargin = margin;
-            params.rightMargin = margin;
-            params.gravity = Gravity.CENTER_HORIZONTAL;
-            header.setLayoutParams(params);
-            details.setLayoutParams(params);
-
-            if (header instanceof TextView) {
-                ((TextView) header).setGravity(Gravity.CENTER);
-            }
-            if (details instanceof TextView) {
-                ((TextView) details).setGravity(Gravity.CENTER);
-            }
-
-            final int leftPadding = (int) context.getResources().getDimension(
-                    R.dimen.round_content_padding_left);
-            final int rightPadding = (int) context.getResources().getDimension(
-                    R.dimen.round_content_padding_right);
-            final int topPadding = (int) context.getResources().getDimension(
-                    R.dimen.settings_wearable_list_view_vertical_padding_round);
-            final int bottomPadding = (int) context.getResources().getDimension(
-                    R.dimen.settings_wearable_list_view_vertical_padding_round);
-            wheel.setPadding(leftPadding, topPadding, rightPadding, mChinOffset + bottomPadding);
-            wheel.setClipToPadding(false);
-
-            wheel.setOnApplyWindowInsetsListener(new View.OnApplyWindowInsetsListener() {
-                @Override
-                public WindowInsets onApplyWindowInsets(View v, WindowInsets insets) {
-                    mChinOffset = insets.getSystemWindowInsetBottom();
-                    wheel.setPadding(leftPadding, topPadding, rightPadding,
-                            mChinOffset + bottomPadding);
-                    // This listener is invoked after each time we navigate to SettingsActivity and
-                    // it keeps adding padding. We need to disable it after the first update.
-                    v.setOnApplyWindowInsetsListener(null);
-                    return insets.consumeSystemWindowInsets();
-                }
-            });
-        } else {
-            int leftPadding = (int) context.getResources().getDimension(
-                    R.dimen.content_padding_left);
-            wheel.setPadding(leftPadding, wheel.getPaddingTop(), wheel.getPaddingRight(),
-                    wheel.getPaddingBottom());
-        }
-    }
-
-    private void adjustHeaderSize() {
-        int length = mHeader.length();
-
-        if (length <= mCharLimitShortTitle) {
-            mHeader.setTextSize(TypedValue.COMPLEX_UNIT_PX,
-                    getResources().getDimensionPixelSize(
-                            R.dimen.setting_short_header_text_size));
-        } else {
-            mHeader.setTextSize(TypedValue.COMPLEX_UNIT_PX,
-                    getResources().getDimensionPixelSize(
-                            R.dimen.setting_long_header_text_size));
-        }
-
-        boolean singleLine = length <= mCharLimitLine;
-
-        float height = getResources().getDimension(R.dimen.settings_header_base_height);
-        if (!singleLine) {
-            height += getResources().getDimension(R.dimen.setting_header_extra_line_height);
-        }
-        mHeader.setMinHeight((int) height);
-
-        LinearLayout.LayoutParams params = (LinearLayout.LayoutParams) mHeader.getLayoutParams();
-        final Context context = getContext();
-        if (!singleLine) {
-            // Make the top margin a little bit smaller so there is more space for the title.
-            if (ViewUtils.getIsCircular(context)) {
-                params.topMargin = getResources().getDimensionPixelSize(
-                        R.dimen.settings_header_top_margin_circular_multiline);
-            } else {
-                params.topMargin = getResources().getDimensionPixelSize(
-                        R.dimen.settings_header_top_margin_multiline);
-            }
-        } else {
-            if (ViewUtils.getIsCircular(context)) {
-                params.topMargin = getResources().getDimensionPixelSize(
-                        R.dimen.settings_header_top_margin_circular);
-            } else {
-                params.topMargin = getResources().getDimensionPixelSize(
-                        R.dimen.settings_header_top_margin);
-            }
-        }
-        mHeader.setLayoutParams(params);
-    }
-}
diff --git a/src/com/android/packageinstaller/permission/ui/wear/WarningConfirmationActivity.java b/src/com/android/packageinstaller/permission/ui/wear/WarningConfirmationActivity.java
deleted file mode 100644
index 0800c14..0000000
--- a/src/com/android/packageinstaller/permission/ui/wear/WarningConfirmationActivity.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
-* 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.packageinstaller.permission.ui.wear;
-
-import android.app.Activity;
-import android.content.Intent;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.Icon;
-import android.os.Bundle;
-
-import com.android.packageinstaller.R;
-
-public final class WarningConfirmationActivity extends Activity {
-    public final static String EXTRA_WARNING_MESSAGE = "EXTRA_WARNING_MESSAGE";
-    // Saved index that will be returned in the onActivityResult() callback
-    public final static String EXTRA_INDEX = "EXTRA_INDEX";
-
-    private ConfirmationViewHandler mViewHandler;
-    private String mMessage;
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-
-        mMessage = getIntent().getStringExtra(EXTRA_WARNING_MESSAGE);
-
-        mViewHandler = new ConfirmationViewHandler(this) {
-            @Override // ConfirmationViewHandler
-            public int getButtonBarMode() {
-                return MODE_VERTICAL_BUTTONS;
-            }
-
-            @Override
-            public void onButton1() {
-                setResultAndFinish(Activity.RESULT_CANCELED);
-            }
-
-            @Override
-            public void onButton2() {
-                setResultAndFinish(Activity.RESULT_OK);
-            }
-
-            @Override
-            public void onButton3() {
-                // no-op
-            }
-
-            @Override
-            public CharSequence getVerticalButton1Text() {
-                return getString(R.string.cancel);
-            }
-
-            @Override
-            public CharSequence getVerticalButton2Text() {
-                return getString(R.string.grant_dialog_button_deny_anyway);
-            }
-
-            @Override
-            public CharSequence getVerticalButton3Text() {
-                return null;
-            }
-
-            @Override
-            public Drawable getVerticalButton1Icon() {
-                return getDrawable(R.drawable.cancel_button);
-            }
-
-            @Override
-            public Drawable getVerticalButton2Icon() {
-                return getDrawable(R.drawable.confirm_button);
-            }
-
-            @Override
-            public Drawable getVerticalButton3Icon() {
-                return null;
-            }
-
-            @Override
-            public CharSequence getCurrentPageText() {
-                return null;
-            }
-
-            @Override
-            public Icon getPermissionIcon() {
-                return null;
-            }
-
-            @Override
-            public CharSequence getMessage() {
-                return mMessage;
-            }
-        };
-
-        setContentView(mViewHandler.createView());
-        mViewHandler.invalidate();
-    }
-
-    private void setResultAndFinish(int result) {
-        Intent intent = new Intent();
-        intent.putExtra(EXTRA_INDEX, getIntent().getIntExtra(EXTRA_INDEX, -1));
-        setResult(result, intent);
-        finish();
-    }
-}
diff --git a/src/com/android/packageinstaller/permission/ui/wear/settings/ExtendedOnCenterProximityListener.java b/src/com/android/packageinstaller/permission/ui/wear/settings/ExtendedOnCenterProximityListener.java
deleted file mode 100644
index 02c203b..0000000
--- a/src/com/android/packageinstaller/permission/ui/wear/settings/ExtendedOnCenterProximityListener.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.packageinstaller.permission.ui.wear.settings;
-
-import android.support.wearable.view.WearableListView;
-
-public interface ExtendedOnCenterProximityListener
-        extends WearableListView.OnCenterProximityListener {
-    float getProximityMinValue();
-
-    float getProximityMaxValue();
-
-    float getCurrentProximityValue();
-
-    void setScalingAnimatorValue(float value);
-}
diff --git a/src/com/android/packageinstaller/permission/ui/wear/settings/ExtendedViewHolder.java b/src/com/android/packageinstaller/permission/ui/wear/settings/ExtendedViewHolder.java
deleted file mode 100644
index 6b72541..0000000
--- a/src/com/android/packageinstaller/permission/ui/wear/settings/ExtendedViewHolder.java
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * 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.packageinstaller.permission.ui.wear.settings;
-
-import android.animation.ObjectAnimator;
-import android.support.wearable.view.WearableListView;
-import android.view.View;
-
-
-public class ExtendedViewHolder extends WearableListView.ViewHolder {
-    public static final long DEFAULT_ANIMATION_DURATION = 150;
-
-    private ObjectAnimator mScalingUpAnimator;
-
-    private ObjectAnimator mScalingDownAnimator;
-
-    private float mMinValue;
-
-    private float mMaxValue;
-
-    public ExtendedViewHolder(View itemView) {
-        super(itemView);
-        if (itemView instanceof ExtendedOnCenterProximityListener) {
-            ExtendedOnCenterProximityListener item =
-                    (ExtendedOnCenterProximityListener) itemView;
-            mMinValue = item.getProximityMinValue();
-            item.setScalingAnimatorValue(mMinValue);
-            mMaxValue = item.getProximityMaxValue();
-            mScalingUpAnimator = ObjectAnimator.ofFloat(item, "scalingAnimatorValue", mMinValue,
-                    mMaxValue);
-            mScalingUpAnimator.setDuration(DEFAULT_ANIMATION_DURATION);
-            mScalingDownAnimator = ObjectAnimator.ofFloat(item, "scalingAnimatorValue",
-                    mMaxValue, mMinValue);
-            mScalingDownAnimator.setDuration(DEFAULT_ANIMATION_DURATION);
-        }
-    }
-
-    public void onCenterProximity(boolean isCentralItem, boolean animate) {
-        if (!(itemView instanceof ExtendedOnCenterProximityListener)) {
-            return;
-        }
-        ExtendedOnCenterProximityListener item = (ExtendedOnCenterProximityListener) itemView;
-        if (isCentralItem) {
-            if (animate) {
-                mScalingDownAnimator.cancel();
-                if (!mScalingUpAnimator.isRunning()) {
-                    mScalingUpAnimator.setFloatValues(item.getCurrentProximityValue(),
-                            mMaxValue);
-                    mScalingUpAnimator.start();
-                }
-            } else {
-                mScalingUpAnimator.cancel();
-                item.setScalingAnimatorValue(item.getProximityMaxValue());
-            }
-        } else {
-            mScalingUpAnimator.cancel();
-            if (animate) {
-                if (!mScalingDownAnimator.isRunning()) {
-                    mScalingDownAnimator.setFloatValues(item.getCurrentProximityValue(),
-                            mMinValue);
-                    mScalingDownAnimator.start();
-                }
-            } else {
-                mScalingDownAnimator.cancel();
-                item.setScalingAnimatorValue(item.getProximityMinValue());
-            }
-        }
-        super.onCenterProximity(isCentralItem, animate);
-    }
-}
diff --git a/src/com/android/packageinstaller/permission/ui/wear/settings/PermissionsSettingsAdapter.java b/src/com/android/packageinstaller/permission/ui/wear/settings/PermissionsSettingsAdapter.java
deleted file mode 100644
index 0e0adcb..0000000
--- a/src/com/android/packageinstaller/permission/ui/wear/settings/PermissionsSettingsAdapter.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * 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.packageinstaller.permission.ui.wear.settings;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.support.wearable.view.WearableListView;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.TextView;
-
-import com.android.packageinstaller.R;
-import com.android.packageinstaller.permission.model.AppPermissionGroup;
-
-public final class PermissionsSettingsAdapter extends SettingsAdapter<AppPermissionGroup> {
-    private Resources mRes;
-
-    public PermissionsSettingsAdapter(Context context) {
-        super(context, R.layout.permissions_settings_item);
-        mRes = context.getResources();
-    }
-
-    @Override
-    public WearableListView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
-        return new PermissionsViewHolder(new PermissionsSettingsItem(parent.getContext()));
-    }
-
-    @Override
-    public void onBindViewHolder(WearableListView.ViewHolder holder, int position) {
-        super.onBindViewHolder(holder, position);
-        PermissionsViewHolder viewHolder = (PermissionsViewHolder) holder;
-        AppPermissionGroup group = get(position).data;
-
-        if (group.isPolicyFixed()) {
-            viewHolder.imageView.setEnabled(false);
-            viewHolder.textView.setEnabled(false);
-            viewHolder.state.setEnabled(false);
-            viewHolder.state.setText(
-                    mRes.getString(R.string.permission_summary_enforced_by_policy));
-        } else {
-            viewHolder.imageView.setEnabled(true);
-            viewHolder.textView.setEnabled(true);
-            viewHolder.state.setEnabled(true);
-
-            if (group.areRuntimePermissionsGranted()) {
-                viewHolder.state.setText(R.string.generic_enabled);
-            } else {
-                viewHolder.state.setText(R.string.generic_disabled);
-            }
-        }
-    }
-
-    private static final class PermissionsViewHolder extends SettingsAdapter.SettingsItemHolder {
-        public final TextView state;
-
-        public PermissionsViewHolder(View view) {
-            super(view);
-            state = (TextView) view.findViewById(R.id.state);
-        }
-    }
-
-    private class PermissionsSettingsItem extends SettingsItem {
-        private final TextView mState;
-        private final float mCenteredAlpha = 1.0f;
-        private final float mNonCenteredAlpha = 0.5f;
-
-        public PermissionsSettingsItem (Context context) {
-            super(context);
-            mState = (TextView) findViewById(R.id.state);
-        }
-
-        @Override
-        public void onCenterPosition(boolean animate) {
-            mImage.setAlpha(mImage.isEnabled() ? mCenteredAlpha : mNonCenteredAlpha);
-            mText.setAlpha(mText.isEnabled() ? mCenteredAlpha : mNonCenteredAlpha);
-            mState.setAlpha(mState.isEnabled() ? mCenteredAlpha : mNonCenteredAlpha);
-        }
-
-        @Override
-        public void onNonCenterPosition(boolean animate) {
-            mImage.setAlpha(mNonCenteredAlpha);
-            mText.setAlpha(mNonCenteredAlpha);
-            mState.setAlpha(mNonCenteredAlpha);
-        }
-    }
-}
-
diff --git a/src/com/android/packageinstaller/permission/ui/wear/settings/SettingsAdapter.java b/src/com/android/packageinstaller/permission/ui/wear/settings/SettingsAdapter.java
deleted file mode 100644
index baf1a2b..0000000
--- a/src/com/android/packageinstaller/permission/ui/wear/settings/SettingsAdapter.java
+++ /dev/null
@@ -1,276 +0,0 @@
-/*
- * 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.packageinstaller.permission.ui.wear.settings;
-
-import android.content.Context;
-import android.support.wearable.view.CircledImageView;
-import android.support.wearable.view.WearableListView;
-import android.util.Log;
-import android.view.Gravity;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.FrameLayout;
-import android.widget.TextView;
-
-import com.android.packageinstaller.R;
-
-import java.util.ArrayList;
-
-/**
- * Common adapter for settings views. Maintains a list of 'Settings', consisting of a name,
- * icon and optional activity-specific data.
- */
-public class SettingsAdapter<T> extends WearableListView.Adapter {
-    private static final String TAG = "SettingsAdapter";
-    private final Context mContext;
-
-    public static final class Setting<S> {
-        public static final int ID_INVALID = -1;
-
-        public final int id;
-        public int nameResourceId;
-        public CharSequence name;
-        public int iconResource;
-        public boolean inProgress;
-        public S data;
-
-        public Setting(CharSequence name, int iconResource, S data) {
-            this(name, iconResource, data, ID_INVALID);
-        }
-
-        public Setting(CharSequence name, int iconResource, S data, int id) {
-            this.name = name;
-            this.iconResource = iconResource;
-            this.data = data;
-            this.inProgress = false;
-            this.id = id;
-        }
-
-        public Setting(int nameResource, int iconResource, S data, int id) {
-            this.nameResourceId = nameResource;
-            this.iconResource = iconResource;
-            this.data = data;
-            this.inProgress = false;
-            this.id = id;
-        }
-
-        public Setting(int nameResource, int iconResource, int id) {
-            this.nameResourceId = nameResource;
-            this.iconResource = iconResource;
-            this.data = null;
-            this.inProgress = false;
-            this.id = id;
-        }
-
-        public Setting(CharSequence name, int iconResource, int id) {
-            this(name, iconResource, null, id);
-        }
-
-    }
-
-    private final int mItemLayoutId;
-    private final float mDefaultCircleRadiusPercent;
-    private final float mSelectedCircleRadiusPercent;
-
-    protected ArrayList<Setting<T>> mSettings = new ArrayList<Setting<T>>();
-
-    public SettingsAdapter(Context context, int itemLayoutId) {
-        mContext = context;
-        mItemLayoutId = itemLayoutId;
-        mDefaultCircleRadiusPercent = context.getResources().getFraction(
-                R.dimen.default_settings_circle_radius_percent, 1, 1);
-        mSelectedCircleRadiusPercent = context.getResources().getFraction(
-                R.dimen.selected_settings_circle_radius_percent, 1, 1);
-    }
-
-    @Override
-    public WearableListView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
-        return new SettingsItemHolder(new SettingsItem(parent.getContext()));
-    }
-
-    @Override
-    public void onBindViewHolder(WearableListView.ViewHolder holder, int position) {
-        Setting<T> setting = mSettings.get(position);
-        if (setting.iconResource == -1) {
-            ((SettingsItemHolder) holder).imageView.setVisibility(View.GONE);
-        } else {
-            ((SettingsItemHolder) holder).imageView.setVisibility(View.VISIBLE);
-            ((SettingsItemHolder) holder).imageView.setImageResource(
-                    mSettings.get(position).iconResource);
-        }
-        Log.d(TAG, "onBindViewHolder " + setting.name + " " + setting.id + " " + setting
-                .nameResourceId);
-        if (setting.name == null && setting.nameResourceId != 0) {
-            setting.name = mContext.getString(setting.nameResourceId);
-        }
-        ((SettingsItemHolder) holder).textView.setText(setting.name);
-    }
-
-    @Override
-    public int getItemCount() {
-        return mSettings.size();
-    }
-
-    public void addSetting(CharSequence name, int iconResource) {
-        addSetting(name, iconResource, null);
-    }
-
-    public void addSetting(CharSequence name, int iconResource, T intent) {
-        addSetting(mSettings.size(), name, iconResource, intent);
-    }
-
-    public void addSetting(int index, CharSequence name, int iconResource, T intent) {
-        addSetting(Setting.ID_INVALID, index, name, iconResource, intent);
-    }
-
-    public void addSetting(int id, int index, CharSequence name, int iconResource, T intent) {
-        mSettings.add(index, new Setting<T>(name, iconResource, intent, id));
-        notifyItemInserted(index);
-    }
-
-    public void addSettingDontNotify(Setting<T> setting) {
-        mSettings.add(setting);
-    }
-
-    public void addSetting(Setting<T> setting) {
-        mSettings.add(setting);
-        notifyItemInserted(mSettings.size() - 1);
-    }
-
-    public void addSetting(int index, Setting<T> setting) {
-        mSettings.add(index, setting);
-        notifyItemInserted(index);
-    }
-
-    /**
-     * Returns the index of the setting in the adapter based on the ID supplied when it was
-     * originally added.
-     * @param id the setting's id
-     * @return index in the adapter of the setting. -1 if not found.
-     */
-    public int findSetting(int id) {
-        for (int i = mSettings.size() - 1; i >= 0; --i) {
-            Setting setting = mSettings.get(i);
-
-            if (setting.id == id) {
-                return i;
-            }
-        }
-
-        return -1;
-    }
-
-    /**
-     * Removes a setting at the given index.
-     * @param index the index of the setting to be removed
-     */
-    public void removeSetting(int index) {
-        mSettings.remove(index);
-        notifyDataSetChanged();
-    }
-
-    public void clearSettings() {
-        mSettings.clear();
-        notifyDataSetChanged();
-    }
-
-    /**
-     * Updates a setting in place.
-     * @param index the index of the setting
-     * @param name the updated setting name
-     * @param iconResource the update setting icon
-     * @param intent the updated intent for the setting
-     */
-    public void updateSetting(int index, CharSequence name, int iconResource, T intent) {
-        Setting<T> setting = mSettings.get(index);
-        setting.iconResource = iconResource;
-        setting.name = name;
-        setting.data = intent;
-        notifyItemChanged(index);
-    }
-
-    public Setting<T> get(int position) {
-        return mSettings.get(position);
-    }
-
-    protected static class SettingsItemHolder extends ExtendedViewHolder {
-        public final CircledImageView imageView;
-        public final TextView textView;
-
-        public SettingsItemHolder(View itemView) {
-            super(itemView);
-
-            imageView = ((CircledImageView) itemView.findViewById(R.id.image));
-            textView = ((TextView) itemView.findViewById(R.id.text));
-        }
-    }
-
-    protected class SettingsItem extends FrameLayout implements ExtendedOnCenterProximityListener {
-
-        protected final CircledImageView mImage;
-        protected final TextView mText;
-
-        public SettingsItem(Context context) {
-            super(context);
-            View view = View.inflate(context, mItemLayoutId, null);
-            FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
-                    FrameLayout.LayoutParams.MATCH_PARENT,
-                    FrameLayout.LayoutParams.MATCH_PARENT);
-            params.gravity = Gravity.CENTER_VERTICAL;
-            addView(view, params);
-            mImage = (CircledImageView) findViewById(R.id.image);
-            mText = (TextView) findViewById(R.id.text);
-        }
-
-        @Override
-        public float getProximityMinValue() {
-            return mDefaultCircleRadiusPercent;
-        }
-
-        @Override
-        public float getProximityMaxValue() {
-            return mSelectedCircleRadiusPercent;
-        }
-
-        @Override
-        public float getCurrentProximityValue() {
-            return mImage.getCircleRadiusPressedPercent();
-        }
-
-        @Override
-        public void setScalingAnimatorValue(float value) {
-            mImage.setCircleRadiusPercent(value);
-            mImage.setCircleRadiusPressedPercent(value);
-        }
-
-        @Override
-        public void onCenterPosition(boolean animate) {
-            mImage.setAlpha(1f);
-            mText.setAlpha(1f);
-        }
-
-        @Override
-        public void onNonCenterPosition(boolean animate) {
-            mImage.setAlpha(0.5f);
-            mText.setAlpha(0.5f);
-        }
-
-        TextView getTextView() {
-            return mText;
-        }
-    }
-}
diff --git a/src/com/android/packageinstaller/permission/ui/wear/settings/ViewUtils.java b/src/com/android/packageinstaller/permission/ui/wear/settings/ViewUtils.java
deleted file mode 100644
index cf1c0fd..0000000
--- a/src/com/android/packageinstaller/permission/ui/wear/settings/ViewUtils.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * 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.packageinstaller.permission.ui.wear.settings;
-
-import android.content.Context;
-import android.view.View;
-import android.view.ViewGroup;
-
-/**
- * Utility to determine screen shape
- */
-public class ViewUtils {
-
-    public static boolean getIsCircular(Context context) {
-        return context.getResources().getConfiguration().isScreenRound();
-    }
-
-    /**
-     * Set the given {@code view} and all descendants to the given {@code enabled} state.
-     *
-     * @param view the parent view of a subtree of components whose enabled state must be set
-     * @param enabled the new enabled state of the subtree of components
-     */
-    public static void setEnabled(View view, boolean enabled) {
-        view.setEnabled(enabled);
-
-        if (view instanceof ViewGroup) {
-            final ViewGroup viewGroup = (ViewGroup) view;
-            for (int i = 0; i < viewGroup.getChildCount(); i++) {
-                setEnabled(viewGroup.getChildAt(i), enabled);
-            }
-        }
-    }
-}
