summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Android.mk2
-rw-r--r--AndroidManifest.xml3
-rw-r--r--res/drawable-ar-hdpi/dial_num_0_wht.pngbin0 -> 1022 bytes
-rw-r--r--res/drawable-ar-hdpi/dial_num_1_wht.pngbin0 -> 2180 bytes
-rw-r--r--res/drawable-ar-hdpi/dial_num_2_wht.pngbin0 -> 2393 bytes
-rw-r--r--res/drawable-ar-hdpi/dial_num_3_wht.pngbin0 -> 2237 bytes
-rw-r--r--res/drawable-ar-hdpi/dial_num_4_wht.pngbin0 -> 2309 bytes
-rw-r--r--res/drawable-ar-hdpi/dial_num_5_wht.pngbin0 -> 2208 bytes
-rw-r--r--res/drawable-ar-hdpi/dial_num_6_wht.pngbin0 -> 2216 bytes
-rw-r--r--res/drawable-ar-hdpi/dial_num_7_wht.pngbin0 -> 3089 bytes
-rw-r--r--res/drawable-ar-hdpi/dial_num_8_wht.pngbin0 -> 2546 bytes
-rw-r--r--res/drawable-ar-hdpi/dial_num_9_wht.pngbin0 -> 2887 bytes
-rw-r--r--res/drawable-ar-mdpi/dial_num_0_wht.pngbin0 -> 761 bytes
-rw-r--r--res/drawable-ar-mdpi/dial_num_1_wht.pngbin0 -> 1561 bytes
-rw-r--r--res/drawable-ar-mdpi/dial_num_2_wht.pngbin0 -> 1809 bytes
-rw-r--r--res/drawable-ar-mdpi/dial_num_3_wht.pngbin0 -> 1704 bytes
-rw-r--r--res/drawable-ar-mdpi/dial_num_4_wht.pngbin0 -> 1697 bytes
-rw-r--r--res/drawable-ar-mdpi/dial_num_5_wht.pngbin0 -> 1633 bytes
-rw-r--r--res/drawable-ar-mdpi/dial_num_6_wht.pngbin0 -> 1756 bytes
-rw-r--r--res/drawable-ar-mdpi/dial_num_7_wht.pngbin0 -> 2022 bytes
-rw-r--r--res/drawable-ar-mdpi/dial_num_8_wht.pngbin0 -> 1808 bytes
-rw-r--r--res/drawable-ar-mdpi/dial_num_9_wht.pngbin0 -> 1909 bytes
-rw-r--r--res/drawable-ar-xhdpi/dial_num_0_wht.pngbin0 -> 1062 bytes
-rw-r--r--res/drawable-ar-xhdpi/dial_num_1_wht.pngbin0 -> 2912 bytes
-rw-r--r--res/drawable-ar-xhdpi/dial_num_2_wht.pngbin0 -> 3279 bytes
-rw-r--r--res/drawable-ar-xhdpi/dial_num_3_wht.pngbin0 -> 2955 bytes
-rw-r--r--res/drawable-ar-xhdpi/dial_num_4_wht.pngbin0 -> 3007 bytes
-rw-r--r--res/drawable-ar-xhdpi/dial_num_5_wht.pngbin0 -> 2926 bytes
-rw-r--r--res/drawable-ar-xhdpi/dial_num_6_wht.pngbin0 -> 3000 bytes
-rw-r--r--res/drawable-ar-xhdpi/dial_num_7_wht.pngbin0 -> 4230 bytes
-rw-r--r--res/drawable-ar-xhdpi/dial_num_8_wht.pngbin0 -> 3417 bytes
-rw-r--r--res/drawable-ar-xhdpi/dial_num_9_wht.pngbin0 -> 3984 bytes
-rw-r--r--res/drawable-fa-hdpi/dial_num_0_wht.pngbin0 -> 1022 bytes
-rw-r--r--res/drawable-fa-hdpi/dial_num_1_wht.pngbin0 -> 2180 bytes
-rw-r--r--res/drawable-fa-hdpi/dial_num_2_wht.pngbin0 -> 2393 bytes
-rw-r--r--res/drawable-fa-hdpi/dial_num_3_wht.pngbin0 -> 2237 bytes
-rw-r--r--res/drawable-fa-hdpi/dial_num_4_wht.pngbin0 -> 2398 bytes
-rw-r--r--res/drawable-fa-hdpi/dial_num_5_wht.pngbin0 -> 2621 bytes
-rw-r--r--res/drawable-fa-hdpi/dial_num_6_wht.pngbin0 -> 2707 bytes
-rw-r--r--res/drawable-fa-hdpi/dial_num_7_wht.pngbin0 -> 3089 bytes
-rw-r--r--res/drawable-fa-hdpi/dial_num_8_wht.pngbin0 -> 2546 bytes
-rw-r--r--res/drawable-fa-hdpi/dial_num_9_wht.pngbin0 -> 2887 bytes
-rw-r--r--res/drawable-fa-mdpi/dial_num_0_wht.pngbin0 -> 761 bytes
-rw-r--r--res/drawable-fa-mdpi/dial_num_1_wht.pngbin0 -> 1561 bytes
-rw-r--r--res/drawable-fa-mdpi/dial_num_2_wht.pngbin0 -> 1809 bytes
-rw-r--r--res/drawable-fa-mdpi/dial_num_3_wht.pngbin0 -> 1704 bytes
-rw-r--r--res/drawable-fa-mdpi/dial_num_4_wht.pngbin0 -> 1758 bytes
-rw-r--r--res/drawable-fa-mdpi/dial_num_5_wht.pngbin0 -> 1821 bytes
-rw-r--r--res/drawable-fa-mdpi/dial_num_6_wht.pngbin0 -> 1891 bytes
-rw-r--r--res/drawable-fa-mdpi/dial_num_7_wht.pngbin0 -> 2022 bytes
-rw-r--r--res/drawable-fa-mdpi/dial_num_8_wht.pngbin0 -> 1808 bytes
-rw-r--r--res/drawable-fa-mdpi/dial_num_9_wht.pngbin0 -> 1909 bytes
-rw-r--r--res/drawable-fa-xhdpi/dial_num_0_wht.pngbin0 -> 1062 bytes
-rw-r--r--res/drawable-fa-xhdpi/dial_num_1_wht.pngbin0 -> 2912 bytes
-rw-r--r--res/drawable-fa-xhdpi/dial_num_2_wht.pngbin0 -> 3279 bytes
-rw-r--r--res/drawable-fa-xhdpi/dial_num_3_wht.pngbin0 -> 2955 bytes
-rw-r--r--res/drawable-fa-xhdpi/dial_num_4_wht.pngbin0 -> 3139 bytes
-rw-r--r--res/drawable-fa-xhdpi/dial_num_5_wht.pngbin0 -> 3591 bytes
-rw-r--r--res/drawable-fa-xhdpi/dial_num_6_wht.pngbin0 -> 3517 bytes
-rw-r--r--res/drawable-fa-xhdpi/dial_num_7_wht.pngbin0 -> 4230 bytes
-rw-r--r--res/drawable-fa-xhdpi/dial_num_8_wht.pngbin0 -> 3417 bytes
-rw-r--r--res/drawable-fa-xhdpi/dial_num_9_wht.pngbin0 -> 3984 bytes
-rw-r--r--res/drawable-ldrtl-hdpi/ic_ab_dialer_holo_dark.pngbin0 -> 5665 bytes
-rw-r--r--res/drawable-ldrtl-hdpi/ic_call_incoming_holo_dark.pngbin0 -> 598 bytes
-rw-r--r--res/drawable-ldrtl-hdpi/ic_call_missed_holo_dark.pngbin0 -> 529 bytes
-rw-r--r--res/drawable-ldrtl-hdpi/ic_call_outgoing_holo_dark.pngbin0 -> 602 bytes
-rw-r--r--res/drawable-ldrtl-hdpi/ic_dial_action_call.pngbin0 -> 7134 bytes
-rw-r--r--res/drawable-ldrtl-hdpi/ic_sound_off_speakerphone_disabled_holo_dark.pngbin0 -> 5688 bytes
-rw-r--r--res/drawable-ldrtl-hdpi/ic_sound_off_speakerphone_holo_dark.pngbin0 -> 5759 bytes
-rw-r--r--res/drawable-ldrtl-hdpi/ic_sound_speakerphone_disabled_holo_dark.pngbin0 -> 6381 bytes
-rw-r--r--res/drawable-ldrtl-hdpi/ic_sound_speakerphone_holo_dark.pngbin0 -> 6370 bytes
-rw-r--r--res/drawable-ldrtl-mdpi/ic_ab_dialer_holo_dark.pngbin0 -> 5014 bytes
-rw-r--r--res/drawable-ldrtl-mdpi/ic_call_incoming_holo_dark.pngbin0 -> 399 bytes
-rw-r--r--res/drawable-ldrtl-mdpi/ic_call_missed_holo_dark.pngbin0 -> 351 bytes
-rw-r--r--res/drawable-ldrtl-mdpi/ic_call_outgoing_holo_dark.pngbin0 -> 370 bytes
-rw-r--r--res/drawable-ldrtl-mdpi/ic_dial_action_call.pngbin0 -> 5938 bytes
-rw-r--r--res/drawable-ldrtl-mdpi/ic_sound_off_speakerphone_disabled_holo_dark.pngbin0 -> 5005 bytes
-rw-r--r--res/drawable-ldrtl-mdpi/ic_sound_off_speakerphone_holo_dark.pngbin0 -> 5034 bytes
-rw-r--r--res/drawable-ldrtl-mdpi/ic_sound_speakerphone_disabled_holo_dark.pngbin0 -> 5408 bytes
-rw-r--r--res/drawable-ldrtl-mdpi/ic_sound_speakerphone_holo_dark.pngbin0 -> 5406 bytes
-rw-r--r--res/drawable-ldrtl-xhdpi/ic_ab_dialer_holo_dark.pngbin0 -> 6513 bytes
-rw-r--r--res/drawable-ldrtl-xhdpi/ic_call_incoming_holo_dark.pngbin0 -> 766 bytes
-rw-r--r--res/drawable-ldrtl-xhdpi/ic_call_missed_holo_dark.pngbin0 -> 672 bytes
-rw-r--r--res/drawable-ldrtl-xhdpi/ic_call_outgoing_holo_dark.pngbin0 -> 816 bytes
-rw-r--r--res/drawable-ldrtl-xhdpi/ic_dial_action_call.pngbin0 -> 8523 bytes
-rw-r--r--res/drawable-ldrtl-xhdpi/ic_sound_off_speakerphone_disabled_holo_dark.pngbin0 -> 6472 bytes
-rw-r--r--res/drawable-ldrtl-xhdpi/ic_sound_off_speakerphone_holo_dark.pngbin0 -> 6604 bytes
-rw-r--r--res/drawable-ldrtl-xhdpi/ic_sound_speakerphone_disabled_holo_dark.pngbin0 -> 7505 bytes
-rw-r--r--res/drawable-ldrtl-xhdpi/ic_sound_speakerphone_holo_dark.pngbin0 -> 7584 bytes
-rw-r--r--res/layout-land/dialpad_fragment.xml3
-rw-r--r--res/layout/account_filter_header_for_phone_favorite.xml8
-rw-r--r--res/layout/call_detail.xml36
-rw-r--r--res/layout/call_detail_history_header.xml2
-rw-r--r--res/layout/call_detail_history_item.xml6
-rw-r--r--res/layout/call_log_fragment.xml10
-rw-r--r--res/layout/call_log_list_item.xml30
-rw-r--r--res/layout/call_log_voicemail_status.xml8
-rw-r--r--res/layout/dialpad.xml7
-rw-r--r--res/layout/dialpad_fragment.xml5
-rw-r--r--res/layout/dialtacts_activity.xml4
-rw-r--r--res/layout/dialtacts_custom_action_bar.xml6
-rwxr-xr-xres/layout/phone_disambig_item.xml4
-rw-r--r--res/layout/phone_loading_contacts.xml4
-rw-r--r--res/layout/playback_layout.xml14
-rw-r--r--res/layout/set_primary_checkbox.xml4
-rw-r--r--src/com/android/dialer/DialtactsActivity.java3
-rw-r--r--src/com/android/dialer/PhoneCallDetailsHelper.java4
-rw-r--r--src/com/android/dialer/dialpad/DialpadFragment.java155
-rw-r--r--src/com/android/dialer/dialpad/DialpadImageButton.java39
-rw-r--r--src/com/android/dialer/dialpad/DigitsEditText.java28
-rw-r--r--src/com/android/dialer/dialpad/SmartDialCache.java67
-rw-r--r--src/com/android/dialer/dialpad/SmartDialLoaderTask.java2
-rw-r--r--src/com/android/dialer/list/PhoneFavoriteFragment.java6
-rw-r--r--tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java10
-rw-r--r--tests/src/com/android/dialer/dialpad/DialpadFragmentTest.java81
115 files changed, 308 insertions, 243 deletions
diff --git a/Android.mk b/Android.mk
index 97dfd82d5..ea13c65f8 100644
--- a/Android.mk
+++ b/Android.mk
@@ -34,5 +34,5 @@ LOCAL_PROGUARD_FLAG_FILES := proguard.flags
include $(BUILD_PACKAGE)
-# Use the folloing include to make our test apk.
+# Use the following include to make our test apk.
include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index eb05186c3..bde0775ba 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -48,7 +48,8 @@
<application
android:label="@string/applicationLabel"
android:icon="@mipmap/ic_launcher_phone"
- android:hardwareAccelerated="true">
+ android:hardwareAccelerated="true"
+ android:supportsRtl="true">
<!-- The entrance point for Phone UI.
stateAlwaysHidden is set to suppress keyboard show up on
diff --git a/res/drawable-ar-hdpi/dial_num_0_wht.png b/res/drawable-ar-hdpi/dial_num_0_wht.png
new file mode 100644
index 000000000..d06bb6bfc
--- /dev/null
+++ b/res/drawable-ar-hdpi/dial_num_0_wht.png
Binary files differ
diff --git a/res/drawable-ar-hdpi/dial_num_1_wht.png b/res/drawable-ar-hdpi/dial_num_1_wht.png
new file mode 100644
index 000000000..397ec3237
--- /dev/null
+++ b/res/drawable-ar-hdpi/dial_num_1_wht.png
Binary files differ
diff --git a/res/drawable-ar-hdpi/dial_num_2_wht.png b/res/drawable-ar-hdpi/dial_num_2_wht.png
new file mode 100644
index 000000000..ca62c2d6a
--- /dev/null
+++ b/res/drawable-ar-hdpi/dial_num_2_wht.png
Binary files differ
diff --git a/res/drawable-ar-hdpi/dial_num_3_wht.png b/res/drawable-ar-hdpi/dial_num_3_wht.png
new file mode 100644
index 000000000..887296845
--- /dev/null
+++ b/res/drawable-ar-hdpi/dial_num_3_wht.png
Binary files differ
diff --git a/res/drawable-ar-hdpi/dial_num_4_wht.png b/res/drawable-ar-hdpi/dial_num_4_wht.png
new file mode 100644
index 000000000..6f6888408
--- /dev/null
+++ b/res/drawable-ar-hdpi/dial_num_4_wht.png
Binary files differ
diff --git a/res/drawable-ar-hdpi/dial_num_5_wht.png b/res/drawable-ar-hdpi/dial_num_5_wht.png
new file mode 100644
index 000000000..d107f731d
--- /dev/null
+++ b/res/drawable-ar-hdpi/dial_num_5_wht.png
Binary files differ
diff --git a/res/drawable-ar-hdpi/dial_num_6_wht.png b/res/drawable-ar-hdpi/dial_num_6_wht.png
new file mode 100644
index 000000000..e46474e2f
--- /dev/null
+++ b/res/drawable-ar-hdpi/dial_num_6_wht.png
Binary files differ
diff --git a/res/drawable-ar-hdpi/dial_num_7_wht.png b/res/drawable-ar-hdpi/dial_num_7_wht.png
new file mode 100644
index 000000000..d121401f1
--- /dev/null
+++ b/res/drawable-ar-hdpi/dial_num_7_wht.png
Binary files differ
diff --git a/res/drawable-ar-hdpi/dial_num_8_wht.png b/res/drawable-ar-hdpi/dial_num_8_wht.png
new file mode 100644
index 000000000..546574bca
--- /dev/null
+++ b/res/drawable-ar-hdpi/dial_num_8_wht.png
Binary files differ
diff --git a/res/drawable-ar-hdpi/dial_num_9_wht.png b/res/drawable-ar-hdpi/dial_num_9_wht.png
new file mode 100644
index 000000000..7e6a71271
--- /dev/null
+++ b/res/drawable-ar-hdpi/dial_num_9_wht.png
Binary files differ
diff --git a/res/drawable-ar-mdpi/dial_num_0_wht.png b/res/drawable-ar-mdpi/dial_num_0_wht.png
new file mode 100644
index 000000000..5f7eb7f66
--- /dev/null
+++ b/res/drawable-ar-mdpi/dial_num_0_wht.png
Binary files differ
diff --git a/res/drawable-ar-mdpi/dial_num_1_wht.png b/res/drawable-ar-mdpi/dial_num_1_wht.png
new file mode 100644
index 000000000..8a7d0862f
--- /dev/null
+++ b/res/drawable-ar-mdpi/dial_num_1_wht.png
Binary files differ
diff --git a/res/drawable-ar-mdpi/dial_num_2_wht.png b/res/drawable-ar-mdpi/dial_num_2_wht.png
new file mode 100644
index 000000000..87c1d494e
--- /dev/null
+++ b/res/drawable-ar-mdpi/dial_num_2_wht.png
Binary files differ
diff --git a/res/drawable-ar-mdpi/dial_num_3_wht.png b/res/drawable-ar-mdpi/dial_num_3_wht.png
new file mode 100644
index 000000000..e600393c0
--- /dev/null
+++ b/res/drawable-ar-mdpi/dial_num_3_wht.png
Binary files differ
diff --git a/res/drawable-ar-mdpi/dial_num_4_wht.png b/res/drawable-ar-mdpi/dial_num_4_wht.png
new file mode 100644
index 000000000..d2414c9f5
--- /dev/null
+++ b/res/drawable-ar-mdpi/dial_num_4_wht.png
Binary files differ
diff --git a/res/drawable-ar-mdpi/dial_num_5_wht.png b/res/drawable-ar-mdpi/dial_num_5_wht.png
new file mode 100644
index 000000000..060f9045b
--- /dev/null
+++ b/res/drawable-ar-mdpi/dial_num_5_wht.png
Binary files differ
diff --git a/res/drawable-ar-mdpi/dial_num_6_wht.png b/res/drawable-ar-mdpi/dial_num_6_wht.png
new file mode 100644
index 000000000..5763ab855
--- /dev/null
+++ b/res/drawable-ar-mdpi/dial_num_6_wht.png
Binary files differ
diff --git a/res/drawable-ar-mdpi/dial_num_7_wht.png b/res/drawable-ar-mdpi/dial_num_7_wht.png
new file mode 100644
index 000000000..5c8189669
--- /dev/null
+++ b/res/drawable-ar-mdpi/dial_num_7_wht.png
Binary files differ
diff --git a/res/drawable-ar-mdpi/dial_num_8_wht.png b/res/drawable-ar-mdpi/dial_num_8_wht.png
new file mode 100644
index 000000000..7744206bd
--- /dev/null
+++ b/res/drawable-ar-mdpi/dial_num_8_wht.png
Binary files differ
diff --git a/res/drawable-ar-mdpi/dial_num_9_wht.png b/res/drawable-ar-mdpi/dial_num_9_wht.png
new file mode 100644
index 000000000..a0c488c22
--- /dev/null
+++ b/res/drawable-ar-mdpi/dial_num_9_wht.png
Binary files differ
diff --git a/res/drawable-ar-xhdpi/dial_num_0_wht.png b/res/drawable-ar-xhdpi/dial_num_0_wht.png
new file mode 100644
index 000000000..069afe6a5
--- /dev/null
+++ b/res/drawable-ar-xhdpi/dial_num_0_wht.png
Binary files differ
diff --git a/res/drawable-ar-xhdpi/dial_num_1_wht.png b/res/drawable-ar-xhdpi/dial_num_1_wht.png
new file mode 100644
index 000000000..b960b45e7
--- /dev/null
+++ b/res/drawable-ar-xhdpi/dial_num_1_wht.png
Binary files differ
diff --git a/res/drawable-ar-xhdpi/dial_num_2_wht.png b/res/drawable-ar-xhdpi/dial_num_2_wht.png
new file mode 100644
index 000000000..9c6d3938f
--- /dev/null
+++ b/res/drawable-ar-xhdpi/dial_num_2_wht.png
Binary files differ
diff --git a/res/drawable-ar-xhdpi/dial_num_3_wht.png b/res/drawable-ar-xhdpi/dial_num_3_wht.png
new file mode 100644
index 000000000..16cc93084
--- /dev/null
+++ b/res/drawable-ar-xhdpi/dial_num_3_wht.png
Binary files differ
diff --git a/res/drawable-ar-xhdpi/dial_num_4_wht.png b/res/drawable-ar-xhdpi/dial_num_4_wht.png
new file mode 100644
index 000000000..2de96dafb
--- /dev/null
+++ b/res/drawable-ar-xhdpi/dial_num_4_wht.png
Binary files differ
diff --git a/res/drawable-ar-xhdpi/dial_num_5_wht.png b/res/drawable-ar-xhdpi/dial_num_5_wht.png
new file mode 100644
index 000000000..a0b1d8ae9
--- /dev/null
+++ b/res/drawable-ar-xhdpi/dial_num_5_wht.png
Binary files differ
diff --git a/res/drawable-ar-xhdpi/dial_num_6_wht.png b/res/drawable-ar-xhdpi/dial_num_6_wht.png
new file mode 100644
index 000000000..24cc1074c
--- /dev/null
+++ b/res/drawable-ar-xhdpi/dial_num_6_wht.png
Binary files differ
diff --git a/res/drawable-ar-xhdpi/dial_num_7_wht.png b/res/drawable-ar-xhdpi/dial_num_7_wht.png
new file mode 100644
index 000000000..59be814dd
--- /dev/null
+++ b/res/drawable-ar-xhdpi/dial_num_7_wht.png
Binary files differ
diff --git a/res/drawable-ar-xhdpi/dial_num_8_wht.png b/res/drawable-ar-xhdpi/dial_num_8_wht.png
new file mode 100644
index 000000000..30f30d203
--- /dev/null
+++ b/res/drawable-ar-xhdpi/dial_num_8_wht.png
Binary files differ
diff --git a/res/drawable-ar-xhdpi/dial_num_9_wht.png b/res/drawable-ar-xhdpi/dial_num_9_wht.png
new file mode 100644
index 000000000..12651f3b5
--- /dev/null
+++ b/res/drawable-ar-xhdpi/dial_num_9_wht.png
Binary files differ
diff --git a/res/drawable-fa-hdpi/dial_num_0_wht.png b/res/drawable-fa-hdpi/dial_num_0_wht.png
new file mode 100644
index 000000000..d06bb6bfc
--- /dev/null
+++ b/res/drawable-fa-hdpi/dial_num_0_wht.png
Binary files differ
diff --git a/res/drawable-fa-hdpi/dial_num_1_wht.png b/res/drawable-fa-hdpi/dial_num_1_wht.png
new file mode 100644
index 000000000..397ec3237
--- /dev/null
+++ b/res/drawable-fa-hdpi/dial_num_1_wht.png
Binary files differ
diff --git a/res/drawable-fa-hdpi/dial_num_2_wht.png b/res/drawable-fa-hdpi/dial_num_2_wht.png
new file mode 100644
index 000000000..ca62c2d6a
--- /dev/null
+++ b/res/drawable-fa-hdpi/dial_num_2_wht.png
Binary files differ
diff --git a/res/drawable-fa-hdpi/dial_num_3_wht.png b/res/drawable-fa-hdpi/dial_num_3_wht.png
new file mode 100644
index 000000000..887296845
--- /dev/null
+++ b/res/drawable-fa-hdpi/dial_num_3_wht.png
Binary files differ
diff --git a/res/drawable-fa-hdpi/dial_num_4_wht.png b/res/drawable-fa-hdpi/dial_num_4_wht.png
new file mode 100644
index 000000000..72e59047c
--- /dev/null
+++ b/res/drawable-fa-hdpi/dial_num_4_wht.png
Binary files differ
diff --git a/res/drawable-fa-hdpi/dial_num_5_wht.png b/res/drawable-fa-hdpi/dial_num_5_wht.png
new file mode 100644
index 000000000..92615345d
--- /dev/null
+++ b/res/drawable-fa-hdpi/dial_num_5_wht.png
Binary files differ
diff --git a/res/drawable-fa-hdpi/dial_num_6_wht.png b/res/drawable-fa-hdpi/dial_num_6_wht.png
new file mode 100644
index 000000000..2f6141d43
--- /dev/null
+++ b/res/drawable-fa-hdpi/dial_num_6_wht.png
Binary files differ
diff --git a/res/drawable-fa-hdpi/dial_num_7_wht.png b/res/drawable-fa-hdpi/dial_num_7_wht.png
new file mode 100644
index 000000000..d121401f1
--- /dev/null
+++ b/res/drawable-fa-hdpi/dial_num_7_wht.png
Binary files differ
diff --git a/res/drawable-fa-hdpi/dial_num_8_wht.png b/res/drawable-fa-hdpi/dial_num_8_wht.png
new file mode 100644
index 000000000..546574bca
--- /dev/null
+++ b/res/drawable-fa-hdpi/dial_num_8_wht.png
Binary files differ
diff --git a/res/drawable-fa-hdpi/dial_num_9_wht.png b/res/drawable-fa-hdpi/dial_num_9_wht.png
new file mode 100644
index 000000000..7e6a71271
--- /dev/null
+++ b/res/drawable-fa-hdpi/dial_num_9_wht.png
Binary files differ
diff --git a/res/drawable-fa-mdpi/dial_num_0_wht.png b/res/drawable-fa-mdpi/dial_num_0_wht.png
new file mode 100644
index 000000000..5f7eb7f66
--- /dev/null
+++ b/res/drawable-fa-mdpi/dial_num_0_wht.png
Binary files differ
diff --git a/res/drawable-fa-mdpi/dial_num_1_wht.png b/res/drawable-fa-mdpi/dial_num_1_wht.png
new file mode 100644
index 000000000..8a7d0862f
--- /dev/null
+++ b/res/drawable-fa-mdpi/dial_num_1_wht.png
Binary files differ
diff --git a/res/drawable-fa-mdpi/dial_num_2_wht.png b/res/drawable-fa-mdpi/dial_num_2_wht.png
new file mode 100644
index 000000000..87c1d494e
--- /dev/null
+++ b/res/drawable-fa-mdpi/dial_num_2_wht.png
Binary files differ
diff --git a/res/drawable-fa-mdpi/dial_num_3_wht.png b/res/drawable-fa-mdpi/dial_num_3_wht.png
new file mode 100644
index 000000000..e600393c0
--- /dev/null
+++ b/res/drawable-fa-mdpi/dial_num_3_wht.png
Binary files differ
diff --git a/res/drawable-fa-mdpi/dial_num_4_wht.png b/res/drawable-fa-mdpi/dial_num_4_wht.png
new file mode 100644
index 000000000..737589071
--- /dev/null
+++ b/res/drawable-fa-mdpi/dial_num_4_wht.png
Binary files differ
diff --git a/res/drawable-fa-mdpi/dial_num_5_wht.png b/res/drawable-fa-mdpi/dial_num_5_wht.png
new file mode 100644
index 000000000..e8a315615
--- /dev/null
+++ b/res/drawable-fa-mdpi/dial_num_5_wht.png
Binary files differ
diff --git a/res/drawable-fa-mdpi/dial_num_6_wht.png b/res/drawable-fa-mdpi/dial_num_6_wht.png
new file mode 100644
index 000000000..79cdc1c7c
--- /dev/null
+++ b/res/drawable-fa-mdpi/dial_num_6_wht.png
Binary files differ
diff --git a/res/drawable-fa-mdpi/dial_num_7_wht.png b/res/drawable-fa-mdpi/dial_num_7_wht.png
new file mode 100644
index 000000000..5c8189669
--- /dev/null
+++ b/res/drawable-fa-mdpi/dial_num_7_wht.png
Binary files differ
diff --git a/res/drawable-fa-mdpi/dial_num_8_wht.png b/res/drawable-fa-mdpi/dial_num_8_wht.png
new file mode 100644
index 000000000..7744206bd
--- /dev/null
+++ b/res/drawable-fa-mdpi/dial_num_8_wht.png
Binary files differ
diff --git a/res/drawable-fa-mdpi/dial_num_9_wht.png b/res/drawable-fa-mdpi/dial_num_9_wht.png
new file mode 100644
index 000000000..a0c488c22
--- /dev/null
+++ b/res/drawable-fa-mdpi/dial_num_9_wht.png
Binary files differ
diff --git a/res/drawable-fa-xhdpi/dial_num_0_wht.png b/res/drawable-fa-xhdpi/dial_num_0_wht.png
new file mode 100644
index 000000000..069afe6a5
--- /dev/null
+++ b/res/drawable-fa-xhdpi/dial_num_0_wht.png
Binary files differ
diff --git a/res/drawable-fa-xhdpi/dial_num_1_wht.png b/res/drawable-fa-xhdpi/dial_num_1_wht.png
new file mode 100644
index 000000000..b960b45e7
--- /dev/null
+++ b/res/drawable-fa-xhdpi/dial_num_1_wht.png
Binary files differ
diff --git a/res/drawable-fa-xhdpi/dial_num_2_wht.png b/res/drawable-fa-xhdpi/dial_num_2_wht.png
new file mode 100644
index 000000000..9c6d3938f
--- /dev/null
+++ b/res/drawable-fa-xhdpi/dial_num_2_wht.png
Binary files differ
diff --git a/res/drawable-fa-xhdpi/dial_num_3_wht.png b/res/drawable-fa-xhdpi/dial_num_3_wht.png
new file mode 100644
index 000000000..16cc93084
--- /dev/null
+++ b/res/drawable-fa-xhdpi/dial_num_3_wht.png
Binary files differ
diff --git a/res/drawable-fa-xhdpi/dial_num_4_wht.png b/res/drawable-fa-xhdpi/dial_num_4_wht.png
new file mode 100644
index 000000000..f956a0bcb
--- /dev/null
+++ b/res/drawable-fa-xhdpi/dial_num_4_wht.png
Binary files differ
diff --git a/res/drawable-fa-xhdpi/dial_num_5_wht.png b/res/drawable-fa-xhdpi/dial_num_5_wht.png
new file mode 100644
index 000000000..da4c8920f
--- /dev/null
+++ b/res/drawable-fa-xhdpi/dial_num_5_wht.png
Binary files differ
diff --git a/res/drawable-fa-xhdpi/dial_num_6_wht.png b/res/drawable-fa-xhdpi/dial_num_6_wht.png
new file mode 100644
index 000000000..1f7dc6a14
--- /dev/null
+++ b/res/drawable-fa-xhdpi/dial_num_6_wht.png
Binary files differ
diff --git a/res/drawable-fa-xhdpi/dial_num_7_wht.png b/res/drawable-fa-xhdpi/dial_num_7_wht.png
new file mode 100644
index 000000000..59be814dd
--- /dev/null
+++ b/res/drawable-fa-xhdpi/dial_num_7_wht.png
Binary files differ
diff --git a/res/drawable-fa-xhdpi/dial_num_8_wht.png b/res/drawable-fa-xhdpi/dial_num_8_wht.png
new file mode 100644
index 000000000..30f30d203
--- /dev/null
+++ b/res/drawable-fa-xhdpi/dial_num_8_wht.png
Binary files differ
diff --git a/res/drawable-fa-xhdpi/dial_num_9_wht.png b/res/drawable-fa-xhdpi/dial_num_9_wht.png
new file mode 100644
index 000000000..12651f3b5
--- /dev/null
+++ b/res/drawable-fa-xhdpi/dial_num_9_wht.png
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_ab_dialer_holo_dark.png b/res/drawable-ldrtl-hdpi/ic_ab_dialer_holo_dark.png
new file mode 100644
index 000000000..bc3ebc7b2
--- /dev/null
+++ b/res/drawable-ldrtl-hdpi/ic_ab_dialer_holo_dark.png
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_call_incoming_holo_dark.png b/res/drawable-ldrtl-hdpi/ic_call_incoming_holo_dark.png
new file mode 100644
index 000000000..3b3fb46ef
--- /dev/null
+++ b/res/drawable-ldrtl-hdpi/ic_call_incoming_holo_dark.png
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_call_missed_holo_dark.png b/res/drawable-ldrtl-hdpi/ic_call_missed_holo_dark.png
new file mode 100644
index 000000000..844f351ed
--- /dev/null
+++ b/res/drawable-ldrtl-hdpi/ic_call_missed_holo_dark.png
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_call_outgoing_holo_dark.png b/res/drawable-ldrtl-hdpi/ic_call_outgoing_holo_dark.png
new file mode 100644
index 000000000..786198661
--- /dev/null
+++ b/res/drawable-ldrtl-hdpi/ic_call_outgoing_holo_dark.png
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_dial_action_call.png b/res/drawable-ldrtl-hdpi/ic_dial_action_call.png
new file mode 100644
index 000000000..34c78ffec
--- /dev/null
+++ b/res/drawable-ldrtl-hdpi/ic_dial_action_call.png
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_sound_off_speakerphone_disabled_holo_dark.png b/res/drawable-ldrtl-hdpi/ic_sound_off_speakerphone_disabled_holo_dark.png
new file mode 100644
index 000000000..90712b5f0
--- /dev/null
+++ b/res/drawable-ldrtl-hdpi/ic_sound_off_speakerphone_disabled_holo_dark.png
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_sound_off_speakerphone_holo_dark.png b/res/drawable-ldrtl-hdpi/ic_sound_off_speakerphone_holo_dark.png
new file mode 100644
index 000000000..d50d5b889
--- /dev/null
+++ b/res/drawable-ldrtl-hdpi/ic_sound_off_speakerphone_holo_dark.png
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_sound_speakerphone_disabled_holo_dark.png b/res/drawable-ldrtl-hdpi/ic_sound_speakerphone_disabled_holo_dark.png
new file mode 100644
index 000000000..b45064136
--- /dev/null
+++ b/res/drawable-ldrtl-hdpi/ic_sound_speakerphone_disabled_holo_dark.png
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_sound_speakerphone_holo_dark.png b/res/drawable-ldrtl-hdpi/ic_sound_speakerphone_holo_dark.png
new file mode 100644
index 000000000..ab62399fc
--- /dev/null
+++ b/res/drawable-ldrtl-hdpi/ic_sound_speakerphone_holo_dark.png
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_ab_dialer_holo_dark.png b/res/drawable-ldrtl-mdpi/ic_ab_dialer_holo_dark.png
new file mode 100644
index 000000000..210690fe1
--- /dev/null
+++ b/res/drawable-ldrtl-mdpi/ic_ab_dialer_holo_dark.png
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_call_incoming_holo_dark.png b/res/drawable-ldrtl-mdpi/ic_call_incoming_holo_dark.png
new file mode 100644
index 000000000..b48e0d6f3
--- /dev/null
+++ b/res/drawable-ldrtl-mdpi/ic_call_incoming_holo_dark.png
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_call_missed_holo_dark.png b/res/drawable-ldrtl-mdpi/ic_call_missed_holo_dark.png
new file mode 100644
index 000000000..86bae1075
--- /dev/null
+++ b/res/drawable-ldrtl-mdpi/ic_call_missed_holo_dark.png
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_call_outgoing_holo_dark.png b/res/drawable-ldrtl-mdpi/ic_call_outgoing_holo_dark.png
new file mode 100644
index 000000000..1429593bf
--- /dev/null
+++ b/res/drawable-ldrtl-mdpi/ic_call_outgoing_holo_dark.png
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_dial_action_call.png b/res/drawable-ldrtl-mdpi/ic_dial_action_call.png
new file mode 100644
index 000000000..d1f00f144
--- /dev/null
+++ b/res/drawable-ldrtl-mdpi/ic_dial_action_call.png
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_sound_off_speakerphone_disabled_holo_dark.png b/res/drawable-ldrtl-mdpi/ic_sound_off_speakerphone_disabled_holo_dark.png
new file mode 100644
index 000000000..9daf083a9
--- /dev/null
+++ b/res/drawable-ldrtl-mdpi/ic_sound_off_speakerphone_disabled_holo_dark.png
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_sound_off_speakerphone_holo_dark.png b/res/drawable-ldrtl-mdpi/ic_sound_off_speakerphone_holo_dark.png
new file mode 100644
index 000000000..e8357c197
--- /dev/null
+++ b/res/drawable-ldrtl-mdpi/ic_sound_off_speakerphone_holo_dark.png
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_sound_speakerphone_disabled_holo_dark.png b/res/drawable-ldrtl-mdpi/ic_sound_speakerphone_disabled_holo_dark.png
new file mode 100644
index 000000000..8ba42f8c0
--- /dev/null
+++ b/res/drawable-ldrtl-mdpi/ic_sound_speakerphone_disabled_holo_dark.png
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_sound_speakerphone_holo_dark.png b/res/drawable-ldrtl-mdpi/ic_sound_speakerphone_holo_dark.png
new file mode 100644
index 000000000..0b7296d06
--- /dev/null
+++ b/res/drawable-ldrtl-mdpi/ic_sound_speakerphone_holo_dark.png
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_ab_dialer_holo_dark.png b/res/drawable-ldrtl-xhdpi/ic_ab_dialer_holo_dark.png
new file mode 100644
index 000000000..5c8e1622e
--- /dev/null
+++ b/res/drawable-ldrtl-xhdpi/ic_ab_dialer_holo_dark.png
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_call_incoming_holo_dark.png b/res/drawable-ldrtl-xhdpi/ic_call_incoming_holo_dark.png
new file mode 100644
index 000000000..dfb179237
--- /dev/null
+++ b/res/drawable-ldrtl-xhdpi/ic_call_incoming_holo_dark.png
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_call_missed_holo_dark.png b/res/drawable-ldrtl-xhdpi/ic_call_missed_holo_dark.png
new file mode 100644
index 000000000..a1236ed16
--- /dev/null
+++ b/res/drawable-ldrtl-xhdpi/ic_call_missed_holo_dark.png
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_call_outgoing_holo_dark.png b/res/drawable-ldrtl-xhdpi/ic_call_outgoing_holo_dark.png
new file mode 100644
index 000000000..ec0e1d0ef
--- /dev/null
+++ b/res/drawable-ldrtl-xhdpi/ic_call_outgoing_holo_dark.png
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_dial_action_call.png b/res/drawable-ldrtl-xhdpi/ic_dial_action_call.png
new file mode 100644
index 000000000..e0d268829
--- /dev/null
+++ b/res/drawable-ldrtl-xhdpi/ic_dial_action_call.png
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_sound_off_speakerphone_disabled_holo_dark.png b/res/drawable-ldrtl-xhdpi/ic_sound_off_speakerphone_disabled_holo_dark.png
new file mode 100644
index 000000000..396c47962
--- /dev/null
+++ b/res/drawable-ldrtl-xhdpi/ic_sound_off_speakerphone_disabled_holo_dark.png
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_sound_off_speakerphone_holo_dark.png b/res/drawable-ldrtl-xhdpi/ic_sound_off_speakerphone_holo_dark.png
new file mode 100644
index 000000000..ca080b2ba
--- /dev/null
+++ b/res/drawable-ldrtl-xhdpi/ic_sound_off_speakerphone_holo_dark.png
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_sound_speakerphone_disabled_holo_dark.png b/res/drawable-ldrtl-xhdpi/ic_sound_speakerphone_disabled_holo_dark.png
new file mode 100644
index 000000000..c809e8dd7
--- /dev/null
+++ b/res/drawable-ldrtl-xhdpi/ic_sound_speakerphone_disabled_holo_dark.png
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_sound_speakerphone_holo_dark.png b/res/drawable-ldrtl-xhdpi/ic_sound_speakerphone_holo_dark.png
new file mode 100644
index 000000000..f82a81662
--- /dev/null
+++ b/res/drawable-ldrtl-xhdpi/ic_sound_speakerphone_holo_dark.png
Binary files differ
diff --git a/res/layout-land/dialpad_fragment.xml b/res/layout-land/dialpad_fragment.xml
index d1cf3a405..658a03b7b 100644
--- a/res/layout-land/dialpad_fragment.xml
+++ b/res/layout-land/dialpad_fragment.xml
@@ -17,7 +17,8 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/top"
android:layout_width="match_parent"
- android:layout_height="match_parent" >
+ android:layout_height="match_parent"
+ android:layoutDirection="ltr" >
<LinearLayout
android:layout_width="0dp"
diff --git a/res/layout/account_filter_header_for_phone_favorite.xml b/res/layout/account_filter_header_for_phone_favorite.xml
index d7afaac2b..b55210a10 100644
--- a/res/layout/account_filter_header_for_phone_favorite.xml
+++ b/res/layout/account_filter_header_for_phone_favorite.xml
@@ -25,20 +25,20 @@
android:layout_height="wrap_content"
android:orientation="vertical"
android:paddingTop="8dip"
- android:layout_marginLeft="@dimen/contact_browser_list_header_left_margin"
- android:layout_marginRight="@dimen/contact_browser_list_header_right_margin"
+ android:layout_marginStart="@dimen/contact_browser_list_header_left_margin"
+ android:layout_marginEnd="@dimen/contact_browser_list_header_right_margin"
android:background="?android:attr/selectableItemBackground"
android:visibility="gone">
<TextView
android:id="@+id/account_filter_header"
style="@style/ContactListSeparatorTextViewStyle"
- android:paddingLeft="@dimen/contact_browser_list_item_text_indent" />
+ android:paddingStart="@dimen/contact_browser_list_item_text_indent" />
<TextView
android:id="@+id/contact_list_all_empty"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="?android:attr/textColorSecondary"
- android:paddingLeft="8dip"
+ android:paddingStart="8dip"
android:paddingTop="@dimen/contact_phone_list_empty_description_padding"
android:paddingBottom="@dimen/contact_phone_list_empty_description_padding"
android:textSize="@dimen/contact_phone_list_empty_description_size"
diff --git a/res/layout/call_detail.xml b/res/layout/call_detail.xml
index dc0417b2a..c25b4a995 100644
--- a/res/layout/call_detail.xml
+++ b/res/layout/call_detail.xml
@@ -31,7 +31,7 @@
android:id="@+id/history"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
/>
@@ -40,14 +40,14 @@
android:id="@+id/controls"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
>
<FrameLayout
android:id="@+id/voicemail_status"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:visibility="gone"
>
@@ -59,7 +59,7 @@
android:id="@+id/contact_background_sizer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true"
android:layout_below="@id/voicemail_status"
ex:ratio="0.5"
ex:direction="widthToHeight"
@@ -84,7 +84,7 @@
android:layout_width="match_parent"
android:layout_height="42dip"
android:background="#7F000000"
- android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true"
android:layout_alignBottom="@id/contact_background_sizer"
/>
<ImageView
@@ -92,21 +92,21 @@
android:layout_width="wrap_content"
android:layout_height="0dip"
android:scaleType="center"
- android:layout_alignRight="@id/photo_text_bar"
+ android:layout_alignEnd="@id/photo_text_bar"
android:layout_alignBottom="@id/photo_text_bar"
android:layout_alignTop="@id/photo_text_bar"
- android:layout_marginRight="@dimen/call_log_outer_margin"
+ android:layout_marginEnd="@dimen/call_log_outer_margin"
/>
<TextView
android:id="@+id/header_text"
android:layout_width="wrap_content"
android:layout_height="0dip"
- android:layout_alignLeft="@id/photo_text_bar"
+ android:layout_alignStart="@id/photo_text_bar"
android:layout_toLeftOf="@id/main_action"
android:layout_alignTop="@id/photo_text_bar"
android:layout_alignBottom="@id/photo_text_bar"
- android:layout_marginRight="@dimen/call_log_inner_margin"
- android:layout_marginLeft="@dimen/call_detail_contact_name_margin"
+ android:layout_marginEnd="@dimen/call_log_inner_margin"
+ android:layout_marginStart="@dimen/call_detail_contact_name_margin"
android:gravity="center_vertical"
android:textColor="?attr/call_log_primary_text_color"
android:textAppearance="?android:attr/textAppearanceMedium"
@@ -116,9 +116,9 @@
android:id="@+id/main_action_push_layer"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_alignLeft="@id/contact_background_sizer"
+ android:layout_alignStart="@id/contact_background_sizer"
android:layout_alignTop="@id/contact_background_sizer"
- android:layout_alignRight="@id/contact_background_sizer"
+ android:layout_alignEnd="@id/contact_background_sizer"
android:layout_alignBottom="@id/contact_background_sizer"
android:background="?android:attr/selectableItemBackground"
/>
@@ -153,7 +153,7 @@
android:layout_width="0dip"
android:layout_height="match_parent"
android:layout_weight="1"
- android:paddingLeft="@dimen/call_log_indent_margin"
+ android:paddingStart="@dimen/call_log_indent_margin"
android:orientation="vertical"
android:gravity="center_vertical"
>
@@ -161,7 +161,7 @@
<TextView android:id="@+id/call_and_sms_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:paddingRight="@dimen/call_log_icon_margin"
+ android:paddingEnd="@dimen/call_log_icon_margin"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="?attr/call_log_primary_text_color"
android:singleLine="true"
@@ -171,7 +171,7 @@
<TextView android:id="@+id/call_and_sms_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:paddingRight="@dimen/call_log_icon_margin"
+ android:paddingEnd="@dimen/call_log_icon_margin"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?attr/call_log_primary_text_color"
android:textAllCaps="true"
@@ -190,8 +190,8 @@
<ImageView android:id="@+id/call_and_sms_icon"
android:layout_width="@color/call_log_voicemail_highlight_color"
android:layout_height="match_parent"
- android:paddingLeft="@dimen/call_log_inner_margin"
- android:paddingRight="@dimen/call_log_outer_margin"
+ android:paddingStart="@dimen/call_log_inner_margin"
+ android:paddingEnd="@dimen/call_log_outer_margin"
android:gravity="center"
android:scaleType="centerInside"
android:focusable="true"
@@ -209,7 +209,7 @@
android:id="@+id/blank"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:background="@android:color/black"
android:visibility="gone"
diff --git a/res/layout/call_detail_history_header.xml b/res/layout/call_detail_history_header.xml
index 866ba4181..40f943b1e 100644
--- a/res/layout/call_detail_history_header.xml
+++ b/res/layout/call_detail_history_header.xml
@@ -27,7 +27,7 @@
class="com.android.contacts.common.widget.ProportionalLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true"
android:layout_below="@id/voicemail_status"
ex:ratio="0.5"
ex:direction="widthToHeight"
diff --git a/res/layout/call_detail_history_item.xml b/res/layout/call_detail_history_item.xml
index 01b9517b6..4858717af 100644
--- a/res/layout/call_detail_history_item.xml
+++ b/res/layout/call_detail_history_item.xml
@@ -21,8 +21,8 @@
android:minHeight="@dimen/call_log_list_item_height"
android:paddingTop="@dimen/call_log_inner_margin"
android:paddingBottom="@dimen/call_log_inner_margin"
- android:paddingLeft="@dimen/call_log_indent_margin"
- android:paddingRight="@dimen/call_log_outer_margin"
+ android:paddingStart="@dimen/call_log_indent_margin"
+ android:paddingEnd="@dimen/call_log_outer_margin"
android:orientation="vertical"
>
<LinearLayout
@@ -41,7 +41,7 @@
android:id="@+id/call_type_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginLeft="@dimen/call_log_icon_margin"
+ android:layout_marginStart="@dimen/call_log_icon_margin"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="@color/secondary_text_color"
/>
diff --git a/res/layout/call_log_fragment.xml b/res/layout/call_log_fragment.xml
index e86ca81e3..041ca7bb4 100644
--- a/res/layout/call_log_fragment.xml
+++ b/res/layout/call_log_fragment.xml
@@ -40,11 +40,11 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/ContactListSeparatorTextViewStyle"
- android:layout_marginLeft="@dimen/call_log_outer_margin"
- android:layout_marginRight="@dimen/call_log_outer_margin"
+ android:layout_marginStart="@dimen/call_log_outer_margin"
+ android:layout_marginEnd="@dimen/call_log_outer_margin"
android:paddingTop="@dimen/call_log_inner_margin"
android:paddingBottom="@dimen/call_log_inner_margin"
- android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true"
android:layout_alignParentBottom="true"
android:visibility="gone"
/>
@@ -52,8 +52,8 @@
android:id="@+id/call_log_divider"
android:layout_width="match_parent"
android:layout_height="1px"
- android:layout_marginLeft="@dimen/call_log_outer_margin"
- android:layout_marginRight="@dimen/call_log_outer_margin"
+ android:layout_marginStart="@dimen/call_log_outer_margin"
+ android:layout_marginEnd="@dimen/call_log_outer_margin"
android:layout_gravity="bottom"
android:background="#55ffffff"
/>
diff --git a/res/layout/call_log_list_item.xml b/res/layout/call_log_list_item.xml
index 8564c0d37..54f4fff63 100644
--- a/res/layout/call_log_list_item.xml
+++ b/res/layout/call_log_list_item.xml
@@ -37,8 +37,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
- android:layout_marginLeft="@dimen/call_log_outer_margin"
- android:layout_marginRight="@dimen/call_log_outer_margin"
+ android:layout_marginStart="@dimen/call_log_outer_margin"
+ android:layout_marginEnd="@dimen/call_log_outer_margin"
android:orientation="horizontal"
android:gravity="center_vertical"
android:background="?android:attr/selectableItemBackground"
@@ -51,7 +51,7 @@
android:layout_width="@dimen/call_log_list_contact_photo_size"
android:layout_height="@dimen/call_log_list_contact_photo_size"
android:nextFocusRight="@id/primary_action_view"
- android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true"
android:layout_centerVertical="true"
android:focusable="true"
/>
@@ -63,13 +63,13 @@
android:paddingBottom="@dimen/call_log_inner_margin"
android:orientation="vertical"
android:gravity="center_vertical"
- android:layout_marginLeft="@dimen/call_log_inner_margin"
+ android:layout_marginStart="@dimen/call_log_inner_margin"
>
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginRight="@dimen/call_log_icon_margin"
+ android:layout_marginEnd="@dimen/call_log_icon_margin"
android:textColor="?attr/call_log_primary_text_color"
android:textSize="18sp"
android:singleLine="true"
@@ -83,7 +83,7 @@
android:id="@+id/number"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginRight="@dimen/call_log_icon_margin"
+ android:layout_marginEnd="@dimen/call_log_icon_margin"
android:textColor="?attr/call_log_secondary_text_color"
android:textSize="14sp"
android:singleLine="true"
@@ -93,7 +93,7 @@
android:id="@+id/label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginRight="@dimen/call_log_icon_margin"
+ android:layout_marginEnd="@dimen/call_log_icon_margin"
android:textColor="?attr/call_log_secondary_text_color"
android:textStyle="bold"
android:textSize="14sp"
@@ -112,14 +112,14 @@
android:id="@+id/call_type_icons"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginRight="@dimen/call_log_icon_margin"
+ android:layout_marginEnd="@dimen/call_log_icon_margin"
android:layout_gravity="center_vertical"
/>
<TextView
android:id="@+id/call_count_and_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginRight="@dimen/call_log_icon_margin"
+ android:layout_marginEnd="@dimen/call_log_icon_margin"
android:layout_gravity="center_vertical"
android:textColor="?attr/call_log_secondary_text_color"
android:textSize="14sp"
@@ -138,10 +138,10 @@
android:id="@+id/secondary_action_icon"
android:layout_width="@dimen/call_log_call_action_width"
android:layout_height="match_parent"
- android:paddingLeft="@dimen/call_log_inner_margin"
+ android:paddingStart="@dimen/call_log_inner_margin"
android:paddingTop="@dimen/call_log_inner_margin"
android:paddingBottom="@dimen/call_log_inner_margin"
- android:paddingRight="@dimen/call_log_inner_margin"
+ android:paddingEnd="@dimen/call_log_inner_margin"
android:scaleType="center"
android:background="?android:attr/selectableItemBackground"
android:nextFocusLeft="@id/primary_action_view"
@@ -151,8 +151,8 @@
<TextView
android:id="@+id/call_log_header"
style="@style/ContactListSeparatorTextViewStyle"
- android:layout_marginLeft="@dimen/call_log_outer_margin"
- android:layout_marginRight="@dimen/call_log_outer_margin"
+ android:layout_marginStart="@dimen/call_log_outer_margin"
+ android:layout_marginEnd="@dimen/call_log_outer_margin"
android:paddingTop="@dimen/call_log_inner_margin"
android:paddingBottom="@dimen/call_log_inner_margin" />
@@ -160,8 +160,8 @@
android:id="@+id/call_log_divider"
android:layout_width="match_parent"
android:layout_height="1px"
- android:layout_marginLeft="@dimen/call_log_outer_margin"
- android:layout_marginRight="@dimen/call_log_outer_margin"
+ android:layout_marginStart="@dimen/call_log_outer_margin"
+ android:layout_marginEnd="@dimen/call_log_outer_margin"
android:background="#55ffffff"
/>
</view>
diff --git a/res/layout/call_log_voicemail_status.xml b/res/layout/call_log_voicemail_status.xml
index 191c821f4..be808e400 100644
--- a/res/layout/call_log_voicemail_status.xml
+++ b/res/layout/call_log_voicemail_status.xml
@@ -25,8 +25,8 @@
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:layout_weight="1"
- android:paddingLeft="@dimen/call_log_outer_margin"
- android:paddingRight="@dimen/call_log_inner_margin"
+ android:paddingStart="@dimen/call_log_outer_margin"
+ android:paddingEnd="@dimen/call_log_inner_margin"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="?attr/call_log_voicemail_status_text_color"
/>
@@ -35,8 +35,8 @@
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
- android:paddingLeft="@dimen/call_log_inner_margin"
- android:paddingRight="@dimen/call_log_outer_margin"
+ android:paddingStart="@dimen/call_log_inner_margin"
+ android:paddingEnd="@dimen/call_log_outer_margin"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textColor="?attr/call_log_voicemail_status_action_text_color"
android:background="?android:attr/selectableItemBackground"
diff --git a/res/layout/dialpad.xml b/res/layout/dialpad.xml
index 3ccb42dbf..f9a078543 100644
--- a/res/layout/dialpad.xml
+++ b/res/layout/dialpad.xml
@@ -23,10 +23,11 @@
android:layout_weight="@integer/dialpad_layout_weight_dialpad"
android:layout_gravity="center_horizontal"
android:layout_marginTop="@dimen/dialpad_vertical_margin"
- android:paddingLeft="5dip"
- android:paddingRight="5dip"
+ android:paddingStart="5dip"
+ android:paddingEnd="5dip"
android:paddingBottom="10dip"
- android:background="@drawable/dialpad_background">
+ android:background="@drawable/dialpad_background"
+ android:layoutDirection="ltr" >
<TableRow
android:layout_height="0px"
diff --git a/res/layout/dialpad_fragment.xml b/res/layout/dialpad_fragment.xml
index 27ba2da46..13d91bd27 100644
--- a/res/layout/dialpad_fragment.xml
+++ b/res/layout/dialpad_fragment.xml
@@ -19,8 +19,9 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
- android:paddingLeft="@dimen/dialpad_horizontal_margin"
- android:paddingRight="@dimen/dialpad_horizontal_margin">
+ android:paddingStart="@dimen/dialpad_horizontal_margin"
+ android:paddingEnd="@dimen/dialpad_horizontal_margin"
+ android:layoutDirection="ltr" >
<!-- Text field and possibly soft menu button above the keypad where
the digits are displayed. -->
diff --git a/res/layout/dialtacts_activity.xml b/res/layout/dialtacts_activity.xml
index 35fa00f08..079ce37d1 100644
--- a/res/layout/dialtacts_activity.xml
+++ b/res/layout/dialtacts_activity.xml
@@ -29,7 +29,7 @@
android:id="@+id/searchButton"
android:layout_width="wrap_content"
android:layout_height="?android:attr/actionBarSize"
- android:layout_gravity="bottom|left"
+ android:layout_gravity="bottom|start"
android:state_enabled="false"
android:background="?android:attr/selectableItemBackground"
android:contentDescription="@string/description_search_button"
@@ -39,7 +39,7 @@
android:id="@+id/overflow_menu"
android:layout_width="wrap_content"
android:layout_height="?android:attr/actionBarSize"
- android:layout_gravity="bottom|right"
+ android:layout_gravity="bottom|end"
android:src="@drawable/ic_menu_overflow"
android:contentDescription="@string/action_menu_overflow_description"
android:nextFocusLeft="@id/digits"
diff --git a/res/layout/dialtacts_custom_action_bar.xml b/res/layout/dialtacts_custom_action_bar.xml
index 26e478574..c62e22596 100644
--- a/res/layout/dialtacts_custom_action_bar.xml
+++ b/res/layout/dialtacts_custom_action_bar.xml
@@ -32,10 +32,10 @@
<ImageButton
android:id="@+id/search_option"
android:layout_width="wrap_content"
- android:paddingLeft="4dip"
- android:paddingRight="4dip"
+ android:paddingStart="4dip"
+ android:paddingEnd="4dip"
android:layout_height="match_parent"
- android:layout_alignParentRight="true"
+ android:layout_alignParentEnd="true"
android:contentDescription="@string/action_menu_overflow_description"
android:importantForAccessibility="yes"
android:src="@drawable/ic_menu_overflow"
diff --git a/res/layout/phone_disambig_item.xml b/res/layout/phone_disambig_item.xml
index a31d08d32..02d596b52 100755
--- a/res/layout/phone_disambig_item.xml
+++ b/res/layout/phone_disambig_item.xml
@@ -18,8 +18,8 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
- android:paddingLeft="30dip"
- android:paddingRight="30dip"
+ android:paddingStart="30dip"
+ android:paddingEnd="30dip"
android:minHeight="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical">
diff --git a/res/layout/phone_loading_contacts.xml b/res/layout/phone_loading_contacts.xml
index f0d33288e..afc3322d1 100644
--- a/res/layout/phone_loading_contacts.xml
+++ b/res/layout/phone_loading_contacts.xml
@@ -21,7 +21,7 @@
android:layout_height="match_parent"
android:minHeight="?android:attr/listPreferredItemHeight"
android:orientation="horizontal"
- android:gravity="left|center_vertical">
+ android:gravity="start|center_vertical">
<ProgressBar
android:indeterminate="true"
@@ -35,6 +35,6 @@
android:layout_height="wrap_content"
android:text="@string/contact_list_loading"
android:textAppearance="?android:attr/textAppearanceMedium"
- android:layout_marginLeft="4dip" />
+ android:layout_marginStart="4dip" />
</LinearLayout>
diff --git a/res/layout/playback_layout.xml b/res/layout/playback_layout.xml
index 2dfcb4da4..b72ddcad1 100644
--- a/res/layout/playback_layout.xml
+++ b/res/layout/playback_layout.xml
@@ -31,7 +31,7 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="58dip"
- android:layout_marginRight="@dimen/call_detail_button_spacing"
+ android:layout_marginEnd="@dimen/call_detail_button_spacing"
android:background="@drawable/dialpad_background"
android:layout_weight="1"
>
@@ -79,12 +79,12 @@
android:thumb="@drawable/seek_bar_thumb"
android:thumbOffset="8dip"
android:progress="0"
- android:paddingLeft="8dip"
- android:paddingRight="8dip"
+ android:paddingStart="8dip"
+ android:paddingEnd="8dip"
android:paddingTop="30dip"
android:paddingBottom="20dip"
- android:layout_marginRight="64dip"
- android:layout_marginLeft="64dip"
+ android:layout_marginEnd="64dip"
+ android:layout_marginStart="64dip"
android:max="0"
android:layout_centerVertical="true"
/>
@@ -115,7 +115,7 @@
android:background="?android:attr/selectableItemBackground"
android:paddingBottom="19dip"
android:paddingTop="29dip"
- android:layout_alignParentLeft="true"
+ android:layout_alignParentStart="true"
android:layout_centerVertical="true"
/>
<ImageButton
@@ -126,7 +126,7 @@
android:background="?android:attr/selectableItemBackground"
android:paddingBottom="19dip"
android:paddingTop="29dip"
- android:layout_alignParentRight="true"
+ android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
/>
</RelativeLayout>
diff --git a/res/layout/set_primary_checkbox.xml b/res/layout/set_primary_checkbox.xml
index 8f28ec791..b997327ed 100644
--- a/res/layout/set_primary_checkbox.xml
+++ b/res/layout/set_primary_checkbox.xml
@@ -18,8 +18,8 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:paddingLeft="14dip"
- android:paddingRight="15dip"
+ android:paddingStart="14dip"
+ android:paddingEnd="15dip"
android:orientation="vertical">
<CheckBox
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 2557ebc3e..32339d2cf 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -680,7 +680,8 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
mSearchFragment.setOnPhoneNumberPickerActionListener(mPhoneNumberPickerActionListener);
mSearchFragment.setQuickContactEnabled(true);
mSearchFragment.setDarkTheme(true);
- mSearchFragment.setPhotoPosition(ContactListItemView.PhotoPosition.LEFT);
+ mSearchFragment.setPhotoPosition(ContactListItemView.getDefaultPhotoPosition(
+ true /* opposite */));
mSearchFragment.setUseCallableUri(true);
if (mContactListFilterController != null
&& mContactListFilterController.getFilter() != null) {
diff --git a/src/com/android/dialer/PhoneCallDetailsHelper.java b/src/com/android/dialer/PhoneCallDetailsHelper.java
index f8ca769fc..51b110910 100644
--- a/src/com/android/dialer/PhoneCallDetailsHelper.java
+++ b/src/com/android/dialer/PhoneCallDetailsHelper.java
@@ -115,10 +115,14 @@ public class PhoneCallDetailsHelper {
numberText = details.geocode;
}
labelText = null;
+ // We have a real phone number as "nameView" so make it always LTR
+ views.nameView.setTextDirection(View.TEXT_DIRECTION_LTR);
} else {
nameText = details.name;
numberText = displayNumber;
labelText = numberFormattedLabel;
+ // We have a real phone number as "numberView" so make it always LTR
+ views.numberView.setTextDirection(View.TEXT_DIRECTION_LTR);
}
views.nameView.setText(nameText);
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index f70a279e7..3693e6aa0 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -79,12 +79,12 @@ import com.android.contacts.common.util.StopWatch;
import com.android.dialer.DialtactsActivity;
import com.android.dialer.R;
import com.android.dialer.SpecialCharSequenceMgr;
-import com.android.dialer.dialpad.SmartDialCache.SmartDialContentObserver;
import com.android.dialer.interactions.PhoneNumberInteraction;
import com.android.dialer.util.OrientationUtil;
import com.android.internal.telephony.ITelephony;
import com.android.phone.common.CallLogAsync;
import com.android.phone.common.HapticFeedback;
+import com.google.common.annotations.VisibleForTesting;
import java.util.List;
@@ -103,6 +103,8 @@ public class DialpadFragment extends Fragment
private static final boolean DEBUG = DialtactsActivity.DEBUG;
private static final String EMPTY_NUMBER = "";
+ private static final char PAUSE = ',';
+ private static final char WAIT = ';';
/** The length of DTMF tones in milliseconds */
private static final int TONE_LENGTH_MS = 150;
@@ -151,7 +153,6 @@ public class DialpadFragment extends Fragment
* Will be set only if the view has the smart dialing section.
*/
private SmartDialAdapter mSmartDialAdapter;
- private SmartDialContentObserver mSmartDialObserver;
/**
* Regular expression prohibiting manual phone call. Can be empty, which means "no rule".
@@ -223,6 +224,7 @@ public class DialpadFragment extends Fragment
private boolean mDigitsFilledByIntent;
private boolean mStartedFromNewIntent = false;
+ private boolean mFirstLaunch = false;
private static final String PREF_DIGITS_FILLED_BY_INTENT = "pref_digits_filled_by_intent";
@@ -277,7 +279,7 @@ public class DialpadFragment extends Fragment
@Override
public void onCreate(Bundle state) {
super.onCreate(state);
-
+ mFirstLaunch = true;
mContactsPrefs = new ContactsPreferences(getActivity());
mCurrentCountryIso = GeoUtil.getCurrentCountryIso(getActivity());
mSmartDialCache = SmartDialCache.getInstance(getActivity(),
@@ -297,10 +299,6 @@ public class DialpadFragment extends Fragment
if (state != null) {
mDigitsFilledByIntent = state.getBoolean(PREF_DIGITS_FILLED_BY_INTENT);
}
-
- mSmartDialObserver = new SmartDialContentObserver(new Handler(), mSmartDialCache);
- this.getActivity().getContentResolver().registerContentObserver(
- SmartDialCache.PhoneQuery.URI, true, mSmartDialObserver);
}
@Override
@@ -611,6 +609,19 @@ public class DialpadFragment extends Fragment
showDialpadChooser(false);
}
+ // Don't force recache if this is the first time onResume is being called, since caching
+ // should already happen in setUserVisibleHint.
+ if (!mFirstLaunch) {
+ // This forced recache covers the case where the dialer was previously running, and
+ // was brought back into the foreground. If the dialpad fragment hasn't actually
+ // become visible throughout the entire activity's lifecycle, it is possible that
+ // caching hasn't happened yet. In this case, we can force a recache anyway, since we
+ // are not worried about startup performance anymore.
+ mSmartDialCache.cacheIfNeeded(true);
+ }
+
+ mFirstLaunch = false;
+
stopWatch.lap("hnt");
updateDialAndDeleteButtonEnabledState();
@@ -618,9 +629,6 @@ public class DialpadFragment extends Fragment
stopWatch.lap("bes");
stopWatch.stopAndLog(TAG, 50);
-
- this.getActivity().getContentResolver().registerContentObserver(
- SmartDialCache.PhoneQuery.URI, true, mSmartDialObserver);
}
@Override
@@ -648,8 +656,6 @@ public class DialpadFragment extends Fragment
mLastNumberDialed = EMPTY_NUMBER; // Since we are going to query again, free stale number.
SpecialCharSequenceMgr.cleanup();
-
- getActivity().getContentResolver().unregisterContentObserver(mSmartDialObserver);
}
@Override
@@ -692,8 +698,6 @@ public class DialpadFragment extends Fragment
private void setupMenuItems(Menu menu) {
final MenuItem callSettingsMenuItem = menu.findItem(R.id.menu_call_settings_dialpad);
final MenuItem addToContactMenuItem = menu.findItem(R.id.menu_add_contacts);
- final MenuItem twoSecPauseMenuItem = menu.findItem(R.id.menu_2s_pause);
- final MenuItem waitMenuItem = menu.findItem(R.id.menu_add_wait);
// Check if all the menu items are inflated correctly. As a shortcut, we assume all menu
// items are ready if the first item is non-null.
@@ -710,54 +714,17 @@ public class DialpadFragment extends Fragment
callSettingsMenuItem.setIntent(DialtactsActivity.getCallSettingsIntent());
}
- // We show "add to contacts", "2sec pause", and "add wait" menus only when the user is
- // seeing usual dialpads and has typed at least one digit.
+ // We show "add to contacts" menu only when the user is
+ // seeing usual dialpad and has typed at least one digit.
// We never show a menu if the "choose dialpad" UI is up.
if (dialpadChooserVisible() || isDigitsEmpty()) {
addToContactMenuItem.setVisible(false);
- twoSecPauseMenuItem.setVisible(false);
- waitMenuItem.setVisible(false);
} else {
final CharSequence digits = mDigits.getText();
// Put the current digits string into an intent
addToContactMenuItem.setIntent(getAddToContactIntent(digits));
addToContactMenuItem.setVisible(true);
-
- // Check out whether to show Pause & Wait option menu items
- int selectionStart;
- int selectionEnd;
- String strDigits = digits.toString();
-
- selectionStart = mDigits.getSelectionStart();
- selectionEnd = mDigits.getSelectionEnd();
-
- if (selectionStart != -1) {
- if (selectionStart > selectionEnd) {
- // swap it as we want start to be less then end
- int tmp = selectionStart;
- selectionStart = selectionEnd;
- selectionEnd = tmp;
- }
-
- if (selectionStart != 0) {
- // Pause can be visible if cursor is not in the begining
- twoSecPauseMenuItem.setVisible(true);
-
- // For Wait to be visible set of condition to meet
- waitMenuItem.setVisible(showWait(selectionStart, selectionEnd, strDigits));
- } else {
- // cursor in the beginning both pause and wait to be invisible
- twoSecPauseMenuItem.setVisible(false);
- waitMenuItem.setVisible(false);
- }
- } else {
- twoSecPauseMenuItem.setVisible(true);
-
- // cursor is not selected so assume new digit is added to the end
- int strLength = strDigits.length();
- waitMenuItem.setVisible(showWait(strLength, strLength, strDigits));
- }
}
}
@@ -1528,10 +1495,10 @@ public class DialpadFragment extends Fragment
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_2s_pause:
- updateDialString(",");
+ updateDialString(PAUSE);
return true;
case R.id.menu_add_wait:
- updateDialString(";");
+ updateDialString(WAIT);
return true;
default:
return false;
@@ -1547,7 +1514,12 @@ public class DialpadFragment extends Fragment
* Updates the dial string (mDigits) after inserting a Pause character (,)
* or Wait character (;).
*/
- private void updateDialString(String newDigits) {
+ private void updateDialString(char newDigit) {
+ if(newDigit != WAIT && newDigit != PAUSE) {
+ Log.wtf(TAG, "Not expected for anything other than PAUSE & WAIT");
+ return;
+ }
+
int selectionStart;
int selectionEnd;
@@ -1558,20 +1530,19 @@ public class DialpadFragment extends Fragment
selectionStart = Math.min(anchor, point);
selectionEnd = Math.max(anchor, point);
+ if (selectionStart == -1) {
+ selectionStart = selectionEnd = mDigits.length();
+ }
+
Editable digits = mDigits.getText();
- if (selectionStart != -1) {
- if (selectionStart == selectionEnd) {
- // then there is no selection. So insert the pause at this
- // position and update the mDigits.
- digits.replace(selectionStart, selectionStart, newDigits);
- } else {
- digits.replace(selectionStart, selectionEnd, newDigits);
- // Unselect: back to a regular cursor, just pass the character inserted.
- mDigits.setSelection(selectionStart + 1);
+
+ if (canAddDigit(digits, selectionStart, selectionEnd, newDigit)) {
+ digits.replace(selectionStart, selectionEnd, Character.toString(newDigit));
+
+ if (selectionStart != selectionEnd) {
+ // Unselect: back to a regular cursor, just pass the character inserted.
+ mDigits.setSelection(selectionStart + 1);
}
- } else {
- int len = mDigits.length();
- digits.replace(len, len, newDigits);
}
}
@@ -1617,28 +1588,38 @@ public class DialpadFragment extends Fragment
}
/**
- * This function return true if Wait menu item can be shown
- * otherwise returns false. Assumes the passed string is non-empty
- * and the 0th index check is not required.
+ * Returns true of the newDigit parameter can be added at the current selection
+ * point, otherwise returns false.
+ * Only prevents input of WAIT and PAUSE digits at an unsupported position.
+ * Fails early if start == -1 or start is larger than end.
*/
- private static boolean showWait(int start, int end, String digits) {
- if (start == end) {
- // visible false in this case
- if (start > digits.length()) return false;
+ @VisibleForTesting
+ /* package */ static boolean canAddDigit(CharSequence digits, int start, int end,
+ char newDigit) {
+ if(newDigit != WAIT && newDigit != PAUSE) {
+ Log.wtf(TAG, "Should not be called for anything other than PAUSE & WAIT");
+ return false;
+ }
+
+ // False if no selection, or selection is reversed (end < start)
+ if (start == -1 || end < start) {
+ return false;
+ }
- // preceding char is ';', so visible should be false
- if (digits.charAt(start - 1) == ';') return false;
+ // unsupported selection-out-of-bounds state
+ if (start > digits.length() || end > digits.length()) return false;
- // next char is ';', so visible should be false
- if ((digits.length() > start) && (digits.charAt(start) == ';')) return false;
- } else {
- // visible false in this case
- if (start > digits.length() || end > digits.length()) return false;
+ // Special digit cannot be the first digit
+ if (start == 0) return false;
- // In this case we need to just check for ';' preceding to start
- // or next to end
- if (digits.charAt(start - 1) == ';') return false;
+ if (newDigit == WAIT) {
+ // preceding char is ';' (WAIT)
+ if (digits.charAt(start - 1) == WAIT) return false;
+
+ // next char is ';' (WAIT)
+ if ((digits.length() > end) && (digits.charAt(end) == WAIT)) return false;
}
+
return true;
}
@@ -1683,6 +1664,10 @@ public class DialpadFragment extends Fragment
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
+ // This is called if the dialpad fragment is swiped into to view for the very first
+ // time in the activity's lifecycle, or the user starts the dialer for the first time
+ // and the dialpad fragment is displayed immediately, and is what causes the initial
+ // caching process to happen.
mSmartDialCache.cacheIfNeeded(false);
}
}
diff --git a/src/com/android/dialer/dialpad/DialpadImageButton.java b/src/com/android/dialer/dialpad/DialpadImageButton.java
index 5512a0c25..8f9ea4d69 100644
--- a/src/com/android/dialer/dialpad/DialpadImageButton.java
+++ b/src/com/android/dialer/dialpad/DialpadImageButton.java
@@ -18,10 +18,13 @@ package com.android.dialer.dialpad;
import android.content.Context;
import android.graphics.Rect;
+import android.os.Bundle;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
+import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
+import android.view.accessibility.AccessibilityNodeInfo;
import android.widget.ImageButton;
/**
@@ -81,20 +84,13 @@ public class DialpadImageButton extends ImageButton {
}
@Override
- public boolean performClick() {
- // When accessibility is on, simulate press and release to preserve the
- // semantic meaning of performClick(). Required for Braille support.
- if (mAccessibilityManager.isEnabled()) {
- // Checking the press state prevents double activation.
- if (!isPressed()) {
- setPressed(true);
- setPressed(false);
- }
-
+ public boolean performAccessibilityAction(int action, Bundle arguments) {
+ if (action == AccessibilityNodeInfo.ACTION_CLICK) {
+ simulateClickForAccessibility();
return true;
}
- return super.performClick();
+ return super.performAccessibilityAction(action, arguments);
}
@Override
@@ -110,7 +106,7 @@ public class DialpadImageButton extends ImageButton {
break;
case MotionEvent.ACTION_HOVER_EXIT:
if (mHoverBounds.contains((int) event.getX(), (int) event.getY())) {
- performClick();
+ simulateClickForAccessibility();
}
setClickable(true);
break;
@@ -119,4 +115,23 @@ public class DialpadImageButton extends ImageButton {
return super.onHoverEvent(event);
}
+
+ /**
+ * When accessibility is on, simulate press and release to preserve the
+ * semantic meaning of performClick(). Required for Braille support.
+ */
+ private void simulateClickForAccessibility() {
+ // Checking the press state prevents double activation.
+ if (isPressed()) {
+ return;
+ }
+
+ setPressed(true);
+
+ // Stay consistent with performClick() by sending the event after
+ // setting the pressed state but before performing the action.
+ sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
+
+ setPressed(false);
+ }
}
diff --git a/src/com/android/dialer/dialpad/DigitsEditText.java b/src/com/android/dialer/dialpad/DigitsEditText.java
index 6ad4df955..1a092be50 100644
--- a/src/com/android/dialer/dialpad/DigitsEditText.java
+++ b/src/com/android/dialer/dialpad/DigitsEditText.java
@@ -21,7 +21,6 @@ import android.graphics.Rect;
import android.text.InputType;
import android.util.AttributeSet;
import android.view.MotionEvent;
-import android.view.accessibility.AccessibilityEvent;
import android.view.inputmethod.InputMethodManager;
import android.widget.EditText;
@@ -56,31 +55,4 @@ public class DigitsEditText extends EditText {
}
return ret;
}
-
- @Override
- public void sendAccessibilityEventUnchecked(AccessibilityEvent event) {
- if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_TEXT_CHANGED) {
- // Since we're replacing the text every time we add or remove a
- // character, only read the difference. (issue 5337550)
- final int added = event.getAddedCount();
- final int removed = event.getRemovedCount();
- final int length = event.getBeforeText().length();
- if (added > removed) {
- event.setRemovedCount(0);
- event.setAddedCount(1);
- event.setFromIndex(length);
- } else if (removed > added) {
- event.setRemovedCount(1);
- event.setAddedCount(0);
- event.setFromIndex(length - 1);
- } else {
- return;
- }
- } else if (event.getEventType() == AccessibilityEvent.TYPE_VIEW_FOCUSED) {
- // The parent EditText class lets tts read "edit box" when this View has a focus, which
- // confuses users on app launch (issue 5275935).
- return;
- }
- super.sendAccessibilityEventUnchecked(event);
- }
}
diff --git a/src/com/android/dialer/dialpad/SmartDialCache.java b/src/com/android/dialer/dialpad/SmartDialCache.java
index 71f4dfe57..79cc72763 100644
--- a/src/com/android/dialer/dialpad/SmartDialCache.java
+++ b/src/com/android/dialer/dialpad/SmartDialCache.java
@@ -26,6 +26,7 @@ import android.os.Handler;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.Contacts;
+import android.provider.ContactsContract.Data;
import android.provider.ContactsContract.Directory;
import android.util.Log;
@@ -104,7 +105,33 @@ public class SmartDialCache {
public static final int PHONE_LOOKUP_KEY = 5;
public static final int PHONE_DISPLAY_NAME = 6;
- public static final String SORT_ORDER = Contacts.LAST_TIME_CONTACTED + " DESC";
+ // Current contacts - those contacted within the last 3 days (in milliseconds)
+ final static long LAST_TIME_USED_CURRENT_MS = 3 * 24 * 60 * 60 * 1000;
+
+ // Recent contacts - those contacted within the last 30 days (in milliseconds)
+ final static long LAST_TIME_USED_RECENT_MS = 30 * 24 * 60 * 60 * 1000;
+
+ final static String TIME_SINCE_LAST_USED_MS =
+ "(? - " + Data.LAST_TIME_USED + ")";
+
+ final static String SORT_BY_DATA_USAGE =
+ "(CASE WHEN " + TIME_SINCE_LAST_USED_MS + " < " + LAST_TIME_USED_CURRENT_MS +
+ " THEN 0 " +
+ " WHEN " + TIME_SINCE_LAST_USED_MS + " < " + LAST_TIME_USED_RECENT_MS +
+ " THEN 1 " +
+ " ELSE 2 END), " +
+ Data.TIMES_USED + " DESC";
+
+ // This sort order is similar to that used by the ContactsProvider when returning a list
+ // of frequently called contacts.
+ public static final String SORT_ORDER =
+ Contacts.STARRED + " DESC, "
+ + Data.IS_SUPER_PRIMARY + " DESC, "
+ + SORT_BY_DATA_USAGE + ", "
+ + Contacts.IN_VISIBLE_GROUP + " DESC, "
+ + Contacts.DISPLAY_NAME + ", "
+ + Data.CONTACT_ID + ", "
+ + Data.IS_PRIMARY + " DESC";
}
private SmartDialTrie mContactsCache;
@@ -117,7 +144,7 @@ public class SmartDialCache {
public static final int CACHE_IN_PROGRESS = 2;
public static final int CACHE_COMPLETED = 3;
- private static final boolean DEBUG = true;
+ private static final boolean DEBUG = false;
private SmartDialCache(Context context, int nameDisplayOrder) {
mNameDisplayOrder = nameDisplayOrder;
@@ -155,10 +182,12 @@ public class SmartDialCache {
Log.d(LOG_TAG, "Starting caching thread");
}
final StopWatch stopWatch = DEBUG ? StopWatch.start("SmartDial Cache") : null;
+ final String millis = String.valueOf(System.currentTimeMillis());
final Cursor c = context.getContentResolver().query(PhoneQuery.URI,
(mNameDisplayOrder == ContactsContract.Preferences.DISPLAY_ORDER_PRIMARY)
? PhoneQuery.PROJECTION_PRIMARY : PhoneQuery.PROJECTION_ALTERNATIVE,
- null, null, PhoneQuery.SORT_ORDER);
+ null, new String[] {millis, millis},
+ PhoneQuery.SORT_ORDER);
if (DEBUG) {
stopWatch.lap("SmartDial query complete");
}
@@ -243,8 +272,8 @@ public class SmartDialCache {
/**
* Cache contacts only if there is a need to (forced cache refresh or no attempt to cache yet).
- * This method is called in 2 places: whenever the DialpadFragment comes into view, and when the
- * ContentObserver observes a change in contacts.
+ * This method is called in 2 places: whenever the DialpadFragment comes into view, and in
+ * onResume.
*
* @param forceRecache If true, force a cache refresh.
*/
@@ -284,32 +313,4 @@ public class SmartDialCache {
}
}
-
- public static class SmartDialContentObserver extends ContentObserver {
- private final SmartDialCache mCache;
- // throttle updates in case onChange is called too often due to syncing, etc.
- private final long mThresholdBetweenUpdates = 5000;
- private long mLastCalled = 0;
- private long mLastUpdated = 0;
- public SmartDialContentObserver(Handler handler, SmartDialCache cache) {
- super(handler);
- mCache = cache;
- }
-
- @Override
- public void onChange(boolean selfChange) {
- mLastCalled = System.currentTimeMillis();
- if (DEBUG) {
- Log.d(LOG_TAG, "Contacts change observed");
- }
- if (mLastCalled - mLastUpdated > mThresholdBetweenUpdates) {
- mLastUpdated = mLastCalled;
- if (DEBUG) {
- Log.d(LOG_TAG, "More than 5 seconds since last cache, forcing recache");
- }
- mCache.cacheIfNeeded(true);
- }
- super.onChange(selfChange);
- }
- }
}
diff --git a/src/com/android/dialer/dialpad/SmartDialLoaderTask.java b/src/com/android/dialer/dialpad/SmartDialLoaderTask.java
index c2b1c2d98..c5fc65761 100644
--- a/src/com/android/dialer/dialpad/SmartDialLoaderTask.java
+++ b/src/com/android/dialer/dialpad/SmartDialLoaderTask.java
@@ -48,7 +48,7 @@ public class SmartDialLoaderTask extends AsyncTask<String, Integer, List<SmartDi
void setSmartDialAdapterEntries(List<SmartDialEntry> list, String query);
}
- static private final boolean DEBUG = true; // STOPSHIP change to false.
+ static private final boolean DEBUG = false;
private static final int MAX_ENTRIES = 3;
diff --git a/src/com/android/dialer/list/PhoneFavoriteFragment.java b/src/com/android/dialer/list/PhoneFavoriteFragment.java
index 93f38bb75..97481bc35 100644
--- a/src/com/android/dialer/list/PhoneFavoriteFragment.java
+++ b/src/com/android/dialer/list/PhoneFavoriteFragment.java
@@ -301,8 +301,10 @@ public class PhoneFavoriteFragment extends Fragment implements OnItemClickListen
mAllContactsAdapter.setSectionHeaderDisplayEnabled(true);
// Disable pinned header. It doesn't work with this fragment.
mAllContactsAdapter.setPinnedPartitionHeadersEnabled(false);
- // Put photos on left for consistency with "frequent" contacts section.
- mAllContactsAdapter.setPhotoPosition(ContactListItemView.PhotoPosition.LEFT);
+ // Put photos on START (LEFT in LTR layout direction and RIGHT in RTL layout direction)
+ // for consistency with "frequent" contacts section.
+ mAllContactsAdapter.setPhotoPosition(ContactListItemView.getDefaultPhotoPosition(
+ true /* opposite */ ));
// Use Callable.CONTENT_URI which will include not only phone numbers but also SIP
// addresses.
diff --git a/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java b/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java
index 961764475..80bbf34db 100644
--- a/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java
+++ b/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java
@@ -110,8 +110,8 @@ public class PhoneCallDetailsHelperTest extends AndroidTestCase {
public void testSetPhoneCallDetails_Normal() {
setPhoneCallDetailsWithNumber("14125551212", "1-412-555-1212");
- assertEquals("yesterday", mViews.callTypeAndDate.getText().toString());
- assertEqualsHtml("<font color='#33b5e5'><b>yesterday</b></font>",
+ assertEquals("Yesterday", mViews.callTypeAndDate.getText().toString());
+ assertEqualsHtml("<font color='#33b5e5'><b>Yesterday</b></font>",
mViews.callTypeAndDate.getText());
}
@@ -139,7 +139,7 @@ public class PhoneCallDetailsHelperTest extends AndroidTestCase {
setPhoneCallDetailsWithDate(
new GregorianCalendar(2011, 5, 2, 13, 0, 0).getTimeInMillis());
- assertDateEquals("yesterday");
+ assertDateEquals("Yesterday");
setPhoneCallDetailsWithDate(
new GregorianCalendar(2011, 5, 1, 13, 0, 0).getTimeInMillis());
@@ -266,7 +266,7 @@ public class PhoneCallDetailsHelperTest extends AndroidTestCase {
assertEquals(id, mViews.callTypeIcons.getCallType(index));
}
assertEquals(View.VISIBLE, mViews.callTypeIcons.getVisibility());
- assertEquals("yesterday", mViews.callTypeAndDate.getText().toString());
+ assertEquals("Yesterday", mViews.callTypeAndDate.getText().toString());
}
/**
@@ -280,7 +280,7 @@ public class PhoneCallDetailsHelperTest extends AndroidTestCase {
assertEquals(id, mViews.callTypeIcons.getCallType(index));
}
assertEquals(View.VISIBLE, mViews.callTypeIcons.getVisibility());
- assertEquals(overflowText + " yesterday", mViews.callTypeAndDate.getText().toString());
+ assertEquals(overflowText + " Yesterday", mViews.callTypeAndDate.getText().toString());
}
/** Sets the phone call details with default values and the given number. */
diff --git a/tests/src/com/android/dialer/dialpad/DialpadFragmentTest.java b/tests/src/com/android/dialer/dialpad/DialpadFragmentTest.java
new file mode 100644
index 000000000..a123e745e
--- /dev/null
+++ b/tests/src/com/android/dialer/dialpad/DialpadFragmentTest.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2012 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.dialer.dialpad;
+
+import android.test.suitebuilder.annotation.SmallTest;
+
+import junit.framework.TestCase;
+
+/** Unit tests for {@link DialpadFragment}. */
+@SmallTest
+public class DialpadFragmentTest extends TestCase {
+
+ public void testCanAddDigit_Valid() {
+ // end, middle, selection to end, middle selection
+ assertTrue(DialpadFragment.canAddDigit("123", 3, 3, ';'));
+ assertTrue(DialpadFragment.canAddDigit("123", 1, 1, ','));
+ assertTrue(DialpadFragment.canAddDigit("123", 1, 3, ';'));
+ assertTrue(DialpadFragment.canAddDigit("123", 1, 2, ','));
+ }
+
+ public void testCanAddDigit_InvalidCharacter() {
+ // only handles wait/pause
+ assertFalse(DialpadFragment.canAddDigit("123", 1, 1, '5'));
+ }
+
+ public void testCanAddDigit_BadOrNoSelection() {
+ // no selection
+ assertFalse(DialpadFragment.canAddDigit("123", -1, -1, ';'));
+ assertFalse(DialpadFragment.canAddDigit("123", -1, 1, ','));
+
+ // start > end
+ assertFalse(DialpadFragment.canAddDigit("123", 2, 1, ','));
+ }
+
+ public void testCanAddDigit_OutOfBounds() {
+ // start or end is > digits.length()
+ assertFalse(DialpadFragment.canAddDigit("123", 1, 4, ';'));
+ assertFalse(DialpadFragment.canAddDigit("123", 4, 4, ','));
+ }
+
+ public void testCanAddDigit_AsFirstCharacter() {
+ assertFalse(DialpadFragment.canAddDigit("", 0, 0, ','));
+ assertFalse(DialpadFragment.canAddDigit("123", 0, 0, ';'));
+ assertFalse(DialpadFragment.canAddDigit("123", 0, 2, ','));
+ assertFalse(DialpadFragment.canAddDigit("123", 0, 3, ','));
+ }
+
+ public void testCanAddDigit_AdjacentCharacters_Before() {
+ // before
+ assertFalse(DialpadFragment.canAddDigit("55;55", 2, 2, ';')); // WAIT
+ assertFalse(DialpadFragment.canAddDigit("55;55", 1, 2, ';'));
+ assertTrue(DialpadFragment.canAddDigit("55,55", 2, 2, ',')); // PAUSE
+ assertTrue(DialpadFragment.canAddDigit("55,55", 1, 2, ','));
+ assertTrue(DialpadFragment.canAddDigit("55;55", 2, 2, ',')); // WAIT & PAUSE
+ assertTrue(DialpadFragment.canAddDigit("55,55", 1, 2, ';'));
+ }
+
+ public void testCanAddDigit_AdjacentCharacters_After() {
+ // after
+ assertFalse(DialpadFragment.canAddDigit("55;55", 3, 3, ';')); // WAIT
+ assertFalse(DialpadFragment.canAddDigit("55;55", 3, 4, ';'));
+ assertTrue(DialpadFragment.canAddDigit("55,55", 3, 3, ',')); // PAUSE
+ assertTrue(DialpadFragment.canAddDigit("55,55", 3, 4, ','));
+ assertTrue(DialpadFragment.canAddDigit("55;55", 3, 3, ',')); // WAIT & PAUSE
+ assertTrue(DialpadFragment.canAddDigit("55,55", 3, 4, ';'));
+ }
+}