diff options
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 Binary files differnew file mode 100644 index 000000000..d06bb6bfc --- /dev/null +++ b/res/drawable-ar-hdpi/dial_num_0_wht.png diff --git a/res/drawable-ar-hdpi/dial_num_1_wht.png b/res/drawable-ar-hdpi/dial_num_1_wht.png Binary files differnew file mode 100644 index 000000000..397ec3237 --- /dev/null +++ b/res/drawable-ar-hdpi/dial_num_1_wht.png diff --git a/res/drawable-ar-hdpi/dial_num_2_wht.png b/res/drawable-ar-hdpi/dial_num_2_wht.png Binary files differnew file mode 100644 index 000000000..ca62c2d6a --- /dev/null +++ b/res/drawable-ar-hdpi/dial_num_2_wht.png diff --git a/res/drawable-ar-hdpi/dial_num_3_wht.png b/res/drawable-ar-hdpi/dial_num_3_wht.png Binary files differnew file mode 100644 index 000000000..887296845 --- /dev/null +++ b/res/drawable-ar-hdpi/dial_num_3_wht.png diff --git a/res/drawable-ar-hdpi/dial_num_4_wht.png b/res/drawable-ar-hdpi/dial_num_4_wht.png Binary files differnew file mode 100644 index 000000000..6f6888408 --- /dev/null +++ b/res/drawable-ar-hdpi/dial_num_4_wht.png diff --git a/res/drawable-ar-hdpi/dial_num_5_wht.png b/res/drawable-ar-hdpi/dial_num_5_wht.png Binary files differnew file mode 100644 index 000000000..d107f731d --- /dev/null +++ b/res/drawable-ar-hdpi/dial_num_5_wht.png diff --git a/res/drawable-ar-hdpi/dial_num_6_wht.png b/res/drawable-ar-hdpi/dial_num_6_wht.png Binary files differnew file mode 100644 index 000000000..e46474e2f --- /dev/null +++ b/res/drawable-ar-hdpi/dial_num_6_wht.png diff --git a/res/drawable-ar-hdpi/dial_num_7_wht.png b/res/drawable-ar-hdpi/dial_num_7_wht.png Binary files differnew file mode 100644 index 000000000..d121401f1 --- /dev/null +++ b/res/drawable-ar-hdpi/dial_num_7_wht.png diff --git a/res/drawable-ar-hdpi/dial_num_8_wht.png b/res/drawable-ar-hdpi/dial_num_8_wht.png Binary files differnew file mode 100644 index 000000000..546574bca --- /dev/null +++ b/res/drawable-ar-hdpi/dial_num_8_wht.png diff --git a/res/drawable-ar-hdpi/dial_num_9_wht.png b/res/drawable-ar-hdpi/dial_num_9_wht.png Binary files differnew file mode 100644 index 000000000..7e6a71271 --- /dev/null +++ b/res/drawable-ar-hdpi/dial_num_9_wht.png diff --git a/res/drawable-ar-mdpi/dial_num_0_wht.png b/res/drawable-ar-mdpi/dial_num_0_wht.png Binary files differnew file mode 100644 index 000000000..5f7eb7f66 --- /dev/null +++ b/res/drawable-ar-mdpi/dial_num_0_wht.png diff --git a/res/drawable-ar-mdpi/dial_num_1_wht.png b/res/drawable-ar-mdpi/dial_num_1_wht.png Binary files differnew file mode 100644 index 000000000..8a7d0862f --- /dev/null +++ b/res/drawable-ar-mdpi/dial_num_1_wht.png diff --git a/res/drawable-ar-mdpi/dial_num_2_wht.png b/res/drawable-ar-mdpi/dial_num_2_wht.png Binary files differnew file mode 100644 index 000000000..87c1d494e --- /dev/null +++ b/res/drawable-ar-mdpi/dial_num_2_wht.png diff --git a/res/drawable-ar-mdpi/dial_num_3_wht.png b/res/drawable-ar-mdpi/dial_num_3_wht.png Binary files differnew file mode 100644 index 000000000..e600393c0 --- /dev/null +++ b/res/drawable-ar-mdpi/dial_num_3_wht.png diff --git a/res/drawable-ar-mdpi/dial_num_4_wht.png b/res/drawable-ar-mdpi/dial_num_4_wht.png Binary files differnew file mode 100644 index 000000000..d2414c9f5 --- /dev/null +++ b/res/drawable-ar-mdpi/dial_num_4_wht.png diff --git a/res/drawable-ar-mdpi/dial_num_5_wht.png b/res/drawable-ar-mdpi/dial_num_5_wht.png Binary files differnew file mode 100644 index 000000000..060f9045b --- /dev/null +++ b/res/drawable-ar-mdpi/dial_num_5_wht.png diff --git a/res/drawable-ar-mdpi/dial_num_6_wht.png b/res/drawable-ar-mdpi/dial_num_6_wht.png Binary files differnew file mode 100644 index 000000000..5763ab855 --- /dev/null +++ b/res/drawable-ar-mdpi/dial_num_6_wht.png diff --git a/res/drawable-ar-mdpi/dial_num_7_wht.png b/res/drawable-ar-mdpi/dial_num_7_wht.png Binary files differnew file mode 100644 index 000000000..5c8189669 --- /dev/null +++ b/res/drawable-ar-mdpi/dial_num_7_wht.png diff --git a/res/drawable-ar-mdpi/dial_num_8_wht.png b/res/drawable-ar-mdpi/dial_num_8_wht.png Binary files differnew file mode 100644 index 000000000..7744206bd --- /dev/null +++ b/res/drawable-ar-mdpi/dial_num_8_wht.png diff --git a/res/drawable-ar-mdpi/dial_num_9_wht.png b/res/drawable-ar-mdpi/dial_num_9_wht.png Binary files differnew file mode 100644 index 000000000..a0c488c22 --- /dev/null +++ b/res/drawable-ar-mdpi/dial_num_9_wht.png diff --git a/res/drawable-ar-xhdpi/dial_num_0_wht.png b/res/drawable-ar-xhdpi/dial_num_0_wht.png Binary files differnew file mode 100644 index 000000000..069afe6a5 --- /dev/null +++ b/res/drawable-ar-xhdpi/dial_num_0_wht.png diff --git a/res/drawable-ar-xhdpi/dial_num_1_wht.png b/res/drawable-ar-xhdpi/dial_num_1_wht.png Binary files differnew file mode 100644 index 000000000..b960b45e7 --- /dev/null +++ b/res/drawable-ar-xhdpi/dial_num_1_wht.png diff --git a/res/drawable-ar-xhdpi/dial_num_2_wht.png b/res/drawable-ar-xhdpi/dial_num_2_wht.png Binary files differnew file mode 100644 index 000000000..9c6d3938f --- /dev/null +++ b/res/drawable-ar-xhdpi/dial_num_2_wht.png diff --git a/res/drawable-ar-xhdpi/dial_num_3_wht.png b/res/drawable-ar-xhdpi/dial_num_3_wht.png Binary files differnew file mode 100644 index 000000000..16cc93084 --- /dev/null +++ b/res/drawable-ar-xhdpi/dial_num_3_wht.png diff --git a/res/drawable-ar-xhdpi/dial_num_4_wht.png b/res/drawable-ar-xhdpi/dial_num_4_wht.png Binary files differnew file mode 100644 index 000000000..2de96dafb --- /dev/null +++ b/res/drawable-ar-xhdpi/dial_num_4_wht.png diff --git a/res/drawable-ar-xhdpi/dial_num_5_wht.png b/res/drawable-ar-xhdpi/dial_num_5_wht.png Binary files differnew file mode 100644 index 000000000..a0b1d8ae9 --- /dev/null +++ b/res/drawable-ar-xhdpi/dial_num_5_wht.png diff --git a/res/drawable-ar-xhdpi/dial_num_6_wht.png b/res/drawable-ar-xhdpi/dial_num_6_wht.png Binary files differnew file mode 100644 index 000000000..24cc1074c --- /dev/null +++ b/res/drawable-ar-xhdpi/dial_num_6_wht.png diff --git a/res/drawable-ar-xhdpi/dial_num_7_wht.png b/res/drawable-ar-xhdpi/dial_num_7_wht.png Binary files differnew file mode 100644 index 000000000..59be814dd --- /dev/null +++ b/res/drawable-ar-xhdpi/dial_num_7_wht.png diff --git a/res/drawable-ar-xhdpi/dial_num_8_wht.png b/res/drawable-ar-xhdpi/dial_num_8_wht.png Binary files differnew file mode 100644 index 000000000..30f30d203 --- /dev/null +++ b/res/drawable-ar-xhdpi/dial_num_8_wht.png diff --git a/res/drawable-ar-xhdpi/dial_num_9_wht.png b/res/drawable-ar-xhdpi/dial_num_9_wht.png Binary files differnew file mode 100644 index 000000000..12651f3b5 --- /dev/null +++ b/res/drawable-ar-xhdpi/dial_num_9_wht.png diff --git a/res/drawable-fa-hdpi/dial_num_0_wht.png b/res/drawable-fa-hdpi/dial_num_0_wht.png Binary files differnew file mode 100644 index 000000000..d06bb6bfc --- /dev/null +++ b/res/drawable-fa-hdpi/dial_num_0_wht.png diff --git a/res/drawable-fa-hdpi/dial_num_1_wht.png b/res/drawable-fa-hdpi/dial_num_1_wht.png Binary files differnew file mode 100644 index 000000000..397ec3237 --- /dev/null +++ b/res/drawable-fa-hdpi/dial_num_1_wht.png diff --git a/res/drawable-fa-hdpi/dial_num_2_wht.png b/res/drawable-fa-hdpi/dial_num_2_wht.png Binary files differnew file mode 100644 index 000000000..ca62c2d6a --- /dev/null +++ b/res/drawable-fa-hdpi/dial_num_2_wht.png diff --git a/res/drawable-fa-hdpi/dial_num_3_wht.png b/res/drawable-fa-hdpi/dial_num_3_wht.png Binary files differnew file mode 100644 index 000000000..887296845 --- /dev/null +++ b/res/drawable-fa-hdpi/dial_num_3_wht.png diff --git a/res/drawable-fa-hdpi/dial_num_4_wht.png b/res/drawable-fa-hdpi/dial_num_4_wht.png Binary files differnew file mode 100644 index 000000000..72e59047c --- /dev/null +++ b/res/drawable-fa-hdpi/dial_num_4_wht.png diff --git a/res/drawable-fa-hdpi/dial_num_5_wht.png b/res/drawable-fa-hdpi/dial_num_5_wht.png Binary files differnew file mode 100644 index 000000000..92615345d --- /dev/null +++ b/res/drawable-fa-hdpi/dial_num_5_wht.png diff --git a/res/drawable-fa-hdpi/dial_num_6_wht.png b/res/drawable-fa-hdpi/dial_num_6_wht.png Binary files differnew file mode 100644 index 000000000..2f6141d43 --- /dev/null +++ b/res/drawable-fa-hdpi/dial_num_6_wht.png diff --git a/res/drawable-fa-hdpi/dial_num_7_wht.png b/res/drawable-fa-hdpi/dial_num_7_wht.png Binary files differnew file mode 100644 index 000000000..d121401f1 --- /dev/null +++ b/res/drawable-fa-hdpi/dial_num_7_wht.png diff --git a/res/drawable-fa-hdpi/dial_num_8_wht.png b/res/drawable-fa-hdpi/dial_num_8_wht.png Binary files differnew file mode 100644 index 000000000..546574bca --- /dev/null +++ b/res/drawable-fa-hdpi/dial_num_8_wht.png diff --git a/res/drawable-fa-hdpi/dial_num_9_wht.png b/res/drawable-fa-hdpi/dial_num_9_wht.png Binary files differnew file mode 100644 index 000000000..7e6a71271 --- /dev/null +++ b/res/drawable-fa-hdpi/dial_num_9_wht.png diff --git a/res/drawable-fa-mdpi/dial_num_0_wht.png b/res/drawable-fa-mdpi/dial_num_0_wht.png Binary files differnew file mode 100644 index 000000000..5f7eb7f66 --- /dev/null +++ b/res/drawable-fa-mdpi/dial_num_0_wht.png diff --git a/res/drawable-fa-mdpi/dial_num_1_wht.png b/res/drawable-fa-mdpi/dial_num_1_wht.png Binary files differnew file mode 100644 index 000000000..8a7d0862f --- /dev/null +++ b/res/drawable-fa-mdpi/dial_num_1_wht.png diff --git a/res/drawable-fa-mdpi/dial_num_2_wht.png b/res/drawable-fa-mdpi/dial_num_2_wht.png Binary files differnew file mode 100644 index 000000000..87c1d494e --- /dev/null +++ b/res/drawable-fa-mdpi/dial_num_2_wht.png diff --git a/res/drawable-fa-mdpi/dial_num_3_wht.png b/res/drawable-fa-mdpi/dial_num_3_wht.png Binary files differnew file mode 100644 index 000000000..e600393c0 --- /dev/null +++ b/res/drawable-fa-mdpi/dial_num_3_wht.png diff --git a/res/drawable-fa-mdpi/dial_num_4_wht.png b/res/drawable-fa-mdpi/dial_num_4_wht.png Binary files differnew file mode 100644 index 000000000..737589071 --- /dev/null +++ b/res/drawable-fa-mdpi/dial_num_4_wht.png diff --git a/res/drawable-fa-mdpi/dial_num_5_wht.png b/res/drawable-fa-mdpi/dial_num_5_wht.png Binary files differnew file mode 100644 index 000000000..e8a315615 --- /dev/null +++ b/res/drawable-fa-mdpi/dial_num_5_wht.png diff --git a/res/drawable-fa-mdpi/dial_num_6_wht.png b/res/drawable-fa-mdpi/dial_num_6_wht.png Binary files differnew file mode 100644 index 000000000..79cdc1c7c --- /dev/null +++ b/res/drawable-fa-mdpi/dial_num_6_wht.png diff --git a/res/drawable-fa-mdpi/dial_num_7_wht.png b/res/drawable-fa-mdpi/dial_num_7_wht.png Binary files differnew file mode 100644 index 000000000..5c8189669 --- /dev/null +++ b/res/drawable-fa-mdpi/dial_num_7_wht.png diff --git a/res/drawable-fa-mdpi/dial_num_8_wht.png b/res/drawable-fa-mdpi/dial_num_8_wht.png Binary files differnew file mode 100644 index 000000000..7744206bd --- /dev/null +++ b/res/drawable-fa-mdpi/dial_num_8_wht.png diff --git a/res/drawable-fa-mdpi/dial_num_9_wht.png b/res/drawable-fa-mdpi/dial_num_9_wht.png Binary files differnew file mode 100644 index 000000000..a0c488c22 --- /dev/null +++ b/res/drawable-fa-mdpi/dial_num_9_wht.png diff --git a/res/drawable-fa-xhdpi/dial_num_0_wht.png b/res/drawable-fa-xhdpi/dial_num_0_wht.png Binary files differnew file mode 100644 index 000000000..069afe6a5 --- /dev/null +++ b/res/drawable-fa-xhdpi/dial_num_0_wht.png diff --git a/res/drawable-fa-xhdpi/dial_num_1_wht.png b/res/drawable-fa-xhdpi/dial_num_1_wht.png Binary files differnew file mode 100644 index 000000000..b960b45e7 --- /dev/null +++ b/res/drawable-fa-xhdpi/dial_num_1_wht.png diff --git a/res/drawable-fa-xhdpi/dial_num_2_wht.png b/res/drawable-fa-xhdpi/dial_num_2_wht.png Binary files differnew file mode 100644 index 000000000..9c6d3938f --- /dev/null +++ b/res/drawable-fa-xhdpi/dial_num_2_wht.png diff --git a/res/drawable-fa-xhdpi/dial_num_3_wht.png b/res/drawable-fa-xhdpi/dial_num_3_wht.png Binary files differnew file mode 100644 index 000000000..16cc93084 --- /dev/null +++ b/res/drawable-fa-xhdpi/dial_num_3_wht.png diff --git a/res/drawable-fa-xhdpi/dial_num_4_wht.png b/res/drawable-fa-xhdpi/dial_num_4_wht.png Binary files differnew file mode 100644 index 000000000..f956a0bcb --- /dev/null +++ b/res/drawable-fa-xhdpi/dial_num_4_wht.png diff --git a/res/drawable-fa-xhdpi/dial_num_5_wht.png b/res/drawable-fa-xhdpi/dial_num_5_wht.png Binary files differnew file mode 100644 index 000000000..da4c8920f --- /dev/null +++ b/res/drawable-fa-xhdpi/dial_num_5_wht.png diff --git a/res/drawable-fa-xhdpi/dial_num_6_wht.png b/res/drawable-fa-xhdpi/dial_num_6_wht.png Binary files differnew file mode 100644 index 000000000..1f7dc6a14 --- /dev/null +++ b/res/drawable-fa-xhdpi/dial_num_6_wht.png diff --git a/res/drawable-fa-xhdpi/dial_num_7_wht.png b/res/drawable-fa-xhdpi/dial_num_7_wht.png Binary files differnew file mode 100644 index 000000000..59be814dd --- /dev/null +++ b/res/drawable-fa-xhdpi/dial_num_7_wht.png diff --git a/res/drawable-fa-xhdpi/dial_num_8_wht.png b/res/drawable-fa-xhdpi/dial_num_8_wht.png Binary files differnew file mode 100644 index 000000000..30f30d203 --- /dev/null +++ b/res/drawable-fa-xhdpi/dial_num_8_wht.png diff --git a/res/drawable-fa-xhdpi/dial_num_9_wht.png b/res/drawable-fa-xhdpi/dial_num_9_wht.png Binary files differnew file mode 100644 index 000000000..12651f3b5 --- /dev/null +++ b/res/drawable-fa-xhdpi/dial_num_9_wht.png diff --git a/res/drawable-ldrtl-hdpi/ic_ab_dialer_holo_dark.png b/res/drawable-ldrtl-hdpi/ic_ab_dialer_holo_dark.png Binary files differnew file mode 100644 index 000000000..bc3ebc7b2 --- /dev/null +++ b/res/drawable-ldrtl-hdpi/ic_ab_dialer_holo_dark.png diff --git a/res/drawable-ldrtl-hdpi/ic_call_incoming_holo_dark.png b/res/drawable-ldrtl-hdpi/ic_call_incoming_holo_dark.png Binary files differnew file mode 100644 index 000000000..3b3fb46ef --- /dev/null +++ b/res/drawable-ldrtl-hdpi/ic_call_incoming_holo_dark.png diff --git a/res/drawable-ldrtl-hdpi/ic_call_missed_holo_dark.png b/res/drawable-ldrtl-hdpi/ic_call_missed_holo_dark.png Binary files differnew file mode 100644 index 000000000..844f351ed --- /dev/null +++ b/res/drawable-ldrtl-hdpi/ic_call_missed_holo_dark.png diff --git a/res/drawable-ldrtl-hdpi/ic_call_outgoing_holo_dark.png b/res/drawable-ldrtl-hdpi/ic_call_outgoing_holo_dark.png Binary files differnew file mode 100644 index 000000000..786198661 --- /dev/null +++ b/res/drawable-ldrtl-hdpi/ic_call_outgoing_holo_dark.png diff --git a/res/drawable-ldrtl-hdpi/ic_dial_action_call.png b/res/drawable-ldrtl-hdpi/ic_dial_action_call.png Binary files differnew file mode 100644 index 000000000..34c78ffec --- /dev/null +++ b/res/drawable-ldrtl-hdpi/ic_dial_action_call.png 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 Binary files differnew file mode 100644 index 000000000..90712b5f0 --- /dev/null +++ b/res/drawable-ldrtl-hdpi/ic_sound_off_speakerphone_disabled_holo_dark.png 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 Binary files differnew file mode 100644 index 000000000..d50d5b889 --- /dev/null +++ b/res/drawable-ldrtl-hdpi/ic_sound_off_speakerphone_holo_dark.png 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 Binary files differnew file mode 100644 index 000000000..b45064136 --- /dev/null +++ b/res/drawable-ldrtl-hdpi/ic_sound_speakerphone_disabled_holo_dark.png diff --git a/res/drawable-ldrtl-hdpi/ic_sound_speakerphone_holo_dark.png b/res/drawable-ldrtl-hdpi/ic_sound_speakerphone_holo_dark.png Binary files differnew file mode 100644 index 000000000..ab62399fc --- /dev/null +++ b/res/drawable-ldrtl-hdpi/ic_sound_speakerphone_holo_dark.png diff --git a/res/drawable-ldrtl-mdpi/ic_ab_dialer_holo_dark.png b/res/drawable-ldrtl-mdpi/ic_ab_dialer_holo_dark.png Binary files differnew file mode 100644 index 000000000..210690fe1 --- /dev/null +++ b/res/drawable-ldrtl-mdpi/ic_ab_dialer_holo_dark.png diff --git a/res/drawable-ldrtl-mdpi/ic_call_incoming_holo_dark.png b/res/drawable-ldrtl-mdpi/ic_call_incoming_holo_dark.png Binary files differnew file mode 100644 index 000000000..b48e0d6f3 --- /dev/null +++ b/res/drawable-ldrtl-mdpi/ic_call_incoming_holo_dark.png diff --git a/res/drawable-ldrtl-mdpi/ic_call_missed_holo_dark.png b/res/drawable-ldrtl-mdpi/ic_call_missed_holo_dark.png Binary files differnew file mode 100644 index 000000000..86bae1075 --- /dev/null +++ b/res/drawable-ldrtl-mdpi/ic_call_missed_holo_dark.png diff --git a/res/drawable-ldrtl-mdpi/ic_call_outgoing_holo_dark.png b/res/drawable-ldrtl-mdpi/ic_call_outgoing_holo_dark.png Binary files differnew file mode 100644 index 000000000..1429593bf --- /dev/null +++ b/res/drawable-ldrtl-mdpi/ic_call_outgoing_holo_dark.png diff --git a/res/drawable-ldrtl-mdpi/ic_dial_action_call.png b/res/drawable-ldrtl-mdpi/ic_dial_action_call.png Binary files differnew file mode 100644 index 000000000..d1f00f144 --- /dev/null +++ b/res/drawable-ldrtl-mdpi/ic_dial_action_call.png 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 Binary files differnew file mode 100644 index 000000000..9daf083a9 --- /dev/null +++ b/res/drawable-ldrtl-mdpi/ic_sound_off_speakerphone_disabled_holo_dark.png 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 Binary files differnew file mode 100644 index 000000000..e8357c197 --- /dev/null +++ b/res/drawable-ldrtl-mdpi/ic_sound_off_speakerphone_holo_dark.png 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 Binary files differnew file mode 100644 index 000000000..8ba42f8c0 --- /dev/null +++ b/res/drawable-ldrtl-mdpi/ic_sound_speakerphone_disabled_holo_dark.png diff --git a/res/drawable-ldrtl-mdpi/ic_sound_speakerphone_holo_dark.png b/res/drawable-ldrtl-mdpi/ic_sound_speakerphone_holo_dark.png Binary files differnew file mode 100644 index 000000000..0b7296d06 --- /dev/null +++ b/res/drawable-ldrtl-mdpi/ic_sound_speakerphone_holo_dark.png diff --git a/res/drawable-ldrtl-xhdpi/ic_ab_dialer_holo_dark.png b/res/drawable-ldrtl-xhdpi/ic_ab_dialer_holo_dark.png Binary files differnew file mode 100644 index 000000000..5c8e1622e --- /dev/null +++ b/res/drawable-ldrtl-xhdpi/ic_ab_dialer_holo_dark.png diff --git a/res/drawable-ldrtl-xhdpi/ic_call_incoming_holo_dark.png b/res/drawable-ldrtl-xhdpi/ic_call_incoming_holo_dark.png Binary files differnew file mode 100644 index 000000000..dfb179237 --- /dev/null +++ b/res/drawable-ldrtl-xhdpi/ic_call_incoming_holo_dark.png diff --git a/res/drawable-ldrtl-xhdpi/ic_call_missed_holo_dark.png b/res/drawable-ldrtl-xhdpi/ic_call_missed_holo_dark.png Binary files differnew file mode 100644 index 000000000..a1236ed16 --- /dev/null +++ b/res/drawable-ldrtl-xhdpi/ic_call_missed_holo_dark.png diff --git a/res/drawable-ldrtl-xhdpi/ic_call_outgoing_holo_dark.png b/res/drawable-ldrtl-xhdpi/ic_call_outgoing_holo_dark.png Binary files differnew file mode 100644 index 000000000..ec0e1d0ef --- /dev/null +++ b/res/drawable-ldrtl-xhdpi/ic_call_outgoing_holo_dark.png diff --git a/res/drawable-ldrtl-xhdpi/ic_dial_action_call.png b/res/drawable-ldrtl-xhdpi/ic_dial_action_call.png Binary files differnew file mode 100644 index 000000000..e0d268829 --- /dev/null +++ b/res/drawable-ldrtl-xhdpi/ic_dial_action_call.png 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 Binary files differnew file mode 100644 index 000000000..396c47962 --- /dev/null +++ b/res/drawable-ldrtl-xhdpi/ic_sound_off_speakerphone_disabled_holo_dark.png 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 Binary files differnew file mode 100644 index 000000000..ca080b2ba --- /dev/null +++ b/res/drawable-ldrtl-xhdpi/ic_sound_off_speakerphone_holo_dark.png 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 Binary files differnew file mode 100644 index 000000000..c809e8dd7 --- /dev/null +++ b/res/drawable-ldrtl-xhdpi/ic_sound_speakerphone_disabled_holo_dark.png diff --git a/res/drawable-ldrtl-xhdpi/ic_sound_speakerphone_holo_dark.png b/res/drawable-ldrtl-xhdpi/ic_sound_speakerphone_holo_dark.png Binary files differnew file mode 100644 index 000000000..f82a81662 --- /dev/null +++ b/res/drawable-ldrtl-xhdpi/ic_sound_speakerphone_holo_dark.png 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, ';')); + } +} |