Merge change 26641 into eclair
* changes:
Change the haptic feedback from a duration to a pattern.
diff --git a/res/drawable-finger/ic_tab_selected_contacts.png b/res/drawable-finger/ic_tab_selected_contacts.png
deleted file mode 100644
index 9f11fc6..0000000
--- a/res/drawable-finger/ic_tab_selected_contacts.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-finger/ic_tab_selected_recent.png b/res/drawable-finger/ic_tab_selected_recent.png
deleted file mode 100644
index b87424b..0000000
--- a/res/drawable-finger/ic_tab_selected_recent.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-finger/ic_tab_selected_starred.png b/res/drawable-finger/ic_tab_selected_starred.png
deleted file mode 100644
index 89004a3..0000000
--- a/res/drawable-finger/ic_tab_selected_starred.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-finger/ic_tab_unselected_contacts.png b/res/drawable-finger/ic_tab_unselected_contacts.png
deleted file mode 100644
index 93ff795..0000000
--- a/res/drawable-finger/ic_tab_unselected_contacts.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-finger/ic_tab_unselected_recent.png b/res/drawable-finger/ic_tab_unselected_recent.png
deleted file mode 100644
index 3da6583..0000000
--- a/res/drawable-finger/ic_tab_unselected_recent.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-finger/ic_tab_unselected_starred.png b/res/drawable-finger/ic_tab_unselected_starred.png
deleted file mode 100644
index f2ebc3b..0000000
--- a/res/drawable-finger/ic_tab_unselected_starred.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_dial_action_left_disable.9.png b/res/drawable-hdpi-finger/btn_dial_action_left_disable.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_dial_action_left_disable_focused.9.png b/res/drawable-hdpi-finger/btn_dial_action_left_disable_focused.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_dial_action_left_normal.9.png b/res/drawable-hdpi-finger/btn_dial_action_left_normal.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_dial_action_left_pressed.9.png b/res/drawable-hdpi-finger/btn_dial_action_left_pressed.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_dial_action_left_selected.9.png b/res/drawable-hdpi-finger/btn_dial_action_left_selected.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_dial_action_middle_disable.9.png b/res/drawable-hdpi-finger/btn_dial_action_middle_disable.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_dial_action_middle_disable_focused.9.png b/res/drawable-hdpi-finger/btn_dial_action_middle_disable_focused.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_dial_action_middle_normal.9.png b/res/drawable-hdpi-finger/btn_dial_action_middle_normal.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_dial_action_middle_pressed.9.png b/res/drawable-hdpi-finger/btn_dial_action_middle_pressed.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_dial_action_middle_selected.9.png b/res/drawable-hdpi-finger/btn_dial_action_middle_selected.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_dial_action_right_disable.9.png b/res/drawable-hdpi-finger/btn_dial_action_right_disable.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_dial_action_right_disable_focused.9.png b/res/drawable-hdpi-finger/btn_dial_action_right_disable_focused.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_dial_action_right_normal.9.png b/res/drawable-hdpi-finger/btn_dial_action_right_normal.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_dial_action_right_pressed.9.png b/res/drawable-hdpi-finger/btn_dial_action_right_pressed.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_dial_action_right_selected.9.png b/res/drawable-hdpi-finger/btn_dial_action_right_selected.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_dial_normal.9.png b/res/drawable-hdpi-finger/btn_dial_normal.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_dial_normal_blue.9.png b/res/drawable-hdpi-finger/btn_dial_normal_blue.9.png
new file mode 100644
index 0000000..ddad155
--- /dev/null
+++ b/res/drawable-hdpi-finger/btn_dial_normal_blue.9.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_dial_normal_green.9.png b/res/drawable-hdpi-finger/btn_dial_normal_green.9.png
new file mode 100644
index 0000000..dbb0f97
--- /dev/null
+++ b/res/drawable-hdpi-finger/btn_dial_normal_green.9.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_dial_pressed.9.png b/res/drawable-hdpi-finger/btn_dial_pressed.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_dial_selected.9.png b/res/drawable-hdpi-finger/btn_dial_selected.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_dial_textfield_activated.9.png b/res/drawable-hdpi-finger/btn_dial_textfield_activated.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_dial_textfield_normal.9.png b/res/drawable-hdpi-finger/btn_dial_textfield_normal.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_dial_textfield_pressed.9.png b/res/drawable-hdpi-finger/btn_dial_textfield_pressed.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/btn_dial_textfield_selected.9.png b/res/drawable-hdpi-finger/btn_dial_textfield_selected.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/dial_num_0_blk.png b/res/drawable-hdpi-finger/dial_num_0_blk.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/dial_num_0_wht.png b/res/drawable-hdpi-finger/dial_num_0_wht.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/dial_num_1_no_vm_blk.png b/res/drawable-hdpi-finger/dial_num_1_no_vm_blk.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/dial_num_1_no_vm_wht.png b/res/drawable-hdpi-finger/dial_num_1_no_vm_wht.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/dial_num_2_blk.png b/res/drawable-hdpi-finger/dial_num_2_blk.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/dial_num_2_wht.png b/res/drawable-hdpi-finger/dial_num_2_wht.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/dial_num_3_blk.png b/res/drawable-hdpi-finger/dial_num_3_blk.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/dial_num_3_wht.png b/res/drawable-hdpi-finger/dial_num_3_wht.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/dial_num_4_blk.png b/res/drawable-hdpi-finger/dial_num_4_blk.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/dial_num_4_wht.png b/res/drawable-hdpi-finger/dial_num_4_wht.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/dial_num_5_blk.png b/res/drawable-hdpi-finger/dial_num_5_blk.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/dial_num_5_wht.png b/res/drawable-hdpi-finger/dial_num_5_wht.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/dial_num_6_blk.png b/res/drawable-hdpi-finger/dial_num_6_blk.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/dial_num_6_wht.png b/res/drawable-hdpi-finger/dial_num_6_wht.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/dial_num_7_blk.png b/res/drawable-hdpi-finger/dial_num_7_blk.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/dial_num_7_wht.png b/res/drawable-hdpi-finger/dial_num_7_wht.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/dial_num_8_blk.png b/res/drawable-hdpi-finger/dial_num_8_blk.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/dial_num_8_wht.png b/res/drawable-hdpi-finger/dial_num_8_wht.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/dial_num_9_blk.png b/res/drawable-hdpi-finger/dial_num_9_blk.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/dial_num_9_wht.png b/res/drawable-hdpi-finger/dial_num_9_wht.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/dial_num_pound_blk.png b/res/drawable-hdpi-finger/dial_num_pound_blk.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/dial_num_pound_wht.png b/res/drawable-hdpi-finger/dial_num_pound_wht.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/dial_num_star_blk.png b/res/drawable-hdpi-finger/dial_num_star_blk.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/dial_num_star_wht.png b/res/drawable-hdpi-finger/dial_num_star_wht.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/ic_dial_action_call.png b/res/drawable-hdpi-finger/ic_dial_action_call.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/ic_dial_action_delete.png b/res/drawable-hdpi-finger/ic_dial_action_delete.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/ic_dial_action_voice_mail.png b/res/drawable-hdpi-finger/ic_dial_action_voice_mail.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-hdpi-finger/ic_tab_selected_contacts.png b/res/drawable-hdpi-finger/ic_tab_selected_contacts.png
new file mode 100644
index 0000000..7c92375
--- /dev/null
+++ b/res/drawable-hdpi-finger/ic_tab_selected_contacts.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/ic_tab_selected_dialer.png b/res/drawable-hdpi-finger/ic_tab_selected_dialer.png
index a84f8ab..44b4db0 100644
--- a/res/drawable-hdpi-finger/ic_tab_selected_dialer.png
+++ b/res/drawable-hdpi-finger/ic_tab_selected_dialer.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/ic_tab_selected_recent.png b/res/drawable-hdpi-finger/ic_tab_selected_recent.png
new file mode 100644
index 0000000..dfa268b
--- /dev/null
+++ b/res/drawable-hdpi-finger/ic_tab_selected_recent.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/ic_tab_selected_starred.png b/res/drawable-hdpi-finger/ic_tab_selected_starred.png
new file mode 100644
index 0000000..d9182b5
--- /dev/null
+++ b/res/drawable-hdpi-finger/ic_tab_selected_starred.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/ic_tab_unselected_contacts.png b/res/drawable-hdpi-finger/ic_tab_unselected_contacts.png
new file mode 100644
index 0000000..ee09bf1
--- /dev/null
+++ b/res/drawable-hdpi-finger/ic_tab_unselected_contacts.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/ic_tab_unselected_dialer.png b/res/drawable-hdpi-finger/ic_tab_unselected_dialer.png
index 51b0656..4151cd4 100644
--- a/res/drawable-hdpi-finger/ic_tab_unselected_dialer.png
+++ b/res/drawable-hdpi-finger/ic_tab_unselected_dialer.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/ic_tab_unselected_recent.png b/res/drawable-hdpi-finger/ic_tab_unselected_recent.png
new file mode 100644
index 0000000..4ecfa21
--- /dev/null
+++ b/res/drawable-hdpi-finger/ic_tab_unselected_recent.png
Binary files differ
diff --git a/res/drawable-hdpi-finger/ic_tab_unselected_starred.png b/res/drawable-hdpi-finger/ic_tab_unselected_starred.png
new file mode 100644
index 0000000..259d2d3
--- /dev/null
+++ b/res/drawable-hdpi-finger/ic_tab_unselected_starred.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_dial_action_left_disable.9.png b/res/drawable-mdpi-finger/btn_dial_action_left_disable.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_dial_action_left_disable_focused.9.png b/res/drawable-mdpi-finger/btn_dial_action_left_disable_focused.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_dial_action_left_normal.9.png b/res/drawable-mdpi-finger/btn_dial_action_left_normal.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_dial_action_left_pressed.9.png b/res/drawable-mdpi-finger/btn_dial_action_left_pressed.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_dial_action_left_selected.9.png b/res/drawable-mdpi-finger/btn_dial_action_left_selected.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_dial_action_middle_disable.9.png b/res/drawable-mdpi-finger/btn_dial_action_middle_disable.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_dial_action_middle_disable_focused.9.png b/res/drawable-mdpi-finger/btn_dial_action_middle_disable_focused.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_dial_action_middle_normal.9.png b/res/drawable-mdpi-finger/btn_dial_action_middle_normal.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_dial_action_middle_pressed.9.png b/res/drawable-mdpi-finger/btn_dial_action_middle_pressed.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_dial_action_middle_selected.9.png b/res/drawable-mdpi-finger/btn_dial_action_middle_selected.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_dial_action_right_disable.9.png b/res/drawable-mdpi-finger/btn_dial_action_right_disable.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_dial_action_right_disable_focused.9.png b/res/drawable-mdpi-finger/btn_dial_action_right_disable_focused.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_dial_action_right_normal.9.png b/res/drawable-mdpi-finger/btn_dial_action_right_normal.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_dial_action_right_pressed.9.png b/res/drawable-mdpi-finger/btn_dial_action_right_pressed.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_dial_action_right_selected.9.png b/res/drawable-mdpi-finger/btn_dial_action_right_selected.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_dial_normal.9.png b/res/drawable-mdpi-finger/btn_dial_normal.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_dial_normal_blue.9.png b/res/drawable-mdpi-finger/btn_dial_normal_blue.9.png
new file mode 100644
index 0000000..7c8c2ca
--- /dev/null
+++ b/res/drawable-mdpi-finger/btn_dial_normal_blue.9.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_dial_normal_green.9.png b/res/drawable-mdpi-finger/btn_dial_normal_green.9.png
new file mode 100644
index 0000000..b220650
--- /dev/null
+++ b/res/drawable-mdpi-finger/btn_dial_normal_green.9.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_dial_pressed.9.png b/res/drawable-mdpi-finger/btn_dial_pressed.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_dial_selected.9.png b/res/drawable-mdpi-finger/btn_dial_selected.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_dial_textfield_activated.9.png b/res/drawable-mdpi-finger/btn_dial_textfield_activated.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_dial_textfield_normal.9.png b/res/drawable-mdpi-finger/btn_dial_textfield_normal.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_dial_textfield_pressed.9.png b/res/drawable-mdpi-finger/btn_dial_textfield_pressed.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/btn_dial_textfield_selected.9.png b/res/drawable-mdpi-finger/btn_dial_textfield_selected.9.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/dial_num_0_blk.png b/res/drawable-mdpi-finger/dial_num_0_blk.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/dial_num_0_wht.png b/res/drawable-mdpi-finger/dial_num_0_wht.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/dial_num_1_no_vm_blk.png b/res/drawable-mdpi-finger/dial_num_1_no_vm_blk.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/dial_num_1_no_vm_wht.png b/res/drawable-mdpi-finger/dial_num_1_no_vm_wht.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/dial_num_2_blk.png b/res/drawable-mdpi-finger/dial_num_2_blk.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/dial_num_2_wht.png b/res/drawable-mdpi-finger/dial_num_2_wht.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/dial_num_3_blk.png b/res/drawable-mdpi-finger/dial_num_3_blk.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/dial_num_3_wht.png b/res/drawable-mdpi-finger/dial_num_3_wht.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/dial_num_4_blk.png b/res/drawable-mdpi-finger/dial_num_4_blk.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/dial_num_4_wht.png b/res/drawable-mdpi-finger/dial_num_4_wht.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/dial_num_5_blk.png b/res/drawable-mdpi-finger/dial_num_5_blk.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/dial_num_5_wht.png b/res/drawable-mdpi-finger/dial_num_5_wht.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/dial_num_6_blk.png b/res/drawable-mdpi-finger/dial_num_6_blk.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/dial_num_6_wht.png b/res/drawable-mdpi-finger/dial_num_6_wht.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/dial_num_7_blk.png b/res/drawable-mdpi-finger/dial_num_7_blk.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/dial_num_7_wht.png b/res/drawable-mdpi-finger/dial_num_7_wht.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/dial_num_8_blk.png b/res/drawable-mdpi-finger/dial_num_8_blk.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/dial_num_8_wht.png b/res/drawable-mdpi-finger/dial_num_8_wht.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/dial_num_9_blk.png b/res/drawable-mdpi-finger/dial_num_9_blk.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/dial_num_9_wht.png b/res/drawable-mdpi-finger/dial_num_9_wht.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/dial_num_pound_blk.png b/res/drawable-mdpi-finger/dial_num_pound_blk.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/dial_num_pound_wht.png b/res/drawable-mdpi-finger/dial_num_pound_wht.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/dial_num_star_blk.png b/res/drawable-mdpi-finger/dial_num_star_blk.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/dial_num_star_wht.png b/res/drawable-mdpi-finger/dial_num_star_wht.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/ic_dial_action_call.png b/res/drawable-mdpi-finger/ic_dial_action_call.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/ic_dial_action_delete.png b/res/drawable-mdpi-finger/ic_dial_action_delete.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/ic_dial_action_voice_mail.png b/res/drawable-mdpi-finger/ic_dial_action_voice_mail.png
old mode 100755
new mode 100644
Binary files differ
diff --git a/res/drawable-mdpi-finger/ic_tab_selected_contacts.png b/res/drawable-mdpi-finger/ic_tab_selected_contacts.png
new file mode 100644
index 0000000..b3e23b7
--- /dev/null
+++ b/res/drawable-mdpi-finger/ic_tab_selected_contacts.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/ic_tab_selected_dialer.png b/res/drawable-mdpi-finger/ic_tab_selected_dialer.png
index 6ac51ad..71739a6 100644
--- a/res/drawable-mdpi-finger/ic_tab_selected_dialer.png
+++ b/res/drawable-mdpi-finger/ic_tab_selected_dialer.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/ic_tab_selected_recent.png b/res/drawable-mdpi-finger/ic_tab_selected_recent.png
new file mode 100644
index 0000000..a6cbc2a
--- /dev/null
+++ b/res/drawable-mdpi-finger/ic_tab_selected_recent.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/ic_tab_selected_starred.png b/res/drawable-mdpi-finger/ic_tab_selected_starred.png
new file mode 100644
index 0000000..089dfe9
--- /dev/null
+++ b/res/drawable-mdpi-finger/ic_tab_selected_starred.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/ic_tab_unselected_contacts.png b/res/drawable-mdpi-finger/ic_tab_unselected_contacts.png
new file mode 100644
index 0000000..b3f5ae0
--- /dev/null
+++ b/res/drawable-mdpi-finger/ic_tab_unselected_contacts.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/ic_tab_unselected_dialer.png b/res/drawable-mdpi-finger/ic_tab_unselected_dialer.png
index c33c658..f008813 100644
--- a/res/drawable-mdpi-finger/ic_tab_unselected_dialer.png
+++ b/res/drawable-mdpi-finger/ic_tab_unselected_dialer.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/ic_tab_unselected_recent.png b/res/drawable-mdpi-finger/ic_tab_unselected_recent.png
new file mode 100644
index 0000000..8f81688
--- /dev/null
+++ b/res/drawable-mdpi-finger/ic_tab_unselected_recent.png
Binary files differ
diff --git a/res/drawable-mdpi-finger/ic_tab_unselected_starred.png b/res/drawable-mdpi-finger/ic_tab_unselected_starred.png
new file mode 100644
index 0000000..32fe67d
--- /dev/null
+++ b/res/drawable-mdpi-finger/ic_tab_unselected_starred.png
Binary files differ
diff --git a/res/layout-finger/contacts_list_item.xml b/res/layout-finger/contacts_list_item.xml
index f2c3204..ccc53e7 100644
--- a/res/layout-finger/contacts_list_item.xml
+++ b/res/layout-finger/contacts_list_item.xml
@@ -30,7 +30,7 @@
<View android:id="@+id/list_divider"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:background="@android:drawable/divider_horizontal_dark"
+ android:background="@*android:drawable/divider_horizontal_dark_opaque"
/>
<RelativeLayout
@@ -38,17 +38,49 @@
android:layout_height="?android:attr/listPreferredItemHeight"
android:paddingLeft="14dip"
>
-
- <ImageView android:id="@+id/presence"
- android:layout_width="32dip"
- android:layout_height="32dip"
- android:layout_alignParentRight="true"
- android:layout_marginLeft="5dip"
- android:layout_centerVertical="true"
-
- android:gravity="center"
- android:scaleType="centerInside"
- />
+
+ <LinearLayout android:id="@+id/right_side"
+ android:layout_width="wrap_content"
+ android:layout_height="fill_parent"
+ android:orientation="horizontal"
+ android:layout_marginLeft="11dip"
+ android:layout_alignParentRight="true">
+
+ <ImageView android:id="@+id/presence"
+ android:layout_width="32dip"
+ android:layout_height="32dip"
+ android:layout_marginLeft="5dip"
+ android:layout_marginRight="5dip"
+
+ android:layout_gravity="center_vertical"
+ android:scaleType="centerInside"
+ />
+
+ <LinearLayout android:id="@+id/call_view"
+ android:layout_width="wrap_content"
+ android:layout_height="fill_parent"
+ android:orientation="horizontal">
+
+ <View android:id="@+id/divider"
+ android:layout_width="1px"
+ android:layout_height="fill_parent"
+ android:background="@*android:drawable/divider_vertical_dark_opaque"
+ />
+
+ <ImageView android:id="@+id/call_button"
+ android:layout_width="wrap_content"
+ android:layout_height="fill_parent"
+ android:paddingLeft="14dip"
+ android:paddingRight="14dip"
+ android:layout_centerVertical="true"
+ android:gravity="center"
+ android:src="@android:drawable/sym_action_call"
+ android:background="@android:drawable/list_selector_background"
+ />
+
+ </LinearLayout>
+
+ </LinearLayout>
<TextView android:id="@+id/label"
android:layout_width="wrap_content"
@@ -70,7 +102,7 @@
android:layout_marginLeft="5dip"
android:layout_toRightOf="@id/label"
android:layout_alignBaseline="@id/label"
- android:layout_toLeftOf="@id/presence"
+ android:layout_toLeftOf="@id/right_side"
android:layout_alignWithParentIfMissing="true"
android:singleLine="true"
@@ -85,7 +117,7 @@
android:layout_alignWithParentIfMissing="true"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
- android:layout_toLeftOf="@id/presence"
+ android:layout_toLeftOf="@id/right_side"
android:layout_marginBottom="1dip"
android:singleLine="true"
@@ -94,31 +126,5 @@
android:textAppearance="?android:attr/textAppearanceLarge"
/>
- <LinearLayout android:id="@+id/call_view"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:orientation="horizontal"
- android:layout_marginLeft="11dip"
- android:layout_alignParentRight="true">
-
- <View android:id="@+id/divider"
- android:layout_width="1dip"
- android:layout_height="fill_parent"
- android:background="@drawable/divider_vertical_dark"
- />
-
- <ImageView android:id="@+id/call_button"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:paddingLeft="14dip"
- android:paddingRight="14dip"
- android:layout_centerVertical="true"
- android:gravity="center"
- android:src="@android:drawable/sym_action_call"
- android:background="@android:drawable/list_selector_background"
- />
-
- </LinearLayout>
-
</RelativeLayout>
</LinearLayout>
diff --git a/res/layout-finger/contacts_list_item_photo.xml b/res/layout-finger/contacts_list_item_photo.xml
index 9f762ab..7fecada 100644
--- a/res/layout-finger/contacts_list_item_photo.xml
+++ b/res/layout-finger/contacts_list_item_photo.xml
@@ -30,26 +30,56 @@
<View android:id="@+id/list_divider"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
- android:background="@android:drawable/divider_horizontal_dark"
+ android:background="@*android:drawable/divider_horizontal_dark_opaque"
/>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:paddingLeft="5dip"
- android:paddingRight="5dip"
>
- <ImageView android:id="@+id/presence"
- android:layout_width="32dip"
- android:layout_height="32dip"
- android:layout_alignParentRight="true"
- android:layout_marginLeft="5dip"
- android:layout_centerVertical="true"
-
- android:gravity="center"
- android:scaleType="centerInside"
- />
+ <LinearLayout android:id="@+id/right_side"
+ android:layout_width="wrap_content"
+ android:layout_height="fill_parent"
+ android:orientation="horizontal"
+ android:layout_marginLeft="11dip"
+ android:layout_alignParentRight="true">
+
+ <ImageView android:id="@+id/presence"
+ android:layout_width="32dip"
+ android:layout_height="32dip"
+ android:layout_marginLeft="5dip"
+ android:layout_marginRight="5dip"
+
+ android:layout_gravity="center_vertical"
+ android:scaleType="centerInside"
+ />
+
+ <LinearLayout android:id="@+id/call_view"
+ android:layout_width="wrap_content"
+ android:layout_height="fill_parent"
+ android:orientation="horizontal">
+
+ <View android:id="@+id/divider"
+ android:layout_width="1px"
+ android:layout_height="fill_parent"
+ android:background="@*android:drawable/divider_vertical_dark_opaque"
+ />
+
+ <ImageView android:id="@+id/call_button"
+ android:layout_width="wrap_content"
+ android:layout_height="fill_parent"
+ android:paddingLeft="14dip"
+ android:paddingRight="14dip"
+ android:layout_centerVertical="true"
+ android:gravity="center"
+ android:src="@android:drawable/sym_action_call"
+ android:background="@android:drawable/list_selector_background"
+ />
+
+ </LinearLayout>
+ </LinearLayout>
<android.widget.FasttrackBadgeWidget android:id="@+id/photo"
android:layout_alignParentLeft="true"
@@ -85,7 +115,7 @@
android:layout_height="wrap_content"
android:layout_marginLeft="5dip"
android:layout_toRightOf="@id/label"
- android:layout_toLeftOf="@id/presence"
+ android:layout_toLeftOf="@id/right_side"
android:layout_alignBaseline="@id/label"
android:layout_alignWithParentIfMissing="true"
@@ -98,7 +128,7 @@
android:layout_width="0dip"
android:layout_height="0dip"
android:layout_toRightOf="@id/photo"
- android:layout_toLeftOf="@id/presence"
+ android:layout_toLeftOf="@id/right_side"
android:layout_alignParentTop="true"
android:layout_above="@id/label"
android:layout_alignWithParentIfMissing="true"
@@ -109,30 +139,5 @@
android:textAppearance="?android:attr/textAppearanceLarge"
/>
- <LinearLayout android:id="@+id/call_view"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:orientation="horizontal"
- android:layout_marginLeft="11dip"
- android:layout_alignParentRight="true">
-
- <View android:id="@+id/divider"
- android:layout_width="1dip"
- android:layout_height="fill_parent"
- android:background="@drawable/divider_vertical_dark"
- />
-
- <ImageView android:id="@+id/call_button"
- android:layout_width="wrap_content"
- android:layout_height="fill_parent"
- android:paddingLeft="14dip"
- android:paddingRight="14dip"
- android:layout_centerVertical="true"
- android:gravity="center"
- android:src="@android:drawable/sym_action_call"
- android:background="@android:drawable/list_selector_background"
- />
-
- </LinearLayout>
</RelativeLayout>
</LinearLayout>
diff --git a/res/layout-finger/recent_calls_list_item.xml b/res/layout-finger/recent_calls_list_item.xml
index 275dea2..0f53d87 100644
--- a/res/layout-finger/recent_calls_list_item.xml
+++ b/res/layout-finger/recent_calls_list_item.xml
@@ -33,12 +33,12 @@
/>
<View android:id="@+id/divider"
- android:layout_width="1dip"
+ android:layout_width="1px"
android:layout_height="fill_parent"
android:layout_toLeftOf="@id/call_icon"
android:layout_marginLeft="11dip"
- android:background="@drawable/divider_vertical_dark"
+ android:background="@*android:drawable/divider_vertical_dark_opaque"
/>
<ImageView android:id="@+id/call_type_icon"
diff --git a/res/values/ids.xml b/res/values/ids.xml
index 5746232..1af6162 100644
--- a/res/values/ids.xml
+++ b/res/values/ids.xml
@@ -39,6 +39,7 @@
<item type="id" name="dialog_select_multiple_vcard" />
<item type="id" name="dialog_reading_vcard" />
<item type="id" name="dialog_io_exception" />
+ <item type="id" name="dialog_error_with_message" />
<!-- For ExportVCard -->
<item type="id" name="dialog_confirm_export_vcard" />
diff --git a/src/com/android/contacts/ImportVCardActivity.java b/src/com/android/contacts/ImportVCardActivity.java
index 027c70e..e77a3e8 100644
--- a/src/com/android/contacts/ImportVCardActivity.java
+++ b/src/com/android/contacts/ImportVCardActivity.java
@@ -104,6 +104,25 @@
private VCardReadThread mVCardReadThread;
private ProgressDialog mProgressDialogForReadVCard;
+ private String mErrorMessage;
+
+ private class DialogDisplayer implements Runnable {
+ private final int mResId;
+ public DialogDisplayer(int resId) {
+ mResId = resId;
+ }
+ public DialogDisplayer(String errorMessage) {
+ mResId = R.id.dialog_error_with_message;
+ mErrorMessage = errorMessage;
+ }
+ public void run() {
+ // Show the Dialog only when the parent Activity is still alive.
+ if (!ImportVCardActivity.this.isFinishing()) {
+ showDialog(mResId);
+ }
+ }
+ }
+
private class CancelListener
implements DialogInterface.OnClickListener, DialogInterface.OnCancelListener {
public void onClick(DialogInterface dialog, int which) {
@@ -117,27 +136,6 @@
private CancelListener mCancelListener = new CancelListener();
- private class ErrorDisplayer implements Runnable {
- private String mErrorMessage;
-
- public ErrorDisplayer(String errorMessage) {
- mErrorMessage = errorMessage;
- }
-
- public void run() {
- String message =
- getString(R.string.reading_vcard_failed_message, mErrorMessage);
- AlertDialog.Builder builder =
- new AlertDialog.Builder(ImportVCardActivity.this)
- .setTitle(getString(R.string.reading_vcard_failed_title))
- .setIcon(android.R.drawable.ic_dialog_alert)
- .setMessage(message)
- .setOnCancelListener(mCancelListener)
- .setPositiveButton(android.R.string.ok, mCancelListener);
- builder.show();
- }
- }
-
private class VCardReadThread extends Thread
implements DialogInterface.OnCancelListener {
private ContentResolver mResolver;
@@ -263,7 +261,7 @@
} finally {
mWakeLock.release();
mProgressDialogForReadVCard.dismiss();
- // finish() is called via ErrorDisplayer() on failure.
+ // finish() is called via mCancelListener, which is used in DialogDisplayer.
if (shouldCallFinish && !isFinishing()) {
if (mErrorFileNameList == null || mErrorFileNameList.isEmpty()) {
finish();
@@ -279,7 +277,7 @@
builder.append(fileName);
}
- mHandler.post(new ErrorDisplayer(
+ mHandler.post(new DialogDisplayer(
getString(R.string.fail_reason_failed_to_read_files,
builder.toString())));
}
@@ -359,7 +357,7 @@
if (errorFileNameList != null) {
errorFileNameList.add(canonicalPath);
} else {
- mHandler.post(new ErrorDisplayer(
+ mHandler.post(new DialogDisplayer(
getString(R.string.fail_reason_io_error,
e.getMessage())));
}
@@ -371,7 +369,7 @@
if (errorFileNameList != null) {
errorFileNameList.add(canonicalPath);
} else {
- mHandler.post(new ErrorDisplayer(
+ mHandler.post(new DialogDisplayer(
getString(R.string.fail_reason_vcard_not_supported_error) +
" (" + e.getMessage() + ")"));
}
@@ -380,7 +378,7 @@
if (errorFileNameList != null) {
errorFileNameList.add(canonicalPath);
} else {
- mHandler.post(new ErrorDisplayer(
+ mHandler.post(new DialogDisplayer(
getString(R.string.fail_reason_vcard_parse_error) +
" (" + e.getMessage() + ")"));
}
@@ -602,17 +600,9 @@
} else if (size == 1) {
importOneVCardFromSDCard(mAllVCardFileList.get(0).getCanonicalPath());
} else if (getResources().getBoolean(R.bool.config_allow_users_select_all_vcard_import)) {
- mHandler.post(new Runnable() {
- public void run() {
- showDialog(R.id.dialog_select_import_type);
- }
- });
+ mHandler.post(new DialogDisplayer(R.id.dialog_select_import_type));
} else {
- mHandler.post(new Runnable() {
- public void run() {
- showDialog(R.id.dialog_select_one_vcard);
- }
- });
+ mHandler.post(new DialogDisplayer(R.id.dialog_select_one_vcard));
}
}
@@ -779,6 +769,20 @@
.setPositiveButton(android.R.string.ok, mCancelListener);
return builder.create();
}
+ case R.id.dialog_error_with_message: {
+ String message = mErrorMessage;
+ if (TextUtils.isEmpty(message)) {
+ Log.e(LOG_TAG, "Error message is null while it must not.");
+ message = getString(R.string.fail_reason_unknown);
+ }
+ AlertDialog.Builder builder = new AlertDialog.Builder(this)
+ .setTitle(getString(R.string.reading_vcard_failed_title))
+ .setIcon(android.R.drawable.ic_dialog_alert)
+ .setMessage(message)
+ .setOnCancelListener(mCancelListener)
+ .setPositiveButton(android.R.string.ok, mCancelListener);
+ return builder.create();
+ }
}
return super.onCreateDialog(resId);
diff --git a/src/com/android/contacts/ViewContactActivity.java b/src/com/android/contacts/ViewContactActivity.java
index 14039f0..70c1867 100644
--- a/src/com/android/contacts/ViewContactActivity.java
+++ b/src/com/android/contacts/ViewContactActivity.java
@@ -963,8 +963,7 @@
if (protocolObj instanceof Number) {
int protocol = ((Number) protocolObj).intValue();
- host = ContactsUtils.lookupProviderNameFromId(
- protocol).toLowerCase();
+ host = ContactsUtils.lookupProviderNameFromId(protocol);
if (protocol == CommonDataKinds.Im.PROTOCOL_GOOGLE_TALK
|| protocol == CommonDataKinds.Im.PROTOCOL_MSN) {
entry.maxLabelLines = 2;
@@ -975,9 +974,10 @@
}
// Only add the intent if there is a valid host
+ // host is null for CommonDataKinds.Im.PROTOCOL_CUSTOM
if (!TextUtils.isEmpty(host)) {
entry.intent = new Intent(Intent.ACTION_SENDTO,
- constructImToUrl(host, entry.data));
+ constructImToUrl(host.toLowerCase(), entry.data));
}
//TODO(emillar) Add in presence info
/*if (!aggCursor.isNull(METHODS_STATUS_COLUMN)) {
diff --git a/src/com/android/contacts/model/ExchangeSource.java b/src/com/android/contacts/model/ExchangeSource.java
index c017037..5c2d024 100644
--- a/src/com/android/contacts/model/ExchangeSource.java
+++ b/src/com/android/contacts/model/ExchangeSource.java
@@ -212,6 +212,8 @@
final DataKind kind = super.inflateOrganization(ContactsSource.LEVEL_MIMETYPES);
if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
+ kind.typeOverallMax = 1;
+
kind.typeColumn = Organization.TYPE;
kind.typeList = Lists.newArrayList();
kind.typeList.add(buildOrgType(Organization.TYPE_WORK).setSpecificMax(1));
diff --git a/src/com/android/contacts/model/FallbackSource.java b/src/com/android/contacts/model/FallbackSource.java
index eee6f71..fa545be 100644
--- a/src/com/android/contacts/model/FallbackSource.java
+++ b/src/com/android/contacts/model/FallbackSource.java
@@ -140,6 +140,9 @@
}
if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
+ kind.defaultValues = new ContentValues();
+ kind.defaultValues.put(Nickname.TYPE, Nickname.TYPE_DEFAULT);
+
kind.fieldList = Lists.newArrayList();
kind.fieldList.add(new EditField(Nickname.NAME, R.string.nicknameLabelsGroup,
FLAGS_PERSON_NAME));
@@ -345,7 +348,6 @@
}
if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
-
kind.fieldList = Lists.newArrayList();
kind.fieldList.add(new EditField(Note.NOTE, R.string.label_notes, FLAGS_NOTE));
}
@@ -364,6 +366,9 @@
}
if (inflateLevel >= ContactsSource.LEVEL_CONSTRAINTS) {
+ kind.defaultValues = new ContentValues();
+ kind.defaultValues.put(Website.TYPE, Website.TYPE_OTHER);
+
kind.fieldList = Lists.newArrayList();
kind.fieldList.add(new EditField(Website.URL, R.string.websiteLabelsGroup, FLAGS_WEBSITE));
}
diff --git a/src/com/android/contacts/ui/EditContactActivity.java b/src/com/android/contacts/ui/EditContactActivity.java
index c59c1d1..c3a3935 100644
--- a/src/com/android/contacts/ui/EditContactActivity.java
+++ b/src/com/android/contacts/ui/EditContactActivity.java
@@ -279,8 +279,7 @@
*/
protected EntityDelta getSelectedEntityDelta() {
final Long rawContactId = getSelectedRawContactId();
- final int stateIndex = mState.indexOfRawContactId(rawContactId);
- return mState.get(stateIndex);
+ return mState.getByRawContactId(rawContactId);
}
/**
@@ -391,9 +390,10 @@
// Find entity and source for selected tab
final EntityDelta entity = this.getSelectedEntityDelta();
- final String accountType = entity.getValues().getAsString(RawContacts.ACCOUNT_TYPE);
+ if (entity == null) return;
final Sources sources = Sources.getInstance(this);
+ final String accountType = entity.getValues().getAsString(RawContacts.ACCOUNT_TYPE);
final ContactsSource source = sources.getInflatedSource(accountType,
ContactsSource.LEVEL_CONSTRAINTS);
@@ -885,6 +885,7 @@
public void onClick(DialogInterface dialog, int which) {
// Mark the currently selected contact for deletion
final EntityDelta delta = getSelectedEntityDelta();
+ if (delta == null) return;
delta.markDeleted();
bindTabs();
diff --git a/src/com/android/contacts/ui/FastTrackWindow.java b/src/com/android/contacts/ui/FastTrackWindow.java
index 8626818..9d5740a 100644
--- a/src/com/android/contacts/ui/FastTrackWindow.java
+++ b/src/com/android/contacts/ui/FastTrackWindow.java
@@ -26,6 +26,7 @@
import com.android.internal.policy.PolicyManager;
import android.content.ActivityNotFoundException;
+import android.content.ContentValues;
import android.content.ContentUris;
import android.content.Context;
import android.content.EntityIterator;
@@ -66,6 +67,8 @@
import android.widget.AbsListView;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
+import android.widget.CheckBox;
+import android.widget.CompoundButton;
import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.ListView;
@@ -85,7 +88,7 @@
*/
public class FastTrackWindow implements Window.Callback,
NotifyingAsyncQueryHandler.AsyncQueryListener, View.OnClickListener,
- AbsListView.OnItemClickListener {
+ AbsListView.OnItemClickListener, CompoundButton.OnCheckedChangeListener {
private static final String TAG = "FastTrackWindow";
/**
@@ -119,6 +122,7 @@
private boolean mHasSocial = false;
private boolean mHasValidSocial = false;
private boolean mHasActions = false;
+ private boolean mMakePrimary = false;
private ImageView mArrowUp;
private ImageView mArrowDown;
@@ -133,6 +137,7 @@
private View mFooterDisambig;
private ListView mResolveList;
private CheckableImageView mLastAction;
+ private CheckBox mSetPrimaryCheckBox;
/**
* Set of {@link Action} that are associated with the aggregate currently
@@ -189,6 +194,9 @@
mFooter = mWindow.findViewById(R.id.footer);
mFooterDisambig = mWindow.findViewById(R.id.footer_disambig);
mResolveList = (ListView)mWindow.findViewById(android.R.id.list);
+ mSetPrimaryCheckBox = (CheckBox)mWindow.findViewById(android.R.id.checkbox);
+
+ mSetPrimaryCheckBox.setOnCheckedChangeListener(this);
// Prepare track entrance animation
mTrackAnim = AnimationUtils.loadAnimation(mContext, R.anim.fasttrack);
@@ -563,6 +571,12 @@
return cursor.getString(index);
}
+ /** Read {@link int} from the given {@link Cursor}. */
+ private static int getAsInt(Cursor cursor, String columnName) {
+ final int index = cursor.getColumnIndex(columnName);
+ return cursor.getInt(index);
+ }
+
/**
* Abstract definition of an action that could be performed, along with
* string description and icon.
@@ -578,6 +592,17 @@
* Build an {@link Intent} that will perform this action.
*/
public Intent getIntent();
+
+ /**
+ * Checks if the contact data for this action is primary.
+ */
+ public Boolean isPrimary();
+
+ /**
+ * Returns a lookup (@link Uri) for the contact data item.
+ */
+ public Uri getDataUri();
+
}
/**
@@ -594,11 +619,14 @@
private Intent mIntent;
private boolean mAlternate;
+ private Uri mDataUri;
+ private boolean mIsPrimary;
/**
* Create an action from common {@link Data} elements.
*/
- public DataAction(Context context, String mimeType, DataKind kind, Cursor cursor) {
+ public DataAction(Context context, String mimeType, DataKind kind,
+ long dataId, Cursor cursor) {
mContext = context;
mKind = kind;
mMimeType = mimeType;
@@ -611,10 +639,16 @@
mHeader = mKind.actionHeader.inflateUsing(context, cursor);
}
+ if (getAsInt(cursor, Data.IS_SUPER_PRIMARY) != 0) {
+ mIsPrimary = true;
+ }
+
if (mKind.actionBody != null) {
mBody = mKind.actionBody.inflateUsing(context, cursor);
}
+ mDataUri = ContentUris.withAppendedId(Data.CONTENT_URI, dataId);
+
// Handle well-known MIME-types with special care
if (Phone.CONTENT_ITEM_TYPE.equals(mimeType)) {
final String number = getAsString(cursor, Phone.NUMBER);
@@ -639,9 +673,7 @@
} else {
// Otherwise fall back to default VIEW action
- final long dataId = cursor.getLong(DataQuery._ID);
- final Uri dataUri = ContentUris.withAppendedId(Data.CONTENT_URI, dataId);
- mIntent = new Intent(Intent.ACTION_VIEW, dataUri);
+ mIntent = new Intent(Intent.ACTION_VIEW, mDataUri);
}
}
@@ -661,6 +693,16 @@
}
/** {@inheritDoc} */
+ public Uri getDataUri() {
+ return mDataUri;
+ }
+
+ /** {@inheritDoc} */
+ public Boolean isPrimary() {
+ return mIsPrimary;
+ }
+
+ /** {@inheritDoc} */
public Drawable getFallbackIcon() {
// Bail early if no valid resources
final String resPackageName = mKind.resPackageName;
@@ -719,6 +761,17 @@
final Uri contactUri = ContentUris.withAppendedId(Contacts.CONTENT_URI, mId);
return new Intent(Intent.ACTION_VIEW, contactUri);
}
+
+ /** {@inheritDoc} */
+ public Boolean isPrimary() {
+ return null;
+ }
+
+ /** {@inheritDoc} */
+ public Uri getDataUri() {
+ return null;
+ }
+
}
/**
@@ -868,6 +921,7 @@
final String accountType = cursor.getString(DataQuery.ACCOUNT_TYPE);
final String resPackage = cursor.getString(DataQuery.RES_PACKAGE);
final String mimeType = cursor.getString(DataQuery.MIMETYPE);
+ final long dataId = cursor.getLong(DataQuery._ID);
// Skip this data item if MIME-type excluded
if (isMimeExcluded(mimeType)) continue;
@@ -895,14 +949,14 @@
// Build an action for this data entry, find a mapping to a UI
// element, build its summary from the cursor, and collect it
// along with all others of this MIME-type.
- final Action action = new DataAction(mContext, mimeType, kind, cursor);
+ final Action action = new DataAction(mContext, mimeType, kind, dataId, cursor);
considerAdd(action, mimeType);
}
// If phone number, also insert as text message action
if (Phone.CONTENT_ITEM_TYPE.equals(mimeType) && kind != null) {
- final Action action = new DataAction(mContext, Constants.MIME_SMS_ADDRESS, kind,
- cursor);
+ final Action action = new DataAction(mContext, Constants.MIME_SMS_ADDRESS,
+ kind, dataId, cursor);
considerAdd(action, Constants.MIME_SMS_ADDRESS);
}
}
@@ -943,14 +997,24 @@
*/
private View inflateAction(String mimeType) {
CheckableImageView view = (CheckableImageView)mInflater.inflate(R.layout.fasttrack_item, mTrack, false);
+ boolean isActionSet = false;
// Add direct intent if single child, otherwise flag for multiple
ActionList children = mActions.get(mimeType);
Action firstInfo = children.get(0);
if (children.size() == 1) {
- view.setTag(firstInfo.getIntent());
+ view.setTag(firstInfo);
} else {
- view.setTag(children);
+ for (Action action: children) {
+ if (action.isPrimary()) {
+ view.setTag(action);
+ isActionSet = true;
+ break;
+ }
+ }
+ if (!isActionSet) {
+ view.setTag(children);
+ }
}
// Set icon and listen for clicks
@@ -1007,16 +1071,26 @@
public void onClick(View view) {
final boolean isActionView = (view instanceof CheckableImageView);
final CheckableImageView actionView = isActionView ? (CheckableImageView)view : null;
-
final Object tag = view.getTag();
- if (tag instanceof Intent) {
+ if (tag instanceof Action) {
// Hide the resolution list, if present
setResolveVisible(false, actionView);
this.dismiss();
try {
// Incoming tag is concrete intent, so try launching
- mContext.startActivity((Intent)tag);
+ final Action action = (Action)tag;
+ mContext.startActivity(action.getIntent());
+
+ if (mMakePrimary) {
+ ContentValues values = new ContentValues(1);
+ values.put(Data.IS_SUPER_PRIMARY, 1);
+ final Uri dataUri = action.getDataUri();
+ if (dataUri != null) {
+ mContext.getContentResolver().update(dataUri, values, null, null);
+ }
+ }
+
} catch (ActivityNotFoundException e) {
Toast.makeText(mContext, R.string.fasttrack_missing_app, Toast.LENGTH_SHORT).show();
}
@@ -1056,7 +1130,7 @@
text1.setText(action.getHeader());
text2.setText(action.getBody());
- convertView.setTag(action.getIntent());
+ convertView.setTag(action);
return convertView;
}
});
@@ -1067,6 +1141,10 @@
}
}
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ mMakePrimary = isChecked;
+ }
+
/** {@inheritDoc} */
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN
diff --git a/src/com/android/contacts/ui/ShowOrCreateActivity.java b/src/com/android/contacts/ui/ShowOrCreateActivity.java
index 8d3ed01..7728b36 100755
--- a/src/com/android/contacts/ui/ShowOrCreateActivity.java
+++ b/src/com/android/contacts/ui/ShowOrCreateActivity.java
@@ -23,6 +23,7 @@
import android.app.Activity;
import android.app.AlertDialog;
+import android.app.Dialog;
import android.content.ComponentName;
import android.content.ContentUris;
import android.content.DialogInterface;
@@ -68,6 +69,8 @@
static final int CONTACT_ID_INDEX = 0;
+ static final int CREATE_CONTACT_DIALOG = 1;
+
static final int QUERY_TOKEN = 42;
private NotifyingAsyncQueryHandler mQueryHandler;
@@ -189,24 +192,33 @@
finish();
} else {
+ showDialog(CREATE_CONTACT_DIALOG);
+ }
+ }
+ }
+
+ @Override
+ protected Dialog onCreateDialog(int id) {
+ switch(id) {
+ case CREATE_CONTACT_DIALOG:
// Prompt user to insert or edit contact
- Intent createIntent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
+ final Intent createIntent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
createIntent.putExtras(mCreateExtras);
createIntent.setType(RawContacts.CONTENT_ITEM_TYPE);
- CharSequence message = getResources().getString(
+ final CharSequence message = getResources().getString(
R.string.add_contact_dlg_message_fmt, mCreateDescrip);
- new AlertDialog.Builder(this)
+ return new AlertDialog.Builder(this)
.setTitle(R.string.add_contact_dlg_title)
.setMessage(message)
.setPositiveButton(android.R.string.ok,
new IntentClickListener(this, createIntent))
.setNegativeButton(android.R.string.cancel,
new IntentClickListener(this, null))
- .show();
- }
+ .create();
}
+ return super.onCreateDialog(id);
}
/** {@inheritDoc} */
diff --git a/src/com/android/contacts/ui/widget/GenericEditorView.java b/src/com/android/contacts/ui/widget/GenericEditorView.java
index 3522258..4490fbf 100644
--- a/src/com/android/contacts/ui/widget/GenericEditorView.java
+++ b/src/com/android/contacts/ui/widget/GenericEditorView.java
@@ -215,7 +215,11 @@
}
/**
- * Prepare dialog for entering a custom label.
+ * Prepare dialog for entering a custom label. The input value is trimmed: white spaces before
+ * and after the input text is removed.
+ * <p>
+ * If the final value is empty, this change request is ignored;
+ * no empty text is allowed in any custom label.
*/
public Dialog createCustomDialog() {
final EditText customType = new EditText(mContext);
@@ -228,13 +232,14 @@
builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
- final String customText = customType.getText().toString();
- mEntry.put(mType.customColumn, customText);
- rebuildLabel();
+ final String customText = customType.getText().toString().trim();
+ if (!TextUtils.isEmpty(customText)) {
+ mEntry.put(mType.customColumn, customText);
+ rebuildLabel();
+ }
}
});
- // TODO: handle canceled case by reverting to previous type?
builder.setNegativeButton(android.R.string.cancel, null);
return builder.create();