diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 7bf376a..d435731 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -2615,23 +2615,6 @@
         <activity android:name=".notification.NotificationAccessConfirmationActivity"
                   android:theme="@android:style/Theme.DeviceDefault.Light.Dialog.Alert" />
 
-        <receiver android:name=".widget.SettingsAppWidgetProvider"
-                android:label="@string/gadget_title"
-                android:exported="false"
-                android:enabled="@bool/has_powercontrol_widget">
-            <intent-filter>
-                <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
-                <action android:name="android.appwidget.action.APPWIDGET_ENABLED" />
-                <action android:name="android.appwidget.action.APPWIDGET_DISABLED" />
-                <action android:name="android.net.wifi.WIFI_STATE_CHANGED" />
-                <action android:name="android.net.conn.BACKGROUND_DATA_SETTING_CHANGED" />
-                <action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
-                <action android:name="android.location.MODE_CHANGED" />
-                <action android:name="com.android.sync.SYNC_CONN_STATUS_CHANGED" />
-            </intent-filter>
-            <meta-data android:name="android.appwidget.provider" android:resource="@xml/appwidget_info" />
-        </receiver>
-
         <receiver android:name="com.android.settingslib.bluetooth.BluetoothDiscoverableTimeoutReceiver">
             <intent-filter>
                 <action android:name="android.bluetooth.intent.DISCOVERABLE_TIMEOUT" />
diff --git a/res/drawable-hdpi/appwidget_bg_holo.9.png b/res/drawable-hdpi/appwidget_bg_holo.9.png
deleted file mode 100644
index 9dc01d7..0000000
--- a/res/drawable-hdpi/appwidget_bg_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/appwidget_inner_focused_c_holo.9.png b/res/drawable-hdpi/appwidget_inner_focused_c_holo.9.png
deleted file mode 100644
index 47f7af0..0000000
--- a/res/drawable-hdpi/appwidget_inner_focused_c_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/appwidget_inner_focused_l_holo.9.png b/res/drawable-hdpi/appwidget_inner_focused_l_holo.9.png
deleted file mode 100644
index 4eae69c..0000000
--- a/res/drawable-hdpi/appwidget_inner_focused_l_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/appwidget_inner_focused_r_holo.9.png b/res/drawable-hdpi/appwidget_inner_focused_r_holo.9.png
deleted file mode 100644
index 598ae03..0000000
--- a/res/drawable-hdpi/appwidget_inner_focused_r_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/appwidget_inner_pressed_c_holo.9.png b/res/drawable-hdpi/appwidget_inner_pressed_c_holo.9.png
deleted file mode 100644
index 056ee4a..0000000
--- a/res/drawable-hdpi/appwidget_inner_pressed_c_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/appwidget_inner_pressed_l_holo.9.png b/res/drawable-hdpi/appwidget_inner_pressed_l_holo.9.png
deleted file mode 100644
index 2cb3a54..0000000
--- a/res/drawable-hdpi/appwidget_inner_pressed_l_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/appwidget_inner_pressed_r_holo.9.png b/res/drawable-hdpi/appwidget_inner_pressed_r_holo.9.png
deleted file mode 100644
index 034b994..0000000
--- a/res/drawable-hdpi/appwidget_inner_pressed_r_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/appwidget_settings_divider_holo.9.png b/res/drawable-hdpi/appwidget_settings_divider_holo.9.png
deleted file mode 100644
index cfe0f3b..0000000
--- a/res/drawable-hdpi/appwidget_settings_divider_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/appwidget_settings_ind_mid_c_holo.9.png b/res/drawable-hdpi/appwidget_settings_ind_mid_c_holo.9.png
deleted file mode 100644
index 60c0da4..0000000
--- a/res/drawable-hdpi/appwidget_settings_ind_mid_c_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/appwidget_settings_ind_mid_l_holo.9.png b/res/drawable-hdpi/appwidget_settings_ind_mid_l_holo.9.png
deleted file mode 100644
index 7cedcd5..0000000
--- a/res/drawable-hdpi/appwidget_settings_ind_mid_l_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/appwidget_settings_ind_mid_r_holo.9.png b/res/drawable-hdpi/appwidget_settings_ind_mid_r_holo.9.png
deleted file mode 100644
index 19f08b4..0000000
--- a/res/drawable-hdpi/appwidget_settings_ind_mid_r_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/appwidget_settings_ind_off_c_holo.9.png b/res/drawable-hdpi/appwidget_settings_ind_off_c_holo.9.png
deleted file mode 100644
index d4d4688..0000000
--- a/res/drawable-hdpi/appwidget_settings_ind_off_c_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/appwidget_settings_ind_off_l_holo.9.png b/res/drawable-hdpi/appwidget_settings_ind_off_l_holo.9.png
deleted file mode 100644
index d06dc98..0000000
--- a/res/drawable-hdpi/appwidget_settings_ind_off_l_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/appwidget_settings_ind_off_r_holo.9.png b/res/drawable-hdpi/appwidget_settings_ind_off_r_holo.9.png
deleted file mode 100644
index d287c8e..0000000
--- a/res/drawable-hdpi/appwidget_settings_ind_off_r_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/appwidget_settings_ind_on_c_holo.9.png b/res/drawable-hdpi/appwidget_settings_ind_on_c_holo.9.png
deleted file mode 100644
index d37af4e..0000000
--- a/res/drawable-hdpi/appwidget_settings_ind_on_c_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/appwidget_settings_ind_on_l_holo.9.png b/res/drawable-hdpi/appwidget_settings_ind_on_l_holo.9.png
deleted file mode 100644
index 60dac8b..0000000
--- a/res/drawable-hdpi/appwidget_settings_ind_on_l_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/appwidget_settings_ind_on_r_holo.9.png b/res/drawable-hdpi/appwidget_settings_ind_on_r_holo.9.png
deleted file mode 100644
index d68a538..0000000
--- a/res/drawable-hdpi/appwidget_settings_ind_on_r_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_appwidget_settings_bluetooth_off_holo.png b/res/drawable-hdpi/ic_appwidget_settings_bluetooth_off_holo.png
deleted file mode 100644
index 1dd1a931..0000000
--- a/res/drawable-hdpi/ic_appwidget_settings_bluetooth_off_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_appwidget_settings_bluetooth_on_holo.png b/res/drawable-hdpi/ic_appwidget_settings_bluetooth_on_holo.png
deleted file mode 100644
index 86d5fa0..0000000
--- a/res/drawable-hdpi/ic_appwidget_settings_bluetooth_on_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_appwidget_settings_brightness_auto_holo.png b/res/drawable-hdpi/ic_appwidget_settings_brightness_auto_holo.png
deleted file mode 100644
index 5f4a87a..0000000
--- a/res/drawable-hdpi/ic_appwidget_settings_brightness_auto_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_appwidget_settings_brightness_full_holo.png b/res/drawable-hdpi/ic_appwidget_settings_brightness_full_holo.png
deleted file mode 100644
index abbe883..0000000
--- a/res/drawable-hdpi/ic_appwidget_settings_brightness_full_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_appwidget_settings_brightness_half_holo.png b/res/drawable-hdpi/ic_appwidget_settings_brightness_half_holo.png
deleted file mode 100644
index 6217e55..0000000
--- a/res/drawable-hdpi/ic_appwidget_settings_brightness_half_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_appwidget_settings_brightness_off_holo.png b/res/drawable-hdpi/ic_appwidget_settings_brightness_off_holo.png
deleted file mode 100644
index 877454d..0000000
--- a/res/drawable-hdpi/ic_appwidget_settings_brightness_off_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_appwidget_settings_location_off_holo.png b/res/drawable-hdpi/ic_appwidget_settings_location_off_holo.png
deleted file mode 100644
index 58fd997..0000000
--- a/res/drawable-hdpi/ic_appwidget_settings_location_off_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_appwidget_settings_location_on_holo.png b/res/drawable-hdpi/ic_appwidget_settings_location_on_holo.png
deleted file mode 100644
index b1ce371..0000000
--- a/res/drawable-hdpi/ic_appwidget_settings_location_on_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_appwidget_settings_location_saving_holo.png b/res/drawable-hdpi/ic_appwidget_settings_location_saving_holo.png
deleted file mode 100644
index e1fe786..0000000
--- a/res/drawable-hdpi/ic_appwidget_settings_location_saving_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_appwidget_settings_sync_off_holo.png b/res/drawable-hdpi/ic_appwidget_settings_sync_off_holo.png
deleted file mode 100644
index c31ef00..0000000
--- a/res/drawable-hdpi/ic_appwidget_settings_sync_off_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_appwidget_settings_sync_on_holo.png b/res/drawable-hdpi/ic_appwidget_settings_sync_on_holo.png
deleted file mode 100644
index 2f47235..0000000
--- a/res/drawable-hdpi/ic_appwidget_settings_sync_on_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_appwidget_settings_wifi_off_holo.png b/res/drawable-hdpi/ic_appwidget_settings_wifi_off_holo.png
deleted file mode 100644
index aa6cf26..0000000
--- a/res/drawable-hdpi/ic_appwidget_settings_wifi_off_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_appwidget_settings_wifi_on_holo.png b/res/drawable-hdpi/ic_appwidget_settings_wifi_on_holo.png
deleted file mode 100644
index 64c3992..0000000
--- a/res/drawable-hdpi/ic_appwidget_settings_wifi_on_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_appwidget_settings_brightness_half_holo.png b/res/drawable-ldrtl-hdpi/ic_appwidget_settings_brightness_half_holo.png
deleted file mode 100644
index 9d8b24a..0000000
--- a/res/drawable-ldrtl-hdpi/ic_appwidget_settings_brightness_half_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_appwidget_settings_brightness_half_holo.png b/res/drawable-ldrtl-mdpi/ic_appwidget_settings_brightness_half_holo.png
deleted file mode 100644
index 90941e4..0000000
--- a/res/drawable-ldrtl-mdpi/ic_appwidget_settings_brightness_half_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_appwidget_settings_brightness_half_holo.png b/res/drawable-ldrtl-xhdpi/ic_appwidget_settings_brightness_half_holo.png
deleted file mode 100644
index b06324e..0000000
--- a/res/drawable-ldrtl-xhdpi/ic_appwidget_settings_brightness_half_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/appwidget_bg_holo.9.png b/res/drawable-mdpi/appwidget_bg_holo.9.png
deleted file mode 100644
index cdfa203..0000000
--- a/res/drawable-mdpi/appwidget_bg_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/appwidget_inner_focused_c_holo.9.png b/res/drawable-mdpi/appwidget_inner_focused_c_holo.9.png
deleted file mode 100644
index 45332bd..0000000
--- a/res/drawable-mdpi/appwidget_inner_focused_c_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/appwidget_inner_focused_l_holo.9.png b/res/drawable-mdpi/appwidget_inner_focused_l_holo.9.png
deleted file mode 100644
index 36605a6..0000000
--- a/res/drawable-mdpi/appwidget_inner_focused_l_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/appwidget_inner_focused_r_holo.9.png b/res/drawable-mdpi/appwidget_inner_focused_r_holo.9.png
deleted file mode 100644
index 70fd6bd..0000000
--- a/res/drawable-mdpi/appwidget_inner_focused_r_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/appwidget_inner_pressed_c_holo.9.png b/res/drawable-mdpi/appwidget_inner_pressed_c_holo.9.png
deleted file mode 100644
index b717279..0000000
--- a/res/drawable-mdpi/appwidget_inner_pressed_c_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/appwidget_inner_pressed_l_holo.9.png b/res/drawable-mdpi/appwidget_inner_pressed_l_holo.9.png
deleted file mode 100644
index 45a0175..0000000
--- a/res/drawable-mdpi/appwidget_inner_pressed_l_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/appwidget_inner_pressed_r_holo.9.png b/res/drawable-mdpi/appwidget_inner_pressed_r_holo.9.png
deleted file mode 100644
index f06d3c3..0000000
--- a/res/drawable-mdpi/appwidget_inner_pressed_r_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/appwidget_settings_divider_holo.9.png b/res/drawable-mdpi/appwidget_settings_divider_holo.9.png
deleted file mode 100644
index 27e35a3..0000000
--- a/res/drawable-mdpi/appwidget_settings_divider_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/appwidget_settings_ind_mid_c_holo.9.png b/res/drawable-mdpi/appwidget_settings_ind_mid_c_holo.9.png
deleted file mode 100644
index 22aedaa..0000000
--- a/res/drawable-mdpi/appwidget_settings_ind_mid_c_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/appwidget_settings_ind_mid_l_holo.9.png b/res/drawable-mdpi/appwidget_settings_ind_mid_l_holo.9.png
deleted file mode 100644
index f71c3c3..0000000
--- a/res/drawable-mdpi/appwidget_settings_ind_mid_l_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/appwidget_settings_ind_mid_r_holo.9.png b/res/drawable-mdpi/appwidget_settings_ind_mid_r_holo.9.png
deleted file mode 100644
index 3621791..0000000
--- a/res/drawable-mdpi/appwidget_settings_ind_mid_r_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/appwidget_settings_ind_off_c_holo.9.png b/res/drawable-mdpi/appwidget_settings_ind_off_c_holo.9.png
deleted file mode 100644
index 80b3d3c..0000000
--- a/res/drawable-mdpi/appwidget_settings_ind_off_c_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/appwidget_settings_ind_off_l_holo.9.png b/res/drawable-mdpi/appwidget_settings_ind_off_l_holo.9.png
deleted file mode 100644
index 30c05d9..0000000
--- a/res/drawable-mdpi/appwidget_settings_ind_off_l_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/appwidget_settings_ind_off_r_holo.9.png b/res/drawable-mdpi/appwidget_settings_ind_off_r_holo.9.png
deleted file mode 100644
index 7253365..0000000
--- a/res/drawable-mdpi/appwidget_settings_ind_off_r_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/appwidget_settings_ind_on_c_holo.9.png b/res/drawable-mdpi/appwidget_settings_ind_on_c_holo.9.png
deleted file mode 100644
index c9d9f7e..0000000
--- a/res/drawable-mdpi/appwidget_settings_ind_on_c_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/appwidget_settings_ind_on_l_holo.9.png b/res/drawable-mdpi/appwidget_settings_ind_on_l_holo.9.png
deleted file mode 100644
index 5c0a157..0000000
--- a/res/drawable-mdpi/appwidget_settings_ind_on_l_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/appwidget_settings_ind_on_r_holo.9.png b/res/drawable-mdpi/appwidget_settings_ind_on_r_holo.9.png
deleted file mode 100644
index 48bf90d..0000000
--- a/res/drawable-mdpi/appwidget_settings_ind_on_r_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_appwidget_settings_bluetooth_off_holo.png b/res/drawable-mdpi/ic_appwidget_settings_bluetooth_off_holo.png
deleted file mode 100644
index 8f30b90..0000000
--- a/res/drawable-mdpi/ic_appwidget_settings_bluetooth_off_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_appwidget_settings_bluetooth_on_holo.png b/res/drawable-mdpi/ic_appwidget_settings_bluetooth_on_holo.png
deleted file mode 100644
index f921eb9..0000000
--- a/res/drawable-mdpi/ic_appwidget_settings_bluetooth_on_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_appwidget_settings_brightness_auto_holo.png b/res/drawable-mdpi/ic_appwidget_settings_brightness_auto_holo.png
deleted file mode 100644
index b726c17..0000000
--- a/res/drawable-mdpi/ic_appwidget_settings_brightness_auto_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_appwidget_settings_brightness_full_holo.png b/res/drawable-mdpi/ic_appwidget_settings_brightness_full_holo.png
deleted file mode 100644
index 82b0101..0000000
--- a/res/drawable-mdpi/ic_appwidget_settings_brightness_full_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_appwidget_settings_brightness_half_holo.png b/res/drawable-mdpi/ic_appwidget_settings_brightness_half_holo.png
deleted file mode 100644
index ad6f15e..0000000
--- a/res/drawable-mdpi/ic_appwidget_settings_brightness_half_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_appwidget_settings_brightness_off_holo.png b/res/drawable-mdpi/ic_appwidget_settings_brightness_off_holo.png
deleted file mode 100644
index 20a6fcf..0000000
--- a/res/drawable-mdpi/ic_appwidget_settings_brightness_off_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_appwidget_settings_location_off_holo.png b/res/drawable-mdpi/ic_appwidget_settings_location_off_holo.png
deleted file mode 100644
index 15bb918..0000000
--- a/res/drawable-mdpi/ic_appwidget_settings_location_off_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_appwidget_settings_location_on_holo.png b/res/drawable-mdpi/ic_appwidget_settings_location_on_holo.png
deleted file mode 100644
index a7bca04..0000000
--- a/res/drawable-mdpi/ic_appwidget_settings_location_on_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_appwidget_settings_location_saving_holo.png b/res/drawable-mdpi/ic_appwidget_settings_location_saving_holo.png
deleted file mode 100644
index dec6059..0000000
--- a/res/drawable-mdpi/ic_appwidget_settings_location_saving_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_appwidget_settings_sync_off_holo.png b/res/drawable-mdpi/ic_appwidget_settings_sync_off_holo.png
deleted file mode 100644
index 4fe5573..0000000
--- a/res/drawable-mdpi/ic_appwidget_settings_sync_off_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_appwidget_settings_sync_on_holo.png b/res/drawable-mdpi/ic_appwidget_settings_sync_on_holo.png
deleted file mode 100644
index fa37c63..0000000
--- a/res/drawable-mdpi/ic_appwidget_settings_sync_on_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_appwidget_settings_wifi_off_holo.png b/res/drawable-mdpi/ic_appwidget_settings_wifi_off_holo.png
deleted file mode 100644
index b10cd36..0000000
--- a/res/drawable-mdpi/ic_appwidget_settings_wifi_off_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_appwidget_settings_wifi_on_holo.png b/res/drawable-mdpi/ic_appwidget_settings_wifi_on_holo.png
deleted file mode 100644
index 7a56cf2..0000000
--- a/res/drawable-mdpi/ic_appwidget_settings_wifi_on_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-nodpi/preview.png b/res/drawable-nodpi/preview.png
deleted file mode 100644
index 0ffb700..0000000
--- a/res/drawable-nodpi/preview.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/appwidget_bg_holo.9.png b/res/drawable-xhdpi/appwidget_bg_holo.9.png
deleted file mode 100644
index 454e84a..0000000
--- a/res/drawable-xhdpi/appwidget_bg_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/appwidget_inner_focused_c_holo.9.png b/res/drawable-xhdpi/appwidget_inner_focused_c_holo.9.png
deleted file mode 100644
index 5aafacd..0000000
--- a/res/drawable-xhdpi/appwidget_inner_focused_c_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/appwidget_inner_focused_l_holo.9.png b/res/drawable-xhdpi/appwidget_inner_focused_l_holo.9.png
deleted file mode 100644
index 3161a7a..0000000
--- a/res/drawable-xhdpi/appwidget_inner_focused_l_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/appwidget_inner_focused_r_holo.9.png b/res/drawable-xhdpi/appwidget_inner_focused_r_holo.9.png
deleted file mode 100644
index 5e7968a..0000000
--- a/res/drawable-xhdpi/appwidget_inner_focused_r_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/appwidget_inner_pressed_c_holo.9.png b/res/drawable-xhdpi/appwidget_inner_pressed_c_holo.9.png
deleted file mode 100644
index de40bd0..0000000
--- a/res/drawable-xhdpi/appwidget_inner_pressed_c_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/appwidget_inner_pressed_l_holo.9.png b/res/drawable-xhdpi/appwidget_inner_pressed_l_holo.9.png
deleted file mode 100644
index 1802d9a..0000000
--- a/res/drawable-xhdpi/appwidget_inner_pressed_l_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/appwidget_inner_pressed_r_holo.9.png b/res/drawable-xhdpi/appwidget_inner_pressed_r_holo.9.png
deleted file mode 100644
index d5971c2..0000000
--- a/res/drawable-xhdpi/appwidget_inner_pressed_r_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/appwidget_settings_divider_holo.9.png b/res/drawable-xhdpi/appwidget_settings_divider_holo.9.png
deleted file mode 100644
index 940c1ed..0000000
--- a/res/drawable-xhdpi/appwidget_settings_divider_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/appwidget_settings_ind_mid_c_holo.9.png b/res/drawable-xhdpi/appwidget_settings_ind_mid_c_holo.9.png
deleted file mode 100644
index 12fbb33..0000000
--- a/res/drawable-xhdpi/appwidget_settings_ind_mid_c_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/appwidget_settings_ind_mid_l_holo.9.png b/res/drawable-xhdpi/appwidget_settings_ind_mid_l_holo.9.png
deleted file mode 100644
index 76677ee..0000000
--- a/res/drawable-xhdpi/appwidget_settings_ind_mid_l_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/appwidget_settings_ind_mid_r_holo.9.png b/res/drawable-xhdpi/appwidget_settings_ind_mid_r_holo.9.png
deleted file mode 100644
index 3a32944..0000000
--- a/res/drawable-xhdpi/appwidget_settings_ind_mid_r_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/appwidget_settings_ind_off_c_holo.9.png b/res/drawable-xhdpi/appwidget_settings_ind_off_c_holo.9.png
deleted file mode 100644
index ed8f93e..0000000
--- a/res/drawable-xhdpi/appwidget_settings_ind_off_c_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/appwidget_settings_ind_off_l_holo.9.png b/res/drawable-xhdpi/appwidget_settings_ind_off_l_holo.9.png
deleted file mode 100644
index 706af0b..0000000
--- a/res/drawable-xhdpi/appwidget_settings_ind_off_l_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/appwidget_settings_ind_off_r_holo.9.png b/res/drawable-xhdpi/appwidget_settings_ind_off_r_holo.9.png
deleted file mode 100644
index 5f24769..0000000
--- a/res/drawable-xhdpi/appwidget_settings_ind_off_r_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/appwidget_settings_ind_on_c_holo.9.png b/res/drawable-xhdpi/appwidget_settings_ind_on_c_holo.9.png
deleted file mode 100644
index 94f1068..0000000
--- a/res/drawable-xhdpi/appwidget_settings_ind_on_c_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/appwidget_settings_ind_on_l_holo.9.png b/res/drawable-xhdpi/appwidget_settings_ind_on_l_holo.9.png
deleted file mode 100644
index e9b5749..0000000
--- a/res/drawable-xhdpi/appwidget_settings_ind_on_l_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/appwidget_settings_ind_on_r_holo.9.png b/res/drawable-xhdpi/appwidget_settings_ind_on_r_holo.9.png
deleted file mode 100644
index be6b9ff..0000000
--- a/res/drawable-xhdpi/appwidget_settings_ind_on_r_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_appwidget_settings_bluetooth_off_holo.png b/res/drawable-xhdpi/ic_appwidget_settings_bluetooth_off_holo.png
deleted file mode 100644
index 4c1fa33..0000000
--- a/res/drawable-xhdpi/ic_appwidget_settings_bluetooth_off_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_appwidget_settings_bluetooth_on_holo.png b/res/drawable-xhdpi/ic_appwidget_settings_bluetooth_on_holo.png
deleted file mode 100644
index 7e2ac3a..0000000
--- a/res/drawable-xhdpi/ic_appwidget_settings_bluetooth_on_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_appwidget_settings_brightness_auto_holo.png b/res/drawable-xhdpi/ic_appwidget_settings_brightness_auto_holo.png
deleted file mode 100644
index eab788f..0000000
--- a/res/drawable-xhdpi/ic_appwidget_settings_brightness_auto_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_appwidget_settings_brightness_full_holo.png b/res/drawable-xhdpi/ic_appwidget_settings_brightness_full_holo.png
deleted file mode 100644
index 9b60097..0000000
--- a/res/drawable-xhdpi/ic_appwidget_settings_brightness_full_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_appwidget_settings_brightness_half_holo.png b/res/drawable-xhdpi/ic_appwidget_settings_brightness_half_holo.png
deleted file mode 100644
index 39f069b..0000000
--- a/res/drawable-xhdpi/ic_appwidget_settings_brightness_half_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_appwidget_settings_brightness_off_holo.png b/res/drawable-xhdpi/ic_appwidget_settings_brightness_off_holo.png
deleted file mode 100644
index a941265..0000000
--- a/res/drawable-xhdpi/ic_appwidget_settings_brightness_off_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_appwidget_settings_location_off_holo.png b/res/drawable-xhdpi/ic_appwidget_settings_location_off_holo.png
deleted file mode 100644
index e1a600c..0000000
--- a/res/drawable-xhdpi/ic_appwidget_settings_location_off_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_appwidget_settings_location_on_holo.png b/res/drawable-xhdpi/ic_appwidget_settings_location_on_holo.png
deleted file mode 100644
index 982573a..0000000
--- a/res/drawable-xhdpi/ic_appwidget_settings_location_on_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_appwidget_settings_location_saving_holo.png b/res/drawable-xhdpi/ic_appwidget_settings_location_saving_holo.png
deleted file mode 100644
index c62edce..0000000
--- a/res/drawable-xhdpi/ic_appwidget_settings_location_saving_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_appwidget_settings_sync_off_holo.png b/res/drawable-xhdpi/ic_appwidget_settings_sync_off_holo.png
deleted file mode 100644
index 18c7d3a..0000000
--- a/res/drawable-xhdpi/ic_appwidget_settings_sync_off_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_appwidget_settings_sync_on_holo.png b/res/drawable-xhdpi/ic_appwidget_settings_sync_on_holo.png
deleted file mode 100644
index c9f3878..0000000
--- a/res/drawable-xhdpi/ic_appwidget_settings_sync_on_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_appwidget_settings_wifi_off_holo.png b/res/drawable-xhdpi/ic_appwidget_settings_wifi_off_holo.png
deleted file mode 100644
index ab7bc0a..0000000
--- a/res/drawable-xhdpi/ic_appwidget_settings_wifi_off_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_appwidget_settings_wifi_on_holo.png b/res/drawable-xhdpi/ic_appwidget_settings_wifi_on_holo.png
deleted file mode 100644
index 596ce06..0000000
--- a/res/drawable-xhdpi/ic_appwidget_settings_wifi_on_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/appwidget_bg_holo.9.png b/res/drawable-xxhdpi/appwidget_bg_holo.9.png
deleted file mode 100644
index 3fb2598..0000000
--- a/res/drawable-xxhdpi/appwidget_bg_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/appwidget_inner_focused_c_holo.9.png b/res/drawable-xxhdpi/appwidget_inner_focused_c_holo.9.png
deleted file mode 100644
index 7f64682..0000000
--- a/res/drawable-xxhdpi/appwidget_inner_focused_c_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/appwidget_inner_focused_l_holo.9.png b/res/drawable-xxhdpi/appwidget_inner_focused_l_holo.9.png
deleted file mode 100644
index 0606b4d..0000000
--- a/res/drawable-xxhdpi/appwidget_inner_focused_l_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/appwidget_inner_focused_r_holo.9.png b/res/drawable-xxhdpi/appwidget_inner_focused_r_holo.9.png
deleted file mode 100644
index cb27941..0000000
--- a/res/drawable-xxhdpi/appwidget_inner_focused_r_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/appwidget_inner_pressed_c_holo.9.png b/res/drawable-xxhdpi/appwidget_inner_pressed_c_holo.9.png
deleted file mode 100644
index 7b37e25..0000000
--- a/res/drawable-xxhdpi/appwidget_inner_pressed_c_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/appwidget_inner_pressed_l_holo.9.png b/res/drawable-xxhdpi/appwidget_inner_pressed_l_holo.9.png
deleted file mode 100644
index ab37d2d..0000000
--- a/res/drawable-xxhdpi/appwidget_inner_pressed_l_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/appwidget_inner_pressed_r_holo.9.png b/res/drawable-xxhdpi/appwidget_inner_pressed_r_holo.9.png
deleted file mode 100644
index 820d2b0..0000000
--- a/res/drawable-xxhdpi/appwidget_inner_pressed_r_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/appwidget_settings_divider_holo.9.png b/res/drawable-xxhdpi/appwidget_settings_divider_holo.9.png
deleted file mode 100644
index 0b46314..0000000
--- a/res/drawable-xxhdpi/appwidget_settings_divider_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/appwidget_settings_ind_mid_c_holo.9.png b/res/drawable-xxhdpi/appwidget_settings_ind_mid_c_holo.9.png
deleted file mode 100644
index a55d364..0000000
--- a/res/drawable-xxhdpi/appwidget_settings_ind_mid_c_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/appwidget_settings_ind_mid_l_holo.9.png b/res/drawable-xxhdpi/appwidget_settings_ind_mid_l_holo.9.png
deleted file mode 100644
index e7d8c3b..0000000
--- a/res/drawable-xxhdpi/appwidget_settings_ind_mid_l_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/appwidget_settings_ind_mid_r_holo.9.png b/res/drawable-xxhdpi/appwidget_settings_ind_mid_r_holo.9.png
deleted file mode 100644
index cabc30a..0000000
--- a/res/drawable-xxhdpi/appwidget_settings_ind_mid_r_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/appwidget_settings_ind_off_c_holo.9.png b/res/drawable-xxhdpi/appwidget_settings_ind_off_c_holo.9.png
deleted file mode 100644
index a6a0e30..0000000
--- a/res/drawable-xxhdpi/appwidget_settings_ind_off_c_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/appwidget_settings_ind_off_l_holo.9.png b/res/drawable-xxhdpi/appwidget_settings_ind_off_l_holo.9.png
deleted file mode 100644
index 8a20e01..0000000
--- a/res/drawable-xxhdpi/appwidget_settings_ind_off_l_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/appwidget_settings_ind_off_r_holo.9.png b/res/drawable-xxhdpi/appwidget_settings_ind_off_r_holo.9.png
deleted file mode 100644
index 2388b27..0000000
--- a/res/drawable-xxhdpi/appwidget_settings_ind_off_r_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/appwidget_settings_ind_on_c_holo.9.png b/res/drawable-xxhdpi/appwidget_settings_ind_on_c_holo.9.png
deleted file mode 100644
index 3663f0a..0000000
--- a/res/drawable-xxhdpi/appwidget_settings_ind_on_c_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/appwidget_settings_ind_on_l_holo.9.png b/res/drawable-xxhdpi/appwidget_settings_ind_on_l_holo.9.png
deleted file mode 100644
index 745f198..0000000
--- a/res/drawable-xxhdpi/appwidget_settings_ind_on_l_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/appwidget_settings_ind_on_r_holo.9.png b/res/drawable-xxhdpi/appwidget_settings_ind_on_r_holo.9.png
deleted file mode 100644
index 5b2c64e..0000000
--- a/res/drawable-xxhdpi/appwidget_settings_ind_on_r_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_appwidget_settings_bluetooth_off_holo.png b/res/drawable-xxhdpi/ic_appwidget_settings_bluetooth_off_holo.png
deleted file mode 100644
index e77786f..0000000
--- a/res/drawable-xxhdpi/ic_appwidget_settings_bluetooth_off_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_appwidget_settings_bluetooth_on_holo.png b/res/drawable-xxhdpi/ic_appwidget_settings_bluetooth_on_holo.png
deleted file mode 100644
index e56ed35..0000000
--- a/res/drawable-xxhdpi/ic_appwidget_settings_bluetooth_on_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_appwidget_settings_brightness_auto_holo.png b/res/drawable-xxhdpi/ic_appwidget_settings_brightness_auto_holo.png
deleted file mode 100644
index 9cce06f..0000000
--- a/res/drawable-xxhdpi/ic_appwidget_settings_brightness_auto_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_appwidget_settings_brightness_full_holo.png b/res/drawable-xxhdpi/ic_appwidget_settings_brightness_full_holo.png
deleted file mode 100644
index 0a709a9..0000000
--- a/res/drawable-xxhdpi/ic_appwidget_settings_brightness_full_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_appwidget_settings_brightness_half_holo.png b/res/drawable-xxhdpi/ic_appwidget_settings_brightness_half_holo.png
deleted file mode 100644
index ddd8108..0000000
--- a/res/drawable-xxhdpi/ic_appwidget_settings_brightness_half_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_appwidget_settings_brightness_off_holo.png b/res/drawable-xxhdpi/ic_appwidget_settings_brightness_off_holo.png
deleted file mode 100644
index 02ed6e7..0000000
--- a/res/drawable-xxhdpi/ic_appwidget_settings_brightness_off_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_appwidget_settings_location_off_holo.png b/res/drawable-xxhdpi/ic_appwidget_settings_location_off_holo.png
deleted file mode 100644
index ce1797c..0000000
--- a/res/drawable-xxhdpi/ic_appwidget_settings_location_off_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_appwidget_settings_location_on_holo.png b/res/drawable-xxhdpi/ic_appwidget_settings_location_on_holo.png
deleted file mode 100644
index ab45286..0000000
--- a/res/drawable-xxhdpi/ic_appwidget_settings_location_on_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_appwidget_settings_location_saving_holo.png b/res/drawable-xxhdpi/ic_appwidget_settings_location_saving_holo.png
deleted file mode 100644
index 6268610..0000000
--- a/res/drawable-xxhdpi/ic_appwidget_settings_location_saving_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_appwidget_settings_sync_off_holo.png b/res/drawable-xxhdpi/ic_appwidget_settings_sync_off_holo.png
deleted file mode 100644
index 88e0871..0000000
--- a/res/drawable-xxhdpi/ic_appwidget_settings_sync_off_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_appwidget_settings_sync_on_holo.png b/res/drawable-xxhdpi/ic_appwidget_settings_sync_on_holo.png
deleted file mode 100644
index 56ebba1..0000000
--- a/res/drawable-xxhdpi/ic_appwidget_settings_sync_on_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_appwidget_settings_wifi_off_holo.png b/res/drawable-xxhdpi/ic_appwidget_settings_wifi_off_holo.png
deleted file mode 100644
index 1fb8019..0000000
--- a/res/drawable-xxhdpi/ic_appwidget_settings_wifi_off_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_appwidget_settings_wifi_on_holo.png b/res/drawable-xxhdpi/ic_appwidget_settings_wifi_on_holo.png
deleted file mode 100644
index 128c561..0000000
--- a/res/drawable-xxhdpi/ic_appwidget_settings_wifi_on_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/appwidget_bg_holo.9.png b/res/drawable-xxxhdpi/appwidget_bg_holo.9.png
deleted file mode 100644
index 39b88d9..0000000
--- a/res/drawable-xxxhdpi/appwidget_bg_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/appwidget_inner_focused_c_holo.9.png b/res/drawable-xxxhdpi/appwidget_inner_focused_c_holo.9.png
deleted file mode 100644
index 4eee026..0000000
--- a/res/drawable-xxxhdpi/appwidget_inner_focused_c_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/appwidget_inner_focused_l_holo.9.png b/res/drawable-xxxhdpi/appwidget_inner_focused_l_holo.9.png
deleted file mode 100644
index 6af3bff..0000000
--- a/res/drawable-xxxhdpi/appwidget_inner_focused_l_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/appwidget_inner_focused_r_holo.9.png b/res/drawable-xxxhdpi/appwidget_inner_focused_r_holo.9.png
deleted file mode 100644
index ac337c7..0000000
--- a/res/drawable-xxxhdpi/appwidget_inner_focused_r_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/appwidget_inner_pressed_c_holo.9.png b/res/drawable-xxxhdpi/appwidget_inner_pressed_c_holo.9.png
deleted file mode 100644
index 10289ea..0000000
--- a/res/drawable-xxxhdpi/appwidget_inner_pressed_c_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/appwidget_inner_pressed_l_holo.9.png b/res/drawable-xxxhdpi/appwidget_inner_pressed_l_holo.9.png
deleted file mode 100644
index 00da8e9..0000000
--- a/res/drawable-xxxhdpi/appwidget_inner_pressed_l_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/appwidget_inner_pressed_r_holo.9.png b/res/drawable-xxxhdpi/appwidget_inner_pressed_r_holo.9.png
deleted file mode 100644
index 7c94a7c..0000000
--- a/res/drawable-xxxhdpi/appwidget_inner_pressed_r_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/appwidget_settings_divider_holo.9.png b/res/drawable-xxxhdpi/appwidget_settings_divider_holo.9.png
deleted file mode 100644
index f7ad910..0000000
--- a/res/drawable-xxxhdpi/appwidget_settings_divider_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/appwidget_settings_ind_mid_c_holo.9.png b/res/drawable-xxxhdpi/appwidget_settings_ind_mid_c_holo.9.png
deleted file mode 100644
index 08b1faf..0000000
--- a/res/drawable-xxxhdpi/appwidget_settings_ind_mid_c_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/appwidget_settings_ind_mid_l_holo.9.png b/res/drawable-xxxhdpi/appwidget_settings_ind_mid_l_holo.9.png
deleted file mode 100644
index 25d80b2..0000000
--- a/res/drawable-xxxhdpi/appwidget_settings_ind_mid_l_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/appwidget_settings_ind_mid_r_holo.9.png b/res/drawable-xxxhdpi/appwidget_settings_ind_mid_r_holo.9.png
deleted file mode 100644
index 83aa90d..0000000
--- a/res/drawable-xxxhdpi/appwidget_settings_ind_mid_r_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/appwidget_settings_ind_off_c_holo.9.png b/res/drawable-xxxhdpi/appwidget_settings_ind_off_c_holo.9.png
deleted file mode 100644
index 928ab68..0000000
--- a/res/drawable-xxxhdpi/appwidget_settings_ind_off_c_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/appwidget_settings_ind_off_l_holo.9.png b/res/drawable-xxxhdpi/appwidget_settings_ind_off_l_holo.9.png
deleted file mode 100644
index 77e3ef6..0000000
--- a/res/drawable-xxxhdpi/appwidget_settings_ind_off_l_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/appwidget_settings_ind_off_r_holo.9.png b/res/drawable-xxxhdpi/appwidget_settings_ind_off_r_holo.9.png
deleted file mode 100644
index 52ac956..0000000
--- a/res/drawable-xxxhdpi/appwidget_settings_ind_off_r_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/appwidget_settings_ind_on_c_holo.9.png b/res/drawable-xxxhdpi/appwidget_settings_ind_on_c_holo.9.png
deleted file mode 100644
index 4747a89..0000000
--- a/res/drawable-xxxhdpi/appwidget_settings_ind_on_c_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/appwidget_settings_ind_on_l_holo.9.png b/res/drawable-xxxhdpi/appwidget_settings_ind_on_l_holo.9.png
deleted file mode 100644
index a0de1b0..0000000
--- a/res/drawable-xxxhdpi/appwidget_settings_ind_on_l_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/appwidget_settings_ind_on_r_holo.9.png b/res/drawable-xxxhdpi/appwidget_settings_ind_on_r_holo.9.png
deleted file mode 100644
index 04a616b..0000000
--- a/res/drawable-xxxhdpi/appwidget_settings_ind_on_r_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_appwidget_settings_bluetooth_off_holo.png b/res/drawable-xxxhdpi/ic_appwidget_settings_bluetooth_off_holo.png
deleted file mode 100644
index bed7f49..0000000
--- a/res/drawable-xxxhdpi/ic_appwidget_settings_bluetooth_off_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_appwidget_settings_bluetooth_on_holo.png b/res/drawable-xxxhdpi/ic_appwidget_settings_bluetooth_on_holo.png
deleted file mode 100644
index fd15e3c..0000000
--- a/res/drawable-xxxhdpi/ic_appwidget_settings_bluetooth_on_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_appwidget_settings_brightness_auto_holo.png b/res/drawable-xxxhdpi/ic_appwidget_settings_brightness_auto_holo.png
deleted file mode 100644
index fa2fb13..0000000
--- a/res/drawable-xxxhdpi/ic_appwidget_settings_brightness_auto_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_appwidget_settings_brightness_full_holo.png b/res/drawable-xxxhdpi/ic_appwidget_settings_brightness_full_holo.png
deleted file mode 100644
index d176c2e..0000000
--- a/res/drawable-xxxhdpi/ic_appwidget_settings_brightness_full_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_appwidget_settings_brightness_half_holo.png b/res/drawable-xxxhdpi/ic_appwidget_settings_brightness_half_holo.png
deleted file mode 100644
index 0f24645..0000000
--- a/res/drawable-xxxhdpi/ic_appwidget_settings_brightness_half_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_appwidget_settings_brightness_off_holo.png b/res/drawable-xxxhdpi/ic_appwidget_settings_brightness_off_holo.png
deleted file mode 100644
index ed34dd3..0000000
--- a/res/drawable-xxxhdpi/ic_appwidget_settings_brightness_off_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_appwidget_settings_location_off_holo.png b/res/drawable-xxxhdpi/ic_appwidget_settings_location_off_holo.png
deleted file mode 100644
index e7d7560..0000000
--- a/res/drawable-xxxhdpi/ic_appwidget_settings_location_off_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_appwidget_settings_location_on_holo.png b/res/drawable-xxxhdpi/ic_appwidget_settings_location_on_holo.png
deleted file mode 100644
index 9e1222b..0000000
--- a/res/drawable-xxxhdpi/ic_appwidget_settings_location_on_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_appwidget_settings_location_saving_holo.png b/res/drawable-xxxhdpi/ic_appwidget_settings_location_saving_holo.png
deleted file mode 100644
index 309bde4..0000000
--- a/res/drawable-xxxhdpi/ic_appwidget_settings_location_saving_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_appwidget_settings_sync_off_holo.png b/res/drawable-xxxhdpi/ic_appwidget_settings_sync_off_holo.png
deleted file mode 100644
index 5c45bb5..0000000
--- a/res/drawable-xxxhdpi/ic_appwidget_settings_sync_off_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_appwidget_settings_sync_on_holo.png b/res/drawable-xxxhdpi/ic_appwidget_settings_sync_on_holo.png
deleted file mode 100644
index 07fd56f..0000000
--- a/res/drawable-xxxhdpi/ic_appwidget_settings_sync_on_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_appwidget_settings_wifi_off_holo.png b/res/drawable-xxxhdpi/ic_appwidget_settings_wifi_off_holo.png
deleted file mode 100644
index 392aaf4..0000000
--- a/res/drawable-xxxhdpi/ic_appwidget_settings_wifi_off_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxxhdpi/ic_appwidget_settings_wifi_on_holo.png b/res/drawable-xxxhdpi/ic_appwidget_settings_wifi_on_holo.png
deleted file mode 100644
index a8b4772..0000000
--- a/res/drawable-xxxhdpi/ic_appwidget_settings_wifi_on_holo.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/appwidget_button_center.xml b/res/drawable/appwidget_button_center.xml
deleted file mode 100644
index 3af32e5..0000000
--- a/res/drawable/appwidget_button_center.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <item android:state_pressed="true"
-        android:drawable="@drawable/appwidget_inner_pressed_c_holo" />
-
-    <item android:state_focused="true" android:state_enabled="true"
-        android:state_window_focused="true"
-        android:drawable="@drawable/appwidget_inner_focused_c_holo" />
-
-    <item
-         android:drawable="@android:color/transparent" />
-</selector>
diff --git a/res/drawable/appwidget_button_left.xml b/res/drawable/appwidget_button_left.xml
deleted file mode 100644
index e13cf99..0000000
--- a/res/drawable/appwidget_button_left.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <item android:state_pressed="true"
-        android:drawable="@drawable/appwidget_inner_pressed_l_holo" />
-
-    <item android:state_focused="true" android:state_enabled="true"
-        android:state_window_focused="true"
-        android:drawable="@drawable/appwidget_inner_focused_l_holo" />
-
-    <item
-         android:drawable="@android:color/transparent" />
-</selector>
diff --git a/res/drawable/appwidget_button_right.xml b/res/drawable/appwidget_button_right.xml
deleted file mode 100644
index e29c2fe..0000000
--- a/res/drawable/appwidget_button_right.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 The Android Open Source Project
-
-     Licensed under the Apache License, Version 2.0 (the "License");
-     you may not use this file except in compliance with the License.
-     You may obtain a copy of the License at
-
-          http://www.apache.org/licenses/LICENSE-2.0
-
-     Unless required by applicable law or agreed to in writing, software
-     distributed under the License is distributed on an "AS IS" BASIS,
-     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-     See the License for the specific language governing permissions and
-     limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-
-    <item android:state_pressed="true"
-        android:drawable="@drawable/appwidget_inner_pressed_r_holo" />
-
-    <item android:state_focused="true" android:state_enabled="true"
-        android:state_window_focused="true"
-        android:drawable="@drawable/appwidget_inner_focused_r_holo" />
-
-    <item
-         android:drawable="@android:color/transparent" />
-</selector>
diff --git a/res/layout/widget.xml b/res/layout/widget.xml
deleted file mode 100644
index a125d80..0000000
--- a/res/layout/widget.xml
+++ /dev/null
@@ -1,198 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/main"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:gravity="center"
-    android:background="@drawable/appwidget_bg_holo" >
-
-    <LinearLayout
-        android:id="@+id/btn_wifi"
-        android:layout_width="0dip"
-        android:layout_weight="1"
-        android:layout_height="match_parent"
-        android:paddingTop="12dp"
-        android:background="@drawable/appwidget_button_left"
-        android:clickable="true"
-        android:focusable="true"
-        android:orientation="vertical">
-
-        <ImageView
-            android:id="@+id/img_wifi"
-            android:layout_width="match_parent"
-            android:layout_height="0dip"
-            android:layout_weight="1"
-            android:scaleType="center"
-            android:contentDescription="@null"
-            />
-
-        <ImageView
-            android:id="@+id/ind_wifi"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:scaleType="fitXY"
-            android:contentDescription="@null"
-            />
-        </LinearLayout>
-
-    <ImageView
-        android:layout_width="1dip"
-        android:layout_height="match_parent"
-        android:background="@drawable/appwidget_settings_divider_holo"
-        android:contentDescription="@null"
-        />
-
-    <LinearLayout
-        android:id="@+id/btn_bluetooth"
-        android:layout_width="0dip"
-        android:layout_weight="1"
-        android:layout_height="match_parent"
-        android:paddingTop="12dp"
-        android:background="@drawable/appwidget_button_center"
-        android:clickable="true"
-        android:focusable="true"
-        android:orientation="vertical">
-
-        <ImageView
-            android:id="@+id/img_bluetooth"
-            android:layout_width="match_parent"
-            android:layout_height="0dip"
-            android:layout_weight="1"
-            android:scaleType="center"
-            android:contentDescription="@null"
-            />
-
-        <ImageView
-            android:id="@+id/ind_bluetooth"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:scaleType="fitXY"
-            android:contentDescription="@null"
-            />
-
-    </LinearLayout>
-
-    <ImageView
-        android:layout_width="1dip"
-        android:layout_height="match_parent"
-        android:background="@drawable/appwidget_settings_divider_holo"
-        android:contentDescription="@null"
-        />
-
-    <LinearLayout
-        android:id="@+id/btn_location"
-        android:layout_width="0dip"
-        android:layout_weight="1"
-        android:layout_height="match_parent"
-        android:paddingTop="12dp"
-        android:background="@drawable/appwidget_button_center"
-        android:clickable="true"
-        android:focusable="true"
-        android:orientation="vertical">
-
-        <ImageView
-            android:id="@+id/img_location"
-            android:layout_width="match_parent"
-            android:layout_height="0dip"
-            android:layout_weight="1"
-            android:scaleType="center"
-            android:contentDescription="@null"
-            />
-
-        <ImageView
-            android:id="@+id/ind_location"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:scaleType="fitXY"
-            android:contentDescription="@null"
-            />
-    </LinearLayout>
-
-    <ImageView
-        android:layout_width="1dip"
-        android:layout_height="match_parent"
-        android:background="@drawable/appwidget_settings_divider_holo"
-        android:contentDescription="@null"
-        />    
-
-    <LinearLayout
-        android:id="@+id/btn_sync"
-        android:layout_width="0dip"
-        android:layout_weight="1"
-        android:layout_height="match_parent"
-        android:paddingTop="12dp"
-        android:background="@drawable/appwidget_button_center"
-        android:clickable="true"
-        android:focusable="true"
-        android:orientation="vertical">
-
-        <ImageView
-            android:id="@+id/img_sync"
-            android:layout_width="match_parent"
-            android:layout_height="0dip"
-            android:layout_weight="1"
-            android:scaleType="center"
-            android:contentDescription="@null"
-            />
-
-        <ImageView
-            android:id="@+id/ind_sync"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:scaleType="fitXY"
-            android:contentDescription="@null"
-            />
-    </LinearLayout>
-
-    <ImageView
-        android:layout_width="1dip"
-        android:layout_height="match_parent"
-        android:background="@drawable/appwidget_settings_divider_holo"
-        android:contentDescription="@null"
-        />
-
-    <LinearLayout
-        android:id="@+id/btn_brightness"
-        android:layout_width="0dip"
-        android:layout_weight="1"
-        android:layout_height="match_parent"
-        android:paddingTop="12dp"
-        android:background="@drawable/appwidget_button_right"
-        android:clickable="true"
-        android:focusable="true"
-        android:orientation="vertical">
-
-        <ImageView
-            android:id="@+id/img_brightness"
-            android:layout_width="match_parent"
-            android:layout_height="0dip"
-            android:layout_weight="1"
-            android:scaleType="center"
-            android:contentDescription="@null"
-            />
-
-        <ImageView
-            android:id="@+id/ind_brightness"
-            android:layout_width="match_parent"
-            android:layout_height="wrap_content"
-            android:scaleType="fitXY"
-            android:contentDescription="@null"
-            />
-    </LinearLayout>
-
-</LinearLayout>
diff --git a/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml
index 58b05d8..273225e 100755
--- a/res/values-sw600dp/dimens.xml
+++ b/res/values-sw600dp/dimens.xml
@@ -24,8 +24,6 @@
     <dimen name="content_margin_left">16dip</dimen>
     <dimen name="description_margin_top">26dip</dimen>
     <dimen name="crypt_clock_size">120sp</dimen>
-    <dimen name="appwidget_min_width">325dip</dimen>
-    <dimen name="appwidget_min_height">50dip</dimen>
 
     <!-- ActionBar contentInsetStart -->
     <dimen name="actionbar_contentInsetStart">24dp</dimen>
diff --git a/res/values/bools.xml b/res/values/bools.xml
index 0a928c3..f1abe9d 100644
--- a/res/values/bools.xml
+++ b/res/values/bools.xml
@@ -21,9 +21,6 @@
     <bool name="has_boot_sounds">false</bool>
     <!-- Whether there is a silent mode checkbox  -->
     <bool name="has_silent_mode">true</bool>
-    <!-- Whether the DEPRECATED power control widget is enabled for this
-         device. Should be overridden for specific product builds. -->
-    <bool name="has_powercontrol_widget">false</bool>
 
     <!-- Display additional System Update menu if true -->
     <bool name="config_additional_system_update_setting_enable">false</bool>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 024d212..acb895b 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -45,11 +45,6 @@
     <dimen name="divider_margin_top">6dip</dimen>
     <dimen name="divider_margin_bottom">7dip</dimen>
 
-    <!--  Size of icons in the top-level of settings  -->
-    <dimen name="header_icon_width">28dp</dimen>
-    <dimen name="appwidget_min_width">280dip</dimen>
-    <dimen name="appwidget_min_height">40dip</dimen>
-
     <dimen name="pager_tabs_padding">0dp</dimen>
     <dimen name="pager_tabs_title_padding">16dp</dimen>
     <dimen name="pager_tabs_selected_indicator_height">3dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index df98e0e..0c3732b 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -5534,39 +5534,6 @@
     <!-- Name for buttont hat plays a sample of the currently selected text-to-speech engine. -->
     <string name="tts_play">Play</string>
 
-    <!-- Power Control Widget -->
-    <string name="gadget_title">Power control</string>
-    <string name="gadget_toggle_wifi">Updating Wi\u2011Fi setting</string>
-    <string name="gadget_toggle_bluetooth">Updating Bluetooth setting</string>
-    <!-- Template for gadget toggle button description. Populated examples are "Wi-Fi off" or "Wi-Fi turning on". -->
-    <string name="gadget_state_template"><xliff:g name="feature" example="Wi\u2011Fi">%1$s</xliff:g> <xliff:g name="state" example="off">%2$s</xliff:g></string>
-    <!-- Gadget value used to describe on state. -->
-    <string name="gadget_state_on">on</string>
-    <!-- Gadget value used to describe off state. -->
-    <string name="gadget_state_off">off</string>
-    <!-- Gadget value used to describe turning on state. -->
-    <string name="gadget_state_turning_on">turning on</string>
-    <!-- Gadget value used to describe turning off state. -->
-    <string name="gadget_state_turning_off">turning off</string>
-    <!-- Spoken description for the Wi-Fi power control gadget. -->
-    <string name="gadget_wifi">Wi\u2011Fi</string>
-    <!-- Spoken description for the Bluetooth power control gadget. -->
-    <string name="gadget_bluetooth">Bluetooth</string>
-    <!-- Spoken description for the Location power control gadget. -->
-    <string name="gadget_location">Location</string>
-    <!-- Spoken description for the data synchronization gadget. -->
-    <string name="gadget_sync">Sync</string>
-    <!-- Template for brightness gadget toggle button description. -->
-    <string name="gadget_brightness_template">Brightness <xliff:g name="state" example="half">%1$s</xliff:g></string>
-    <!-- Brightness gadget value used to describe automatic brightness state. -->
-    <string name="gadget_brightness_state_auto">auto</string>
-    <!-- Brightness gadget value used to describe maximum brightness state. -->
-    <string name="gadget_brightness_state_full">full</string>
-    <!-- Brightness gadget value used to describe half brightness state. -->
-    <string name="gadget_brightness_state_half">half</string>
-    <!-- Brightness gadget value used to describe minimum brightness state. -->
-    <string name="gadget_brightness_state_off">off</string>
-
     <!-- Title of preference to enter the VPN settings activity -->
     <string name="vpn_settings_title">VPN</string>
 
@@ -9601,7 +9568,7 @@
     <string name="ambient_display_title" product="device">Double-tap to check device</string>
 
     <!-- Summary text for ambient display double tap [CHAR LIMIT=NONE]-->
-    <string name="ambient_display_summary">To check time, notification icons, and other info, double-tap your screen.</string>
+    <string name="ambient_display_summary">To check time, notifications, and other info, double-tap your screen.</string>
 
     <!-- Preference and settings suggestion title text for ambient display pick up (phone) [CHAR LIMIT=60]-->
     <string name="ambient_display_pickup_title" product="default">Lift to check phone</string>
@@ -9611,11 +9578,11 @@
     <string name="ambient_display_pickup_title" product="device">Lift to check device</string>
 
     <!-- Summary text for ambient display (phone) [CHAR LIMIT=NONE]-->
-    <string name="ambient_display_pickup_summary" product="default">To check time, notification icons, and other info, pick up your phone.</string>
+    <string name="ambient_display_pickup_summary" product="default">To check time, notifications, and other info, pick up your phone.</string>
     <!-- Summary text for ambient display (tablet) [CHAR LIMIT=NONE]-->
-    <string name="ambient_display_pickup_summary" product="tablet">To check time, notification icons, and other info, pick up your tablet.</string>
+    <string name="ambient_display_pickup_summary" product="tablet">To check time, notifications, and other info, pick up your tablet.</string>
     <!-- Summary text for ambient display (device) [CHAR LIMIT=NONE]-->
-    <string name="ambient_display_pickup_summary" product="device">To check time, notification icons, and other info, pick up your device.</string>
+    <string name="ambient_display_pickup_summary" product="device">To check time, notifications, and other info, pick up your device.</string>
 
     <!-- Title text for swiping downwards on fingerprint sensor for notifications [CHAR LIMIT=80]-->
     <string name="fingerprint_swipe_for_notifications_title">Swipe fingerprint for notifications</string>
diff --git a/res/xml/appwidget_info.xml b/res/xml/appwidget_info.xml
deleted file mode 100644
index 2d8c81e..0000000
--- a/res/xml/appwidget_info.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2009 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.
--->
-
-<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
-    android:minWidth="@dimen/appwidget_min_width"
-    android:minHeight="@dimen/appwidget_min_height"
-    android:previewImage="@drawable/preview"
-    android:initialLayout="@layout/widget"
-    >
-</appwidget-provider>
diff --git a/src/com/android/settings/biometrics/face/FaceEnrollPreviewFragment.java b/src/com/android/settings/biometrics/face/FaceEnrollPreviewFragment.java
index 2b92ccb..8bb8b92 100644
--- a/src/com/android/settings/biometrics/face/FaceEnrollPreviewFragment.java
+++ b/src/com/android/settings/biometrics/face/FaceEnrollPreviewFragment.java
@@ -236,6 +236,7 @@
                         CameraCharacteristics.SCALER_STREAM_CONFIGURATION_MAP);
                 mPreviewSize = chooseOptimalSize(map.getOutputSizes(SurfaceTexture.class),
                         width, height, MAX_PREVIEW_WIDTH, MAX_PREVIEW_HEIGHT);
+                break;
             }
         } catch (CameraAccessException e) {
             Log.e(TAG, "Unable to access camera", e);
diff --git a/src/com/android/settings/dashboard/DashboardSummary.java b/src/com/android/settings/dashboard/DashboardSummary.java
index 9609098..d7595bf 100644
--- a/src/com/android/settings/dashboard/DashboardSummary.java
+++ b/src/com/android/settings/dashboard/DashboardSummary.java
@@ -39,7 +39,7 @@
 import com.android.settings.dashboard.suggestions.SuggestionFeatureProvider;
 import com.android.settings.homepage.conditional.Condition;
 import com.android.settings.homepage.conditional.ConditionManager;
-import com.android.settings.homepage.conditional.ConditionManager.ConditionListener;
+import com.android.settings.homepage.conditional.ConditionListener;
 import com.android.settings.homepage.conditional.FocusRecyclerView;
 import com.android.settings.homepage.conditional.FocusRecyclerView.FocusListener;
 import com.android.settings.overlay.FeatureFactory;
diff --git a/src/com/android/settings/fuelgauge/BatteryHistoryPreference.java b/src/com/android/settings/fuelgauge/BatteryHistoryPreference.java
index 89b3edd..115e72c 100644
--- a/src/com/android/settings/fuelgauge/BatteryHistoryPreference.java
+++ b/src/com/android/settings/fuelgauge/BatteryHistoryPreference.java
@@ -54,7 +54,7 @@
         BatteryInfo.getBatteryInfo(getContext(), info -> {
             mBatteryInfo = info;
             notifyChanged();
-        }, batteryStats.getStats(), false);
+        }, batteryStats, false);
     }
 
     public void setBottomSummary(CharSequence text) {
diff --git a/src/com/android/settings/fuelgauge/BatteryInfo.java b/src/com/android/settings/fuelgauge/BatteryInfo.java
index f642d30..dcbfaa8 100644
--- a/src/com/android/settings/fuelgauge/BatteryInfo.java
+++ b/src/com/android/settings/fuelgauge/BatteryInfo.java
@@ -134,31 +134,32 @@
     }
 
     public static void getBatteryInfo(final Context context, final Callback callback) {
-        BatteryInfo.getBatteryInfo(context, callback, false /* shortString */);
+        BatteryInfo.getBatteryInfo(context, callback, null /* statsHelper */,
+                false /* shortString */);
     }
 
     public static void getBatteryInfo(final Context context, final Callback callback,
             boolean shortString) {
-        final long startTime = System.currentTimeMillis();
-        BatteryStatsHelper statsHelper = new BatteryStatsHelper(context, true);
-        statsHelper.create((Bundle) null);
-        BatteryUtils.logRuntime(LOG_TAG, "time to make batteryStatsHelper", startTime);
-        BatteryInfo.getBatteryInfo(context, callback, statsHelper, shortString);
+        BatteryInfo.getBatteryInfo(context, callback, null /* statsHelper */, shortString);
     }
 
     public static void getBatteryInfo(final Context context, final Callback callback,
-            BatteryStatsHelper statsHelper, boolean shortString) {
-        final long startTime = System.currentTimeMillis();
-        BatteryStats stats = statsHelper.getStats();
-        BatteryUtils.logRuntime(LOG_TAG, "time for getStats", startTime);
-        getBatteryInfo(context, callback, stats, shortString);
-    }
-
-    public static void getBatteryInfo(final Context context, final Callback callback,
-            BatteryStats stats, boolean shortString) {
+            final BatteryStatsHelper statsHelper, boolean shortString) {
         new AsyncTask<Void, Void, BatteryInfo>() {
             @Override
             protected BatteryInfo doInBackground(Void... params) {
+                final BatteryStats stats;
+                final long batteryStatsTime = System.currentTimeMillis();
+                if (statsHelper == null) {
+                    final BatteryStatsHelper localStatsHelper = new BatteryStatsHelper(context,
+                            true);
+                    localStatsHelper.create((Bundle) null);
+                    stats = localStatsHelper.getStats();
+                } else {
+                    stats = statsHelper.getStats();
+                }
+                BatteryUtils.logRuntime(LOG_TAG, "time for getStats", batteryStatsTime);
+
                 final long startTime = System.currentTimeMillis();
                 PowerUsageFeatureProvider provider =
                         FeatureFactory.getFactory(context).getPowerUsageFeatureProvider(context);
diff --git a/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java b/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java
index 04bdedc..4a23570 100644
--- a/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java
+++ b/src/com/android/settings/gestures/DoubleTapScreenPreferenceController.java
@@ -16,7 +16,7 @@
 
 package com.android.settings.gestures;
 
-import static android.provider.Settings.Secure.DOZE_PULSE_ON_DOUBLE_TAP;
+import static android.provider.Settings.Secure.DOZE_DOUBLE_TAP_GESTURE;
 
 import android.annotation.UserIdInt;
 import android.content.Context;
@@ -36,7 +36,7 @@
 
     private static final String PREF_KEY_VIDEO = "gesture_double_tap_screen_video";
 
-    private final String SECURE_KEY = DOZE_PULSE_ON_DOUBLE_TAP;
+    private final String SECURE_KEY = DOZE_DOUBLE_TAP_GESTURE;
 
     private AmbientDisplayConfiguration mAmbientConfig;
     @UserIdInt
@@ -59,7 +59,7 @@
     @VisibleForTesting
     static boolean isSuggestionComplete(AmbientDisplayConfiguration config,
             SharedPreferences prefs) {
-        return !config.pulseOnDoubleTapAvailable()
+        return !config.doubleTapSensorAvailable()
                 || prefs.getBoolean(DoubleTapScreenSettings.PREF_KEY_SUGGESTION_COMPLETE, false);
     }
 
@@ -70,11 +70,6 @@
             return UNSUPPORTED_ON_DEVICE;
         }
 
-        // Can't change Double Tap when AOD is enabled.
-        if (!getAmbientConfig().ambientDisplayAvailable()) {
-            return DISABLED_DEPENDENT_SETTING;
-        }
-
         return AVAILABLE;
     }
 
@@ -96,12 +91,7 @@
 
     @Override
     public boolean isChecked() {
-        return getAmbientConfig().pulseOnDoubleTapEnabled(mUserId);
-    }
-
-    @Override
-    protected boolean canHandleClicks() {
-        return !getAmbientConfig().alwaysOnEnabled(mUserId);
+        return getAmbientConfig().doubleTapGestureEnabled(mUserId);
     }
 
     private AmbientDisplayConfiguration getAmbientConfig() {
diff --git a/src/com/android/settings/gestures/PickupGesturePreferenceController.java b/src/com/android/settings/gestures/PickupGesturePreferenceController.java
index 53a4447..7460183 100644
--- a/src/com/android/settings/gestures/PickupGesturePreferenceController.java
+++ b/src/com/android/settings/gestures/PickupGesturePreferenceController.java
@@ -16,7 +16,7 @@
 
 package com.android.settings.gestures;
 
-import static android.provider.Settings.Secure.DOZE_PULSE_ON_PICK_UP;
+import static android.provider.Settings.Secure.DOZE_PICK_UP_GESTURE;
 
 import android.annotation.UserIdInt;
 import android.content.Context;
@@ -37,7 +37,7 @@
     private static final String PREF_KEY_VIDEO = "gesture_pick_up_video";
     private final String mPickUpPrefKey;
 
-    private final String SECURE_KEY = DOZE_PULSE_ON_PICK_UP;
+    private final String SECURE_KEY = DOZE_PICK_UP_GESTURE;
 
     private AmbientDisplayConfiguration mAmbientConfig;
     @UserIdInt
@@ -57,21 +57,16 @@
     public static boolean isSuggestionComplete(Context context, SharedPreferences prefs) {
         AmbientDisplayConfiguration ambientConfig = new AmbientDisplayConfiguration(context);
         return prefs.getBoolean(PickupGestureSettings.PREF_KEY_SUGGESTION_COMPLETE, false)
-                || !ambientConfig.pulseOnPickupAvailable();
+                || !ambientConfig.dozePickupSensorAvailable();
     }
 
     @Override
     public int getAvailabilityStatus() {
         // No hardware support for Pickup Gesture
-        if (!getAmbientConfig().dozePulsePickupSensorAvailable()) {
+        if (!getAmbientConfig().dozePickupSensorAvailable()) {
             return UNSUPPORTED_ON_DEVICE;
         }
 
-        // Can't change Pickup Gesture when AOD is enabled.
-        if (!getAmbientConfig().ambientDisplayAvailable()) {
-            return DISABLED_DEPENDENT_SETTING;
-        }
-
         return AVAILABLE;
     }
 
@@ -87,7 +82,7 @@
 
     @Override
     public boolean isChecked() {
-        return getAmbientConfig().pulseOnPickupEnabled(mUserId);
+        return getAmbientConfig().pickupGestureEnabled(mUserId);
     }
 
     @Override
@@ -101,16 +96,6 @@
                 isChecked ? ON : OFF);
     }
 
-    @Override
-    public boolean canHandleClicks() {
-        return pulseOnPickupCanBeModified();
-    }
-
-    @VisibleForTesting
-    boolean pulseOnPickupCanBeModified() {
-        return getAmbientConfig().pulseOnPickupCanBeModified(mUserId);
-    }
-
     private AmbientDisplayConfiguration getAmbientConfig() {
         if (mAmbientConfig == null) {
             mAmbientConfig = new AmbientDisplayConfiguration(mContext);
diff --git a/src/com/android/settings/homepage/conditional/ConditionListener.java b/src/com/android/settings/homepage/conditional/ConditionListener.java
new file mode 100644
index 0000000..1e5ec1f
--- /dev/null
+++ b/src/com/android/settings/homepage/conditional/ConditionListener.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2018 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.homepage.conditional;
+
+public interface ConditionListener {
+    void onConditionsChanged();
+}
diff --git a/src/com/android/settings/homepage/conditional/ConditionManager.java b/src/com/android/settings/homepage/conditional/ConditionManager.java
index e84b71a..dbb04ae 100644
--- a/src/com/android/settings/homepage/conditional/ConditionManager.java
+++ b/src/com/android/settings/homepage/conditional/ConditionManager.java
@@ -217,17 +217,6 @@
         return mConditions;
     }
 
-    public List<Condition> getVisibleConditions() {
-        List<Condition> conditions = new ArrayList<>();
-        final int N = mConditions.size();
-        for (int i = 0; i < N; i++) {
-            if (mConditions.get(i).shouldShow()) {
-                conditions.add(mConditions.get(i));
-            }
-        }
-        return conditions;
-    }
-
     public void notifyChanged(Condition condition) {
         saveToXml();
         Collections.sort(mConditions, CONDITION_COMPARATOR);
@@ -293,10 +282,6 @@
         return sInstance;
     }
 
-    public interface ConditionListener {
-        void onConditionsChanged();
-    }
-
     private static final Comparator<Condition> CONDITION_COMPARATOR = new Comparator<Condition>() {
         @Override
         public int compare(Condition lhs, Condition rhs) {
diff --git a/src/com/android/settings/widget/SettingsAppWidgetProvider.java b/src/com/android/settings/widget/SettingsAppWidgetProvider.java
deleted file mode 100644
index b8730b9..0000000
--- a/src/com/android/settings/widget/SettingsAppWidgetProvider.java
+++ /dev/null
@@ -1,946 +0,0 @@
-/*
- * Copyright (C) 2009 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.settings.widget;
-
-import android.app.PendingIntent;
-import android.appwidget.AppWidgetManager;
-import android.appwidget.AppWidgetProvider;
-import android.bluetooth.BluetoothAdapter;
-import android.content.ComponentName;
-import android.content.ContentResolver;
-import android.content.Context;
-import android.content.Intent;
-import android.database.ContentObserver;
-import android.hardware.display.DisplayManager;
-import android.location.LocationManager;
-import android.net.ConnectivityManager;
-import android.net.Uri;
-import android.net.wifi.WifiManager;
-import android.os.AsyncTask;
-import android.os.Handler;
-import android.os.PowerManager;
-import android.os.Process;
-import android.os.UserManager;
-import android.provider.Settings;
-import android.util.Log;
-import android.widget.RemoteViews;
-
-import com.android.settings.R;
-
-/**
- * Provides control of power-related settings from a widget.
- */
-public class SettingsAppWidgetProvider extends AppWidgetProvider {
-    static final String TAG = "SettingsAppWidgetProvider";
-
-    static final ComponentName THIS_APPWIDGET =
-            new ComponentName("com.android.settings",
-                    "com.android.settings.widget.SettingsAppWidgetProvider");
-
-    private static BluetoothAdapter sBluetoothAdapter = null;
-
-    private static final int BUTTON_WIFI = 0;
-    private static final int BUTTON_BRIGHTNESS = 1;
-    private static final int BUTTON_SYNC = 2;
-    private static final int BUTTON_LOCATION = 3;
-    private static final int BUTTON_BLUETOOTH = 4;
-
-    // This widget keeps track of two sets of states:
-    // "3-state": STATE_DISABLED, STATE_ENABLED, STATE_INTERMEDIATE
-    // "5-state": STATE_DISABLED, STATE_ENABLED, STATE_TURNING_ON, STATE_TURNING_OFF, STATE_UNKNOWN
-    private static final int STATE_DISABLED = 0;
-    private static final int STATE_ENABLED = 1;
-    private static final int STATE_TURNING_ON = 2;
-    private static final int STATE_TURNING_OFF = 3;
-    private static final int STATE_UNKNOWN = 4;
-    private static final int STATE_INTERMEDIATE = 5;
-
-    // Position in the widget bar, to enable different graphics for left, center and right buttons
-    private static final int POS_LEFT = 0;
-    private static final int POS_CENTER = 1;
-    private static final int POS_RIGHT = 2;
-
-    private static final int[] IND_DRAWABLE_OFF = {
-        R.drawable.appwidget_settings_ind_off_l_holo,
-        R.drawable.appwidget_settings_ind_off_c_holo,
-        R.drawable.appwidget_settings_ind_off_r_holo
-    };
-
-    private static final int[] IND_DRAWABLE_MID = {
-        R.drawable.appwidget_settings_ind_mid_l_holo,
-        R.drawable.appwidget_settings_ind_mid_c_holo,
-        R.drawable.appwidget_settings_ind_mid_r_holo
-    };
-
-    private static final int[] IND_DRAWABLE_ON = {
-        R.drawable.appwidget_settings_ind_on_l_holo,
-        R.drawable.appwidget_settings_ind_on_c_holo,
-        R.drawable.appwidget_settings_ind_on_r_holo
-    };
-
-    /** Minimum brightness at which the indicator is shown at half-full and ON */
-    private static final float HALF_BRIGHTNESS_THRESHOLD = 0.3f;
-    /** Minimum brightness at which the indicator is shown at full */
-    private static final float FULL_BRIGHTNESS_THRESHOLD = 0.8f;
-
-    private static final StateTracker sWifiState = new WifiStateTracker();
-    private static final StateTracker sBluetoothState = new BluetoothStateTracker();
-    private static final StateTracker sLocationState = new LocationStateTracker();
-    private static final StateTracker sSyncState = new SyncStateTracker();
-    private static SettingsObserver sSettingsObserver;
-
-    /**
-     * The state machine for a setting's toggling, tracking reality
-     * versus the user's intent.
-     *
-     * This is necessary because reality moves relatively slowly
-     * (turning on &amp; off radio drivers), compared to user's
-     * expectations.
-     */
-    private abstract static class StateTracker {
-        // Is the state in the process of changing?
-        private boolean mInTransition = false;
-        private Boolean mActualState = null;  // initially not set
-        private Boolean mIntendedState = null;  // initially not set
-
-        // Did a toggle request arrive while a state update was
-        // already in-flight?  If so, the mIntendedState needs to be
-        // requested when the other one is done, unless we happened to
-        // arrive at that state already.
-        private boolean mDeferredStateChangeRequestNeeded = false;
-
-        /**
-         * User pressed a button to change the state.  Something
-         * should immediately appear to the user afterwards, even if
-         * we effectively do nothing.  Their press must be heard.
-         */
-        public final void toggleState(Context context) {
-            int currentState = getTriState(context);
-            boolean newState = false;
-            switch (currentState) {
-                case STATE_ENABLED:
-                    newState = false;
-                    break;
-                case STATE_DISABLED:
-                    newState = true;
-                    break;
-                case STATE_INTERMEDIATE:
-                    if (mIntendedState != null) {
-                        newState = !mIntendedState;
-                    }
-                    break;
-            }
-            mIntendedState = newState;
-            if (mInTransition) {
-                // We don't send off a transition request if we're
-                // already transitioning.  Makes our state tracking
-                // easier, and is probably nicer on lower levels.
-                // (even though they should be able to take it...)
-                mDeferredStateChangeRequestNeeded = true;
-            } else {
-                mInTransition = true;
-                requestStateChange(context, newState);
-            }
-        }
-
-        /**
-         * Return the ID of the clickable container for the setting.
-         */
-        public abstract int getContainerId();
-
-        /**
-         * Return the ID of the main large image button for the setting.
-         */
-        public abstract int getButtonId();
-
-        /**
-         * Returns the small indicator image ID underneath the setting.
-         */
-        public abstract int getIndicatorId();
-
-        /**
-         * Returns the resource ID of the setting's content description.
-         */
-        public abstract int getButtonDescription();
-
-        /**
-         * Returns the resource ID of the image to show as a function of
-         * the on-vs-off state.
-         */
-        public abstract int getButtonImageId(boolean on);
-
-        /**
-         * Returns the position in the button bar - either POS_LEFT, POS_RIGHT or POS_CENTER.
-         */
-        public int getPosition() { return POS_CENTER; }
-
-        /**
-         * Updates the remote views depending on the state (off, on,
-         * turning off, turning on) of the setting.
-         */
-        public final void setImageViewResources(Context context, RemoteViews views) {
-            int containerId = getContainerId();
-            int buttonId = getButtonId();
-            int indicatorId = getIndicatorId();
-            int pos = getPosition();
-            switch (getTriState(context)) {
-                case STATE_DISABLED:
-                    views.setContentDescription(containerId,
-                        getContentDescription(context, R.string.gadget_state_off));
-                    views.setImageViewResource(buttonId, getButtonImageId(false));
-                    views.setImageViewResource(
-                        indicatorId, IND_DRAWABLE_OFF[pos]);
-                    break;
-                case STATE_ENABLED:
-                    views.setContentDescription(containerId,
-                        getContentDescription(context, R.string.gadget_state_on));
-                    views.setImageViewResource(buttonId, getButtonImageId(true));
-                    views.setImageViewResource(
-                        indicatorId, IND_DRAWABLE_ON[pos]);
-                    break;
-                case STATE_INTERMEDIATE:
-                    // In the transitional state, the bottom green bar
-                    // shows the tri-state (on, off, transitioning), but
-                    // the top dark-gray-or-bright-white logo shows the
-                    // user's intent.  This is much easier to see in
-                    // sunlight.
-                    if (isTurningOn()) {
-                        views.setContentDescription(containerId,
-                            getContentDescription(context, R.string.gadget_state_turning_on));
-                        views.setImageViewResource(buttonId, getButtonImageId(true));
-                        views.setImageViewResource(
-                            indicatorId, IND_DRAWABLE_MID[pos]);
-                    } else {
-                        views.setContentDescription(containerId,
-                            getContentDescription(context, R.string.gadget_state_turning_off));
-                        views.setImageViewResource(buttonId, getButtonImageId(false));
-                        views.setImageViewResource(
-                            indicatorId, IND_DRAWABLE_OFF[pos]);
-                    }
-                    break;
-            }
-        }
-
-        /**
-         * Returns the gadget state template populated with the gadget
-         * description and state.
-         */
-        private final String getContentDescription(Context context, int stateResId) {
-            final String gadget = context.getString(getButtonDescription());
-            final String state = context.getString(stateResId);
-            return context.getString(R.string.gadget_state_template, gadget, state);
-        }
-
-        /**
-         * Update internal state from a broadcast state change.
-         */
-        public abstract void onActualStateChange(Context context, Intent intent);
-
-        /**
-         * Sets the value that we're now in.  To be called from onActualStateChange.
-         *
-         * @param newState one of STATE_DISABLED, STATE_ENABLED, STATE_TURNING_ON,
-         *                 STATE_TURNING_OFF, STATE_UNKNOWN
-         */
-        protected final void setCurrentState(Context context, int newState) {
-            final boolean wasInTransition = mInTransition;
-            switch (newState) {
-                case STATE_DISABLED:
-                    mInTransition = false;
-                    mActualState = false;
-                    break;
-                case STATE_ENABLED:
-                    mInTransition = false;
-                    mActualState = true;
-                    break;
-                case STATE_TURNING_ON:
-                    mInTransition = true;
-                    mActualState = false;
-                    break;
-                case STATE_TURNING_OFF:
-                    mInTransition = true;
-                    mActualState = true;
-                    break;
-            }
-
-            if (wasInTransition && !mInTransition) {
-                if (mDeferredStateChangeRequestNeeded) {
-                    Log.v(TAG, "processing deferred state change");
-                    if (mActualState != null && mIntendedState != null &&
-                        mIntendedState.equals(mActualState)) {
-                        Log.v(TAG, "... but intended state matches, so no changes.");
-                    } else if (mIntendedState != null) {
-                        mInTransition = true;
-                        requestStateChange(context, mIntendedState);
-                    }
-                    mDeferredStateChangeRequestNeeded = false;
-                }
-            }
-        }
-
-
-        /**
-         * If we're in a transition mode, this returns true if we're
-         * transitioning towards being enabled.
-         */
-        public final boolean isTurningOn() {
-            return mIntendedState != null && mIntendedState;
-        }
-
-        /**
-         * Returns simplified 3-state value from underlying 5-state.
-         *
-         * @param context
-         * @return STATE_ENABLED, STATE_DISABLED, or STATE_INTERMEDIATE
-         */
-        public final int getTriState(Context context) {
-            if (mInTransition) {
-                // If we know we just got a toggle request recently
-                // (which set mInTransition), don't even ask the
-                // underlying interface for its state.  We know we're
-                // changing.  This avoids blocking the UI thread
-                // during UI refresh post-toggle if the underlying
-                // service state accessor has coarse locking on its
-                // state (to be fixed separately).
-                return STATE_INTERMEDIATE;
-            }
-            switch (getActualState(context)) {
-                case STATE_DISABLED:
-                    return STATE_DISABLED;
-                case STATE_ENABLED:
-                    return STATE_ENABLED;
-                default:
-                    return STATE_INTERMEDIATE;
-            }
-        }
-
-        /**
-         * Gets underlying actual state.
-         *
-         * @param context
-         * @return STATE_ENABLED, STATE_DISABLED, STATE_ENABLING, STATE_DISABLING,
-         *         or or STATE_UNKNOWN.
-         */
-        public abstract int getActualState(Context context);
-
-        /**
-         * Actually make the desired change to the underlying radio
-         * API.
-         */
-        protected abstract void requestStateChange(Context context, boolean desiredState);
-    }
-
-    /**
-     * Subclass of StateTracker to get/set Wifi state.
-     */
-    private static final class WifiStateTracker extends StateTracker {
-        public int getContainerId() { return R.id.btn_wifi; }
-        public int getButtonId() { return R.id.img_wifi; }
-        public int getIndicatorId() { return R.id.ind_wifi; }
-        public int getButtonDescription() { return R.string.gadget_wifi; }
-        public int getButtonImageId(boolean on) {
-            return on ? R.drawable.ic_appwidget_settings_wifi_on_holo
-                    : R.drawable.ic_appwidget_settings_wifi_off_holo;
-        }
-
-        @Override
-        public int getPosition() { return POS_LEFT; }
-
-        @Override
-        public int getActualState(Context context) {
-            WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
-            if (wifiManager != null) {
-                return wifiStateToFiveState(wifiManager.getWifiState());
-            }
-            return STATE_UNKNOWN;
-        }
-
-        @Override
-        protected void requestStateChange(Context context, final boolean desiredState) {
-            final WifiManager wifiManager =
-                    (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
-            if (wifiManager == null) {
-                Log.d(TAG, "No wifiManager.");
-                return;
-            }
-
-            // Actually request the wifi change and persistent
-            // settings write off the UI thread, as it can take a
-            // user-noticeable amount of time, especially if there's
-            // disk contention.
-            new AsyncTask<Void, Void, Void>() {
-                @Override
-                protected Void doInBackground(Void... args) {
-                    /**
-                     * Disable tethering if enabling Wifi
-                     */
-                    int wifiApState = wifiManager.getWifiApState();
-                    if (desiredState && ((wifiApState == WifiManager.WIFI_AP_STATE_ENABLING) ||
-                                         (wifiApState == WifiManager.WIFI_AP_STATE_ENABLED))) {
-                        final ConnectivityManager connectivityManager =
-                                (ConnectivityManager) context.getSystemService(
-                                        Context.CONNECTIVITY_SERVICE);
-                        connectivityManager.stopTethering(ConnectivityManager.TETHERING_WIFI);
-                    }
-
-                    wifiManager.setWifiEnabled(desiredState);
-                    return null;
-                }
-            }.execute();
-        }
-
-        @Override
-        public void onActualStateChange(Context context, Intent intent) {
-            if (!WifiManager.WIFI_STATE_CHANGED_ACTION.equals(intent.getAction())) {
-                return;
-            }
-            int wifiState = intent.getIntExtra(WifiManager.EXTRA_WIFI_STATE, -1);
-            setCurrentState(context, wifiStateToFiveState(wifiState));
-        }
-
-        /**
-         * Converts WifiManager's state values into our
-         * Wifi/Bluetooth-common state values.
-         */
-        private static int wifiStateToFiveState(int wifiState) {
-            switch (wifiState) {
-                case WifiManager.WIFI_STATE_DISABLED:
-                    return STATE_DISABLED;
-                case WifiManager.WIFI_STATE_ENABLED:
-                    return STATE_ENABLED;
-                case WifiManager.WIFI_STATE_DISABLING:
-                    return STATE_TURNING_OFF;
-                case WifiManager.WIFI_STATE_ENABLING:
-                    return STATE_TURNING_ON;
-                default:
-                    return STATE_UNKNOWN;
-            }
-        }
-    }
-
-    /**
-     * Subclass of StateTracker to get/set Bluetooth state.
-     */
-    private static final class BluetoothStateTracker extends StateTracker {
-        public int getContainerId() { return R.id.btn_bluetooth; }
-        public int getButtonId() { return R.id.img_bluetooth; }
-        public int getIndicatorId() { return R.id.ind_bluetooth; }
-        public int getButtonDescription() { return R.string.gadget_bluetooth; }
-        public int getButtonImageId(boolean on) {
-            return on ? R.drawable.ic_appwidget_settings_bluetooth_on_holo
-                    : R.drawable.ic_appwidget_settings_bluetooth_off_holo;
-        }
-
-        @Override
-        public int getActualState(Context context) {
-            if (sBluetoothAdapter == null) {
-                sBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
-                if (sBluetoothAdapter == null) {
-                    return STATE_UNKNOWN;  // On emulator?
-                }
-            }
-            return bluetoothStateToFiveState(sBluetoothAdapter.getState());
-        }
-
-        @Override
-        protected void requestStateChange(Context context, final boolean desiredState) {
-            if (sBluetoothAdapter == null) {
-                Log.d(TAG, "No BluetoothAdapter");
-                return;
-            }
-            // Actually request the Bluetooth change and persistent
-            // settings write off the UI thread, as it can take a
-            // user-noticeable amount of time, especially if there's
-            // disk contention.
-            new AsyncTask<Void, Void, Void>() {
-                @Override
-                protected Void doInBackground(Void... args) {
-                    if (desiredState) {
-                        sBluetoothAdapter.enable();
-                    } else {
-                        sBluetoothAdapter.disable();
-                    }
-                    return null;
-                }
-            }.execute();
-        }
-
-        @Override
-        public void onActualStateChange(Context context, Intent intent) {
-            if (!BluetoothAdapter.ACTION_STATE_CHANGED.equals(intent.getAction())) {
-                return;
-            }
-            int bluetoothState = intent.getIntExtra(BluetoothAdapter.EXTRA_STATE, -1);
-            setCurrentState(context, bluetoothStateToFiveState(bluetoothState));
-        }
-
-        /**
-         * Converts BluetoothAdapter's state values into our
-         * Wifi/Bluetooth-common state values.
-         */
-        private static int bluetoothStateToFiveState(int bluetoothState) {
-            switch (bluetoothState) {
-                case BluetoothAdapter.STATE_OFF:
-                    return STATE_DISABLED;
-                case BluetoothAdapter.STATE_ON:
-                    return STATE_ENABLED;
-                case BluetoothAdapter.STATE_TURNING_ON:
-                    return STATE_TURNING_ON;
-                case BluetoothAdapter.STATE_TURNING_OFF:
-                    return STATE_TURNING_OFF;
-                default:
-                    return STATE_UNKNOWN;
-            }
-        }
-    }
-
-    /**
-     * Subclass of StateTracker for location state.
-     */
-    private static final class LocationStateTracker extends StateTracker {
-        private int mCurrentLocationMode = Settings.Secure.LOCATION_MODE_OFF;
-
-        public int getContainerId() { return R.id.btn_location; }
-        public int getButtonId() { return R.id.img_location; }
-        public int getIndicatorId() { return R.id.ind_location; }
-        public int getButtonDescription() { return R.string.gadget_location; }
-        public int getButtonImageId(boolean on) {
-            if (on) {
-                switch (mCurrentLocationMode) {
-                    case Settings.Secure.LOCATION_MODE_HIGH_ACCURACY:
-                    case Settings.Secure.LOCATION_MODE_SENSORS_ONLY:
-                        return R.drawable.ic_appwidget_settings_location_on_holo;
-                    default:
-                        return R.drawable.ic_appwidget_settings_location_saving_holo;
-                }
-            }
-
-            return R.drawable.ic_appwidget_settings_location_off_holo;
-        }
-
-        @Override
-        public int getActualState(Context context) {
-            ContentResolver resolver = context.getContentResolver();
-            mCurrentLocationMode = Settings.Secure.getInt(resolver,
-                    Settings.Secure.LOCATION_MODE, Settings.Secure.LOCATION_MODE_OFF);
-            return (mCurrentLocationMode == Settings.Secure.LOCATION_MODE_OFF)
-                    ? STATE_DISABLED : STATE_ENABLED;
-        }
-
-        @Override
-        public void onActualStateChange(Context context, Intent unused) {
-            // Note: the broadcast location providers changed intent
-            // doesn't include an extras bundles saying what the new value is.
-            setCurrentState(context, getActualState(context));
-        }
-
-        @Override
-        public void requestStateChange(final Context context, final boolean desiredState) {
-            final ContentResolver resolver = context.getContentResolver();
-            new AsyncTask<Void, Void, Boolean>() {
-                @Override
-                protected Boolean doInBackground(Void... args) {
-                    final UserManager um =
-                            (UserManager) context.getSystemService(Context.USER_SERVICE);
-                    if (!um.hasUserRestriction(UserManager.DISALLOW_SHARE_LOCATION)) {
-                        LocationManager lm =
-                                (LocationManager) context.getSystemService(
-                                        Context.LOCATION_SERVICE);
-                        boolean currentLocationEnabled = lm.isLocationEnabled();
-                        lm.setLocationEnabledForUser(
-                                !currentLocationEnabled, Process.myUserHandle());
-                        return lm.isLocationEnabled();
-                    }
-                    return getActualState(context) == STATE_ENABLED;
-                }
-
-                @Override
-                protected void onPostExecute(Boolean result) {
-                    setCurrentState(
-                        context,
-                        result ? STATE_ENABLED : STATE_DISABLED);
-                    updateWidget(context);
-                }
-            }.execute();
-        }
-    }
-
-    /**
-     * Subclass of StateTracker for sync state.
-     */
-    private static final class SyncStateTracker extends StateTracker {
-        public int getContainerId() { return R.id.btn_sync; }
-        public int getButtonId() { return R.id.img_sync; }
-        public int getIndicatorId() { return R.id.ind_sync; }
-        public int getButtonDescription() { return R.string.gadget_sync; }
-        public int getButtonImageId(boolean on) {
-            return on ? R.drawable.ic_appwidget_settings_sync_on_holo
-                    : R.drawable.ic_appwidget_settings_sync_off_holo;
-        }
-
-        @Override
-        public int getActualState(Context context) {
-            boolean on = ContentResolver.getMasterSyncAutomatically();
-            return on ? STATE_ENABLED : STATE_DISABLED;
-        }
-
-        @Override
-        public void onActualStateChange(Context context, Intent unused) {
-            setCurrentState(context, getActualState(context));
-        }
-
-        @Override
-        public void requestStateChange(final Context context, final boolean desiredState) {
-            final ConnectivityManager connManager =
-                    (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
-            final boolean sync = ContentResolver.getMasterSyncAutomatically();
-
-            new AsyncTask<Void, Void, Boolean>() {
-                @Override
-                protected Boolean doInBackground(Void... args) {
-                    // Turning sync on.
-                    if (desiredState) {
-                        if (!sync) {
-                            ContentResolver.setMasterSyncAutomatically(true);
-                        }
-                        return true;
-                    }
-
-                    // Turning sync off
-                    if (sync) {
-                        ContentResolver.setMasterSyncAutomatically(false);
-                    }
-                    return false;
-                }
-
-                @Override
-                protected void onPostExecute(Boolean result) {
-                    setCurrentState(
-                        context,
-                        result ? STATE_ENABLED : STATE_DISABLED);
-                    updateWidget(context);
-                }
-            }.execute();
-        }
-    }
-
-    private static void checkObserver(Context context) {
-        if (sSettingsObserver == null) {
-            sSettingsObserver = new SettingsObserver(new Handler(),
-                    context.getApplicationContext());
-            sSettingsObserver.startObserving();
-        }
-    }
-
-    @Override
-    public void onUpdate(Context context, AppWidgetManager appWidgetManager,
-            int[] appWidgetIds) {
-        // Update each requested appWidgetId
-        RemoteViews view = buildUpdate(context);
-
-        for (int i = 0; i < appWidgetIds.length; i++) {
-            appWidgetManager.updateAppWidget(appWidgetIds[i], view);
-        }
-    }
-
-    @Override
-    public void onEnabled(Context context) {
-        checkObserver(context);
-    }
-
-    @Override
-    public void onDisabled(Context context) {
-        if (sSettingsObserver != null) {
-            sSettingsObserver.stopObserving();
-            sSettingsObserver = null;
-        }
-    }
-
-    /**
-     * Load image for given widget and build {@link RemoteViews} for it.
-     */
-    static RemoteViews buildUpdate(Context context) {
-        RemoteViews views = new RemoteViews(context.getPackageName(),
-                R.layout.widget);
-        views.setOnClickPendingIntent(R.id.btn_wifi, getLaunchPendingIntent(context,
-                BUTTON_WIFI));
-        views.setOnClickPendingIntent(R.id.btn_brightness,
-                getLaunchPendingIntent(context,
-                        BUTTON_BRIGHTNESS));
-        views.setOnClickPendingIntent(R.id.btn_sync,
-                getLaunchPendingIntent(context,
-                        BUTTON_SYNC));
-        views.setOnClickPendingIntent(R.id.btn_location,
-                getLaunchPendingIntent(context, BUTTON_LOCATION));
-        views.setOnClickPendingIntent(R.id.btn_bluetooth,
-                getLaunchPendingIntent(context,
-                        BUTTON_BLUETOOTH));
-
-        updateButtons(views, context);
-        return views;
-    }
-
-    /**
-     * Updates the widget when something changes, or when a button is pushed.
-     *
-     * @param context
-     */
-    public static void updateWidget(Context context) {
-        RemoteViews views = buildUpdate(context);
-        // Update specific list of appWidgetIds if given, otherwise default to all
-        final AppWidgetManager gm = AppWidgetManager.getInstance(context);
-        gm.updateAppWidget(THIS_APPWIDGET, views);
-        checkObserver(context);
-    }
-
-    /**
-     * Updates the buttons based on the underlying states of wifi, etc.
-     *
-     * @param views   The RemoteViews to update.
-     * @param context
-     */
-    private static void updateButtons(RemoteViews views, Context context) {
-        sWifiState.setImageViewResources(context, views);
-        sBluetoothState.setImageViewResources(context, views);
-        sLocationState.setImageViewResources(context, views);
-        sSyncState.setImageViewResources(context, views);
-
-        if (getBrightnessMode(context)) {
-            views.setContentDescription(R.id.btn_brightness,
-                    context.getString(R.string.gadget_brightness_template,
-                            context.getString(R.string.gadget_brightness_state_auto)));
-            views.setImageViewResource(R.id.img_brightness,
-                    R.drawable.ic_appwidget_settings_brightness_auto_holo);
-            views.setImageViewResource(R.id.ind_brightness,
-                    R.drawable.appwidget_settings_ind_on_r_holo);
-        } else {
-            final int brightness = getBrightness(context);
-            final PowerManager pm = context.getSystemService(PowerManager.class);
-            // Set the icon
-            final int full = (int)(pm.getMaximumScreenBrightnessSetting()
-                    * FULL_BRIGHTNESS_THRESHOLD);
-            final int half = (int)(pm.getMaximumScreenBrightnessSetting()
-                    * HALF_BRIGHTNESS_THRESHOLD);
-            if (brightness > full) {
-                views.setContentDescription(R.id.btn_brightness,
-                        context.getString(R.string.gadget_brightness_template,
-                                context.getString(R.string.gadget_brightness_state_full)));
-                views.setImageViewResource(R.id.img_brightness,
-                        R.drawable.ic_appwidget_settings_brightness_full_holo);
-            } else if (brightness > half) {
-                views.setContentDescription(R.id.btn_brightness,
-                        context.getString(R.string.gadget_brightness_template,
-                                context.getString(R.string.gadget_brightness_state_half)));
-                views.setImageViewResource(R.id.img_brightness,
-                        R.drawable.ic_appwidget_settings_brightness_half_holo);
-            } else {
-                views.setContentDescription(R.id.btn_brightness,
-                        context.getString(R.string.gadget_brightness_template,
-                                context.getString(R.string.gadget_brightness_state_off)));
-                views.setImageViewResource(R.id.img_brightness,
-                        R.drawable.ic_appwidget_settings_brightness_off_holo);
-            }
-            // Set the ON state
-            if (brightness > half) {
-                views.setImageViewResource(R.id.ind_brightness,
-                        R.drawable.appwidget_settings_ind_on_r_holo);
-            } else {
-                views.setImageViewResource(R.id.ind_brightness,
-                        R.drawable.appwidget_settings_ind_off_r_holo);
-            }
-        }
-    }
-
-    /**
-     * Creates PendingIntent to notify the widget of a button click.
-     *
-     * @param context
-     * @return
-     */
-    private static PendingIntent getLaunchPendingIntent(Context context,
-            int buttonId) {
-        Intent launchIntent = new Intent();
-        launchIntent.setClass(context, SettingsAppWidgetProvider.class);
-        launchIntent.addCategory(Intent.CATEGORY_ALTERNATIVE);
-        launchIntent.setData(Uri.parse("custom:" + buttonId));
-        PendingIntent pi = PendingIntent.getBroadcast(context, 0 /* no requestCode */,
-                launchIntent, 0 /* no flags */);
-        return pi;
-    }
-
-    /**
-     * Receives and processes a button pressed intent or state change.
-     *
-     * @param context
-     * @param intent  Indicates the pressed button.
-     */
-    @Override
-    public void onReceive(Context context, Intent intent) {
-        super.onReceive(context, intent);
-        String action = intent.getAction();
-        if (WifiManager.WIFI_STATE_CHANGED_ACTION.equals(action)) {
-            sWifiState.onActualStateChange(context, intent);
-        } else if (BluetoothAdapter.ACTION_STATE_CHANGED.equals(action)) {
-            sBluetoothState.onActualStateChange(context, intent);
-        } else if (LocationManager.MODE_CHANGED_ACTION.equals(action)) {
-            sLocationState.onActualStateChange(context, intent);
-        } else if (ContentResolver.ACTION_SYNC_CONN_STATUS_CHANGED.equals(action)) {
-            sSyncState.onActualStateChange(context, intent);
-        } else if (intent.hasCategory(Intent.CATEGORY_ALTERNATIVE)) {
-            Uri data = intent.getData();
-            int buttonId = Integer.parseInt(data.getSchemeSpecificPart());
-            if (buttonId == BUTTON_WIFI) {
-                sWifiState.toggleState(context);
-            } else if (buttonId == BUTTON_BRIGHTNESS) {
-                toggleBrightness(context);
-            } else if (buttonId == BUTTON_SYNC) {
-                sSyncState.toggleState(context);
-            } else if (buttonId == BUTTON_LOCATION) {
-                sLocationState.toggleState(context);
-            } else if (buttonId == BUTTON_BLUETOOTH) {
-                sBluetoothState.toggleState(context);
-            }
-        } else {
-            // Don't fall-through to updating the widget.  The Intent
-            // was something unrelated or that our super class took
-            // care of.
-            return;
-        }
-
-        // State changes fall through
-        updateWidget(context);
-    }
-
-    /**
-     * Gets brightness level.
-     *
-     * @param context
-     * @return brightness level between 0 and 255.
-     */
-    private static int getBrightness(Context context) {
-        try {
-            int brightness = Settings.System.getInt(context.getContentResolver(),
-                    Settings.System.SCREEN_BRIGHTNESS);
-            return brightness;
-        } catch (Exception e) {
-        }
-        return 0;
-    }
-
-    /**
-     * Gets state of brightness mode.
-     *
-     * @param context
-     * @return true if auto brightness is on.
-     */
-    private static boolean getBrightnessMode(Context context) {
-        try {
-            int brightnessMode = Settings.System.getInt(context.getContentResolver(),
-                    Settings.System.SCREEN_BRIGHTNESS_MODE);
-            return brightnessMode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
-        } catch (Exception e) {
-            Log.d(TAG, "getBrightnessMode: " + e);
-        }
-        return false;
-    }
-
-    /**
-     * Increases or decreases the brightness.
-     *
-     * @param context
-     */
-    private void toggleBrightness(Context context) {
-        try {
-            DisplayManager dm = context.getSystemService(DisplayManager.class);
-            PowerManager pm = context.getSystemService(PowerManager.class);
-
-            ContentResolver cr = context.getContentResolver();
-            int brightness = Settings.System.getInt(cr,
-                    Settings.System.SCREEN_BRIGHTNESS);
-            int brightnessMode = Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL;
-            //Only get brightness setting if available
-            if (context.getResources().getBoolean(
-                    com.android.internal.R.bool.config_automatic_brightness_available)) {
-                brightnessMode = Settings.System.getInt(cr,
-                        Settings.System.SCREEN_BRIGHTNESS_MODE);
-            }
-
-            // Rotate AUTO -> MINIMUM -> DEFAULT -> MAXIMUM
-            // Technically, not a toggle...
-            if (brightnessMode == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC) {
-                brightness = pm.getMinimumScreenBrightnessSetting();
-                brightnessMode = Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL;
-            } else if (brightness < pm.getDefaultScreenBrightnessSetting()) {
-                brightness = pm.getDefaultScreenBrightnessSetting();
-            } else if (brightness < pm.getMaximumScreenBrightnessSetting()) {
-                brightness = pm.getMaximumScreenBrightnessSetting();
-            } else {
-                brightnessMode = Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
-                brightness = pm.getMinimumScreenBrightnessSetting();
-            }
-
-            if (context.getResources().getBoolean(
-                    com.android.internal.R.bool.config_automatic_brightness_available)) {
-                // Set screen brightness mode (automatic or manual)
-                Settings.System.putInt(context.getContentResolver(),
-                        Settings.System.SCREEN_BRIGHTNESS_MODE,
-                        brightnessMode);
-            } else {
-                // Make sure we set the brightness if automatic mode isn't available
-                brightnessMode = Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL;
-            }
-            if (brightnessMode == Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL) {
-                dm.setTemporaryBrightness(brightness);
-                Settings.System.putInt(cr, Settings.System.SCREEN_BRIGHTNESS, brightness);
-            }
-        } catch (Settings.SettingNotFoundException e) {
-            Log.d(TAG, "toggleBrightness: " + e);
-        }
-    }
-
-    /** Observer to watch for changes to the BRIGHTNESS setting */
-    private static class SettingsObserver extends ContentObserver {
-
-        private Context mContext;
-
-        SettingsObserver(Handler handler, Context context) {
-            super(handler);
-            mContext = context;
-        }
-
-        void startObserving() {
-            ContentResolver resolver = mContext.getContentResolver();
-            // Listen to brightness and brightness mode
-            resolver.registerContentObserver(Settings.System
-                    .getUriFor(Settings.System.SCREEN_BRIGHTNESS), false, this);
-            resolver.registerContentObserver(Settings.System
-                    .getUriFor(Settings.System.SCREEN_BRIGHTNESS_MODE), false, this);
-            resolver.registerContentObserver(Settings.System
-                    .getUriFor(Settings.System.SCREEN_AUTO_BRIGHTNESS_ADJ), false, this);
-        }
-
-        void stopObserving() {
-            mContext.getContentResolver().unregisterContentObserver(this);
-        }
-
-        @Override
-        public void onChange(boolean selfChange) {
-            updateWidget(mContext);
-        }
-    }
-
-}
diff --git a/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java
index a36dbf7..654d9b6 100644
--- a/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/DoubleTapScreenPreferenceControllerTest.java
@@ -17,7 +17,6 @@
 package com.android.settings.gestures;
 
 import static com.android.settings.core.BasePreferenceController.AVAILABLE;
-import static com.android.settings.core.BasePreferenceController.DISABLED_DEPENDENT_SETTING;
 import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Matchers.anyInt;
@@ -59,21 +58,21 @@
     @Test
     public void testIsChecked_configIsSet_shouldReturnTrue() {
         // Set the setting to be enabled.
-        when(mAmbientDisplayConfiguration.pulseOnDoubleTapEnabled(anyInt())).thenReturn(true);
+        when(mAmbientDisplayConfiguration.doubleTapGestureEnabled(anyInt())).thenReturn(true);
 
         assertThat(mController.isChecked()).isTrue();
     }
 
     @Test
     public void testIsChecked_configIsNotSet_shouldReturnFalse() {
-        when(mAmbientDisplayConfiguration.pulseOnDoubleTapEnabled(anyInt())).thenReturn(false);
+        when(mAmbientDisplayConfiguration.doubleTapGestureEnabled(anyInt())).thenReturn(false);
 
         assertThat(mController.isChecked()).isFalse();
     }
 
     @Test
     public void isSuggestionCompleted_ambientDisplay_falseWhenNotVisited() {
-        when(mAmbientDisplayConfiguration.pulseOnDoubleTapAvailable()).thenReturn(true);
+        when(mAmbientDisplayConfiguration.doubleTapSensorAvailable()).thenReturn(true);
         // No stored value in shared preferences if not visited yet.
         final Context context = RuntimeEnvironment.application;
         final SharedPreferences prefs =
@@ -85,7 +84,7 @@
 
     @Test
     public void isSuggestionCompleted_ambientDisplay_trueWhenVisited() {
-        when(mAmbientDisplayConfiguration.pulseOnDoubleTapAvailable()).thenReturn(false);
+        when(mAmbientDisplayConfiguration.doubleTapSensorAvailable()).thenReturn(false);
         final Context context = RuntimeEnvironment.application;
         final SharedPreferences prefs =
                 new SuggestionFeatureProviderImpl(context).getSharedPrefs(context);
@@ -98,18 +97,6 @@
     }
 
     @Test
-    public void canHandleClicks_falseWhenAlwaysOnEnabled() {
-        when(mAmbientDisplayConfiguration.alwaysOnEnabled(anyInt())).thenReturn(true);
-        assertThat(mController.canHandleClicks()).isFalse();
-    }
-
-    @Test
-    public void canHandleClicks_trueWhenAlwaysOnDisabled() {
-        when(mAmbientDisplayConfiguration.alwaysOnEnabled(anyInt())).thenReturn(false);
-        assertThat(mController.canHandleClicks()).isTrue();
-    }
-
-    @Test
     public void getAvailabilityStatus_aodNotSupported_UNSUPPORTED_ON_DEVICE() {
         when(mAmbientDisplayConfiguration.doubleTapSensorAvailable()).thenReturn(false);
         when(mAmbientDisplayConfiguration.ambientDisplayAvailable()).thenReturn(false);
@@ -119,15 +106,6 @@
     }
 
     @Test
-    public void getAvailabilityStatus_aodOn_DISABLED_DEPENDENT_SETTING() {
-        when(mAmbientDisplayConfiguration.doubleTapSensorAvailable()).thenReturn(true);
-        when(mAmbientDisplayConfiguration.ambientDisplayAvailable()).thenReturn(false);
-        final int availabilityStatus = mController.getAvailabilityStatus();
-
-        assertThat(availabilityStatus).isEqualTo(DISABLED_DEPENDENT_SETTING);
-    }
-
-    @Test
     public void getAvailabilityStatus_aodSupported_aodOff_AVAILABLE() {
         when(mAmbientDisplayConfiguration.doubleTapSensorAvailable()).thenReturn(true);
         when(mAmbientDisplayConfiguration.ambientDisplayAvailable()).thenReturn(true);
diff --git a/tests/robotests/src/com/android/settings/gestures/PickupGesturePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/gestures/PickupGesturePreferenceControllerTest.java
index af0146b..17fa7cd 100644
--- a/tests/robotests/src/com/android/settings/gestures/PickupGesturePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/gestures/PickupGesturePreferenceControllerTest.java
@@ -17,7 +17,6 @@
 package com.android.settings.gestures;
 
 import static com.android.settings.core.BasePreferenceController.AVAILABLE;
-import static com.android.settings.core.BasePreferenceController.DISABLED_DEPENDENT_SETTING;
 import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Matchers.anyInt;
@@ -62,7 +61,7 @@
     @Test
     public void testIsChecked_configIsSet_shouldReturnTrue() {
         // Set the setting to be enabled.
-        when(mAmbientDisplayConfiguration.pulseOnPickupEnabled(anyInt())).thenReturn(true);
+        when(mAmbientDisplayConfiguration.pickupGestureEnabled(anyInt())).thenReturn(true);
 
         assertThat(mController.isChecked()).isTrue();
     }
@@ -70,28 +69,12 @@
     @Test
     public void testIsChecked_configIsNotSet_shouldReturnFalse() {
         // Set the setting to be disabled.
-        when(mAmbientDisplayConfiguration.pulseOnPickupEnabled(anyInt())).thenReturn(false);
+        when(mAmbientDisplayConfiguration.pickupGestureEnabled(anyInt())).thenReturn(false);
 
         assertThat(mController.isChecked()).isFalse();
     }
 
     @Test
-    public void testCanHandleClicks_configIsSet_shouldReturnTrue() {
-        mController = spy(mController);
-        doReturn(true).when(mController).pulseOnPickupCanBeModified();
-
-        assertThat(mController.canHandleClicks()).isTrue();
-    }
-
-    @Test
-    public void testCanHandleClicks_configIsNotSet_shouldReturnFalse() {
-        mController = spy(mController);
-        doReturn(false).when(mController).pulseOnPickupCanBeModified();
-
-        assertThat(mController.canHandleClicks()).isFalse();
-    }
-
-    @Test
     public void isSuggestionCompleted_ambientDisplayPickup_trueWhenVisited() {
         when(mContext.getResources().getBoolean(anyInt())).thenReturn(true);
         when(mContext.getResources().getString(anyInt())).thenReturn("foo");
@@ -106,7 +89,7 @@
 
     @Test
     public void getAvailabilityStatus_aodNotSupported_UNSUPPORTED_ON_DEVICE() {
-        when(mAmbientDisplayConfiguration.dozePulsePickupSensorAvailable()).thenReturn(false);
+        when(mAmbientDisplayConfiguration.dozePickupSensorAvailable()).thenReturn(false);
         when(mAmbientDisplayConfiguration.ambientDisplayAvailable()).thenReturn(false);
         final int availabilityStatus = mController.getAvailabilityStatus();
 
@@ -114,17 +97,8 @@
     }
 
     @Test
-    public void getAvailabilityStatus_aodOn_DISABLED_DEPENDENT_SETTING() {
-        when(mAmbientDisplayConfiguration.dozePulsePickupSensorAvailable()).thenReturn(true);
-        when(mAmbientDisplayConfiguration.ambientDisplayAvailable()).thenReturn(false);
-        final int availabilityStatus = mController.getAvailabilityStatus();
-
-        assertThat(availabilityStatus).isEqualTo(DISABLED_DEPENDENT_SETTING);
-    }
-
-    @Test
     public void getAvailabilityStatus_aodSupported_aodOff_AVAILABLE() {
-        when(mAmbientDisplayConfiguration.dozePulsePickupSensorAvailable()).thenReturn(true);
+        when(mAmbientDisplayConfiguration.dozePickupSensorAvailable()).thenReturn(true);
         when(mAmbientDisplayConfiguration.ambientDisplayAvailable()).thenReturn(true);
         final int availabilityStatus = mController.getAvailabilityStatus();
 
