Merge "PeopleActivity: Swipe!"
diff --git a/res/anim/aizy_preview_popup_enter.xml b/res/anim/aizy_preview_popup_enter.xml
deleted file mode 100644
index 194a3a3..0000000
--- a/res/anim/aizy_preview_popup_enter.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2010, 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.
-*/
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:interpolator="@android:anim/accelerate_interpolator">
- <alpha android:fromAlpha="0.0" android:toAlpha="1.0"
- android:duration="@android:integer/config_shortAnimTime" />
-</set>
diff --git a/res/anim/aizy_preview_popup_exit.xml b/res/anim/aizy_preview_popup_exit.xml
deleted file mode 100644
index ed5cda8..0000000
--- a/res/anim/aizy_preview_popup_exit.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 2010, 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.
-*/
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:interpolator="@android:anim/accelerate_interpolator">
- <alpha android:fromAlpha="1.0" android:toAlpha="0.0"
- android:duration="@android:integer/config_longAnimTime" />
-</set>
diff --git a/res/anim/footer_appear.xml b/res/anim/footer_appear.xml
deleted file mode 100644
index 941454a..0000000
--- a/res/anim/footer_appear.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-/*
-** Copyright 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.
-*/
--->
-
-<translate xmlns:android="http://schemas.android.com/apk/res/android"
- android:fromYDelta="+10%p"
- android:toYDelta="0"
- android:duration="300" />
\ No newline at end of file
diff --git a/res/drawable-hdpi/bg_status_contact_widget.9.png b/res/drawable-hdpi/bg_status_contact_widget.9.png
index 5615057..a2853c0 100644
--- a/res/drawable-hdpi/bg_status_contact_widget.9.png
+++ b/res/drawable-hdpi/bg_status_contact_widget.9.png
Binary files differ
diff --git a/res/drawable-hdpi/btn_dial_action_left_disable.9.png b/res/drawable-hdpi/btn_dial_action_left_disable.9.png
deleted file mode 100644
index f693c41..0000000
--- a/res/drawable-hdpi/btn_dial_action_left_disable.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/btn_dial_action_left_disable_focused.9.png b/res/drawable-hdpi/btn_dial_action_left_disable_focused.9.png
deleted file mode 100644
index 67080f7..0000000
--- a/res/drawable-hdpi/btn_dial_action_left_disable_focused.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/btn_dial_action_left_normal.9.png b/res/drawable-hdpi/btn_dial_action_left_normal.9.png
deleted file mode 100644
index 2f17d86..0000000
--- a/res/drawable-hdpi/btn_dial_action_left_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/btn_dial_action_left_pressed.9.png b/res/drawable-hdpi/btn_dial_action_left_pressed.9.png
deleted file mode 100644
index 54f34ed..0000000
--- a/res/drawable-hdpi/btn_dial_action_left_pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/btn_dial_action_left_selected.9.png b/res/drawable-hdpi/btn_dial_action_left_selected.9.png
deleted file mode 100644
index a00bca4..0000000
--- a/res/drawable-hdpi/btn_dial_action_left_selected.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/btn_dial_normal.9.png b/res/drawable-hdpi/btn_dial_normal.9.png
deleted file mode 100644
index aba4382..0000000
--- a/res/drawable-hdpi/btn_dial_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/contacts_widget_preview.png b/res/drawable-hdpi/contacts_widget_preview.png
index 89b2f45..4cc51ad 100644
--- a/res/drawable-hdpi/contacts_widget_preview.png
+++ b/res/drawable-hdpi/contacts_widget_preview.png
Binary files differ
diff --git a/res/drawable-hdpi/dial_num_0_wht.png b/res/drawable-hdpi/dial_num_0_wht.png
index 172457b..b7672e0 100644
--- a/res/drawable-hdpi/dial_num_0_wht.png
+++ b/res/drawable-hdpi/dial_num_0_wht.png
Binary files differ
diff --git a/res/drawable-hdpi/dial_num_1_wht.png b/res/drawable-hdpi/dial_num_1_wht.png
index b05227b..5381f03 100644
--- a/res/drawable-hdpi/dial_num_1_wht.png
+++ b/res/drawable-hdpi/dial_num_1_wht.png
Binary files differ
diff --git a/res/drawable-hdpi/dial_num_2_wht.png b/res/drawable-hdpi/dial_num_2_wht.png
index 59b798f..903f036 100644
--- a/res/drawable-hdpi/dial_num_2_wht.png
+++ b/res/drawable-hdpi/dial_num_2_wht.png
Binary files differ
diff --git a/res/drawable-hdpi/dial_num_3_wht.png b/res/drawable-hdpi/dial_num_3_wht.png
index 4291341..e840f86 100644
--- a/res/drawable-hdpi/dial_num_3_wht.png
+++ b/res/drawable-hdpi/dial_num_3_wht.png
Binary files differ
diff --git a/res/drawable-hdpi/dial_num_4_wht.png b/res/drawable-hdpi/dial_num_4_wht.png
index 9901ba0..45a238a 100644
--- a/res/drawable-hdpi/dial_num_4_wht.png
+++ b/res/drawable-hdpi/dial_num_4_wht.png
Binary files differ
diff --git a/res/drawable-hdpi/dial_num_5_wht.png b/res/drawable-hdpi/dial_num_5_wht.png
index 905b2db..e563242 100644
--- a/res/drawable-hdpi/dial_num_5_wht.png
+++ b/res/drawable-hdpi/dial_num_5_wht.png
Binary files differ
diff --git a/res/drawable-hdpi/dial_num_6_wht.png b/res/drawable-hdpi/dial_num_6_wht.png
index 08e3a6c..e916968 100644
--- a/res/drawable-hdpi/dial_num_6_wht.png
+++ b/res/drawable-hdpi/dial_num_6_wht.png
Binary files differ
diff --git a/res/drawable-hdpi/dial_num_7_wht.png b/res/drawable-hdpi/dial_num_7_wht.png
index 3ba7aa6..090366a 100644
--- a/res/drawable-hdpi/dial_num_7_wht.png
+++ b/res/drawable-hdpi/dial_num_7_wht.png
Binary files differ
diff --git a/res/drawable-hdpi/dial_num_8_wht.png b/res/drawable-hdpi/dial_num_8_wht.png
index 5e670ed..f898450 100644
--- a/res/drawable-hdpi/dial_num_8_wht.png
+++ b/res/drawable-hdpi/dial_num_8_wht.png
Binary files differ
diff --git a/res/drawable-hdpi/dial_num_9_wht.png b/res/drawable-hdpi/dial_num_9_wht.png
index 5a8fc9a..999457c 100644
--- a/res/drawable-hdpi/dial_num_9_wht.png
+++ b/res/drawable-hdpi/dial_num_9_wht.png
Binary files differ
diff --git a/res/drawable-hdpi/dial_num_pound_wht.png b/res/drawable-hdpi/dial_num_pound_wht.png
index 2ddc21d..44aa276 100644
--- a/res/drawable-hdpi/dial_num_pound_wht.png
+++ b/res/drawable-hdpi/dial_num_pound_wht.png
Binary files differ
diff --git a/res/drawable-hdpi/dial_num_star_wht.png b/res/drawable-hdpi/dial_num_star_wht.png
index 832031f..edd6e06 100644
--- a/res/drawable-hdpi/dial_num_star_wht.png
+++ b/res/drawable-hdpi/dial_num_star_wht.png
Binary files differ
diff --git a/res/drawable-hdpi/frame_thumbnail_contact_widget_focused_holo.png b/res/drawable-hdpi/frame_thumbnail_contact_widget_focused_holo.png
index e2a9fe0..352d4d9 100644
--- a/res/drawable-hdpi/frame_thumbnail_contact_widget_focused_holo.png
+++ b/res/drawable-hdpi/frame_thumbnail_contact_widget_focused_holo.png
Binary files differ
diff --git a/res/drawable-hdpi/frame_thumbnail_contact_widget_holo.png b/res/drawable-hdpi/frame_thumbnail_contact_widget_holo.png
new file mode 100644
index 0000000..d4223e1
--- /dev/null
+++ b/res/drawable-hdpi/frame_thumbnail_contact_widget_holo.png
Binary files differ
diff --git a/res/drawable-hdpi/frame_thumbnail_contact_widget_pressed_holo.png b/res/drawable-hdpi/frame_thumbnail_contact_widget_pressed_holo.png
index 1f5b5f9..5f0966f 100644
--- a/res/drawable-hdpi/frame_thumbnail_contact_widget_pressed_holo.png
+++ b/res/drawable-hdpi/frame_thumbnail_contact_widget_pressed_holo.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_call_incoming_holo_dark.png b/res/drawable-hdpi/ic_call_incoming_holo_dark.png
new file mode 100644
index 0000000..df6f190
--- /dev/null
+++ b/res/drawable-hdpi/ic_call_incoming_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_call_log_list_incoming_call.png b/res/drawable-hdpi/ic_call_log_list_incoming_call.png
old mode 100644
new mode 100755
index 624a0c5..15b5e44
--- a/res/drawable-hdpi/ic_call_log_list_incoming_call.png
+++ b/res/drawable-hdpi/ic_call_log_list_incoming_call.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_call_log_list_missed_call.png b/res/drawable-hdpi/ic_call_log_list_missed_call.png
old mode 100644
new mode 100755
index bd572cd..8dcb279
--- a/res/drawable-hdpi/ic_call_log_list_missed_call.png
+++ b/res/drawable-hdpi/ic_call_log_list_missed_call.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_call_log_list_outgoing_call.png b/res/drawable-hdpi/ic_call_log_list_outgoing_call.png
old mode 100644
new mode 100755
index 1a93a78..160c707
--- a/res/drawable-hdpi/ic_call_log_list_outgoing_call.png
+++ b/res/drawable-hdpi/ic_call_log_list_outgoing_call.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_call_missed_holo_dark.png b/res/drawable-hdpi/ic_call_missed_holo_dark.png
new file mode 100644
index 0000000..a6bdb8d
--- /dev/null
+++ b/res/drawable-hdpi/ic_call_missed_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_call_outgoing_holo_dark.png b/res/drawable-hdpi/ic_call_outgoing_holo_dark.png
new file mode 100644
index 0000000..657655d
--- /dev/null
+++ b/res/drawable-hdpi/ic_call_outgoing_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_call_voicemail_holo_dark.png b/res/drawable-hdpi/ic_call_voicemail_holo_dark.png
new file mode 100644
index 0000000..734050d
--- /dev/null
+++ b/res/drawable-hdpi/ic_call_voicemail_holo_dark.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_dial_action_voice_mail.png b/res/drawable-hdpi/ic_dial_action_voice_mail.png
deleted file mode 100644
index 6607bb8..0000000
--- a/res/drawable-hdpi/ic_dial_action_voice_mail.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_launcher_contacts.png b/res/drawable-hdpi/ic_launcher_contacts.png
new file mode 100644
index 0000000..3e1ea44
--- /dev/null
+++ b/res/drawable-hdpi/ic_launcher_contacts.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_launcher_folder_live_contacts.png b/res/drawable-hdpi/ic_launcher_folder_live_contacts.png
new file mode 100644
index 0000000..84babe2
--- /dev/null
+++ b/res/drawable-hdpi/ic_launcher_folder_live_contacts.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_launcher_folder_live_contacts_phone.png b/res/drawable-hdpi/ic_launcher_folder_live_contacts_phone.png
new file mode 100644
index 0000000..004e849
--- /dev/null
+++ b/res/drawable-hdpi/ic_launcher_folder_live_contacts_phone.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_launcher_folder_live_contacts_starred.png b/res/drawable-hdpi/ic_launcher_folder_live_contacts_starred.png
new file mode 100644
index 0000000..73b4fa5
--- /dev/null
+++ b/res/drawable-hdpi/ic_launcher_folder_live_contacts_starred.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_launcher_shortcut_contact.png b/res/drawable-hdpi/ic_launcher_shortcut_contact.png
new file mode 100644
index 0000000..d86b264
--- /dev/null
+++ b/res/drawable-hdpi/ic_launcher_shortcut_contact.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_launcher_shortcut_directdial.png b/res/drawable-hdpi/ic_launcher_shortcut_directdial.png
new file mode 100644
index 0000000..e7ff8f8
--- /dev/null
+++ b/res/drawable-hdpi/ic_launcher_shortcut_directdial.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_launcher_shortcut_directmessage.png b/res/drawable-hdpi/ic_launcher_shortcut_directmessage.png
new file mode 100644
index 0000000..5170a75
--- /dev/null
+++ b/res/drawable-hdpi/ic_launcher_shortcut_directmessage.png
Binary files differ
diff --git a/res/drawable-hdpi/list_item_divider_holo.9.png b/res/drawable-hdpi/list_item_divider_holo.9.png
deleted file mode 100644
index f5130d5..0000000
--- a/res/drawable-hdpi/list_item_divider_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/list_title_holo.9.png b/res/drawable-hdpi/list_title_holo.9.png
index ebdd4e3..ae93717 100644
--- a/res/drawable-hdpi/list_title_holo.9.png
+++ b/res/drawable-hdpi/list_title_holo.9.png
Binary files differ
diff --git a/res/drawable-hdpi/panel_content.9.png b/res/drawable-hdpi/panel_content.9.png
index 4a9b90a..8c412ed 100644
--- a/res/drawable-hdpi/panel_content.9.png
+++ b/res/drawable-hdpi/panel_content.9.png
Binary files differ
diff --git a/res/drawable-hdpi/quickactions_icon_activated.9.png b/res/drawable-hdpi/quickactions_icon_activated.9.png
index b9ccc80..dd68562 100644
--- a/res/drawable-hdpi/quickactions_icon_activated.9.png
+++ b/res/drawable-hdpi/quickactions_icon_activated.9.png
Binary files differ
diff --git a/res/drawable-hdpi/section_header_holo.9.png b/res/drawable-hdpi/section_header_holo.9.png
deleted file mode 100644
index de12d0e..0000000
--- a/res/drawable-hdpi/section_header_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/statusbox_landscape_holo_light.9.png b/res/drawable-hdpi/statusbox_landscape_holo_light.9.png
index 9fa578c..12001e6 100644
--- a/res/drawable-hdpi/statusbox_landscape_holo_light.9.png
+++ b/res/drawable-hdpi/statusbox_landscape_holo_light.9.png
Binary files differ
diff --git a/res/drawable-hdpi/statusbox_portrait_holo_light.9.png b/res/drawable-hdpi/statusbox_portrait_holo_light.9.png
index 614bc59..6dcb8c0 100644
--- a/res/drawable-hdpi/statusbox_portrait_holo_light.9.png
+++ b/res/drawable-hdpi/statusbox_portrait_holo_light.9.png
Binary files differ
diff --git a/res/drawable-hdpi/title_bar_medium.9.png b/res/drawable-hdpi/title_bar_medium.9.png
deleted file mode 100644
index 311a54a..0000000
--- a/res/drawable-hdpi/title_bar_medium.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/title_bar_shadow.9.png b/res/drawable-hdpi/title_bar_shadow.9.png
deleted file mode 100755
index a5e458a..0000000
--- a/res/drawable-hdpi/title_bar_shadow.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/btn_dial_action_left_disable.9.png b/res/drawable-mdpi/btn_dial_action_left_disable.9.png
deleted file mode 100644
index 8eb45c8..0000000
--- a/res/drawable-mdpi/btn_dial_action_left_disable.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/btn_dial_action_left_disable_focused.9.png b/res/drawable-mdpi/btn_dial_action_left_disable_focused.9.png
deleted file mode 100644
index b9951ef..0000000
--- a/res/drawable-mdpi/btn_dial_action_left_disable_focused.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/btn_dial_action_left_normal.9.png b/res/drawable-mdpi/btn_dial_action_left_normal.9.png
deleted file mode 100644
index 5f091f2..0000000
--- a/res/drawable-mdpi/btn_dial_action_left_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/btn_dial_action_left_pressed.9.png b/res/drawable-mdpi/btn_dial_action_left_pressed.9.png
deleted file mode 100644
index c84bbfe..0000000
--- a/res/drawable-mdpi/btn_dial_action_left_pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/btn_dial_action_left_selected.9.png b/res/drawable-mdpi/btn_dial_action_left_selected.9.png
deleted file mode 100644
index 1960abc..0000000
--- a/res/drawable-mdpi/btn_dial_action_left_selected.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/btn_dial_normal.9.png b/res/drawable-mdpi/btn_dial_normal.9.png
deleted file mode 100644
index 68dccee..0000000
--- a/res/drawable-mdpi/btn_dial_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/dial_background_texture.png b/res/drawable-mdpi/dial_background_texture.png
index ea27fd2..de6b72a 100644
--- a/res/drawable-mdpi/dial_background_texture.png
+++ b/res/drawable-mdpi/dial_background_texture.png
Binary files differ
diff --git a/res/drawable-mdpi/dial_num_0_wht.png b/res/drawable-mdpi/dial_num_0_wht.png
index f37be81..eff8c59 100644
--- a/res/drawable-mdpi/dial_num_0_wht.png
+++ b/res/drawable-mdpi/dial_num_0_wht.png
Binary files differ
diff --git a/res/drawable-mdpi/dial_num_1_wht.png b/res/drawable-mdpi/dial_num_1_wht.png
index 3e11285..fe79a16 100644
--- a/res/drawable-mdpi/dial_num_1_wht.png
+++ b/res/drawable-mdpi/dial_num_1_wht.png
Binary files differ
diff --git a/res/drawable-mdpi/dial_num_2_wht.png b/res/drawable-mdpi/dial_num_2_wht.png
index bfcf48f..759ed42 100644
--- a/res/drawable-mdpi/dial_num_2_wht.png
+++ b/res/drawable-mdpi/dial_num_2_wht.png
Binary files differ
diff --git a/res/drawable-mdpi/dial_num_3_wht.png b/res/drawable-mdpi/dial_num_3_wht.png
index c37fdcf..5cddb1d 100644
--- a/res/drawable-mdpi/dial_num_3_wht.png
+++ b/res/drawable-mdpi/dial_num_3_wht.png
Binary files differ
diff --git a/res/drawable-mdpi/dial_num_4_wht.png b/res/drawable-mdpi/dial_num_4_wht.png
index d4144ee..10878ec 100644
--- a/res/drawable-mdpi/dial_num_4_wht.png
+++ b/res/drawable-mdpi/dial_num_4_wht.png
Binary files differ
diff --git a/res/drawable-mdpi/dial_num_5_wht.png b/res/drawable-mdpi/dial_num_5_wht.png
index 3984429..514744b 100644
--- a/res/drawable-mdpi/dial_num_5_wht.png
+++ b/res/drawable-mdpi/dial_num_5_wht.png
Binary files differ
diff --git a/res/drawable-mdpi/dial_num_6_wht.png b/res/drawable-mdpi/dial_num_6_wht.png
index dfd95f9..8877c64 100644
--- a/res/drawable-mdpi/dial_num_6_wht.png
+++ b/res/drawable-mdpi/dial_num_6_wht.png
Binary files differ
diff --git a/res/drawable-mdpi/dial_num_7_wht.png b/res/drawable-mdpi/dial_num_7_wht.png
index 9bf517f..0e76d7d 100644
--- a/res/drawable-mdpi/dial_num_7_wht.png
+++ b/res/drawable-mdpi/dial_num_7_wht.png
Binary files differ
diff --git a/res/drawable-mdpi/dial_num_8_wht.png b/res/drawable-mdpi/dial_num_8_wht.png
index 0077cc5..62ea5fd 100644
--- a/res/drawable-mdpi/dial_num_8_wht.png
+++ b/res/drawable-mdpi/dial_num_8_wht.png
Binary files differ
diff --git a/res/drawable-mdpi/dial_num_9_wht.png b/res/drawable-mdpi/dial_num_9_wht.png
index 0c4e43f..53194a4 100644
--- a/res/drawable-mdpi/dial_num_9_wht.png
+++ b/res/drawable-mdpi/dial_num_9_wht.png
Binary files differ
diff --git a/res/drawable-mdpi/dial_num_pound_wht.png b/res/drawable-mdpi/dial_num_pound_wht.png
index e2c65ad..9dfd878 100644
--- a/res/drawable-mdpi/dial_num_pound_wht.png
+++ b/res/drawable-mdpi/dial_num_pound_wht.png
Binary files differ
diff --git a/res/drawable-mdpi/dial_num_star_wht.png b/res/drawable-mdpi/dial_num_star_wht.png
index 1c9a09a..cbb21da 100644
--- a/res/drawable-mdpi/dial_num_star_wht.png
+++ b/res/drawable-mdpi/dial_num_star_wht.png
Binary files differ
diff --git a/res/drawable-mdpi/frame_thumbnail_contact_widget_holo.png b/res/drawable-mdpi/frame_thumbnail_contact_widget_holo.png
new file mode 100644
index 0000000..a62834c
--- /dev/null
+++ b/res/drawable-mdpi/frame_thumbnail_contact_widget_holo.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_call_incoming_holo_dark.png b/res/drawable-mdpi/ic_call_incoming_holo_dark.png
new file mode 100644
index 0000000..055f9c6
--- /dev/null
+++ b/res/drawable-mdpi/ic_call_incoming_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_call_log_list_incoming_call.png b/res/drawable-mdpi/ic_call_log_list_incoming_call.png
index 77be776..c7eec52 100644
--- a/res/drawable-mdpi/ic_call_log_list_incoming_call.png
+++ b/res/drawable-mdpi/ic_call_log_list_incoming_call.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_call_log_list_missed_call.png b/res/drawable-mdpi/ic_call_log_list_missed_call.png
index 66c8d85..1907a62 100644
--- a/res/drawable-mdpi/ic_call_log_list_missed_call.png
+++ b/res/drawable-mdpi/ic_call_log_list_missed_call.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_call_log_list_outgoing_call.png b/res/drawable-mdpi/ic_call_log_list_outgoing_call.png
index a7f85b2..041d086 100644
--- a/res/drawable-mdpi/ic_call_log_list_outgoing_call.png
+++ b/res/drawable-mdpi/ic_call_log_list_outgoing_call.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_call_missed_holo_dark.png b/res/drawable-mdpi/ic_call_missed_holo_dark.png
new file mode 100644
index 0000000..ab098ee
--- /dev/null
+++ b/res/drawable-mdpi/ic_call_missed_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_call_outgoing_holo_dark.png b/res/drawable-mdpi/ic_call_outgoing_holo_dark.png
new file mode 100644
index 0000000..aaf2b87
--- /dev/null
+++ b/res/drawable-mdpi/ic_call_outgoing_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_call_voicemail_holo_dark.png b/res/drawable-mdpi/ic_call_voicemail_holo_dark.png
new file mode 100644
index 0000000..bb566bb
--- /dev/null
+++ b/res/drawable-mdpi/ic_call_voicemail_holo_dark.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_dial_action_voice_mail.png b/res/drawable-mdpi/ic_dial_action_voice_mail.png
deleted file mode 100644
index cb07d1a..0000000
--- a/res/drawable-mdpi/ic_dial_action_voice_mail.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_launcher_contacts.png b/res/drawable-mdpi/ic_launcher_contacts.png
new file mode 100644
index 0000000..618630f
--- /dev/null
+++ b/res/drawable-mdpi/ic_launcher_contacts.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_launcher_folder_live_contacts.png b/res/drawable-mdpi/ic_launcher_folder_live_contacts.png
new file mode 100644
index 0000000..d49cc7b
--- /dev/null
+++ b/res/drawable-mdpi/ic_launcher_folder_live_contacts.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_launcher_folder_live_contacts_phone.png b/res/drawable-mdpi/ic_launcher_folder_live_contacts_phone.png
new file mode 100644
index 0000000..0127f84
--- /dev/null
+++ b/res/drawable-mdpi/ic_launcher_folder_live_contacts_phone.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_launcher_folder_live_contacts_starred.png b/res/drawable-mdpi/ic_launcher_folder_live_contacts_starred.png
new file mode 100644
index 0000000..8d56b31
--- /dev/null
+++ b/res/drawable-mdpi/ic_launcher_folder_live_contacts_starred.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_launcher_shortcut_contact.png b/res/drawable-mdpi/ic_launcher_shortcut_contact.png
new file mode 100644
index 0000000..20d359d
--- /dev/null
+++ b/res/drawable-mdpi/ic_launcher_shortcut_contact.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_launcher_shortcut_directdial.png b/res/drawable-mdpi/ic_launcher_shortcut_directdial.png
new file mode 100644
index 0000000..7081c08
--- /dev/null
+++ b/res/drawable-mdpi/ic_launcher_shortcut_directdial.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_launcher_shortcut_directmessage.png b/res/drawable-mdpi/ic_launcher_shortcut_directmessage.png
new file mode 100644
index 0000000..374c7c4
--- /dev/null
+++ b/res/drawable-mdpi/ic_launcher_shortcut_directmessage.png
Binary files differ
diff --git a/res/drawable-mdpi/list_item_divider_holo.9.png b/res/drawable-mdpi/list_item_divider_holo.9.png
deleted file mode 100644
index f5130d5..0000000
--- a/res/drawable-mdpi/list_item_divider_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/list_title_holo.9.png b/res/drawable-mdpi/list_title_holo.9.png
index e866452..64bd691 100644
--- a/res/drawable-mdpi/list_title_holo.9.png
+++ b/res/drawable-mdpi/list_title_holo.9.png
Binary files differ
diff --git a/res/drawable-mdpi/panel_content.9.png b/res/drawable-mdpi/panel_content.9.png
index 1d30d5f..12604ad 100644
--- a/res/drawable-mdpi/panel_content.9.png
+++ b/res/drawable-mdpi/panel_content.9.png
Binary files differ
diff --git a/res/drawable-mdpi/quickactions_icon_activated.9.png b/res/drawable-mdpi/quickactions_icon_activated.9.png
index 777c988..00479b8 100644
--- a/res/drawable-mdpi/quickactions_icon_activated.9.png
+++ b/res/drawable-mdpi/quickactions_icon_activated.9.png
Binary files differ
diff --git a/res/drawable-mdpi/section_header_holo.9.png b/res/drawable-mdpi/section_header_holo.9.png
deleted file mode 100644
index de12d0e..0000000
--- a/res/drawable-mdpi/section_header_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/statusbox_attribute_holo.9.png b/res/drawable-mdpi/statusbox_attribute_holo.9.png
index b124392..bc5e10f 100644
--- a/res/drawable-mdpi/statusbox_attribute_holo.9.png
+++ b/res/drawable-mdpi/statusbox_attribute_holo.9.png
Binary files differ
diff --git a/res/drawable-mdpi/statusbox_landscape_holo_light.9.png b/res/drawable-mdpi/statusbox_landscape_holo_light.9.png
index 49546e5..e274c84 100644
--- a/res/drawable-mdpi/statusbox_landscape_holo_light.9.png
+++ b/res/drawable-mdpi/statusbox_landscape_holo_light.9.png
Binary files differ
diff --git a/res/drawable-mdpi/statusbox_portrait_holo_light.9.png b/res/drawable-mdpi/statusbox_portrait_holo_light.9.png
index 902e559..803b866 100644
--- a/res/drawable-mdpi/statusbox_portrait_holo_light.9.png
+++ b/res/drawable-mdpi/statusbox_portrait_holo_light.9.png
Binary files differ
diff --git a/res/drawable-mdpi/title_bar_medium.9.png b/res/drawable-mdpi/title_bar_medium.9.png
deleted file mode 100644
index 2d41d02..0000000
--- a/res/drawable-mdpi/title_bar_medium.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/title_bar_shadow.9.png b/res/drawable-mdpi/title_bar_shadow.9.png
deleted file mode 100644
index 0872366..0000000
--- a/res/drawable-mdpi/title_bar_shadow.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/aggregation_suggestions_bg.9.png b/res/drawable-xhdpi/aggregation_suggestions_bg.9.png
index d3be1d6..816cc0b 100644
--- a/res/drawable-xhdpi/aggregation_suggestions_bg.9.png
+++ b/res/drawable-xhdpi/aggregation_suggestions_bg.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/aggregation_suggestions_bg_light_holo.9.png b/res/drawable-xhdpi/aggregation_suggestions_bg_light_holo.9.png
index 14e1386..94ae50a 100644
--- a/res/drawable-xhdpi/aggregation_suggestions_bg_light_holo.9.png
+++ b/res/drawable-xhdpi/aggregation_suggestions_bg_light_holo.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/bg_blk_search_contact.9.png b/res/drawable-xhdpi/bg_blk_search_contact.9.png
index 691a89c..fc3a05e 100644
--- a/res/drawable-xhdpi/bg_blk_search_contact.9.png
+++ b/res/drawable-xhdpi/bg_blk_search_contact.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/bg_status_contact_widget.9.png b/res/drawable-xhdpi/bg_status_contact_widget.9.png
index c735ce3..db34bf4 100644
--- a/res/drawable-xhdpi/bg_status_contact_widget.9.png
+++ b/res/drawable-xhdpi/bg_status_contact_widget.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/btn_dial_action_left_disable.9.png b/res/drawable-xhdpi/btn_dial_action_left_disable.9.png
deleted file mode 100644
index e6dd9a2..0000000
--- a/res/drawable-xhdpi/btn_dial_action_left_disable.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/btn_dial_action_left_disable_focused.9.png b/res/drawable-xhdpi/btn_dial_action_left_disable_focused.9.png
deleted file mode 100644
index c369c17..0000000
--- a/res/drawable-xhdpi/btn_dial_action_left_disable_focused.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/btn_dial_action_left_normal.9.png b/res/drawable-xhdpi/btn_dial_action_left_normal.9.png
deleted file mode 100644
index cdc0d1f..0000000
--- a/res/drawable-xhdpi/btn_dial_action_left_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/btn_dial_action_left_pressed.9.png b/res/drawable-xhdpi/btn_dial_action_left_pressed.9.png
deleted file mode 100644
index 63af3aa..0000000
--- a/res/drawable-xhdpi/btn_dial_action_left_pressed.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/btn_dial_action_left_selected.9.png b/res/drawable-xhdpi/btn_dial_action_left_selected.9.png
deleted file mode 100644
index 05ecf0c..0000000
--- a/res/drawable-xhdpi/btn_dial_action_left_selected.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/btn_dial_action_middle_disable.9.png b/res/drawable-xhdpi/btn_dial_action_middle_disable.9.png
index baa74b1..6da4265 100644
--- a/res/drawable-xhdpi/btn_dial_action_middle_disable.9.png
+++ b/res/drawable-xhdpi/btn_dial_action_middle_disable.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/btn_dial_action_middle_disable_focused.9.png b/res/drawable-xhdpi/btn_dial_action_middle_disable_focused.9.png
index 4519af8..cddf893 100644
--- a/res/drawable-xhdpi/btn_dial_action_middle_disable_focused.9.png
+++ b/res/drawable-xhdpi/btn_dial_action_middle_disable_focused.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/btn_dial_action_middle_normal.9.png b/res/drawable-xhdpi/btn_dial_action_middle_normal.9.png
index 87a1eb6..dc39b98 100644
--- a/res/drawable-xhdpi/btn_dial_action_middle_normal.9.png
+++ b/res/drawable-xhdpi/btn_dial_action_middle_normal.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/btn_dial_action_middle_pressed.9.png b/res/drawable-xhdpi/btn_dial_action_middle_pressed.9.png
index f4ba914..f092867 100644
--- a/res/drawable-xhdpi/btn_dial_action_middle_pressed.9.png
+++ b/res/drawable-xhdpi/btn_dial_action_middle_pressed.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/btn_dial_action_middle_selected.9.png b/res/drawable-xhdpi/btn_dial_action_middle_selected.9.png
index bcd55d1..9577eda 100644
--- a/res/drawable-xhdpi/btn_dial_action_middle_selected.9.png
+++ b/res/drawable-xhdpi/btn_dial_action_middle_selected.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/btn_dial_action_right_disable.9.png b/res/drawable-xhdpi/btn_dial_action_right_disable.9.png
index 96da3e5..fdcd395 100644
--- a/res/drawable-xhdpi/btn_dial_action_right_disable.9.png
+++ b/res/drawable-xhdpi/btn_dial_action_right_disable.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/btn_dial_action_right_disable_focused.9.png b/res/drawable-xhdpi/btn_dial_action_right_disable_focused.9.png
index a91cade..9f4eeb0 100644
--- a/res/drawable-xhdpi/btn_dial_action_right_disable_focused.9.png
+++ b/res/drawable-xhdpi/btn_dial_action_right_disable_focused.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/btn_dial_action_right_normal.9.png b/res/drawable-xhdpi/btn_dial_action_right_normal.9.png
index 5373a47..c6f7e09 100644
--- a/res/drawable-xhdpi/btn_dial_action_right_normal.9.png
+++ b/res/drawable-xhdpi/btn_dial_action_right_normal.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/btn_dial_action_right_pressed.9.png b/res/drawable-xhdpi/btn_dial_action_right_pressed.9.png
index cf1bd27..bf99581 100644
--- a/res/drawable-xhdpi/btn_dial_action_right_pressed.9.png
+++ b/res/drawable-xhdpi/btn_dial_action_right_pressed.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/btn_dial_action_right_selected.9.png b/res/drawable-xhdpi/btn_dial_action_right_selected.9.png
index be86501..5c06f99 100644
--- a/res/drawable-xhdpi/btn_dial_action_right_selected.9.png
+++ b/res/drawable-xhdpi/btn_dial_action_right_selected.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/btn_dial_normal.9.png b/res/drawable-xhdpi/btn_dial_normal.9.png
deleted file mode 100644
index 766470e..0000000
--- a/res/drawable-xhdpi/btn_dial_normal.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/btn_dial_selected.9.png b/res/drawable-xhdpi/btn_dial_selected.9.png
index f436288..1e2fe56 100644
--- a/res/drawable-xhdpi/btn_dial_selected.9.png
+++ b/res/drawable-xhdpi/btn_dial_selected.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/btn_dial_textfield_activated.9.png b/res/drawable-xhdpi/btn_dial_textfield_activated.9.png
index 3602fa8..9c5e4f4 100644
--- a/res/drawable-xhdpi/btn_dial_textfield_activated.9.png
+++ b/res/drawable-xhdpi/btn_dial_textfield_activated.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/btn_dial_textfield_normal.9.png b/res/drawable-xhdpi/btn_dial_textfield_normal.9.png
index cbe790e..9903624 100644
--- a/res/drawable-xhdpi/btn_dial_textfield_normal.9.png
+++ b/res/drawable-xhdpi/btn_dial_textfield_normal.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/btn_dial_textfield_pressed.9.png b/res/drawable-xhdpi/btn_dial_textfield_pressed.9.png
index 17f76b0..00e2e7e 100644
--- a/res/drawable-xhdpi/btn_dial_textfield_pressed.9.png
+++ b/res/drawable-xhdpi/btn_dial_textfield_pressed.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/btn_dial_textfield_selected.9.png b/res/drawable-xhdpi/btn_dial_textfield_selected.9.png
index 25526c0..bf2e27f 100644
--- a/res/drawable-xhdpi/btn_dial_textfield_selected.9.png
+++ b/res/drawable-xhdpi/btn_dial_textfield_selected.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/dial_indicator.png b/res/drawable-xhdpi/dial_indicator.png
deleted file mode 100644
index 384d9c2..0000000
--- a/res/drawable-xhdpi/dial_indicator.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/dial_num_0_wht.png b/res/drawable-xhdpi/dial_num_0_wht.png
index 08042b3..16b2935 100644
--- a/res/drawable-xhdpi/dial_num_0_wht.png
+++ b/res/drawable-xhdpi/dial_num_0_wht.png
Binary files differ
diff --git a/res/drawable-xhdpi/dial_num_1_wht.png b/res/drawable-xhdpi/dial_num_1_wht.png
index 2bf0bc0..28295ee 100644
--- a/res/drawable-xhdpi/dial_num_1_wht.png
+++ b/res/drawable-xhdpi/dial_num_1_wht.png
Binary files differ
diff --git a/res/drawable-xhdpi/dial_num_2_wht.png b/res/drawable-xhdpi/dial_num_2_wht.png
index 8a096f1..ecc8568 100644
--- a/res/drawable-xhdpi/dial_num_2_wht.png
+++ b/res/drawable-xhdpi/dial_num_2_wht.png
Binary files differ
diff --git a/res/drawable-xhdpi/dial_num_3_wht.png b/res/drawable-xhdpi/dial_num_3_wht.png
index 73536dc..1872936 100644
--- a/res/drawable-xhdpi/dial_num_3_wht.png
+++ b/res/drawable-xhdpi/dial_num_3_wht.png
Binary files differ
diff --git a/res/drawable-xhdpi/dial_num_4_wht.png b/res/drawable-xhdpi/dial_num_4_wht.png
index a8ce584..cde2e4c 100644
--- a/res/drawable-xhdpi/dial_num_4_wht.png
+++ b/res/drawable-xhdpi/dial_num_4_wht.png
Binary files differ
diff --git a/res/drawable-xhdpi/dial_num_5_wht.png b/res/drawable-xhdpi/dial_num_5_wht.png
index acb1351..0b94669 100644
--- a/res/drawable-xhdpi/dial_num_5_wht.png
+++ b/res/drawable-xhdpi/dial_num_5_wht.png
Binary files differ
diff --git a/res/drawable-xhdpi/dial_num_6_wht.png b/res/drawable-xhdpi/dial_num_6_wht.png
index 4926653..aff27dd 100644
--- a/res/drawable-xhdpi/dial_num_6_wht.png
+++ b/res/drawable-xhdpi/dial_num_6_wht.png
Binary files differ
diff --git a/res/drawable-xhdpi/dial_num_7_wht.png b/res/drawable-xhdpi/dial_num_7_wht.png
index 1c6c1c2..77da19d 100644
--- a/res/drawable-xhdpi/dial_num_7_wht.png
+++ b/res/drawable-xhdpi/dial_num_7_wht.png
Binary files differ
diff --git a/res/drawable-xhdpi/dial_num_8_wht.png b/res/drawable-xhdpi/dial_num_8_wht.png
index b2a4546..e450e62 100644
--- a/res/drawable-xhdpi/dial_num_8_wht.png
+++ b/res/drawable-xhdpi/dial_num_8_wht.png
Binary files differ
diff --git a/res/drawable-xhdpi/dial_num_9_wht.png b/res/drawable-xhdpi/dial_num_9_wht.png
index c266e8b..0c993e5 100644
--- a/res/drawable-xhdpi/dial_num_9_wht.png
+++ b/res/drawable-xhdpi/dial_num_9_wht.png
Binary files differ
diff --git a/res/drawable-xhdpi/dial_num_pound_wht.png b/res/drawable-xhdpi/dial_num_pound_wht.png
index 19376f0..3be13ae 100644
--- a/res/drawable-xhdpi/dial_num_pound_wht.png
+++ b/res/drawable-xhdpi/dial_num_pound_wht.png
Binary files differ
diff --git a/res/drawable-xhdpi/dial_num_star_wht.png b/res/drawable-xhdpi/dial_num_star_wht.png
index 35ec837..9e699ab 100644
--- a/res/drawable-xhdpi/dial_num_star_wht.png
+++ b/res/drawable-xhdpi/dial_num_star_wht.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_ab_back_holo_dark.png b/res/drawable-xhdpi/ic_ab_back_holo_dark.png
deleted file mode 100644
index 737f7d5..0000000
--- a/res/drawable-xhdpi/ic_ab_back_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_ab_dialer_holo_dark.png b/res/drawable-xhdpi/ic_ab_dialer_holo_dark.png
deleted file mode 100644
index 0aa9b86..0000000
--- a/res/drawable-xhdpi/ic_ab_dialer_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_ab_favourites_holo_dark.png b/res/drawable-xhdpi/ic_ab_favourites_holo_dark.png
deleted file mode 100644
index ac0d685..0000000
--- a/res/drawable-xhdpi/ic_ab_favourites_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_ab_history_holo_dark.png b/res/drawable-xhdpi/ic_ab_history_holo_dark.png
deleted file mode 100644
index d54e421..0000000
--- a/res/drawable-xhdpi/ic_ab_history_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_ab_search_holo_dark.png b/res/drawable-xhdpi/ic_ab_search_holo_dark.png
deleted file mode 100644
index b4db2d3..0000000
--- a/res/drawable-xhdpi/ic_ab_search_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_add_contact_holo_dark.png b/res/drawable-xhdpi/ic_add_contact_holo_dark.png
deleted file mode 100644
index 862652e..0000000
--- a/res/drawable-xhdpi/ic_add_contact_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_bluetooth_holo_dark.png b/res/drawable-xhdpi/ic_bluetooth_holo_dark.png
deleted file mode 100644
index c213595..0000000
--- a/res/drawable-xhdpi/ic_bluetooth_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_contact_list_picture.png b/res/drawable-xhdpi/ic_contact_list_picture.png
deleted file mode 100644
index 181005b..0000000
--- a/res/drawable-xhdpi/ic_contact_list_picture.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_contacts_holo_dark.png b/res/drawable-xhdpi/ic_contacts_holo_dark.png
deleted file mode 100644
index eb82880..0000000
--- a/res/drawable-xhdpi/ic_contacts_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_default_number.png b/res/drawable-xhdpi/ic_default_number.png
deleted file mode 100644
index 972788d..0000000
--- a/res/drawable-xhdpi/ic_default_number.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_dial_action_voice_mail.png b/res/drawable-xhdpi/ic_dial_action_voice_mail.png
deleted file mode 100644
index 8cad4d6..0000000
--- a/res/drawable-xhdpi/ic_dial_action_voice_mail.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_dialpad_holo_dark.png b/res/drawable-xhdpi/ic_dialpad_holo_dark.png
deleted file mode 100644
index c53ef55..0000000
--- a/res/drawable-xhdpi/ic_dialpad_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_fav_quickcontact_holo_dark.png b/res/drawable-xhdpi/ic_fav_quickcontact_holo_dark.png
deleted file mode 100644
index 2fe0804..0000000
--- a/res/drawable-xhdpi/ic_fav_quickcontact_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_hold_pause_holo_dark.png b/res/drawable-xhdpi/ic_hold_pause_holo_dark.png
deleted file mode 100644
index c5c5974..0000000
--- a/res/drawable-xhdpi/ic_hold_pause_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_incall_switch_holo_dark.png b/res/drawable-xhdpi/ic_incall_switch_holo_dark.png
deleted file mode 100644
index d772306..0000000
--- a/res/drawable-xhdpi/ic_incall_switch_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_manage_holo_dark.png b/res/drawable-xhdpi/ic_manage_holo_dark.png
deleted file mode 100644
index 8cfba5e..0000000
--- a/res/drawable-xhdpi/ic_manage_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_add_group_holo_light.png b/res/drawable-xhdpi/ic_menu_add_group_holo_light.png
deleted file mode 100644
index 4e4665a..0000000
--- a/res/drawable-xhdpi/ic_menu_add_group_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_help_holo_light.png b/res/drawable-xhdpi/ic_menu_help_holo_light.png
deleted file mode 100644
index d1dcf17..0000000
--- a/res/drawable-xhdpi/ic_menu_help_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_more_holo_light.png b/res/drawable-xhdpi/ic_menu_more_holo_light.png
deleted file mode 100644
index 5817ea8..0000000
--- a/res/drawable-xhdpi/ic_menu_more_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_moreoverflow_normal_holo_light.png b/res/drawable-xhdpi/ic_menu_moreoverflow_normal_holo_light.png
deleted file mode 100644
index 141c712..0000000
--- a/res/drawable-xhdpi/ic_menu_moreoverflow_normal_holo_light.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_sound_holo_dark.png b/res/drawable-xhdpi/ic_sound_holo_dark.png
deleted file mode 100644
index da5e9f6..0000000
--- a/res/drawable-xhdpi/ic_sound_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_text_holo_dark.png b/res/drawable-xhdpi/ic_text_holo_dark.png
deleted file mode 100644
index 74d20e7..0000000
--- a/res/drawable-xhdpi/ic_text_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/list_background_holo.9.png b/res/drawable-xhdpi/list_background_holo.9.png
index de090c8..adba6a8 100644
--- a/res/drawable-xhdpi/list_background_holo.9.png
+++ b/res/drawable-xhdpi/list_background_holo.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/list_item_divider_holo.9.png b/res/drawable-xhdpi/list_item_divider_holo.9.png
deleted file mode 100644
index 9fdfc95..0000000
--- a/res/drawable-xhdpi/list_item_divider_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/list_title_holo.9.png b/res/drawable-xhdpi/list_title_holo.9.png
index 0f3421c..f4f00ca 100644
--- a/res/drawable-xhdpi/list_title_holo.9.png
+++ b/res/drawable-xhdpi/list_title_holo.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/panel_message.9.png b/res/drawable-xhdpi/panel_message.9.png
index ddef3cf..ce3c06d 100644
--- a/res/drawable-xhdpi/panel_message.9.png
+++ b/res/drawable-xhdpi/panel_message.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/photo_frame_widget_holo_light.9.png b/res/drawable-xhdpi/photo_frame_widget_holo_light.9.png
deleted file mode 100644
index 9f21a87..0000000
--- a/res/drawable-xhdpi/photo_frame_widget_holo_light.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/quickactions_icon_activated.9.png b/res/drawable-xhdpi/quickactions_icon_activated.9.png
index c24607a..b3aaf7d 100644
--- a/res/drawable-xhdpi/quickactions_icon_activated.9.png
+++ b/res/drawable-xhdpi/quickactions_icon_activated.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/quickcontacts_selected_holo.9.png b/res/drawable-xhdpi/quickcontacts_selected_holo.9.png
deleted file mode 100644
index 081233f..0000000
--- a/res/drawable-xhdpi/quickcontacts_selected_holo.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/section_header.9.png b/res/drawable-xhdpi/section_header.9.png
index f4ae934..5026ea6 100644
--- a/res/drawable-xhdpi/section_header.9.png
+++ b/res/drawable-xhdpi/section_header.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/sym_action_email.png b/res/drawable-xhdpi/sym_action_email.png
deleted file mode 100644
index 4acedd4..0000000
--- a/res/drawable-xhdpi/sym_action_email.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/sym_action_map.png b/res/drawable-xhdpi/sym_action_map.png
deleted file mode 100644
index 87e71ae..0000000
--- a/res/drawable-xhdpi/sym_action_map.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/tab_focused.9.png b/res/drawable-xhdpi/tab_focused.9.png
index 1ef66d9..b9aba3e 100644
--- a/res/drawable-xhdpi/tab_focused.9.png
+++ b/res/drawable-xhdpi/tab_focused.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/tab_focused_bottom.9.png b/res/drawable-xhdpi/tab_focused_bottom.9.png
index a30fcb9..d404f0b 100644
--- a/res/drawable-xhdpi/tab_focused_bottom.9.png
+++ b/res/drawable-xhdpi/tab_focused_bottom.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/tab_pressed.9.png b/res/drawable-xhdpi/tab_pressed.9.png
index 0d752fc..4a26f77 100644
--- a/res/drawable-xhdpi/tab_pressed.9.png
+++ b/res/drawable-xhdpi/tab_pressed.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/tab_pressed_bottom.9.png b/res/drawable-xhdpi/tab_pressed_bottom.9.png
index d1a4427..a7e1668 100644
--- a/res/drawable-xhdpi/tab_pressed_bottom.9.png
+++ b/res/drawable-xhdpi/tab_pressed_bottom.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/tab_selected.9.png b/res/drawable-xhdpi/tab_selected.9.png
index c732f0d..045a9c7 100644
--- a/res/drawable-xhdpi/tab_selected.9.png
+++ b/res/drawable-xhdpi/tab_selected.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/tab_selected_bottom.9.png b/res/drawable-xhdpi/tab_selected_bottom.9.png
index d708d55..64ff016 100644
--- a/res/drawable-xhdpi/tab_selected_bottom.9.png
+++ b/res/drawable-xhdpi/tab_selected_bottom.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/tab_unselected.9.png b/res/drawable-xhdpi/tab_unselected.9.png
index a650f69..c11a765 100644
--- a/res/drawable-xhdpi/tab_unselected.9.png
+++ b/res/drawable-xhdpi/tab_unselected.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/title_bar_medium.9.png b/res/drawable-xhdpi/title_bar_medium.9.png
deleted file mode 100644
index 2b296ea..0000000
--- a/res/drawable-xhdpi/title_bar_medium.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/title_bar_shadow.9.png b/res/drawable-xhdpi/title_bar_shadow.9.png
deleted file mode 100644
index 310ac75..0000000
--- a/res/drawable-xhdpi/title_bar_shadow.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xlarge-nodpi/divider_vertical_dark.9.png b/res/drawable-xlarge-nodpi/divider_vertical_dark.9.png
new file mode 100644
index 0000000..38b794b
--- /dev/null
+++ b/res/drawable-xlarge-nodpi/divider_vertical_dark.9.png
Binary files differ
diff --git a/res/drawable/btn_dial_action.xml b/res/drawable/btn_dial_action.xml
deleted file mode 100644
index 9ffb31b..0000000
--- a/res/drawable/btn_dial_action.xml
+++ /dev/null
@@ -1,32 +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.
--->
-
-<!-- Background resource for dial button for the various 12 key dialers. -->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <!-- Disabled views -->
- <item android:state_focused="true" android:state_enabled="false"
- android:drawable="@drawable/btn_dial_action_middle_disable_focused" />
- <item android:state_enabled="false"
- android:drawable="@drawable/btn_dial_action_middle_disable" />
-
- <!-- Enabled views -->
- <item android:state_pressed="true" android:state_enabled="true"
- android:drawable="@drawable/btn_dial_action_middle_pressed" />
- <item android:state_focused="true" android:state_enabled="true"
- android:drawable="@drawable/btn_dial_action_middle_selected" />
- <item android:state_enabled="true"
- android:drawable="@drawable/btn_dial_action_middle_normal" />
-</selector>
diff --git a/res/drawable/btn_dial_delete.xml b/res/drawable/btn_dial_delete.xml
deleted file mode 100644
index b8c672d..0000000
--- a/res/drawable/btn_dial_delete.xml
+++ /dev/null
@@ -1,33 +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.
--->
-
-<!-- Background resource for backspace button for the various 12 key dialers. -->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <!-- Disabled views -->
- <item android:state_focused="true" android:state_enabled="false"
- android:drawable="@drawable/btn_dial_action_right_disable_focused" />
- <item android:state_enabled="false"
- android:drawable="@drawable/btn_dial_action_right_disable" />
-
- <!-- Enabled views -->
- <item android:state_pressed="true" android:state_enabled="true"
- android:drawable="@drawable/btn_dial_action_right_pressed" />
- <item android:state_focused="true" android:state_enabled="true"
- android:drawable="@drawable/btn_dial_action_right_selected" />
- <item android:state_enabled="true"
- android:drawable="@drawable/btn_dial_action_right_normal" />
-</selector>
-
diff --git a/res/drawable/btn_dial_voicemail.xml b/res/drawable/btn_dial_voicemail.xml
deleted file mode 100644
index 8669f0f..0000000
--- a/res/drawable/btn_dial_voicemail.xml
+++ /dev/null
@@ -1,32 +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.
--->
-
-<!-- Background resource for dial voicemail button for the various 12 key dialers. -->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <!-- Disabled views -->
- <item android:state_focused="true" android:state_enabled="false"
- android:drawable="@drawable/btn_dial_action_left_disable_focused" />
- <item android:state_enabled="false"
- android:drawable="@drawable/btn_dial_action_left_disable" />
-
- <!-- Enabled views -->
- <item android:state_pressed="true" android:state_enabled="true"
- android:drawable="@drawable/btn_dial_action_left_pressed" />
- <item android:state_focused="true" android:state_enabled="true"
- android:drawable="@drawable/btn_dial_action_left_selected" />
- <item android:state_enabled="true"
- android:drawable="@drawable/btn_dial_action_left_normal" />
-</selector>
diff --git a/res/drawable/call_background_secondary.xml b/res/drawable/call_background_secondary.xml
deleted file mode 100644
index b784862..0000000
--- a/res/drawable/call_background_secondary.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 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_window_focused="false"
- android:drawable="@android:color/transparent" />
- <item android:state_focused="false" android:state_pressed="true"
- android:drawable="@*android:drawable/list_selector_background_transition" />
- <item android:state_focused="false" android:state_pressed="false"
- android:drawable="@color/background_secondary"/>
-
-</selector>
diff --git a/res/drawable/dial_num_1_no_vm.xml b/res/drawable/dial_num_1_no_vm.xml
deleted file mode 100644
index 201c4d2..0000000
--- a/res/drawable/dial_num_1_no_vm.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_pressed="true"
- android:drawable="@drawable/dial_num_1_no_vm_blk" />
- <item android:state_focused="true"
- android:drawable="@drawable/dial_num_1_no_vm_blk" />
- <item
- android:drawable="@drawable/dial_num_1_no_vm_wht" />
-</selector>
diff --git a/res/drawable/filter_selector_background.xml b/res/drawable/filter_selector_background.xml
deleted file mode 100644
index 16464f6..0000000
--- a/res/drawable/filter_selector_background.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 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="@color/filter_selector_selected_background" />
- <item android:drawable="@android:color/transparent"/>
-</selector>
diff --git a/res/drawable/list_item_background_secondary.xml b/res/drawable/list_item_background_secondary.xml
deleted file mode 100644
index 0a27206..0000000
--- a/res/drawable/list_item_background_secondary.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 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="@android:color/transparent"/>
- <item android:state_selected="true" android:drawable="@android:color/transparent"/>
- <item android:drawable="@color/background_secondary"/> <!-- not selected -->
-</selector>
diff --git a/res/layout/call_log_list_group_item.xml b/res/layout/call_log_list_group_item.xml
index 57465a6..0eaeaa6 100644
--- a/res/layout/call_log_list_group_item.xml
+++ b/res/layout/call_log_list_group_item.xml
@@ -18,8 +18,7 @@
android:layout_width="match_parent"
android:layout_height="?attr/call_log_list_item_height"
>
-
<include layout="@layout/call_log_contact_photo"/>
- <include layout="@layout/call_log_action_group"/>
+ <include layout="@layout/call_log_action_call"/>
<include layout="@layout/call_log_list_item_layout" />
</RelativeLayout>
diff --git a/res/layout/contact_detail_header_view_list_item.xml b/res/layout/contact_detail_header_view_list_item.xml
deleted file mode 100644
index cf149df..0000000
--- a/res/layout/contact_detail_header_view_list_item.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-<com.android.contacts.detail.ContactDetailHeaderView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/contact_header_widget"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"/>
\ No newline at end of file
diff --git a/res/layout/contacts_search_content.xml b/res/layout/contacts_search_content.xml
deleted file mode 100644
index d36ad00..0000000
--- a/res/layout/contacts_search_content.xml
+++ /dev/null
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2010 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/pinned_header_list_layout"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:background="@color/translucent_search_background"
- >
-
- <include android:id="@+id/searchView"
- layout="@layout/search_bar"/>
-
- <FrameLayout
- android:id="@+id/list_container"
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:layout_weight="1"
- android:fastScrollEnabled="true"
- android:background="@android:color/background_dark"
- />
-
- <!-- Transparent filler -->
- <View android:id="@android:id/empty"
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:layout_weight="1"
- android:visibility="gone"
- />
- <ViewStub android:id="@+id/footer_stub"
- android:layout="@layout/footer_panel"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- />
-</LinearLayout>
diff --git a/res/layout/tab_indicator.xml b/res/layout/tab_indicator.xml
deleted file mode 100644
index d43265c..0000000
--- a/res/layout/tab_indicator.xml
+++ /dev/null
@@ -1,41 +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.
--->
-
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="@dimen/tab_height"
- android:layout_weight="1"
- android:layout_marginLeft="-3dip"
- android:layout_marginRight="-3dip"
- android:minWidth="72dip"
- android:background="@+drawable/tab_indicator_bg">
-
- <ImageView android:id="@+id/tab_icon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerInParent="true"
- />
-
- <TextView android:id="@+id/tab_title"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:layout_centerHorizontal="true"
- android:textColor="@+color/tab_indicator_text"
- android:textSize="20dip"
- />
-
-</RelativeLayout>
diff --git a/src/com/android/contacts/CallDetailActivity.java b/src/com/android/contacts/CallDetailActivity.java
index ca17e7b..9e8d471 100644
--- a/src/com/android/contacts/CallDetailActivity.java
+++ b/src/com/android/contacts/CallDetailActivity.java
@@ -18,7 +18,7 @@
import com.android.contacts.calllog.CallDetailHistoryAdapter;
import com.android.contacts.calllog.CallTypeHelper;
-import com.android.internal.telephony.CallerInfo;
+import com.android.contacts.calllog.PhoneNumberHelper;
import android.app.ListActivity;
import android.content.ContentResolver;
@@ -37,6 +37,7 @@
import android.telephony.PhoneNumberUtils;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
+import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
@@ -53,14 +54,21 @@
/**
* Displays the details of a specific call log entry.
+ * <p>
+ * This activity can be either started with the URI of a single call log entry, or with the
+ * {@link #EXTRA_CALL_LOG_IDS} extra to specify a group of call log entries.
*/
public class CallDetailActivity extends ListActivity implements
AdapterView.OnItemClickListener {
private static final String TAG = "CallDetail";
+ /** A long array extra containing ids of call log entries to display. */
+ public static final String EXTRA_CALL_LOG_IDS = "com.android.contacts.CALL_LOG_IDS";
+
/** The views representing the details of a phone call. */
private PhoneCallDetailsViews mPhoneCallDetailsViews;
private CallTypeHelper mCallTypeHelper;
+ private PhoneNumberHelper mPhoneNumberHelper;
private PhoneCallDetailsHelper mPhoneCallDetailsHelper;
private View mHomeActionView;
private ImageView mMainActionView;
@@ -120,8 +128,9 @@
getResources().getDrawable(R.drawable.ic_call_log_list_outgoing_call),
getResources().getDrawable(R.drawable.ic_call_log_list_missed_call),
getResources().getDrawable(R.drawable.ic_call_log_list_voicemail));
- mPhoneCallDetailsHelper = new PhoneCallDetailsHelper(this, getResources(),
- getVoicemailNumber(), mCallTypeHelper);
+ mPhoneNumberHelper = new PhoneNumberHelper(mResources, getVoicemailNumber());
+ mPhoneCallDetailsHelper = new PhoneCallDetailsHelper(this, mResources, mCallTypeHelper,
+ mPhoneNumberHelper);
mHomeActionView = findViewById(R.id.action_bar_home);
mMainActionView = (ImageView) findViewById(R.id.main_action);
mContactBackgroundView = (ImageView) findViewById(R.id.contact_background);
@@ -141,7 +150,29 @@
@Override
public void onResume() {
super.onResume();
- updateData(getIntent().getData());
+ updateData(getCallLogEntryUris());
+ }
+
+ /**
+ * Returns the list of URIs to show.
+ * <p>
+ * There are two ways the URIs can be provided to the activity: as the data on the intent, or as
+ * a list of ids in the call log added as an extra on the URI.
+ * <p>
+ * If both are available, the data on the intent takes precedence.
+ */
+ private Uri[] getCallLogEntryUris() {
+ Uri uri = getIntent().getData();
+ if (uri != null) {
+ // If there is a data on the intent, it takes precedence over the extra.
+ return new Uri[]{ uri };
+ }
+ long[] ids = getIntent().getLongArrayExtra(EXTRA_CALL_LOG_IDS);
+ Uri[] uris = new Uri[ids.length];
+ for (int index = 0; index < ids.length; ++index) {
+ uris[index] = ContentUris.withAppendedId(Calls.CONTENT_URI_WITH_VOICEMAIL, ids[index]);
+ }
+ return uris;
}
@Override
@@ -166,146 +197,200 @@
/**
* Update user interface with details of given call.
*
- * @param callUri Uri into {@link CallLog.Calls}
+ * @param callUris URIs into {@link CallLog.Calls} of the calls to be displayed
*/
- private void updateData(final Uri callUri) {
+ private void updateData(final Uri... callUris) {
+ // TODO: All phone calls correspond to the same person, so we can make a single lookup.
+ final int numCalls = callUris.length;
+ final PhoneCallDetails[] details = new PhoneCallDetails[numCalls];
+ try {
+ for (int index = 0; index < numCalls; ++index) {
+ details[index] = getPhoneCallDetailsForUri(callUris[index]);
+ }
+ } catch (IllegalArgumentException e) {
+ // Something went wrong reading in our primary data, so we're going to
+ // bail out and show error to users.
+ Log.w(TAG, "invalid URI starting call details", e);
+ Toast.makeText(this, R.string.toast_call_detail_error,
+ Toast.LENGTH_SHORT).show();
+ finish();
+ return;
+ }
+
+ // We know that all calls are from the same number and the same contact, so pick the first.
+ mNumber = details[0].number.toString();
+ final long personId = details[0].personId;
+ final long photoId = details[0].photoId;
+
+ // Set the details header, based on the first phone call.
+ mPhoneCallDetailsHelper.setPhoneCallDetails(mPhoneCallDetailsViews,
+ details[0], false);
+
+ // Cache the details about the phone number.
+ final Uri numberCallUri = mPhoneNumberHelper.getCallUri(mNumber);
+ final boolean canPlaceCallsTo = mPhoneNumberHelper.canPlaceCallsTo(mNumber);
+ final boolean isVoicemailNumber = mPhoneNumberHelper.isVoicemailNumber(mNumber);
+ final boolean isSipNumber = mPhoneNumberHelper.isSipNumber(mNumber);
+
+ // Let user view contact details if they exist, otherwise add option to create new contact
+ // from this number.
+ final Intent mainActionIntent;
+ final int mainActionIcon;
+
+ if (details[0].personId != -1) {
+ Uri personUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, personId);
+ mainActionIntent = new Intent(Intent.ACTION_VIEW, personUri);
+ mainActionIcon = R.drawable.sym_action_view_contact;
+ } else if (isVoicemailNumber) {
+ mainActionIntent = null;
+ mainActionIcon = 0;
+ } else if (isSipNumber) {
+ // TODO: This item is currently disabled for SIP addresses, because
+ // the Insert.PHONE extra only works correctly for PSTN numbers.
+ //
+ // To fix this for SIP addresses, we need to:
+ // - define ContactsContract.Intents.Insert.SIP_ADDRESS, and use it here if
+ // the current number is a SIP address
+ // - update the contacts UI code to handle Insert.SIP_ADDRESS by
+ // updating the SipAddress field
+ // and then we can remove the "!isSipNumber" check above.
+ mainActionIntent = null;
+ mainActionIcon = 0;
+ } else {
+ mainActionIntent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
+ mainActionIntent.setType(Contacts.CONTENT_ITEM_TYPE);
+ mainActionIntent.putExtra(Insert.PHONE, mNumber);
+ mainActionIcon = R.drawable.sym_action_add;
+ }
+
+ if (mainActionIntent == null) {
+ mMainActionView.setVisibility(View.INVISIBLE);
+ } else {
+ mMainActionView.setVisibility(View.VISIBLE);
+ mMainActionView.setImageResource(mainActionIcon);
+ mMainActionView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ startActivity(mainActionIntent);
+ }
+ });
+ }
+
+ // Build list of various available actions.
+ final List<ViewEntry> actions = new ArrayList<ViewEntry>();
+
+ // This action allows to call the number that places the call.
+ if (canPlaceCallsTo) {
+ actions.add(new ViewEntry(android.R.drawable.sym_action_call,
+ getString(R.string.menu_callNumber, mNumber),
+ new Intent(Intent.ACTION_CALL_PRIVILEGED, numberCallUri)));
+ }
+
+ // This action allows to send an SMS to the number that placed the call.
+ if (mPhoneNumberHelper.canSendSmsTo(mNumber)) {
+ Intent smsIntent = new Intent(Intent.ACTION_SENDTO,
+ Uri.fromParts("sms", mNumber, null));
+ actions.add(new ViewEntry(R.drawable.sym_action_sms,
+ getString(R.string.menu_sendTextMessage), smsIntent));
+ }
+
+ // This action deletes all elements in the group from the call log.
+ actions.add(new ViewEntry(android.R.drawable.ic_menu_close_clear_cancel,
+ getString(R.string.recentCalls_removeFromRecentList),
+ new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ StringBuilder callIds = new StringBuilder();
+ for (Uri callUri : callUris) {
+ if (callIds.length() != 0) {
+ callIds.append(",");
+ }
+ callIds.append(ContentUris.parseId(callUri));
+ }
+
+ getContentResolver().delete(Calls.CONTENT_URI_WITH_VOICEMAIL,
+ Calls._ID + " IN (" + callIds + ")", null);
+ finish();
+ }
+ }));
+
+ if (canPlaceCallsTo && !isSipNumber && !isVoicemailNumber) {
+ // "Edit the number before calling" is only available for PSTN numbers.
+ actions.add(new ViewEntry(android.R.drawable.sym_action_call,
+ getString(R.string.recentCalls_editNumberBeforeCall),
+ new Intent(Intent.ACTION_DIAL, numberCallUri)));
+ }
+
+ // Set the actions for this phone number.
+ setListAdapter(new ViewAdapter(this, actions));
+
+ ListView historyList = (ListView) findViewById(R.id.history);
+ historyList.setAdapter(
+ new CallDetailHistoryAdapter(this, mInflater, mCallTypeHelper, details));
+ loadContactPhotos(photoId);
+ }
+
+ /** Return the phone call details for a given call log URI. */
+ private PhoneCallDetails getPhoneCallDetailsForUri(Uri callUri) {
ContentResolver resolver = getContentResolver();
Cursor callCursor = resolver.query(callUri, CALL_LOG_PROJECTION, null, null, null);
try {
- if (callCursor != null && callCursor.moveToFirst()) {
- // Read call log specifics
- mNumber = callCursor.getString(NUMBER_COLUMN_INDEX);
- long date = callCursor.getLong(DATE_COLUMN_INDEX);
- long duration = callCursor.getLong(DURATION_COLUMN_INDEX);
- int callType = callCursor.getInt(CALL_TYPE_COLUMN_INDEX);
- String countryIso = callCursor.getString(COUNTRY_ISO_COLUMN_INDEX);
- if (TextUtils.isEmpty(countryIso)) {
- countryIso = mDefaultCountryIso;
- }
-
- long photoId = 0L;
- CharSequence nameText = "";
- final CharSequence numberText;
- int numberType = 0;
- CharSequence numberLabel = "";
- if (mNumber.equals(CallerInfo.UNKNOWN_NUMBER) ||
- mNumber.equals(CallerInfo.PRIVATE_NUMBER)) {
- numberText = getString(mNumber.equals(CallerInfo.PRIVATE_NUMBER)
- ? R.string.private_num : R.string.unknown);
- mMainActionView.setVisibility(View.GONE);
- } else {
- // Perform a reverse-phonebook lookup to find the PERSON_ID
- Uri personUri = null;
- Uri phoneUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,
- Uri.encode(mNumber));
- Cursor phonesCursor = resolver.query(
- phoneUri, PHONES_PROJECTION, null, null, null);
- String candidateNumberText = mNumber;
- try {
- if (phonesCursor != null && phonesCursor.moveToFirst()) {
- long personId = phonesCursor.getLong(COLUMN_INDEX_ID);
- personUri = ContentUris.withAppendedId(
- Contacts.CONTENT_URI, personId);
- nameText = phonesCursor.getString(COLUMN_INDEX_NAME);
- photoId = phonesCursor.getLong(COLUMN_INDEX_PHOTO_ID);
- candidateNumberText = PhoneNumberUtils.formatNumber(
- phonesCursor.getString(COLUMN_INDEX_NUMBER),
- phonesCursor.getString(COLUMN_INDEX_NORMALIZED_NUMBER),
- countryIso);
- numberType = phonesCursor.getInt(COLUMN_INDEX_TYPE);
- numberLabel = phonesCursor.getString(COLUMN_INDEX_LABEL);
- } else {
- candidateNumberText =
- PhoneNumberUtils.formatNumber(mNumber, countryIso);
- }
- } finally {
- if (phonesCursor != null) phonesCursor.close();
- numberText = candidateNumberText;
- }
-
- // Let user view contact details if they exist, otherwise add option
- // to create new contact from this number.
- final Intent mainActionIntent;
- final int mainActionIcon;
- if (personUri != null) {
- mainActionIntent = new Intent(Intent.ACTION_VIEW, personUri);
- mainActionIcon = R.drawable.sym_action_view_contact;
- } else {
- mainActionIntent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
- mainActionIntent.setType(Contacts.CONTENT_ITEM_TYPE);
- mainActionIntent.putExtra(Insert.PHONE, mNumber);
- mainActionIcon = R.drawable.sym_action_add;
- }
-
- mMainActionView.setVisibility(View.VISIBLE);
- mMainActionView.setImageResource(mainActionIcon);
- mMainActionView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- startActivity(mainActionIntent);
- }
- });
-
- // Build list of various available actions
- List<ViewEntry> actions = new ArrayList<ViewEntry>();
-
- final boolean isSipNumber = PhoneNumberUtils.isUriNumber(mNumber);
- final Uri numberCallUri;
- if (isSipNumber) {
- numberCallUri = Uri.fromParts("sip", mNumber, null);
- } else {
- numberCallUri = Uri.fromParts("tel", mNumber, null);
- }
-
- actions.add(new ViewEntry(android.R.drawable.sym_action_call,
- getString(R.string.menu_callNumber, mNumber),
- new Intent(Intent.ACTION_CALL_PRIVILEGED, numberCallUri)));
-
- if (!isSipNumber) {
- Intent smsIntent = new Intent(Intent.ACTION_SENDTO,
- Uri.fromParts("sms", mNumber, null));
- actions.add(new ViewEntry(R.drawable.sym_action_sms,
- getString(R.string.menu_sendTextMessage), smsIntent));
- }
-
- actions.add(new ViewEntry(android.R.drawable.ic_menu_close_clear_cancel,
- getString(R.string.recentCalls_removeFromRecentList),
- new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- long id = ContentUris.parseId(callUri);
- getContentResolver().delete(Calls.CONTENT_URI_WITH_VOICEMAIL,
- Calls._ID + " = ?", new String[]{Long.toString(id)});
- finish();
- }
- }));
-
- if (!isSipNumber) {
- actions.add(new ViewEntry(android.R.drawable.sym_action_call,
- getString(R.string.recentCalls_editNumberBeforeCall),
- new Intent(Intent.ACTION_DIAL, numberCallUri)));
- }
-
- ViewAdapter adapter = new ViewAdapter(this, actions);
- setListAdapter(adapter);
- }
- PhoneCallDetails details = new PhoneCallDetails(mNumber, numberText,
- new int[]{ callType }, duration, date, nameText, numberType, numberLabel);
- mPhoneCallDetailsHelper.setPhoneCallDetails(mPhoneCallDetailsViews,
- details, false);
- ListView historyList = (ListView) findViewById(R.id.history);
- historyList.setAdapter(
- new CallDetailHistoryAdapter(this, mInflater, mCallTypeHelper,
- new PhoneCallDetails[]{ details }));
-
- loadContactPhotos(photoId);
- } else {
- // Something went wrong reading in our primary data, so we're going to
- // bail out and show error to users.
- Toast.makeText(this, R.string.toast_call_detail_error,
- Toast.LENGTH_SHORT).show();
- finish();
+ if (callCursor == null || !callCursor.moveToFirst()) {
+ throw new IllegalArgumentException("Cannot find content: " + callUri);
}
+
+ // Read call log specifics.
+ String number = callCursor.getString(NUMBER_COLUMN_INDEX);
+ long date = callCursor.getLong(DATE_COLUMN_INDEX);
+ long duration = callCursor.getLong(DURATION_COLUMN_INDEX);
+ int callType = callCursor.getInt(CALL_TYPE_COLUMN_INDEX);
+ String countryIso = callCursor.getString(COUNTRY_ISO_COLUMN_INDEX);
+ if (TextUtils.isEmpty(countryIso)) {
+ countryIso = mDefaultCountryIso;
+ }
+
+ // Formatted phone number.
+ final CharSequence numberText;
+ // Read contact specifics.
+ CharSequence nameText = "";
+ int numberType = 0;
+ CharSequence numberLabel = "";
+ long personId = -1L;
+ long photoId = 0L;
+ // If this is not a regular number, there is no point in looking it up in the contacts.
+ if (!mPhoneNumberHelper.canPlaceCallsTo(number)) {
+ numberText = mPhoneNumberHelper.getDisplayNumber(number, null);
+ } else {
+ // Perform a reverse-phonebook lookup to find the contact details.
+ Uri phoneUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,
+ Uri.encode(number));
+ Cursor phonesCursor = resolver.query(phoneUri, PHONES_PROJECTION, null, null, null);
+ String candidateNumberText = number;
+ try {
+ if (phonesCursor != null && phonesCursor.moveToFirst()) {
+ personId = phonesCursor.getLong(COLUMN_INDEX_ID);
+ nameText = phonesCursor.getString(COLUMN_INDEX_NAME);
+ photoId = phonesCursor.getLong(COLUMN_INDEX_PHOTO_ID);
+ candidateNumberText = PhoneNumberUtils.formatNumber(
+ phonesCursor.getString(COLUMN_INDEX_NUMBER),
+ phonesCursor.getString(COLUMN_INDEX_NORMALIZED_NUMBER),
+ countryIso);
+ numberType = phonesCursor.getInt(COLUMN_INDEX_TYPE);
+ numberLabel = phonesCursor.getString(COLUMN_INDEX_LABEL);
+ } else {
+ // We could not find this contact in the contacts, just format the phone
+ // number as best as we can. All the other fields will have their default
+ // values.
+ candidateNumberText =
+ PhoneNumberUtils.formatNumber(number, countryIso);
+ }
+ } finally {
+ if (phonesCursor != null) phonesCursor.close();
+ numberText = candidateNumberText;
+ }
+ }
+ return new PhoneCallDetails(number, numberText, new int[]{ callType }, date, duration,
+ nameText, numberType, numberLabel, personId, photoId);
} finally {
if (callCursor != null) {
callCursor.close();
diff --git a/src/com/android/contacts/PhoneCallDetails.java b/src/com/android/contacts/PhoneCallDetails.java
index 39620b2..6ab47aa 100644
--- a/src/com/android/contacts/PhoneCallDetails.java
+++ b/src/com/android/contacts/PhoneCallDetails.java
@@ -43,16 +43,21 @@
public final int numberType;
/** The custom label associated with the phone number in the contact, or the empty string. */
public final CharSequence numberLabel;
+ /** The id of the contact associated with this phone call. */
+ public final long personId;
+ /** The photo id of the contact associated with this phone call. */
+ public final long photoId;
/** Create the details for a call with a number not associated with a contact. */
public PhoneCallDetails(CharSequence number, CharSequence formattedNumber, int[] callTypes,
long date, long duration) {
- this(number, formattedNumber, callTypes, date, duration, "", 0, "");
+ this(number, formattedNumber, callTypes, date, duration, "", 0, "", -1L, 0L);
}
/** Create the details for a call with a number associated with a contact. */
public PhoneCallDetails(CharSequence number, CharSequence formattedNumber, int[] callTypes,
- long date, long duration, CharSequence name, int numberType, CharSequence numberLabel) {
+ long date, long duration, CharSequence name, int numberType, CharSequence numberLabel,
+ long personId, long photoId) {
this.number = number;
this.formattedNumber = formattedNumber;
this.callTypes = callTypes;
@@ -61,5 +66,7 @@
this.name = name;
this.numberType = numberType;
this.numberLabel = numberLabel;
+ this.personId = personId;
+ this.photoId = photoId;
}
}
diff --git a/src/com/android/contacts/PhoneCallDetailsHelper.java b/src/com/android/contacts/PhoneCallDetailsHelper.java
index cbf3c5c..6bdfbaa 100644
--- a/src/com/android/contacts/PhoneCallDetailsHelper.java
+++ b/src/com/android/contacts/PhoneCallDetailsHelper.java
@@ -17,8 +17,8 @@
package com.android.contacts;
import com.android.contacts.calllog.CallTypeHelper;
+import com.android.contacts.calllog.PhoneNumberHelper;
import com.android.contacts.format.FormatUtils;
-import com.android.internal.telephony.CallerInfo;
import android.content.Context;
import android.content.res.Resources;
@@ -37,10 +37,11 @@
public class PhoneCallDetailsHelper {
private final Context mContext;
private final Resources mResources;
- private final String mVoicemailNumber;
/** The injected current time in milliseconds since the epoch. Used only by tests. */
private Long mCurrentTimeMillisForTest;
+ // Helper classes.
private final CallTypeHelper mCallTypeHelper;
+ private final PhoneNumberHelper mPhoneNumberHelper;
/**
* Creates a new instance of the helper.
@@ -49,12 +50,12 @@
*
* @param resources used to look up strings
*/
- public PhoneCallDetailsHelper(Context context, Resources resources, String voicemailNumber,
- CallTypeHelper callTypeHelper) {
+ public PhoneCallDetailsHelper(Context context, Resources resources,
+ CallTypeHelper callTypeHelper, PhoneNumberHelper phoneNumberHelper) {
mContext = context;
mResources = resources;
- mVoicemailNumber = voicemailNumber;
mCallTypeHelper = callTypeHelper;
+ mPhoneNumberHelper = phoneNumberHelper;
}
/** Fills the call details views with content. */
@@ -100,12 +101,13 @@
final CharSequence nameText;
final CharSequence numberText;
+ final CharSequence displayNumber =
+ mPhoneNumberHelper.getDisplayNumber(details.number, details.formattedNumber);
if (TextUtils.isEmpty(details.name)) {
- nameText = getDisplayNumber(details.number, details.formattedNumber);
+ nameText = displayNumber;
numberText = "";
} else {
nameText = details.name;
- CharSequence displayNumber = getDisplayNumber(details.number, details.formattedNumber);
if (numberFormattedLabel != null) {
numberText = FormatUtils.applyStyleToSpan(Typeface.BOLD,
numberFormattedLabel + " " + displayNumber, 0,
@@ -130,29 +132,6 @@
}
}
- private CharSequence getDisplayNumber(CharSequence number, CharSequence formattedNumber) {
- if (TextUtils.isEmpty(number)) {
- return "";
- }
- if (number.equals(CallerInfo.UNKNOWN_NUMBER)) {
- return mResources.getString(R.string.unknown);
- }
- if (number.equals(CallerInfo.PRIVATE_NUMBER)) {
- return mResources.getString(R.string.private_num);
- }
- if (number.equals(CallerInfo.PAYPHONE_NUMBER)) {
- return mResources.getString(R.string.payphone);
- }
- if (PhoneNumberUtils.extractNetworkPortion(number.toString()).equals(mVoicemailNumber)) {
- return mResources.getString(R.string.voicemail);
- }
- if (TextUtils.isEmpty(formattedNumber)) {
- return number;
- } else {
- return formattedNumber;
- }
- }
-
public void setCurrentTimeForTest(long currentTimeMillis) {
mCurrentTimeMillisForTest = currentTimeMillis;
}
diff --git a/src/com/android/contacts/activities/PeopleActivity.java b/src/com/android/contacts/activities/PeopleActivity.java
index 4a155d0..e11755b 100644
--- a/src/com/android/contacts/activities/PeopleActivity.java
+++ b/src/com/android/contacts/activities/PeopleActivity.java
@@ -382,7 +382,7 @@
protected void onResume() {
super.onResume();
mProviderStatusLoader.setProviderStatusListener(this);
- updateFragmentVisibility();
+ showContactsUnavailableFragmentIfNecessary();
// Re-register the listener, which may have been cleared when onSaveInstanceState was
// called. See also: onSaveInstanceState
@@ -771,10 +771,10 @@
@Override
public void onProviderStatusChange() {
- updateFragmentVisibility();
+ showContactsUnavailableFragmentIfNecessary();
}
- private void updateFragmentVisibility() {
+ private void showContactsUnavailableFragmentIfNecessary() {
int providerStatus = mProviderStatusLoader.getProviderStatus();
if (providerStatus == mProviderStatus) {
return;
diff --git a/src/com/android/contacts/calllog/CallLogFragment.java b/src/com/android/contacts/calllog/CallLogFragment.java
index 901ebd8..0c87ebb 100644
--- a/src/com/android/contacts/calllog/CallLogFragment.java
+++ b/src/com/android/contacts/calllog/CallLogFragment.java
@@ -52,14 +52,11 @@
import android.provider.ContactsContract.CommonDataKinds.SipAddress;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.Intents.Insert;
import android.provider.ContactsContract.PhoneLookup;
import android.telephony.PhoneNumberUtils;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Log;
-import android.view.ContextMenu;
-import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
@@ -67,7 +64,6 @@
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
-import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.QuickContactBadge;
@@ -77,13 +73,10 @@
/**
* Displays a list of call log entries.
*/
-public class CallLogFragment extends ListFragment
- implements View.OnCreateContextMenuListener, ViewPagerVisibilityListener {
+public class CallLogFragment extends ListFragment implements ViewPagerVisibilityListener {
private static final String TAG = "CallLogFragment";
- /**
- * The size of the cache of contact info.
- */
+ /** The size of the cache of contact info. */
private static final int CONTACT_INFO_CACHE_SIZE = 100;
/** The query for the call log table */
@@ -126,10 +119,6 @@
public static final int LOOKUP_KEY = 7;
}
- private static final class MenuItems {
- public static final int DELETE = 1;
- }
-
private static final class OptionsMenuItems {
public static final int DELETE_ALL = 1;
}
@@ -278,10 +267,12 @@
mContactPhotoManager = ContactPhotoManager.getInstance(getActivity());
CallTypeHelper callTypeHelper = new CallTypeHelper(resources, incomingDrawable,
outgoingDrawable, missedDrawable, voicemailDrawable);
+ PhoneNumberHelper phoneNumberHelper =
+ new PhoneNumberHelper(getResources(), mVoiceMailNumber);
PhoneCallDetailsHelper phoneCallDetailsHelper = new PhoneCallDetailsHelper(
- getActivity(), resources, mVoiceMailNumber, callTypeHelper);
- mCallLogViewsHelper = new CallLogListItemHelper(phoneCallDetailsHelper, callDrawable,
- playDrawable);
+ getActivity(), resources, callTypeHelper, phoneNumberHelper );
+ mCallLogViewsHelper = new CallLogListItemHelper(phoneCallDetailsHelper,
+ phoneNumberHelper, callDrawable, playDrawable);
}
/**
@@ -687,7 +678,7 @@
formattedNumber = formatPhoneNumber(number, null, countryIso);
}
- long contactId = info.personId;
+ long personId = info.personId;
String name = info.name;
int ntype = info.type;
String label = info.label;
@@ -705,11 +696,11 @@
details = new PhoneCallDetails(number, formattedNumber, callTypes, date, duration);
} else {
details = new PhoneCallDetails(number, formattedNumber, callTypes, date, duration,
- name, ntype, label);
+ name, ntype, label, personId, photoId);
}
mCallLogViewsHelper.setPhoneCallDetails(views, details , true);
if (views.photoView != null) {
- bindQuickContact(views.photoView, photoId, contactId, lookupKey);
+ bindQuickContact(views.photoView, photoId, personId, lookupKey);
}
@@ -845,7 +836,6 @@
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
- getListView().setOnCreateContextMenuListener(this);
mAdapter = new CallLogAdapter();
setListAdapter(mAdapter);
}
@@ -952,88 +942,6 @@
}
@Override
- public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfoIn) {
- AdapterView.AdapterContextMenuInfo menuInfo;
- try {
- menuInfo = (AdapterView.AdapterContextMenuInfo) menuInfoIn;
- } catch (ClassCastException e) {
- Log.e(TAG, "bad menuInfoIn", e);
- return;
- }
-
- Cursor cursor = (Cursor) mAdapter.getItem(menuInfo.position);
-
- String number = cursor.getString(CallLogQuery.NUMBER);
- Uri numberUri = null;
- boolean isVoicemail = false;
- boolean isSipNumber = false;
- if (number.equals(CallerInfo.UNKNOWN_NUMBER)) {
- number = getString(R.string.unknown);
- } else if (number.equals(CallerInfo.PRIVATE_NUMBER)) {
- number = getString(R.string.private_num);
- } else if (number.equals(CallerInfo.PAYPHONE_NUMBER)) {
- number = getString(R.string.payphone);
- } else if (PhoneNumberUtils.extractNetworkPortion(number).equals(mVoiceMailNumber)) {
- number = getString(R.string.voicemail);
- numberUri = Uri.parse("voicemail:x");
- isVoicemail = true;
- } else if (PhoneNumberUtils.isUriNumber(number)) {
- numberUri = Uri.fromParts("sip", number, null);
- isSipNumber = true;
- } else {
- numberUri = Uri.fromParts("tel", number, null);
- }
-
- ContactInfo info = mAdapter.getContactInfo(number);
- boolean contactInfoPresent = (info != null && info != ContactInfo.EMPTY);
- if (contactInfoPresent) {
- menu.setHeaderTitle(info.name);
- } else {
- menu.setHeaderTitle(number);
- }
-
- if (numberUri != null) {
- Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED, numberUri);
- menu.add(0, 0, 0, getResources().getString(R.string.recentCalls_callNumber, number))
- .setIntent(intent);
- }
-
- if (contactInfoPresent) {
- menu.add(0, 0, 0, R.string.menu_viewContact)
- .setIntent(new Intent(Intent.ACTION_VIEW,
- ContentUris.withAppendedId(Contacts.CONTENT_URI, info.personId)));
- }
-
- if (numberUri != null && !isVoicemail && !isSipNumber) {
- menu.add(0, 0, 0, R.string.recentCalls_editNumberBeforeCall)
- .setIntent(new Intent(Intent.ACTION_DIAL, numberUri));
- menu.add(0, 0, 0, R.string.menu_sendTextMessage)
- .setIntent(new Intent(Intent.ACTION_SENDTO,
- Uri.fromParts("sms", number, null)));
- }
-
- // "Add to contacts" item, if this entry isn't already associated with a contact
- if (!contactInfoPresent && numberUri != null && !isVoicemail && !isSipNumber) {
- // TODO: This item is currently disabled for SIP addresses, because
- // the Insert.PHONE extra only works correctly for PSTN numbers.
- //
- // To fix this for SIP addresses, we need to:
- // - define ContactsContract.Intents.Insert.SIP_ADDRESS, and use it here if
- // the current number is a SIP address
- // - update the contacts UI code to handle Insert.SIP_ADDRESS by
- // updating the SipAddress field
- // and then we can remove the "!isSipNumber" check above.
-
- Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
- intent.setType(Contacts.CONTENT_ITEM_TYPE);
- intent.putExtra(Insert.PHONE, number);
- menu.add(0, 0, 0, R.string.recentCalls_addToContact)
- .setIntent(intent);
- }
- menu.add(0, MenuItems.DELETE, 0, R.string.recentCalls_removeFromRecentList);
- }
-
- @Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case OptionsMenuItems.DELETE_ALL: {
@@ -1044,42 +952,6 @@
return super.onOptionsItemSelected(item);
}
- @Override
- public boolean onContextItemSelected(MenuItem item) {
- // Convert the menu info to the proper type
- AdapterView.AdapterContextMenuInfo menuInfo;
- try {
- menuInfo = (AdapterView.AdapterContextMenuInfo) item.getMenuInfo();
- } catch (ClassCastException e) {
- Log.e(TAG, "bad menuInfoIn", e);
- return false;
- }
-
- switch (item.getItemId()) {
- case MenuItems.DELETE: {
- Cursor cursor = (Cursor)mAdapter.getItem(menuInfo.position);
- int groupSize = 1;
- if (mAdapter.isGroupHeader(menuInfo.position)) {
- groupSize = mAdapter.getGroupSize(menuInfo.position);
- }
-
- StringBuilder sb = new StringBuilder();
- for (int i = 0; i < groupSize; i++) {
- if (i != 0) {
- sb.append(",");
- cursor.moveToNext();
- }
- long id = cursor.getLong(CallLogQuery.ID);
- sb.append(id);
- }
-
- getActivity().getContentResolver().delete(Calls.CONTENT_URI_WITH_VOICEMAIL,
- Calls._ID + " IN (" + sb + ")", null);
- }
- }
- return super.onContextItemSelected(item);
- }
-
/*
* Get the number from the Contacts, if available, since sometimes
* the number provided by caller id may not be formatted properly
@@ -1162,13 +1034,25 @@
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
+ Intent intent = new Intent(getActivity(), CallDetailActivity.class);
if (mAdapter.isGroupHeader(position)) {
- mAdapter.toggleGroup(position);
+ int groupSize = mAdapter.getGroupSize(position);
+ long[] ids = new long[groupSize];
+ // Copy the ids of the rows in the group.
+ Cursor cursor = (Cursor) mAdapter.getItem(position);
+ // Restore the position in the cursor at the end.
+ int currentPosition = cursor.getPosition();
+ for (int index = 0; index < groupSize; ++index) {
+ ids[index] = cursor.getLong(CallLogQuery.ID);
+ cursor.moveToNext();
+ }
+ cursor.moveToPosition(currentPosition);
+ intent.putExtra(CallDetailActivity.EXTRA_CALL_LOG_IDS, ids);
} else {
- Intent intent = new Intent(getActivity(), CallDetailActivity.class);
+ // If there is a single item, use the direct URI for it.
intent.setData(ContentUris.withAppendedId(Calls.CONTENT_URI_WITH_VOICEMAIL, id));
- startActivity(intent);
}
+ startActivity(intent);
}
@VisibleForTesting
diff --git a/src/com/android/contacts/calllog/CallLogListItemHelper.java b/src/com/android/contacts/calllog/CallLogListItemHelper.java
index e4630e9..a8894da 100644
--- a/src/com/android/contacts/calllog/CallLogListItemHelper.java
+++ b/src/com/android/contacts/calllog/CallLogListItemHelper.java
@@ -18,11 +18,9 @@
import com.android.contacts.PhoneCallDetails;
import com.android.contacts.PhoneCallDetailsHelper;
-import com.android.internal.telephony.CallerInfo;
import android.graphics.drawable.Drawable;
import android.provider.CallLog.Calls;
-import android.text.TextUtils;
import android.view.View;
/**
@@ -31,6 +29,8 @@
/*package*/ class CallLogListItemHelper {
/** Helper for populating the details of a phone call. */
private final PhoneCallDetailsHelper mPhoneCallDetailsHelper;
+ /** Helper for handling phone numbers. */
+ private final PhoneNumberHelper mPhoneNumberHelper;
/** Icon for the call action. */
private final Drawable mCallDrawable;
/** Icon for the play action. */
@@ -44,8 +44,9 @@
* @param playDrawable used to render the play button, for playing a voicemail
*/
public CallLogListItemHelper(PhoneCallDetailsHelper phoneCallDetailsHelper,
- Drawable callDrawable, Drawable playDrawable) {
+ PhoneNumberHelper phoneNumberHelper, Drawable callDrawable, Drawable playDrawable) {
mPhoneCallDetailsHelper = phoneCallDetailsHelper;
+ mPhoneNumberHelper= phoneNumberHelper;
mCallDrawable = callDrawable;
mPlayDrawable = playDrawable;
}
@@ -65,15 +66,8 @@
views.callView.setImageDrawable(
details.callTypes[0] == Calls.VOICEMAIL_TYPE ? mPlayDrawable : mCallDrawable);
views.callView.setVisibility(
- canPlaceCallsTo(details.number) ? View.VISIBLE : View.INVISIBLE);
+ mPhoneNumberHelper.canPlaceCallsTo(details.number)
+ ? View.VISIBLE : View.INVISIBLE);
}
}
-
- /** Returns true if it is possible to place a call to the given number. */
- public boolean canPlaceCallsTo(CharSequence number) {
- return !(TextUtils.isEmpty(number)
- || number.equals(CallerInfo.UNKNOWN_NUMBER)
- || number.equals(CallerInfo.PRIVATE_NUMBER)
- || number.equals(CallerInfo.PAYPHONE_NUMBER));
- }
}
diff --git a/src/com/android/contacts/calllog/PhoneNumberHelper.java b/src/com/android/contacts/calllog/PhoneNumberHelper.java
new file mode 100644
index 0000000..4d96f4f
--- /dev/null
+++ b/src/com/android/contacts/calllog/PhoneNumberHelper.java
@@ -0,0 +1,101 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.contacts.calllog;
+
+import com.android.contacts.R;
+import com.android.internal.telephony.CallerInfo;
+
+import android.content.res.Resources;
+import android.net.Uri;
+import android.telephony.PhoneNumberUtils;
+import android.text.TextUtils;
+
+/**
+ * Helper for formatting and managing phone numbers.
+ */
+public class PhoneNumberHelper {
+ private final Resources mResources;
+ private final String mVoicemailNumber;
+
+ public PhoneNumberHelper(Resources resources, String voicemailNumber) {
+ mResources = resources;
+ mVoicemailNumber = voicemailNumber;
+ }
+
+ /** Returns true if it is possible to place a call to the given number. */
+ public boolean canPlaceCallsTo(CharSequence number) {
+ return !(TextUtils.isEmpty(number)
+ || number.equals(CallerInfo.UNKNOWN_NUMBER)
+ || number.equals(CallerInfo.PRIVATE_NUMBER)
+ || number.equals(CallerInfo.PAYPHONE_NUMBER));
+ }
+
+ /** Returns true if it is possible to send an SMS to the given number. */
+ public boolean canSendSmsTo(CharSequence number) {
+ return canPlaceCallsTo(number) && !isVoicemailNumber(number) && !isSipNumber(number);
+ }
+
+ /**
+ * Returns the string to display for the given phone number.
+ *
+ * @param number the number to display
+ * @param formattedNumber the formatted number if available, may be null
+ */
+ public CharSequence getDisplayNumber(CharSequence number, CharSequence formattedNumber) {
+ if (TextUtils.isEmpty(number)) {
+ return "";
+ }
+ if (number.equals(CallerInfo.UNKNOWN_NUMBER)) {
+ return mResources.getString(R.string.unknown);
+ }
+ if (number.equals(CallerInfo.PRIVATE_NUMBER)) {
+ return mResources.getString(R.string.private_num);
+ }
+ if (number.equals(CallerInfo.PAYPHONE_NUMBER)) {
+ return mResources.getString(R.string.payphone);
+ }
+ if (PhoneNumberUtils.extractNetworkPortion(number.toString()).equals(mVoicemailNumber)) {
+ return mResources.getString(R.string.voicemail);
+ }
+ if (TextUtils.isEmpty(formattedNumber)) {
+ return number;
+ } else {
+ return formattedNumber;
+ }
+ }
+
+ /** Returns a URI that can be used to place a call to this number. */
+ public Uri getCallUri(String number) {
+ if (isVoicemailNumber(number)) {
+ return Uri.parse("voicemail:x");
+ }
+ if (isSipNumber(number)) {
+ return Uri.fromParts("sip", number, null);
+ }
+ return Uri.fromParts("tel", number, null);
+ }
+
+ /** Returns true if the given number is the number of the configured voicemail. */
+ public boolean isVoicemailNumber(CharSequence number) {
+ return PhoneNumberUtils.extractNetworkPortion(number.toString()).equals(mVoicemailNumber);
+ }
+
+ /** Returns true if the given number is a SIP address. */
+ public boolean isSipNumber(CharSequence number) {
+ return PhoneNumberUtils.isUriNumber(number.toString());
+ }
+}
diff --git a/src/com/android/contacts/group/GroupEditorFragment.java b/src/com/android/contacts/group/GroupEditorFragment.java
index 07d19a7..429bb58 100644
--- a/src/com/android/contacts/group/GroupEditorFragment.java
+++ b/src/com/android/contacts/group/GroupEditorFragment.java
@@ -363,26 +363,6 @@
mGroupNameView.setFocusable(!mGroupNameIsReadOnly);
setupAccountHeader();
- // Setup the group member suggestion adapter
- mAutoCompleteAdapter = new SuggestedMemberListAdapter(getActivity(),
- android.R.layout.simple_dropdown_item_1line);
- mAutoCompleteAdapter.setContentResolver(mContentResolver);
- mAutoCompleteAdapter.setAccountType(mAccountType);
- mAutoCompleteAdapter.setAccountName(mAccountName);
- mAutoCompleteTextView.setAdapter(mAutoCompleteAdapter);
- mAutoCompleteTextView.setOnItemClickListener(new OnItemClickListener() {
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- SuggestedMember member = mAutoCompleteAdapter.getItem(position);
- loadMemberToAddToGroup(String.valueOf(member.getContactId()));
-
- // Update the autocomplete adapter so the contact doesn't get suggested again
- mAutoCompleteAdapter.addNewMember(member.getContactId());
-
- // Clear out the text field
- mAutoCompleteTextView.setText("");
- }
- });
}
public void loadMemberToAddToGroup(String contactId) {
@@ -630,8 +610,33 @@
}
// Update the list of displayed existing members
mMemberListAdapter.updateExistingMembersList(listMembers);
+
+ // Setup the group member suggestion adapter
+ mAutoCompleteAdapter = new SuggestedMemberListAdapter(getActivity(),
+ android.R.layout.simple_dropdown_item_1line);
+ mAutoCompleteAdapter.setContentResolver(mContentResolver);
+ mAutoCompleteAdapter.setAccountType(mAccountType);
+ mAutoCompleteAdapter.setAccountName(mAccountName);
+ mAutoCompleteTextView.setAdapter(mAutoCompleteAdapter);
+ mAutoCompleteTextView.setOnItemClickListener(new OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ SuggestedMember member = mAutoCompleteAdapter.getItem(position);
+ loadMemberToAddToGroup(String.valueOf(member.getContactId()));
+
+ // Update the autocomplete adapter so the contact doesn't get suggested again
+ mAutoCompleteAdapter.addNewMember(member.getContactId());
+
+ // Clear out the text field
+ mAutoCompleteTextView.setText("");
+ }
+ });
+
// Update the autocomplete adapter
mAutoCompleteAdapter.updateExistingMembersList(listContactIds);
+ // No more updates
+ // TODO: move to a runnable
+ getLoaderManager().destroyLoader(LOADER_EXISTING_MEMBERS);
}
@Override
diff --git a/tests/res/values/donottranslate_strings.xml b/tests/res/values/donottranslate_strings.xml
index 6ba575a..9f9f5a4 100644
--- a/tests/res/values/donottranslate_strings.xml
+++ b/tests/res/values/donottranslate_strings.xml
@@ -82,6 +82,9 @@
<item>DIAL tel</item>
<item>VIEW tel</item>
<item>VIEW calls (call-log after a phone call)</item>
+ <item>VIEW calls item</item>
+ <item>CallDetailActivity (legacy)</item>
+ <item>CallLogActivity (legacy)</item>
</string-array>
<string name="pinnedHeaderList">Pinned Headers</string>
diff --git a/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java b/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java
index 9ac3b05..4f95563 100644
--- a/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java
+++ b/tests/src/com/android/contacts/PhoneCallDetailsHelperTest.java
@@ -17,6 +17,7 @@
package com.android.contacts;
import com.android.contacts.calllog.CallTypeHelper;
+import com.android.contacts.calllog.PhoneNumberHelper;
import com.android.contacts.util.LocaleTestUtils;
import com.android.internal.telephony.CallerInfo;
@@ -70,8 +71,9 @@
Resources resources = context.getResources();
CallTypeHelper callTypeHelper = new CallTypeHelper(resources, TEST_INCOMING_DRAWABLE,
TEST_OUTGOING_DRAWABLE, TEST_MISSED_DRAWABLE, TEST_VOICEMAIL_DRAWABLE);
- mHelper = new PhoneCallDetailsHelper(context, resources,
- TEST_VOICEMAIL_NUMBER, callTypeHelper);
+ PhoneNumberHelper phoneNumberHelper =
+ new PhoneNumberHelper(resources, TEST_VOICEMAIL_NUMBER);
+ mHelper = new PhoneCallDetailsHelper(context, resources, callTypeHelper, phoneNumberHelper);
mViews = PhoneCallDetailsViews.createForTest(new TextView(context),
new LinearLayout(context), new TextView(context), new View(context),
new TextView(context), new TextView(context));
diff --git a/tests/src/com/android/contacts/activities/CallLogActivityTests.java b/tests/src/com/android/contacts/activities/CallLogActivityTests.java
index 8db291d..67e6196 100644
--- a/tests/src/com/android/contacts/activities/CallLogActivityTests.java
+++ b/tests/src/com/android/contacts/activities/CallLogActivityTests.java
@@ -166,8 +166,7 @@
insert(CallerInfo.PRIVATE_NUMBER, NOW, 0, Calls.INCOMING_TYPE);
View view = mAdapter.newGroupView(getActivity(), mParentView);
mAdapter.bindGroupView(view, getActivity(), mCursor, 3, false);
- assertNull(view.findViewById(R.id.call_icon));
- assertNotNull(view.findViewById(R.id.groupIndicator));
+ assertNotNull(view.findViewById(R.id.call_icon));
}
@MediumTest
diff --git a/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java b/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java
index fc50275..a9f4e79 100644
--- a/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java
+++ b/tests/src/com/android/contacts/calllog/CallLogListItemHelperTest.java
@@ -75,10 +75,12 @@
CallTypeHelper callTypeHelper = new CallTypeHelper(resources,
TEST_INCOMING_DRAWABLE, TEST_OUTGOING_DRAWABLE, TEST_MISSED_DRAWABLE,
TEST_VOICEMAIL_DRAWABLE);
+ PhoneNumberHelper phoneNumberHelper =
+ new PhoneNumberHelper(resources, TEST_VOICEMAIL_NUMBER);
PhoneCallDetailsHelper phoneCallDetailsHelper = new PhoneCallDetailsHelper(context,
- resources, TEST_VOICEMAIL_NUMBER, callTypeHelper);
- mHelper = new CallLogListItemHelper(phoneCallDetailsHelper, TEST_CALL_DRAWABLE,
- TEST_PLAY_DRAWABLE);
+ resources, callTypeHelper, phoneNumberHelper);
+ mHelper = new CallLogListItemHelper(phoneCallDetailsHelper, phoneNumberHelper,
+ TEST_CALL_DRAWABLE, TEST_PLAY_DRAWABLE);
mViews = CallLogListItemViews.createForTest(new QuickContactBadge(context),
new ImageView(context), PhoneCallDetailsViews.createForTest(new TextView(context),
new LinearLayout(context), new TextView(context), new TextView(context),
diff --git a/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java b/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
index 71012de..8c37a02 100644
--- a/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
+++ b/tests/src/com/android/contacts/tests/allintents/AllIntentsActivity.java
@@ -29,6 +29,7 @@
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
+import android.provider.CallLog.Calls;
import android.provider.Contacts.ContactMethods;
import android.provider.Contacts.People;
import android.provider.Contacts.Phones;
@@ -55,6 +56,7 @@
public class AllIntentsActivity extends ListActivity
implements SelectAccountDialogFragment.Listener {
+ /** The name of the package of the contacts application. */
private static final String ANDROID_CONTACTS_PACKAGE = "com.android.contacts";
private static final String CONTACT_LIST_ACTIVITY_CLASS_NAME =
@@ -116,7 +118,10 @@
CALL_BUTTON,
DIAL_tel,
VIEW_tel,
- VIEW_calllog;
+ VIEW_calllog,
+ VIEW_calllog_entry,
+ LEGACY_CALL_DETAILS_ACTIVITY,
+ LEGACY_CALL_LOG_ACTIVITY;
public static ContactsIntent get(int ordinal) {
return values()[ordinal];
@@ -208,15 +213,13 @@
}
case ACTION_CREATE_SHORTCUT_DIAL: {
Intent intent = new Intent(Intent.ACTION_CREATE_SHORTCUT);
- intent.setComponent(
- new ComponentName(ANDROID_CONTACTS_PACKAGE, "alias.DialShortcut"));
+ bindIntentToClass(intent, "alias.DialShortcut");
startActivityForResult(intent, 0);
break;
}
case ACTION_CREATE_SHORTCUT_MESSAGE: {
Intent intent = new Intent(Intent.ACTION_CREATE_SHORTCUT);
- intent.setComponent(
- new ComponentName(ANDROID_CONTACTS_PACKAGE, "alias.MessageShortcut"));
+ bindIntentToClass(intent, "alias.MessageShortcut");
startActivityForResult(intent, 0);
break;
}
@@ -483,12 +486,57 @@
startActivity(intent);
break;
}
+ case VIEW_calllog_entry: {
+ Uri uri = getCallLogUri();
+ if (uri == null) {
+ Toast.makeText(this, "Call log is empty", Toast.LENGTH_LONG).show();
+ break;
+ }
+ final Intent intent = new Intent(Intent.ACTION_VIEW);
+ intent.setData(uri);
+ startActivity(intent);
+ break;
+ }
+ case LEGACY_CALL_DETAILS_ACTIVITY: {
+ Uri uri = getCallLogUri();
+ if (uri == null) {
+ Toast.makeText(this, "Call log is empty", Toast.LENGTH_LONG).show();
+ break;
+ }
+ final Intent intent = new Intent("android.intent.action.VIEW");
+ intent.setData(uri);
+ bindIntentToClass(intent, "CallDetailActivity");
+ startActivity(intent);
+ break;
+ }
+ case LEGACY_CALL_LOG_ACTIVITY: {
+ startActivity(bindIntentToClass(new Intent(), "activities.CallLogActivity"));
+ break;
+ }
+
default: {
Toast.makeText(this, "Sorry, we forgot to write this...", Toast.LENGTH_LONG).show();
}
}
}
+ /** Returns the URI of one of the items in the call log, or null if the call log is empty. */
+ private Uri getCallLogUri() {
+ Cursor cursor = getContentResolver().query(
+ Calls.CONTENT_URI, new String[]{ Calls._ID }, null, null,
+ Calls.DEFAULT_SORT_ORDER);
+ if (!cursor.moveToNext()) {
+ return null;
+ }
+ return ContentUris.withAppendedId(Calls.CONTENT_URI, cursor.getLong(0));
+ }
+
+ /** Creates an intent that is bound to a specific activity by name. */
+ private Intent bindIntentToClass(Intent intent, String activityClassName) {
+ intent.setComponent(new ComponentName(ANDROID_CONTACTS_PACKAGE, activityClassName));
+ return intent;
+ }
+
private Intent buildFilterIntent(int actionCode, boolean legacy) {
Intent intent = new Intent(UI.FILTER_CONTACTS_ACTION);
intent.putExtra(UI.FILTER_TEXT_EXTRA_KEY, "A");
@@ -499,8 +547,7 @@
}
private void startContactListActivity(Intent intent) {
- intent.setComponent(
- new ComponentName(ANDROID_CONTACTS_PACKAGE, CONTACT_LIST_ACTIVITY_CLASS_NAME));
+ bindIntentToClass(intent, CONTACT_LIST_ACTIVITY_CLASS_NAME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}