am fa79517b: (-s ours) am a2b359cd: (-s ours) Import translations. DO NOT MERGE
* commit 'fa79517bb7fd2ff7e6c449567a9b3cf11a284ea4':
Import translations. DO NOT MERGE
diff --git a/Android.mk b/Android.mk
index 899d589..c72c019 100644
--- a/Android.mk
+++ b/Android.mk
@@ -4,10 +4,11 @@
LOCAL_MODULE_TAGS := optional
contacts_common_dir := ../ContactsCommon
+phone_common_dir := ../PhoneCommon
incallui_dir := ../InCallUI
-src_dirs := src $(contacts_common_dir)/src $(incallui_dir)/src
-res_dirs := res $(contacts_common_dir)/res $(incallui_dir)/res
+src_dirs := src $(contacts_common_dir)/src $(incallui_dir)/src $(phone_common_dir)/src
+res_dirs := res $(contacts_common_dir)/res $(incallui_dir)/res $(phone_common_dir)/res
LOCAL_SRC_FILES := $(call all-java-files-under, $(src_dirs))
LOCAL_RESOURCE_DIR := $(addprefix $(LOCAL_PATH)/, $(res_dirs))
@@ -15,11 +16,11 @@
LOCAL_AAPT_FLAGS := \
--auto-add-overlay \
--extra-packages com.android.contacts.common \
- --extra-packages com.android.incallui
+ --extra-packages com.android.incallui \
+ --extra-packages com.android.phone.common
LOCAL_JAVA_LIBRARIES := telephony-common
LOCAL_STATIC_JAVA_LIBRARIES := \
- com.android.phone.shared \
com.android.services.telephony.common \
com.android.vcard \
android-common \
@@ -27,6 +28,8 @@
android-support-v13 \
android-support-v4 \
android-ex-variablespeed \
+ libphonenumber \
+ libgeocoding
LOCAL_REQUIRED_MODULES := libvariablespeed
@@ -36,6 +39,10 @@
LOCAL_PROGUARD_FLAG_FILES := proguard.flags $(incallui_dir)/proguard.flags
+# Uncomment the following line to build against the current SDK
+# This is required for building an unbundled app.
+# LOCAL_SDK_VERSION := current
+
include $(BUILD_PACKAGE)
# Use the following include to make our test apk.
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 509960c..d89de95 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -44,8 +44,6 @@
<uses-permission android:name="com.android.voicemail.permission.READ_WRITE_ALL_VOICEMAIL" />
<uses-permission android:name="android.permission.ALLOW_ANY_CODEC_FOR_PLAYBACK" />
<uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
- <!-- allow broadcasting secret code intents that reboot the phone -->
- <uses-permission android:name="android.permission.REBOOT" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<!-- This tells the activity manager to not delay any of our activity
start requests, even if they happen immediately after the user
@@ -68,11 +66,10 @@
dialpad screen. -->
<activity android:name=".DialtactsActivity"
android:label="@string/launcherDialer"
- android:theme="@style/DialtactsThemeHiddenActionBar"
+ android:theme="@style/DialtactsActivityTheme"
android:launchMode="singleTask"
android:clearTaskOnLaunch="true"
android:icon="@mipmap/ic_launcher_phone"
- android:screenOrientation="portrait"
android:enabled="@*android:bool/config_voice_capable"
android:windowSoftInputMode="stateAlwaysHidden|adjustNothing">
<intent-filter>
@@ -126,8 +123,7 @@
<activity android:name="com.android.dialer.calllog.CallLogActivity"
android:label="@string/call_log_activity_title"
- android:theme="@style/DialtactsThemeWithActionBarOverlay"
- android:screenOrientation="portrait"
+ android:theme="@style/DialtactsThemeWithoutActionBarOverlay"
android:icon="@mipmap/ic_launcher_phone">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
@@ -137,16 +133,9 @@
</intent-filter>
</activity>
- <activity android:name="com.android.dialer.list.AllContactsActivity"
- android:label="@string/show_all_contacts_title"
- android:theme="@style/DialtactsThemeWithActionBarOverlay"
- android:screenOrientation="portrait">
- </activity>
-
<activity android:name="com.android.dialer.CallDetailActivity"
android:label="@string/callDetailTitle"
android:theme="@style/CallDetailActivityTheme"
- android:screenOrientation="portrait"
android:icon="@mipmap/ic_launcher_phone"
android:parentActivityName="com.android.dialer.calllog.CallLogActivity"
>
@@ -271,7 +260,6 @@
android:label="@string/phoneAppLabel"
android:excludeFromRecents="true"
android:launchMode="singleInstance"
- android:screenOrientation="nosensor"
android:configChanges="keyboardHidden"
android:exported="false"
android:process="com.android.incallui">
diff --git a/proguard.flags b/proguard.flags
index 40ef035..38d4050 100644
--- a/proguard.flags
+++ b/proguard.flags
@@ -6,9 +6,9 @@
}
# Any class or method annotated with NeededForTesting or NeededForReflection.
--keep @com.android.contacts.common.test.NeededForTesting class *
+-keep @com.android.contacts.common.testing.NeededForTesting class *
-keepclassmembers class * {
-@com.android.contacts.common.test.NeededForTesting *;
+@com.android.contacts.common.testing.NeededForTesting *;
@com.android.dialer.NeededForReflection *;
}
diff --git a/res/anim/slide_in.xml b/res/anim/slide_in.xml
deleted file mode 100644
index 31502a9..0000000
--- a/res/anim/slide_in.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 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.
--->
-<objectAnimator
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:interpolator="@android:anim/decelerate_interpolator"
- android:valueFrom="0.67"
- android:valueTo="0"
- android:valueType="floatType"
- android:propertyName="yFraction"
- android:duration="200" />
\ No newline at end of file
diff --git a/res/anim/slide_out.xml b/res/anim/slide_out.xml
deleted file mode 100644
index e037009..0000000
--- a/res/anim/slide_out.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 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.
--->
-<objectAnimator
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:interpolator="@android:anim/decelerate_interpolator"
- android:valueFrom="0"
- android:valueTo="0.67"
- android:valueType="floatType"
- android:propertyName="yFraction"
- android:duration="200" />
\ No newline at end of file
diff --git a/res/drawable/background_favorites_menu.xml b/res/color/tab_text_color.xml
similarity index 66%
rename from res/drawable/background_favorites_menu.xml
rename to res/color/tab_text_color.xml
index 60933fd..5ef1fe3 100644
--- a/res/drawable/background_favorites_menu.xml
+++ b/res/color/tab_text_color.xml
@@ -16,14 +16,6 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_pressed="false">
- <shape android:shape="rectangle" >
- <solid android:color="@color/favorites_menu_background_color" />
- </shape>
- </item>
- <item android:state_pressed="true">
- <shape android:shape="rectangle" >
- <solid android:color="@color/favorites_menu_pressed_color" />
- </shape>
- </item>
+ <item android:color="@color/actionbar_text_color" android:state_selected="true"/>
+ <item android:color="@color/actionbar_unselected_text_color" />
</selector>
\ No newline at end of file
diff --git a/res/drawable-hdpi/empty_call_log.png b/res/drawable-hdpi/empty_call_log.png
new file mode 100644
index 0000000..d6f6daa
--- /dev/null
+++ b/res/drawable-hdpi/empty_call_log.png
Binary files differ
diff --git a/res/drawable-hdpi/empty_contacts.png b/res/drawable-hdpi/empty_contacts.png
new file mode 100644
index 0000000..d3c0378
--- /dev/null
+++ b/res/drawable-hdpi/empty_contacts.png
Binary files differ
diff --git a/res/drawable-hdpi/empty_speed_dial.png b/res/drawable-hdpi/empty_speed_dial.png
new file mode 100644
index 0000000..3e9232f
--- /dev/null
+++ b/res/drawable-hdpi/empty_speed_dial.png
Binary files differ
diff --git a/res/drawable-hdpi/fab_ic_call.png b/res/drawable-hdpi/fab_ic_call.png
new file mode 100644
index 0000000..7bf83fa
--- /dev/null
+++ b/res/drawable-hdpi/fab_ic_call.png
Binary files differ
diff --git a/res/drawable-hdpi/fab_ic_dial.png b/res/drawable-hdpi/fab_ic_dial.png
new file mode 100644
index 0000000..3cad4c6
--- /dev/null
+++ b/res/drawable-hdpi/fab_ic_dial.png
Binary files differ
diff --git a/res/drawable-hdpi/fab_teal_background.png b/res/drawable-hdpi/fab_teal_background.png
new file mode 100644
index 0000000..e2f01e8
--- /dev/null
+++ b/res/drawable-hdpi/fab_teal_background.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_ab_search.png b/res/drawable-hdpi/ic_ab_search.png
deleted file mode 100644
index 3702846..0000000
--- a/res/drawable-hdpi/ic_ab_search.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_add_person_dk.png b/res/drawable-hdpi/ic_add_person_dk.png
deleted file mode 100644
index 7096ed2..0000000
--- a/res/drawable-hdpi/ic_add_person_dk.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_back_arrow.png b/res/drawable-hdpi/ic_back_arrow.png
deleted file mode 100644
index aad4f36..0000000
--- a/res/drawable-hdpi/ic_back_arrow.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_call_arrow.png b/res/drawable-hdpi/ic_call_arrow.png
new file mode 100644
index 0000000..14a33e3
--- /dev/null
+++ b/res/drawable-hdpi/ic_call_arrow.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_call_incoming_holo_dark.png b/res/drawable-hdpi/ic_call_incoming_holo_dark.png
deleted file mode 100644
index 8351f48..0000000
--- a/res/drawable-hdpi/ic_call_incoming_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_call_missed_holo_dark.png b/res/drawable-hdpi/ic_call_missed_holo_dark.png
deleted file mode 100644
index 7c17c30..0000000
--- a/res/drawable-hdpi/ic_call_missed_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_call_outgoing_holo_dark.png b/res/drawable-hdpi/ic_call_outgoing_holo_dark.png
deleted file mode 100644
index 3b9e0f8..0000000
--- a/res/drawable-hdpi/ic_call_outgoing_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_close_dk.png b/res/drawable-hdpi/ic_close_dk.png
deleted file mode 100644
index f5e378f..0000000
--- a/res/drawable-hdpi/ic_close_dk.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_contacts_tiles.9.png b/res/drawable-hdpi/ic_contacts_tiles.9.png
deleted file mode 100644
index 572fdb8..0000000
--- a/res/drawable-hdpi/ic_contacts_tiles.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_dial_action_call.png b/res/drawable-hdpi/ic_dial_action_call.png
deleted file mode 100644
index ed08eb8..0000000
--- a/res/drawable-hdpi/ic_dial_action_call.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_dial_action_delete.png b/res/drawable-hdpi/ic_dial_action_delete.png
deleted file mode 100644
index ebf692a..0000000
--- a/res/drawable-hdpi/ic_dial_action_delete.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_dial_action_vm.png b/res/drawable-hdpi/ic_dial_action_vm.png
deleted file mode 100644
index f424304..0000000
--- a/res/drawable-hdpi/ic_dial_action_vm.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_dialpad_dk.png b/res/drawable-hdpi/ic_menu_dialpad_dk.png
deleted file mode 100644
index 55f5477..0000000
--- a/res/drawable-hdpi/ic_menu_dialpad_dk.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_dialpad_lt.png b/res/drawable-hdpi/ic_menu_dialpad_lt.png
deleted file mode 100644
index bd0fe5d..0000000
--- a/res/drawable-hdpi/ic_menu_dialpad_lt.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_overflow_lt.png b/res/drawable-hdpi/ic_menu_overflow_lt.png
deleted file mode 100644
index 2561b8c..0000000
--- a/res/drawable-hdpi/ic_menu_overflow_lt.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_overflow_dk.png b/res/drawable-hdpi/ic_overflow_menu.png
similarity index 89%
rename from res/drawable-hdpi/ic_menu_overflow_dk.png
rename to res/drawable-hdpi/ic_overflow_menu.png
index e9b0523..0170057 100644
--- a/res/drawable-hdpi/ic_menu_overflow_dk.png
+++ b/res/drawable-hdpi/ic_overflow_menu.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_phone_dk.png b/res/drawable-hdpi/ic_phone_dk.png
deleted file mode 100644
index 984d6fa..0000000
--- a/res/drawable-hdpi/ic_phone_dk.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_remove_highlight.png b/res/drawable-hdpi/ic_remove_highlight.png
deleted file mode 100644
index 435ee36..0000000
--- a/res/drawable-hdpi/ic_remove_highlight.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_results_add_contact.png b/res/drawable-hdpi/ic_results_add_contact.png
new file mode 100644
index 0000000..472b281
--- /dev/null
+++ b/res/drawable-hdpi/ic_results_add_contact.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_results_phone.png b/res/drawable-hdpi/ic_results_phone.png
new file mode 100644
index 0000000..3a1a7a7
--- /dev/null
+++ b/res/drawable-hdpi/ic_results_phone.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_star.png b/res/drawable-hdpi/ic_star.png
new file mode 100644
index 0000000..62e1f8a
--- /dev/null
+++ b/res/drawable-hdpi/ic_star.png
Binary files differ
diff --git a/res/drawable-hdpi/list_item_avatar_bg.png b/res/drawable-hdpi/list_item_avatar_bg.png
deleted file mode 100644
index 66e5f3e..0000000
--- a/res/drawable-hdpi/list_item_avatar_bg.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/no_favorites_banner.png b/res/drawable-hdpi/no_favorites_banner.png
deleted file mode 100644
index a4b09c0..0000000
--- a/res/drawable-hdpi/no_favorites_banner.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_tile_for_recents_and_contact_tile.9.png b/res/drawable-hdpi/rounded_corner_bg.9.png
similarity index 100%
rename from res/drawable-hdpi/ic_tile_for_recents_and_contact_tile.9.png
rename to res/drawable-hdpi/rounded_corner_bg.9.png
Binary files differ
diff --git a/res/drawable-hdpi/search_bg.9.png b/res/drawable-hdpi/search_bg.9.png
deleted file mode 100644
index 81c47be..0000000
--- a/res/drawable-hdpi/search_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/search_shadow.9.png b/res/drawable-hdpi/search_shadow.9.png
new file mode 100644
index 0000000..3dc1c17
--- /dev/null
+++ b/res/drawable-hdpi/search_shadow.9.png
Binary files differ
diff --git a/res/drawable-hdpi/star_thumbnail.png b/res/drawable-hdpi/star_thumbnail.png
deleted file mode 100644
index 1d4d5e1..0000000
--- a/res/drawable-hdpi/star_thumbnail.png
+++ /dev/null
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
deleted file mode 100644
index 34c78ff..0000000
--- a/res/drawable-ldrtl-hdpi/ic_dial_action_call.png
+++ /dev/null
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
deleted file mode 100644
index d1f00f1..0000000
--- a/res/drawable-ldrtl-mdpi/ic_dial_action_call.png
+++ /dev/null
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
deleted file mode 100644
index e0d2688..0000000
--- a/res/drawable-ldrtl-xhdpi/ic_dial_action_call.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/empty_call_log.png b/res/drawable-mdpi/empty_call_log.png
new file mode 100644
index 0000000..3cd59b3
--- /dev/null
+++ b/res/drawable-mdpi/empty_call_log.png
Binary files differ
diff --git a/res/drawable-mdpi/empty_contacts.png b/res/drawable-mdpi/empty_contacts.png
new file mode 100644
index 0000000..2ce7eae
--- /dev/null
+++ b/res/drawable-mdpi/empty_contacts.png
Binary files differ
diff --git a/res/drawable-mdpi/empty_speed_dial.png b/res/drawable-mdpi/empty_speed_dial.png
new file mode 100644
index 0000000..98152e0
--- /dev/null
+++ b/res/drawable-mdpi/empty_speed_dial.png
Binary files differ
diff --git a/res/drawable-mdpi/fab_ic_call.png b/res/drawable-mdpi/fab_ic_call.png
new file mode 100644
index 0000000..790f935
--- /dev/null
+++ b/res/drawable-mdpi/fab_ic_call.png
Binary files differ
diff --git a/res/drawable-mdpi/fab_ic_dial.png b/res/drawable-mdpi/fab_ic_dial.png
new file mode 100644
index 0000000..4c854e1
--- /dev/null
+++ b/res/drawable-mdpi/fab_ic_dial.png
Binary files differ
diff --git a/res/drawable-mdpi/fab_teal_background.png b/res/drawable-mdpi/fab_teal_background.png
new file mode 100644
index 0000000..c95d124
--- /dev/null
+++ b/res/drawable-mdpi/fab_teal_background.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_ab_search.png b/res/drawable-mdpi/ic_ab_search.png
deleted file mode 100644
index cc9f911..0000000
--- a/res/drawable-mdpi/ic_ab_search.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_add_person_dk.png b/res/drawable-mdpi/ic_add_person_dk.png
deleted file mode 100644
index 0e0aed0..0000000
--- a/res/drawable-mdpi/ic_add_person_dk.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_back_arrow.png b/res/drawable-mdpi/ic_back_arrow.png
deleted file mode 100644
index 56eb887..0000000
--- a/res/drawable-mdpi/ic_back_arrow.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_call_arrow.png b/res/drawable-mdpi/ic_call_arrow.png
new file mode 100644
index 0000000..169cf29
--- /dev/null
+++ b/res/drawable-mdpi/ic_call_arrow.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_call_incoming_holo_dark.png b/res/drawable-mdpi/ic_call_incoming_holo_dark.png
deleted file mode 100644
index 8dcb350..0000000
--- a/res/drawable-mdpi/ic_call_incoming_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_call_missed_holo_dark.png b/res/drawable-mdpi/ic_call_missed_holo_dark.png
deleted file mode 100644
index af030cf..0000000
--- a/res/drawable-mdpi/ic_call_missed_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_call_outgoing_holo_dark.png b/res/drawable-mdpi/ic_call_outgoing_holo_dark.png
deleted file mode 100644
index 38a01b7..0000000
--- a/res/drawable-mdpi/ic_call_outgoing_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_close_dk.png b/res/drawable-mdpi/ic_close_dk.png
deleted file mode 100644
index 13f68ee..0000000
--- a/res/drawable-mdpi/ic_close_dk.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_contacts_tiles.9.png b/res/drawable-mdpi/ic_contacts_tiles.9.png
deleted file mode 100644
index 343053a..0000000
--- a/res/drawable-mdpi/ic_contacts_tiles.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_dial_action_call.png b/res/drawable-mdpi/ic_dial_action_call.png
deleted file mode 100644
index 59a68f2..0000000
--- a/res/drawable-mdpi/ic_dial_action_call.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_dial_action_delete.png b/res/drawable-mdpi/ic_dial_action_delete.png
deleted file mode 100644
index e1394c5..0000000
--- a/res/drawable-mdpi/ic_dial_action_delete.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_dial_action_vm.png b/res/drawable-mdpi/ic_dial_action_vm.png
deleted file mode 100644
index fbcf378..0000000
--- a/res/drawable-mdpi/ic_dial_action_vm.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_overflow_dk.png b/res/drawable-mdpi/ic_menu_overflow_dk.png
deleted file mode 100644
index 67f281d..0000000
--- a/res/drawable-mdpi/ic_menu_overflow_dk.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_menu_overflow_lt.png b/res/drawable-mdpi/ic_menu_overflow_lt.png
deleted file mode 100644
index 7dc68c9..0000000
--- a/res/drawable-mdpi/ic_menu_overflow_lt.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-hdpi/ic_menu_overflow_dk.png b/res/drawable-mdpi/ic_overflow_menu.png
similarity index 89%
copy from res/drawable-hdpi/ic_menu_overflow_dk.png
copy to res/drawable-mdpi/ic_overflow_menu.png
index e9b0523..0170057 100644
--- a/res/drawable-hdpi/ic_menu_overflow_dk.png
+++ b/res/drawable-mdpi/ic_overflow_menu.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_phone_dk.png b/res/drawable-mdpi/ic_phone_dk.png
deleted file mode 100644
index c55571a..0000000
--- a/res/drawable-mdpi/ic_phone_dk.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_remove_highlight.png b/res/drawable-mdpi/ic_remove_highlight.png
deleted file mode 100644
index 6a961cb..0000000
--- a/res/drawable-mdpi/ic_remove_highlight.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_results_add_contact.png b/res/drawable-mdpi/ic_results_add_contact.png
new file mode 100644
index 0000000..d4d4759
--- /dev/null
+++ b/res/drawable-mdpi/ic_results_add_contact.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_results_phone.png b/res/drawable-mdpi/ic_results_phone.png
new file mode 100644
index 0000000..74ccf14
--- /dev/null
+++ b/res/drawable-mdpi/ic_results_phone.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_star.png b/res/drawable-mdpi/ic_star.png
new file mode 100644
index 0000000..d2af0ba
--- /dev/null
+++ b/res/drawable-mdpi/ic_star.png
Binary files differ
diff --git a/res/drawable-mdpi/list_item_avatar_bg.png b/res/drawable-mdpi/list_item_avatar_bg.png
deleted file mode 100644
index 640eb3e..0000000
--- a/res/drawable-mdpi/list_item_avatar_bg.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/no_favorites_banner.png b/res/drawable-mdpi/no_favorites_banner.png
deleted file mode 100644
index ac080b9..0000000
--- a/res/drawable-mdpi/no_favorites_banner.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/ic_tile_for_recents_and_contact_tile.9.png b/res/drawable-mdpi/rounded_corner_bg.9.png
similarity index 100%
rename from res/drawable-mdpi/ic_tile_for_recents_and_contact_tile.9.png
rename to res/drawable-mdpi/rounded_corner_bg.9.png
Binary files differ
diff --git a/res/drawable-mdpi/search_bg.9.png b/res/drawable-mdpi/search_bg.9.png
deleted file mode 100644
index 879aeaa..0000000
--- a/res/drawable-mdpi/search_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-mdpi/search_shadow.9.png b/res/drawable-mdpi/search_shadow.9.png
new file mode 100644
index 0000000..0c33905
--- /dev/null
+++ b/res/drawable-mdpi/search_shadow.9.png
Binary files differ
diff --git a/res/drawable-mdpi/star_thumbnail.png b/res/drawable-mdpi/star_thumbnail.png
deleted file mode 100644
index 7b96272..0000000
--- a/res/drawable-mdpi/star_thumbnail.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/empty_call_log.png b/res/drawable-xhdpi/empty_call_log.png
new file mode 100644
index 0000000..14ec04b
--- /dev/null
+++ b/res/drawable-xhdpi/empty_call_log.png
Binary files differ
diff --git a/res/drawable-xhdpi/empty_contacts.png b/res/drawable-xhdpi/empty_contacts.png
new file mode 100644
index 0000000..65b1de3
--- /dev/null
+++ b/res/drawable-xhdpi/empty_contacts.png
Binary files differ
diff --git a/res/drawable-xhdpi/empty_speed_dial.png b/res/drawable-xhdpi/empty_speed_dial.png
new file mode 100644
index 0000000..a3a7675
--- /dev/null
+++ b/res/drawable-xhdpi/empty_speed_dial.png
Binary files differ
diff --git a/res/drawable-xhdpi/fab_ic_call.png b/res/drawable-xhdpi/fab_ic_call.png
new file mode 100644
index 0000000..6bd53f5
--- /dev/null
+++ b/res/drawable-xhdpi/fab_ic_call.png
Binary files differ
diff --git a/res/drawable-xhdpi/fab_ic_dial.png b/res/drawable-xhdpi/fab_ic_dial.png
new file mode 100644
index 0000000..398a03c
--- /dev/null
+++ b/res/drawable-xhdpi/fab_ic_dial.png
Binary files differ
diff --git a/res/drawable-xhdpi/fab_teal_background.png b/res/drawable-xhdpi/fab_teal_background.png
new file mode 100644
index 0000000..f94f759
--- /dev/null
+++ b/res/drawable-xhdpi/fab_teal_background.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_ab_search.png b/res/drawable-xhdpi/ic_ab_search.png
deleted file mode 100644
index 718ff49..0000000
--- a/res/drawable-xhdpi/ic_ab_search.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_add_person_dk.png b/res/drawable-xhdpi/ic_add_person_dk.png
deleted file mode 100644
index 5211f5c..0000000
--- a/res/drawable-xhdpi/ic_add_person_dk.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_back_arrow.png b/res/drawable-xhdpi/ic_back_arrow.png
deleted file mode 100644
index 9d46e3d..0000000
--- a/res/drawable-xhdpi/ic_back_arrow.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_call_arrow.png b/res/drawable-xhdpi/ic_call_arrow.png
new file mode 100644
index 0000000..6f13660
--- /dev/null
+++ b/res/drawable-xhdpi/ic_call_arrow.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_call_incoming_holo_dark.png b/res/drawable-xhdpi/ic_call_incoming_holo_dark.png
deleted file mode 100644
index 8eb5f3d..0000000
--- a/res/drawable-xhdpi/ic_call_incoming_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_call_missed_holo_dark.png b/res/drawable-xhdpi/ic_call_missed_holo_dark.png
deleted file mode 100644
index 6d09a4e..0000000
--- a/res/drawable-xhdpi/ic_call_missed_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_call_outgoing_holo_dark.png b/res/drawable-xhdpi/ic_call_outgoing_holo_dark.png
deleted file mode 100644
index 6360504..0000000
--- a/res/drawable-xhdpi/ic_call_outgoing_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_close_dk.png b/res/drawable-xhdpi/ic_close_dk.png
deleted file mode 100644
index 4f965fe..0000000
--- a/res/drawable-xhdpi/ic_close_dk.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_contacts_tiles.9.png b/res/drawable-xhdpi/ic_contacts_tiles.9.png
deleted file mode 100644
index 5a56587..0000000
--- a/res/drawable-xhdpi/ic_contacts_tiles.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_dial_action_call.png b/res/drawable-xhdpi/ic_dial_action_call.png
deleted file mode 100644
index 0bd9803..0000000
--- a/res/drawable-xhdpi/ic_dial_action_call.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_dial_action_delete.png b/res/drawable-xhdpi/ic_dial_action_delete.png
deleted file mode 100644
index 6788669..0000000
--- a/res/drawable-xhdpi/ic_dial_action_delete.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_dial_action_vm.png b/res/drawable-xhdpi/ic_dial_action_vm.png
deleted file mode 100644
index 2919bbd..0000000
--- a/res/drawable-xhdpi/ic_dial_action_vm.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_overflow_lt.png b/res/drawable-xhdpi/ic_menu_overflow_lt.png
deleted file mode 100644
index 95e436c..0000000
--- a/res/drawable-xhdpi/ic_menu_overflow_lt.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_overflow_dk.png b/res/drawable-xhdpi/ic_overflow_menu.png
similarity index 91%
rename from res/drawable-xhdpi/ic_menu_overflow_dk.png
rename to res/drawable-xhdpi/ic_overflow_menu.png
index ec50c22..7773841 100644
--- a/res/drawable-xhdpi/ic_menu_overflow_dk.png
+++ b/res/drawable-xhdpi/ic_overflow_menu.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_phone_dk.png b/res/drawable-xhdpi/ic_phone_dk.png
deleted file mode 100644
index 74a7032..0000000
--- a/res/drawable-xhdpi/ic_phone_dk.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_remove_highlight.png b/res/drawable-xhdpi/ic_remove_highlight.png
deleted file mode 100644
index 57949e3..0000000
--- a/res/drawable-xhdpi/ic_remove_highlight.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_results_add_contact.png b/res/drawable-xhdpi/ic_results_add_contact.png
new file mode 100644
index 0000000..6be67e8
--- /dev/null
+++ b/res/drawable-xhdpi/ic_results_add_contact.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_results_phone.png b/res/drawable-xhdpi/ic_results_phone.png
new file mode 100644
index 0000000..0e24fa4
--- /dev/null
+++ b/res/drawable-xhdpi/ic_results_phone.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_star.png b/res/drawable-xhdpi/ic_star.png
new file mode 100644
index 0000000..2071f42
--- /dev/null
+++ b/res/drawable-xhdpi/ic_star.png
Binary files differ
diff --git a/res/drawable-xhdpi/list_item_avatar_bg.png b/res/drawable-xhdpi/list_item_avatar_bg.png
deleted file mode 100644
index cac7fbd..0000000
--- a/res/drawable-xhdpi/list_item_avatar_bg.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/no_favorites_banner.png b/res/drawable-xhdpi/no_favorites_banner.png
deleted file mode 100644
index bae4e99..0000000
--- a/res/drawable-xhdpi/no_favorites_banner.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_tile_for_recents_and_contact_tile.9.png b/res/drawable-xhdpi/rounded_corner_bg.9.png
similarity index 100%
rename from res/drawable-xhdpi/ic_tile_for_recents_and_contact_tile.9.png
rename to res/drawable-xhdpi/rounded_corner_bg.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/search_bg.9.png b/res/drawable-xhdpi/search_bg.9.png
deleted file mode 100644
index 9d2d9ae..0000000
--- a/res/drawable-xhdpi/search_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/search_shadow.9.png b/res/drawable-xhdpi/search_shadow.9.png
new file mode 100644
index 0000000..5667ab3
--- /dev/null
+++ b/res/drawable-xhdpi/search_shadow.9.png
Binary files differ
diff --git a/res/drawable-xhdpi/star_thumbnail.png b/res/drawable-xhdpi/star_thumbnail.png
deleted file mode 100644
index a71262f..0000000
--- a/res/drawable-xhdpi/star_thumbnail.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/empty_call_log.png b/res/drawable-xxhdpi/empty_call_log.png
new file mode 100644
index 0000000..501d7f1
--- /dev/null
+++ b/res/drawable-xxhdpi/empty_call_log.png
Binary files differ
diff --git a/res/drawable-xxhdpi/empty_contacts.png b/res/drawable-xxhdpi/empty_contacts.png
new file mode 100644
index 0000000..407d78c
--- /dev/null
+++ b/res/drawable-xxhdpi/empty_contacts.png
Binary files differ
diff --git a/res/drawable-xxhdpi/empty_speed_dial.png b/res/drawable-xxhdpi/empty_speed_dial.png
new file mode 100644
index 0000000..fb2ea5f
--- /dev/null
+++ b/res/drawable-xxhdpi/empty_speed_dial.png
Binary files differ
diff --git a/res/drawable-xxhdpi/fab_ic_call.png b/res/drawable-xxhdpi/fab_ic_call.png
new file mode 100644
index 0000000..6866fa4
--- /dev/null
+++ b/res/drawable-xxhdpi/fab_ic_call.png
Binary files differ
diff --git a/res/drawable-xxhdpi/fab_ic_dial.png b/res/drawable-xxhdpi/fab_ic_dial.png
new file mode 100644
index 0000000..5f1cd45
--- /dev/null
+++ b/res/drawable-xxhdpi/fab_ic_dial.png
Binary files differ
diff --git a/res/drawable-xxhdpi/fab_teal_background.png b/res/drawable-xxhdpi/fab_teal_background.png
new file mode 100644
index 0000000..cc0ba27
--- /dev/null
+++ b/res/drawable-xxhdpi/fab_teal_background.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_ab_search.png b/res/drawable-xxhdpi/ic_ab_search.png
deleted file mode 100644
index 4bb5165..0000000
--- a/res/drawable-xxhdpi/ic_ab_search.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_add_person_dk.png b/res/drawable-xxhdpi/ic_add_person_dk.png
deleted file mode 100644
index 54ca1f0..0000000
--- a/res/drawable-xxhdpi/ic_add_person_dk.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_back_arrow.png b/res/drawable-xxhdpi/ic_back_arrow.png
deleted file mode 100644
index 66b6e35..0000000
--- a/res/drawable-xxhdpi/ic_back_arrow.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_call_arrow.png b/res/drawable-xxhdpi/ic_call_arrow.png
new file mode 100644
index 0000000..0364ee0
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_call_arrow.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_call_incoming_holo_dark.png b/res/drawable-xxhdpi/ic_call_incoming_holo_dark.png
deleted file mode 100644
index 1276917..0000000
--- a/res/drawable-xxhdpi/ic_call_incoming_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_call_missed_holo_dark.png b/res/drawable-xxhdpi/ic_call_missed_holo_dark.png
deleted file mode 100644
index 8919fd3..0000000
--- a/res/drawable-xxhdpi/ic_call_missed_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_call_outgoing_holo_dark.png b/res/drawable-xxhdpi/ic_call_outgoing_holo_dark.png
deleted file mode 100644
index 192bbf6..0000000
--- a/res/drawable-xxhdpi/ic_call_outgoing_holo_dark.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_close_dk.png b/res/drawable-xxhdpi/ic_close_dk.png
deleted file mode 100644
index 2472da8..0000000
--- a/res/drawable-xxhdpi/ic_close_dk.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_contacts_tiles.9.png b/res/drawable-xxhdpi/ic_contacts_tiles.9.png
deleted file mode 100644
index 4e6872d..0000000
--- a/res/drawable-xxhdpi/ic_contacts_tiles.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_dial_action_call.png b/res/drawable-xxhdpi/ic_dial_action_call.png
deleted file mode 100644
index 12a5c07..0000000
--- a/res/drawable-xxhdpi/ic_dial_action_call.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_dial_action_delete.png b/res/drawable-xxhdpi/ic_dial_action_delete.png
deleted file mode 100644
index ca91a72..0000000
--- a/res/drawable-xxhdpi/ic_dial_action_delete.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_dial_action_vm.png b/res/drawable-xxhdpi/ic_dial_action_vm.png
deleted file mode 100644
index acac8d8..0000000
--- a/res/drawable-xxhdpi/ic_dial_action_vm.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_overflow_dk.png b/res/drawable-xxhdpi/ic_menu_overflow_dk.png
deleted file mode 100644
index 004f26b..0000000
--- a/res/drawable-xxhdpi/ic_menu_overflow_dk.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_menu_overflow_lt.png b/res/drawable-xxhdpi/ic_menu_overflow_lt.png
deleted file mode 100644
index b9f0c3d..0000000
--- a/res/drawable-xxhdpi/ic_menu_overflow_lt.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xhdpi/ic_menu_overflow_dk.png b/res/drawable-xxhdpi/ic_overflow_menu.png
similarity index 91%
copy from res/drawable-xhdpi/ic_menu_overflow_dk.png
copy to res/drawable-xxhdpi/ic_overflow_menu.png
index ec50c22..7773841 100644
--- a/res/drawable-xhdpi/ic_menu_overflow_dk.png
+++ b/res/drawable-xxhdpi/ic_overflow_menu.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_phone_dk.png b/res/drawable-xxhdpi/ic_phone_dk.png
deleted file mode 100644
index de9387d..0000000
--- a/res/drawable-xxhdpi/ic_phone_dk.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_remove_highlight.png b/res/drawable-xxhdpi/ic_remove_highlight.png
deleted file mode 100644
index 23ee8f6..0000000
--- a/res/drawable-xxhdpi/ic_remove_highlight.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_results_add_contact.png b/res/drawable-xxhdpi/ic_results_add_contact.png
new file mode 100644
index 0000000..3ba9093
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_results_add_contact.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_results_phone.png b/res/drawable-xxhdpi/ic_results_phone.png
new file mode 100644
index 0000000..9594619
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_results_phone.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_star.png b/res/drawable-xxhdpi/ic_star.png
new file mode 100644
index 0000000..f3c8304
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_star.png
Binary files differ
diff --git a/res/drawable-xxhdpi/list_item_avatar_bg.png b/res/drawable-xxhdpi/list_item_avatar_bg.png
deleted file mode 100644
index fcfe2da..0000000
--- a/res/drawable-xxhdpi/list_item_avatar_bg.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/no_favorites_banner.png b/res/drawable-xxhdpi/no_favorites_banner.png
deleted file mode 100644
index 0e2a4fa..0000000
--- a/res/drawable-xxhdpi/no_favorites_banner.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_tile_for_recents_and_contact_tile.9.png b/res/drawable-xxhdpi/rounded_corner_bg.9.png
similarity index 100%
rename from res/drawable-xxhdpi/ic_tile_for_recents_and_contact_tile.9.png
rename to res/drawable-xxhdpi/rounded_corner_bg.9.png
Binary files differ
diff --git a/res/drawable-xxhdpi/search_bg.9.png b/res/drawable-xxhdpi/search_bg.9.png
deleted file mode 100644
index 2f4f4b6..0000000
--- a/res/drawable-xxhdpi/search_bg.9.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable-xxhdpi/search_shadow.9.png b/res/drawable-xxhdpi/search_shadow.9.png
new file mode 100644
index 0000000..ff55620
--- /dev/null
+++ b/res/drawable-xxhdpi/search_shadow.9.png
Binary files differ
diff --git a/res/drawable-xxhdpi/star_thumbnail.png b/res/drawable-xxhdpi/star_thumbnail.png
deleted file mode 100644
index 5f13fec..0000000
--- a/res/drawable-xxhdpi/star_thumbnail.png
+++ /dev/null
Binary files differ
diff --git a/res/drawable/action_bar_tab.xml b/res/drawable/action_bar_tab.xml
deleted file mode 100644
index 3f31dba..0000000
--- a/res/drawable/action_bar_tab.xml
+++ /dev/null
@@ -1,25 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:drawable="@drawable/tab_selected_pressed" android:state_pressed="true" android:state_selected="true"/>
- <item android:drawable="@drawable/tab_selected_focused" android:state_focused="true" android:state_selected="true"/>
- <item android:drawable="@drawable/tab_selected" android:state_selected="true"/>
- <item android:drawable="@drawable/tab_unselected_pressed" android:state_pressed="true"/>
- <item android:drawable="@drawable/tab_unselected_focused" android:state_focused="true"/>
- <item android:drawable="@drawable/tab_unselected" android:state_selected="false"/>
-</selector>
\ No newline at end of file
diff --git a/res/drawable/action_button_background.xml b/res/drawable/action_button_background.xml
new file mode 100644
index 0000000..ea7434f
--- /dev/null
+++ b/res/drawable/action_button_background.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2014 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.
+-->
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="?android:attr/colorControlHighlight">
+ <!-- Transparent background constrains the touch feedback ripple to the button, but also allows
+ touch feedback ripples in the parent to show under the button. -->
+ <item>
+ <shape android:shape="rectangle" >
+ <solid android:color="@android:color/transparent" />
+ </shape>
+ </item>
+</ripple>
diff --git a/res/drawable/btn_call.xml b/res/drawable/btn_call.xml
deleted file mode 100644
index ae2f6c0..0000000
--- a/res/drawable/btn_call.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!-- Background resource for call button in the various dialpads.
- Almost a copy from framework's item_background_holo_dark.xml, but has different pressed effect
- -->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
-
- <item android:state_window_focused="false" android:drawable="@android:color/transparent" />
-
- <!-- Even though these two point to the same resource, have two states so the drawable will invalidate itself when coming out of pressed state. -->
- <item android:state_focused="true" android:state_enabled="false" android:state_pressed="true" android:drawable="@drawable/list_selector_disabled_holo_dark" />
- <item android:state_focused="true" android:state_enabled="false" android:drawable="@drawable/list_selector_disabled_holo_dark" />
- <item android:state_focused="true" android:drawable="@drawable/list_focused_holo" />
- <item android:drawable="@android:color/transparent" />
-</selector>
diff --git a/res/drawable/call_history_actionbar_background.xml b/res/drawable/call_history_actionbar_background.xml
deleted file mode 100644
index eabceac..0000000
--- a/res/drawable/call_history_actionbar_background.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 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.
--->
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
- <item>
- <shape android:shape="rectangle">
- <solid android:color="@color/actionbar_underline" />
- </shape>
- </item>
- <item android:bottom="2dp">
- <shape android:shape="rectangle">
- <solid android:color="@color/actionbar_background_color" />
- </shape>
- </item>
-</layer-list>
\ No newline at end of file
diff --git a/res/drawable/dialpad_key_colors.xml b/res/drawable/call_log_background.xml
similarity index 66%
copy from res/drawable/dialpad_key_colors.xml
copy to res/drawable/call_log_background.xml
index 27b4d4f..1b3dbc9 100644
--- a/res/drawable/dialpad_key_colors.xml
+++ b/res/drawable/call_log_background.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
+<!--
+ Copyright (C) 2014 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.
@@ -13,10 +14,5 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:state_pressed="true"
- android:drawable="@color/background_dialpad_pressed" />
- <item android:drawable="@color/background_dialpad" />
-</selector>
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="?android:attr/colorControlHighlight" />
\ No newline at end of file
diff --git a/res/drawable/dialpad_key_colors.xml b/res/drawable/floating_action_button.xml
similarity index 66%
copy from res/drawable/dialpad_key_colors.xml
copy to res/drawable/floating_action_button.xml
index 27b4d4f..d518ddd 100644
--- a/res/drawable/dialpad_key_colors.xml
+++ b/res/drawable/floating_action_button.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
+<!--
+ Copyright (C) 2014 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.
@@ -14,9 +15,7 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:state_pressed="true"
- android:drawable="@color/background_dialpad_pressed" />
- <item android:drawable="@color/background_dialpad" />
-</selector>
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="@color/dialer_accent_color">
+ <item android:drawable="@drawable/fab_teal_background" />
+</ripple>
diff --git a/res/drawable/dialpad_key_colors.xml b/res/drawable/ic_calllog_delete.xml
similarity index 72%
rename from res/drawable/dialpad_key_colors.xml
rename to res/drawable/ic_calllog_delete.xml
index 27b4d4f..e81da9a 100644
--- a/res/drawable/dialpad_key_colors.xml
+++ b/res/drawable/ic_calllog_delete.xml
@@ -14,9 +14,7 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:state_pressed="true"
- android:drawable="@color/background_dialpad_pressed" />
- <item android:drawable="@color/background_dialpad" />
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_menu_delete_dk"
+ android:gravity="center"
+ android:tint="@color/actionbar_icon_color" />
diff --git a/res/drawable/dialpad_key_colors.xml b/res/drawable/ic_search_add_contact.xml
similarity index 66%
copy from res/drawable/dialpad_key_colors.xml
copy to res/drawable/ic_search_add_contact.xml
index 27b4d4f..2ec75b7 100644
--- a/res/drawable/dialpad_key_colors.xml
+++ b/res/drawable/ic_search_add_contact.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
+<!--
+ Copyright (C) 2014 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.
@@ -14,9 +15,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:state_pressed="true"
- android:drawable="@color/background_dialpad_pressed" />
- <item android:drawable="@color/background_dialpad" />
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_results_add_contact"
+ android:tint="@color/search_shortcut_icon_color" />
diff --git a/res/drawable/dialpad_key_colors.xml b/res/drawable/ic_search_phone.xml
similarity index 66%
copy from res/drawable/dialpad_key_colors.xml
copy to res/drawable/ic_search_phone.xml
index 27b4d4f..ac90532 100644
--- a/res/drawable/dialpad_key_colors.xml
+++ b/res/drawable/ic_search_phone.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
+<!--
+ Copyright (C) 2014 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.
@@ -14,9 +15,6 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:state_pressed="true"
- android:drawable="@color/background_dialpad_pressed" />
- <item android:drawable="@color/background_dialpad" />
-</selector>
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_results_phone"
+ android:tint="@color/search_shortcut_icon_color" />
diff --git a/res/drawable/overflow_menu.xml b/res/drawable/overflow_menu.xml
new file mode 100644
index 0000000..0467d6b
--- /dev/null
+++ b/res/drawable/overflow_menu.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2014 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
+ -->
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/ic_overflow_menu"
+ android:autoMirrored="true"
+ android:tint="@color/actionbar_icon_color" />
diff --git a/res/drawable/background_favorites_menu.xml b/res/drawable/recent_lists_footer_background.xml
similarity index 60%
copy from res/drawable/background_favorites_menu.xml
copy to res/drawable/recent_lists_footer_background.xml
index 60933fd..b5029af 100644
--- a/res/drawable/background_favorites_menu.xml
+++ b/res/drawable/recent_lists_footer_background.xml
@@ -1,4 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
+
<!--
~ Copyright (C) 2014 The Android Open Source Project
~
@@ -14,16 +15,10 @@
~ See the License for the specific language governing permissions and
~ limitations under the License
-->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_pressed="false">
- <shape android:shape="rectangle" >
- <solid android:color="@color/favorites_menu_background_color" />
- </shape>
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="?android:attr/colorControlHighlight">
+ <!-- Mask to constrain the ripple to the bounds of the view. -->
+ <item android:id="@android:id/mask">
+ <color android:color="@android:color/white" />
</item>
- <item android:state_pressed="true">
- <shape android:shape="rectangle" >
- <solid android:color="@color/favorites_menu_pressed_color" />
- </shape>
- </item>
-</selector>
\ No newline at end of file
+</ripple>
diff --git a/res/drawable/rounded_corner.xml b/res/drawable/rounded_corner.xml
new file mode 100644
index 0000000..fb8f4f5
--- /dev/null
+++ b/res/drawable/rounded_corner.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+ ~ Copyright (C) 2014 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
+ -->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle" >
+ <solid android:color="@color/searchbox_background_color" />
+ <corners android:radius="2dp" />
+</shape>
diff --git a/res/drawable/dialpad_key_colors.xml b/res/drawable/search_shortcut_background.xml
similarity index 63%
copy from res/drawable/dialpad_key_colors.xml
copy to res/drawable/search_shortcut_background.xml
index 27b4d4f..52b5e3f 100644
--- a/res/drawable/dialpad_key_colors.xml
+++ b/res/drawable/search_shortcut_background.xml
@@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
+<!--
+ Copyright (C) 2014 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.
@@ -13,10 +14,10 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:state_pressed="true"
- android:drawable="@color/background_dialpad_pressed" />
- <item android:drawable="@color/background_dialpad" />
-</selector>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval" >
+ <size
+ android:height="@dimen/search_shortcut_radius"
+ android:width="@dimen/search_shortcut_radius" />
+ <solid android:color="@color/search_shortcut_background_color" />
+</shape>
\ No newline at end of file
diff --git a/res/drawable/dialpad_key_colors.xml b/res/drawable/shadow_fade_left.xml
similarity index 72%
copy from res/drawable/dialpad_key_colors.xml
copy to res/drawable/shadow_fade_left.xml
index 27b4d4f..cb87cf5 100644
--- a/res/drawable/dialpad_key_colors.xml
+++ b/res/drawable/shadow_fade_left.xml
@@ -14,9 +14,11 @@
limitations under the License.
-->
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:state_pressed="true"
- android:drawable="@color/background_dialpad_pressed" />
- <item android:drawable="@color/background_dialpad" />
-</selector>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="rectangle" >
+ <gradient
+ android:type="linear"
+ android:startColor="@null"
+ android:endColor="#1a000000"
+ android:angle="0"/>
+</shape>
diff --git a/res/drawable/shadow_fade_up.xml b/res/drawable/shadow_fade_up.xml
index e2d9934..e961c86 100644
--- a/res/drawable/shadow_fade_up.xml
+++ b/res/drawable/shadow_fade_up.xml
@@ -18,7 +18,7 @@
android:shape="rectangle" >
<gradient
android:type="linear"
- android:startColor="#66999999"
- android:endColor="#00ffffff"
+ android:startColor="#1a000000"
+ android:endColor="@null"
android:angle="90"/>
</shape>
\ No newline at end of file
diff --git a/res/drawable/tab_selected.xml b/res/drawable/tab_selected.xml
deleted file mode 100644
index 821f047..0000000
--- a/res/drawable/tab_selected.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2013 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.
--->
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
- <!-- Tab underline -->
- <item>
- <shape android:shape="rectangle">
- <solid android:color="@color/tab_underline_selected_color"/>
- </shape>
- </item>
- <!-- Tab selection indicator -->
- <item android:bottom="@dimen/tab_underline_height">
- <shape android:shape="rectangle" >
- <solid android:color="@color/tab_selected_color" />
- </shape>
- </item>
- <!-- Tab background -->
- <item android:bottom="@dimen/tab_selection_height">
- <shape android:shape="rectangle" >
- <gradient
- android:startColor="@color/tab_background_gradient_start_color"
- android:endColor="@color/tab_background_gradient_end_color"
- android:angle="270" />
- </shape>
- </item>
-</layer-list>
\ No newline at end of file
diff --git a/res/drawable/tab_selected_focused.xml b/res/drawable/tab_selected_focused.xml
deleted file mode 100644
index 7c0d35f..0000000
--- a/res/drawable/tab_selected_focused.xml
+++ /dev/null
@@ -1,46 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2013 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.
--->
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
- <!-- Tab underline -->
- <item>
- <shape android:shape="rectangle">
- <solid android:color="@color/tab_underline_selected_color"/>
- </shape>
- </item>
- <!-- Tab selection indicator -->
- <item android:bottom="@dimen/tab_underline_height">
- <shape android:shape="rectangle" >
- <solid android:color="@color/tab_selected_color" />
- </shape>
- </item>
- <!-- Tab background -->
- <item android:bottom="@dimen/tab_selection_height">
- <shape android:shape="rectangle" >
- <gradient
- android:startColor="@color/tab_background_gradient_start_color"
- android:endColor="@color/tab_background_gradient_end_color"
- android:angle="270" />
- </shape>
- </item>
- <item>
- <shape android:shape="rectangle" >
- <stroke
- android:width="4dp"
- android:color="#44ff0000" />
- </shape>
- </item>
-</layer-list>
\ No newline at end of file
diff --git a/res/drawable/tab_selected_pressed.xml b/res/drawable/tab_selected_pressed.xml
deleted file mode 100644
index 32efb69..0000000
--- a/res/drawable/tab_selected_pressed.xml
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2013 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.
--->
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
- <!-- Tab underline -->
- <item>
- <shape android:shape="rectangle">
- <solid android:color="@color/tab_underline_selected_color"/>
- </shape>
- </item>
- <!-- Tab selection indicator -->
- <item android:bottom="@dimen/tab_underline_height">
- <shape android:shape="rectangle" >
- <solid android:color="@color/tab_selected_color" />
- </shape>
- </item>
- <!-- Tab background (in pressed state) -->
- <item android:bottom="@dimen/tab_selection_height">
- <shape android:shape="rectangle" >
- <gradient
- android:startColor="@color/tab_background_gradient_start_pressed_color"
- android:endColor="@color/tab_background_gradient_end_pressed_color"
- android:angle="270" />
- </shape>
- </item>
-</layer-list>
\ No newline at end of file
diff --git a/res/drawable/tab_unselected.xml b/res/drawable/tab_unselected.xml
deleted file mode 100644
index 3eee487..0000000
--- a/res/drawable/tab_unselected.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- ~ Copyright (C) 2014 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
- -->
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
- <!-- Tab underline -->
- <item>
- <shape android:shape="rectangle">
- <solid android:color="@color/tab_underline_color"/>
- </shape>
- </item>
- <!-- Tab background -->
- <item android:bottom="@dimen/tab_underline_height">
- <shape android:shape="rectangle" >
- <gradient
- android:startColor="@color/tab_background_gradient_start_color"
- android:endColor="@color/tab_background_gradient_end_color"
- android:angle="270" />
- </shape>
- </item>
-</layer-list>
\ No newline at end of file
diff --git a/res/drawable/tab_unselected_focused.xml b/res/drawable/tab_unselected_focused.xml
deleted file mode 100644
index c854739..0000000
--- a/res/drawable/tab_unselected_focused.xml
+++ /dev/null
@@ -1,40 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2013 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.
--->
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
- <!-- Tab underline -->
- <item>
- <shape android:shape="rectangle">
- <solid android:color="@color/tab_underline_color"/>
- </shape>
- </item>
- <!-- Tab background -->
- <item android:bottom="@dimen/tab_underline_height">
- <shape android:shape="rectangle" >
- <gradient
- android:startColor="@color/tab_background_gradient_start_color"
- android:endColor="@color/tab_background_gradient_end_color"
- android:angle="270" />
- </shape>
- </item>
- <item>
- <shape android:shape="rectangle" >
- <stroke
- android:width="4dp"
- android:color="#44ff0000" />
- </shape>
- </item>
-</layer-list>
\ No newline at end of file
diff --git a/res/drawable/tab_unselected_pressed.xml b/res/drawable/tab_unselected_pressed.xml
deleted file mode 100644
index 5d2af32..0000000
--- a/res/drawable/tab_unselected_pressed.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- Copyright (C) 2013 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.
--->
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
- <!-- Tab underline -->
- <item>
- <shape android:shape="rectangle">
- <solid android:color="@color/tab_underline_color"/>
- </shape>
- </item>
- <!-- Tab background (in pressed state) -->
- <item android:bottom="@dimen/tab_underline_height">
- <shape android:shape="rectangle" >
- <gradient
- android:startColor="@color/tab_background_gradient_start_pressed_color"
- android:endColor="@color/tab_background_gradient_end_pressed_color"
- android:angle="270" />
- </shape>
- </item>
-</layer-list>
\ No newline at end of file
diff --git a/res/drawable/background_favorites_menu.xml b/res/drawable/view_pager_tab_background.xml
similarity index 60%
copy from res/drawable/background_favorites_menu.xml
copy to res/drawable/view_pager_tab_background.xml
index 60933fd..1ba6c57 100644
--- a/res/drawable/background_favorites_menu.xml
+++ b/res/drawable/view_pager_tab_background.xml
@@ -14,16 +14,9 @@
~ See the License for the specific language governing permissions and
~ limitations under the License
-->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_pressed="false">
- <shape android:shape="rectangle" >
- <solid android:color="@color/favorites_menu_background_color" />
- </shape>
+<ripple xmlns:android="http://schemas.android.com/apk/res/android"
+ android:color="@color/tab_ripple_color">
+ <item android:id="@android:id/mask">
+ <color android:color="@android:color/white" />
</item>
- <item android:state_pressed="true">
- <shape android:shape="rectangle" >
- <solid android:color="@color/favorites_menu_pressed_color" />
- </shape>
- </item>
-</selector>
\ No newline at end of file
+</ripple>
\ No newline at end of file
diff --git a/res/layout-land/dialpad_fragment.xml b/res/layout-land/dialpad_fragment.xml
new file mode 100644
index 0000000..aac0daf
--- /dev/null
+++ b/res/layout-land/dialpad_fragment.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2011 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+<view class="com.android.dialer.dialpad.DialpadFragment$DialpadSlidingLinearLayout"
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ >
+ <!-- spacer view -->
+ <View
+ android:id="@+id/spacer"
+ android:layout_width="0dp"
+ android:layout_height="match_parent"
+ android:layout_weight="1"
+ android:background="#00000000" />
+ <!-- Dialpad shadow -->
+ <View
+ android:layout_width="@dimen/shadow_length"
+ android:layout_height="match_parent"
+ android:background="@drawable/shadow_fade_left" />
+ <include layout="@layout/dialpad_view"
+ android:layout_height="match_parent"
+ android:layout_width="0dp"
+ android:layout_weight="1" />
+ <!-- "Dialpad chooser" UI, shown only when the user brings up the
+ Dialer while a call is already in progress.
+ When this UI is visible, the other Dialer elements
+ (the textfield/button and the dialpad) are hidden. -->
+ <ListView android:id="@+id/dialpadChooser"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="@color/background_dialer_light"
+ android:visibility="gone" />
+</view>
diff --git a/res/layout/all_contacts_activity.xml b/res/layout/all_contacts_activity.xml
index a913027..50cba1e 100644
--- a/res/layout/all_contacts_activity.xml
+++ b/res/layout/all_contacts_activity.xml
@@ -17,7 +17,6 @@
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_marginTop="?android:attr/actionBarSize"
android:id="@+id/all_contacts_frame">
<fragment android:name="com.android.dialer.list.AllContactsFragment"
android:id="@+id/all_contacts_fragment"
diff --git a/res/layout/call_detail.xml b/res/layout/call_detail.xml
index 53f6b8d..9ca30a8 100644
--- a/res/layout/call_detail.xml
+++ b/res/layout/call_detail.xml
@@ -13,35 +13,68 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:ex="http://schemas.android.com/apk/res-auto"
- android:id="@+id/call_detail"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:visibility="gone"
->
- <!--
- The list view is under everything.
- It contains a first header element which is hidden under the controls UI.
- When scrolling, the controls move up until the name bar hits the top.
- -->
- <ListView
- android:id="@+id/history"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentStart="true"
- android:layout_alignParentTop="true"
- />
+ android:layout_height="match_parent">
- <!-- All the controls which are part of the pinned header are in this layout. -->
- <RelativeLayout
- android:id="@+id/controls"
+ <LinearLayout
+ android:id="@+id/call_detail"
android:layout_width="match_parent"
android:layout_height="match_parent"
+ android:orientation="vertical"
+ android:background="@color/background_dialer_list_items"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
>
+ <!-- Caller information "card" -->
+ <LinearLayout
+ android:id="@+id/caller_information"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingStart="@dimen/call_detail_horizontal_margin"
+ android:paddingTop="@dimen/call_detail_top_margin"
+ android:paddingBottom="@dimen/call_detail_bottom_margin"
+ android:baselineAligned="false"
+ android:orientation="horizontal"
+ android:gravity="center_vertical"
+ android:translationZ="@dimen/call_detail_translation_z"
+ android:focusable="true"
+ android:background="@color/background_dialer_white">
+
+ <QuickContactBadge
+ android:id="@+id/quick_contact_photo"
+ android:layout_width="@dimen/contact_photo_size"
+ android:layout_height="@dimen/contact_photo_size"
+ android:layout_alignParentStart="true"
+ android:focusable="true"
+ />
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:gravity="center_vertical"
+ android:layout_marginStart="@dimen/call_detail_horizontal_margin"
+ >
+ <TextView
+ android:id="@+id/caller_name"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textColor="?attr/call_log_primary_text_color"
+ android:textSize="@dimen/call_log_primary_text_size"
+ android:singleLine="true"
+ />
+ <TextView
+ android:id="@+id/caller_number"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textColor="?attr/call_log_secondary_text_color"
+ android:textSize="@dimen/call_log_secondary_text_size"
+ android:singleLine="true"
+ />
+ </LinearLayout>
+ </LinearLayout>
+
<FrameLayout
android:id="@+id/voicemail_status"
android:layout_width="match_parent"
@@ -49,157 +82,33 @@
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:visibility="gone"
- >
+ >
<include layout="@layout/call_log_voicemail_status"/>
</FrameLayout>
-
- <view
- class="com.android.contacts.common.widget.ProportionalLayout"
- android:id="@+id/contact_background_sizer"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentStart="true"
- android:layout_below="@id/voicemail_status"
- ex:ratio="0.5"
- ex:direction="widthToHeight"
- >
- <ImageView
- android:id="@+id/contact_background"
- android:layout_width="match_parent"
- android:layout_height="0dip"
- android:adjustViewBounds="true"
- android:scaleType="centerCrop"
- />
- </view>
-
- <LinearLayout
- android:id="@+id/separator"
- android:layout_width="match_parent"
- android:layout_height="1dip"
- android:background="@color/background_dialer_light"
- android:layout_below="@+id/contact_background_sizer"
- />
- <View
- android:id="@+id/photo_text_bar"
- android:layout_width="match_parent"
- android:layout_height="42dip"
- android:background="#7F000000"
- android:layout_alignParentStart="true"
- android:layout_alignBottom="@id/contact_background_sizer"
- />
- <ImageView
- android:id="@+id/main_action"
- android:layout_width="wrap_content"
- android:layout_height="0dip"
- android:scaleType="center"
- android:layout_alignEnd="@id/photo_text_bar"
- android:layout_alignBottom="@id/photo_text_bar"
- android:layout_alignTop="@id/photo_text_bar"
- 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_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_marginEnd="@dimen/call_log_inner_margin"
- android:layout_marginStart="@dimen/call_detail_contact_name_margin"
- android:gravity="center_vertical"
- android:textColor="?attr/call_log_header_color"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:singleLine="true"
- />
- <ImageButton
- android:id="@+id/main_action_push_layer"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_alignStart="@id/contact_background_sizer"
- android:layout_alignTop="@id/contact_background_sizer"
- android:layout_alignEnd="@id/contact_background_sizer"
- android:layout_alignBottom="@id/contact_background_sizer"
- android:background="?android:attr/selectableItemBackground"
- />
<LinearLayout
android:id="@+id/voicemail_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_below="@id/separator"
- android:paddingBottom="@dimen/call_detail_button_spacing">
+ android:orientation="horizontal"
+ android:paddingBottom="@dimen/call_detail_button_spacing"
+ android:visibility="gone"
+ >
<!-- The voicemail fragment will be put here. -->
</LinearLayout>
- <FrameLayout
- android:id="@+id/call_and_sms"
+
+ <!--
+ The list view is under everything.
+ It contains a first header element which is hidden under the controls UI.
+ When scrolling, the controls move up until the name bar hits the top.
+ -->
+ <ListView
+ android:id="@+id/history"
android:layout_width="match_parent"
- android:layout_height="@dimen/call_log_list_item_height"
- android:layout_marginBottom="@dimen/call_detail_button_spacing"
- android:layout_below="@id/voicemail_container"
- android:gravity="center_vertical"
- android:background="@color/background_dialer_list_items"
- >
+ android:layout_height="fill_parent"
+ />
- <LinearLayout
- android:id="@+id/call_and_sms_main_action"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="horizontal"
- android:focusable="true"
- android:background="?android:attr/selectableItemBackground"
- >
- <LinearLayout
- android:layout_width="0dip"
- android:layout_height="match_parent"
- android:layout_weight="1"
- android:paddingStart="@dimen/call_log_indent_margin"
- android:orientation="vertical"
- android:gravity="center_vertical"
- >
-
- <TextView android:id="@+id/call_and_sms_text"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:paddingEnd="@dimen/call_log_icon_margin"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:textColor="?attr/call_log_primary_text_color"
- android:singleLine="true"
- android:ellipsize="end"
- />
-
- <TextView android:id="@+id/call_and_sms_label"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:paddingEnd="@dimen/call_log_icon_margin"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="?attr/call_log_primary_text_color"
- android:textAllCaps="true"
- android:singleLine="true"
- android:ellipsize="end"
- />
- </LinearLayout>
-
- <View android:id="@+id/call_and_sms_divider"
- android:layout_width="1px"
- android:layout_height="32dip"
- android:background="@color/background_dialer_light"
- android:layout_gravity="center_vertical"
- />
-
- <ImageView android:id="@+id/call_and_sms_icon"
- android:layout_width="@color/call_log_voicemail_highlight_color"
- android:layout_height="match_parent"
- android:paddingStart="@dimen/call_log_inner_margin"
- android:paddingEnd="@dimen/call_log_outer_margin"
- android:gravity="center"
- android:scaleType="centerInside"
- android:focusable="true"
- android:background="?android:attr/selectableItemBackground"
- />
- </LinearLayout>
- </FrameLayout>
- </RelativeLayout>
+ </LinearLayout>
<!--
Used to hide the UI when playing a voicemail and the proximity sensor
is detecting something near the screen.
@@ -208,10 +117,10 @@
android:id="@+id/blank"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_alignParentStart="true"
- android:layout_alignParentTop="true"
android:background="@android:color/black"
android:visibility="gone"
android:clickable="true"
- />
+ android:layout_alignParentStart="true"
+ android:layout_alignParentTop="true"
+ />
</RelativeLayout>
diff --git a/res/layout/call_detail_history_header.xml b/res/layout/call_detail_history_header.xml
index 40f943b..b4b63fb 100644
--- a/res/layout/call_detail_history_header.xml
+++ b/res/layout/call_detail_history_header.xml
@@ -14,48 +14,16 @@
limitations under the License.
-->
-<!-- This layout is supposed to match the content of the controls in call_detail.xml -->
-<LinearLayout
+<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:ex="http://schemas.android.com/apk/res-auto"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="wrap_content">
-
- <!-- Contact photo. -->
- <view
- class="com.android.contacts.common.widget.ProportionalLayout"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentStart="true"
- android:layout_below="@id/voicemail_status"
- ex:ratio="0.5"
- ex:direction="widthToHeight"
- >
- <!-- Proportional layout requires a view in it. -->
- <View
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- />
- </view>
- <!-- Separator line -->
- <View
- android:layout_width="match_parent"
- android:layout_height="1dip"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingTop="@dimen/call_detail_header_top_margin"
+ android:paddingStart="@dimen/call_detail_horizontal_margin"
+ android:textColor="?attr/call_log_secondary_text_color"
+ android:textSize="@dimen/call_log_secondary_text_size"
+ android:fontFamily="sans-serif-medium"
+ android:singleLine="true"
+ android:text="@string/call_detail_list_header"
/>
- <!-- Voicemail controls -->
- <!-- TODO: Make the height be based on a constant. -->
- <View
- android:id="@+id/header_voicemail_container"
- android:layout_width="match_parent"
- android:layout_height="140dip"
- android:layout_marginBottom="@dimen/call_detail_button_spacing"
- />
- <!-- Call and SMS -->
- <View
- android:id="@+id/header_call_and_sms_container"
- android:layout_width="match_parent"
- android:layout_height="@dimen/call_log_list_item_height"
- />
-
-</LinearLayout>
diff --git a/res/layout/call_detail_history_item.xml b/res/layout/call_detail_history_item.xml
index 5b3fff7..cc06d21 100644
--- a/res/layout/call_detail_history_item.xml
+++ b/res/layout/call_detail_history_item.xml
@@ -18,10 +18,9 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:minHeight="@dimen/call_log_list_item_height"
android:paddingTop="@dimen/call_log_inner_margin"
android:paddingBottom="@dimen/call_log_inner_margin"
- android:paddingStart="@dimen/call_log_indent_margin"
+ android:paddingStart="@dimen/call_detail_horizontal_margin"
android:paddingEnd="@dimen/call_log_outer_margin"
android:orientation="vertical"
android:background="@color/background_dialer_list_items"
@@ -43,22 +42,22 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/call_log_icon_margin"
- android:textAppearance="?android:attr/textAppearanceSmall"
- android:textColor="?attr/call_log_secondary_text_color"
+ android:textColor="?attr/call_log_primary_text_color"
+ android:textSize="@dimen/call_log_primary_text_size"
/>
</LinearLayout>
<TextView
android:id="@+id/date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?attr/call_log_secondary_text_color"
+ android:textSize="@dimen/call_log_secondary_text_size"
/>
<TextView
android:id="@+id/duration"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?attr/call_log_secondary_text_color"
+ android:textSize="@dimen/call_log_secondary_text_size"
/>
</LinearLayout>
diff --git a/res/layout/call_log_activity.xml b/res/layout/call_log_activity.xml
index f9806e8..3b7609f 100644
--- a/res/layout/call_log_activity.xml
+++ b/res/layout/call_log_activity.xml
@@ -14,14 +14,23 @@
limitations under the License.
-->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_marginTop="?android:attr/actionBarSize"
- android:id="@+id/calllog_frame">
+ android:id="@+id/calllog_frame"
+ android:orientation="vertical">
+ <com.android.dialer.list.ViewPagerTabs
+ android:id="@+id/viewpager_header"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/tab_height"
+ android:textAllCaps="true"
+ android:orientation="horizontal"
+ android:layout_gravity="top"
+ android:elevation="@dimen/tab_elevation"
+ style="@style/DialtactsActionBarTabTextStyle" />
<android.support.v4.view.ViewPager
android:id="@+id/call_log_pager"
android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_marginTop="?android:attr/actionBarSize" />
-</FrameLayout>
+ android:layout_height="0dp"
+ android:layout_weight="1" />
+</LinearLayout>
diff --git a/res/layout/call_log_fragment.xml b/res/layout/call_log_fragment.xml
index e58e160..bb50730 100644
--- a/res/layout/call_log_fragment.xml
+++ b/res/layout/call_log_fragment.xml
@@ -20,7 +20,8 @@
android:layout_height="match_parent"
android:orientation="vertical"
android:divider="?android:attr/dividerHorizontal"
- android:showDividers="end">
+ android:showDividers="end"
+ android:background="@color/background_dialer_list_items">
<FrameLayout
android:id="@+id/voicemail_status"
@@ -60,21 +61,25 @@
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
+ <!-- clipChildren=true is required to ensure shadows on elevated call log entries are not
+ clipped.-->
<ListView android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fadingEdge="none"
android:scrollbarStyle="outsideOverlay"
+ android:background="@color/background_dialer_list_items"
android:divider="@null"
+ android:nestedScrollingEnabled="true"
/>
- <TextView android:id="@android:id/empty"
+
+ <include
+ android:id="@+id/empty_list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:text="@string/recentCalls_empty"
- android:gravity="center"
- android:layout_marginTop="@dimen/empty_message_top_margin"
- android:textColor="?android:attr/textColorSecondary"
- android:textAppearance="?android:attr/textAppearanceLarge"
- />
+ layout="@layout/empty_list_view"
+ android:visibility="gone"/>
+
</FrameLayout>
+
</LinearLayout>
diff --git a/res/layout/call_log_list_item.xml b/res/layout/call_log_list_item.xml
index e17dc27..d925c13 100644
--- a/res/layout/call_log_list_item.xml
+++ b/res/layout/call_log_list_item.xml
@@ -14,54 +14,57 @@
limitations under the License.
-->
-<view
- xmlns:android="http://schemas.android.com/apk/res/android"
+<view xmlns:android="http://schemas.android.com/apk/res/android"
class="com.android.dialer.calllog.CallLogListItemView"
+ android:id="@+id/call_log_list_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:id="@+id/call_log_list_item"
android:orientation="vertical"
- android:background="@drawable/bottom_border_background"
->
- <!--
- This layout may represent either a call log item or one of the
- headers in the call log.
+ android:background="@color/background_dialer_list_items" >
- The former will make the @id/call_log_item visible and the
- @id/call_log_header gone.
-
- The latter will make the @id/call_log_header visible and the
- @id/call_log_item gone
- -->
+ <!-- Day group heading. Used to show a "today", "yesterday", "last week" or "other" heading
+ above a group of call log entries. -->
+ <TextView
+ android:id="@+id/call_log_day_group_label"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginStart="@dimen/call_log_start_margin"
+ android:layout_marginEnd="@dimen/call_log_outer_margin"
+ android:fontFamily="sans-serif-medium"
+ android:textColor="?attr/call_log_secondary_text_color"
+ android:textSize="@dimen/call_log_secondary_text_size"
+ android:paddingTop="@dimen/call_log_day_group_padding_top"
+ android:paddingBottom="@dimen/call_log_day_group_padding_bottom" />
<!-- Linear layout to separate the primary area containing the contact badge and caller
information and the secondary action (call details / play voicemail). -->
<LinearLayout
+ android:id="@+id/call_log_row"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:orientation="horizontal"
- android:gravity="center_vertical"
- >
+ android:baselineAligned="false"
+ android:orientation="vertical"
+ android:gravity="center_vertical" >
<!-- Primary area containing the contact badge and caller information -->
<LinearLayout
android:id="@+id/primary_action_view"
- android:layout_width="0dp"
- android:layout_weight="1"
+ android:background="@drawable/call_log_background"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_centerVertical="true"
- android:padding="@dimen/call_log_outer_margin"
+ android:paddingStart="@dimen/call_log_start_margin"
+ android:paddingEnd="@dimen/call_log_outer_margin"
+ android:paddingTop="@dimen/call_log_outer_margin"
+ android:paddingBottom="@dimen/call_log_outer_margin"
android:orientation="horizontal"
android:gravity="center_vertical"
- android:background="?android:attr/selectableItemBackground"
android:focusable="true"
- android:nextFocusRight="@+id/secondary_action_icon"
- android:nextFocusLeft="@+id/quick_contact_photo"
- >
+ android:nextFocusRight="@+id/call_back_action"
+ android:nextFocusLeft="@+id/quick_contact_photo" >
<QuickContactBadge
android:id="@+id/quick_contact_photo"
- android:layout_width="@dimen/call_log_list_contact_photo_size"
- android:layout_height="@dimen/call_log_list_contact_photo_size"
+ android:layout_width="@dimen/contact_photo_size"
+ android:layout_height="@dimen/contact_photo_size"
android:nextFocusRight="@id/primary_action_view"
android:layout_alignParentStart="true"
android:focusable="true"
@@ -72,33 +75,29 @@
android:layout_weight="1"
android:orientation="vertical"
android:gravity="center_vertical"
- android:layout_marginStart="@dimen/call_log_inner_margin"
+ android:layout_marginStart="@dimen/call_log_start_margin"
>
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
+ android:layout_marginBottom="@dimen/call_log_name_margin_bottom"
android:layout_marginEnd="@dimen/call_log_icon_margin"
android:textColor="?attr/call_log_primary_text_color"
- android:textSize="16sp"
+ android:textSize="@dimen/call_log_primary_text_size"
android:singleLine="true"
/>
- <LinearLayout
+ <TextView
+ android:id="@+id/voicemail_transcription"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:orientation="horizontal"
- >
- <TextView
- android:id="@+id/label"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginEnd="@dimen/call_log_icon_margin"
- android:textColor="?attr/call_log_secondary_text_color"
- android:textSize="12sp"
- android:singleLine="true"
- android:ellipsize="marquee"
- />
- </LinearLayout>
+ android:layout_marginEnd="@dimen/call_log_icon_margin"
+ android:textColor="?attr/call_log_secondary_text_color"
+ android:textSize="@dimen/call_log_secondary_text_size"
+ android:singleLine="true"
+ android:ellipsize="marquee"
+ android:visibility="gone"
+ />
<LinearLayout
android:id="@+id/call_type"
android:layout_width="wrap_content"
@@ -114,59 +113,29 @@
android:layout_gravity="center_vertical"
/>
<TextView
- android:id="@+id/call_count_and_date"
+ android:id="@+id/call_location_and_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/call_log_icon_margin"
android:layout_gravity="center_vertical"
android:textColor="?attr/call_log_secondary_text_color"
- android:textSize="12sp"
+ android:textSize="@dimen/call_log_secondary_text_size"
android:singleLine="true"
/>
</LinearLayout>
</LinearLayout>
</LinearLayout>
- <!-- Linear layout to house a vertical separator line and the secondary action button.
- Used as a convenience to hide both the separator and action button at the same
- time. -->
- <LinearLayout
- android:id="@+id/secondary_action_view"
- android:layout_width="@dimen/call_log_call_action_width"
- android:layout_height="match_parent"
- android:orientation="horizontal"
- android:gravity="center_vertical"
- >
- <!-- Thin vertical divider to visually separate the secondary action button -->
- <View
- android:id="@+id/vertical_divider"
- android:layout_width="@dimen/call_log_list_item_vertical_divider_width"
- android:layout_height="match_parent"
- android:layout_marginTop="@dimen/call_log_list_item_vertical_divider_margin"
- android:layout_marginBottom="@dimen/call_log_list_item_vertical_divider_margin"
- android:background="?android:attr/dividerVertical"/>
- <!-- The secondary action button; either play voicemail or call details. -->
- <ImageButton
- android:id="@+id/secondary_action_icon"
- android:layout_width="fill_parent"
- android:layout_height="match_parent"
- android:scaleType="center"
- android:background="?android:attr/selectableItemBackground"
- android:nextFocusLeft="@id/primary_action_view"
- />
- </LinearLayout>
- </LinearLayout>
- <TextView
- android:id="@+id/call_log_header"
- style="@style/ContactListSeparatorTextViewStyle"
- 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" />
+ <!-- Viewstub with additional expandable actions for a call log entry -->
+ <ViewStub android:id="@+id/call_log_entry_actions_stub"
+ android:inflatedId="@+id/call_log_entry_actions"
+ android:layout="@layout/call_log_list_item_actions"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"/>
+ </LinearLayout>
<!-- Displays the extra link section -->
<ViewStub android:id="@+id/link_stub"
android:layout="@layout/call_log_list_item_extra"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
-
</view>
diff --git a/res/layout/call_log_list_item_actions.xml b/res/layout/call_log_list_item_actions.xml
new file mode 100644
index 0000000..609f2a9
--- /dev/null
+++ b/res/layout/call_log_list_item_actions.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2014 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
+ -->
+<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:id="@+id/call_log_action_container">
+ <LinearLayout
+ android:id="@+id/call_log_entry_actions_ll"
+ android:gravity="center_vertical"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/call_log_action_height"
+ android:orientation="horizontal"
+ android:paddingStart="@dimen/call_log_actions_left_padding"
+ android:visibility="visible"
+ android:importantForAccessibility="1"
+ >
+ <TextView
+ android:id="@+id/call_back_action"
+ android:background="@drawable/action_button_background"
+ android:gravity="center"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:paddingStart="@dimen/call_log_action_horizontal_padding"
+ android:paddingEnd="@dimen/call_log_action_horizontal_padding"
+ android:text="@string/call_log_action_call_back"
+ android:textColor="@color/call_log_action_text"
+ android:textSize="@dimen/call_log_list_item_actions_text_size"
+ android:textStyle="bold"
+ android:nextFocusLeft="@+id/primary_action_view"
+ android:nextFocusRight="@+id/voicemail_action"
+ android:focusable="true"
+ android:singleLine="true"/>
+ <TextView
+ android:id="@+id/voicemail_action"
+ android:background="@drawable/action_button_background"
+ android:gravity="center"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:paddingStart="@dimen/call_log_action_horizontal_padding"
+ android:paddingEnd="@dimen/call_log_action_horizontal_padding"
+ android:text="@string/call_log_action_voicemail"
+ android:textColor="@color/call_log_action_text"
+ android:textSize="@dimen/call_log_list_item_actions_text_size"
+ android:textStyle="bold"
+ android:nextFocusLeft="@+id/call_back_action"
+ android:nextFocusRight="@+id/details_action"
+ android:focusable="true"
+ android:singleLine="true"/>
+ <TextView
+ android:id="@+id/details_action"
+ android:background="@drawable/action_button_background"
+ android:gravity="center"
+ android:layout_width="wrap_content"
+ android:layout_height="match_parent"
+ android:paddingStart="@dimen/call_log_action_horizontal_padding"
+ android:paddingEnd="@dimen/call_log_action_horizontal_padding"
+ android:text="@string/call_log_action_details"
+ android:textColor="?attr/call_log_secondary_text_color"
+ android:textSize="@dimen/call_log_list_item_actions_text_size"
+ android:textStyle="bold"
+ android:nextFocusLeft="@+id/voicemail_action"
+ android:nextFocusRight="@+id/primary_action_view"
+ android:focusable="true"
+ android:singleLine="true"/>
+ </LinearLayout>
+</FrameLayout>
diff --git a/res/layout/dialpad.xml b/res/layout/dialpad.xml
deleted file mode 100644
index c13f525..0000000
--- a/res/layout/dialpad.xml
+++ /dev/null
@@ -1,90 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2006 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.
--->
-
-<!-- Dialpad in the Phone app. -->
-<TableLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/dialpad"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingLeft="5dp"
- android:paddingRight="5dp"
- android:stretchColumns="*"
- android:layoutDirection="ltr" >
-
- <TableRow>
- <com.android.dialer.dialpad.DialpadKeyButton
- android:id="@+id/one"
- style="@style/DialpadKeyButtonStyle">
- <LinearLayout
- style="@style/DialpadKeyInternalLayoutStyle">
- <TextView
- android:id="@+id/dialpad_key_number"
- style="@style/DialpadKeyNumberStyle"/>
- <ImageView
- android:id="@+id/dialpad_key_voicemail"
- style="@style/DialpadKeyLettersStyle"
- android:src="@drawable/ic_dial_action_vm"
- android:scaleType="fitStart"
- android:baselineAlignBottom="true" />
- </LinearLayout>
- </com.android.dialer.dialpad.DialpadKeyButton>
- <include layout="@layout/dialpad_key" android:id="@+id/two"/>
- <include layout="@layout/dialpad_key" android:id="@+id/three"/>
- </TableRow>
-
- <TableRow>
- <include layout="@layout/dialpad_key" android:id="@+id/four"/>
- <include layout="@layout/dialpad_key" android:id="@+id/five"/>
- <include layout="@layout/dialpad_key" android:id="@+id/six"/>
- </TableRow>
-
- <TableRow>
- <include layout="@layout/dialpad_key" android:id="@+id/seven"/>
- <include layout="@layout/dialpad_key" android:id="@+id/eight"/>
- <include layout="@layout/dialpad_key" android:id="@+id/nine"/>
- </TableRow>
-
- <TableRow>
- <com.android.dialer.dialpad.DialpadKeyButton
- android:id="@+id/star"
- style="@style/DialpadKeyButtonStyle">
- <LinearLayout
- style="@style/DialpadKeyInternalLayoutStyle">
- <TextView
- android:id="@id/dialpad_key_number"
- style="@style/DialpadKeyStarPoundStyle" />
- <View
- android:layout_height="match_parent"
- android:layout_width="@dimen/dialpad_key_letters_width" />
- </LinearLayout>
- </com.android.dialer.dialpad.DialpadKeyButton>
- <include layout="@layout/dialpad_key" android:id="@+id/zero"/>
- <com.android.dialer.dialpad.DialpadKeyButton
- android:id="@+id/pound"
- style="@style/DialpadKeyButtonStyle">
- <LinearLayout
- style="@style/DialpadKeyInternalLayoutStyle">
- <TextView
- android:id="@id/dialpad_key_number"
- style="@style/DialpadKeyStarPoundStyle" />
- <View
- android:layout_height="match_parent"
- android:layout_width="@dimen/dialpad_key_letters_width" />
- </LinearLayout>
- </com.android.dialer.dialpad.DialpadKeyButton>
- </TableRow>
-</TableLayout>
diff --git a/res/layout/dialpad_digits.xml b/res/layout/dialpad_digits.xml
deleted file mode 100644
index 21638f0..0000000
--- a/res/layout/dialpad_digits.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 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.
--->
-
-<!-- Text field and possibly soft menu button above the keypad where
- the digits are displayed. -->
-
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/digits_container"
- android:layout_width="match_parent"
- android:layout_height="@dimen/dialpad_digits_height"
- android:orientation="horizontal">
-
- <view class="com.android.dialer.dialpad.DigitsEditText"
- android:id="@+id/digits"
- android:layout_width="0dp"
- android:layout_height="match_parent"
- android:paddingLeft="@dimen/dialpad_digits_padding"
- android:scrollHorizontally="true"
- android:singleLine="true"
- android:layout_weight="1"
- android:gravity="center"
- android:background="@android:color/transparent"
- android:maxLines="1"
- android:textSize="@dimen/dialpad_digits_text_size"
- android:freezesText="true"
- android:focusableInTouchMode="true"
- android:editable="true"
- android:cursorVisible="false"
- android:textColor="@color/dialpad_digits_text_color"
- android:textCursorDrawable="@null"
- android:fontFamily="sans-serif-light"
- android:textStyle="normal" />
-
- <ImageButton
- android:id="@+id/deleteButton"
- android:paddingLeft="@dimen/dialpad_digits_padding"
- android:paddingRight="@dimen/dialpad_digits_padding"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:state_enabled="false"
- android:background="@drawable/dialpad_key_colors"
- android:contentDescription="@string/description_delete_button"
- android:src="@drawable/ic_dial_action_delete" />
-</LinearLayout>
diff --git a/res/layout/dialpad_fragment.xml b/res/layout/dialpad_fragment.xml
index dfe5c7c..01bbecc 100644
--- a/res/layout/dialpad_fragment.xml
+++ b/res/layout/dialpad_fragment.xml
@@ -28,53 +28,16 @@
<!-- Dialpad shadow -->
<View
android:layout_width="match_parent"
- android:layout_height="3dp"
+ android:layout_height="@dimen/shadow_length"
android:background="@drawable/shadow_fade_up" />
- <view class="com.android.dialer.dialpad.DialpadFragment$HoverIgnoringLinearLayout"
- android:id="@+id/top"
- android:animateLayoutChanges="true"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:layout_gravity="bottom"
- android:orientation="vertical"
- android:layoutDirection="ltr"
- android:background="@color/background_dialpad">
-
- <Space
- android:layout_width="match_parent"
- android:layout_height="2dp"
- android:background="@color/dialpad_separator_line_color" />
-
- <Space
- android:layout_width="match_parent"
- android:layout_height="10dp" />
-
- <include layout="@layout/dialpad_digits"/>
-
- <Space
- android:layout_width="match_parent"
- android:layout_height="8dp" />
-
- <include layout="@layout/dialpad" />
-
- <Space
- android:layout_width="match_parent"
- android:layout_height="8dp" />
-
- <Space
- android:layout_width="match_parent"
- android:layout_height="2dp"
- android:background="@color/dialpad_separator_line_color" />
-
- <!-- "Dialpad chooser" UI, shown only when the user brings up the
+ <include layout="@layout/dialpad_view" />
+ <!-- "Dialpad chooser" UI, shown only when the user brings up the
Dialer while a call is already in progress.
When this UI is visible, the other Dialer elements
(the textfield/button and the dialpad) are hidden. -->
- <ListView android:id="@+id/dialpadChooser"
+ <ListView android:id="@+id/dialpadChooser"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_weight="1"
+ android:background="@color/background_dialer_light"
android:visibility="gone" />
-
- </view>
</view>
diff --git a/res/layout/dialpad_key.xml b/res/layout/dialpad_key.xml
deleted file mode 100644
index 5bf858c..0000000
--- a/res/layout/dialpad_key.xml
+++ /dev/null
@@ -1,35 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 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.
--->
-
-<!-- A layout representing a single key in the dialpad -->
-<com.android.dialer.dialpad.DialpadKeyButton
- xmlns:android="http://schemas.android.com/apk/res/android"
- style="@style/DialpadKeyButtonStyle">
-
- <LinearLayout style="@style/DialpadKeyInternalLayoutStyle">
-
- <!-- Note in the referenced styles that we assign hard widths to these components
- because we want them to line up vertically when we arrange them in an MxN grid -->
-
- <TextView
- android:id="@+id/dialpad_key_number"
- style="@style/DialpadKeyNumberStyle" />
-
- <TextView
- android:id="@+id/dialpad_key_letters"
- style="@style/DialpadKeyLettersStyle" />
- </LinearLayout>
-</com.android.dialer.dialpad.DialpadKeyButton>
\ No newline at end of file
diff --git a/res/layout/dialtacts_activity.xml b/res/layout/dialtacts_activity.xml
index f708919..aa4ce94 100644
--- a/res/layout/dialtacts_activity.xml
+++ b/res/layout/dialtacts_activity.xml
@@ -13,175 +13,56 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<LinearLayout
+<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/dialtacts_mainlayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:focusable="true"
android:orientation="vertical"
+ android:focusable="true"
android:focusableInTouchMode="true"
android:clipChildren="false"
+ android:animateLayoutChanges="true"
+ android:background="@color/background_dialer_light"
>
-
<FrameLayout
android:id="@+id/dialtacts_container"
android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1">
+ android:layout_height="match_parent"
+ android:clipChildren="false">
+ <!-- The main contacts grid -->
+ <FrameLayout
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:id="@+id/dialtacts_frame"
+ android:clipChildren="false" />
+ </FrameLayout>
+ <FrameLayout
+ android:id="@+id/floating_action_button_container"
+ android:layout_width="@dimen/floating_action_button_width"
+ android:layout_height="@dimen/floating_action_button_height"
+ android:layout_marginBottom="@dimen/floating_action_button_margin_bottom"
+ android:layout_gravity="center_horizontal|bottom" >
- <LinearLayout
+ <ImageButton
+ android:id="@+id/floating_action_button"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:clipChildren="false"
- android:orientation="vertical" >
-
- <!-- Search entry box and remove view -->
- <FrameLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:id="@+id/search_and_remove_view_container"
- >
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="@dimen/search_box_height"
- android:id="@+id/search_view_container"
- android:orientation="horizontal"
- android:layout_marginTop="@dimen/search_top_margin"
- android:layout_marginBottom="@dimen/search_bottom_margin"
- android:layout_marginLeft="@dimen/search_margin_horizontal"
- android:layout_marginRight="@dimen/search_margin_horizontal"
- android:paddingLeft="@dimen/search_box_left_padding"
- android:paddingRight="@dimen/search_box_right_padding"
- android:background="@drawable/search_bg"
- android:gravity="center_vertical"
- >
- <EditText
- android:id="@+id/search_view"
- android:layout_width="match_parent"
- android:layout_height="@dimen/search_box_icon_size"
- android:layout_weight="1"
- android:layout_marginLeft="@dimen/search_box_text_left_margin"
- android:textSize="@dimen/search_text_size"
- android:fontFamily="@string/search_font_family"
- android:textColor="@color/searchbox_text_color"
- android:textColorHint="@color/searchbox_hint_text_color"
- android:inputType="textFilter"/>
- <ImageView
- android:id="@+id/search_close_button"
- android:layout_height="@dimen/search_box_icon_size"
- android:layout_width="@dimen/search_box_icon_size"
- android:padding="6dp"
- android:src="@drawable/ic_close_dk"
- android:clickable="true"
- android:background="?android:attr/selectableItemBackground"
- android:contentDescription="@string/description_clear_search"
- android:visibility="gone" />
- <ImageView
- android:id="@+id/voice_search_button"
- android:layout_height="@dimen/search_box_icon_size"
- android:layout_width="@dimen/search_box_icon_size"
- android:padding="@dimen/search_box_icon_padding"
- android:src="@drawable/ic_voice_search"
- android:clickable="true"
- android:contentDescription="@string/description_start_voice_search"
- android:background="?android:attr/selectableItemBackground" />
- </LinearLayout>
- <com.android.dialer.list.RemoveView
- android:layout_width="match_parent"
- android:layout_height="56dp"
- android:id="@+id/remove_view_container"
- android:orientation="horizontal"
- android:gravity="center"
- android:visibility="gone">
- <ImageView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/remove_view_icon"
- android:src="@drawable/ic_remove"
- android:contentDescription="@string/remove_contact"
- />
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:id="@+id/remove_view_text"
- android:textSize="@dimen/remove_text_size"
- android:textColor="@color/remove_text_color"
- android:text="@string/remove_contact"
- />
- </com.android.dialer.list.RemoveView>
- </FrameLayout>
-
- <!-- Relative Layout is used to contain the main contacts grid and the thin translucent
- horizontal divider line at the bottom of the contacts grid above the menu bar. -->
- <RelativeLayout android:layout_width="match_parent"
- android:layout_height="0dp"
- android:layout_weight="1"
- android:clipChildren="false"
- >
- <!-- The main contacts grid -->
- <FrameLayout
- android:layout_height="match_parent"
- android:layout_width="match_parent"
- android:id="@+id/dialtacts_frame"
- android:clipChildren="false"
- android:layout_alignParentBottom="true"
- android:layout_alignParentTop="true"
- android:layout_alignParentLeft="true"
- android:layout_alignParentRight="true"
- >
- </FrameLayout>
- <!-- Thin translucent horizontal line at the bottom of the contacts grid. Floats
- above the contacts grid and has a translucent color. -->
- <View
- android:layout_height="2dp"
- android:layout_width="match_parent"
- android:background="@color/contacts_grid_bottom_border_color"
- android:layout_alignParentBottom="true"
- android:layout_alignParentLeft="true"
- android:layout_alignParentRight="true"
- />
- </RelativeLayout>
- </LinearLayout>
- </FrameLayout>
-
- <!-- Fake action bar -->
- <FrameLayout
- android:layout_height="@dimen/fake_action_bar_height"
- android:layout_width="match_parent"
- android:id="@+id/fake_action_bar"
- android:background="@color/actionbar_background_color">
- <ImageButton
- android:id="@+id/call_history_button"
- android:layout_width="@dimen/fake_menu_button_min_width"
- android:layout_height="match_parent"
- android:layout_gravity="bottom|start"
- android:background="?android:attr/selectableItemBackground"
- android:contentDescription="@string/action_menu_call_history_description"
- android:src="@drawable/ic_menu_history_lt"/>
- <ImageButton
- android:id="@+id/dialpad_button"
- android:layout_width="@dimen/fake_menu_button_min_width"
- android:layout_height="match_parent"
- android:layout_gravity="bottom|center"
- android:background="?android:attr/selectableItemBackground"
+ android:background="@drawable/floating_action_button"
android:contentDescription="@string/action_menu_dialpad_button"
- android:src="@drawable/ic_menu_dialpad_lt"/>
- <ImageButton
- android:id="@+id/dial_button"
- android:layout_width="@dimen/fake_menu_button_min_width"
- android:layout_height="match_parent"
- android:layout_gravity="bottom|center"
- android:background="@drawable/btn_call"
- android:contentDescription="@string/description_dial_button"
- android:src="@drawable/ic_dial_action_call"
- android:visibility="gone" />
- <ImageButton
- android:id="@+id/overflow_menu"
- android:layout_width="@dimen/fake_menu_button_min_width"
- android:layout_height="match_parent"
- android:layout_gravity="bottom|end"
- android:src="@drawable/ic_menu_overflow_lt"
- android:contentDescription="@string/action_menu_overflow_description"
- android:background="?android:attr/selectableItemBackground"/>
+ android:src="@drawable/fab_ic_dial"/>
+
</FrameLayout>
-</LinearLayout>
+ <!-- Host container for the contact tile drag shadow -->
+ <FrameLayout
+ android:id="@+id/activity_overlay"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent">
+ <ImageView
+ android:id="@+id/contact_tile_drag_shadow_overlay"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:visibility="gone"
+ android:importantForAccessibility="no" />
+ </FrameLayout>
+</FrameLayout>
diff --git a/res/layout/empty_list_view.xml b/res/layout/empty_list_view.xml
new file mode 100644
index 0000000..40f58bd
--- /dev/null
+++ b/res/layout/empty_list_view.xml
@@ -0,0 +1,47 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<RelativeLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:minHeight="?android:attr/listPreferredItemHeight">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="vertical"
+ android:paddingBottom="@dimen/actionbar_and_tab_height"
+ android:layout_centerInParent="true" >
+
+ <ImageView
+ android:id="@+id/emptyListViewImage"
+ android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:gravity="center_horizontal" />
+
+ <TextView
+ android:id="@+id/emptyListViewMessage"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:minHeight="84dp"
+ android:gravity="center_horizontal|top"
+ android:textSize="@dimen/empty_list_message_text_size"
+ android:textColor="@color/empty_list_text_color" />
+
+ </LinearLayout>
+
+</RelativeLayout>
diff --git a/res/layout/lists_fragment.xml b/res/layout/lists_fragment.xml
new file mode 100644
index 0000000..1de8364
--- /dev/null
+++ b/res/layout/lists_fragment.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 The Android Open Source Project
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+-->
+
+<com.android.dialer.widget.OverlappingPaneLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/lists_frame"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:animateLayoutChanges="true" >
+
+ <ListView
+ android:id="@+id/shortcut_card_list"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="@dimen/action_bar_height"
+ android:background="@color/actionbar_background_color"
+ android:clipToPadding="false"
+ android:fadingEdge="none"
+ android:divider="@null" />
+
+ <FrameLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent">
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <com.android.dialer.list.ViewPagerTabs
+ android:id="@+id/lists_pager_header"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/tab_height"
+ android:textAllCaps="true"
+ android:orientation="horizontal"
+ android:layout_gravity="top"
+ android:elevation="@dimen/tab_elevation"
+ style="@style/DialtactsActionBarTabTextStyle" />
+
+ <android.support.v4.view.ViewPager
+ android:id="@+id/lists_pager"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1" />
+
+ </LinearLayout>
+
+ <com.android.dialer.list.RemoveView
+ android:id="@+id/remove_view"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/tab_height"
+ android:layout_alignParentTop="true" >
+
+ <LinearLayout
+ android:id="@+id/remove_view_content"
+ android:layout_height="match_parent"
+ android:layout_width="match_parent"
+ android:background="@color/actionbar_background_color"
+ android:gravity="center"
+ android:orientation="horizontal"
+ android:visibility="gone" >
+
+ <ImageView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="8dp"
+ android:layout_marginBottom="8dp"
+ android:id="@+id/remove_view_icon"
+ android:src="@drawable/ic_remove"
+ android:contentDescription="@string/remove_contact"
+ android:tint="@color/remove_text_color" />
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:id="@+id/remove_view_text"
+ android:textSize="@dimen/remove_text_size"
+ android:textColor="@color/remove_text_color"
+ android:text="@string/remove_contact" />
+
+ </LinearLayout>
+
+ </com.android.dialer.list.RemoveView >
+
+ </FrameLayout>
+
+</com.android.dialer.widget.OverlappingPaneLayout>
diff --git a/res/layout/phone_favorite_regular_row_view.xml b/res/layout/phone_favorite_regular_row_view.xml
deleted file mode 100644
index d046fdb..0000000
--- a/res/layout/phone_favorite_regular_row_view.xml
+++ /dev/null
@@ -1,134 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<!-- Layout parameters are set programmatically. -->
-<view
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/contact_tile"
- class="com.android.dialer.list.PhoneFavoriteRegularRowView">
-
- <RelativeLayout
- android:id="@+id/contact_favorite_card"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:focusable="true">
-
- <com.android.contacts.common.widget.LayoutSuppressingQuickContactBadge
- android:id="@+id/contact_tile_quick"
- android:layout_width="64dip"
- android:layout_height="64dip"
- android:layout_alignParentLeft="true"
- android:layout_alignParentStart="true"
- android:nextFocusRight="@id/contact_tile"
- android:scaleType="centerCrop"
- android:focusable="true" />
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginLeft="8dip"
- android:layout_marginStart="8dip"
- android:layout_toRightOf="@id/contact_tile_quick"
- android:layout_toEndOf="@id/contact_tile_quick"
- android:layout_centerVertical="true"
- android:orientation="vertical">
- <TextView
- android:id="@id/contact_tile_name"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textSize="16sp"
- android:textColor="@color/dialtacts_primary_text_color"/>
- android:singleLine="true"
- android:fadingEdge="horizontal"
- android:fadingEdgeLength="3dip"
- android:ellipsize="marquee"
- android:textAlignment="viewStart" />
- <TextView
- android:id="@+id/contact_tile_phone_type"
- android:layout_height="wrap_content"
- android:layout_width="wrap_content"
- android:textSize="12sp"
- android:ellipsize="marquee"
- android:singleLine="true"
- android:textColor="@color/dialtacts_secondary_text_color" />
- </LinearLayout>
-
- </RelativeLayout>
-
- <LinearLayout
- android:id="@+id/favorite_remove_dialogue"
- android:orientation="horizontal"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_alignParentLeft="true"
- android:layout_alignParentStart="true"
- android:gravity="center_vertical"
- android:alpha="0.0"
- android:visibility="gone">
-
- <TextView
- android:id="@+id/favorite_remove_dialogue_text"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:layout_weight="1"
- android:paddingStart="@dimen/favorites_row_undo_text_side_padding"
- android:paddingEnd="@dimen/favorites_row_undo_text_side_padding"
- android:text="@string/favorite_hidden"
- android:ellipsize="marquee"
- android:fontFamily="sans-serif"
- android:textSize="14sp"
- android:textColor="@color/undo_dialogue_text_color"
- android:singleLine="true"
- android:gravity="center_vertical"
- android:textDirection="ltr" />
-
- <View
- android:id="@+id/undo_separator"
- android:layout_width="1dip"
- android:layout_height="match_parent"
- android:background="@color/undo_dialogue_text_color"
- android:layout_marginTop="16dp"
- android:layout_marginBottom="16dp" />
-
- <LinearLayout
- android:id="@+id/favorite_remove_undo_button"
- android:orientation="vertical"
- android:layout_width="wrap_content"
- android:layout_height="match_parent"
- android:clickable="true"
- android:paddingStart="30dp"
- android:paddingEnd="30dp"
- android:background="?android:attr/selectableItemBackground"
- android:gravity="center_vertical">
-
- <ImageView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:src="@drawable/ic_fav_undo_dk"/>
-
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:fontFamily="sans-serif-light"
- android:textSize="13sp"
- android:ellipsize="marquee"
- android:singleLine="true"
- android:text="@string/favorite_hidden_undo"
- android:textColor="@color/undo_dialogue_text_color"
- android:textAlignment="center"/>
- </LinearLayout>
- </LinearLayout>
-</view>
diff --git a/res/layout/phone_favorite_tile_view.xml b/res/layout/phone_favorite_tile_view.xml
index 952bb2a..d34dc7a 100644
--- a/res/layout/phone_favorite_tile_view.xml
+++ b/res/layout/phone_favorite_tile_view.xml
@@ -15,18 +15,16 @@
-->
<view
xmlns:android="http://schemas.android.com/apk/res/android"
- android:paddingBottom="1dip"
- android:paddingRight="1dip"
- android:paddingEnd="1dip"
android:id="@+id/contact_tile"
- class="com.android.dialer.list.PhoneFavoriteSquareTileView" >
+ class="com.android.dialer.list.PhoneFavoriteSquareTileView"
+ android:paddingEnd="@dimen/contact_tile_divider_width"
+ android:paddingBottom="@dimen/contact_tile_divider_width">
<RelativeLayout
android:id="@+id/contact_favorite_card"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:focusable="true"
- android:background="@drawable/ic_contacts_tiles">
+ android:focusable="true" >
<com.android.contacts.common.widget.LayoutSuppressingImageView
android:id="@+id/contact_tile_image"
@@ -34,48 +32,68 @@
android:layout_height="match_parent"
android:scaleType="centerCrop" />
- <View
- android:id="@+id/shadow_overlay"
+ <LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@drawable/shadow_contact_photo"/>
+ android:orientation="vertical">
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="6" />
+ <View
+ android:id="@+id/shadow_overlay"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="4"
+ android:background="@drawable/shadow_contact_photo" />
+ </LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:paddingLeft="@dimen/contact_tile_text_side_padding"
- android:paddingRight="@dimen/contact_tile_text_side_padding"
android:paddingStart="@dimen/contact_tile_text_side_padding"
android:paddingEnd="@dimen/contact_tile_text_side_padding"
android:paddingBottom="@dimen/contact_tile_text_bottom_padding"
android:layout_alignParentBottom="true"
android:orientation="vertical" >
- <TextView
- android:id="@+id/contact_tile_name"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center_vertical"
- android:textColor="@color/contact_tile_name_color"
- android:fontFamily="sans-serif"
- android:singleLine="true"
- android:textSize="15sp"
- android:fadingEdge="horizontal"
- android:fadingEdgeLength="3dip"
- android:ellipsize="marquee"
- android:textAlignment="viewStart" />
- <TextView
- android:id="@+id/contact_tile_phone_type"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center_vertical"
- android:textColor="@color/contact_tile_name_color"
- android:fontFamily="sans-serif"
- android:singleLine="true"
- android:textSize="11sp"
- android:fadingEdge="horizontal"
- android:fadingEdgeLength="3dip"
- android:ellipsize="marquee"
- android:textAlignment="viewStart" />
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:gravity="center_vertical">
+ <TextView
+ android:id="@+id/contact_tile_name"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:textColor="@color/contact_tile_name_color"
+ android:fontFamily="sans-serif-medium"
+ android:singleLine="true"
+ android:textSize="15sp"
+ android:fadingEdge="horizontal"
+ android:fadingEdgeLength="3dip"
+ android:ellipsize="marquee"
+ android:textAlignment="viewStart" />
+ <ImageView
+ android:id="@+id/contact_star_icon"
+ android:layout_width="@dimen/favorites_star_icon_size"
+ android:layout_height="@dimen/favorites_star_icon_size"
+ android:layout_marginStart="3dp"
+ android:src="@drawable/ic_star"
+ android:visibility="gone" />
+ </LinearLayout>
+ <TextView
+ android:id="@+id/contact_tile_phone_type"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="center_vertical"
+ android:textColor="@color/contact_tile_name_color"
+ android:fontFamily="sans-serif"
+ android:singleLine="true"
+ android:textSize="11sp"
+ android:fadingEdge="horizontal"
+ android:fadingEdgeLength="3dip"
+ android:ellipsize="marquee"
+ android:textAlignment="viewStart" />
</LinearLayout>
<View
android:id="@+id/contact_tile_push_state"
@@ -92,10 +110,10 @@
android:layout_height="@dimen/contact_tile_info_button_height_and_width"
android:layout_width="@dimen/contact_tile_info_button_height_and_width"
android:paddingLeft="4dp"
- android:paddingRight="4dp"
+ android:paddingRight="9dp"
android:paddingStart="4dp"
android:paddingEnd="4dp"
- android:paddingTop="4dp"
+ android:paddingTop="8dp"
android:paddingBottom="4dp"
android:layout_alignParentTop="true"
android:layout_alignParentRight="true"
@@ -104,60 +122,4 @@
android:contentDescription="@string/description_view_contact_detail" />
</RelativeLayout>
-
- <LinearLayout
- android:id="@+id/favorite_remove_dialogue"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_alignParentLeft="true"
- android:layout_alignParentStart="true"
- android:gravity="center_horizontal"
- android:background="@color/background_dialer_light"
- android:alpha="0.0"
- android:visibility="gone">
-
- <TextView
- android:id="@+id/favorite_remove_dialogue_text"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/favorite_hidden"
- android:ellipsize="marquee"
- android:fontFamily="sans-serif"
- android:textSize="14sp"
- android:textColor="@color/undo_dialogue_text_color"
- android:lines="2"
- android:paddingTop="22dp"
- android:textDirection="ltr"
- android:textAlignment="center" />
-
- <LinearLayout
- android:id="@+id/favorite_remove_undo_button"
- android:orientation="vertical"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_alignParentLeft="true"
- android:background="?android:attr/selectableItemBackground"
- android:clickable="true"
- android:layout_weight="1"
- android:layout_gravity="bottom">
-
- <ImageView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:src="@drawable/ic_fav_undo_dk"/>
-
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:fontFamily="sans-serif"
- android:textSize="13sp"
- android:ellipsize="marquee"
- android:singleLine="true"
- android:text="@string/favorite_hidden_undo"
- android:textColor="@color/undo_dialogue_text_color"
- android:textAlignment="center"/>
- </LinearLayout>
-
- </LinearLayout>
</view>
diff --git a/res/layout/phone_favorites_menu.xml b/res/layout/phone_favorites_menu.xml
deleted file mode 100644
index 5f7a5a6..0000000
--- a/res/layout/phone_favorites_menu.xml
+++ /dev/null
@@ -1,58 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
- ~ Copyright (C) 2014 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
- -->
-
-<!-- The phone favorites menu appears on the main dialer screen above the favorite callers area,
- and provides access to the All Contacts list. -->
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/phone_favorites_menu"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingLeft="@dimen/favorites_menu_padding_horizontal"
- android:paddingRight="@dimen/favorites_menu_padding_horizontal"
- android:paddingTop="@dimen/favorites_menu_padding_top"
- android:paddingBottom="@dimen/favorites_menu_padding_bottom"
- android:background="@drawable/background_favorites_menu"
- android:addStatesFromChildren="true"
- >
- <TextView
- android:layout_width="wrap_content"
- android:layout_height="@dimen/favorites_menu_speed_dial_height"
- android:fontFamily="@string/favorites_menu_speed_dial_font_family"
- android:text="@string/favorites_menu_speed_dial"
- android:textSize="@dimen/favorites_menu_speed_dial_text_size"
- android:textColor="@color/speed_dial_text_color"
- android:layout_alignParentLeft="true"
- android:layout_centerVertical="true"
- android:gravity="center"
- />
- <TextView
- android:id="@+id/all_contacts_button"
- android:fontFamily="@string/favorites_menu_all_contacts_font_family"
- android:layout_width="wrap_content"
- android:layout_height="@dimen/favorites_menu_all_contacts_height"
- android:paddingLeft="@dimen/favorites_menu_padding_horizontal"
- android:paddingRight="@dimen/favorites_menu_padding_horizontal"
- android:text="@string/favorites_menu_all_contacts"
- android:textSize="@dimen/favorites_menu_all_contacts_text_size"
- android:background="@color/all_contacts_button_color"
- android:textColor="@color/all_contacts_button_text_color"
- android:layout_alignParentRight="true"
- android:layout_centerVertical="true"
- android:gravity="center"
- android:focusable="true"
- />
-</RelativeLayout>
\ No newline at end of file
diff --git a/res/layout/phone_no_favorites.xml b/res/layout/phone_no_favorites.xml
deleted file mode 100644
index 1a0079f..0000000
--- a/res/layout/phone_no_favorites.xml
+++ /dev/null
@@ -1,63 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<RelativeLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:minHeight="?android:attr/listPreferredItemHeight">
-
- <include
- android:id="@+id/show_all_contact_button_in_nofav"
- layout="@layout/show_all_contact_button"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentBottom="true"
- android:layout_alignParentLeft="true"
- android:layout_alignParentStart="true"/>
-
- <LinearLayout
- android:id="@+id/nofavorite_frame"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:orientation="vertical"
- android:layout_gravity="center"
- android:gravity="center"
- android:layout_alignParentLeft="true"
- android:layout_alignParentStart="true"
- android:layout_alignParentTop="true"
- android:layout_above="@id/show_all_contact_button_in_nofav">
-
- <ImageView
- android:id="@+id/nofavorite_image"
- android:layout_height="wrap_content"
- android:layout_width="match_parent"
- android:gravity="center_horizontal"
- android:src="@drawable/no_favorites_banner"
- android:layout_marginBottom="14dp"/>
-
- <TextView
- android:id="@+id/title"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="center_horizontal"
- android:text="@string/no_favorites"
- android:textAppearance="?android:attr/textAppearanceLarge"
- android:textColor="@color/nofavorite_text_color"/>
- </LinearLayout>
-
-</RelativeLayout>
diff --git a/res/layout/playback_layout.xml b/res/layout/playback_layout.xml
index 01ed2e9..aa3ab47 100644
--- a/res/layout/playback_layout.xml
+++ b/res/layout/playback_layout.xml
@@ -18,7 +18,7 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="@color/background_dialer_light"
+ android:background="@color/background_dialer_list_items"
>
<!-- Mute, playback, trash buttons. -->
<LinearLayout
@@ -33,7 +33,6 @@
android:layout_height="58dip"
android:layout_marginEnd="@dimen/call_detail_button_spacing"
android:layout_weight="1"
- android:background="@color/background_dialer_list_items"
>
<ImageButton
android:id="@+id/playback_start_stop"
@@ -41,6 +40,7 @@
android:layout_height="match_parent"
android:background="?android:attr/selectableItemBackground"
android:src="@drawable/ic_hold_pause"
+ android:contentDescription="@string/voicemail_play_start_pause"
/>
</LinearLayout>
<LinearLayout
@@ -64,7 +64,6 @@
android:layout_height="80dip"
android:layout_below="@id/buttons_linear_layout"
android:layout_marginTop="@dimen/call_detail_button_spacing"
- android:background="@color/background_dialer_list_items"
>
<!-- SeekBar left-right margin decreased from redlines 72dip by 8dip to account for
half thumb width (thumb is 16dip).
@@ -117,6 +116,7 @@
android:paddingTop="29dip"
android:layout_alignParentStart="true"
android:layout_centerVertical="true"
+ android:contentDescription="@string/voicemail_play_slower"
/>
<ImageButton
android:id="@+id/rate_increase_button"
@@ -128,11 +128,11 @@
android:paddingTop="29dip"
android:layout_alignParentEnd="true"
android:layout_centerVertical="true"
+ android:contentDescription="@string/voicemail_play_faster"
/>
<View
android:layout_width="match_parent"
android:layout_height="2dp"
- android:background="@color/background_dialer_light"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
</RelativeLayout>
diff --git a/res/layout/recents_list_footer.xml b/res/layout/recents_list_footer.xml
new file mode 100644
index 0000000..7670d81
--- /dev/null
+++ b/res/layout/recents_list_footer.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2014 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.
+-->
+
+<!-- Text field and possibly soft menu button above the keypad where
+ the digits are displayed. -->
+
+<TextView
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/recents_list_footer"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:paddingTop="20dp"
+ android:paddingBottom="20dp"
+ android:gravity="center"
+ android:fontFamily="@string/view_full_call_history_font_family"
+ android:textStyle="bold"
+ android:textColor="@color/view_full_call_history_color"
+ android:textSize="14sp"
+ android:text="@string/recents_footer_text"
+ android:background="@drawable/recent_lists_footer_background" />
diff --git a/res/layout/search_edittext.xml b/res/layout/search_edittext.xml
new file mode 100644
index 0000000..0308d51
--- /dev/null
+++ b/res/layout/search_edittext.xml
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="utf-8"?>
+<view class="com.android.dialer.widget.SearchEditTextLayout"
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:id="@+id/search_view_container"
+ android:orientation="horizontal"
+ android:layout_marginTop="@dimen/search_top_margin"
+ android:layout_marginBottom="@dimen/search_bottom_margin"
+ android:layout_marginLeft="@dimen/search_margin_horizontal"
+ android:layout_marginRight="@dimen/search_margin_horizontal"
+ android:background="@drawable/rounded_corner"
+ android:elevation="@dimen/search_box_elevation">
+
+ <LinearLayout
+ android:id="@+id/search_box_collapsed"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:paddingStart="@dimen/search_box_left_padding"
+ android:paddingEnd="@dimen/search_box_right_padding"
+ android:gravity="center_vertical"
+ android:orientation="horizontal" >
+
+ <ImageView
+ android:id="@+id/search_magnifying_glass"
+ android:layout_height="@dimen/search_box_icon_size"
+ android:layout_width="@dimen/search_box_icon_size"
+ android:layout_margin="@dimen/search_box_icon_margin"
+ android:padding="@dimen/search_box_search_icon_padding"
+ android:src="@drawable/ic_ab_search"
+ android:importantForAccessibility="no"
+ android:tint="@color/searchbox_icon_tint" />
+
+ <!-- Portion of the search box that starts a search when clicked -->
+ <LinearLayout
+ android:id="@+id/search_box_start_search"
+ android:layout_height="wrap_content"
+ android:layout_width="0dp"
+ android:layout_weight="1"
+ android:gravity="center_vertical" >
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="@dimen/search_box_icon_size"
+ android:layout_marginLeft="@dimen/search_box_collapsed_text_margin_left"
+ android:textSize="@dimen/search_collapsed_text_size"
+ android:fontFamily="@string/search_font_family"
+ android:textColorHint="@color/searchbox_hint_text_color"
+ android:gravity="center_vertical"
+ android:hint="@string/dialer_hint_find_contact" />
+
+ </LinearLayout>
+
+ <ImageView
+ android:id="@+id/voice_search_button"
+ android:layout_height="@dimen/search_box_icon_size"
+ android:layout_width="@dimen/search_box_icon_size"
+ android:layout_margin="@dimen/search_box_icon_margin"
+ android:src="@drawable/ic_voice_search"
+ android:clickable="true"
+ android:contentDescription="@string/description_start_voice_search"
+ android:background="?android:attr/selectableItemBackground"
+ android:tint="@color/searchbox_icon_tint" />
+
+
+ <ImageButton
+ android:id="@+id/dialtacts_options_menu_button"
+ android:layout_width="@dimen/search_box_icon_size"
+ android:layout_height="@dimen/search_box_icon_size"
+ android:layout_margin="@dimen/search_box_icon_margin"
+ android:background="?android:attr/selectableItemBackground"
+ android:src="@drawable/ic_overflow_menu"
+ android:contentDescription="@string/action_menu_overflow_description"
+ android:tint="@color/searchbox_icon_tint" />
+
+ </LinearLayout>
+
+ <include layout="@layout/search_bar_expanded" />
+
+</view>
diff --git a/res/layout/show_all_contact_button.xml b/res/layout/show_all_contact_button.xml
deleted file mode 100644
index 30060d7..0000000
--- a/res/layout/show_all_contact_button.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2013 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<com.android.contacts.common.list.ContactListItemView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/show_all_contact_button"
- android:orientation="horizontal"
- android:clickable="true"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:minHeight="?android:attr/listPreferredItemHeight"
- android:gravity="center"
- android:focusable="true" />
\ No newline at end of file
diff --git a/res/layout/show_all_contacts_fragment.xml b/res/layout/show_all_contacts_fragment.xml
index ddc99e8..fe188bd 100644
--- a/res/layout/show_all_contacts_fragment.xml
+++ b/res/layout/show_all_contacts_fragment.xml
@@ -38,12 +38,19 @@
android:id="@android:id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_marginLeft="?attr/contact_browser_list_padding_left"
- android:layout_marginRight="?attr/contact_browser_list_padding_right"
android:layout_marginStart="?attr/contact_browser_list_padding_left"
android:layout_marginEnd="?attr/contact_browser_list_padding_right"
+ android:paddingTop="18dp"
android:fastScrollEnabled="true"
- android:fadingEdge="none"/>
+ android:fadingEdge="none"
+ android:nestedScrollingEnabled="true" />
</FrameLayout>
+ <include
+ android:id="@+id/empty_list_view"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ layout="@layout/empty_list_view"
+ android:visibility="gone"/>
+
</LinearLayout>
diff --git a/res/layout/phone_favorites_fragment.xml b/res/layout/speed_dial_fragment.xml
similarity index 70%
rename from res/layout/phone_favorites_fragment.xml
rename to res/layout/speed_dial_fragment.xml
index 23987a8..58a7b24 100644
--- a/res/layout/phone_favorites_fragment.xml
+++ b/res/layout/speed_dial_fragment.xml
@@ -21,8 +21,7 @@
android:layout_height="match_parent"
android:divider="?android:attr/dividerHorizontal"
android:showDividers="end"
- android:clipChildren="false"
- android:background="@color/background_dialer_list_items">
+ android:clipChildren="false">
<FrameLayout
android:id="@+id/contact_tile_frame"
@@ -30,33 +29,26 @@
android:layout_height="match_parent"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
- >
-
+ android:paddingStart="@dimen/favorites_row_start_padding"
+ android:paddingEnd="@dimen/favorites_row_end_padding" >
<com.android.dialer.list.PhoneFavoriteListView
android:id="@+id/contact_tile_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:paddingTop="@dimen/contact_tile_list_padding_top"
+ android:paddingTop="@dimen/favorites_row_top_padding"
+ android:numColumns="@integer/contact_tile_column_count_in_favorites"
android:clipToPadding="false"
android:fadingEdge="none"
- android:divider="@null" />
-
- <ImageView
- android:id="@+id/contact_tile_drag_shadow_overlay"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:visibility="gone"/>
+ android:divider="@null"
+ android:paddingBottom="@dimen/floating_action_button_list_bottom_padding"
+ android:nestedScrollingEnabled="true" />
</FrameLayout>
<include
- android:id="@+id/phone_no_favorites_view"
+ android:id="@+id/empty_list_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_below="@id/contact_tile_frame"
- android:layout_alignParentLeft="true"
- android:layout_alignParentStart="true"
- android:layout_alignParentBottom="true"
- layout="@layout/phone_no_favorites"
+ layout="@layout/empty_list_view"
android:visibility="gone"/>
</RelativeLayout>
diff --git a/res/menu/call_details_options.xml b/res/menu/call_details_options.xml
index 39c8a67..a48687e 100644
--- a/res/menu/call_details_options.xml
+++ b/res/menu/call_details_options.xml
@@ -16,13 +16,15 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/menu_trash"
- android:icon="@drawable/ic_menu_delete_dk"
+ android:icon="@drawable/ic_calllog_delete"
android:showAsAction="ifRoom"
android:title="@string/recentCalls_trashVoicemail"
android:onClick="onMenuTrashVoicemail"
/>
<item
android:id="@+id/menu_remove_from_call_log"
+ android:icon="@drawable/ic_calllog_delete"
+ android:showAsAction="ifRoom"
android:title="@string/recentCalls_removeFromRecentList"
android:onClick="onMenuRemoveFromCallLog"
/>
diff --git a/res/menu/dialpad_options.xml b/res/menu/dialpad_options.xml
index 0727dd5..311a5ee 100644
--- a/res/menu/dialpad_options.xml
+++ b/res/menu/dialpad_options.xml
@@ -15,18 +15,23 @@
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item
- android:id="@+id/menu_add_contacts"
- android:title="@string/recentCalls_addToContact"
- android:showAsAction="withText"
- android:orderInCategory="1" />
+ android:id="@+id/menu_add_contact"
+ android:title="@string/add_contact"
+ android:showAsAction="withText" />
+ <item
+ android:id="@+id/menu_select_subscription"
+ android:title="@string/menu_select_subscription"
+ android:showAsAction="withText" />
<item
android:id="@+id/menu_2s_pause"
android:title="@string/add_2sec_pause"
- android:showAsAction="withText"
- android:orderInCategory="1" />
+ android:showAsAction="withText" />
<item
android:id="@+id/menu_add_wait"
android:title="@string/add_wait"
- android:showAsAction="withText"
- android:orderInCategory="1" />
+ android:showAsAction="withText" />
+ <item
+ android:id="@+id/menu_send_message"
+ android:title="@string/menu_sendTextMessage"
+ android:showAsAction="withText" />
</menu>
diff --git a/res/menu/dialtacts_options.xml b/res/menu/dialtacts_options.xml
index 7e84818..558cbd8 100644
--- a/res/menu/dialtacts_options.xml
+++ b/res/menu/dialtacts_options.xml
@@ -14,6 +14,14 @@
limitations under the License.
-->
<menu xmlns:android="http://schemas.android.com/apk/res/android">
+
+ <item
+ android:id="@+id/menu_history"
+ android:icon="@drawable/ic_menu_history_lt"
+ android:title="@string/action_menu_call_history_description" />
+ <item
+ android:id="@+id/menu_select_subscription"
+ android:title="@string/menu_select_subscription" />
<item
android:id="@+id/menu_import_export"
android:title="@string/menu_import_export" />
@@ -24,9 +32,6 @@
android:id="@+id/menu_add_contact"
android:title="@string/menu_newContact"/>
<item
- android:id="@+id/menu_all_contacts"
- android:title="@string/menu_allContacts"/>
- <item
android:id="@+id/menu_call_settings"
android:title="@string/call_settings"
android:orderInCategory="2" />
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 9c97713..f360c57 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Maak oproeprekord skoon"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Vee stemboodskap uit"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Deel stemboodskap"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Oproeprekord is leeg."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Jou oproeprekord is leeg."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Vee oproeprekord uit?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Al jou oproeprekords sal uitgevee word."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Vee tans oproeprekord uit..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Buffering…"</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Haal stemboodskappe…"</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Kon nie stemboodskap haal nie."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Nuut"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Ouer"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Slegs oproepe met stemboodskappe"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Slegs inkomende oproepe"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Slegs uitgaande oproepe"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"ster"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"nul"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"huts"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"stemboodskap"</string>
<string name="description_search_button" msgid="3660807558587384889">"soek"</string>
<string name="description_dial_button" msgid="1274091017188142646">"bel"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"terugvee"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"nommer om te skakel"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Oproepgeskiedenis"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Meer opsies"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"belblad"</string>
<string name="menu_copy" msgid="6108677035381940698">"Kopieer"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Wys slegs uitgaande"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Wys slegs inkomende"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Wys slegs misgeloop"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Wys net stemboodskappe"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Wys alle oproepe"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Voeg kontak by"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Voeg 2-sek.-pouse by"</string>
<string name="add_wait" msgid="3360818652790319634">"Voeg wagtyd by"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Kies intekening"</string>
<string name="call_settings" msgid="7666474782093693667">"Instellings"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Nuwe kontak"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Alle kontakte"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Oproepdetails"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Kon nie details vir die versoekte oproep lees nie."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Gebruik raak-nommerbord"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Uitgaande oproep"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Gemiste oproep"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Stemboodskap"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Voeg kontak by"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Bekyk kontak <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Bel <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Kontakbesonderhede van <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Nuwe stemboodskap."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> oproepe."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Stuur teksboodskap aan <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Ongeluisterde stemboodskap"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Begin stemsoektog"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Bel <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Onbekend"</string>
<string name="voicemail" msgid="3851469869202611441">"Stemboodskap"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Laai tans van SIM-kaart af…"</string>
<string name="simContacts_title" msgid="27341688347689769">"SIM-kaartkontakte"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Heraktiveer die Mense-program om hierdie kenmerk te gebruik."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Tik \'n naam of foon"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Alles"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Gemis"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Geen onlangsgemiste oproepe nie."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Geen onlangse stemposse nie."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Wys alle kontakte"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Stemsoektog is nie beskikbaar nie."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Kan nie \'n foonoproep maak nie want die Foon-program is gedeaktiveer."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Geen geïnstalleerde aktiwiteit beskikbaar om gekose handeling te hanteer nie."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Voer \'n naam of foonnommer in"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Jy het nie onlangs enige oproepe gemis nie."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Jy het geen onlangse stemposse nie."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Wys net gunstelinge"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Geskiedenis"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Alles"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Gemis"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Stemboodskap"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Spoedbel"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Onlangse kontakte"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Kontakte"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Verwyder uit gunstelinge"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Ontdoen"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Bel <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Voeg by kontakte"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Bekyk volledige oproepgeskiedenis"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> nuwe gemiste oproepe"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Spoedbel beteken jy raak een keer \ngunstelinge en nommers\n wat jy gereeld bel, te kontak."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Jy het geen kontakte nie."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Tik prent om alle getalle te sien of druk en hou om te herorganiseer"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Maak toe"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Verwyder"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ALLE KONTAKTE"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"BEL TERUG"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"LUISTER"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"BESONDERHEDE"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Het oproep vanaf <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g> gemis."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Het oproep vanaf <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g> geantwoord."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Oproep na <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Bel <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> terug"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Luister na stemboodskap vanaf <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Oproepbesonderhede vir <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Oproeprekord-inskrywing is uitgevee."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Vandag"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Gister"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Verlede week"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Ouer"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Oproeplys"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Skakel luidspreker aan."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Skakel luidspreker af."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Speel vinniger."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Speel stadiger."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Begin of laat wag speel."</string>
</resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 125af10..a5f35b4 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -26,12 +26,12 @@
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"ከመደወል በፊት ቁጥር አርትዕ"</string>
<string name="recentCalls_addToContact" msgid="1429899535546487008">"ወደ ዕውቂያዎች አክል"</string>
<string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"ከጥሪ ማስታወሻ አስወግድ"</string>
- <string name="recentCalls_deleteAll" msgid="6352364392762163704">"የጥሪ ማስታወሻ አጥራ"</string>
+ <string name="recentCalls_deleteAll" msgid="6352364392762163704">"የጥሪ ማስታወሻ አጽዳ"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"የድምፅ መልዕክት ሰርዝ"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"የድምፅ መልዕክት አጋራ"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"ምዝግብ ማስታወሻባዶ ነው..."</string>
- <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"የጥሪ ማስታወሻ አጥራ"</string>
- <string name="clearCallLogConfirmation" msgid="5043563133171583152">"ሁሉም የጥሪ ማህደሮችህ ይሰረዛሉ፡፡"</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"የጥሪ ምዝግብ ማስታወሻዎ ባዶ ነው።"</string>
+ <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"የጥሪ ማስታወሻ አጽዳ"</string>
+ <string name="clearCallLogConfirmation" msgid="5043563133171583152">"ሁሉም የጥሪ ማህደሮችዎ ይሰረዛሉ።"</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"የጥሪ ምዝግብ ማስታወሻ በማጥራት ላይ…"</string>
<plurals name="notification_voicemail_title">
<item quantity="one" msgid="1746619685488504230">"የድምፅ መልዕክት"</item>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"በማቋት ላይ…"</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"ድምፅ ደብዳቤ ፈልጎ በማግኘት ላይ…"</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"ድምፅ ደብዳቤን ፈልጎ ማግኘት አልተቻለም፡፡"</string>
- <string name="call_log_new_header" msgid="846546437517724715">"አዲስ"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"የድሮ"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"የድምጽ መልዕክት ያላቸው ጥሪዎች ብቻ"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"ገቢ ጥሪዎች ብቻ"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"ወጪ ጥሪዎች ብቻ"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"ኮከብ"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"ዜሮ"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"ፓውንድ"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"የድምፅ መልዕክት"</string>
<string name="description_search_button" msgid="3660807558587384889">"ፍለጋ"</string>
<string name="description_dial_button" msgid="1274091017188142646">"ደውል"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"የኋሊት ደምሳሽ"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"ቁጥር ለመደወል"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"የስልክ ጥሪ ታሪክ"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"ተጨማሪ አማራጮች"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"የመደወያ ሰሌዳ"</string>
<string name="menu_copy" msgid="6108677035381940698">"ቅዳ"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"ወጪዎቹን ብቻ አሳይ"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"ገቢዎቹን ብቻ አሳይ"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"ያመለጡትን ብቻ አሳይ"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"የድምፅ መልዕክቶች ብቻ አሳይ"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"ሁሉንም ጥሪዎች አሳይ"</string>
- <string name="add_2sec_pause" msgid="9214012315201040129">"2 ሰከንድ ፋታ አክል"</string>
- <string name="add_wait" msgid="3360818652790319634">"ጠብቅአክል"</string>
+ <string name="add_contact" msgid="8875804371377471164">"እውቂያ አክል"</string>
+ <string name="add_2sec_pause" msgid="9214012315201040129">"2 ሴኮንድ ፋታ አክል"</string>
+ <string name="add_wait" msgid="3360818652790319634">"መጠበቅ አክል"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"የደንበኝነት ምዝገባ ምረጥ"</string>
<string name="call_settings" msgid="7666474782093693667">"ቅንብሮች"</string>
<string name="menu_newContact" msgid="1209922412763274638">"አዲስ ዕውቅያ"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"ሁሉም ዕውቂያዎች"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"የጥሪ ዝርዝሮች"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"ለተጠየቀው ጥሪዝርዝሮችንማንበብ አልተቻለም።"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"የድምፅ ቁልፍ ሰሌዳን ንካ"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"ወጪ ጥሪ"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"ያመለጠ ጥሪ"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"የድምፅ መልዕክት"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"እውቅያዎች አክል"</string>
<string name="description_view_contact" msgid="5205669345700598415">"ዕውቂያ <xliff:g id="NAME">%1$s</xliff:g> ዕይ"</string>
<string name="description_call" msgid="3443678121983852666">"ጥሪ <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"የ<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> እውቂያ ዝርዝሮች"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"አዲስ የድምጽ መልዕክት።"</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> ጥሪዎች።"</string>
<string name="description_send_text_message" msgid="7803126439934046891">"የፅሁፍ መልዕክት ወደ <xliff:g id="NAME">%1$s</xliff:g> ላክ"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"ያልተሰማ የድምፅመልዕክት"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"በድምፅ ፍለጋ ይጀምሩ"</string>
<string name="menu_callNumber" msgid="997146291983360266">"ደውል<xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"ያልታወቀ"</string>
<string name="voicemail" msgid="3851469869202611441">"የድምፅ መልዕክት"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"ከSIM ካርድ ላይ በመጫን ላይ..."</string>
<string name="simContacts_title" msgid="27341688347689769">"የSIM ካርድ ዕውቂያዎች"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"ይህንን ባህሪ ለመጠቀም የሰዎች መተግበሪያውን ዳግም ያንቁት።"</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"ስም ወይም ስልክ ይተይቡ"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"ሁሉም"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"ያመለጡ"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"ምንም በቅርብ ጊዜ ያመለጡ ጥሪዎች የሉም።"</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"ምንም የቅርብ ጊዜ የድምጽ መልዕክቶች የሉልም።"</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"ሁሉንም ዕውቂያዎች አሳይ"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"የድምጽ ፍለጋ አይገኝም።"</string>
+ <string name="call_not_available" msgid="8941576511946492225">"የስልክ መተግበሪያው ስለተሰናከለ የስልክ ጥሪ ማድረግ አይቻልም።"</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"የተመረጠውን ድርጊት ለማከናወን ምንም የተጫነ እንቅስቃሴ አይገኝም።"</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"ስም ወይም ስልክ ቁጥር ይተይቡ"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"ምንም የቅርብ ጊዜ ያመለጡ ጥሪዎች የልዎትም።"</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"ምንም የቅርብ ጊዜ የድምጽ መልእክቶች የልዎትም።"</string>
<string name="show_favorites_only" msgid="5520072531022614595">"ተወዳጆችን ብቻ አሳይ"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"ታሪክ"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"ሁሉም"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"ያመለጡ"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"የድምፅ መልዕክት"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"አቋራጭ መደወያ"</string>
+ <string name="tab_recents" msgid="929949073851377206">"የቅርብ ጊዜዎቹ"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"ዕውቂያዎች"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"ከተወዳጆች ውስጥ ተወግዷል።"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"ቀልብስ"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"ለ<xliff:g id="NUMBER">%s</xliff:g> ደውል"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"ወደ ዕውቂያዎች አክል"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"ሙሉ የጥሪ ታሪኮችን ይመልከቱ"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> አዲስ ያልተመለሱ ጥሪዎች"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"የፍጥነት መደወያ አንድ ጊዜ ብቻ በመንካት በተደጋጋሚ ለሚደውሉላቸው \nቁጥሮችና ለተወዳጆች\n መደወያ ነው።"</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"እውቂያዎች የሉዎትም።"</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"ሁሉንም ቁጥሮች ለማየት ምስሉን መታ ያድርጉ ወይም ቅደም ተከተላቸውን ለማስተካከል ተጭነው ይያዙ"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"አሰናብት"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"አስወግድ"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ሁሉም እውቂያዎች"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"መልሰህ ደውል"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"አዳምጥ"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"ዝርዝሮች"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"የ<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>፣ <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>፣ <xliff:g id="TIMEOFCALL">%3$s</xliff:g> ጥሪ አምልጠዎታል።"</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"የ<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>፣ <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>፣ <xliff:g id="TIMEOFCALL">%3$s</xliff:g> ጥሪ አንስተዋል።"</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"ለ<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>፣ <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>፣ <xliff:g id="TIMEOFCALL">%3$s</xliff:g> ይደውሉ።"</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"ለ<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> መልሰው ይደውሉ"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"የ<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>ን የድምጽ መልዕክት ያዳምጡ"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"የ<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> የጥሪ ዝርዝሮች"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"የጥሪ ምዝግብ ማስታወሻ ግቤት ተሰርዟል።"</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"ዛሬ"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"ትላንት"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"ያለፈው ሳምንት"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"የቆየ"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"የጥሪ ዝርዝር"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"ድምጽ ማጉያን አብራ።"</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"ድምጽ ማጉያን አጥፋ።"</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"በፍጥነት አጫውት።"</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"በዝግታ አጫውት።"</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"መልሰህ አጫውትን አስጀምር ወይም ለአፍታ አቁም።"</string>
</resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 426fdcd..ea6b221 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"محو سجل المكالمات"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"حذف بريد صوتي"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"مشاركة البريد الصوتي"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"سجل المكالمات فارغ."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"إن سجل المكالمات فارغ."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"محو سجل المكالمات؟"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"سيتم حذف جميع سجلات المكالمات."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"جارٍ محو سجل المكالمات..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"جارٍ التخزين مؤقتًا..."</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"جارٍ جلب البريد الصوتي..."</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"تعذر جلب البريد الصوتي."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"جديد"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"أقدم"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"المكالمات التي تشتمل على بريد صوتي فقط"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"المكالمات الواردة فقط"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"المكالمات الصادرة فقط"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"نجمة"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"صفر"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"رنين"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"البريد الصوتي"</string>
<string name="description_search_button" msgid="3660807558587384889">"بحث"</string>
<string name="description_dial_button" msgid="1274091017188142646">"طلب"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"الرقم الذي سيتم طلبه"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"سجل المكالمات"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"مزيد من الخيارات"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"لوحة الطلب"</string>
<string name="menu_copy" msgid="6108677035381940698">"نسخ"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"عرض الصادر فقط"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"عرض الوارد فقط"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"عرض الفائت فقط"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"إظهار رسائل البريد الصوتي فقط"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"عرض جميع المكالمات"</string>
- <string name="add_2sec_pause" msgid="9214012315201040129">"إضافة فترة إيقاف مؤقت مدتها ثانيتان"</string>
+ <string name="add_contact" msgid="8875804371377471164">"إضافة جهة اتصال"</string>
+ <string name="add_2sec_pause" msgid="9214012315201040129">"إضافة ثانيتين إيقاف مؤقت"</string>
<string name="add_wait" msgid="3360818652790319634">"إضافة انتظار"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"تحديد اشتراك"</string>
<string name="call_settings" msgid="7666474782093693667">"الإعدادات"</string>
<string name="menu_newContact" msgid="1209922412763274638">"جهة اتصال جديدة"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"جميع جهات الاتصال"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"تفاصيل المكالمة"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"تعذرت قراءة تفاصيل المكالمة المطلوبة."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"استخدام لوحة مفاتيح نغمات باللمس"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"مكالمة صادرة"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"مكالمة فائتة"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"البريد الصوتي"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"إضافة جهة اتصال"</string>
<string name="description_view_contact" msgid="5205669345700598415">"عرض جهة الاتصال <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"الاتصال بـ <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"تفاصيل جهة الاتصال بـ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"بريد صوتي جديد"</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> من المكالمات."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"إرسال رسالة نصية إلى <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"البريد الصوتي غير المسموع"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"بدء البحث الصوتي"</string>
<string name="menu_callNumber" msgid="997146291983360266">"الاتصال بالرقم <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"غير معروف"</string>
<string name="voicemail" msgid="3851469869202611441">"البريد الصوتي"</string>
@@ -126,28 +126,58 @@
<string name="dialerDialpadHintText" msgid="5824490365898349041">"طلب لإضافة مكالمة"</string>
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"عدد الدقائق:<xliff:g id="MINUTES">%s</xliff:g>، عددالثواني: <xliff:g id="SECONDS">%s</xliff:g>"</string>
<string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"لم يتم إرسال المكالمة"</string>
- <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"لإعداد البريد الصوتي، انتقل إلى القائمة > الإعدادات."</string>
+ <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"لإعداد البريد الصوتي، انتقل إلى القائمة > الإعدادات."</string>
<string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"للاتصال بالبريد الصوتي، يجب أولاً إيقاف وضع الطائرة."</string>
<string name="contact_list_loading" msgid="5488620820563977329">"جارٍ التحميل..."</string>
<string name="imei" msgid="3045126336951684285">"IMEI"</string>
<string name="meid" msgid="6210568493746275750">"MEID"</string>
- <string name="simContacts_emptyLoading" msgid="6700035985448642408">"جارٍ التحميل من بطاقة SIM…"</string>
- <string name="simContacts_title" msgid="27341688347689769">"بطاقة SIM وجهات الاتصال"</string>
+ <string name="simContacts_emptyLoading" msgid="6700035985448642408">"جارٍ التحميل من بطاقة SIM…"</string>
+ <string name="simContacts_title" msgid="27341688347689769">"بطاقة SIM وجهات الاتصال"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"أعد تمكين تطبيق الأشخاص لاستخدام هذه الميزة."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"اكتب اسمًا أو رقم هاتف"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"الكل"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"فائتة"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"لا توجد مكالمات فائتة حديثة."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"لا توجد رسائل بريد صوتي حديثة."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"عرض جميع جهات الاتصال"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"لا تتوفر إمكانية البحث الصوتي."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"يتعذر إجراء مكالمة هاتفية نظرًا لأنه تم تعطيل تطبيق الهاتف."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"لا يتوفر نشاط مثبَّت للتعامل مع الإجراء المحدد."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"أدخل اسمًا أو رقم هاتف"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"ليست لديك أية مكالمات فائتة مؤخرًا."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"ليست لديك أية رسائل بريد صوتي مؤخرًا."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"عرض المفضلة فقط"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"السجل"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"الكل"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"فائتة"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"البريد الصوتي"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"الاتصال السريع"</string>
+ <string name="tab_recents" msgid="929949073851377206">"الحديثة"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"جهات الاتصال"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"تمت إزالة جهة الاتصال من المفضلة"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"تراجع"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"الاتصال بالرقم <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"إضافة إلى جهات الاتصال"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"عرض سجل المكالمات بالكامل"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> من المكالمات الجديدة الفائتة"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"يُعد الاتصال السريع اتصالاً بلمسة واحدة\nللأرقام المفضلة لديك والأرقام\n التي تتصل بها بشكلٍ متكرر."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"ليست لديك أية جهات اتصال."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"انقر على الصورة للاطلاع على كل الأرقام أو اضغط مع الاستمرار لإعادة الترتيب"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"تجاهل"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"إزالة"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"جميع جهات الاتصال"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"معاودة الاتصال"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"استماع"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"التفاصيل"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"مكالمة فائتة من <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>، <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>، <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"الرد على مكالمة من <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>، <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>، <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"اتصال بـ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>، <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>، <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"معاودة الاتصال بـ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"استماع إلى بريد صوتي من <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"تفاصيل الاتصال لـ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"تم حذف إدخال سجل المكالمات."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"اليوم"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"أمس"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"الأسبوع الماضي"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"أقدم"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"قائمة الاتصال"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"تشغيل مكبر الصوت."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"تعطيل مكبر الصوت."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"تشغيل أسرع."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"تشغيل أقل سرعة."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"بدء التشغيل أو إيقافه مؤقتًا."</string>
</resources>
diff --git a/res/values-az-rAZ/strings.xml b/res/values-az-rAZ/strings.xml
new file mode 100644
index 0000000..11b5bef
--- /dev/null
+++ b/res/values-az-rAZ/strings.xml
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="8490255569343340580">"Nömrə yığan"</string>
+ <string name="launcherDialer" msgid="8636288196618486553">"Telefon"</string>
+ <string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
+ <string name="recentCallsIconLabel" msgid="1419116422359067949">"Zəng jurnalı"</string>
+ <string name="menu_sendTextMessage" msgid="6937343460284499306">"Mətnli mesaj göndərin"</string>
+ <string name="recentCalls_callNumber" msgid="1756372533999226126">"Zəng <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Zəng etmədən öncə nömrəyə düzəliş edin"</string>
+ <string name="recentCalls_addToContact" msgid="1429899535546487008">"Kontaktlara əlavə edin"</string>
+ <string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Zəng jurnalından silin"</string>
+ <string name="recentCalls_deleteAll" msgid="6352364392762163704">"Zəng jurnalını təmizləyin"</string>
+ <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Səsli məktubu silin"</string>
+ <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Səsli məktubu paylaşın"</string>
+ <string name="recentCalls_empty" msgid="247053222448663107">"Zəng jurnalı boşdur."</string>
+ <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Zəng jurnalı silinsin?"</string>
+ <string name="clearCallLogConfirmation" msgid="5043563133171583152">"Bütün zəng qeydləriniz silinəcək."</string>
+ <string name="clearCallLogProgress_title" msgid="8365943000154295771">"Zəng jurnalı silinir..."</string>
+ <plurals name="notification_voicemail_title">
+ <item quantity="one" msgid="1746619685488504230">"Səsli məktub"</item>
+ <item quantity="other" msgid="5513481419205061254">"<xliff:g id="COUNT">%1$d</xliff:g> Səsli məktub"</item>
+ </plurals>
+ <string name="notification_action_voicemail_play" msgid="6113133136977996863">"Oxudun"</string>
+ <string name="notification_voicemail_callers_list" msgid="1153954809339404149">"<xliff:g id="NEWER_CALLERS">%1$s</xliff:g>, <xliff:g id="OLDER_CALLER">%2$s</xliff:g>"</string>
+ <string name="notification_new_voicemail_ticker" msgid="895342132049452081">"<xliff:g id="CALLER">%1$s</xliff:g> adlı şəxsdən yeni səsli məktub"</string>
+ <string name="voicemail_playback_error" msgid="1811242131549854624">"Səsli məktub oxudula bilmədi."</string>
+ <string name="voicemail_buffering" msgid="738287747618697097">"Buferlənir..."</string>
+ <string name="voicemail_fetching_content" msgid="877911315738258780">"Səsli məktub əldə edilir..."</string>
+ <string name="voicemail_fetching_timout" msgid="6691792377574905201">"Səsli məktub əldə edilə bilmədi."</string>
+ <string name="call_log_voicemail_header" msgid="3945407886667089173">"Yalnız səsli məktublu zənglər"</string>
+ <string name="call_log_incoming_header" msgid="2787722299753674684">"Yalnız daxil olan zənglər"</string>
+ <string name="call_log_outgoing_header" msgid="761009180766735769">"Yalnız gedən zənglər"</string>
+ <string name="call_log_missed_header" msgid="8017148056610855956">"Yalnız buraxılmış zənglər"</string>
+ <string name="voicemail_status_voicemail_not_available" msgid="3021980206152528883">"Səsli poçt serverinə birləşmək olmur."</string>
+ <string name="voicemail_status_messages_waiting" msgid="7113421459602803605">"Səsli poçt serveri ilə bağlantı yaratmaq olmur. Yeni səsli poçtlar gözlənilir."</string>
+ <string name="voicemail_status_configure_voicemail" msgid="3738537770636895689">"Səsli poçtunuzu quraşdırın."</string>
+ <string name="voicemail_status_audio_not_available" msgid="3369618334553341626">"Audio əlçatımlı deyil."</string>
+ <string name="voicemail_status_action_configure" msgid="8671796489912239589">"Quraşdırın"</string>
+ <string name="voicemail_status_action_call_server" msgid="1824816252288551794">"Səsli poçta zəng edin"</string>
+ <string name="voicemail_speed_slowest" msgid="1733460666177707312">"Ən alçaq sürət"</string>
+ <string name="voicemail_speed_slower" msgid="1508601287347216244">"Zəif sürət"</string>
+ <string name="voicemail_speed_normal" msgid="9033988544627228892">"Normal sürət"</string>
+ <string name="voicemail_speed_faster" msgid="2019965121475935488">"Yüksək sürət"</string>
+ <string name="voicemail_speed_fastest" msgid="5758712343491183292">"Ən yüksək sürət"</string>
+ <string name="call_log_item_count_and_date" msgid="7641933305703520787">"(<xliff:g id="COUNT">%1$d</xliff:g>) <xliff:g id="DATE">%2$s</xliff:g>"</string>
+ <string name="sms_disambig_title" msgid="5846266399240630846">"Nömrə seçin"</string>
+ <string name="call_disambig_title" msgid="4392886850104795739">"Nömrə seçin"</string>
+ <string name="make_primary" msgid="5829291915305113983">"Bu seçimi yadda saxla"</string>
+ <string name="description_image_button_one" msgid="1740638037139856139">"bir"</string>
+ <string name="description_image_button_two" msgid="5882638439003731308">"iki"</string>
+ <string name="description_image_button_three" msgid="8709731759376015180">"üç"</string>
+ <string name="description_image_button_four" msgid="3530239685642246130">"dörd"</string>
+ <string name="description_image_button_five" msgid="1182465427501188413">"beş"</string>
+ <string name="description_image_button_six" msgid="2093656269261415475">"altı"</string>
+ <string name="description_image_button_seven" msgid="2450357020447676481">"yeddi"</string>
+ <string name="description_image_button_eight" msgid="6969435115163287801">"səkkiz"</string>
+ <string name="description_image_button_nine" msgid="7857248695662558323">"doqquz"</string>
+ <string name="description_image_button_star" msgid="3365919907520767866">"ulduz"</string>
+ <string name="description_image_button_zero" msgid="4133108949401820710">"sıfır"</string>
+ <string name="description_image_button_pound" msgid="3039765597595889230">"funt"</string>
+ <string name="description_voicemail_button" msgid="3402506823655455591">"Səsli məktub"</string>
+ <string name="description_search_button" msgid="3660807558587384889">"axtarış"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"nömrə yığın"</string>
+ <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"yığmaq üçün nömrə"</string>
+ <string name="action_menu_call_history_description" msgid="9018442816219748968">"Çağrı Tarixçəsi"</string>
+ <string name="action_menu_overflow_description" msgid="2303272250613084574">"Daha çox seçim"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"nömrə yığımı paneli"</string>
+ <string name="menu_copy" msgid="6108677035381940698">"Kopyalayın"</string>
+ <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Yalnız gedəni göstərin"</string>
+ <string name="menu_show_incoming_only" msgid="7534206815238877417">"Yalnız gələni göstərin"</string>
+ <string name="menu_show_missed_only" msgid="154473166059743996">"Yalnız buraxılmışı göstərin"</string>
+ <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Yalnız səsli mesajları göstərin"</string>
+ <string name="menu_show_all_calls" msgid="7560347482073345885">"Bütün zəngləri göstərin"</string>
+ <string name="add_2sec_pause" msgid="9214012315201040129">"2 saniyəlik pauza əlavə edin"</string>
+ <string name="add_wait" msgid="3360818652790319634">"Gözləmə əlavə edin"</string>
+ <string name="call_settings" msgid="7666474782093693667">"Ayarlar"</string>
+ <string name="menu_newContact" msgid="1209922412763274638">"Yeni kontakt"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Bütün kontaktlar"</string>
+ <string name="callDetailTitle" msgid="5340227785196217938">"Zəng detalları"</string>
+ <string name="toast_call_detail_error" msgid="7200975244804730096">"Sorğu göndərilmiş zəng üçün detallar oxuna bilmədi."</string>
+ <string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Toxunma ton klaviaturasını istifadə edin"</string>
+ <string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Davam edən zəngə qayıdın"</string>
+ <string name="dialer_addAnotherCall" msgid="4205688819890074468">"Zəng əlavə edin"</string>
+ <string name="type_incoming" msgid="6502076603836088532">"Gələn zəng"</string>
+ <string name="type_outgoing" msgid="343108709599392641">"Gedən zəng"</string>
+ <string name="type_missed" msgid="2720502601640509542">"Buraxılmış zəng"</string>
+ <string name="type_voicemail" msgid="5153139450668549908">"Səsli poçt"</string>
+ <string name="actionIncomingCall" msgid="6028930669817038600">"Gələn zənglər"</string>
+ <string name="description_call_log_play_button" msgid="651182125650429846">"Səsli məktubu oxudun"</string>
+ <string name="description_call_log_incoming_call" msgid="4485427487637250143">"Gələn zəng"</string>
+ <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Gedən zəng"</string>
+ <string name="description_call_log_missed_call" msgid="2242805209983708825">"Buraxılmış zəng"</string>
+ <string name="description_call_log_voicemail" msgid="4600798771975158948">"Səsli məktub"</string>
+ <string name="description_add_contact" msgid="3103414772502485851">"Kontakt əlavə edin"</string>
+ <string name="description_view_contact" msgid="5205669345700598415">"<xliff:g id="NAME">%1$s</xliff:g> adlı kontakta baxın"</string>
+ <string name="description_call" msgid="3443678121983852666">"Zəng edin: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_send_text_message" msgid="7803126439934046891">"<xliff:g id="NAME">%1$s</xliff:g> mesaj göndər"</string>
+ <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Eşidilməmiş səsli mesaj"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Səs axtarışına başlayın"</string>
+ <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"<xliff:g id="NUMBER">%s</xliff:g> zəng edin"</string>
+ <string name="unknown" msgid="740067747858270469">"Naməlum"</string>
+ <string name="voicemail" msgid="3851469869202611441">"Səsli poçt"</string>
+ <string name="private_num" msgid="6374339738119166953">"Şəxsi nömrə"</string>
+ <string name="payphone" msgid="4864313342828942922">"Telefon ödənişi"</string>
+ <string name="dialerKeyboardHintText" msgid="5401660096579787344">"Nömrə yığmaq üçün klaviaturadan istifadə ediin"</string>
+ <string name="dialerDialpadHintText" msgid="5824490365898349041">"Zəng əlavə etmək üçün nömrə yığın"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> dəqiqə <xliff:g id="SECONDS">%s</xliff:g> saniyə"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Zəng edilmədi"</string>
+ <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Səsli poçtu ayarlamaq üçün Menyu, sonra isə > Ayarlara daxil olun."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Səsli poçta zəng etmək üçün Təyyarə rejimini söndürün."</string>
+ <string name="contact_list_loading" msgid="5488620820563977329">"Yüklənir…"</string>
+ <string name="imei" msgid="3045126336951684285">"IMEI"</string>
+ <string name="meid" msgid="6210568493746275750">"MEID"</string>
+ <string name="simContacts_emptyLoading" msgid="6700035985448642408">"SIM kartdan yüklənir..."</string>
+ <string name="simContacts_title" msgid="27341688347689769">"SIM kart kontaktları"</string>
+ <string name="add_contact_not_available" msgid="1419207765446461366">"Bu özəlliyi istifadə etmək üçün Adamlar tətbiqinə yenidən icazə verin."</string>
+ <!-- no translation found for dialer_hint_find_contact (8798845521253672403) -->
+ <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Bütün"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Buraxılmış"</string>
+ <string name="recentMissed_empty" msgid="5427113551557296665">"Buraxılmış zəng yoxdur"</string>
+ <string name="recentVoicemails_empty" msgid="5163114119598014048">"Səsli məktub yoxdur."</string>
+ <string name="show_all_contacts" msgid="1732256558071778056">"Bütün kontaktları göstər"</string>
+ <string name="show_favorites_only" msgid="5520072531022614595">"Yalnız seçilmişləri göstər"</string>
+ <string name="call_log_activity_title" msgid="4612824396355272023">"Tarixçə"</string>
+ <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
+ <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
+ <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
+ <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
+ <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
+ <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
+ <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
+ <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
+ <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
+ <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+ <string name="show_all_contacts_title" msgid="8395378484578221791">"Bütün kontaktlar"</string>
+ <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Bütün kontaktlar"</string>
+ <!-- no translation found for favorite_hidden (5011234945140912047) -->
+ <skip />
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Geri qaytar"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"<xliff:g id="NUMBER">%s</xliff:g> nömrəsinə zəng edin"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Kontaktlara əlavə edin"</string>
+</resources>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
new file mode 100644
index 0000000..59f922c
--- /dev/null
+++ b/res/values-az/strings.xml
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="8490255569343340580">"Nömrə yığan"</string>
+ <string name="launcherDialer" msgid="8636288196618486553">"Telefon"</string>
+ <string name="dialerIconLabel" msgid="6500826552823403796">"Telefon"</string>
+ <string name="recentCallsIconLabel" msgid="1419116422359067949">"Zəng jurnalı"</string>
+ <string name="menu_sendTextMessage" msgid="6937343460284499306">"Mətnli mesaj göndərin"</string>
+ <string name="recentCalls_callNumber" msgid="1756372533999226126">"Zəng <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Zəng etmədən öncə nömrəyə düzəliş edin"</string>
+ <string name="recentCalls_addToContact" msgid="1429899535546487008">"Kontaktlara əlavə edin"</string>
+ <string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Zəng jurnalından silin"</string>
+ <string name="recentCalls_deleteAll" msgid="6352364392762163704">"Zəng jurnalını təmizləyin"</string>
+ <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Səsli məktubu silin"</string>
+ <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Səsli məktubu paylaşın"</string>
+ <string name="recentCalls_empty" msgid="247053222448663107">"Zəng jurnalı boşdur."</string>
+ <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Zəng jurnalı silinsin?"</string>
+ <string name="clearCallLogConfirmation" msgid="5043563133171583152">"Bütün zəng qeydləriniz silinəcək."</string>
+ <string name="clearCallLogProgress_title" msgid="8365943000154295771">"Zəng jurnalı silinir..."</string>
+ <plurals name="notification_voicemail_title">
+ <item quantity="one" msgid="1746619685488504230">"Səsli məktub"</item>
+ <item quantity="other" msgid="5513481419205061254">"<xliff:g id="COUNT">%1$d</xliff:g> Səsli məktub"</item>
+ </plurals>
+ <string name="notification_action_voicemail_play" msgid="6113133136977996863">"Oxudun"</string>
+ <string name="notification_voicemail_callers_list" msgid="1153954809339404149">"<xliff:g id="NEWER_CALLERS">%1$s</xliff:g>, <xliff:g id="OLDER_CALLER">%2$s</xliff:g>"</string>
+ <string name="notification_new_voicemail_ticker" msgid="895342132049452081">"<xliff:g id="CALLER">%1$s</xliff:g> adlı şəxsdən yeni səsli məktub"</string>
+ <string name="voicemail_playback_error" msgid="1811242131549854624">"Səsli məktub oxudula bilmədi."</string>
+ <string name="voicemail_buffering" msgid="738287747618697097">"Buferlənir..."</string>
+ <string name="voicemail_fetching_content" msgid="877911315738258780">"Səsli məktub əldə edilir..."</string>
+ <string name="voicemail_fetching_timout" msgid="6691792377574905201">"Səsli məktub əldə edilə bilmədi."</string>
+ <string name="call_log_voicemail_header" msgid="3945407886667089173">"Yalnız səsli məktublu zənglər"</string>
+ <string name="call_log_incoming_header" msgid="2787722299753674684">"Yalnız daxil olan zənglər"</string>
+ <string name="call_log_outgoing_header" msgid="761009180766735769">"Yalnız gedən zənglər"</string>
+ <string name="call_log_missed_header" msgid="8017148056610855956">"Yalnız buraxılmış zənglər"</string>
+ <string name="voicemail_status_voicemail_not_available" msgid="3021980206152528883">"Səsli poçt serverinə birləşmək olmur."</string>
+ <string name="voicemail_status_messages_waiting" msgid="7113421459602803605">"Səsli poçt serveri ilə bağlantı yaratmaq olmur. Yeni səsli poçtlar gözlənilir."</string>
+ <string name="voicemail_status_configure_voicemail" msgid="3738537770636895689">"Səsli poçtunuzu quraşdırın."</string>
+ <string name="voicemail_status_audio_not_available" msgid="3369618334553341626">"Audio əlçatımlı deyil."</string>
+ <string name="voicemail_status_action_configure" msgid="8671796489912239589">"Quraşdırın"</string>
+ <string name="voicemail_status_action_call_server" msgid="1824816252288551794">"Səsli poçta zəng edin"</string>
+ <string name="voicemail_speed_slowest" msgid="1733460666177707312">"Ən alçaq sürət"</string>
+ <string name="voicemail_speed_slower" msgid="1508601287347216244">"Zəif sürət"</string>
+ <string name="voicemail_speed_normal" msgid="9033988544627228892">"Normal sürət"</string>
+ <string name="voicemail_speed_faster" msgid="2019965121475935488">"Yüksək sürət"</string>
+ <string name="voicemail_speed_fastest" msgid="5758712343491183292">"Ən yüksək sürət"</string>
+ <string name="call_log_item_count_and_date" msgid="7641933305703520787">"(<xliff:g id="COUNT">%1$d</xliff:g>) <xliff:g id="DATE">%2$s</xliff:g>"</string>
+ <string name="sms_disambig_title" msgid="5846266399240630846">"Nömrə seçin"</string>
+ <string name="call_disambig_title" msgid="4392886850104795739">"Nömrə seçin"</string>
+ <string name="make_primary" msgid="5829291915305113983">"Bu seçimi yadda saxla"</string>
+ <string name="description_image_button_one" msgid="1740638037139856139">"bir"</string>
+ <string name="description_image_button_two" msgid="5882638439003731308">"iki"</string>
+ <string name="description_image_button_three" msgid="8709731759376015180">"üç"</string>
+ <string name="description_image_button_four" msgid="3530239685642246130">"dörd"</string>
+ <string name="description_image_button_five" msgid="1182465427501188413">"beş"</string>
+ <string name="description_image_button_six" msgid="2093656269261415475">"altı"</string>
+ <string name="description_image_button_seven" msgid="2450357020447676481">"yeddi"</string>
+ <string name="description_image_button_eight" msgid="6969435115163287801">"səkkiz"</string>
+ <string name="description_image_button_nine" msgid="7857248695662558323">"doqquz"</string>
+ <string name="description_image_button_star" msgid="3365919907520767866">"ulduz"</string>
+ <string name="description_image_button_zero" msgid="4133108949401820710">"sıfır"</string>
+ <string name="description_image_button_pound" msgid="3039765597595889230">"funt"</string>
+ <string name="description_voicemail_button" msgid="3402506823655455591">"Səsli məktub"</string>
+ <string name="description_search_button" msgid="3660807558587384889">"axtarış"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"nömrə yığın"</string>
+ <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"yığmaq üçün nömrə"</string>
+ <string name="action_menu_call_history_description" msgid="9018442816219748968">"Çağrı Tarixçəsi"</string>
+ <string name="action_menu_overflow_description" msgid="2303272250613084574">"Daha çox seçim"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"nömrə yığımı paneli"</string>
+ <string name="menu_copy" msgid="6108677035381940698">"Kopyalayın"</string>
+ <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Yalnız gedəni göstərin"</string>
+ <string name="menu_show_incoming_only" msgid="7534206815238877417">"Yalnız gələni göstərin"</string>
+ <string name="menu_show_missed_only" msgid="154473166059743996">"Yalnız buraxılmışı göstərin"</string>
+ <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Yalnız səsli mesajları göstərin"</string>
+ <string name="menu_show_all_calls" msgid="7560347482073345885">"Bütün zəngləri göstərin"</string>
+ <string name="add_2sec_pause" msgid="9214012315201040129">"2 saniyəlik pauza əlavə edin"</string>
+ <string name="add_wait" msgid="3360818652790319634">"Gözləmə əlavə edin"</string>
+ <string name="call_settings" msgid="7666474782093693667">"Ayarlar"</string>
+ <string name="menu_newContact" msgid="1209922412763274638">"Yeni kontakt"</string>
+ <string name="callDetailTitle" msgid="5340227785196217938">"Zəng detalları"</string>
+ <string name="toast_call_detail_error" msgid="7200975244804730096">"Sorğu göndərilmiş zəng üçün detallar oxuna bilmədi."</string>
+ <string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Toxunma ton klaviaturasını istifadə edin"</string>
+ <string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Davam edən zəngə qayıdın"</string>
+ <string name="dialer_addAnotherCall" msgid="4205688819890074468">"Zəng əlavə edin"</string>
+ <string name="type_incoming" msgid="6502076603836088532">"Gələn zəng"</string>
+ <string name="type_outgoing" msgid="343108709599392641">"Gedən zəng"</string>
+ <string name="type_missed" msgid="2720502601640509542">"Buraxılmış zəng"</string>
+ <string name="type_voicemail" msgid="5153139450668549908">"Səsli poçt"</string>
+ <string name="actionIncomingCall" msgid="6028930669817038600">"Gələn zənglər"</string>
+ <string name="description_call_log_play_button" msgid="651182125650429846">"Səsli məktubu oxudun"</string>
+ <string name="description_call_log_incoming_call" msgid="4485427487637250143">"Gələn zəng"</string>
+ <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Gedən zəng"</string>
+ <string name="description_call_log_missed_call" msgid="2242805209983708825">"Buraxılmış zəng"</string>
+ <string name="description_call_log_voicemail" msgid="4600798771975158948">"Səsli məktub"</string>
+ <string name="description_add_contact" msgid="3103414772502485851">"Kontakt əlavə edin"</string>
+ <string name="description_view_contact" msgid="5205669345700598415">"<xliff:g id="NAME">%1$s</xliff:g> adlı kontakta baxın"</string>
+ <string name="description_call" msgid="3443678121983852666">"Zəng edin: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_send_text_message" msgid="7803126439934046891">"<xliff:g id="NAME">%1$s</xliff:g> mesaj göndər"</string>
+ <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Eşidilməmiş səsli mesaj"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Səs axtarışına başlayın"</string>
+ <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"<xliff:g id="NUMBER">%s</xliff:g> zəng edin"</string>
+ <string name="unknown" msgid="740067747858270469">"Naməlum"</string>
+ <string name="voicemail" msgid="3851469869202611441">"Səsli poçt"</string>
+ <string name="private_num" msgid="6374339738119166953">"Şəxsi nömrə"</string>
+ <string name="payphone" msgid="4864313342828942922">"Telefon ödənişi"</string>
+ <string name="dialerKeyboardHintText" msgid="5401660096579787344">"Nömrə yığmaq üçün klaviaturadan istifadə ediin"</string>
+ <string name="dialerDialpadHintText" msgid="5824490365898349041">"Zəng əlavə etmək üçün nömrə yığın"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> dəqiqə <xliff:g id="SECONDS">%s</xliff:g> saniyə"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Zəng edilmədi"</string>
+ <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Səsli poçtu ayarlamaq üçün Menyu, sonra isə > Ayarlara daxil olun."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Səsli poçta zəng etmək üçün Təyyarə rejimini söndürün."</string>
+ <string name="contact_list_loading" msgid="5488620820563977329">"Yüklənir…"</string>
+ <string name="imei" msgid="3045126336951684285">"IMEI"</string>
+ <string name="meid" msgid="6210568493746275750">"MEID"</string>
+ <string name="simContacts_emptyLoading" msgid="6700035985448642408">"SIM kartdan yüklənir..."</string>
+ <string name="simContacts_title" msgid="27341688347689769">"SIM kart kontaktları"</string>
+ <string name="add_contact_not_available" msgid="1419207765446461366">"Bu özəlliyi istifadə etmək üçün Adamlar tətbiqinə yenidən icazə verin."</string>
+ <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Ad və ya telefon yazın"</string>
+ <string name="call_log_all_title" msgid="3566738938889333307">"Bütün"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Buraxılmış"</string>
+ <string name="recentMissed_empty" msgid="5427113551557296665">"Buraxılmış zəng yoxdur"</string>
+ <string name="recentVoicemails_empty" msgid="5163114119598014048">"Səsli məktub yoxdur."</string>
+ <string name="show_all_contacts" msgid="1732256558071778056">"Bütün kontaktları göstər"</string>
+ <string name="show_favorites_only" msgid="5520072531022614595">"Yalnız seçilmişləri göstər"</string>
+ <string name="call_log_activity_title" msgid="4612824396355272023">"Tarixçə"</string>
+ <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
+ <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
+ <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
+ <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
+ <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
+ <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
+ <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
+ <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
+ <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
+ <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+ <string name="show_all_contacts_title" msgid="8395378484578221791">"Bütün kontaktlar"</string>
+ <string name="show_all_contacts_button_text" msgid="8057452310403090131">"Bütün kontaktlar"</string>
+ <string name="favorite_hidden" msgid="4837366417440391323">"Seçilmişlərdən gizlədilib"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Geri qaytar"</string>
+</resources>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
deleted file mode 100644
index 3dfb6cd..0000000
--- a/res/values-be/strings.xml
+++ /dev/null
@@ -1,162 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- ~ 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
- -->
-
-<resources xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
- <string name="applicationLabel" msgid="8490255569343340580">"Тэлефон"</string>
- <string name="launcherDialer" msgid="8636288196618486553">"Тэлефон"</string>
- <string name="dialerIconLabel" msgid="6500826552823403796">"Тэлефон"</string>
- <string name="recentCallsIconLabel" msgid="1419116422359067949">"Спіс"</string>
- <string name="menu_sendTextMessage" msgid="6937343460284499306">"Адправiць тэкставае паведамленне"</string>
- <string name="recentCalls_callNumber" msgid="1756372533999226126">"Выклікаць карыстальнiка <xliff:g id="NAME">%s</xliff:g>"</string>
- <string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Рэдагаваць нумар перад выклікам"</string>
- <string name="recentCalls_addToContact" msgid="1429899535546487008">"Дадаць у кантакты"</string>
- <string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Выдаліць са спісу выклікаў"</string>
- <string name="recentCalls_deleteAll" msgid="6352364392762163704">"Ачысціць спіс выклікаў"</string>
- <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Выдаліць галасавое паведамленне"</string>
- <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Адправiць галасавое паведамленне"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Спіс выклікаў пусты."</string>
- <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Ачысціць спіс выклікаў?"</string>
- <string name="clearCallLogConfirmation" msgid="5043563133171583152">"Усе вашы запісы выклікаў будуць выдалены."</string>
- <string name="clearCallLogProgress_title" msgid="8365943000154295771">"Выдаленне гiсторыi выклiкаў..."</string>
- <plurals name="notification_voicemail_title">
- <item quantity="one" msgid="1746619685488504230">"Галас. пошта"</item>
- <item quantity="other" msgid="5513481419205061254">"Галасавых паведамленняў: <xliff:g id="COUNT">%1$d</xliff:g>"</item>
- </plurals>
- <string name="notification_action_voicemail_play" msgid="6113133136977996863">"Прайграць"</string>
- <string name="notification_voicemail_callers_list" msgid="1153954809339404149">"<xliff:g id="NEWER_CALLERS">%1$s</xliff:g>, <xliff:g id="OLDER_CALLER">%2$s</xliff:g>"</string>
- <string name="notification_new_voicemail_ticker" msgid="895342132049452081">"Новае паведамл. ад <xliff:g id="CALLER">%1$s</xliff:g>"</string>
- <string name="voicemail_playback_error" msgid="1811242131549854624">"Немагчыма прайгр. пав. галасавой пошты"</string>
- <string name="voicemail_buffering" msgid="738287747618697097">"Запiс у буфер..."</string>
- <string name="voicemail_fetching_content" msgid="877911315738258780">"Атрыманне галасавой пошты..."</string>
- <string name="voicemail_fetching_timout" msgid="6691792377574905201">"Немагчыма атрымаць галасавую пошту."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Новы"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Старэй"</string>
- <string name="call_log_voicemail_header" msgid="3945407886667089173">"Толькi выклiкі з галасавой поштай"</string>
- <string name="call_log_incoming_header" msgid="2787722299753674684">"Толькi ўваходныя выклiкi"</string>
- <string name="call_log_outgoing_header" msgid="761009180766735769">"Толькi выходныя выклiкi"</string>
- <string name="call_log_missed_header" msgid="8017148056610855956">"Толькі прапушчаныя выклiкi"</string>
- <string name="voicemail_status_voicemail_not_available" msgid="3021980206152528883">"Немагчыма падлучыцца да сервера галасавой пошты."</string>
- <string name="voicemail_status_messages_waiting" msgid="7113421459602803605">"Немагч. далучыцца да сервера гал. пошты. Нов. галас. павед. чак."</string>
- <string name="voicemail_status_configure_voicemail" msgid="3738537770636895689">"Налада галасавой пошты."</string>
- <string name="voicemail_status_audio_not_available" msgid="3369618334553341626">"Аўдыё недаступнае."</string>
- <string name="voicemail_status_action_configure" msgid="8671796489912239589">"Стварыць"</string>
- <string name="voicemail_status_action_call_server" msgid="1824816252288551794">"Выкл. гал. пошту"</string>
- <string name="voicemail_speed_slowest" msgid="1733460666177707312">"Самая нiзкая хуткасць"</string>
- <string name="voicemail_speed_slower" msgid="1508601287347216244">"Нiзкая хуткасць"</string>
- <string name="voicemail_speed_normal" msgid="9033988544627228892">"Звычайная хуткасць"</string>
- <string name="voicemail_speed_faster" msgid="2019965121475935488">"Высокая хуткасць"</string>
- <string name="voicemail_speed_fastest" msgid="5758712343491183292">"Максімальная хуткасць"</string>
- <string name="call_log_item_count_and_date" msgid="7641933305703520787">"( <xliff:g id="COUNT">%1$d</xliff:g> ) <xliff:g id="DATE">%2$s</xliff:g>"</string>
- <string name="sms_disambig_title" msgid="5846266399240630846">"Выбар нумару"</string>
- <string name="call_disambig_title" msgid="4392886850104795739">"Выбар нумару"</string>
- <string name="make_primary" msgid="5829291915305113983">"Запомніць гэты выбар"</string>
- <string name="description_image_button_one" msgid="1740638037139856139">"адзін"</string>
- <string name="description_image_button_two" msgid="5882638439003731308">"два"</string>
- <string name="description_image_button_three" msgid="8709731759376015180">"тры"</string>
- <string name="description_image_button_four" msgid="3530239685642246130">"чатыры"</string>
- <string name="description_image_button_five" msgid="1182465427501188413">"пяць"</string>
- <string name="description_image_button_six" msgid="2093656269261415475">"шэсць"</string>
- <string name="description_image_button_seven" msgid="2450357020447676481">"сем"</string>
- <string name="description_image_button_eight" msgid="6969435115163287801">"восем"</string>
- <string name="description_image_button_nine" msgid="7857248695662558323">"дзевяць"</string>
- <string name="description_image_button_star" msgid="3365919907520767866">"зорка"</string>
- <string name="description_image_button_zero" msgid="4133108949401820710">"нуль"</string>
- <string name="description_image_button_pound" msgid="3039765597595889230">"Фунт"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"галасавая пошта"</string>
- <string name="description_search_button" msgid="3660807558587384889">"пошук"</string>
- <string name="description_dial_button" msgid="1274091017188142646">"набор"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
- <string name="description_digits_edittext" msgid="8760207516497016437">"нумар для набору"</string>
- <!-- no translation found for action_menu_call_history_description (9018442816219748968) -->
- <skip />
- <string name="action_menu_overflow_description" msgid="2303272250613084574">"Дадатковыя параметры"</string>
- <string name="menu_copy" msgid="6108677035381940698">"Капіраваць"</string>
- <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Паказаць толькі выходныя"</string>
- <string name="menu_show_incoming_only" msgid="7534206815238877417">"Паказаць толькі ўваходныя"</string>
- <string name="menu_show_missed_only" msgid="154473166059743996">"Паказаць толькі прапушчаныя"</string>
- <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Паказаць толькі галас. пошту"</string>
- <string name="menu_show_all_calls" msgid="7560347482073345885">"Паказаць усе выклікі"</string>
- <string name="add_2sec_pause" msgid="9214012315201040129">"Дадаць 2-секундную паўзу"</string>
- <string name="add_wait" msgid="3360818652790319634">"Дадаецца, чакайце"</string>
- <string name="call_settings" msgid="7666474782093693667">"Налады"</string>
- <string name="menu_newContact" msgid="1209922412763274638">"Новы кантакт"</string>
- <string name="callDetailTitle" msgid="5340227785196217938">"Падрабязнасці выкліку"</string>
- <string name="toast_call_detail_error" msgid="7200975244804730096">"Не атрымалася прачытаць падрабязнасці запытанага выкліка."</string>
- <string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Выкарыстанне тонавай клавіятуры"</string>
- <string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Звярнуцца да бягучага выкліку"</string>
- <string name="dialer_addAnotherCall" msgid="4205688819890074468">"Дадаць выклік"</string>
- <string name="type_incoming" msgid="6502076603836088532">"Уваходны выклік"</string>
- <string name="type_outgoing" msgid="343108709599392641">"Выходны выклік"</string>
- <string name="type_missed" msgid="2720502601640509542">"Прапушчаны выклік"</string>
- <string name="type_voicemail" msgid="5153139450668549908">"Галасавая пошта"</string>
- <string name="actionIncomingCall" msgid="6028930669817038600">"Уваходныя выклікі"</string>
- <string name="description_call_log_play_button" msgid="651182125650429846">"Прайграць паведамленне галасавой пошты"</string>
- <string name="description_call_log_incoming_call" msgid="4485427487637250143">"Уваходныя выклікі"</string>
- <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Выходны выклік"</string>
- <string name="description_call_log_missed_call" msgid="2242805209983708825">"Прапушчаныя выклікі"</string>
- <string name="description_call_log_voicemail" msgid="4600798771975158948">"Галасавая пошта"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Дадаць кантакт"</string>
- <string name="description_view_contact" msgid="5205669345700598415">"Прагледзець кантакт <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="description_call" msgid="3443678121983852666">"Выклік карыстальнiка <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="description_send_text_message" msgid="7803126439934046891">"Адправіць тэкставае паведамленне карыстальніку <xliff:g id="NAME">%1$s</xliff:g>"</string>
- <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Непраслуханая галасавая пошта"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
- <string name="menu_callNumber" msgid="997146291983360266">"Выклікаць <xliff:g id="NUMBER">%s</xliff:g>"</string>
- <string name="unknown" msgid="740067747858270469">"Невядомы"</string>
- <string name="voicemail" msgid="3851469869202611441">"Галасавая пошта"</string>
- <string name="private_num" msgid="6374339738119166953">"Прыватны нумар"</string>
- <string name="payphone" msgid="4864313342828942922">"Аплата тэлефона"</string>
- <string name="dialerKeyboardHintText" msgid="5401660096579787344">"Выкарыстаць клавіятуру для набору нумара"</string>
- <string name="dialerDialpadHintText" msgid="5824490365898349041">"НВыберыце, каб дадаць выклік"</string>
- <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> хв. <xliff:g id="SECONDS">%s</xliff:g> с."</string>
- <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Выклік не зроблены"</string>
- <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Каб наладзіць галасавую пошту, націсніце \"Меню\" i перайдзiце ў налады."</string>
- <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Каб зрабiць выклік галасавой пошты, спачатку адключыце рэжым палёту."</string>
- <string name="contact_list_loading" msgid="5488620820563977329">"Загрузка..."</string>
- <string name="imei" msgid="3045126336951684285">"IMEI"</string>
- <string name="meid" msgid="6210568493746275750">"MEID"</string>
- <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Загрузка з SIM-карты..."</string>
- <string name="simContacts_title" msgid="27341688347689769">"Кантакты SIM-карты"</string>
- <string name="add_contact_not_available" msgid="1419207765446461366">"Каб выкарыстоўваць гэту функцыю, паўторна ўключыце прыкладанне \"Кантакты\"."</string>
- <!-- no translation found for dialer_hint_find_contact (9190419749917566623) -->
- <skip />
- <!-- no translation found for call_log_all_title (3566738938889333307) -->
- <skip />
- <!-- no translation found for call_log_missed_title (4541142293870638971) -->
- <skip />
- <!-- no translation found for recentMissed_empty (5427113551557296665) -->
- <skip />
- <!-- no translation found for recentVoicemails_empty (5163114119598014048) -->
- <skip />
- <!-- no translation found for show_all_contacts (1732256558071778056) -->
- <skip />
- <!-- no translation found for show_favorites_only (5520072531022614595) -->
- <skip />
- <!-- no translation found for call_log_activity_title (4612824396355272023) -->
- <skip />
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
-</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 3fec247..cb40576 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Изчистване на списъка с обажданията"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Изтриване на гласова поща"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Споделяне на гласова поща"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Списъкът на обажданията е празен."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Списъкът с обажданията е празен."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Да се изчисти ли списъкът с обаждания?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Всичките ви записи на обажданията ще бъдат изтрити."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Списъкът с обаждания се изчиства..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Буферира се..."</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Гласовата поща се извлича..."</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Гл. поща не можа да бъде извлечена."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Нови"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"По-стари"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Само обаждания с гласова поща"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Само входящи обаждания"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Само изходящи обаждания"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"звезда"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"нула"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"лира"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"гласова поща"</string>
<string name="description_search_button" msgid="3660807558587384889">"търсене"</string>
<string name="description_dial_button" msgid="1274091017188142646">"набиране"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"назад"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"номер за набиране"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"История на обажданията"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Още опции"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"клавиатура за набиране"</string>
<string name="menu_copy" msgid="6108677035381940698">"Копиране"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Показване само на изходящите"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Показване само на входящите"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Показване само на пропуснатите"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Показване само на гл. поща"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Показване на всички обаждания"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Добавяне на контакт"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Добавяне на 2-сек пауза"</string>
<string name="add_wait" msgid="3360818652790319634">"Добавяне на изчакване"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Избиране на абонамент"</string>
<string name="call_settings" msgid="7666474782093693667">"Настройки"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Нов контакт"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Всички контакти"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Подробности за обаждане"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Подробностите за заявения разговор не могат да бъдат прочетени."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Използване на тонова клавиатура"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Изходящо обаждане"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Пропуснато обаждане"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Гласова поща"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Добавяне на контакт"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Преглед на контактa <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Обаждане до <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Подробности за контакта за <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Нова гласова поща."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> обаждания."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Изпращане на SMS до <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Непрослушана гласова поща"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"–"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Стартиране на гласово търсене"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Обаждане на <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Неизвестен"</string>
<string name="voicemail" msgid="3851469869202611441">"Гласова поща"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Зарежда се от SIM карта..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Контакти от SIM карта"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Активирайте отново приложението Хора, за да използвате тази функция."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Въведете име или телефон"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Всички"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Пропуснати"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Няма скорошни пропуснати обаждания."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Няма скорошни гласови съобщения."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Показване на всички контакти"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Гласовото търсене не е налице."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Не може да се осъществи телефонно обаждане, защото приложението Телефон е деактивирано."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Няма инсталирано приложение за обработване на избраното действие."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Въведете име или тел. номер"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Нямате скорошни пропуснати обаждания."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Нямате скорошни гласови съобщения."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Показване само на любимите"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"История"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Всички"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Пропуснати"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Гл. поща"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Бързо набиране"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Скорошни"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Контакти"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Премахнато от любимите"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Отмяна"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Обаждане на <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Добавяне в контактите"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Преглед на цялата история на обажданията"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> нови пропуснати обаждания"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Бързото набиране е набиране с едно докосване\nза любимите контакти и номерата\n, на които се обаждате често."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Нямате контакти."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Докоснете изображението, за да видите всички номера, или натиснете и задръжте, за да пренаредите"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Отхвърляне"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Премахване"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ВСИЧКИ КОНТАКТИ"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"ОБРАТНО ОБАЖДАНЕ"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"ПРОСЛУШВАНЕ"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"ПОДРОБНОСТИ"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Пропуснато обаждане от <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Отговорено обаждане от <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Обаждане до <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Обратно обаждане до <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Прослушване на гласовата поща от <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Подробности за обаждането за <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Записът е изтрит от списъка с обаждания."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Днес"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Вчера"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Последната седмица"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"По-стари"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Списък с обаждания"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Включване на високоговорителя."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Изключване на високоговорителя."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"По-бързо възпроизвеждане."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"По-бавно възпроизвеждане."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Стартиране или поставяне на пауза на възпроизвеждането."</string>
</resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index b2f059b..0abad6b 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -29,8 +29,8 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Esborra el registre de trucades"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Suprimeix missatge de veu"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Comparteix la bústia de veu"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"El registre de trucades és buit."</string>
- <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Esborrament registre"</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"El registre de trucades és buit."</string>
+ <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Esborrar el registre?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Se suprimiran tots els registres de trucades."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Esborrant registre de trucades..."</string>
<plurals name="notification_voicemail_title">
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"S\'està emmagatzemant a mem. intermèd.…"</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"S\'està obtenint el correu de veu…"</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"No s\'ha pogut obtenir el correu de veu."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Nous"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Anteriors"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Només trucades amb bústia de veu"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Només trucades entrants"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Només trucades sortints"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"destaca"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"zero"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"coixinet"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"correu de veu"</string>
<string name="description_search_button" msgid="3660807558587384889">"cerca"</string>
<string name="description_dial_button" msgid="1274091017188142646">"marca"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"retrocés"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"número que es marcarà"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Historial de trucades"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Més opcions"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"teclat"</string>
<string name="menu_copy" msgid="6108677035381940698">"Copia"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Mostra només trucades sortints"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Mostra només trucades entrants"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Mostra només trucades perdudes"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Mostra només missatges de veu"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Mostra totes les trucades"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Afegeix un contacte"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Afegeix una pausa de 2 segons"</string>
<string name="add_wait" msgid="3360818652790319634">"Afegeix espera"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Selecciona la subscripció"</string>
<string name="call_settings" msgid="7666474782093693667">"Configuració"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Contacte nou"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Tots els contactes"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Detalls de la trucada"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"No s\'han pogut llegir els detalls de la trucada sol·licitada."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Utilitza el teclat de tons"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Trucada sortint"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Trucada perduda"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Missatge de veu"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Afegeix un contacte"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Visualitza el contacte <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Truca a <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Dades de contacte de: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Correu de veu nou"</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> trucades"</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Envia un missatge de text a <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Missatge de veu no escoltat"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Inicia la cerca per veu"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Truca al <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Desconegut"</string>
<string name="voicemail" msgid="3851469869202611441">"Correu de veu"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"S\'està carregant des de la targeta SIM..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Contactes de la targeta SIM"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Torna a activar l\'aplicació Persones per utilitzar aquesta funció."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Escriu un nom o telèfon"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Totes"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Perdudes"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"No hi ha cap trucada perduda recent."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"No hi ha cap missatge de veu recent."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Mostra tots els contactes"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"La cerca per veu no està disponible."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"No es pot fer una trucada telefònica perquè s\'ha desactivat l\'aplicació de telèfon."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"No hi ha cap aplicació instal·lada disponible per gestionar l\'acció seleccionada."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Escriu un nom o un número de telèfon"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"No hi ha trucades perdudes recents."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"No hi ha bústies de veu recents."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Mostra només els preferits"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Historial"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Totes"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Perdudes"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Bústia veu"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Marcatge ràpid"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Recents"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Contactes"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Eliminat dels preferits"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Desfés"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Truca al <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Afegeix als contactes"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Consulta tot l\'historial de trucades"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> trucades perdudes noves"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"El marcatge ràpid permet marcar amb un toc\nels números preferits i els números\n als quals truques normalment."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"No tens cap contacte."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Toca la imatge per veure tots els números o bé mantén-la premuda per reorganitzar"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Omet"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Suprimeix"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"TOTS ELS CONTACTES"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"TORNA LA TRUCADA"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"ESCOLTA"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"DETALLS"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Trucada perduda de: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Trucada resposta de: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Trucada a: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Torna a trucar a: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Escolta el missatge a la bústia de veu de: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Detalls de la trucada de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"S\'ha suprimit l\'entrada del registre de trucades."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Avui"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Ahir"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"La setmana passada"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Més antiga"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Llista de trucades"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Activa l\'altaveu."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Desactiva l\'altaveu."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Reprodueix més ràpidament."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Reprodueix més lentament."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Inicia la reproducció o la posa en pausa."</string>
</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 70be35f..f7067c4 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Vymazat hovory"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Smazat hlasovou zprávu"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Sdílet hlasovou schránku"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Záznam hovorů je prázdný."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Seznam hovorů je prázdný."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Vymazat hovory?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Všechny záznamy hovorů budou smazány."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Vymazání hovorů..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Ukládání do vyrovnávací paměti…"</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Načítání hlasové schránky…"</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Nepodařilo se načíst hlasovou zprávu."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Nové"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Starší"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Jen hovory s hlasovou schránkou"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Jen příchozí hovory"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Jen odchozí hovory"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"hvězdička"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"nula"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"libra"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"hlasová schránka"</string>
<string name="description_search_button" msgid="3660807558587384889">"vyhledat"</string>
<string name="description_dial_button" msgid="1274091017188142646">"vytáčení"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"číslo, které chcete vytočit"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Historie volání"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Více možností"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"číselník"</string>
<string name="menu_copy" msgid="6108677035381940698">"Kopírovat"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Zobrazit pouze odchozí"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Zobrazit pouze příchozí"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Zobrazit pouze zmeškané"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Zobrazit pouze hlas. schránku"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Zobrazit všechny hovory"</string>
- <string name="add_2sec_pause" msgid="9214012315201040129">"Přidat 2s pauzu"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Přidat kontakt"</string>
+ <string name="add_2sec_pause" msgid="9214012315201040129">"Přidat pauzu 2 s"</string>
<string name="add_wait" msgid="3360818652790319634">"Přidat čekání"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Vybrat odběr"</string>
<string name="call_settings" msgid="7666474782093693667">"Nastavení"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Nový kontakt"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Všechny kontakty"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Podrobnosti hovoru"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Detaily požadovaného hovoru nelze načíst."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Použít dotykovou tónovou klávesnici"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Odchozí hovor"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Zmeškaný hovor"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Hlasová schránka"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Přidat kontakt"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Zobrazit kontakt <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Volat kontakt <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Podrobnosti kontaktu pro <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Nová hlasová zpráva"</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"Počet hovorů: <xliff:g id="NUMBEROFCALLS">%1$s</xliff:g>"</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Odeslat textovou zprávu kontaktu <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Nevyslechnutá hlasová zpráva"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"–"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Spustit hlasové vyhledávání"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Zavolat na číslo <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Neznámé"</string>
<string name="voicemail" msgid="3851469869202611441">"Hlasová schránka"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Načítání ze SIM karty..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Kontakty na SIM kartě"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Chcete-li použít tuto funkci, znovu povolte aplikaci Lidé."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Zadejte jméno / telefon"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Všechny"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Zmeškané"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Nemáte žádné nedávné zmeškané hovory."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Nemáte žádné nedávné hlasové zprávy."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Zobrazit všechny kontakty"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Hlasové vyhledávání není k dispozici"</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Telefonický hovor nelze uskutečnit, protože aplikace Telefon byla zakázána."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Není k dispozici žádná nainstalovaná aktivita, pomocí které by bylo možné vybranou akci provést."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Zadejte jméno nebo tel. číslo"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Nemáte žádné nedávné zmeškané hovory."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Nemáte žádné nedávné záznamy v hlasové schránce."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Zobrazit pouze oblíbené"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Historie"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Všechny"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Zmeškané"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Schránka"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Rychlá volba"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Poslední"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Kontakty"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Odebráno z oblíbených"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Vrátit zpět"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Zavolat na číslo <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Přidat do kontaktů"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Zobrazení celé historie volání"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"Nové zmeškané hovory: <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Rychlá volba je vytáčení oblíbených\nkontaktů a čísel, kterým voláte\n často, jedním klepnutím."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Nemáte žádné kontakty."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Klepnutím na fotku zobrazíte všechna čísla a přidržením je můžete seřadit"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Zavřít"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Odstranit"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"VŠECHNY KONTAKTY"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"VOLAT ZPĚT"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"POSLOUCHAT"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"PODROBNOSTI"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Zmeškaný hovor od <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Přijatý hovor od <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Hovor s <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Zpětné volání <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Poslech hlasové schránky od <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Podrobnosti volání <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Záznam v seznamu hovorů byl smazán."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Dnes"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Včera"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Poslední týden"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Starší"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Seznam volání"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Zapnout reproduktor."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Vypnout reproduktor."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Přehrávat rychleji."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Přehrávat pomaleji."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Spustit nebo pozastavit přehrávání."</string>
</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index d2e7cbd..4a4d4b8 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Ryd opkaldsliste"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Slet telefonsvarerbesked"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Del telefonsvarerbesked"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Opkaldslisten er tom."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Din opkaldsliste er tom."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Ryd opkaldsliste?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Alle registrerede opkald slettes."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Rydder opkaldslisten..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Gemmer i buffer..."</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Henter telefonsvarerbeskeden..."</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Telefonsvarerbeskeden kunne ikke hentes."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Nye"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Ældre"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Kun opkald med telefonsvarer"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Kun indgående opkald"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Kun udgående opkald"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"stjernemarker"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"nul"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"pund"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"voicemail"</string>
<string name="description_search_button" msgid="3660807558587384889">"søg"</string>
<string name="description_dial_button" msgid="1274091017188142646">"ring op"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"nummer at ringe op"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Opkaldshistorik"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Flere valgmuligheder"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"tastatur"</string>
<string name="menu_copy" msgid="6108677035381940698">"Kopiér"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Vis kun udgående"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Vis kun indgående"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Vis kun ubesvarede"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Vis kun telefonsvarerbeskeder"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Vis alle opkald"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Tilføj kontaktperson"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Tilføj pause på 2 sek."</string>
- <string name="add_wait" msgid="3360818652790319634">"Tilføj Vent"</string>
+ <string name="add_wait" msgid="3360818652790319634">"Tilføj ventetid"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Vælg abonnement"</string>
<string name="call_settings" msgid="7666474782093693667">"Indstillinger"</string>
- <string name="menu_newContact" msgid="1209922412763274638">"Ny kontakt"</string>
+ <string name="menu_newContact" msgid="1209922412763274638">"Ny kontaktperson"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Alle kontaktpersoner"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Opkaldsdetaljer"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Detaljerne for det anmodede opkald kunne ikke læses."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Brug touch-tone-tastatur"</string>
@@ -109,17 +109,17 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Udgående opkald"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Ubesvaret opkald"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Telefonsvarer"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Tilføj kontaktperson"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Vis kontaktpersonen <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Ring til <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Kontaktoplysninger for <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Ny talebesked."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> opkald."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Send sms til <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Uaflyttet besked på telefonsvareren"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Start stemmesøgning"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Ring til <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Ukendte"</string>
- <string name="voicemail" msgid="3851469869202611441">"Voicemail"</string>
+ <string name="voicemail" msgid="3851469869202611441">"Telefonsvarer"</string>
<string name="private_num" msgid="6374339738119166953">"Privat nummer"</string>
<string name="payphone" msgid="4864313342828942922">"Betalingstelefon"</string>
<string name="dialerKeyboardHintText" msgid="5401660096579787344">"Brug tastatur til at ringe op"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Indlæser fra SIM-kort ..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Kontakter på SIM-kort"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Genaktiver applikationen Personer for at bruge denne funktion."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Skriv navn eller tlf.nr."</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Alle"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Mistede"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Ingen nye mistede opkald."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Ingen nye talebeskeder."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Vis alle kontaktpersoner"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Stemmesøgning er ikke tilgængeligt."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Det er ikke muligt at foretage et telefonopkald, fordi applikationen Telefon er deaktiveret."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Der er ingen installerede apps til at håndtere den valgte handling."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Skriv navn eller telefonnummer"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Du har ingen nylige ubesvarede opkald."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Du har ingen nylige talebeskeder."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Vis kun foretrukne"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Historik"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Alle"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Ubesvarede"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Talebesked"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Hurtigopkald"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Seneste"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Kontaktpersoner"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Fjernet fra favoritter"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Fortryd"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Ring til <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Føj til kontaktpersoner"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Se komplet opkaldshistorik"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> nye ubesvarede opkald"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Hurtigopkald er opkald med ét enkelt tryk\ntil favoritter og numre\n, du ofte ringer til."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Du har ingen kontaktpersoner."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Tryk på billedet for at se alle telefonnumre, eller tryk på billedet, og hold det nede, for at omarrangere"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Annuller"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Fjern"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ALLE KONTAKTPERSONER"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"RING TILBAGE"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"LYT"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"DETALJER"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Ubesvaret opkald fra <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Opkald besvaret fra <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Opkald til <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Ring tilbage til <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Lyt til indtalt besked fra <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Opkaldsoplysninger for <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Navn eller nummer blev slettet fra opkaldslisten."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"I dag"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"I går"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Sidste uge"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Ældre"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Opkaldsliste"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Slå højttaler til."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Slå højttaler fra."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Afspil hurtigere."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Afspil langsommere."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Start afspilningen, eller sæt den på pause."</string>
</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index af86ae5..16f93b6 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Anrufliste löschen"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Mailbox-Nachricht löschen"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Mailbox-Nachricht teilen"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Anrufliste ist leer."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Ihre Anrufliste ist leer."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Anrufliste löschen?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Ihre gesamte Anrufliste wird gelöscht."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Anrufliste wird gelöscht..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Pufferung ..."</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Mailbox-Nachricht wird abgerufen ..."</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Abrufen der Nachricht nicht möglich"</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Neu"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Älter"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Nur Mailbox-Anrufe"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Nur eingehende Anrufe"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Nur ausgehende Anrufe"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"Markierung"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"null"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"Pfund"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"Mailbox"</string>
<string name="description_search_button" msgid="3660807558587384889">"Suchen"</string>
<string name="description_dial_button" msgid="1274091017188142646">"wählen"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"Rücktaste"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"Zu wählende Nummer"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Anrufliste"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Mehr Optionen"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"Wähltasten"</string>
<string name="menu_copy" msgid="6108677035381940698">"Kopieren"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Nur ausgehende Anrufe anzeigen"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Nur eingehende Anrufe anzeigen"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Nur entgangene Anrufe anzeigen"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Nur Mailbox-Nachr. anzeigen"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Alle Anrufe anzeigen"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Kontakt hinzufügen"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"2 Sekunden Pause hinzufügen"</string>
<string name="add_wait" msgid="3360818652790319634">"Warten hinzufügen"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Abonnement auswählen"</string>
<string name="call_settings" msgid="7666474782093693667">"Einstellungen"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Neuer Kontakt"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Alle Kontakte"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Anrufdetails"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Details für den angeforderten Anruf konnten nicht gelesen werden."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Telefontastatur verwenden"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Ausgehender Anruf"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Entgangener Anruf"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Mailbox-Nachricht"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Kontakt hinzufügen"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Kontakt <xliff:g id="NAME">%1$s</xliff:g> anzeigen"</string>
<string name="description_call" msgid="3443678121983852666">"<xliff:g id="NAME">%1$s</xliff:g> anrufen"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Kontaktdetails für <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Neue Mailbox-Nachricht"</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> Anrufe"</string>
<string name="description_send_text_message" msgid="7803126439934046891">"SMS an <xliff:g id="NAME">%1$s</xliff:g> senden"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Nicht abgehörte Mailbox-Nachricht"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Sprachsuche starten"</string>
<string name="menu_callNumber" msgid="997146291983360266">"<xliff:g id="NUMBER">%s</xliff:g> wählen"</string>
<string name="unknown" msgid="740067747858270469">"Unbekannt"</string>
<string name="voicemail" msgid="3851469869202611441">"Mailbox"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Ladevorgang von SIM-Karte läuft..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Kontakte auf SIM-Karte"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Kontakte-App zur Verwendung dieser Funktion wieder aktivieren"</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Name oder Telefonnummer"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Alle"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Entgangen"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Keine entgangenen Anrufe"</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Keine Mailbox-Nachrichten"</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Alle Kontakte anzeigen"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Die Sprachsuche ist nicht verfügbar."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Es kann kein Anruf getätigt werden, da die App \"Telefon\" deaktiviert wurde."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Zur Verarbeitung der ausgewählten Aktion ist keine installierte Aktivität verfügbar."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Namen/Telefonnummer eingeben"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Keine kürzlich verpassten Anrufe"</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Keine neuen Mailboxnachrichten"</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Nur Favoriten anzeigen"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Verlauf"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Alle"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Entgangen"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Mailbox-Nachrichten"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Kurzwahl"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Neueste"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Kontakte"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Aus Favoriten entfernt"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Rückgängig machen"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"<xliff:g id="NUMBER">%s</xliff:g> wählen"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Zu Kontakten hinzufügen"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Gesamte Anrufliste ansehen"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> neue verpasste Anrufe"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Über die Kurzwahl können Sie \nmit einer Berührung Ihre Favoriten\n und häufig gewählte Telefonnummern anrufen."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Keine Kontakte vorhanden"</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Auf Bild tippen, um alle Nummern zu sehen, oder berühren und halten, um Anordnung zu ändern"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Ablehnen"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Entfernen"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"Alle Kontakte"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"Zurückrufen"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"Anhören"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"Details"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Verpasster Anruf von <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Anruf von <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g> angenommen"</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Ausgehender Anruf an <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> zurückrufen"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Mailboxnachricht von <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> anhören"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Anrufdetails für <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Anruflisteneintrag gelöscht"</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Heute"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Gestern"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Letzte Woche"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Ältere"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Anrufliste"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Lautsprecher einschalten"</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Lautsprecher ausschalten"</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Schneller wiedergeben"</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Langsamer wiedergeben"</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Wiedergabe starten oder pausieren"</string>
</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index a439bec..14553a1 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Εκκαθάριση αρχείου καταγραφής κλήσεων"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Διαγραφή αυτόματου τηλεφωνητή"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Κοινή χρήση αυτόμ. τηλεφωνητή"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Το αρχείο καταγραφής κλήσεων είναι κενό."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Το αρχείο καταγραφής κλήσεων είναι κενό."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Εκκαθάριση αρχείου;"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Όλα τα αρχεία κλήσεων θα διαγραφούν."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Εκκαθάριση αρχ. καταγραφής κλήσεων…"</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Αποθ. στη πρ. μνήμη"</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Ανάκτηση μην. αυτ. τηελφ."</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Δεν ανακτήθηκαν τα μην. αυτ. τηλεφ."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Νέο"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Παλαιότερα"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Μόνο κλήσεις με ηχητικά μηνύματα"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Μόνο εισερχόμενες κλήσεις"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Μόνο εξερχόμενες κλήσεις"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"αστέρι"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"μηδέν"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"σύμβολο δίεσης"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"αυτόματος τηλεφωνητής"</string>
<string name="description_search_button" msgid="3660807558587384889">"αναζήτηση"</string>
<string name="description_dial_button" msgid="1274091017188142646">"κλήση"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"αριθμός για κλήση"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Ιστορικό κλήσεων"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Περισσότερες επιλογές"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"πληκτρολόγιο κλήσης"</string>
<string name="menu_copy" msgid="6108677035381940698">"Αντιγραφή"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Εμφάνιση μόνο εξερχόμενων"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Εμφάνιση μόνο εισερχόμενων"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Εμφάνιση μόνο αναπάντητων"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Εμφ. μόνο μην. αυτόμ. τηλεφων."</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Εμφάνιση όλων"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Προσθήκη επαφής"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Προσθήκη παύσης 2 δευτερολέπτων"</string>
<string name="add_wait" msgid="3360818652790319634">"Προσθήκη αναμονής"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Επιλογή συνδρομής"</string>
<string name="call_settings" msgid="7666474782093693667">"Ρυθμίσεις"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Νέα επαφή"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Όλες οι επαφές"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Λεπτομέρειες κλήσης"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Δεν είναι δυνατή η ανάγνωση λεπτομερειών της κλήσης που ζητήθηκε."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Χρησιμοποιήστε το πληκτρολόγιο αφής ηχητικών τόνων"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Εξερχόμενη κλήση"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Αναπάντητη κλήση"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Αυτόματος τηλεφωνητής"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Προσθήκη επαφής"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Προβολή επαφής <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Κλήση του χρήστη <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Στοιχεία επικοινωνίας του <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Νέο μήνυμα στον αυτόματο τηλεφωνητή."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> κλήσεις."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Αποστολή μηνύματος κειμένου στον χρήστη <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Μηνύματα αυτόματου τηλεφωνητή που δεν έχετε ακούσει"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Έναρξη φωνητικής αναζήτησης"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Κλήση του αριθμού <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Άγνωστος"</string>
<string name="voicemail" msgid="3851469869202611441">"Αυτόματος τηλεφωνητής"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Φόρτωση από κάρτα SIM…"</string>
<string name="simContacts_title" msgid="27341688347689769">"Επαφές στην κάρτα SIM"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Ενεργοποιήστε ξανά την εφαρμογή People για να χρησιμοποιήσετε αυτήν τη λειτουργία."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Πληκτρ. όνομα ή τηλέφωνο"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Όλα"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Αναπάντητη"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Δεν υπάρχουν πρόσφατες αναπάντητες κλήσεις."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Δεν υπάρχουν πρόσφατα φωνητικά μηνύματα."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Εμφάνιση όλων των επαφών"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Η φωνητική αναζήτηση δεν είναι διαθέσιμη."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Δεν είναι δυνατή η πραγματοποίηση τηλεφωνικής κλήσης επειδή η εφαρμογή \"Τηλέφωνο\" έχει απενεργοποιηθεί."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Δεν υπάρχει διαθέσιμη εγκατεστημένη δραστηριότητα για το χειρισμό της επιλεγμένης ενέργειας."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Εισαγάγετε όνομα ή τηλέφωνο"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Δεν υπάρχουν πρόσφατες αναπάντητες κλήσεις."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Δεν υπάρχουν πρόσφατα μηνύματα στον αυτόματο τηλεφωνητή."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Εμφάνιση μόνο των αγαπημένων"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Ιστορικό"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Όλα"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Αναπάντητη"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Φωνητικό μήνυμα"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Ταχεία κλήση"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Πρόσφατα"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Επαφές"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Καταργήθηκε από τα αγαπημένα"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Αναίρεση"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Κλήση του αριθμού <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Προσθήκη στις επαφές"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Προβολή πλήρους ιστορικού κλήσεων"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> νέες αναπάντητες κλήσεις"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Η ταχεία κλήση είναι κλήση με ένα άγγιγμα\nγια τα αγαπημένα και τους αριθμούς\n που καλείτε συχνά."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Δεν υπάρχουν επαφές."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Πατήστε την εικόνα για να δείτε όλους τους αριθμούς ή πατήστε παρατεταμένα για αναδιάταξη"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Παράβλεψη"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Κατάργηση"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ΟΛΕΣ ΟΙ ΕΠΑΦΕΣ"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"ΕΠΑΝΑΚΛΗΣΗ"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"ΑΚΡΟΑΣΗ"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"ΛΕΠΤΟΜΕΡΕΙΕΣ"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Αναπάντητη κλήση από <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Ληφθείσα κλήση από <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Κλήση στον αριθμό <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Επανάκληση <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Ακρόαση μηνύματος αυτόματου τηλεφωνητή από το χρήστη <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Λεπτομέρειες κλήσης για <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Το αρχείο καταγραφής κλήσεων διαγράφηκε."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Σήμερα"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Χθες"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Τελευταία εβδομάδα"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Παλαιότερες"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Λίστα κλήσεων"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Ενεργοποίηση ηχείου."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Απενεργοποίηση ηχείου."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Αναπαραγωγή πιο γρήγορα."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Αναπαραγωγή πιο αργά."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Έναρξη ή παύση αναπαραγωγής."</string>
</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index e3a16f3..4e6ecdc 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Clear call log"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Delete voicemail"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Share voicemail"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Call log is empty."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Your call log is empty."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Clear call log?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"All your call records will be deleted."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Clearing call log…"</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Buffering…"</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Fetching voicemail…"</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Couldn\'t fetch voicemail."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"New"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Older"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Calls with voicemail only"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Incoming calls only"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Outgoing calls only"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"Star"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"zero"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"pound"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"voicemail"</string>
<string name="description_search_button" msgid="3660807558587384889">"search"</string>
<string name="description_dial_button" msgid="1274091017188142646">"dial"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"number to dial"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Call History"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"More options"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"dial pad"</string>
<string name="menu_copy" msgid="6108677035381940698">"Copy"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Show outgoing only"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Show incoming only"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Show missed only"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Show voicemails only"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Show all calls"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Add contact"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Add 2-sec pause"</string>
<string name="add_wait" msgid="3360818652790319634">"Add wait"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Select Subscription"</string>
<string name="call_settings" msgid="7666474782093693667">"Settings"</string>
<string name="menu_newContact" msgid="1209922412763274638">"New contact"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"All contacts"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Call details"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Couldn\'t read details for the requested call."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Use touch tone keypad"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Outgoing call"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Missed call"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Voicemail"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Add contact"</string>
<string name="description_view_contact" msgid="5205669345700598415">"View contact <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Call <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Contact details for <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"New voicemail."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> calls."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Send text message to <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Unheard voicemail"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Start voice search"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Call <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Unknown"</string>
<string name="voicemail" msgid="3851469869202611441">"Voicemail"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Loading from SIM card…"</string>
<string name="simContacts_title" msgid="27341688347689769">"SIM card contacts"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Re-enable the People application to use this feature."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Type a name or phone"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"All"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Missed"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"No recent missed calls."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"No recent voicemails."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Show all contacts"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Voice search is not available."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Cannot make a phone call because the Phone application has been disabled."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"No installed activity available to handle selected action."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Type a name or phone number"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"You have no recent missed calls."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"You have no recent voicemails."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Show favourites only"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"History"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"All"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Missed"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Voicemail"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Speed Dial"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Recents"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Contacts"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Removed from favourites"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Undo"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Call <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Add to contacts"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"View full call history"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> new missed calls"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Speed dial is one touch dialing\nfor favourites and numbers\n you call frequently."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"You have no contacts."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Tap image to see all numbers or press and hold to reorder"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Dismiss"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Remove"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ALL CONTACTS"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"CALL BACK"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"LISTEN"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"DETAILS"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Missed call from <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Answered call from <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Call to <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Call back <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Listen to voicemail from <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Call details for <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Call log entry deleted."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Today"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Yesterday"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Last week"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Older"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Call List"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Turn speaker on."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Turn speaker off."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Play faster."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Play slower."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Start or pause playback."</string>
</resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
new file mode 100644
index 0000000..4e6ecdc
--- /dev/null
+++ b/res/values-en-rIN/strings.xml
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="8490255569343340580">"Dialler"</string>
+ <string name="launcherDialer" msgid="8636288196618486553">"Phone"</string>
+ <string name="dialerIconLabel" msgid="6500826552823403796">"Phone"</string>
+ <string name="recentCallsIconLabel" msgid="1419116422359067949">"Call log"</string>
+ <string name="menu_sendTextMessage" msgid="6937343460284499306">"Send text message"</string>
+ <string name="recentCalls_callNumber" msgid="1756372533999226126">"Call <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Edit number before call"</string>
+ <string name="recentCalls_addToContact" msgid="1429899535546487008">"Add to contacts"</string>
+ <string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Remove from call log"</string>
+ <string name="recentCalls_deleteAll" msgid="6352364392762163704">"Clear call log"</string>
+ <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Delete voicemail"</string>
+ <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Share voicemail"</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Your call log is empty."</string>
+ <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Clear call log?"</string>
+ <string name="clearCallLogConfirmation" msgid="5043563133171583152">"All your call records will be deleted."</string>
+ <string name="clearCallLogProgress_title" msgid="8365943000154295771">"Clearing call log…"</string>
+ <plurals name="notification_voicemail_title">
+ <item quantity="one" msgid="1746619685488504230">"Voicemail"</item>
+ <item quantity="other" msgid="5513481419205061254">"<xliff:g id="COUNT">%1$d</xliff:g> Voicemails"</item>
+ </plurals>
+ <string name="notification_action_voicemail_play" msgid="6113133136977996863">"Play"</string>
+ <string name="notification_voicemail_callers_list" msgid="1153954809339404149">"<xliff:g id="NEWER_CALLERS">%1$s</xliff:g>, <xliff:g id="OLDER_CALLER">%2$s</xliff:g>"</string>
+ <string name="notification_new_voicemail_ticker" msgid="895342132049452081">"New voicemail from <xliff:g id="CALLER">%1$s</xliff:g>"</string>
+ <string name="voicemail_playback_error" msgid="1811242131549854624">"Couldn\'t play voicemail."</string>
+ <string name="voicemail_buffering" msgid="738287747618697097">"Buffering…"</string>
+ <string name="voicemail_fetching_content" msgid="877911315738258780">"Fetching voicemail…"</string>
+ <string name="voicemail_fetching_timout" msgid="6691792377574905201">"Couldn\'t fetch voicemail."</string>
+ <string name="call_log_voicemail_header" msgid="3945407886667089173">"Calls with voicemail only"</string>
+ <string name="call_log_incoming_header" msgid="2787722299753674684">"Incoming calls only"</string>
+ <string name="call_log_outgoing_header" msgid="761009180766735769">"Outgoing calls only"</string>
+ <string name="call_log_missed_header" msgid="8017148056610855956">"Missed calls only"</string>
+ <string name="voicemail_status_voicemail_not_available" msgid="3021980206152528883">"Cannot connect to voicemail server."</string>
+ <string name="voicemail_status_messages_waiting" msgid="7113421459602803605">"Can\'t connect to voicemail server. New voicemails are waiting."</string>
+ <string name="voicemail_status_configure_voicemail" msgid="3738537770636895689">"Set up your voicemail."</string>
+ <string name="voicemail_status_audio_not_available" msgid="3369618334553341626">"Audio not available."</string>
+ <string name="voicemail_status_action_configure" msgid="8671796489912239589">"Set up"</string>
+ <string name="voicemail_status_action_call_server" msgid="1824816252288551794">"Call voicemail"</string>
+ <string name="voicemail_speed_slowest" msgid="1733460666177707312">"Slowest speed"</string>
+ <string name="voicemail_speed_slower" msgid="1508601287347216244">"Slow speed"</string>
+ <string name="voicemail_speed_normal" msgid="9033988544627228892">"Normal speed"</string>
+ <string name="voicemail_speed_faster" msgid="2019965121475935488">"Fast speed"</string>
+ <string name="voicemail_speed_fastest" msgid="5758712343491183292">"Fastest speed"</string>
+ <string name="call_log_item_count_and_date" msgid="7641933305703520787">"(<xliff:g id="COUNT">%1$d</xliff:g>) <xliff:g id="DATE">%2$s</xliff:g>"</string>
+ <string name="sms_disambig_title" msgid="5846266399240630846">"Choose number"</string>
+ <string name="call_disambig_title" msgid="4392886850104795739">"Choose number"</string>
+ <string name="make_primary" msgid="5829291915305113983">"Remember this choice"</string>
+ <string name="description_image_button_one" msgid="1740638037139856139">"one"</string>
+ <string name="description_image_button_two" msgid="5882638439003731308">"two"</string>
+ <string name="description_image_button_three" msgid="8709731759376015180">"three"</string>
+ <string name="description_image_button_four" msgid="3530239685642246130">"four"</string>
+ <string name="description_image_button_five" msgid="1182465427501188413">"five"</string>
+ <string name="description_image_button_six" msgid="2093656269261415475">"six"</string>
+ <string name="description_image_button_seven" msgid="2450357020447676481">"seven"</string>
+ <string name="description_image_button_eight" msgid="6969435115163287801">"eight"</string>
+ <string name="description_image_button_nine" msgid="7857248695662558323">"nine"</string>
+ <string name="description_image_button_star" msgid="3365919907520767866">"Star"</string>
+ <string name="description_image_button_zero" msgid="4133108949401820710">"zero"</string>
+ <string name="description_image_button_pound" msgid="3039765597595889230">"pound"</string>
+ <string name="description_search_button" msgid="3660807558587384889">"search"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"dial"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"number to dial"</string>
+ <string name="action_menu_call_history_description" msgid="9018442816219748968">"Call History"</string>
+ <string name="action_menu_overflow_description" msgid="2303272250613084574">"More options"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"dial pad"</string>
+ <string name="menu_copy" msgid="6108677035381940698">"Copy"</string>
+ <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Show outgoing only"</string>
+ <string name="menu_show_incoming_only" msgid="7534206815238877417">"Show incoming only"</string>
+ <string name="menu_show_missed_only" msgid="154473166059743996">"Show missed only"</string>
+ <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Show voicemails only"</string>
+ <string name="menu_show_all_calls" msgid="7560347482073345885">"Show all calls"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Add contact"</string>
+ <string name="add_2sec_pause" msgid="9214012315201040129">"Add 2-sec pause"</string>
+ <string name="add_wait" msgid="3360818652790319634">"Add wait"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Select Subscription"</string>
+ <string name="call_settings" msgid="7666474782093693667">"Settings"</string>
+ <string name="menu_newContact" msgid="1209922412763274638">"New contact"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"All contacts"</string>
+ <string name="callDetailTitle" msgid="5340227785196217938">"Call details"</string>
+ <string name="toast_call_detail_error" msgid="7200975244804730096">"Couldn\'t read details for the requested call."</string>
+ <string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Use touch tone keypad"</string>
+ <string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Return to call in progress"</string>
+ <string name="dialer_addAnotherCall" msgid="4205688819890074468">"Add call"</string>
+ <string name="type_incoming" msgid="6502076603836088532">"Incoming call"</string>
+ <string name="type_outgoing" msgid="343108709599392641">"Outgoing call"</string>
+ <string name="type_missed" msgid="2720502601640509542">"Missed call"</string>
+ <string name="type_voicemail" msgid="5153139450668549908">"Voicemail"</string>
+ <string name="actionIncomingCall" msgid="6028930669817038600">"Incoming calls"</string>
+ <string name="description_call_log_play_button" msgid="651182125650429846">"Play voicemail"</string>
+ <string name="description_call_log_incoming_call" msgid="4485427487637250143">"Incoming call"</string>
+ <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Outgoing call"</string>
+ <string name="description_call_log_missed_call" msgid="2242805209983708825">"Missed call"</string>
+ <string name="description_call_log_voicemail" msgid="4600798771975158948">"Voicemail"</string>
+ <string name="description_view_contact" msgid="5205669345700598415">"View contact <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_call" msgid="3443678121983852666">"Call <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Contact details for <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"New voicemail."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> calls."</string>
+ <string name="description_send_text_message" msgid="7803126439934046891">"Send text message to <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Unheard voicemail"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Start voice search"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Call <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="unknown" msgid="740067747858270469">"Unknown"</string>
+ <string name="voicemail" msgid="3851469869202611441">"Voicemail"</string>
+ <string name="private_num" msgid="6374339738119166953">"Private number"</string>
+ <string name="payphone" msgid="4864313342828942922">"Phonebox"</string>
+ <string name="dialerKeyboardHintText" msgid="5401660096579787344">"Use keyboard to dial"</string>
+ <string name="dialerDialpadHintText" msgid="5824490365898349041">"Dial to add a call"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> mins <xliff:g id="SECONDS">%s</xliff:g> secs"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Call not sent"</string>
+ <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"To set up voicemail, go to Menu > Settings."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"To call voicemail, first turn off Aeroplane mode."</string>
+ <string name="contact_list_loading" msgid="5488620820563977329">"Loading…"</string>
+ <string name="imei" msgid="3045126336951684285">"IMEI"</string>
+ <string name="meid" msgid="6210568493746275750">"MEID"</string>
+ <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Loading from SIM card…"</string>
+ <string name="simContacts_title" msgid="27341688347689769">"SIM card contacts"</string>
+ <string name="add_contact_not_available" msgid="1419207765446461366">"Re-enable the People application to use this feature."</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Voice search is not available."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Cannot make a phone call because the Phone application has been disabled."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"No installed activity available to handle selected action."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Type a name or phone number"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"You have no recent missed calls."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"You have no recent voicemails."</string>
+ <string name="show_favorites_only" msgid="5520072531022614595">"Show favourites only"</string>
+ <string name="call_log_activity_title" msgid="4612824396355272023">"History"</string>
+ <string name="call_log_all_title" msgid="3566738938889333307">"All"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Missed"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Voicemail"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Speed Dial"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Recents"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Contacts"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Removed from favourites"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Undo"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Call <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Add to contacts"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"View full call history"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> new missed calls"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Speed dial is one touch dialing\nfor favourites and numbers\n you call frequently."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"You have no contacts."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Tap image to see all numbers or press and hold to reorder"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Dismiss"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Remove"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ALL CONTACTS"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"CALL BACK"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"LISTEN"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"DETAILS"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Missed call from <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Answered call from <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Call to <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Call back <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Listen to voicemail from <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Call details for <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Call log entry deleted."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Today"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Yesterday"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Last week"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Older"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Call List"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Turn speaker on."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Turn speaker off."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Play faster."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Play slower."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Start or pause playback."</string>
+</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index ab9a510..c1b77ff 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Eliminar registro de llamadas"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Eliminar mensaje de voz"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Compartir mensaje de voz"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"El registro de llamadas está vacío."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"El registro de llamadas está vacío."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"¿Eliminar registro?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Se eliminarán todos tus registros de llamadas."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Borrando registro de llamadas..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Almacenando en el búfer"</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Obteniendo el mensaje de voz"</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"No se pudo obtener el mensaje de voz."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Nuevo"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Más antigua"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Solo llamadas con buzón de voz"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Solo llamadas entrantes"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Solo llamadas salientes"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"estrella"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"cero"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"libra"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"buzón de voz"</string>
<string name="description_search_button" msgid="3660807558587384889">"búsqueda"</string>
<string name="description_dial_button" msgid="1274091017188142646">"marcar"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"retroceso"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"número para marcar"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Historial de llamadas"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Más opciones"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"teclado"</string>
<string name="menu_copy" msgid="6108677035381940698">"Copiar"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Mostrar solo salientes"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Mostrar solo entrantes"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Mostrar solo perdidas"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Mostrar solo mensajes de voz"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Mostrar todas las llamadas"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Agregar contacto"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Agregar pausa de 2 segundos"</string>
<string name="add_wait" msgid="3360818652790319634">"Agregar espera"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Seleccionar suscripción"</string>
<string name="call_settings" msgid="7666474782093693667">"Configuración"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Nuevo contacto"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Todos los contactos"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Detalles de llamada"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"No se han podido leer los detalles de la llamada solicitada."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Usar teclado de tonos del teléfono"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Llamada saliente"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Llamada perdida"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Mensaje de voz"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Agregar contacto"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Ver contacto <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Llamar a <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Datos de contacto de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Buzón de voz nuevo"</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> llamadas"</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Enviar mensaje de texto a <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Buzón de voz no escuchado"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Iniciar búsqueda por voz"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Llamar al <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Desconocido"</string>
<string name="voicemail" msgid="3851469869202611441">"Correo de voz"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Cargando desde tarjeta SIM..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Contactos de tarjeta SIM"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Vuelve a activar la aplicación Contactos para usar esta función."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Escribe nombre o tel."</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Todo"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Perdidas"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"No hay llamadas perdidas recientes."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"No hay mensajes del buzón de voz recientes."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Mostrar todos los contactos"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"No está disponible la búsqueda por voz."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"No se pueden realizar llamadas porque se inhabilitó la aplicación Teléfono."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"No hay ninguna actividad instalada para procesar la acción seleccionada."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Ingresa un nombre o teléfono."</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"No tienes llamadas perdidas recientes."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"El buzón de voz no tiene mensajes recientes."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Mostrar solo favoritos"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Historial"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Todo"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Perdidas"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Buzón voz"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Marcado rápido"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Recientes"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Contactos"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Eliminado de favoritos"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Deshacer"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Llamar al <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Agregar a contactos"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Ver historial de llamadas completo"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> llamadas perdidas nuevas"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"El marcado rápido te permite llamar a\nlos números y contactos favoritos\n que llamas con frecuencia con solo marcar una tecla."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"No tienes ningún contacto."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Presiona la imagen para ver todos los números o mantenla presionada para cambiar el orden."</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Descartar"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Eliminar"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"TODOS LOS CONTACTOS"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"DEVOLVER LLAMADA"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"ESCUCHAR"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"DETALLES"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Llamada perdida de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> <xliff:g id="TYPEORLOCATION">%2$s</xliff:g> <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Llamada respondida de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> <xliff:g id="TYPEORLOCATION">%2$s</xliff:g> <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Llamar a <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> <xliff:g id="TYPEORLOCATION">%2$s</xliff:g> <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Devolver llamada a <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Escuchar buzón de voz de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Detalles de llamada de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Entrada del registro de llamada eliminada"</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Hoy"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Ayer"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Última semana"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Antiguos"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Lista de llamadas"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Activar altavoz"</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Desactivar altavoz"</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Aumentar velocidad de reproducción"</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Disminuir velocidad de reproducción"</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Iniciar o pausar la reproducción"</string>
</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 939fef6..a4896ca 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Borrar registro de llamadas"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Eliminar mensaje de voz"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Compartir mensaje de voz"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"El registro de llamadas está vacío."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"El registro de llamadas está vacío."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"¿Borrar registro?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Se eliminarán todos los registros de llamadas."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Borrando registro de llamadas..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Almacenando en búfer..."</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Recuperando mensaje de voz..."</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"No se ha podido recuperar el mensaje."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Nuevo"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Anteriores"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Solo llamadas con mensajes de voz"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Solo llamadas entrantes"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Solo llamadas salientes"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"estrella"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"cero"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"libra"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"buzón de voz"</string>
<string name="description_search_button" msgid="3660807558587384889">"buscar"</string>
<string name="description_dial_button" msgid="1274091017188142646">"marcar"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"retroceder un espacio"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"número que se va a marcar"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Historial de llamadas"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Más opciones"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"teclado"</string>
<string name="menu_copy" msgid="6108677035381940698">"Copiar"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Mostrar solo llamadas salientes"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Mostrar solo llamadas entrantes"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Mostrar solo llamadas perdidas"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Solo mensajes de voz"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Mostrar todas las llamadas"</string>
- <string name="add_2sec_pause" msgid="9214012315201040129">"Añadir pausa de dos segundos"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Añadir contacto"</string>
+ <string name="add_2sec_pause" msgid="9214012315201040129">"Añadir pausa de 2 segundos"</string>
<string name="add_wait" msgid="3360818652790319634">"Añadir espera"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Seleccionar suscripción"</string>
<string name="call_settings" msgid="7666474782093693667">"Ajustes"</string>
- <string name="menu_newContact" msgid="1209922412763274638">"Contacto nuevo"</string>
+ <string name="menu_newContact" msgid="1209922412763274638">"Nuevo contacto"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Todos los contactos"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Detalles de la llamada"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"No se han podido leer los detalles de la llamada solicitada."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Usar teclado táctil"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Llamada saliente"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Llamada perdida"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Buzón de voz"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Añadir contacto"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Ver contacto <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Llamar a <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Información de contacto de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Nuevo mensaje de voz."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> llamadas."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Enviar mensaje de texto a <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Mensaje de voz sin oír"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Iniciar búsqueda por voz"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Llamar a <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Desconocidos"</string>
<string name="voicemail" msgid="3851469869202611441">"Buzón de voz"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Cargando desde tarjeta SIM…"</string>
<string name="simContacts_title" msgid="27341688347689769">"Contactos de tarjeta SIM"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Vuelve a habilitar la aplicación Contactos para usar esta función."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Escribe nombre o teléfono"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Todo"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Perdidas"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"No hay llamadas perdidas recientes."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"No hay mensajes de voz recientes."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Mostrar todos los contactos"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"La búsqueda por voz no está disponible."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"No se puede hacer llamadas porque se ha inhabilitado la aplicación Teléfono."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Ninguna actividad instalada puede procesar la acción seleccionada."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Escribe un nombre o teléfono"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"No tienes llamadas perdidas recientes."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"No tienes mensajes recientes en el buzón de voz."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Mostrar solo favoritos"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Historial"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Todo"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Perdidas"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Mensaje de voz"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Marcación rápida"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Recientes"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Contactos"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Eliminado de favoritos"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Deshacer"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Llamar a <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Añadir a contactos"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Ver historial de llamadas completo"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> llamadas perdidas nuevas"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"La marcación rápida te permite llamar a\nlos números y contactos favoritos\n que llamas con frecuencia con solo marcar una tecla."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"No tienes contactos."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Toca la imagen para ver todos los números o mantenla pulsada para cambiar el orden"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Ignorar"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Eliminar"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"TODOS LOS CONTACTOS"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"DEVOLVER LLAMADA"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"ESCUCHAR"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"DETALLES"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Llamada perdida de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Llamada respondida de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Llamar a <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Devolver llamada a <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Escuchar el buzón de voz de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Detalles de llamada de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Entrada del registro de llamada eliminada."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Hoy"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Ayer"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"La última semana"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Más antiguo"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Lista de llamadas"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Activar altavoz."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Desactivar altavoz."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Reproducir más rápido."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Reproducir más lento."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Iniciar o pausar reproducción."</string>
</resources>
diff --git a/res/values-et/strings.xml b/res/values-et-rEE/strings.xml
similarity index 67%
rename from res/values-et/strings.xml
rename to res/values-et-rEE/strings.xml
index ba1d728..54d4306 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Kustuta kõnelogi"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Kustuta kõnepost"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Jaga kõneposti"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Kõnelogi on tühi."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Teie kõnelogi on tühi."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Kustutada kõnelogi?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Kõik teie kõnesalvestised kustutatakse."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Kõnelogi kustutamine ..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Puhverdamine ..."</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Kõneposti toomine ..."</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Kõneposti toomine ebaõnnestus."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Uued"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Vanemad"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Ainult kõnepostiga kõned"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Ainult sissetulevad kõned"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Ainult väljuvad kõned"</string>
@@ -77,23 +75,26 @@
<string name="description_image_button_star" msgid="3365919907520767866">"tärn"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"null"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"nael"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"kõnepost"</string>
<string name="description_search_button" msgid="3660807558587384889">"otsing"</string>
<string name="description_dial_button" msgid="1274091017188142646">"Helista"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"tagasilüke"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"number valimiseks"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Kõneajalugu"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Rohkem valikuid"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"valimisklahvistik"</string>
<string name="menu_copy" msgid="6108677035381940698">"Kopeeri"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Kuva ainult väljuvad"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Kuva ainult sissetulevad"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Kuva ainult vastamata"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Kuva ainult kõnepostisõnumeid"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Kuva kõik kõned"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Lisa kontakt"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Lisa 2-sekundiline paus"</string>
<string name="add_wait" msgid="3360818652790319634">"Lisa ootama"</string>
+ <!-- no translation found for menu_select_subscription (363190251770943468) -->
+ <skip />
<string name="call_settings" msgid="7666474782093693667">"Seaded"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Uus kontakt"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Kõik kontaktid"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Kõne üksikasjad"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Taotletud kõne üksikasju ei saa lugeda."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Kasuta puutetooniga klahvistikku"</string>
@@ -109,14 +110,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Väljuv kõne"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Vastamata kõne"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Kõnepost"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Lisa kontakt"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Kuva kontakt <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Helista: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Kontakti <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> üksikasjad"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Uus kõnepost."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> kõnet."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Saada tekstsõnum kontaktile <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Kuulamata kõnepostisõnum"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Häälotsingu alustamine"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Helistage: <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Tundmatu"</string>
<string name="voicemail" msgid="3851469869202611441">"Kõnepost"</string>
@@ -134,20 +135,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Laadimine SIM-kaardilt ..."</string>
<string name="simContacts_title" msgid="27341688347689769">"SIM-kaardi kontaktid"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Funktsiooni kasutamiseks lubage uuesti rakendus Inimesed."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Sisestage nimi või telefoninumber"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Kõik"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Vastamata"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Pole ühtegi hiljutist vastamata kõnet."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Pole ühtegi hiljutist kõnepostiteadet."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Kuva kõik kontaktid"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Häälotsing pole saadaval"</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Helistada ei saa, sest telefonirakendus on keelatud."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Pole installitud ühtegi rakendust, mis suudaks käsitleda valitud tegevust."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Sisestage nimi/telefoninumber"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Teil pole hiljutisi vastamata kõnesid."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Teil pole hiljutisi kõnepostisõnumeid."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Kuva ainult lemmikud"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Ajalugu"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Kõik"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Vastamata"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Kõnepost"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Kiirvalimine"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Hiljutised"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Kontaktid"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Eemaldatud lemmikute hulgast"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Võta tagasi"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Helista <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Lisa kontaktidesse"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Kogu kõneajaloo vaatamine"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> uus/uut vastamata kõne(t)"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Kiirvalimine on ühe puutega nende\nlemmikute ja numbrite valimine\n, kellele sageli helistate."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Teil pole ühtegi kontakti."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Puudutage kujutist, et näha kõiki numbreid, või vajutage ja hoidke all ümberkorraldamiseks"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Loobu"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Eemalda"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"KÕIK KONTAKTID"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"HELISTA TAGASI"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"KUULA"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"ÜKSIKASJAD"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Vastamata kõne: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Vastatud kõne: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Helistamine: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Tagasi helistamine: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Kontakti <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> kõneposti kuulamine"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Kontakti <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> kõne üksikasjad"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Kõnelogi kanne on kustutatud."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Täna"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Eile"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Eelmine nädal"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Vanem"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Kõneloend"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Kõlari sisselülitamine."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Kõlari väljalülitamine."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Kiirem esitus."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Aeglasem esitus."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Esituse alustamine või peatamine."</string>
</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 8c8832c..d9f4b71 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"پاک کردن گزارش تماس"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"حذف پست صوتی"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"اشتراکگذاری پست صوتی"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"گزارش تماس خالی است."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"گزارش تماس شما خالی است."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"گزارش تماس پاک شود؟"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"تمام سابقه تماس شما حذف خواهد شد."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"در حال پاک کردن گزارش تماس..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"در حال بافر کردن؟؟؟"</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"در حال واکشی پست صوتی؟؟؟"</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"واکشی پست صوتی ممکن نیست."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"جدید"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"قدیمیتر"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"فقط تماسهای دارای پست صوتی"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"فقط تماسهای دریافتی"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"فقط تماسهای خروجی"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"ستاره"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"صفر"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"پوند"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"پست صوتی"</string>
<string name="description_search_button" msgid="3660807558587384889">"جستجو"</string>
<string name="description_dial_button" msgid="1274091017188142646">"شماره گیری"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"Backspace"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"شماره برای شماره گیری"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"سابقه تماس"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"گزینههای بیشتر"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"صفحه شمارهگیری"</string>
<string name="menu_copy" msgid="6108677035381940698">"کپی"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"فقط نمایش خروجی"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"فقط نمایش ورودی"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"فقط نمایش بیپاسخ"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"فقط نمایش پستهای صوتی"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"نمایش همه مکالمات"</string>
+ <string name="add_contact" msgid="8875804371377471164">"افزودن مخاطب"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"افزودن یک مکث ۲ ثانیهای"</string>
<string name="add_wait" msgid="3360818652790319634">"افزودن انتظار"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"اشتراک را انتخاب کنید"</string>
<string name="call_settings" msgid="7666474782093693667">"تنظیمات"</string>
<string name="menu_newContact" msgid="1209922412763274638">"مخاطب جدید"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"همه مخاطبین"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"جزئیات تماس"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"جزئیات تماس درخواستی خوانده نشد."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"استفاده از صفحهکلید لمسی"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"تماس خروجی"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"تماس بیپاسخ"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"پست صوتی"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"افزودن مخاطب"</string>
<string name="description_view_contact" msgid="5205669345700598415">"مشاهده مخاطب <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"تماس با <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"جزئیات تماس برای <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"پست صوتی جدید."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> تماس."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"ارسال پیام متنی به <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"پست صوتی شنیده نشده"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"شروع جستجوی صوتی"</string>
<string name="menu_callNumber" msgid="997146291983360266">"تماس با <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"ناشناس"</string>
<string name="voicemail" msgid="3851469869202611441">"پست صوتی"</string>
@@ -126,7 +126,7 @@
<string name="dialerDialpadHintText" msgid="5824490365898349041">"شماره گیری برای افزودن یک تماس"</string>
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> دقیقه و <xliff:g id="SECONDS">%s</xliff:g> ثانیه"</string>
<string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"تماس ارسال نشد"</string>
- <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"برای راهاندازی پست صوتی به منو > تنظیمات بروید."</string>
+ <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"برای راهاندازی پست صوتی به منو > تنظیمات بروید."</string>
<string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"برای تماس با پست صوتی، ابتدا حالت هواپیما را غیرفعال کنید."</string>
<string name="contact_list_loading" msgid="5488620820563977329">"در حال بارگیری..."</string>
<string name="imei" msgid="3045126336951684285">"IMEI"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"در حال بارگیری سیم کارت..."</string>
<string name="simContacts_title" msgid="27341688347689769">"مخاطبین سیم کارت"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"برای استفاده از این ویژگی، برنامه «افراد» را دوباره فعال کنید."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"تایپ نام یا شماره تلفن"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"همه موارد"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"بیپاسخ"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"اخیراً هیچ تماس بیپاسخی نداشتهاید."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"اخیراً هیچ پست صوتی نداشتهاید."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"نمایش همه مخاطبین"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"جستجوی صدا در دسترس نیست."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"برقراری تماس تلفنی ممکن نیست، زیرا برنامه تلفن غیرفعال شده است."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"هیچ فعالیت نصب شدهای برای انجام اقدام انتخاب شده در دسترس نیست."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"نام یا شماره تلفن را تایپ کنید"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"هیچ تماس بیپاسخ اخیری ندارید."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"هیچ پست صوتی اخیری ندارید."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"فقط نمایش موارد دلخواه"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"سابقه"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"همه موارد"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"بیپاسخ"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"پست صوتی"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"شمارهگیری سریع"</string>
+ <string name="tab_recents" msgid="929949073851377206">"موارد اخیر"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"مخاطبین"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"از موارد دلخواه حذف شد"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"لغو"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"تماس با <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"افزودن به مخاطبین"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"مشاهده سابقه تماس به صورت کامل"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> تماس بیپاسخ جدید"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"شمارهگیری سریع، شمارهگیری تک لمسی\nبرای مخاطبین مورد علاقه و شمارههایی است\n که اغلب با آنها تماس میگیرید."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"هیچ مخاطبی ندارید."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"برای مشاهده همه شمارهها روی تصویر ضربه بزنید یا برای مرتبسازی مجدد فشار دهید و نگهدارید"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"رد کردن"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"حذف"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"همه مخاطبین"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"تماس"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"گوش دادن"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"جزئیات"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"تماس بیپاسخ از <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>، <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>، <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"تماس پاسخداده شده از <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>، <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>، <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"تماس به <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>، <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>، <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"تماس با <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"گوش دادن به پست صوتی از <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"جزئیات تماس برای <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"ورودی گزارش تماس حذف شد."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"امروز"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"دیروز"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"هفته گذشته"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"قدیمیتر"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"لیست تماس"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"روشن کردن بلندگو."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"خاموش کردن بلندگو."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"پخش سریعتر"</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"پخش آهستهتر."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"شروع یا توقف موقت بازپخش."</string>
</resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 3353c3f..c1f1f21 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Tyhjennä puheluloki"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Poista vastaajaviesti"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Jaa vastaajaviesti"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Puheluloki on tyhjä."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Puheluloki on tyhjä."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Tyhjennä puheluloki?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Kaikki puhelutallenteet poistetaan."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Tyhjennetään puhelulokia..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Puskuroidaan..."</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Haetaan vastaajaviestiä..."</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Vastaajaviestin nouto epäonnistui."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Uusi"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Vanhemmat"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Vain vastaajaan menneet puhelut"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Vain saapuvat puhelut"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Vain soitetut puhelut"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"tähti"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"nolla"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"punta"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"vastaaja"</string>
<string name="description_search_button" msgid="3660807558587384889">"haku"</string>
<string name="description_dial_button" msgid="1274091017188142646">"soita"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"askelpalautin"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"numero johon soitetaan"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Soittohistoria"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Lisää vaihtoehtoja"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"näppäimistö"</string>
<string name="menu_copy" msgid="6108677035381940698">"Kopioi"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Näytä vain soitetut"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Näytä vain saapuneet"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Näytä vain vastaamattomat"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Näytä vain vastaajaviestit"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Näytä kaikki puhelut"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Lisää kontakti"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Lisää 2 sekunnin tauko"</string>
<string name="add_wait" msgid="3360818652790319634">"Lisää tauko"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Valitse liittymä"</string>
<string name="call_settings" msgid="7666474782093693667">"Asetukset"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Uusi yhteystieto"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Kaikki yhteystiedot"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Puhelun tiedot"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Valitun puhelun tietoja ei voi lukea."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Käytä näppäimistöä"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Lähtevä puhelu"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Vastaamaton puhelu"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Vastaaja"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Lisää yhteystieto"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Näytä yhteystieto <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Soita: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Yhteystiedot: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Uusi ääniviesti."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> puhelua."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Lähetä tekstiviesti: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Kuuntelematon vastaajaviesti"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Aloita puhehaku"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Soita <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Tuntematon"</string>
<string name="voicemail" msgid="3851469869202611441">"Vastaaja"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Ladataan SIM-kortilta…"</string>
<string name="simContacts_title" msgid="27341688347689769">"SIM-kortin yhteystiedot"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Ota Ihmiset-sovellus uudelleen käyttöön käyttääksesi tätä ominaisuutta."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Kirjoita nimi tai numero"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Kaikki"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Vastaamattomat"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Ei uusia vastaamattomia puheluita."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Ei uusia viestejä vastaajassa."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Näytä kaikki yhteystiedot"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Puhehaku ei ole käytettävissä."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Puhelua ei voi soittaa, koska Puhelin-sovellus on poistettu käytöstä."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Valitun toimen suoritusta varten ei ole asennettua toimintoa."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Kirjoita nimi tai puh.numero"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Sinulla ei ole uusia vastaamattomia puheluita."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Sinulla ei ole uusia puhelinvastaajaviestejä."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Näytä vain suosikit"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Historia"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Kaikki"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Vastaamattomat"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Vastaaja"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Pikavalinta"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Viimeisimmät"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Yhteystiedot"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Poistettu suosikeista"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Kumoa"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Soita <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Lisää yhteystietoihin"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Näytä koko soittohistoria"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> uutta vastaamatonta puhelua"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Pikavalinnalla soitat \nsuosikeille ja usein käytettyihin numeroihin\n yhdellä kosketuksella."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Sinulla ei ole kontakteja."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Napauta kuvaa nähdäksesi kaikki numerot tai järjestä uudelleen painamalla pitkään"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Ohita"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Poista"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"KAIKKI YHTEYSTIEDOT"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"SOITA TAKAISIN"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"KUUNTELE"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"TIEDOT"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Vastaamaton puhelu: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Vastattu puhelu: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Puhelu: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Soita takaisin: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Kuuntele vastaajaviesti: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Yhteystiedon <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> puhelutiedot"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Puhelulokimerkintä poistettiin."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Tänään"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Eilen"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Viime viikko"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Vanhempi"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Soittoluettelo"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Ota kaiutin käyttöön."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Poista kaiutin käytöstä."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Toista nopeammin."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Toista hitaammin."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Aloita tai keskeytä toisto."</string>
</resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..75f8045
--- /dev/null
+++ b/res/values-fr-rCA/strings.xml
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="8490255569343340580">"Appeler"</string>
+ <string name="launcherDialer" msgid="8636288196618486553">"Téléphone"</string>
+ <string name="dialerIconLabel" msgid="6500826552823403796">"Téléphone"</string>
+ <string name="recentCallsIconLabel" msgid="1419116422359067949">"Journal d\'appels"</string>
+ <string name="menu_sendTextMessage" msgid="6937343460284499306">"Envoyer un SMS"</string>
+ <string name="recentCalls_callNumber" msgid="1756372533999226126">"Appeler <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Modifier le numéro avant de passer l\'appel"</string>
+ <string name="recentCalls_addToContact" msgid="1429899535546487008">"Ajouter aux contacts"</string>
+ <string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Supprimer du journal d\'appels"</string>
+ <string name="recentCalls_deleteAll" msgid="6352364392762163704">"Effacer le journal d\'appels"</string>
+ <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Supprimer le message vocal"</string>
+ <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Partager le message vocal"</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Votre journal d\'appels est vide."</string>
+ <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Effacer le journal d\'appels?"</string>
+ <string name="clearCallLogConfirmation" msgid="5043563133171583152">"Votre journal d\'appels sera entièrement supprimé."</string>
+ <string name="clearCallLogProgress_title" msgid="8365943000154295771">"Suppression du journal d\'appels…"</string>
+ <plurals name="notification_voicemail_title">
+ <item quantity="one" msgid="1746619685488504230">"Messagerie vocale"</item>
+ <item quantity="other" msgid="5513481419205061254">"<xliff:g id="COUNT">%1$d</xliff:g> messages vocaux"</item>
+ </plurals>
+ <string name="notification_action_voicemail_play" msgid="6113133136977996863">"Lire"</string>
+ <string name="notification_voicemail_callers_list" msgid="1153954809339404149">"<xliff:g id="NEWER_CALLERS">%1$s</xliff:g>, <xliff:g id="OLDER_CALLER">%2$s</xliff:g>"</string>
+ <string name="notification_new_voicemail_ticker" msgid="895342132049452081">"Nouveau message vocal de <xliff:g id="CALLER">%1$s</xliff:g>"</string>
+ <string name="voicemail_playback_error" msgid="1811242131549854624">"Impossible d\'écouter le message vocal."</string>
+ <string name="voicemail_buffering" msgid="738287747618697097">"Mise mémoire tampon"</string>
+ <string name="voicemail_fetching_content" msgid="877911315738258780">"Récupération des messages vocaux…"</string>
+ <string name="voicemail_fetching_timout" msgid="6691792377574905201">"Impossible de récupérer messages vocaux."</string>
+ <string name="call_log_voicemail_header" msgid="3945407886667089173">"Seulement les appels avec message vocal"</string>
+ <string name="call_log_incoming_header" msgid="2787722299753674684">"Seulement les appels entrants"</string>
+ <string name="call_log_outgoing_header" msgid="761009180766735769">"Seulement les appels sortants"</string>
+ <string name="call_log_missed_header" msgid="8017148056610855956">"Seulement les appels manqués"</string>
+ <string name="voicemail_status_voicemail_not_available" msgid="3021980206152528883">"Impossible de se connecter au serveur de messagerie vocale."</string>
+ <string name="voicemail_status_messages_waiting" msgid="7113421459602803605">"Connexion messagerie vocale impossible. Messages en attente."</string>
+ <string name="voicemail_status_configure_voicemail" msgid="3738537770636895689">"Configurez votre messagerie vocale."</string>
+ <string name="voicemail_status_audio_not_available" msgid="3369618334553341626">"Contenu audio indisponible."</string>
+ <string name="voicemail_status_action_configure" msgid="8671796489912239589">"Configurer"</string>
+ <string name="voicemail_status_action_call_server" msgid="1824816252288551794">"Appeler mess. vocale"</string>
+ <string name="voicemail_speed_slowest" msgid="1733460666177707312">"Vitesse minimale"</string>
+ <string name="voicemail_speed_slower" msgid="1508601287347216244">"Vitesse lente"</string>
+ <string name="voicemail_speed_normal" msgid="9033988544627228892">"Vitesse normale"</string>
+ <string name="voicemail_speed_faster" msgid="2019965121475935488">"Vitesse rapide"</string>
+ <string name="voicemail_speed_fastest" msgid="5758712343491183292">"Vitesse maximale"</string>
+ <string name="call_log_item_count_and_date" msgid="7641933305703520787">"(<xliff:g id="COUNT">%1$d</xliff:g>) <xliff:g id="DATE">%2$s</xliff:g>"</string>
+ <string name="sms_disambig_title" msgid="5846266399240630846">"Sélectionner un numéro"</string>
+ <string name="call_disambig_title" msgid="4392886850104795739">"Sélectionner un numéro"</string>
+ <string name="make_primary" msgid="5829291915305113983">"Mémoriser ce choix"</string>
+ <string name="description_image_button_one" msgid="1740638037139856139">"un"</string>
+ <string name="description_image_button_two" msgid="5882638439003731308">"deux"</string>
+ <string name="description_image_button_three" msgid="8709731759376015180">"trois"</string>
+ <string name="description_image_button_four" msgid="3530239685642246130">"quatre"</string>
+ <string name="description_image_button_five" msgid="1182465427501188413">"cinq"</string>
+ <string name="description_image_button_six" msgid="2093656269261415475">"six"</string>
+ <string name="description_image_button_seven" msgid="2450357020447676481">"sept"</string>
+ <string name="description_image_button_eight" msgid="6969435115163287801">"huit"</string>
+ <string name="description_image_button_nine" msgid="7857248695662558323">"neuf"</string>
+ <string name="description_image_button_star" msgid="3365919907520767866">"étoile"</string>
+ <string name="description_image_button_zero" msgid="4133108949401820710">"zéro"</string>
+ <string name="description_image_button_pound" msgid="3039765597595889230">"dièse"</string>
+ <string name="description_search_button" msgid="3660807558587384889">"rechercher"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"composer"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"numéro à composer"</string>
+ <string name="action_menu_call_history_description" msgid="9018442816219748968">"Historique des appels"</string>
+ <string name="action_menu_overflow_description" msgid="2303272250613084574">"Plus d\'options"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"clavier numérique"</string>
+ <string name="menu_copy" msgid="6108677035381940698">"Copier"</string>
+ <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Afficher appels sortants uniq."</string>
+ <string name="menu_show_incoming_only" msgid="7534206815238877417">"Afficher appels entrants uniq."</string>
+ <string name="menu_show_missed_only" msgid="154473166059743996">"Afficher appels manqués uniq."</string>
+ <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Messages vocaux uniquement"</string>
+ <string name="menu_show_all_calls" msgid="7560347482073345885">"Afficher tous les appels"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Ajouter un contact"</string>
+ <string name="add_2sec_pause" msgid="9214012315201040129">"Ajouter une pause de 2 s"</string>
+ <string name="add_wait" msgid="3360818652790319634">"Ajouter Attendre"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Choisissez un abonnement"</string>
+ <string name="call_settings" msgid="7666474782093693667">"Paramètres"</string>
+ <string name="menu_newContact" msgid="1209922412763274638">"Nouveau contact"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Tous les contacts"</string>
+ <string name="callDetailTitle" msgid="5340227785196217938">"Détails sur l\'appel"</string>
+ <string name="toast_call_detail_error" msgid="7200975244804730096">"Impossible de consulter les détails de l\'appel demandé."</string>
+ <string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Utiliser le clavier DTMF"</string>
+ <string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Reprendre l\'appel en cours"</string>
+ <string name="dialer_addAnotherCall" msgid="4205688819890074468">"Autre appel"</string>
+ <string name="type_incoming" msgid="6502076603836088532">"Appel entrant"</string>
+ <string name="type_outgoing" msgid="343108709599392641">"Appel sortant"</string>
+ <string name="type_missed" msgid="2720502601640509542">"Appel manqué"</string>
+ <string name="type_voicemail" msgid="5153139450668549908">"Messagerie vocale"</string>
+ <string name="actionIncomingCall" msgid="6028930669817038600">"Appels entrants"</string>
+ <string name="description_call_log_play_button" msgid="651182125650429846">"Écouter le message vocal"</string>
+ <string name="description_call_log_incoming_call" msgid="4485427487637250143">"Appel entrant"</string>
+ <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Appel sortant"</string>
+ <string name="description_call_log_missed_call" msgid="2242805209983708825">"Appel manqué"</string>
+ <string name="description_call_log_voicemail" msgid="4600798771975158948">"Messagerie vocale"</string>
+ <string name="description_view_contact" msgid="5205669345700598415">"Afficher le contact <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_call" msgid="3443678121983852666">"Appeler <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Coordonnées de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Nouveau message vocal."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> appels."</string>
+ <string name="description_send_text_message" msgid="7803126439934046891">"Envoyer un SMS à <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Nouveau message vocal"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Démarrer la recherche vocale"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Appeler le <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="unknown" msgid="740067747858270469">"Inconnu"</string>
+ <string name="voicemail" msgid="3851469869202611441">"Messagerie vocale"</string>
+ <string name="private_num" msgid="6374339738119166953">"Numéro privé"</string>
+ <string name="payphone" msgid="4864313342828942922">"Cabine téléphonique"</string>
+ <string name="dialerKeyboardHintText" msgid="5401660096579787344">"Utilisez le clavier pour composer un numéro."</string>
+ <string name="dialerDialpadHintText" msgid="5824490365898349041">"Composer le numéro pour ajouter un appel"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> min <xliff:g id="SECONDS">%s</xliff:g> s"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Appel non effectué"</string>
+ <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Pour configurer la messagerie vocale, accédez à Menu > Paramètres."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Veuillez désactiver le mode Avion avant d\'appeler la messagerie vocale."</string>
+ <string name="contact_list_loading" msgid="5488620820563977329">"Chargement en cours..."</string>
+ <string name="imei" msgid="3045126336951684285">"Code IMEI"</string>
+ <string name="meid" msgid="6210568493746275750">"MEID"</string>
+ <string name="simContacts_emptyLoading" msgid="6700035985448642408">"Chargement depuis la carte SIM..."</string>
+ <string name="simContacts_title" msgid="27341688347689769">"Contacts de carte SIM"</string>
+ <string name="add_contact_not_available" msgid="1419207765446461366">"Réactivez l\'application Contacts pour utiliser cette fonctionnalité."</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"La recherche vocale n\'est pas accessible."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Impossible d\'effectuer un appel téléphonique, car l\'application Téléphone a été désactivée."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Aucune des applications installées ne peut effectuer l\'action sélectionnée."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Entrez un nom/no de téléphone"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Vous n\'avez aucun appel manqué récent."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Vous n\'avez aucun message vocal récent."</string>
+ <string name="show_favorites_only" msgid="5520072531022614595">"Afficher les contacts favoris uniquement"</string>
+ <string name="call_log_activity_title" msgid="4612824396355272023">"Historique"</string>
+ <string name="call_log_all_title" msgid="3566738938889333307">"Tous"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Manqués"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Mess. voc."</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Composition rapide"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Récents"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Contacts"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Supprimé des favoris"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Annuler"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Appeler le <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Ajouter aux contacts"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Afficher tout l\'historique des appels"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> nouveaux appels manqués"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"La numérotation abrégée permet d\'appeler\nà l\'aide d\'une seule touche vos contacts favoris\net les numéros que vous appelez fréquemment."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Vous n\'avez aucun contact."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Touchez l\'image pour afficher tous les numéros, ou maintenez votre doigt sur l\'une d\'elles pour les réorganiser"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Fermer"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Supprimer"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"TOUS LES CONTACTS"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"RAPPELER"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"ÉCOUTER"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"DÉTAILS"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Appel manqué de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g> à <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Appel reçu de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g> à <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Appel à <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g> à <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Rappeler <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Écouter le message vocal de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Détails de l\'appel pour <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Entrée du journal d\'appels supprimée."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Aujourd\'hui"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Hier"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"La semaine dernière"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Plus anciens"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Liste d\'appels"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Activer le haut-parleur."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Désactiver le haut-parleur."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Lire plus vite."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Lire moins vite."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Lancer ou interrompre la lecture."</string>
+</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 3113681..7978d43 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Effacer tous les appels"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Supprimer le message vocal"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Partager le message vocal"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Aucun appel."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Votre journal d\'appels est vide."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Effacer les appels ?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Votre journal d\'appels va être supprimé."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Effacement des appels…"</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Mise en mémoire tampon..."</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Récupération des messages vocaux..."</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Impossible de récupérer messages vocaux."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Nouveau"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Précédent"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Seulement les appels avec message vocal"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Seulement les appels entrants"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Seulement les appels sortants"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"étoile"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"zéro"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"dièse"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"messagerie vocale"</string>
<string name="description_search_button" msgid="3660807558587384889">"rechercher"</string>
<string name="description_dial_button" msgid="1274091017188142646">"composer"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"retour arrière"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"numéro à composer"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Historique des appels"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Plus d\'options"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"clavier numérique"</string>
<string name="menu_copy" msgid="6108677035381940698">"Copier"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Afficher appels sortants uniq."</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Afficher appels entrants uniq."</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Afficher appels manqués uniq."</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Messages vocaux uniquement"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Afficher tous les appels"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Ajouter un contact"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Ajouter une pause de 2 s"</string>
- <string name="add_wait" msgid="3360818652790319634">"Ajouter Attendre"</string>
+ <string name="add_wait" msgid="3360818652790319634">"Ajouter une attente"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Sélectionner un abonnement"</string>
<string name="call_settings" msgid="7666474782093693667">"Paramètres"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Nouveau contact"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Tous les contacts"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Détails sur l\'appel"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Impossible de consulter les détails de l\'appel demandé."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Utiliser le clavier DTMF"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Appel sortant"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Appel manqué"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Message vocal"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Ajouter un contact"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Afficher le contact <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Appeler <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Coordonnées associées à <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Nouveau message vocal"</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> appels"</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Envoyer un SMS à <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Nouveau message vocal"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Démarrer la recherche vocale"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Appeler le <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Inconnu"</string>
<string name="voicemail" msgid="3851469869202611441">"Messagerie vocale"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Chargement depuis la carte SIM..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Contacts de carte SIM"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Réactivez l\'application Contacts pour utiliser cette fonctionnalité."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Saisir nom ou numéro tél."</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Tous"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Manqués"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Aucun appel manqué récent"</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Aucun message vocal récent"</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Afficher tous les contacts"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"La recherche vocale n\'est pas disponible."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Impossible d\'effectuer un appel téléphonique, car l\'application Téléphone a été désactivée."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Aucune application installée n\'est disponible pour effectuer l\'action sélectionnée."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Saisissez nom/numéro de tél."</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Vous n\'avez aucun appel manqué récent."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Vous n\'avez aucun message vocal récent."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Afficher les contacts ajoutés aux favoris uniquement"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Historique"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Tous"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Manqués"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Mess. vocale"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Numérotation abrégée"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Récents"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Contacts"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Supprimé des favoris."</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Annuler"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Appeler le <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Ajouter aux contacts"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Afficher tout l\'historique des appels"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"Nouveaux appels manqués : <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"La numérotation abrégée vous permet d\'appeler\nvos contacts favoris et les numéros que vous appelez fréquemment\n d\'une simple pression du doigt."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Vous n\'avez aucun contact."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Appuyer sur l\'image pour afficher tous les numéros ou appuyer de manière prolongée pour les réorganiser"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Ignorer"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Supprimer"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"TOUS LES CONTACTS"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"RAPPELER"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"ÉCOUTER"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"DÉTAILS"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Appel manqué <xliff:g id="TIMEOFCALL">%3$s</xliff:g> (appelant : <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>)"</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Appel reçu <xliff:g id="TIMEOFCALL">%3$s</xliff:g> (appelant :<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>)"</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Appel émis <xliff:g id="TIMEOFCALL">%3$s</xliff:g> (destinataire : <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>)"</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Rappeler le numéro ou le contact \"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>\""</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Écouter le message vocal laissé par le numéro ou le contact \"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>\""</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Détails de l\'appel pour <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"L\'entrée du journal d\'appels a bien été supprimée."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Aujourd\'hui"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Hier"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"La semaine dernière"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Plus anciens"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Liste d\'appels"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Activer le haut-parleur"</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Désactiver le haut-parleur"</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Lire plus vite"</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Lire moins vite"</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Lancer ou suspendre la lecture"</string>
</resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index d60e91d..5f08a69 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"कॉल लॉग साफ़ करें"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"ध्वनि मेल हटाएं"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"ध्वनिमेल साझा करें"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"कॉल लॉग खाली है."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"आपका कॉल लॉग रिक्त है."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"कॉल लॉग साफ़ करें?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"आपके सभी कॉल रिकॉर्ड हटा दिए जाएंगे."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"कॉल लॉग साफ़ हो रहा है..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"बफ़र हो रहा है…"</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"ध्वनिमेल फ़ेच कर रहा है…"</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"ध्वनिमेल फ़ेच नहीं किया जा सका."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"नया"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"पुराने"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"केवल ध्वनिमेल वाले कॉल"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"केवल इनकमिंग कॉल"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"केवल आउटगोइंग कॉल"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"तारा"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"शून्य"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"पाउंड"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"ध्वनि मेल"</string>
<string name="description_search_button" msgid="3660807558587384889">"खोजें"</string>
<string name="description_dial_button" msgid="1274091017188142646">"डायल करें"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"हटाएं"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"डायल करने के लिए नंबर"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"कॉल इतिहास"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"अधिक विकल्प"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"डायलपैड"</string>
<string name="menu_copy" msgid="6108677035381940698">"प्रतिलिपि"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"केवल आउटगोइंग ही दिखाएं"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"केवल इनकमिंग ही दिखाएं"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"केवल छूटे हुए ही दिखाएं"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"केवल ध्वनिमेल दिखाएं"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"सभी कॉल दिखाएं"</string>
+ <string name="add_contact" msgid="8875804371377471164">"संपर्क जोड़ें"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"2-सेकंड का विराम जोड़ें"</string>
<string name="add_wait" msgid="3360818652790319634">"प्रतीक्षा का समय बढ़ाएं"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"सदस्यता चुनें"</string>
<string name="call_settings" msgid="7666474782093693667">"सेटिंग"</string>
<string name="menu_newContact" msgid="1209922412763274638">"नया संपर्क"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"सभी संपर्क"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"कॉल विवरण"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"अनुरोध किए गए कॉल का विवरण नहीं पढ़ा जा सका."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"टच टोन कीपैड का उपयोग करें"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"आउटगोइंग कॉल"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"छूटी कॉल"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"ध्वनिमेल"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"संपर्क जोड़ें"</string>
<string name="description_view_contact" msgid="5205669345700598415">"<xliff:g id="NAME">%1$s</xliff:g> संपर्क देखें"</string>
<string name="description_call" msgid="3443678121983852666">"<xliff:g id="NAME">%1$s</xliff:g> को कॉल करें"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> का संपर्क विवरण"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"नया ध्वनि मेल."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> कॉल."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"<xliff:g id="NAME">%1$s</xliff:g> को पाठ संदेश भेजें"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"नहीं सुना गया ध्वनिमेल"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"बोलकर खोजें शुरु करें"</string>
<string name="menu_callNumber" msgid="997146291983360266">"<xliff:g id="NUMBER">%s</xliff:g> पर कॉल करें"</string>
<string name="unknown" msgid="740067747858270469">"अज्ञात"</string>
<string name="voicemail" msgid="3851469869202611441">"ध्वनिमेल"</string>
@@ -133,21 +133,51 @@
<string name="meid" msgid="6210568493746275750">"MEID"</string>
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"सिम कार्ड से लोड हो रहा है…"</string>
<string name="simContacts_title" msgid="27341688347689769">"सिम कार्ड के संपर्क"</string>
- <string name="add_contact_not_available" msgid="1419207765446461366">"इस सुविधा का उपयोग करने के लिए लोग एप्लिकेशन को पुन: सक्षम करें."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"नाम या फ़ोन लिखें"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"सभी"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"छूटे हुए"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"हाल ही का कोई भी छूटा हुआ कॉल नहीं."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"हाल ही का कोई भी ध्वनिमेल नहीं."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"सभी संपर्क दिखाएं"</string>
+ <string name="add_contact_not_available" msgid="1419207765446461366">"इस सुविधा का उपयोग करने के लिए लोग ऐप्स को पुन: सक्षम करें."</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"बोलकर खोजना उपलब्ध नहीं है."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"फ़ोन कॉल नहीं किया जा सकता क्योंकि फ़ोन एप्लिकेशन अक्षम कर दिया गया है."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"चयनित कार्यवाही का प्रबंधन करने के लिए इंस्टॉल की गई कोई भी गतिविधि उपलब्ध नहीं है."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"नाम या फ़ोन नंबर लिखें"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"आपके पास हाल ही में छूटा हुआ कोई कॉल नहीं है."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"आपके पास हाल ही का कोई ध्वनिमेल नहीं है."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"केवल पसंदीदा दिखाएं"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"इतिहास"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"सभी"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"छूटे हुए"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"ध्वनिमेल"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"स्पीड डायल"</string>
+ <string name="tab_recents" msgid="929949073851377206">"हाल ही के"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"संपर्क"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"पसंदीदा से निकाल दिया गया"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"पूर्ववत करें"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"<xliff:g id="NUMBER">%s</xliff:g> पर कॉल करें"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"संपर्कों में जोड़ें"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"पूर्ण काल इतिहास देखें"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> छूटे हुए नए कॉल"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"स्पीड डायल उन \nपसंदीदा और नंबरों के लिए\n एकल स्पर्श डायलिंग है जिन्हें आप अक्सर कॉल करते हैं."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"आपके पास कोई संपर्क नहीं है."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"सभी नंबर देखने के लिए चित्र को टैप करें या पुनः क्रमित करने के लिए दबाए रखें"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"ख़ारिज करें"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"निकालें"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"सभी संपर्क"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"वापस कॉल करें"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"सुनें"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"विवरण"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"छूटे कॉल का विवरण: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"उत्तर दिए गए कॉल का विवरण: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"किए जाने वाले कॉल का विवरण: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"वापस कॉल करें: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> की ध्वनिमेल सुनें"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> के कॉल विवरण"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"कॉल लॉग प्रविष्टि हटा दी गई."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"आज"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"कल"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"पिछले सप्ताह"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"पुराना"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"कॉल सूची"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"स्पीकर चालू करें."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"स्पीकर बंद करें."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"तेज़ी से चलाएं."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"धीरे चलाएं."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"प्लेबैक प्रारंभ करें या रोकें."</string>
</resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 5ea716b..9777c70 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Izbriši zapisnik poziva"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Brisanje govorne pošte"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Podijeli govornu poštu"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Zapisnik poziva je prazan"</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Vaš je zapisnik poziva prazan."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Izbrisati dnevnik poziva?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Svi vaši zapisi poziva bit će izbrisani."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Brisanje dnevnika poziva..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Stavljanje u međuspremnik..."</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Dohvaćanje govorne pošte..."</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Dohvaćanje govorne pošte nije uspjelo."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Novo"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Starije"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Samo pozivi s govornom poštom"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Samo dolazni pozivi"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Samo odlazni pozivi"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"zvjezdica"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"nula"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"funta"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"govorna pošta"</string>
<string name="description_search_button" msgid="3660807558587384889">"pretraži"</string>
<string name="description_dial_button" msgid="1274091017188142646">"biraj"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"broj za pozivanje"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Povijest poziva"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Više opcija"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"površina za biranje brojeva"</string>
<string name="menu_copy" msgid="6108677035381940698">"Kopiranje"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Prikaži samo odlazne"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Prikaži samo dolazne"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Prikaži samo propuštene"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Prikaži samo govorne pošte"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Prikaz svih poziva"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Dodaj kontakt"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Dodaj pauzu od 2 sek."</string>
<string name="add_wait" msgid="3360818652790319634">"Dodaj čekanje"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Odabir pretplate"</string>
<string name="call_settings" msgid="7666474782093693667">"Postavke"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Novi kontakt"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Svi kontakti"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Pojedinosti poziva"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Nije moguće pročitati pojedinosti za traženi poziv."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Koristi dodirnu zvučnu tipkovnicu"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Odlazni poziv"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Propušteni poziv"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Govorna pošta"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Dodaj kontakt"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Prikaz kontakta <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Pozovi: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Pojedinosti o kontaktu <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Nova govorna pošta."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"Broj poziva: <xliff:g id="NUMBEROFCALLS">%1$s</xliff:g>."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Slanje tekstualne poruke: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Nepreslušana govorna pošta"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Pokretanje glasovnog pretraživanja"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Nazovite <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Nepoznato"</string>
<string name="voicemail" msgid="3851469869202611441">"Govorna pošta"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Učitavanje sa SIM kartice..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Kontakti SIM kartice"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Ponovo omogućite aplikaciju Osobe da biste upotrebljavali tu značajku."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Upišite ime ili tel."</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Sve"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Propušteni"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Nema nedavnih propuštenih poziva"</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Nema nedavne govorne pošte"</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Prikaži sve kontakte"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Glasovno pretraživanje nije dostupno."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Telefoniranje nije moguće jer je aplikacija Telefon onemogućena."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Nema instaliranih aplikacija za rukovanje odabranom radnjom."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Upišite ime ili tel. broj"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Nemate nedavnih propuštenih poziva."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Nemate nedavne govorne pošte."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Prikaži samo favorite"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Povijest"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Sve"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Propušteni"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Gov. pošta"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Brzo biranje"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Najnoviji"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Kontakti"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Uklonjeno iz favorita"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Poništi"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Nazovi <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Dodaj u kontakte"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Prikaz cijele povijesti poziva"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"Broj novih propuštenih poziva: <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Brzo biranje omogućuje vam da samo jednim dodirom birate \nfavorite i brojeve\n koje često zovete."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Nemate kontakata."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Dodirnite sliku da biste vidjeli sve brojeve ili pritisnite i zadržite da biste promijenili poredak"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Odbaci"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Ukloni"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"SVI KONTAKTI"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"POVRATNI POZIV"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"POSLUŠAJTE"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"POJEDINOSTI"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Propušteni poziv kontakta <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Prihvaćeni poziv kontakta <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Upućeni poziv kontaktu <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Uzvraćanje poziva kontaktu <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Slušanje govorne pošte kontakta <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Pojedinosti o pozivu za kontakt <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Unos zapisnika poziva izbrisan je."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Danas"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Jučer"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Prošli tjedan"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Stariji"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Popis poziva"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Uključivanje zvučnika."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Isključivanje zvučnika."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Brža reprodukcija."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Sporija reprodukcija."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Pokretanje ili pauziranje reprodukcije."</string>
</resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 972f147..943c4c3 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Híváslista törlése"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Hangposta törlése"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Hangposta megosztása"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"A híváslista üres."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"A hívásnapló üres."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Törli a híváslistát?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Minden telefonhívás törlésre kerül."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Híváslista törlése..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Pufferelés…"</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Hangpostaüzenet lekérése…"</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"A hangposta nem hívható le."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Új"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Régebbi"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Csak hangpostahívások"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Csak bejövő hívások"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Csak kimenő hívások"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"csillag"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"nulla"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"kettős kereszt"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"hangposta"</string>
<string name="description_search_button" msgid="3660807558587384889">"keresés"</string>
<string name="description_dial_button" msgid="1274091017188142646">"tárcsázás"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"Backspace"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"a tárcsázandó szám"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Hívási előzmények"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"További beállítások"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"tárcsázó"</string>
<string name="menu_copy" msgid="6108677035381940698">"Másolás"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Csak a kimenők megjelenítése"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Csak a bejövők megjelenítése"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Csak a nem fogadottak"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Csak a hangüzenetek"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Összes hívás megjelenítése"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Névjegy hozzáadása"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"2 mp-es szünet hozzáadása"</string>
<string name="add_wait" msgid="3360818652790319634">"Várakozás hozzáadása"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Előfizetés kiválasztása"</string>
<string name="call_settings" msgid="7666474782093693667">"Beállítások"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Új névjegy"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Összes névjegy"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Hívás adatai"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Nem sikerült olvasni a megadott hívás adatait."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Hangkódos telefonbillentyűzet használata"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Kimenő hívás"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Nem fogadott hívás"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Hangüzenet"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Névjegy hozzáadása"</string>
<string name="description_view_contact" msgid="5205669345700598415">"<xliff:g id="NAME">%1$s</xliff:g> névjegyének megtekintése"</string>
<string name="description_call" msgid="3443678121983852666">"<xliff:g id="NAME">%1$s</xliff:g> hívása"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> részletes adatai."</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Új hangpostaüzenet."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> hívás"</string>
<string name="description_send_text_message" msgid="7803126439934046891">"SMS küldése neki: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Nem lejátszott hangüzenet"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Hangalapú keresés indítása"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Hívás: <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Ismeretlen"</string>
<string name="voicemail" msgid="3851469869202611441">"Hangposta"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Betöltés a SIM-kártyáról..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Névjegyek a SIM-kártyán"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"A funkció használatához aktiválja újra a Személyek alkalmazást."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Név vagy tel.szám beírása"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Összes"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Nem fog."</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Nincsenek újabb elmulasztott hívások."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Nincsenek újabb hangpostaüzenetek."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Az összes névjegy megjelenítése"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"A hangalapú keresés nem érhető el."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Nem lehet telefonhívást kezdeményezni, mert a Telefon alkalmazást letiltották."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"A kijelölt művelet kezelésére nincs telepített alkalmazás."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Név vagy telefonszám megadása"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Nincsenek elmulasztott hívásai a közelmúltból."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Nincsenek hangpostaüzenetei a közelmúltból."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Csak kedvencek megjelenítése"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Előzmények"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Összes"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Nem fogadott"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Hangposta"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Gyorshívó"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Legutóbbiak"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Címtár"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Eltávolítva a kedvencek közül"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Visszavonás"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Hívás: <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Hozzáadás a névjegyekhez"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Teljes híváslista megtekintése"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> új nem fogadott hívás"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"A gyorshívás egyérintéses tárcsázás\na gyakran hívott\n kedvencekhez és számokhoz."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Nincsenek névjegyei."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Koppintson a képre az összes szám megtekintéséhez, vagy tartsa lenyomva az átrendezéshez"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Elvetés"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Eltávolítás"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ÖSSZES NÉVJEGY"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"VISSZAHÍVÁS"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"MEGHALLGATÁS"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"RÉSZLETEK"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Nem fogadott hívás a következőtől: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Fogadott hívás a következőtől: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Kimenő hívás: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> visszahívása"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> hangpostaüzenetének meghallgatása"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> – hívásrészletek"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Hívásnapló-bejegyzés törölve."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Ma"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Tegnap"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Múlt hét"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Korábbi"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Híváslista"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Hangszóró bekapcsolása."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Hangszóró kikapcsolása."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Gyorsabb lejátszás."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Lassabb lejátszás."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Lejátszás indítása vagy szüneteltetése."</string>
</resources>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
new file mode 100644
index 0000000..ca9523a
--- /dev/null
+++ b/res/values-hy-rAM/strings.xml
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="8490255569343340580">"Համարհավաքիչ"</string>
+ <string name="launcherDialer" msgid="8636288196618486553">"Հեռախոս"</string>
+ <string name="dialerIconLabel" msgid="6500826552823403796">"Հեռախոս"</string>
+ <string name="recentCallsIconLabel" msgid="1419116422359067949">"Զանգերի գրանցամատյան"</string>
+ <string name="menu_sendTextMessage" msgid="6937343460284499306">"Ուղարկել տեքստային հաղորդագրություն"</string>
+ <string name="recentCalls_callNumber" msgid="1756372533999226126">"Զանգել <xliff:g id="NAME">%s</xliff:g>-ին"</string>
+ <string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Խմբագրել համարը զանգելուց առաջ"</string>
+ <string name="recentCalls_addToContact" msgid="1429899535546487008">"Ավելացնել կոնտակտներում"</string>
+ <string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Հեռացնել զանգերի գրանցամատյանից"</string>
+ <string name="recentCalls_deleteAll" msgid="6352364392762163704">"Մաքրել զանգերի գրանցամատյանը"</string>
+ <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Ջնջել ձայնային փոստը"</string>
+ <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Տարածել ձայնային փոստը"</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Ձեր զանգերի մատյանը դատարկ է:"</string>
+ <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Մաքրե՞լ զանգերի գրանցամատյանը"</string>
+ <string name="clearCallLogConfirmation" msgid="5043563133171583152">"Ձեր բոլոր զանգերի գրառումները կջնջվեն:"</string>
+ <string name="clearCallLogProgress_title" msgid="8365943000154295771">"Զանգերի գրանցամատյանը մաքրվում է..."</string>
+ <plurals name="notification_voicemail_title">
+ <item quantity="one" msgid="1746619685488504230">"Ձայնային փոստ"</item>
+ <item quantity="other" msgid="5513481419205061254">"<xliff:g id="COUNT">%1$d</xliff:g> ձայնային փոստ"</item>
+ </plurals>
+ <string name="notification_action_voicemail_play" msgid="6113133136977996863">"Նվագարկել"</string>
+ <string name="notification_voicemail_callers_list" msgid="1153954809339404149">"<xliff:g id="NEWER_CALLERS">%1$s</xliff:g>, <xliff:g id="OLDER_CALLER">%2$s</xliff:g>"</string>
+ <string name="notification_new_voicemail_ticker" msgid="895342132049452081">"Նոր ձայնային փոստ <xliff:g id="CALLER">%1$s</xliff:g>-ից"</string>
+ <string name="voicemail_playback_error" msgid="1811242131549854624">"Հնարավոր չէ նվագարկել ձայնային փոստը:"</string>
+ <string name="voicemail_buffering" msgid="738287747618697097">"Պահնակավորում..."</string>
+ <string name="voicemail_fetching_content" msgid="877911315738258780">"Ձայնային փոստի ստացում..."</string>
+ <string name="voicemail_fetching_timout" msgid="6691792377574905201">"Չհաջողվեց ստանալ ձայնային փոստը:"</string>
+ <string name="call_log_voicemail_header" msgid="3945407886667089173">"Միայն ձայնային փոստով զանգերը"</string>
+ <string name="call_log_incoming_header" msgid="2787722299753674684">"Միայն մուտքային զանգեր"</string>
+ <string name="call_log_outgoing_header" msgid="761009180766735769">"Միայն ելքային զանգերը"</string>
+ <string name="call_log_missed_header" msgid="8017148056610855956">"Միայն բաց թողնված զանգերը"</string>
+ <string name="voicemail_status_voicemail_not_available" msgid="3021980206152528883">"Հնարավոր չէ կապ հաստատել ձայնային փոստի սերվերի հետ:"</string>
+ <string name="voicemail_status_messages_waiting" msgid="7113421459602803605">"Հնարավոր չէ կապ հաստատել ձայնային փոստի սերվերի հետ: Նոր ձայնային փոստերը սպասում են:"</string>
+ <string name="voicemail_status_configure_voicemail" msgid="3738537770636895689">"Կարգավորեք ձեր ձայնային փոստը:"</string>
+ <string name="voicemail_status_audio_not_available" msgid="3369618334553341626">"Ձայնանյութը հասանելի չէ:"</string>
+ <string name="voicemail_status_action_configure" msgid="8671796489912239589">"Կարգավորել"</string>
+ <string name="voicemail_status_action_call_server" msgid="1824816252288551794">"Միանալ ձայնային փոստին"</string>
+ <string name="voicemail_speed_slowest" msgid="1733460666177707312">"Ամենադանդաղ արագություն"</string>
+ <string name="voicemail_speed_slower" msgid="1508601287347216244">"Դանդաղ արագություն"</string>
+ <string name="voicemail_speed_normal" msgid="9033988544627228892">"Միջին արագություն"</string>
+ <string name="voicemail_speed_faster" msgid="2019965121475935488">"Արագ"</string>
+ <string name="voicemail_speed_fastest" msgid="5758712343491183292">"Շատ արագ"</string>
+ <string name="call_log_item_count_and_date" msgid="7641933305703520787">"(<xliff:g id="COUNT">%1$d</xliff:g>) <xliff:g id="DATE">%2$s</xliff:g>"</string>
+ <string name="sms_disambig_title" msgid="5846266399240630846">"Ընտրել համարը"</string>
+ <string name="call_disambig_title" msgid="4392886850104795739">"Ընտրել համարը"</string>
+ <string name="make_primary" msgid="5829291915305113983">"Հիշել այս ընտրությունը"</string>
+ <string name="description_image_button_one" msgid="1740638037139856139">"մեկ"</string>
+ <string name="description_image_button_two" msgid="5882638439003731308">"երկու"</string>
+ <string name="description_image_button_three" msgid="8709731759376015180">"երեք"</string>
+ <string name="description_image_button_four" msgid="3530239685642246130">"չորս"</string>
+ <string name="description_image_button_five" msgid="1182465427501188413">"հինգ"</string>
+ <string name="description_image_button_six" msgid="2093656269261415475">"վեց"</string>
+ <string name="description_image_button_seven" msgid="2450357020447676481">"յոթ"</string>
+ <string name="description_image_button_eight" msgid="6969435115163287801">"ութ"</string>
+ <string name="description_image_button_nine" msgid="7857248695662558323">"ինը"</string>
+ <string name="description_image_button_star" msgid="3365919907520767866">"աստղանշել"</string>
+ <string name="description_image_button_zero" msgid="4133108949401820710">"զրո"</string>
+ <string name="description_image_button_pound" msgid="3039765597595889230">"ֆունտ"</string>
+ <string name="description_search_button" msgid="3660807558587384889">"որոնել"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"համարարկել"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"համարհավաքման հեռախոսահամարը"</string>
+ <string name="action_menu_call_history_description" msgid="9018442816219748968">"Զանգերի պատմությունը"</string>
+ <string name="action_menu_overflow_description" msgid="2303272250613084574">"Այլ ընտրանքներ"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"թվաշար"</string>
+ <string name="menu_copy" msgid="6108677035381940698">"Պատճենել"</string>
+ <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Ցույց տալ միայն ելքայինները"</string>
+ <string name="menu_show_incoming_only" msgid="7534206815238877417">"Ցույց տալ միայն մուտքայինները"</string>
+ <string name="menu_show_missed_only" msgid="154473166059743996">"Ցույց տալ միայն բաց թողնվածները"</string>
+ <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Ցուցադրել միայն ձայնային փոստերը"</string>
+ <string name="menu_show_all_calls" msgid="7560347482073345885">"Ցուցադրել բոլոր զանգերը"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Ավելացնել կոնտակտ"</string>
+ <string name="add_2sec_pause" msgid="9214012315201040129">"Ավելացնել 2 վայրկյան դադար"</string>
+ <string name="add_wait" msgid="3360818652790319634">"Ավելացնել սպասում"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Ընտրել բաժանորդագրությունը"</string>
+ <string name="call_settings" msgid="7666474782093693667">"Կարգավորումներ"</string>
+ <string name="menu_newContact" msgid="1209922412763274638">"Նոր կոնտակտ"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Բոլոր կոնտակտները"</string>
+ <string name="callDetailTitle" msgid="5340227785196217938">"Զանգի մանրամասները"</string>
+ <string name="toast_call_detail_error" msgid="7200975244804730096">"Չհաջողվեց կարդալ հայցվող զանգի մանրամասները:"</string>
+ <string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Օգտագործել հնչերանգներով ստեղնաշարը"</string>
+ <string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Վերադառնալ ընթացիկ զանգին"</string>
+ <string name="dialer_addAnotherCall" msgid="4205688819890074468">"Ավելացնել զանգ"</string>
+ <string name="type_incoming" msgid="6502076603836088532">"Մուտքային զանգ"</string>
+ <string name="type_outgoing" msgid="343108709599392641">"Ելքային զանգ"</string>
+ <string name="type_missed" msgid="2720502601640509542">"Բաց թողնված զանգ"</string>
+ <string name="type_voicemail" msgid="5153139450668549908">"Ձայնային փոստ"</string>
+ <string name="actionIncomingCall" msgid="6028930669817038600">"Մուտքային զանգեր"</string>
+ <string name="description_call_log_play_button" msgid="651182125650429846">"Նվագարկել ձայնային փոստը"</string>
+ <string name="description_call_log_incoming_call" msgid="4485427487637250143">"Մուտքային զանգ"</string>
+ <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Ելքային զանգ"</string>
+ <string name="description_call_log_missed_call" msgid="2242805209983708825">"Բաց թողնված զանգ"</string>
+ <string name="description_call_log_voicemail" msgid="4600798771975158948">"Ձայնային փոստ"</string>
+ <string name="description_view_contact" msgid="5205669345700598415">"Դիտել <xliff:g id="NAME">%1$s</xliff:g> կոնտակտը"</string>
+ <string name="description_call" msgid="3443678121983852666">"Զանգել <xliff:g id="NAME">%1$s</xliff:g>-ին"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-ի կոնտակտային տվյալները"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Նոր ձայնային հաղորդագրություն:"</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> զանգ:"</string>
+ <string name="description_send_text_message" msgid="7803126439934046891">"Ուղարկել տեքստային հաղորդագրություն <xliff:g id="NAME">%1$s</xliff:g>-ին"</string>
+ <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Չլսված ձայնային փոստ"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Սկսկեք ձայնային որոնումը"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"Զանգել <xliff:g id="NUMBER">%s</xliff:g>-ին"</string>
+ <string name="unknown" msgid="740067747858270469">"Անհայտ"</string>
+ <string name="voicemail" msgid="3851469869202611441">"Ձայնային փոստ"</string>
+ <string name="private_num" msgid="6374339738119166953">"Անձնական համարը"</string>
+ <string name="payphone" msgid="4864313342828942922">"Վճարել հեռախոսը"</string>
+ <string name="dialerKeyboardHintText" msgid="5401660096579787344">"Օգտագործել ստեղնաշարը` համարհավաքելու համար"</string>
+ <string name="dialerDialpadHintText" msgid="5824490365898349041">"Համարհավաքել՝ զանգելու համար"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> րոպ <xliff:g id="SECONDS">%s</xliff:g> վրկ"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Զանգը չի առաքվել"</string>
+ <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Ձայնային փոստը կարգավորելու համար գնացեք Ցանկ > Կարգավորումներ:"</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Ձայնային փոստին զանգելու համար նախ անջատեք թռիչքային ռեժիմը:"</string>
+ <string name="contact_list_loading" msgid="5488620820563977329">"Բեռնում..."</string>
+ <string name="imei" msgid="3045126336951684285">"IMEI"</string>
+ <string name="meid" msgid="6210568493746275750">"MEID"</string>
+ <string name="simContacts_emptyLoading" msgid="6700035985448642408">"SIM քարտը բեռնվում է..."</string>
+ <string name="simContacts_title" msgid="27341688347689769">"SIM քարտի կոնտակտները"</string>
+ <string name="add_contact_not_available" msgid="1419207765446461366">"Կրկին միացրեք Մարդիկ ծրագիրը` այս հատկությունn օգտագործելու համար:"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Ձայնային որոնումն անհասանելի է:"</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Հնարավոր չէ զանգահարել, քանի որ Հեռախոս հավելվածն անջատված է:"</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Ընտրված գործողությունը կարգավորելու համար ոչ մի տեղադրված գործունեություն հասանելի չէ:"</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Մուտքագրեք անունը կամ հեռախոսահամարը"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Վերջերս բաց թողած զանգեր չունեք:"</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Վերջերս ստացված ձայնային փոստ չունեք:"</string>
+ <string name="show_favorites_only" msgid="5520072531022614595">"Ցույց տալ միայն ընտրյալները"</string>
+ <string name="call_log_activity_title" msgid="4612824396355272023">"Պատմություն"</string>
+ <string name="call_log_all_title" msgid="3566738938889333307">"Բոլորը"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Բաց թողնված"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Ձայնափոստ"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Արագ համարհավաքում"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Վերջինները"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Կոնտակտներ"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Հեռացված է ընտրյալներից"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Հետարկել"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Զանգել <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Ավելացնել կոնտակտներում"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Դիտել բոլոր զանգերի պատմությունը"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> նոր բաց թողնված զանգ"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Արագ համարհավաքումը մեկ հպումով կհավաքի\nընտրանու կամ այնպիսի համարները\n, որոնց հաճախակի եք զանգահարում:"</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Դուք կոնտակտներ չունեք:"</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Հպեք նկարին՝ բոլոր համարները տեսնելու, կամ հպեք ու պահեք՝ վերադասավորելու համար:"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Անտեսել"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Հեռացնել"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ԲՈԼՈՐ ԿՈՆՏԱԿՏՆԵՐԸ"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"ՀԵՏ ԶԱՆԳԵԼ"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"ԼՍԵԼ"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"ՄԱՆՐԱՄԱՍՆԵՐ"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Բաց թողնված զանգ՝ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>:"</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Ընդունված զանգ՝ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>:"</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Կատարված զանգ՝ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>:"</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Հետ զանգել <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-ին"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Լսել ձայնային փոստը <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-ից"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> զանգի մասին տվյալներ"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Գրառումը ջնջվեց:"</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Այսօր"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Երեկ"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Անցյալ շաբաթ"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Ավելի հին"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Զանգերի ցանկ"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Միացնել բարձրախոսը:"</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Անջատել բարձրախոսը:"</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Նվագարկել ավելի արագ:"</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Նվագարկել ավելի դանդաղ:"</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Սկսել կամ դադարեցնել նվագարկումը:"</string>
+</resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index cd97d2d..d5e84e6 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Hapus log panggilan"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Hapus pesan suara"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Bagikan kotak pesan"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Log panggilan kosong."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Log panggilan Anda kosong."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Hapus log panggilan?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Semua catatan panggilan Anda akan dihapus."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Menghapus log panggilan..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Menyangga…"</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Mengambil pesan suara…"</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Tidak dapat mengambil pesan suara."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Baru"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Lawas"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Hanya panggilan dengan pesan suara"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Hanya panggilan masuk"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Hanya panggilan keluar"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"bintangi"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"nol"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"pound"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"kotak pesan"</string>
<string name="description_search_button" msgid="3660807558587384889">"telusuri"</string>
<string name="description_dial_button" msgid="1274091017188142646">"panggil"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"nomor untuk dipanggil"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Riwayat Panggilan"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Opsi lainnya"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"tombol nomor"</string>
<string name="menu_copy" msgid="6108677035381940698">"Salin"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Tampilkan panggilan keluar"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Tampilkan panggilan masuk saja"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Tampilkan panggilan terlewat"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Tampilkan pesan suara saja"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Tampilkan semua panggilan"</string>
- <string name="add_2sec_pause" msgid="9214012315201040129">"Tambahkan jeda 2-det"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Tambahkan kontak"</string>
+ <string name="add_2sec_pause" msgid="9214012315201040129">"Tambahkan jeda 2 dtk"</string>
<string name="add_wait" msgid="3360818652790319634">"Tambahkan tunggu"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Pilih Langganan"</string>
<string name="call_settings" msgid="7666474782093693667">"Setelan"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Kontak baru"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Semua kontak"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Detail panggilan"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Tidak dapat membaca detail untuk panggilan yang diminta."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Gunakan keypad nada sentuh"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Panggilan keluar"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Panggilan tak terjawab"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Pesan suara"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Tambahkan kontak"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Lihat kontak <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Panggil <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Detail kontak untuk <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Pesan suara baru."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> panggilan."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Kirim SMS ke <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Pesan suara yang belum didengar"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Memulai penelusuran suara"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Panggil <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Tidak diketahui"</string>
<string name="voicemail" msgid="3851469869202611441">"Kotak Pesan"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Memuat dari kartu SIM..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Kontak pada kartu SIM"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Aktifkan kembali aplikasi Orang untuk menggunakan fitur ini."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Ketikkan nama atau ponsel"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Semua"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"TakDijawab"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Tidak ada panggilan tak terjawab terbaru."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Tidak ada pesan suara terbaru."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Tampilkan semua kontak"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Penelusuran suara tidak tersedia."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Tidak dapat melakukan panggilan telepon karena aplikasi Telepon telah dinonaktifkan."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Tidak ada aktivitas terpasang yang tersedia untuk menangani tindakan yang dipilih."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Ketikkan nama/nomor ponsel"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Tidak ada panggilan tidak terjawab baru-baru ini."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Tidak ada kotak pesan baru-baru ini."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Hanya tampilkan favorit"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Riwayat"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Semua"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Tak Dijawab"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"PesanSuara"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Panggilan Cepat"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Terbaru"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Kontak"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Dihapus dari favorit"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Batalkan"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Telepon <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Tambahkan ke kontak"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Lihat riwayat panggilan telepon lengkap"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> panggilan tidak terjawab baru"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Panggilan cepat adalah satu sentuhan guna menelepon\nfavorit dan nomor\n yang sering Anda telepon."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Anda tidak memiliki kontak."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Ketuk gambar untuk melihat semua nomor atau tekan terus untuk mengatur ulang"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Tutup"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Hapus"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"SEMUA KONTAK"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"HUBUNGI KEMBALI"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"DENGAR"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"DETAIL"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Panggilan telepon tak terjawab dari <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Panggilan telepon terjawab dari <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Panggilan telepon ke <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Panggil kembali <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Dengarkan kotak pesan dari <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Detail panggilan telepon untuk <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Entri log panggilan telepon dihapus."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Hari ini"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Kemarin"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Minggu lalu"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Lebih lama"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Daftar Panggilan"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Aktifkan pengeras suara."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Nonaktifkan pengeras suara."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Putar lebih cepat."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Putar lebih lambat."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Mulai atau jeda pemutaran."</string>
</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 8b13fa3..185e0fd 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Cancella registro chiamate"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Elimina messaggio vocale"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Condividi messaggio vocale"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Il registro chiamate è vuoto."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Il registro chiamate è vuoto."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Cancellare registro?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Tutte le voci nel registro chiamate verranno eliminate."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Cancellazione registro chiamate..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Buffering..."</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Recupero messaggi segreteria..."</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Recupero messaggi segreteria non riuscito."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Nuovi"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Precedenti"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Solo chiamate con segreteria"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Solo chiamate in arrivo"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Solo chiamate in uscita"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"stella"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"zero"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"sterlina"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"segreteria"</string>
<string name="description_search_button" msgid="3660807558587384889">"cerca"</string>
<string name="description_dial_button" msgid="1274091017188142646">"componi"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"numero da comporre"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Cronologia chiamate"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Altre opzioni"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"tastierino"</string>
<string name="menu_copy" msgid="6108677035381940698">"Copia"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Mostra solo in uscita"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Mostra solo in arrivo"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Mostra solo senza risposta"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Mostra solo messaggi vocali"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Mostra tutte le chiamate"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Aggiungi contatto"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Aggiungi pausa 2 sec"</string>
<string name="add_wait" msgid="3360818652790319634">"Aggiungi attesa"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Seleziona abbonamento"</string>
<string name="call_settings" msgid="7666474782093693667">"Impostazioni"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Nuovo contatto"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Tutti i contatti"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Dettagli chiamata"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Impossibile leggere i dettagli per la chiamata richiesta."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Usa tastierino per selezione a toni"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Chiamata in uscita"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Chiamata senza risposta"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Messaggio vocale"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Aggiungi contatto"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Visualizza <xliff:g id="NAME">%1$s</xliff:g> contatto"</string>
<string name="description_call" msgid="3443678121983852666">"Chiama <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Dettagli contatto <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Nuovo messaggio di segreteria."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> chiamate."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Invia messaggio di testo a <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Messaggio vocale non ascoltato"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Avvia la ricerca vocale"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Chiama <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Sconosciuto"</string>
<string name="voicemail" msgid="3851469869202611441">"Segreteria"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Caricamento da SIM..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Contatti SIM"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Riattiva l\'app Persone per utilizzare questa funzione."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Digita nome o telefono"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Tutti"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Perse"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Nessuna chiamata persa recente."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Nessun messaggio vocale recente."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Mostra tutti i contatti"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"La ricerca vocale non è disponibile."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Impossibile effettuare una telefonata perché l\'applicazione Telefono è stata disattivata."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Nessuna applicazione installata disponibile per gestire l\'azione selezionata."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Digita nome o numero telefono"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Nessuna chiamata senza risposta recente."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Nessun messaggio vocale recente."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Mostra solo i preferiti"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Cronologia"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Tutti"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Perse"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Segreteria"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Chiamata rapida"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Recenti"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Contatti"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Rimosso dai preferiti"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Annulla"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Chiama <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Aggiungi ai contatti"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Visualizza cronologia completa delle chiamate"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> nuove chiamate senza risposta"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"La composizione veloce è la composizione con un tocco\ndi preferiti e numeri\n che chiami spesso."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Nessun contatto presente."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Tocca l\'immagine per visualizzare tutti i numeri o tieni premuto per cambiare l\'ordine"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Ignora"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Rimuovi"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"TUTTI I CONTATTI"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"RICHIAMA"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"ASCOLTA"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"DETTAGLI"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Chiamata senza risposta da <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Chiamata ricevuta da <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Chiamata a <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Richiama <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Ascolta il messaggio vocale di: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Dettagli chiamata per <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Voce del registro chiamate eliminata."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Oggi"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Ieri"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Settimana scorsa"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Meno recenti"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Elenco chiamate"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Attiva altoparlante."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Disattiva altoparlante."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Riproduci più velocemente."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Riproduci più lentamente."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Avvia o metti in pausa la riproduzione."</string>
</resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 5f960a1..96c9cd3 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"נקה יומן שיחות"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"מחק דואר קולי"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"שתף דואר קולי"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"יומן השיחות ריק."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"יומן השיחות שלך ריק."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"לנקות את יומן השיחות?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"כל רשומות השיחה שלך יימחקו."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"מנקה את יומן השיחות..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"מבצע אחסון זמני..."</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"מאחזר דואר קולי..."</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"לא ניתן להשיג דואר קולי."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"חדש"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"ישן יותר"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"שיחות עם דואר קולי בלבד"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"שיחות נכנסות בלבד"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"שיחות יוצאות בלבד"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"סמן בכוכב"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"אפס"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"סולמית"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"דואר קולי"</string>
<string name="description_search_button" msgid="3660807558587384889">"חפש"</string>
<string name="description_dial_button" msgid="1274091017188142646">"חייג"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"Backspace"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"מספר לחיוג"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"היסטוריית שיחות"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"אפשרויות נוספות"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"לוח חיוג"</string>
<string name="menu_copy" msgid="6108677035381940698">"העתק"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"הצג רק שיחות יוצאות"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"הצג רק שיחות נכנסות"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"הצג רק שיחות שלא נענו"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"הצג הודעות דואר קולי בלבד"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"הצג את כל השיחות"</string>
+ <string name="add_contact" msgid="8875804371377471164">"הוסף איש קשר"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"הוסף השהיה של 2 שניות"</string>
<string name="add_wait" msgid="3360818652790319634">"הוסף המתנה"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"בחר הרשמה"</string>
<string name="call_settings" msgid="7666474782093693667">"הגדרות"</string>
<string name="menu_newContact" msgid="1209922412763274638">"איש קשר חדש"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"כל אנשי הקשר"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"פרטי שיחה"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"לא ניתן לקרוא את פרטי השיחה המבוקשת."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"השתמש במקלדת עם חיוג צלילים"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"שיחה יוצאת"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"שיחה שלא נענתה"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"דואר קולי"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"הוסף איש קשר"</string>
<string name="description_view_contact" msgid="5205669345700598415">"הצג את איש הקשר <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"התקשר אל <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"פרטי יצירת קשר עבור <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"דואר קולי חדש."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> שיחות."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"שלח הודעת טקסט אל <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"דואר קולי שעדיין לא נשמע"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"התחל חיפוש קולי"</string>
<string name="menu_callNumber" msgid="997146291983360266">"התקשר אל <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"לא ידוע"</string>
<string name="voicemail" msgid="3851469869202611441">"דואר קולי"</string>
@@ -126,28 +126,58 @@
<string name="dialerDialpadHintText" msgid="5824490365898349041">"חייג כדי להוסיף שיחה"</string>
<string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> דקות <xliff:g id="SECONDS">%s</xliff:g> שניות"</string>
<string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"השיחה לא נשלחה."</string>
- <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"כדי להגדיר את הדואר הקולי, עבור אל \'תפריט\' > \'הגדרות\'."</string>
+ <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"כדי להגדיר את הדואר הקולי, עבור אל \'תפריט\' > \'הגדרות\'."</string>
<string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"כדי להתקשר לדואר קולי, ראשית כבה את מצב הטיסה."</string>
<string name="contact_list_loading" msgid="5488620820563977329">"טוען..."</string>
<string name="imei" msgid="3045126336951684285">"IMEI"</string>
<string name="meid" msgid="6210568493746275750">"MEID"</string>
- <string name="simContacts_emptyLoading" msgid="6700035985448642408">"טוען מכרטיס SIM…"</string>
- <string name="simContacts_title" msgid="27341688347689769">"אנשי קשר בכרטיס SIM"</string>
- <string name="add_contact_not_available" msgid="1419207765446461366">"הפעל מחדש את יישום אנשי הקשר כדי להשתמש בתכונה זו."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"הקלד שם או מספר טלפון"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"הכול"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"שיחה שלא נענתה"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"אין שיחות אחרונות שלא נענו."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"אין הודעות דואר קולי אחרונות."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"הצג את כל אנשי הקשר"</string>
+ <string name="simContacts_emptyLoading" msgid="6700035985448642408">"טוען מכרטיס SIM…"</string>
+ <string name="simContacts_title" msgid="27341688347689769">"אנשי קשר בכרטיס SIM"</string>
+ <string name="add_contact_not_available" msgid="1419207765446461366">"הפעל מחדש את אפליקציית אנשי הקשר כדי להשתמש בתכונה זו."</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"חיפוש קולי אינו זמין."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"לא ניתן לבצע שיחת טלפון מפני שאפליקציית הטלפון הושבתה."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"אין פעילות מותקנת הזמינה לטיפול בפעולה הנבחרת."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"הקלד שם או מספר טלפון"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"אין לך שיחות אחרונות שהוחמצו."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"אין לך הודעות דואר קולי אחרונות."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"הצג מועדפים בלבד"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"היסטוריה"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"הכול"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"שיחה שלא נענתה"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"דואר קולי"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"חיוג מהיר"</string>
+ <string name="tab_recents" msgid="929949073851377206">"אחרונים"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"אנשי קשר"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"הוסר מהמועדפים"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"בטל"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"התקשר אל <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"הוסף לאנשי הקשר"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"הצג את היסטוריית השיחות המלאה"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> שיחות חדשות שלא נענו"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"חיוג מהיר הוא חיוג בנגיעה אחת\nעבור מועדפים ומספרים\n שאליהם אתה מתקשר בתדירות גבוהה."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"אין לך אנשי קשר."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"הקש על תמונה כדי לראות את כל המספרים, או לחץ והחזק כדי לשנות את הסדר"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"סגור"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"הסר"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"כל אנשי הקשר"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"התקשר חזרה"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"האזן"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"פרטים"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"שיחה שלא נענתה מאת <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"שיחה שנענתה מאת <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"התקשר אל <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"התקשר חזרה אל <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"האזן לדואר קולי מאת <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"פרטי שיחה עבור <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"רשומת יומן שיחות נמחקה."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"היום"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"אתמול"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"השבוע האחרון"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"ישנות יותר"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"רשימת שיחות"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"הפעל את הרמקול."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"כבה את הרמקול."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"הפעל מהר יותר."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"הפעל לאט יותר."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"התחל או השהה הפעלה."</string>
</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index a59f0fd..3aaaf58 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -29,8 +29,8 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"通話履歴を全件消去"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"ボイスメールを削除"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"ボイスメールを共有"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"通話履歴なし"</string>
- <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"通話履歴を消しますか?"</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"通話履歴はありません。"</string>
+ <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"通話履歴を消去しますか?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"すべての通話記録は削除されます。"</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"通話履歴を消去しています..."</string>
<plurals name="notification_voicemail_title">
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"バッファリング中..."</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"ボイスメールを取得中..."</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"ボイスメールを取得できませんでした。"</string>
- <string name="call_log_new_header" msgid="846546437517724715">"新しい着信"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"以前の着信"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"ボイスメールのある着信のみ"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"着信のみ"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"発信のみ"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"スター"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"0"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"ポンド"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"ボイスメール"</string>
<string name="description_search_button" msgid="3660807558587384889">"検索"</string>
<string name="description_dial_button" msgid="1274091017188142646">"発信"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"Backspace"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"発信番号"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"通話履歴"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"その他のオプション"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"ダイヤルパッド"</string>
<string name="menu_copy" msgid="6108677035381940698">"コピー"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"発信のみを表示"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"着信のみを表示"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"不在着信のみを表示"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"ボイスメールのみ表示"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"すべての通話を表示"</string>
+ <string name="add_contact" msgid="8875804371377471164">"連絡先を追加"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"2秒間の停止を追加"</string>
<string name="add_wait" msgid="3360818652790319634">"待機を追加"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"定期購入を選択"</string>
<string name="call_settings" msgid="7666474782093693667">"設定"</string>
<string name="menu_newContact" msgid="1209922412763274638">"連絡先を新規登録"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"すべての連絡先"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"通話詳細"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"通話要求の詳細が読み込めませんでした。"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"プッシュホン式キーパッドを使う"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"発信"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"不在着信"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"ボイスメール"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"連絡先を追加"</string>
<string name="description_view_contact" msgid="5205669345700598415">"<xliff:g id="NAME">%1$s</xliff:g>の連絡先を表示"</string>
<string name="description_call" msgid="3443678121983852666">"<xliff:g id="NAME">%1$s</xliff:g>に発信"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>の連絡先の詳細"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"新着のボイスメール。"</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"通話回数は<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g>回。"</string>
<string name="description_send_text_message" msgid="7803126439934046891">"<xliff:g id="NAME">%1$s</xliff:g>にテキストメッセージを送信"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"未再生のボイスメール"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"音声検索を開始"</string>
<string name="menu_callNumber" msgid="997146291983360266">"<xliff:g id="NUMBER">%s</xliff:g>に発信"</string>
<string name="unknown" msgid="740067747858270469">"通知不可能"</string>
<string name="voicemail" msgid="3851469869202611441">"ボイスメール"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"SIMカードから読み取り中..."</string>
<string name="simContacts_title" msgid="27341688347689769">"SIMカードの連絡先"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"この機能を使用するには連絡帳アプリを再度有効にしてください。"</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"名前か電話番号を入力"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"すべて"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"不在着信"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"最近の不在着信はありません。"</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"最近のボイスメールはありません。"</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"すべての連絡先を表示"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"音声検索は利用できません。"</string>
+ <string name="call_not_available" msgid="8941576511946492225">"電話アプリが無効になっているため発信できません。"</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"選択した操作を処理できるアクティビティがインストールされていません。"</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"名前または電話番号を入力"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"最近の不在着信はありません。"</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"最近のボイスメールはありません。"</string>
<string name="show_favorites_only" msgid="5520072531022614595">"お気に入りのみを表示"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"履歴"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"すべて"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"不在着信"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"ボイスメール"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"クイックアクセス"</string>
+ <string name="tab_recents" msgid="929949073851377206">"最近"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"連絡先"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"お気に入りから削除されました"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"元に戻す"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"<xliff:g id="NUMBER">%s</xliff:g>に発信"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"連絡先に追加"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"通話履歴をすべて表示"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g>件の不在着信"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"クイックアクセスは、よく通話する\nお気に入りや番号にワンタップでダイヤルする\n機能です。"</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"連絡先はありません。"</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"画像をタップするとすべての番号を表示でき、押し続けると並び替えることができます"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"閉じる"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"削除"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"すべての連絡先"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"コールバック"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"再生"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"詳細"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"<xliff:g id="TIMEOFCALL">%3$s</xliff:g>の<xliff:g id="TYPEORLOCATION">%2$s</xliff:g><xliff:g id="NAMEORNUMBER">%1$s</xliff:g>からの不在着信。"</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"<xliff:g id="TIMEOFCALL">%3$s</xliff:g>の<xliff:g id="TYPEORLOCATION">%2$s</xliff:g><xliff:g id="NAMEORNUMBER">%1$s</xliff:g>からの着信。"</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"<xliff:g id="TIMEOFCALL">%3$s</xliff:g>の<xliff:g id="TYPEORLOCATION">%2$s</xliff:g><xliff:g id="NAMEORNUMBER">%1$s</xliff:g>への発信。"</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>にコールバック"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>からのボイスメールを再生"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>の通話の詳細"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"通話履歴エントリを削除しました。"</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"今日"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"昨日"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"過去1週間"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"以前の着信"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"通話リスト"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"スピーカーをONにします。"</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"スピーカーをOFFにします。"</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"速く再生します。"</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"遅く再生します。"</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"再生を開始または一時停止します。"</string>
</resources>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
new file mode 100644
index 0000000..2cfad3f
--- /dev/null
+++ b/res/values-ka-rGE/strings.xml
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="8490255569343340580">"დარეკვა"</string>
+ <string name="launcherDialer" msgid="8636288196618486553">"ტელეფონი"</string>
+ <string name="dialerIconLabel" msgid="6500826552823403796">"ტელეფონი"</string>
+ <string name="recentCallsIconLabel" msgid="1419116422359067949">"ზარების ჟურნალი"</string>
+ <string name="menu_sendTextMessage" msgid="6937343460284499306">"ტექსტური შეტყობინების გაგზავნა"</string>
+ <string name="recentCalls_callNumber" msgid="1756372533999226126">"<xliff:g id="NAME">%s</xliff:g>-თან დარეკვა"</string>
+ <string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"ნომრის რედაქტირება დარეკვამდე"</string>
+ <string name="recentCalls_addToContact" msgid="1429899535546487008">"კონტაქტებში დამატება"</string>
+ <string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"ზარების ჟურნალიდან ამოღება"</string>
+ <string name="recentCalls_deleteAll" msgid="6352364392762163704">"ზარების ჟურნალის წაშლა"</string>
+ <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"ხმოვანი ფოსტის წაშლა"</string>
+ <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"ხმოვანი ფოსტის გაზიარება"</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"თქვენი ზარის ჟურნალი ცარიელია."</string>
+ <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"გსურთ ზარების ჟურნალის წაშლა?"</string>
+ <string name="clearCallLogConfirmation" msgid="5043563133171583152">"ყველა თქვენი ზარის ჩანაწერი წაიშლება."</string>
+ <string name="clearCallLogProgress_title" msgid="8365943000154295771">"ზარების ჟურნალი იშლება…"</string>
+ <plurals name="notification_voicemail_title">
+ <item quantity="one" msgid="1746619685488504230">"ხმოვანი ფოსტა"</item>
+ <item quantity="other" msgid="5513481419205061254">"<xliff:g id="COUNT">%1$d</xliff:g> ხმოვანი ფოსტა"</item>
+ </plurals>
+ <string name="notification_action_voicemail_play" msgid="6113133136977996863">"დაკვრა"</string>
+ <string name="notification_voicemail_callers_list" msgid="1153954809339404149">"<xliff:g id="NEWER_CALLERS">%1$s</xliff:g>, <xliff:g id="OLDER_CALLER">%2$s</xliff:g>"</string>
+ <string name="notification_new_voicemail_ticker" msgid="895342132049452081">"ახალი ხმოვანი ფოსტა <xliff:g id="CALLER">%1$s</xliff:g>-ისგან"</string>
+ <string name="voicemail_playback_error" msgid="1811242131549854624">"ხმოვანი ფოსტის მოსმენა ვერ მოხერხდა."</string>
+ <string name="voicemail_buffering" msgid="738287747618697097">"ბუფერიზაცია…"</string>
+ <string name="voicemail_fetching_content" msgid="877911315738258780">"ხმოვანი ფოსტის მიღება…"</string>
+ <string name="voicemail_fetching_timout" msgid="6691792377574905201">"ხმოვანი ფოსტის მიღება ვერ მოხერხდა."</string>
+ <string name="call_log_voicemail_header" msgid="3945407886667089173">"მხოლოდ ზარები ხმოვანი ფოსტით"</string>
+ <string name="call_log_incoming_header" msgid="2787722299753674684">"მხოლოდ შემომავალი ზარები"</string>
+ <string name="call_log_outgoing_header" msgid="761009180766735769">"მხოლოდ გამავალი ზარები"</string>
+ <string name="call_log_missed_header" msgid="8017148056610855956">"მხოლოდ გამოტოვებული ზარები"</string>
+ <string name="voicemail_status_voicemail_not_available" msgid="3021980206152528883">"ხმოვანი ფოსტის სერვერთან დაკავშირება შეუძლებელია."</string>
+ <string name="voicemail_status_messages_waiting" msgid="7113421459602803605">"ხმ. ფოსტის სერვერთან კავშირი არ არის. ახალი ხმ. ფოსტა იცდის."</string>
+ <string name="voicemail_status_configure_voicemail" msgid="3738537770636895689">"თქვენი ხმოვანი ფოსტის პარამეტრების დაყენება."</string>
+ <string name="voicemail_status_audio_not_available" msgid="3369618334553341626">"აუდიო მიუწვდომელია."</string>
+ <string name="voicemail_status_action_configure" msgid="8671796489912239589">"კონფიგურაცია"</string>
+ <string name="voicemail_status_action_call_server" msgid="1824816252288551794">"ხმოვან ფოსტასთან დაკავშირება"</string>
+ <string name="voicemail_speed_slowest" msgid="1733460666177707312">"ყველაზე დაბალი სიჩქარე"</string>
+ <string name="voicemail_speed_slower" msgid="1508601287347216244">"დაბალი სიჩქარე"</string>
+ <string name="voicemail_speed_normal" msgid="9033988544627228892">"საშუალო სიჩქარე"</string>
+ <string name="voicemail_speed_faster" msgid="2019965121475935488">"დიდი სიჩქარე"</string>
+ <string name="voicemail_speed_fastest" msgid="5758712343491183292">"უდიდესი სიჩქარე"</string>
+ <string name="call_log_item_count_and_date" msgid="7641933305703520787">"(<xliff:g id="COUNT">%1$d</xliff:g>) <xliff:g id="DATE">%2$s</xliff:g>-ში"</string>
+ <string name="sms_disambig_title" msgid="5846266399240630846">"ნომრის შერჩევა"</string>
+ <string name="call_disambig_title" msgid="4392886850104795739">"ნომრის შერჩევა"</string>
+ <string name="make_primary" msgid="5829291915305113983">"დაიმახსოვრე ეს არჩევანი"</string>
+ <string name="description_image_button_one" msgid="1740638037139856139">"ერთი"</string>
+ <string name="description_image_button_two" msgid="5882638439003731308">"ორი"</string>
+ <string name="description_image_button_three" msgid="8709731759376015180">"სამი"</string>
+ <string name="description_image_button_four" msgid="3530239685642246130">"ოთხი"</string>
+ <string name="description_image_button_five" msgid="1182465427501188413">"ხუთი"</string>
+ <string name="description_image_button_six" msgid="2093656269261415475">"ექვსი"</string>
+ <string name="description_image_button_seven" msgid="2450357020447676481">"შვიდი"</string>
+ <string name="description_image_button_eight" msgid="6969435115163287801">"რვა"</string>
+ <string name="description_image_button_nine" msgid="7857248695662558323">"ცხრა"</string>
+ <string name="description_image_button_star" msgid="3365919907520767866">"ვარსკვლავი"</string>
+ <string name="description_image_button_zero" msgid="4133108949401820710">"ნული"</string>
+ <string name="description_image_button_pound" msgid="3039765597595889230">"გირვანქა"</string>
+ <string name="description_search_button" msgid="3660807558587384889">"ძიება"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"დარეკვა"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"ასაკრეფი ნომერი"</string>
+ <string name="action_menu_call_history_description" msgid="9018442816219748968">"საუბრის ისტორია"</string>
+ <string name="action_menu_overflow_description" msgid="2303272250613084574">"სხვა პარამეტრები"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"ციფერბლატი"</string>
+ <string name="menu_copy" msgid="6108677035381940698">"კოპირება"</string>
+ <string name="menu_show_outgoing_only" msgid="1965570298133301970">"მხოლოდ გამავალის ჩვენება"</string>
+ <string name="menu_show_incoming_only" msgid="7534206815238877417">"მხოლოდ შემომავალის ჩვენება"</string>
+ <string name="menu_show_missed_only" msgid="154473166059743996">"მხოლოდ გამოტოვებულის ჩვენება"</string>
+ <string name="menu_show_voicemails_only" msgid="1898421289561435703">"მხოლოდ ხმოვანი ფოსტის ჩვენება"</string>
+ <string name="menu_show_all_calls" msgid="7560347482073345885">"ყველა ზარის ჩვენება"</string>
+ <string name="add_contact" msgid="8875804371377471164">"კონტაქტის დამატება"</string>
+ <string name="add_2sec_pause" msgid="9214012315201040129">"ორწამიანი პაუზის დამატება"</string>
+ <string name="add_wait" msgid="3360818652790319634">"ლოდინის დამატება"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"SIM სერვისის არჩევა"</string>
+ <string name="call_settings" msgid="7666474782093693667">"პარამეტრები"</string>
+ <string name="menu_newContact" msgid="1209922412763274638">"ახალი კონტაქტი"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"ყველა კონტაქტი"</string>
+ <string name="callDetailTitle" msgid="5340227785196217938">"ზარის დეტალები"</string>
+ <string name="toast_call_detail_error" msgid="7200975244804730096">"მოთხოვნილი ზარის დეტალების წაკითხვა ვერ მოხერხდა."</string>
+ <string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"ტონალური კლავიატურის გამოყენება"</string>
+ <string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"მიმდინარე ზარზე დაბრუნება"</string>
+ <string name="dialer_addAnotherCall" msgid="4205688819890074468">"ზარის დამატება"</string>
+ <string name="type_incoming" msgid="6502076603836088532">"შემომავალი ზარი"</string>
+ <string name="type_outgoing" msgid="343108709599392641">"გამავალი ზარი"</string>
+ <string name="type_missed" msgid="2720502601640509542">"გამოტოვებული ზარი"</string>
+ <string name="type_voicemail" msgid="5153139450668549908">"ხმოვანი ფოსტა"</string>
+ <string name="actionIncomingCall" msgid="6028930669817038600">"შემომავალი ზარები"</string>
+ <string name="description_call_log_play_button" msgid="651182125650429846">"ხმოვანი ფოსტის ჩართვა"</string>
+ <string name="description_call_log_incoming_call" msgid="4485427487637250143">"შემომავალი ზარი"</string>
+ <string name="description_call_log_outgoing_call" msgid="604831756853471658">"გამავალი ზარი"</string>
+ <string name="description_call_log_missed_call" msgid="2242805209983708825">"გამოტოვებული ზარი"</string>
+ <string name="description_call_log_voicemail" msgid="4600798771975158948">"ხმოვანი ფოსტა"</string>
+ <string name="description_view_contact" msgid="5205669345700598415">"კონტაქტის <xliff:g id="NAME">%1$s</xliff:g> ნახვა"</string>
+ <string name="description_call" msgid="3443678121983852666">"<xliff:g id="NAME">%1$s</xliff:g>-თან დარეკვა"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-ის კონტაქტის დეტალები"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"ახალი ხმოვანი ფოსტა."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> ზარი."</string>
+ <string name="description_send_text_message" msgid="7803126439934046891">"ტესქტური შეტყობინების გაგზავნა <xliff:g id="NAME">%1$s</xliff:g>-ისთვის"</string>
+ <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"მოსასმენი ხმოვანი ფოსტა"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"ხმოვანი ძიების დაწყება"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"დარეკვა <xliff:g id="NUMBER">%s</xliff:g>-ზე"</string>
+ <string name="unknown" msgid="740067747858270469">"უცნობი"</string>
+ <string name="voicemail" msgid="3851469869202611441">"ხმოვანი ფოსტა"</string>
+ <string name="private_num" msgid="6374339738119166953">"დაფარული ნომერი"</string>
+ <string name="payphone" msgid="4864313342828942922">"საზოგადოებრივი ტელეფონი"</string>
+ <string name="dialerKeyboardHintText" msgid="5401660096579787344">"კლავიატურის გამოყენება დასარეკად"</string>
+ <string name="dialerDialpadHintText" msgid="5824490365898349041">"დარეკეთ ზარის დასამატებლად"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> წთ <xliff:g id="SECONDS">%s</xliff:g> წმ"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"ზარი ვერ განხორციელდა"</string>
+ <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"ხმოვანი ფოსტის დასაყენებლად გადადით მენიუს > პარამეტრებზე."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"ხმოვან ფოსტასთან დასაკავშირებლად პირველ რიგში გამორთეთ თვითმფრინავის რეჟიმი."</string>
+ <string name="contact_list_loading" msgid="5488620820563977329">"იტვირთება…"</string>
+ <string name="imei" msgid="3045126336951684285">"IMEI"</string>
+ <string name="meid" msgid="6210568493746275750">"MEID"</string>
+ <string name="simContacts_emptyLoading" msgid="6700035985448642408">"იტვირთება SIM ბარათიდან…"</string>
+ <string name="simContacts_title" msgid="27341688347689769">"SIM ბარათის კონტაქტები"</string>
+ <string name="add_contact_not_available" msgid="1419207765446461366">"ამ ფუნქციის გამოსაყენებლად ხელახლა გააქტიურეთ აპლიკაცია „ხალხი“."</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"ხმოვანი ძიება მიუწვდომელია."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"სატელეფონო ზარის განხორციელება ვერ ხერხდება, ვინაიდან ტელეფონის აპლიკაცია გაუქმებულია."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"არჩეული ქმედებისათვის ინსტალირებული აქტივობა არ არის."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"შეიყვანეთ სახელი, ან ტელეფონის ნომერი"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"ბოლოს გამოტოვებული ზარები არ გაგაჩნიათ."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"ბოლოს მიღებული ხმოვანი ფოსტა არ გაგაჩნიათ."</string>
+ <string name="show_favorites_only" msgid="5520072531022614595">"მხოლოდ რჩეულების ჩვენება"</string>
+ <string name="call_log_activity_title" msgid="4612824396355272023">"ისტორია"</string>
+ <string name="call_log_all_title" msgid="3566738938889333307">"ყველა"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"გამოტოვებული"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"ხმოვანი ფოსტა"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"სწრაფი აკრეფა"</string>
+ <string name="tab_recents" msgid="929949073851377206">"ბოლო"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"კონტაქტები"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"წაიშალა რჩეულებიდან"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"დაბრუნება"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"დარეკვა <xliff:g id="NUMBER">%s</xliff:g>-ზე"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"კონტაქტებში დამატება"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"ზარების სრული ისტორიის ნახვა"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> ახალი გაცდენილი ზარი"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"სწრაფი დარეკვით შეგიძლიათ ერთი შეხებით დაურეკოთ \nრჩეულებსა და იმ ნომრებს\n, რომლებსაც ხშირად უკავშირდებით."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"კონტაქტები არ გყავთ."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"შეეხეთ სურათს ყველა ნომრის სანახავად, ან შეეხეთ და დააყოვნეთ მიმდევრობის შესაცვლელად"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"დახურვა"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"ამოშლა"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ყველა კონტაქტი"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"გადარეკვა"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"მოსმენა"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"დეტალები"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"გამოტოვებული ზარი <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-ისგან, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"პასუხი <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-ის ზარზე, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"ზარი <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-თან, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-ზე გადარეკვა"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-ის ხმოვანი ფოსტის მოსმენა"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> ზარის დეტალები"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"ზარის აღრიცხვის ჩანაწერის წაშლა."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"დღეს"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"გუშინ"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"გასული კვირა"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"უფრო ძველი"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"ზარის სია"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"სპიკერის ჩართვა."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"სპიკერის გამორთვა."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"დაკვრის აჩქარება."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"დაკვრის შენელება."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"დაკვრის დაწყება ან პაუზა."</string>
+</resources>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
new file mode 100644
index 0000000..993029f
--- /dev/null
+++ b/res/values-km-rKH/strings.xml
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="8490255569343340580">"អ្នកហៅ"</string>
+ <string name="launcherDialer" msgid="8636288196618486553">"ទូរស័ព្ទ"</string>
+ <string name="dialerIconLabel" msgid="6500826552823403796">"ទូរស័ព្ទ"</string>
+ <string name="recentCallsIconLabel" msgid="1419116422359067949">"បញ្ជីហៅ"</string>
+ <string name="menu_sendTextMessage" msgid="6937343460284499306">"ផ្ញើសារអត្ថបទ"</string>
+ <string name="recentCalls_callNumber" msgid="1756372533999226126">"ហៅ <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"កែលេខមុនពេលហៅ"</string>
+ <string name="recentCalls_addToContact" msgid="1429899535546487008">"បន្ថែមទៅទំនាក់ទំនង"</string>
+ <string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"លុបចេញពីបញ្ជីហៅ"</string>
+ <string name="recentCalls_deleteAll" msgid="6352364392762163704">"សម្អាតបញ្ជីហៅ"</string>
+ <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"លុបសារជាសំឡេង"</string>
+ <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"ចែករំលែកសារជាសំឡេង"</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"កំណត់ហេតុហៅរបស់អ្នកទទេ។"</string>
+ <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"សម្អាតបញ្ជីហៅ?"</string>
+ <string name="clearCallLogConfirmation" msgid="5043563133171583152">"នឹងលុបកំណត់ត្រាហៅទាំងអស់របស់អ្នក។"</string>
+ <string name="clearCallLogProgress_title" msgid="8365943000154295771">"កំពុងសម្អាតបញ្ជីហៅ..."</string>
+ <plurals name="notification_voicemail_title">
+ <item quantity="one" msgid="1746619685488504230">"សារជាសំឡេង"</item>
+ <item quantity="other" msgid="5513481419205061254">"សារជាសំឡេង <xliff:g id="COUNT">%1$d</xliff:g>"</item>
+ </plurals>
+ <string name="notification_action_voicemail_play" msgid="6113133136977996863">"ចាក់"</string>
+ <string name="notification_voicemail_callers_list" msgid="1153954809339404149">"<xliff:g id="NEWER_CALLERS">%1$s</xliff:g>, <xliff:g id="OLDER_CALLER">%2$s</xliff:g>"</string>
+ <string name="notification_new_voicemail_ticker" msgid="895342132049452081">"សារជាសំឡេងថ្មីពី <xliff:g id="CALLER">%1$s</xliff:g>"</string>
+ <string name="voicemail_playback_error" msgid="1811242131549854624">"មិនអាចចាក់សារជាសំឡេង។"</string>
+ <string name="voicemail_buffering" msgid="738287747618697097">"កំពុងគណនា..."</string>
+ <string name="voicemail_fetching_content" msgid="877911315738258780">"កំពុងទៅយកសារជាសំឡេង..."</string>
+ <string name="voicemail_fetching_timout" msgid="6691792377574905201">"មិនអាចទៅយកសារជាសំឡេង..."</string>
+ <string name="call_log_voicemail_header" msgid="3945407886667089173">"តែការហៅជាសារសំឡេង"</string>
+ <string name="call_log_incoming_header" msgid="2787722299753674684">"តែការហៅចូល"</string>
+ <string name="call_log_outgoing_header" msgid="761009180766735769">"តែការហៅចេញប៉ុណ្ណោះ"</string>
+ <string name="call_log_missed_header" msgid="8017148056610855956">"តែលេខខកខានទទួល"</string>
+ <string name="voicemail_status_voicemail_not_available" msgid="3021980206152528883">"មិនអាចតភ្ជាប់ទៅម៉ាស៊ីនមេសារជាសំឡេង។"</string>
+ <string name="voicemail_status_messages_waiting" msgid="7113421459602803605">"មិនអាចតភ្ជាប់ទៅម៉ាស៊ីនមេសារជាសំឡេង។ សារជាសំឡេងថ្មីកំពុងរង់ចាំ។"</string>
+ <string name="voicemail_status_configure_voicemail" msgid="3738537770636895689">"រៀបចំសារជាសំឡេងរបស់អ្នក។"</string>
+ <string name="voicemail_status_audio_not_available" msgid="3369618334553341626">"មិនមានសំឡេង។"</string>
+ <string name="voicemail_status_action_configure" msgid="8671796489912239589">"រៀបចំ"</string>
+ <string name="voicemail_status_action_call_server" msgid="1824816252288551794">"ហៅជាសារសំឡេង"</string>
+ <string name="voicemail_speed_slowest" msgid="1733460666177707312">"ល្បឿនយឺតបំផុត"</string>
+ <string name="voicemail_speed_slower" msgid="1508601287347216244">"ល្បឿនយឺត"</string>
+ <string name="voicemail_speed_normal" msgid="9033988544627228892">"ល្បឿនធម្មតា"</string>
+ <string name="voicemail_speed_faster" msgid="2019965121475935488">"ល្បឿនលឿន"</string>
+ <string name="voicemail_speed_fastest" msgid="5758712343491183292">"ល្បឿនលឿនបំផុត"</string>
+ <string name="call_log_item_count_and_date" msgid="7641933305703520787">"(<xliff:g id="COUNT">%1$d</xliff:g>) <xliff:g id="DATE">%2$s</xliff:g>"</string>
+ <string name="sms_disambig_title" msgid="5846266399240630846">"ជ្រើសលេខ"</string>
+ <string name="call_disambig_title" msgid="4392886850104795739">"ជ្រើសលេខ"</string>
+ <string name="make_primary" msgid="5829291915305113983">"ចងចាំជម្រើសនេះ"</string>
+ <string name="description_image_button_one" msgid="1740638037139856139">"មួយ"</string>
+ <string name="description_image_button_two" msgid="5882638439003731308">"ពីរ"</string>
+ <string name="description_image_button_three" msgid="8709731759376015180">"បី"</string>
+ <string name="description_image_button_four" msgid="3530239685642246130">"បួន"</string>
+ <string name="description_image_button_five" msgid="1182465427501188413">"ប្រាំ"</string>
+ <string name="description_image_button_six" msgid="2093656269261415475">"ប្រាំមួយ"</string>
+ <string name="description_image_button_seven" msgid="2450357020447676481">"ប្រាំពីរ"</string>
+ <string name="description_image_button_eight" msgid="6969435115163287801">"ប្រាំបី"</string>
+ <string name="description_image_button_nine" msgid="7857248695662558323">"ប្រាំបួន"</string>
+ <string name="description_image_button_star" msgid="3365919907520767866">"ផ្កាយ"</string>
+ <string name="description_image_button_zero" msgid="4133108949401820710">"សូន្យ"</string>
+ <string name="description_image_button_pound" msgid="3039765597595889230">"ផោន"</string>
+ <string name="description_search_button" msgid="3660807558587384889">"ស្វែងរក"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"dial"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"លេខដែលត្រូវហៅ"</string>
+ <string name="action_menu_call_history_description" msgid="9018442816219748968">"ប្រវត្តិហៅ"</string>
+ <string name="action_menu_overflow_description" msgid="2303272250613084574">"ជម្រើសបន្ថែម"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"បន្ទះលេខ"</string>
+ <string name="menu_copy" msgid="6108677035381940698">"ចម្លង"</string>
+ <string name="menu_show_outgoing_only" msgid="1965570298133301970">"បង្ហាញតែការហៅចេញ"</string>
+ <string name="menu_show_incoming_only" msgid="7534206815238877417">"បង្ហាញតែការហៅចូល"</string>
+ <string name="menu_show_missed_only" msgid="154473166059743996">"បង្ហាញតែការខកខានទទួល"</string>
+ <string name="menu_show_voicemails_only" msgid="1898421289561435703">"បង្ហាញតែសារជាសំឡេង"</string>
+ <string name="menu_show_all_calls" msgid="7560347482073345885">"បង្ហាញការហៅទាំងអស់"</string>
+ <string name="add_contact" msgid="8875804371377471164">"បន្ថែមទំនាក់ទំនង"</string>
+ <string name="add_2sec_pause" msgid="9214012315201040129">"បន្ថែមការផ្អាក ២វិ."</string>
+ <string name="add_wait" msgid="3360818652790319634">"បញ្ចូលការរង់ចាំ"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"ជ្រើសការជាវ"</string>
+ <string name="call_settings" msgid="7666474782093693667">"ការកំណត់"</string>
+ <string name="menu_newContact" msgid="1209922412763274638">"ទំនាក់ទំនងថ្មី"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"ទំនាក់ទំនងទាំងអស់"</string>
+ <string name="callDetailTitle" msgid="5340227785196217938">"ព័ត៌មានលម្អិតនៃការហៅ"</string>
+ <string name="toast_call_detail_error" msgid="7200975244804730096">"មិនអាចអានព័ត៌មានលម្អិតសម្រាប់ការហៅបានស្នើ។"</string>
+ <string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"ប្រើសំឡេងប៉ះបន្ទះលេខ"</string>
+ <string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"កំពុងត្រឡប់ទៅកាន់ការហៅ"</string>
+ <string name="dialer_addAnotherCall" msgid="4205688819890074468">"បន្ថែមការហៅ"</string>
+ <string name="type_incoming" msgid="6502076603836088532">"ការហៅចូល"</string>
+ <string name="type_outgoing" msgid="343108709599392641">"ការហៅចេញ"</string>
+ <string name="type_missed" msgid="2720502601640509542">"ខកខានទទួល"</string>
+ <string name="type_voicemail" msgid="5153139450668549908">"សារជាសំឡេង"</string>
+ <string name="actionIncomingCall" msgid="6028930669817038600">"ការហៅចូល"</string>
+ <string name="description_call_log_play_button" msgid="651182125650429846">"ចាក់សារជាសំឡេង"</string>
+ <string name="description_call_log_incoming_call" msgid="4485427487637250143">"ការហៅចូល"</string>
+ <string name="description_call_log_outgoing_call" msgid="604831756853471658">"ការហៅចេញ"</string>
+ <string name="description_call_log_missed_call" msgid="2242805209983708825">"ខកខានទទួល"</string>
+ <string name="description_call_log_voicemail" msgid="4600798771975158948">"សារជាសំឡេង"</string>
+ <string name="description_view_contact" msgid="5205669345700598415">"មើលទំនាក់ទំនង <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_call" msgid="3443678121983852666">"ហៅ <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"ព័ត៌មានលម្អិតទំនាក់ទំនងសម្រាប់ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"សារជាសំឡេងថ្មី។"</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"ការហៅ <xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> ។"</string>
+ <string name="description_send_text_message" msgid="7803126439934046891">"ផ្ញើរសារអត្ថបទទៅ <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"សារជាសំឡេងដែលមិនបានឮ"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"ចាប់ផ្ដើមស្វែងរកជាសំឡេង"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"ហៅ <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="unknown" msgid="740067747858270469">"មិនស្គាល់"</string>
+ <string name="voicemail" msgid="3851469869202611441">"សារជាសំឡេង"</string>
+ <string name="private_num" msgid="6374339738119166953">"លេខឯកជន"</string>
+ <string name="payphone" msgid="4864313342828942922">"ទូរស័ព្ទប្រើកាក់"</string>
+ <string name="dialerKeyboardHintText" msgid="5401660096579787344">"ប្រើក្ដារចុច ដើម្បីចុចលេខ"</string>
+ <string name="dialerDialpadHintText" msgid="5824490365898349041">"ចុចដើម្បីបន្ថែមការហៅ"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> នាទី <xliff:g id="SECONDS">%s</xliff:g> វិនាទី"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"ការហៅមិនបានបញ្ជូន"</string>
+ <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"ដើម្បីកំណត់សារជាសំឡេង ចូលម៉ឺនុយ > ការកំណត់។"</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"ដើម្បីហៅសារជាសំឡេង ដំបូងត្រូវបិទរបៀបពេលជិះយន្តហោះ។"</string>
+ <string name="contact_list_loading" msgid="5488620820563977329">"កំពុងផ្ទុក..."</string>
+ <string name="imei" msgid="3045126336951684285">"IMEI"</string>
+ <string name="meid" msgid="6210568493746275750">"MEID"</string>
+ <string name="simContacts_emptyLoading" msgid="6700035985448642408">"កំពុងផ្ទុកពីស៊ីមកាត..."</string>
+ <string name="simContacts_title" msgid="27341688347689769">"ទំនាក់ទំនងនៅក្នុងស៊ីមកាត"</string>
+ <string name="add_contact_not_available" msgid="1419207765446461366">"បើកកម្មវិធីឡើងវិញដើម្បីប្រើលក្ខណៈនេះ។"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"ការស្វែងរកជាសំឡេងមិនអាចប្រើបាន។"</string>
+ <string name="call_not_available" msgid="8941576511946492225">"មិនអាចហៅបានទេ ព្រោះកម្មវិធីទូរស័ព្ទត្រូវបានបិទ។"</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"គ្មានសកម្មភាពបានដំឡើង ដើម្បីគ្រប់គ្រងសកម្មភាពបានជ្រើស។"</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"សូមបញ្ចូលឈ្មោះ ឬលេខទូរស័ព្ទ"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"អ្នកមិនមានការខកខានទទួលថ្មីៗទេ។"</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"អ្នកមិនមានសារជាសំឡេងថ្មីៗទេ។"</string>
+ <string name="show_favorites_only" msgid="5520072531022614595">"បង្ហាញតែនិយមប្រើប៉ុណ្ណោះ"</string>
+ <string name="call_log_activity_title" msgid="4612824396355272023">"ប្រវត្តិ"</string>
+ <string name="call_log_all_title" msgid="3566738938889333307">"ទាំងអស់"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"ខកខានទទួល"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"សារជាសំឡេង"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"ការហៅរហ័ស"</string>
+ <string name="tab_recents" msgid="929949073851377206">"ថ្មីៗ"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"ទំនាក់ទំនង"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"បានលុបចេញពីទំនាក់ទំនងដែលនិយមប្រើ"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"មិនធ្វើវិញ"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"ហៅ <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"បន្ថែមទៅទំនាក់ទំនង"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"មើលប្រវត្តិហៅពេញលេញ"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"ខកខានទទួលថ្មី <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"ការហៅរហ័សគឺជាការហៅដោយប៉ះម្ដង\nសម្រាប់លេខដែលអ្នកពេញចិត្ត និងលេខ\n អ្នកហៅញឹកញាប់។"</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"អ្នកមិនមានទំនាក់ទំនងទេ។"</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"ប៉ះរូបភាព ដើម្បីមើលលេខទាំងអស់ ឬចុច និងសង្កត់ដើម្បីតម្រៀបឡើងវិញ"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"បដិសេធ"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"លុបចេញ"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ទំនាក់ទំនងទាំងអស់"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"ហៅទៅវិញ"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"ស្ដាប់"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"ព័ត៌មានលម្អិត"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"ខកខានទទួលពី <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g> ។"</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"បានឆ្លើយតបការហៅពី <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g> ។"</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"ហៅទៅ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g> ។"</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"ហៅទៅ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> វិញ"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"ស្ដាប់សារជាសំឡេងពី <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"ព័ត៌មានលម្អិតហៅសម្រាប់ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"បានលុបធាតុកំណត់ហេតុហៅ។"</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"ថ្ងៃនេះ"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"ម្សិលមិញ"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"សប្ដាហ៍មុន"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"ចាស់ៗ"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"បញ្ជីហៅ"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"បើកអូប៉ាល័រ។"</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"បិទអូប៉ាល័រ។"</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"ចាក់កាន់តែលឿន"</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"ចាក់កាន់តែយឺត។"</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"ចាប់ផ្ដើម ឬផ្អាកការចាក់ឡើងវិញ។"</string>
+</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 3bab4d5..8e4229b 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"통화기록 지우기"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"음성사서함 삭제"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"음성사서함 공유"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"통화기록이 없습니다."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"통화 기록이 비었습니다."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"통화기록을 지우시겠습니까?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"모든 통화 기록을 삭제합니다."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"통화기록을 지우는 중..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"버퍼링 중..."</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"음성메시지를 가져오는 중..."</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"음성메시지 가져오지 못했습니다."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"신규"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"이전"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"음성사서함 메시지만"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"수신 전화만"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"발신 전화만"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"별"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"0"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"#"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"음성사서함"</string>
<string name="description_search_button" msgid="3660807558587384889">"검색"</string>
<string name="description_dial_button" msgid="1274091017188142646">"전화걸기"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"백스페이스"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"전화를 걸 번호"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"통화 기록"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"옵션 더보기"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"다이얼패드"</string>
<string name="menu_copy" msgid="6108677035381940698">"복사"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"발신 전화만 표시"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"수신 전화만 표시"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"부재중 전화만 표시"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"음성사서함만 표시"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"모든 통화 표시"</string>
+ <string name="add_contact" msgid="8875804371377471164">"연락처 추가"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"2초 간 일시 정지 추가"</string>
<string name="add_wait" msgid="3360818652790319634">"대기 시간 추가"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"구독 선택"</string>
<string name="call_settings" msgid="7666474782093693667">"설정"</string>
<string name="menu_newContact" msgid="1209922412763274638">"새 연락처"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"전체 주소록"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"통화 세부정보"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"요청한 통화의 세부정보를 읽지 못했습니다."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"터치톤 키패드 사용"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"발신 전화"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"부재중 전화"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"음성사서함"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"연락처 추가"</string>
<string name="description_view_contact" msgid="5205669345700598415">"<xliff:g id="NAME">%1$s</xliff:g>님의 연락처 보기"</string>
<string name="description_call" msgid="3443678121983852666">"전화하기:<xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>의 연락처 세부정보"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"새로운 음성사서함이 있습니다."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"통화 횟수: <xliff:g id="NUMBEROFCALLS">%1$s</xliff:g>번"</string>
<string name="description_send_text_message" msgid="7803126439934046891">"<xliff:g id="NAME">%1$s</xliff:g>님에게 문자 메시지 보내기"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"듣지 않은 음성사서함"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"음성 검색 시작"</string>
<string name="menu_callNumber" msgid="997146291983360266">"<xliff:g id="NUMBER">%s</xliff:g>에 전화"</string>
<string name="unknown" msgid="740067747858270469">"알 수 없음"</string>
<string name="voicemail" msgid="3851469869202611441">"음성사서함"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"SIM 카드에서 로딩 중..."</string>
<string name="simContacts_title" msgid="27341688347689769">"SIM 카드 주소록"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"이 기능을 사용하려면 주소록 애플리케이션을 사용하도록 다시 설정하세요."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"이름 또는 전화번호 입력"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"전체"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"부재중 전화"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"최근 부재중 전화가 없습니다."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"최근 음성사서함이 없습니다."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"모든 연락처 표시"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"음성검색을 사용할 수 없습니다."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"전화 애플리케이션을 사용 중지했으므로 전화를 걸 수 없습니다."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"선택한 작업을 처리할 수 있는 애플리케이션이 설치되지 않았습니다."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"이름 또는 전화번호 입력"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"최근 부재중 전화가 없습니다."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"최근 음성사서함이 없습니다."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"즐겨찾는 연락처만 표시"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"기록"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"전체"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"부재중 전화"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"음성사서함"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"단축 다이얼"</string>
+ <string name="tab_recents" msgid="929949073851377206">"최근"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"주소록"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"즐겨찾기에서 삭제됨"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"실행취소"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"<xliff:g id="NUMBER">%s</xliff:g>에 전화"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"주소록에 추가"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"전체 통화 기록 조회"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"새로운 부재중 전화 <xliff:g id="NUMBER">%s</xliff:g>건"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"단축 다이얼은 자주 거는 \n사람과 번호에 대한\n 원터치 다이얼입니다."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"연락처가 없습니다."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"이미지를 탭하여 모든 번호를 확인하거나 길게 눌러 재정렬합니다."</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"닫기"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"삭제"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"모든 연락처"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"전화 걸기"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"듣기"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"세부정보"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"부재중 전화: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"수신 전화: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"발신 전화: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>에 전화 걸기"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> 음성사서함 듣기"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>의 통화 세부정보"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"통화 기록 항목이 삭제되었습니다."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"오늘"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"어제"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"지난 주"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"이전"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"통화 목록"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"스피커를 켭니다."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"스피커를 끕니다."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"더 빠르게 재생합니다."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"더 느리게 재생합니다."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"재생을 시작하거나 일시중지합니다."</string>
</resources>
diff --git a/res/values-land/styles.xml b/res/values-land/styles.xml
deleted file mode 100644
index 1388a17..0000000
--- a/res/values-land/styles.xml
+++ /dev/null
@@ -1,22 +0,0 @@
-<!--
- 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.
- -->
-
-<resources>
-
- <style name="FragmentActionBarPadding">
- <item name="android:paddingBottom">0dp</item>
- </style>
-</resources>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
new file mode 100644
index 0000000..a5beb35
--- /dev/null
+++ b/res/values-lo-rLA/strings.xml
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="8490255569343340580">"ແປ້ນໂທລະສັບ"</string>
+ <string name="launcherDialer" msgid="8636288196618486553">"ໂທລະສັບ"</string>
+ <string name="dialerIconLabel" msgid="6500826552823403796">"ໂທລະສັບ"</string>
+ <string name="recentCallsIconLabel" msgid="1419116422359067949">"ບັນທຶກການໂທ"</string>
+ <string name="menu_sendTextMessage" msgid="6937343460284499306">"ສົ່ງຂໍ້ຄວາມ"</string>
+ <string name="recentCalls_callNumber" msgid="1756372533999226126">"ໂທຫາ <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"ແກ້ໄຂເບີກ່ອນໂທ"</string>
+ <string name="recentCalls_addToContact" msgid="1429899535546487008">"ເພີ່ມໃສ່ລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
+ <string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"ລຶບອອກຈາກບັນທຶກການໂທ"</string>
+ <string name="recentCalls_deleteAll" msgid="6352364392762163704">"ລຶບບັນທຶກການໂທ"</string>
+ <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"ລຶບຂໍ້ຄວາມສຽງ"</string>
+ <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"ແບ່ງປັນຂໍ້ຄວາມສຽງ"</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"ບັນທຶກການໂທຂອງທ່ານຫວ່າງເປົ່າຢູ່."</string>
+ <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"ລຶບບັນທຶກການໂທ?"</string>
+ <string name="clearCallLogConfirmation" msgid="5043563133171583152">"ບັນທຶກການໂທທັງໝົດຂອງທ່ານຈະຖືກລຶບອອກ."</string>
+ <string name="clearCallLogProgress_title" msgid="8365943000154295771">"ກຳລັງລຶກບັນທຶກການໂທ..."</string>
+ <plurals name="notification_voicemail_title">
+ <item quantity="one" msgid="1746619685488504230">"ຂໍ້ຄວາມສຽງ"</item>
+ <item quantity="other" msgid="5513481419205061254">"<xliff:g id="COUNT">%1$d</xliff:g> ຂໍ້ຄວາມສຽງ"</item>
+ </plurals>
+ <string name="notification_action_voicemail_play" msgid="6113133136977996863">"ຫຼິ້ນ"</string>
+ <string name="notification_voicemail_callers_list" msgid="1153954809339404149">"<xliff:g id="NEWER_CALLERS">%1$s</xliff:g>, <xliff:g id="OLDER_CALLER">%2$s</xliff:g>"</string>
+ <string name="notification_new_voicemail_ticker" msgid="895342132049452081">"ບໍ່ມີຂໍ້ຄວາມສຽງຈາກ <xliff:g id="CALLER">%1$s</xliff:g>"</string>
+ <string name="voicemail_playback_error" msgid="1811242131549854624">"ບໍ່ສາມາດເປີດຂໍ້ຄວາມສຽງໄດ້."</string>
+ <string name="voicemail_buffering" msgid="738287747618697097">"ກຳລັງດຶງຂໍ້ມູນມາກຽມ..."</string>
+ <string name="voicemail_fetching_content" msgid="877911315738258780">"ກຳລັງດຶງຂໍ້ຄວາມສຽງ..."</string>
+ <string name="voicemail_fetching_timout" msgid="6691792377574905201">"ບໍ່ສາມາດດຶງຂໍ້ຄວາມສຽງໄດ້."</string>
+ <string name="call_log_voicemail_header" msgid="3945407886667089173">"ເບີໂທຂໍ້ຄວາມສຽງເທົ່ານັ້ນ"</string>
+ <string name="call_log_incoming_header" msgid="2787722299753674684">"ສາຍໂທເຂົ້າເທົ່ານັ້ນ"</string>
+ <string name="call_log_outgoing_header" msgid="761009180766735769">"ເບີໂທອອກເທົ່ານັ້ນ"</string>
+ <string name="call_log_missed_header" msgid="8017148056610855956">"ສະເພາະສາຍທີ່ບໍ່ໄດ້ຮັບ"</string>
+ <string name="voicemail_status_voicemail_not_available" msgid="3021980206152528883">"ບໍ່ສາມາດເຊື່ອມຕໍ່ຫາເຊີບເວີຂໍ້ຄວາມສຽງ."</string>
+ <string name="voicemail_status_messages_waiting" msgid="7113421459602803605">"ບໍ່ສາມາດເຊື່ອມຕໍ່ຫາເຊີບເວີຂໍ້ຄວາມສຽງໄດ້. ມີຂໍ້ຄວາມສຽງໃໝ່ກຳລັງລໍຖ້າ."</string>
+ <string name="voicemail_status_configure_voicemail" msgid="3738537770636895689">"ຕັ້ງຄ່າຂໍ້ຄວາມສຽງຂອງທ່ານ"</string>
+ <string name="voicemail_status_audio_not_available" msgid="3369618334553341626">"ບໍ່ມີສຽງ."</string>
+ <string name="voicemail_status_action_configure" msgid="8671796489912239589">"ຕັ້ງຄ່າ"</string>
+ <string name="voicemail_status_action_call_server" msgid="1824816252288551794">"ໂທຫາເບີຂໍ້ຄວາມສຽງ"</string>
+ <string name="voicemail_speed_slowest" msgid="1733460666177707312">"ຊ້າທີ່ສຸດ"</string>
+ <string name="voicemail_speed_slower" msgid="1508601287347216244">"ຊ້າ"</string>
+ <string name="voicemail_speed_normal" msgid="9033988544627228892">"ປົກກະຕິ"</string>
+ <string name="voicemail_speed_faster" msgid="2019965121475935488">"ໄວ"</string>
+ <string name="voicemail_speed_fastest" msgid="5758712343491183292">"ໄວທີ່ສຸດ"</string>
+ <string name="call_log_item_count_and_date" msgid="7641933305703520787">"(<xliff:g id="COUNT">%1$d</xliff:g>) <xliff:g id="DATE">%2$s</xliff:g>"</string>
+ <string name="sms_disambig_title" msgid="5846266399240630846">"ເລືອກເບີໂທ"</string>
+ <string name="call_disambig_title" msgid="4392886850104795739">"ເລືອກເບີໂທ"</string>
+ <string name="make_primary" msgid="5829291915305113983">"ຈື່ການເລືອກນີ້"</string>
+ <string name="description_image_button_one" msgid="1740638037139856139">"ນຶ່ງ"</string>
+ <string name="description_image_button_two" msgid="5882638439003731308">"ສອງ"</string>
+ <string name="description_image_button_three" msgid="8709731759376015180">"ສາມ"</string>
+ <string name="description_image_button_four" msgid="3530239685642246130">"ສີ່"</string>
+ <string name="description_image_button_five" msgid="1182465427501188413">"ຫ້າ"</string>
+ <string name="description_image_button_six" msgid="2093656269261415475">"ຫົກ"</string>
+ <string name="description_image_button_seven" msgid="2450357020447676481">"ເຈັດ"</string>
+ <string name="description_image_button_eight" msgid="6969435115163287801">"ແປດ"</string>
+ <string name="description_image_button_nine" msgid="7857248695662558323">"ເກົ້າ"</string>
+ <string name="description_image_button_star" msgid="3365919907520767866">"ຕິດດາວ"</string>
+ <string name="description_image_button_zero" msgid="4133108949401820710">"ສູນ"</string>
+ <string name="description_image_button_pound" msgid="3039765597595889230">"ພາວ"</string>
+ <string name="description_search_button" msgid="3660807558587384889">"ຊອກຫາ"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"ແປ້ນໂທ"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"ໝາຍເລກທີ່ຈະໂທ"</string>
+ <string name="action_menu_call_history_description" msgid="9018442816219748968">"ປະຫວັດການໂທ"</string>
+ <string name="action_menu_overflow_description" msgid="2303272250613084574">"ໂຕເລືອກເພີ່ມເຕີມ"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"ປຸ່ມໂທລະສັບ"</string>
+ <string name="menu_copy" msgid="6108677035381940698">"ສຳເນົາ"</string>
+ <string name="menu_show_outgoing_only" msgid="1965570298133301970">"ສະແດງສະເພາະສາຍໂທອອກ"</string>
+ <string name="menu_show_incoming_only" msgid="7534206815238877417">"ສະແດງສະເພາະສາຍໂທເຂົ້າ"</string>
+ <string name="menu_show_missed_only" msgid="154473166059743996">"ສະແດງສະເພາະສາຍບໍ່ໄດ້ຮັບ"</string>
+ <string name="menu_show_voicemails_only" msgid="1898421289561435703">"ສະແດງສະເພາະຂໍ້ຄວາມສຽງ"</string>
+ <string name="menu_show_all_calls" msgid="7560347482073345885">"ສະແດງການໂທທັງໝົດ"</string>
+ <string name="add_contact" msgid="8875804371377471164">"ເພີ່ມລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
+ <string name="add_2sec_pause" msgid="9214012315201040129">"ເພີ່ມການຂັ້ນເວລາ 2 ວິນາທີ"</string>
+ <string name="add_wait" msgid="3360818652790319634">"ເພີ່ມການລໍຖ້າ"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"ເລືອກແພັກເກດ"</string>
+ <string name="call_settings" msgid="7666474782093693667">"ການຕັ້ງຄ່າ"</string>
+ <string name="menu_newContact" msgid="1209922412763274638">"ສ້າງລາຍຊື່ຜູ່ຕິດຕໍ່ໃໝ່"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"ລາຍຊື່ຜູ່ຕິດຕໍ່ທັງໝົດ"</string>
+ <string name="callDetailTitle" msgid="5340227785196217938">"ລາຍລະອຽດການໂທ"</string>
+ <string name="toast_call_detail_error" msgid="7200975244804730096">"ບໍ່ສາມາດອ່ານລາຍລະອຽດຂອງສາຍທີ່ຕ້ອງການໄດ້."</string>
+ <string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"ໃຊ້ປຸ່ມກົດສັນຍານສຽງ"</string>
+ <string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"ກັບໄປການໂທທີ່ກຳລັງດຳເນີນຢູ່"</string>
+ <string name="dialer_addAnotherCall" msgid="4205688819890074468">"ເພີ່ມການໂທ"</string>
+ <string name="type_incoming" msgid="6502076603836088532">"ສາຍໂທເຂົ້າ"</string>
+ <string name="type_outgoing" msgid="343108709599392641">"ສາຍໂທອອກ"</string>
+ <string name="type_missed" msgid="2720502601640509542">"ສາຍບໍ່ໄດ້ຮັບ"</string>
+ <string name="type_voicemail" msgid="5153139450668549908">"ຂໍ້ຄວາມສຽງ"</string>
+ <string name="actionIncomingCall" msgid="6028930669817038600">"ສາຍໂທເຂົ້າ"</string>
+ <string name="description_call_log_play_button" msgid="651182125650429846">"ເປີດຂໍ້ຄວາມສຽງ"</string>
+ <string name="description_call_log_incoming_call" msgid="4485427487637250143">"ສາຍໂທເຂົ້າ"</string>
+ <string name="description_call_log_outgoing_call" msgid="604831756853471658">"ສາຍໂທອອກ"</string>
+ <string name="description_call_log_missed_call" msgid="2242805209983708825">"ສາຍທີ່ບໍ່ໄດ້ຮັບ"</string>
+ <string name="description_call_log_voicemail" msgid="4600798771975158948">"ຂໍ້ຄວາມສຽງ"</string>
+ <string name="description_view_contact" msgid="5205669345700598415">"ເບິ່ງລາຍຊື່ຜູ່ຕິດຕໍ່ <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_call" msgid="3443678121983852666">"ໂທຫາ <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"ລາຍລະອຽດລາຍຊື່ຜູ່ຕິດຕໍ່ສຳລັບ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"ຂໍ້ຄວາມສຽງໃໝ່."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> ການໂທ."</string>
+ <string name="description_send_text_message" msgid="7803126439934046891">"ສົ່ງຂໍ້ຄວາມຫາ <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"ຂໍ້ຄວາມສຽງທີ່ຍັງບໍ່ໄດ້ຟັງ"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"ເລີ່ມການຊອກຫາດ້ວຍສຽງ"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"ໂທຫາ <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="unknown" msgid="740067747858270469">"ບໍ່ຮູ້ຈັກ"</string>
+ <string name="voicemail" msgid="3851469869202611441">"ຂໍ້ຄວາມສຽງ"</string>
+ <string name="private_num" msgid="6374339738119166953">"ເບີສ່ວນໂຕ"</string>
+ <string name="payphone" msgid="4864313342828942922">"ໂທລະສັບສາທາລະນະ"</string>
+ <string name="dialerKeyboardHintText" msgid="5401660096579787344">"ໃຊ້ແປ້ນພິມເພື່ອກົດໂທ"</string>
+ <string name="dialerDialpadHintText" msgid="5824490365898349041">"ກົດໝາຍເລກເພື່ອເພີ່ມການໂທ"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> ນທ <xliff:g id="SECONDS">%s</xliff:g> ວິ"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"ສາຍບໍ່ໄດ້ສົ່ງ"</string>
+ <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"ເພື່ອຕັ້ງຄ່າຂໍ້ຄວາມສຽງ ໃຫ້ໄປທີ່ ເມນູ > ການຕັ້ງຄ່າ."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"ເພື່ອໂທຫາເບີຂໍ້ຄວາມສຽງ ທ່ານຕ້ອງປິດໂໝດຢູ່ເທິງຍົນກ່ອນ."</string>
+ <string name="contact_list_loading" msgid="5488620820563977329">"ກຳລັງໂຫລດ..."</string>
+ <string name="imei" msgid="3045126336951684285">"IMEI"</string>
+ <string name="meid" msgid="6210568493746275750">"MEID"</string>
+ <string name="simContacts_emptyLoading" msgid="6700035985448642408">"ກຳລັງໂຫລດຈາກ SIM card..."</string>
+ <string name="simContacts_title" msgid="27341688347689769">"ລາຍຊື່ຜູ່ຕິດຕໍ່ SIM card"</string>
+ <string name="add_contact_not_available" msgid="1419207765446461366">"ເປີດການນຳໃຊ້ແອັບພລິເຄຊັນ People ຄືນ ເພື່ອໃຊ້ຄຸນສົມບັດນີ້."</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"ບໍ່ສາມາດນຳໃຊ້ການຊອກຫາດ້ວຍສຽງໄດ້."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"ບໍ່ສາມາດໂທໄດ້ເນື່ອງຈາກແອັບພລິເຄຊັນໂທລະສັບຖືກປິດການນຳໃຊ້ໄວ້."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"ບໍ່ມີຄຳສັ່ງທີ່ຕິດຕັ້ງໄວ້ທີ່ໃຊ້ຈັດການການເຮັດວຽກທີ່ເລືອກໄດ້."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"ພິມຊື່ ຫຼເບີໂທລະສັບ"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"ທ່ານບໍ່ມີທີ່ບໍ່ໄດ້ຮັບເມື່ອໄວໆນີ້."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"ທ່ານບໍ່ມີຂໍ້ຄວາມສຽງເມື່ອໄວໆນີ້."</string>
+ <string name="show_favorites_only" msgid="5520072531022614595">"ສະແດງສະເພາະລາຍການທີ່ນິຍົມເທົ່ານັ້ນ"</string>
+ <string name="call_log_activity_title" msgid="4612824396355272023">"ປະຫວັດການໂທ"</string>
+ <string name="call_log_all_title" msgid="3566738938889333307">"ທັງໝົດ"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"ສາຍທີ່ບໍ່ໄດ້ຮັບ"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"ຂໍ້ຄວາມສຽງ"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"ໂທດ່ວນ"</string>
+ <string name="tab_recents" msgid="929949073851377206">"ຫາກໍໃຊ້"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"ລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"ລຶບອອກຈາກລາຍການທີ່ມັກແລ້ວ"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"ຍົກເລີກ"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"ໂທຫາ <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"ເພີ່ມໃສ່ລາຍຊື່ຕິດຕໍ່"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"ເບິ່ງປະຫວັດການໂທແບບເຕັມ"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> ສາຍທີ່ບໍ່ໄດ້ຮັບໃໝ່"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"ການໂທດ່ວນແມ່ນການໂທອອກດ້ວຍການກົດພຽງເທື່ອດຽວ\nສຳລັບເບີໂທ ແລະລາຍຊື່ຜູ່ຕິດຕໍ່\n ທີ່ທ່ານໂທເລື້ອຍໆ."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"ທ່ານຍັງບໍ່ມີລາຍຊື່ຜູ່ຕິດຕໍ່."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"ແຕະຮູບພາບເພື່ອເບິ່ງຈໍານວນຮູບພາບທັງໝົດ ຫຼືແຕະຄ້າງໄວ້ເພື່ອຈັດຮຽງໃໝ່"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"ເຂົ້າໃຈແລ້ວ"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"ລຶບອອກ"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ລາຍຊື່ຜູ່ຕິດຕໍ່ທັງໝົດ"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"ໂທກັບ"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"ຟັງ"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"ລາຍລະອຽດ"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"ສາຍທີ່ບໍ່ໄດ້ຮັບຈາກ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"ສາຍທີ່ໄດ້ຮັບຈາກ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"ໂທຫາ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"ໂທກັບຫາ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"ຟັງຂໍ້ຄວາມສຽງຈາກ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"ລາຍລະອຽດການໂທສຳລັບ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"ລຶບບັນທຶກການໂທແລ້ວ."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"ມື້ນີ້"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"ມື້ວານນີ້"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"ອາທິດແລ້ວ"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"ເກົ່າກວ່າ"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"ລາຍຊື່ການໂທ"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"ເປີດລຳໂພງ."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"ປິດລຳໂພງ."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"ຫຼິ້ນໄວຂຶ້ນ."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"ຫຼິ້ນຊ້າລົງ."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"ເລີ່ມຫຼືຢຸດການຫຼິ້ນຊົ່ວຄາວ."</string>
+</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 804aa7f..0e2ab52 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Išvalyti skambučių žurnalą"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Ištrinti balso pašto pran."</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Bendrinti balso paštą"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Skambučių žurnalas tuščias."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Skambučių žurnalas yra tuščias."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Išv. skamb. žurnalą?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Visi jūsų skambučių įrašai bus ištrinti."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Valomas skambučių žurnalas…"</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Rašoma į buferį…"</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Gaunamas balso paštas…"</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Nepavyko gauti balso pašto pranešimo."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Nauji"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Senesni"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Tik skambučiai su balso paštu"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Tik gaunami skambučiai"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Tik siunčiami skambučiai"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"žvaigždutė"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"nulis"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"svaras"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"balso paštas"</string>
<string name="description_search_button" msgid="3660807558587384889">"ieškoti"</string>
<string name="description_dial_button" msgid="1274091017188142646">"rinkti numerį"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"naikinimo klavišas"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"renkamas numeris"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Skambučių istorija"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Daugiau parinkčių"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"skambinimo skydelis"</string>
<string name="menu_copy" msgid="6108677035381940698">"Kopijuoti"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Rodyti tik išsiunčiamus"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Rodyti tik gaunamus"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Rodyti tik praleistus"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Rodyti tik balso pšt. praneš."</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Rodyti visus skambučius"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Pridėti kontaktą"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Pridėti 2 sek. pauzę"</string>
<string name="add_wait" msgid="3360818652790319634">"Pridėti laukimą"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Pasirinkti prenumeratą"</string>
<string name="call_settings" msgid="7666474782093693667">"Nustatymai"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Naujas adresatas"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Visi kontaktai"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Išsami skambučio informacija"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Nepavyko nuskaityti išsamios skambučio, dėl kurio buvo pateikta užklausa, informacijos."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Naudoti jutiklinę klaviatūrą"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Išsiunčiamasis skambutis"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Praleistas skambutis"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Balso paštas"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Pridėti kontaktą"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Žiūrėti kontaktą <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Skambinti <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Išsami kontaktinė informacija: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Naujas balso pašto pranešimas."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"Skambučių: <xliff:g id="NUMBEROFCALLS">%1$s</xliff:g>."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Siųsti teksto pranešimą <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Neklausytas balso pašto pranešimas"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Pradėti paiešką balsu"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Skambinti <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Nežinomas"</string>
<string name="voicemail" msgid="3851469869202611441">"Balso paštas"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Įkeliama iš SIM kortelės..."</string>
<string name="simContacts_title" msgid="27341688347689769">"SIM kortelės adresatai"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Iš naujo įgalinti programą Žmonės, kad būtų galima naudoti šią funkciją."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Įveskite vardą arba telefono numerį"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Visi"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Praleisti"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Nėra neseniai praleistų skambučių."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Nėra neseniai gauto balso pašto."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Rodyti visus kontaktus"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Paieška balsu negalima."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Negalima skambinti telefonu, nes Telefono programa išjungta."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Nepasiekiama jokia įdiegta veikla pasirinktam veiksmui atlikti."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Įveskite vardą arba tel. nr."</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Nėra neseniai praleistų skambučių."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Nėra neseniai gautų balso pašto pranešimų."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Rodyti tik mėgstamiausius"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Istorija"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Visi"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Praleisti"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Balso paštas"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Spartusis rinkimas"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Naujausi"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Kontaktai"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Pašalintas iš adresyno"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Anuliuoti"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Skambinti numeriu <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Pridėti prie kontaktų"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Visos skambučių istorijos peržiūra"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"Naujų praleistų skambučių: <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Greitasis numerio rinkimas yra numerio rinkimas vienu palietimu. Jis naudojamas skambinant \nį mėgstamiausių sąrašą įtrauktiems asmenims ir numeriais\n, kuriais dažnai skambinate."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Nėra kontaktų."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Palieskite vaizdą, kad pamatytumėte visus skaičius, arba paspauskite ir palaikykite, kad pakeistumėte tvarką"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Atsisakyti"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Pašalinti"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"VISI KONTAKTAI"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"ATSKAMBINTI"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"KLAUSYTI"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"IŠSAMI INFORMACIJA"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Praleistas skambutis: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Atsakytas skambutis: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Atliktas skambutis: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Atskambinti <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Klausyti balso pašto nuo <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Išsami skambučio informacija (<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>)"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Skambučių žurnalo įrašas ištrintas."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Šiandien"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Vakar"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Paskutinė savaitė"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Senesni"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Skambučių sąrašas"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Įjungti garsiakalbį."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Išjungti garsiakalbį."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Leisti greičiau."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Leisti lėčiau."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Pradėti arba pristabdyti atkūrimą."</string>
</resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 9dbbaf0..c484ff3 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Notīrīt zvanu žurnālu"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Dzēst balss pasta ziņojumu"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Kopīgot balss pastu"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Zvanu žurnāls ir tukšs."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Zvanu žurnāls ir tukšs."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Vai not. zv. žurn.?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Visi zvanu ieraksti tiks dzēsti."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Notiek zvanu žurnāla tīrīšana..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Notiek buferizācija..."</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Notiek balss pasta iegūšana..."</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Nevarēja iegūt balss pasta ziņojumu."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Jauns"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Vecāki"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Tikai balss pasta zvani"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Tikai ienākošie zvani"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Tikai izejošie zvani"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"zvaigznīte"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"nulle"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"numura zīme"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"balss pasts"</string>
<string name="description_search_button" msgid="3660807558587384889">"meklēt"</string>
<string name="description_dial_button" msgid="1274091017188142646">"sastādīt numuru"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"atpakaļatkāpe"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"sastādītais numurs"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Zvanu vēsture"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Vairāk opciju"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"numura sastādīšanas tastatūra"</string>
<string name="menu_copy" msgid="6108677035381940698">"Kopēt"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Rādīt tikai izejošos zvanus"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Rādīt tikai ienākošos zvanus"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Rādīt tikai neatbildētos zvanus"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Rādīt tikai balss pasta ziņ."</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Rādīt visus zvanus"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Pievienot kontaktpersonu"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Pievienot 2 sekundes ilgu pauzi"</string>
<string name="add_wait" msgid="3360818652790319634">"Pievienot gaidīšanu"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Atlasīt abonementu"</string>
<string name="call_settings" msgid="7666474782093693667">"Iestatījumi"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Jauna kontaktpersona"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Visas kontaktpersonas"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Informācija par zvanu"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Nevarēja nolasīt informāciju par pieprasīto zvanu."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Izmantot skārientoņu tastatūru"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Izejošs zvans"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Neatbildēts zvans"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Balss pasts"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Pievienot kontaktpersonu"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Skatīt kontaktpersonu <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Zvanīt šim: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Kontaktpersonas informācija: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Jauns balss pasta ziņojums."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> zvani."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Sūtīt īsziņu šim: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Nenoklausīti balss pasta ziņojumi"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Sākt meklēšanu ar balsi"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Zvaniet: <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Nezināms"</string>
<string name="voicemail" msgid="3851469869202611441">"Balss pasts"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Notiek ielāde no SIM kartes..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Kontaktpersonas SIM kartē"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Lai izmantotu šo funkciju, atkārtoti iespējojiet lietojumprogrammu Personas."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Ier. vārdu vai tālr. nr."</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Visi"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Neatb."</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Nav nesenu neatbildēto zvanu."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Nav nesenu balss pasta ziņojumu."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Rādīt visas kontaktpersonas"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Meklēšana ar balsi nav pieejama."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Nevar veikt tālruņa zvanu, jo lietojumprogramma Tālrunis tika atspējota."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Nav instalēta neviena lietojumprogramma, kurā varētu apstrādāt atlasīto darbību."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Ierakstiet vārdu vai tālr. nr."</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Jums nav nesenu neatbildētu zvanu."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Jums nav nesenu balss pasta ziņojumu."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Rādīt tikai izlasi"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Vēsture"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Visi"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Neatb."</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Balss p."</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Ātrā izvēlne"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Pēdējie"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Kontaktpersonas"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Noņemts no izlases"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Atsaukt"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Zvaniet: <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Pievienot kontaktpersonām"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Visas zvanu vēstures skatīšana"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"Jauni neatbildēti zvani: <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Izmantojot ātro zvanu funkciju, varat ar vienu pieskārienu zvanīt \nizlasei pievienotajām kontaktpersonām un uz numuriem\n, uz kuriem bieži zvanāt."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Jums nav kontaktpersonu."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Pieskarieties attēlam, lai skatītu visus tālruņa numurus, vai pieskarieties un turiet, lai mainītu secību."</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Noraidīt"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Noņemt"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"VISAS KONTAKTPERSONAS"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"ATZVANĪT"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"KLAUSĪTIES"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"DETALIZĒTA INFORMĀCIJA"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Neatbildēts zvans no: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Atbildēts zvans no: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Izejošs zvans: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Atzvanīt: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Klausīties balss pasta ziņojumu no: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Zvanu informācija par šādu numuru: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Zvanu žurnāla ieraksts ir izdzēsts."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Šodien"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Vakar"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Pēdējā nedēļa"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Vecāki zvani"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Zvanu saraksts"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Ieslēgt skaļruni."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Izslēgt skaļruni."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Atskaņot ātrāk."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Atskaņot lēnāk."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Sākt vai apturēt atskaņošanu."</string>
</resources>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
new file mode 100644
index 0000000..f9b4011
--- /dev/null
+++ b/res/values-mn-rMN/strings.xml
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="8490255569343340580">"Залгагч"</string>
+ <string name="launcherDialer" msgid="8636288196618486553">"Утас"</string>
+ <string name="dialerIconLabel" msgid="6500826552823403796">"Утас"</string>
+ <string name="recentCallsIconLabel" msgid="1419116422359067949">"Дуудлагын жагсаалт"</string>
+ <string name="menu_sendTextMessage" msgid="6937343460284499306">"Зурвас илгээх"</string>
+ <string name="recentCalls_callNumber" msgid="1756372533999226126">"<xliff:g id="NAME">%s</xliff:g> руу залгах"</string>
+ <string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"Дуудлага хийхийн өмнө дугаарыг засах"</string>
+ <string name="recentCalls_addToContact" msgid="1429899535546487008">"Харилцагчдад нэмэх"</string>
+ <string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Дуудлагын жагсаалтаас хасах"</string>
+ <string name="recentCalls_deleteAll" msgid="6352364392762163704">"Дуудлагын жагсаалтыг устгах"</string>
+ <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Дуут шууданг устгах"</string>
+ <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Дуут шууданг хуваалцах"</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Таны дуудлагын жагсаалт хоосон байна."</string>
+ <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Дуудлагын жагсаалтыг устгах уу?"</string>
+ <string name="clearCallLogConfirmation" msgid="5043563133171583152">"Таны бүх дуудлагын бичлэгүүд устах болно."</string>
+ <string name="clearCallLogProgress_title" msgid="8365943000154295771">"Дуудлагын жагсаалтыг устгаж байна…"</string>
+ <plurals name="notification_voicemail_title">
+ <item quantity="one" msgid="1746619685488504230">"Дуут шуудан"</item>
+ <item quantity="other" msgid="5513481419205061254">"<xliff:g id="COUNT">%1$d</xliff:g> Дуут шуудан"</item>
+ </plurals>
+ <string name="notification_action_voicemail_play" msgid="6113133136977996863">"Тоглуулах"</string>
+ <string name="notification_voicemail_callers_list" msgid="1153954809339404149">"<xliff:g id="NEWER_CALLERS">%1$s</xliff:g>, <xliff:g id="OLDER_CALLER">%2$s</xliff:g>"</string>
+ <string name="notification_new_voicemail_ticker" msgid="895342132049452081">"<xliff:g id="CALLER">%1$s</xliff:g>-с ирсэн шинэ дуут шуудан"</string>
+ <string name="voicemail_playback_error" msgid="1811242131549854624">"Дуут шууданг тоглуулж чадсангүй."</string>
+ <string name="voicemail_buffering" msgid="738287747618697097">"Буферлэж байна…"</string>
+ <string name="voicemail_fetching_content" msgid="877911315738258780">"Дуут шууданг уншиж байна…"</string>
+ <string name="voicemail_fetching_timout" msgid="6691792377574905201">"Дуут шууданг уншиж чадсангүй."</string>
+ <string name="call_log_voicemail_header" msgid="3945407886667089173">"Зөвхөн дуут шуудантай дуудлагуудыг"</string>
+ <string name="call_log_incoming_header" msgid="2787722299753674684">"Зөвхөн ирсэн дуудлага"</string>
+ <string name="call_log_outgoing_header" msgid="761009180766735769">"Зөвхөн залгасан дуудлагуудыг"</string>
+ <string name="call_log_missed_header" msgid="8017148056610855956">"Зөвхөн аваагүй дуудлагуудыг"</string>
+ <string name="voicemail_status_voicemail_not_available" msgid="3021980206152528883">"Дуут шуудангийн серверт холбогдож чадахгүй байна."</string>
+ <string name="voicemail_status_messages_waiting" msgid="7113421459602803605">"Дуут шуудангийн серверт холбогдож чадахгүй байна. Шинэ дуут шуудангууд хүлээгдэж байна."</string>
+ <string name="voicemail_status_configure_voicemail" msgid="3738537770636895689">"Дуут шуудангаа тохируулна уу."</string>
+ <string name="voicemail_status_audio_not_available" msgid="3369618334553341626">"Аудио байхгүй байна."</string>
+ <string name="voicemail_status_action_configure" msgid="8671796489912239589">"Тохируулах"</string>
+ <string name="voicemail_status_action_call_server" msgid="1824816252288551794">"Дуут шуудан руу залгах"</string>
+ <string name="voicemail_speed_slowest" msgid="1733460666177707312">"Хамгийн удаанаар"</string>
+ <string name="voicemail_speed_slower" msgid="1508601287347216244">"Удаанаар"</string>
+ <string name="voicemail_speed_normal" msgid="9033988544627228892">"Энгийн хурдаар"</string>
+ <string name="voicemail_speed_faster" msgid="2019965121475935488">"Хурданаар"</string>
+ <string name="voicemail_speed_fastest" msgid="5758712343491183292">"Хамгийн хурданаар"</string>
+ <string name="call_log_item_count_and_date" msgid="7641933305703520787">"(<xliff:g id="COUNT">%1$d</xliff:g>) <xliff:g id="DATE">%2$s</xliff:g>"</string>
+ <string name="sms_disambig_title" msgid="5846266399240630846">"Дугаар сонгоно уу"</string>
+ <string name="call_disambig_title" msgid="4392886850104795739">"Дугаар сонгоно уу"</string>
+ <string name="make_primary" msgid="5829291915305113983">"Энэ сонголтыг санах"</string>
+ <string name="description_image_button_one" msgid="1740638037139856139">"нэг"</string>
+ <string name="description_image_button_two" msgid="5882638439003731308">"хоёр"</string>
+ <string name="description_image_button_three" msgid="8709731759376015180">"гурав"</string>
+ <string name="description_image_button_four" msgid="3530239685642246130">"дөрөв"</string>
+ <string name="description_image_button_five" msgid="1182465427501188413">"тав"</string>
+ <string name="description_image_button_six" msgid="2093656269261415475">"зургаа"</string>
+ <string name="description_image_button_seven" msgid="2450357020447676481">"долоо"</string>
+ <string name="description_image_button_eight" msgid="6969435115163287801">"найм"</string>
+ <string name="description_image_button_nine" msgid="7857248695662558323">"ес"</string>
+ <string name="description_image_button_star" msgid="3365919907520767866">"од"</string>
+ <string name="description_image_button_zero" msgid="4133108949401820710">"тэг"</string>
+ <string name="description_image_button_pound" msgid="3039765597595889230">"фунт"</string>
+ <string name="description_search_button" msgid="3660807558587384889">"хайх"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"залгах"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"залгах дугаар"</string>
+ <string name="action_menu_call_history_description" msgid="9018442816219748968">"Дуудлагын түүх"</string>
+ <string name="action_menu_overflow_description" msgid="2303272250613084574">"Нэмэлт сонголтууд"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"дугаар цуглуулагч"</string>
+ <string name="menu_copy" msgid="6108677035381940698">"Хуулах"</string>
+ <string name="menu_show_outgoing_only" msgid="1965570298133301970">"Зөвхөн залгасан дуудлагуудыг харуулах"</string>
+ <string name="menu_show_incoming_only" msgid="7534206815238877417">"Зөвхөн ирсэн дуудлагуудыг харуулах"</string>
+ <string name="menu_show_missed_only" msgid="154473166059743996">"Зөвхөн аваагүй дуудлагуудыг харуулах"</string>
+ <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Зөвхөн дуут шуудангуудыг харуулах"</string>
+ <string name="menu_show_all_calls" msgid="7560347482073345885">"Бүх дуудлагыг харуулах"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Харилцагч нэмэх"</string>
+ <string name="add_2sec_pause" msgid="9214012315201040129">"2-сек зогсолт нэмэх"</string>
+ <string name="add_wait" msgid="3360818652790319634">"Хүлээлт нэмэх"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Бүртгэлийг сонгох"</string>
+ <string name="call_settings" msgid="7666474782093693667">"Тохиргоо"</string>
+ <string name="menu_newContact" msgid="1209922412763274638">"Шинэ харилцагч"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Бүх харилцагчид"</string>
+ <string name="callDetailTitle" msgid="5340227785196217938">"Дуудлагын мэдээлэл"</string>
+ <string name="toast_call_detail_error" msgid="7200975244804730096">"Хийсэн дуудлагын дэлгэрэнгүй мэдээллийг уншиж чадсангүй."</string>
+ <string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Хүрэлтээр дуугардаг гар ашиглах"</string>
+ <string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Үргэлжилж буй дуудлага руу буцах"</string>
+ <string name="dialer_addAnotherCall" msgid="4205688819890074468">"Дуудлага нэмэх"</string>
+ <string name="type_incoming" msgid="6502076603836088532">"Ирж буй дуудлага"</string>
+ <string name="type_outgoing" msgid="343108709599392641">"Залгасан дуудлага"</string>
+ <string name="type_missed" msgid="2720502601640509542">"Аваагүй дуудлага"</string>
+ <string name="type_voicemail" msgid="5153139450668549908">"Дуут шуудан"</string>
+ <string name="actionIncomingCall" msgid="6028930669817038600">"Ирж буй дуудлага"</string>
+ <string name="description_call_log_play_button" msgid="651182125650429846">"Дуут шууданг тоглуулах"</string>
+ <string name="description_call_log_incoming_call" msgid="4485427487637250143">"Ирж буй дуудлага"</string>
+ <string name="description_call_log_outgoing_call" msgid="604831756853471658">"Залгасан дуудлага"</string>
+ <string name="description_call_log_missed_call" msgid="2242805209983708825">"Аваагүй дуудлага"</string>
+ <string name="description_call_log_voicemail" msgid="4600798771975158948">"Дуут шуудан"</string>
+ <string name="description_view_contact" msgid="5205669345700598415">"<xliff:g id="NAME">%1$s</xliff:g> харилцагчийг харах"</string>
+ <string name="description_call" msgid="3443678121983852666">"<xliff:g id="NAME">%1$s</xliff:g> руу залгах"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-н харилцагчийн мэдээлэл"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Шинэ дуут шуудан."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> дуудлага."</string>
+ <string name="description_send_text_message" msgid="7803126439934046891">"<xliff:g id="NAME">%1$s</xliff:g> руу зурвас илгээх"</string>
+ <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Сонсоогүй дуут шуудан"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Дуун хайлтыг эхлүүлэх"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"<xliff:g id="NUMBER">%s</xliff:g> руу залгах"</string>
+ <string name="unknown" msgid="740067747858270469">"Тодорхойгүй"</string>
+ <string name="voicemail" msgid="3851469869202611441">"Дуут шуудан"</string>
+ <string name="private_num" msgid="6374339738119166953">"Нууцлагдсан дугаар"</string>
+ <string name="payphone" msgid="4864313342828942922">"Төлбөртэй утас"</string>
+ <string name="dialerKeyboardHintText" msgid="5401660096579787344">"Залгахдаа гар ашиглах"</string>
+ <string name="dialerDialpadHintText" msgid="5824490365898349041">"Дуудлага нэмэхийн тулд залгана уу"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> минут <xliff:g id="SECONDS">%s</xliff:g> секунд"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"Дуудлага илгээгдсэнгүй"</string>
+ <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"Дуут шууданг тохируулахын тулд Цэс > Тохиргоо руу очно уу."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"Дуут шуудан руу залгахын тулд юуны өмнө Нислэгийн төлвийг идэвхгүйжүүлнэ үү."</string>
+ <string name="contact_list_loading" msgid="5488620820563977329">"Ачааллаж байна..."</string>
+ <string name="imei" msgid="3045126336951684285">"IMEI"</string>
+ <string name="meid" msgid="6210568493746275750">"MEID"</string>
+ <string name="simContacts_emptyLoading" msgid="6700035985448642408">"SIM картаас уншиж байна…"</string>
+ <string name="simContacts_title" msgid="27341688347689769">"SIM картны харилцагчид"</string>
+ <string name="add_contact_not_available" msgid="1419207765446461366">"Тус функцийг ашиглахын тулд People аппликешнийг дахин идэвхжүүлнэ үү."</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Дуун хайлтыг ашиглах боломжгүй."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Утас аппликешныг идэвхгүйжүүлсэн тул утасны дуудлага хийх боломжгүй."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Сонгосон үйлдлийг гүйцэтгэх боломжтой суулгагдсан апп байхгүй байна."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Нэр эсвэл дугаарыг бичнэ үү"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Танд саяхны аваагүй дуудлага байхгүй байна."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Танд саяхны дуут шуудан байхгүй байна."</string>
+ <string name="show_favorites_only" msgid="5520072531022614595">"Зөвхөн дуртайнуудыг харуулах"</string>
+ <string name="call_log_activity_title" msgid="4612824396355272023">"Түүх"</string>
+ <string name="call_log_all_title" msgid="3566738938889333307">"Бүгд"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Аваагүй"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Дуут шуудан"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Шуурхай залгах"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Саяхных"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Харилцагчид"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Дуртай жагсаалтаас хасав"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Буцаах"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"<xliff:g id="NUMBER">%s</xliff:g> руу залгах"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Харилцагчдад нэмэх"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Дуудлагын түүхийг бүхэлд нь харах"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> шинэ аваагүй дуудлага"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Хурдан залгах гэдэг нь өөрийн байнга залгадаг\nдуртай хүмүүс буюу дугаар руу\n нэг хүрэлтээр залгахыг хэлнэ."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Танд харилцагч байхгүй байна."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Бүх тоог харахын тулд зургийг товших буюу дахин захиалахын тулд дараад барина уу"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Хаах"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Хасах"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"БҮХ ХАРИЛЦАГЧИД"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"БУЦААЖ ЗАЛГАХ"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"СОНСОХ"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"ДЭЛГЭРЭНГҮЙ"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-н аваагүй дуудлага, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-н авсан дуудлага, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> руу залгасан дуудлага, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> руу буцаж залгах"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>-н дуут шууданг сонсох"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> дуудлагын дэлгэрэнгүй мэдээлэл"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Дуудлагын бүртгэл устгагдсан."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Өнөөдөр"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Өчигдөр"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Сүүлийн долоо хоног"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Хуучин"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Дуудлагын жагсаалт"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Чанга яригчийг асаах."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Чанга яригчийг унтраах."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Хурдан тоглуулах."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Удаан тоглуулах."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Тоглуулахыг эхлүүлэх буюу түр зогсоох."</string>
+</resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms-rMY/strings.xml
similarity index 67%
rename from res/values-ms/strings.xml
rename to res/values-ms-rMY/strings.xml
index f8f7f35..3e43a0a 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Padam bersih log panggilan"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Padamkan mel suara"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Kongsi mel suara"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Log panggilan kosong."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Log panggilan anda kosong."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Padam bersih log panggilan?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Semua rekod panggilan anda akan dipadamkan."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Memadam bersih log panggilan..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Menimbal…"</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Sedang mendapatkan mel suara…"</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Tidak dapat mengambil mel suara."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Baru"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Lebih lama"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Panggilan dengan mel suara sahaja"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Panggilan masuk sahaja"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Panggilan keluar sahaja"</string>
@@ -77,23 +75,26 @@
<string name="description_image_button_star" msgid="3365919907520767866">"bintang"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"sifar"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"paun"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"mel suara"</string>
<string name="description_search_button" msgid="3660807558587384889">"cari"</string>
<string name="description_dial_button" msgid="1274091017188142646">"dail"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"undur ruang"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"nombor untuk didail"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Sejarah Panggilan"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Lagi pilihan"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"pad dail"</string>
<string name="menu_copy" msgid="6108677035381940698">"Salin"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Tunjuk panggilan keluar shj"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Tunjuk panggilan masuk shj"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Tunjuk panggilan terlepas shj"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Tunjukkan mel suara sahaja"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Tunjukkan semua panggilan"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Tambah kenalan"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Tambah jeda 2 saat"</string>
<string name="add_wait" msgid="3360818652790319634">"Tambah penungguan"</string>
+ <!-- no translation found for menu_select_subscription (363190251770943468) -->
+ <skip />
<string name="call_settings" msgid="7666474782093693667">"Tetapan"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Kenalan baru"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Semua kenalan"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Butiran panggilan"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Tidak boleh membaca butiran untuk panggilan yang diminta."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Gunakan pad kekunci nada sentuh"</string>
@@ -109,14 +110,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Panggilan keluar"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Panggilan tidak dijawab"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Mel suara"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Tambah kenalan"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Lihat kenalan <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Panggil <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Butiran hubungan untuk <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Mel suara baharu."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> panggilan."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Hantar mesej teks kepada <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Mel suara belum didengar"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Mulakan carian suara"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Panggil <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Tidak diketahui"</string>
<string name="voicemail" msgid="3851469869202611441">"Mel suara"</string>
@@ -134,20 +135,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Memuatkan dari kad SIM..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Kenalan kad SIM"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Dayakan semula aplikasi Orang untuk menggunakan ciri ini."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Taipkan nama atau telefon"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Semua"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Tidak dijawab"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Tiada panggilan tidak dijawab terbaru."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Tiada mel suara terbaru."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Tunjukkan semua kenalan"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Carian suara tidak tersedia."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Tidak boleh membuat panggilan telefon kerana aplikasi Telefon telah dilumpuhkan."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Tiada aktiviti yang dipasang tersedia untuk mengendalikan tindakan yang dipilih."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Taip nama atau nombor telefon"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Anda tidak mempunyai panggilan tidak dijawab terbaharu."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Anda tidak mempunyai mel suara terbaharu."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Tunjukkan kegemaran sahaja"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Sejarah"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Semua"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Tidak dijawab"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Mel suara"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Dail Laju"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Terkini"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Kenalan"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Dialih keluar daripada kegemaran"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Buat asal"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Panggil <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Tambahkan pada kenalan"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Lihat sejarah panggilan penuh"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> panggilan terlepas baharu"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Dail cepat ialah pendailan satu sentuhan\nuntuk nombor kegemaran dan nombor\n yang kerap anda panggil."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Anda tiada kenalan."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Ketik imej untuk melihat semua nombor atau tekan dan tahan imej untuk menyusun semula"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Ketepikan"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Alih keluar"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"SEMUA KENALAN"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"PANGGIL BALIK"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"DENGAR"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"BUTIRAN"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Panggilan yang tidak dijawab daripada <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Panggilan yang dijawab daripada <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Panggilan kepada <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Panggil balik <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Dengar mel suara daripada <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Butiran panggilan untuk <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Entri log panggilan dihapuskan."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Hari ini"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Semalam"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Minggu lepas"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Lebih lama"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Senarai Panggilan"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Hidupkan pembesar suara."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Matikan pembesar suara."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Main lebih cepat."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Main lebih perlahan."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Mulakan atau jeda main balik."</string>
</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 6010a6f..6aecd34 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Tøm anropslogg"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Slett talepost"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Del talepost"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Anropsloggen er tom."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Samtaleloggen din er tom."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Tømme samtaleloggen?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Alle samtalelogger kommer til å slettes."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Tømmer anropsloggen …"</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Bufrer …"</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Henter talepost …"</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Kunne ikke hente talepost."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Nytt"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Eldre"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Bare anrop som gikk til talepostkasse"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Bare innkommende anrop"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Bare utgående anrop"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"stjerne"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"null"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"firkant"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"talepostkasse"</string>
<string name="description_search_button" msgid="3660807558587384889">"søk"</string>
<string name="description_dial_button" msgid="1274091017188142646">"ring"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"tilbaketast"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"ring til"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Anropslogg"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Flere alternativer"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"tastatur"</string>
<string name="menu_copy" msgid="6108677035381940698">"Kopiér"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Vis bare utgående"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Vis bare innkommende"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Vis bare tapte"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Vis bare talemeldinger"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Vis alle samtaler"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Legg til kontakt"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Legg til pause på 2 sek."</string>
<string name="add_wait" msgid="3360818652790319634">"Legg til Vent"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Velg abonnement"</string>
<string name="call_settings" msgid="7666474782093693667">"Innstillinger"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Ny kontakt"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Alle kontakter"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Samtaleinformasjon"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Kunne ikke lese informasjon for forespurt samtale."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Bruk tonetastatur"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Utgående samtale"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Tapt anrop"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Talepostkasse"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Legg til kontakt"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Se kontakten <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Ring til <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Kontaktinformasjon for <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Ny talemelding."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> samtaler."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Send tekstmelding til <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Ikke avspilt talepost"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"–"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Start talesøk"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Ring <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Ukjent"</string>
<string name="voicemail" msgid="3851469869202611441">"Telefonsvarer"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Henter fra SIM-kort…"</string>
<string name="simContacts_title" msgid="27341688347689769">"Kontakter på SIM-kort"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Aktiver Personer-appen på nytt for å bruke denne funksjonen."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Skriv inn et navn eller telefonnummer"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Alle"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Ikke besvart"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Ingen nylige ubesvarte anrop"</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Ingen nylige talemeldinger"</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Vis alle kontakter"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Talesøk er ikke tilgjengelig."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Kan ikke ringe fordi Telefon-appen er deaktivert."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Det er ingen installert aktivitet tilgjengelig for å håndtere den valgte handlingen."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Skriv inn et navn eller telefonnummer"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Du har ingen nylig tapte anrop."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Du har ingen nylige talepostmeldinger."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Vis bare favoritter"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Logg"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Alle"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Ikke besvart"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Talemeldinger"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Hurtigoppringing"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Sist brukte"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Kontakter"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Fjernet fra favoritter"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Angre"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Ring <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Legg til i kontakter"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Se hele anropsloggen"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> nye tapte anrop"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Med hurtigvalg kan du ring til \nfavoritter og numre\n du bruker ofte, med bare ett trykk."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Du har ingen kontakter."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Trykk på bildet for å se alle telefonnumrene, eller trykk og hold inne for å endre rekkefølgen"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Fjern"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Fjern"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ALLE KONTAKTER"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"RING TILBAKE"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"LYTT"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"DETALJER"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Tapt anrop fra <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Besvart anrop fra <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Ring til <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Ring tilbake til <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Lytt til talepostkasse fra <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Samtaledetaljer for <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Oppføringen i samtaleloggen slettet."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"I dag"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"I går"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Forrige uke"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Eldre"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Samtaleliste"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Slå på høyttaleren."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Slå av høyttaleren."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Spill av raskere."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Spill av saktere."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Start eller stopp avspillingen."</string>
</resources>
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml
new file mode 100644
index 0000000..c208533
--- /dev/null
+++ b/res/values-ne-rNP/strings.xml
@@ -0,0 +1,162 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="8490255569343340580">"डायलर"</string>
+ <string name="launcherDialer" msgid="8636288196618486553">"फोन"</string>
+ <string name="dialerIconLabel" msgid="6500826552823403796">"फोन"</string>
+ <string name="recentCallsIconLabel" msgid="1419116422359067949">"कल लग"</string>
+ <string name="menu_sendTextMessage" msgid="6937343460284499306">"पाठ सन्देश पठाउनुहोस्"</string>
+ <string name="recentCalls_callNumber" msgid="1756372533999226126">"कल <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"कल गर्नुअगाडी नम्बर सम्पादन गर्नुहोस्"</string>
+ <string name="recentCalls_addToContact" msgid="1429899535546487008">"सम्पर्कहरूमा थप्नुहोस्"</string>
+ <string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"कल लगबाट निकाल्नुहोस्"</string>
+ <string name="recentCalls_deleteAll" msgid="6352364392762163704">"कल लग हटाउनुहोस्"</string>
+ <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"भ्वाइसमेल हटाउनुहोस्"</string>
+ <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"भ्वाइसमेल साझेदारी गर्नुहोस्"</string>
+ <string name="recentCalls_empty" msgid="247053222448663107">"कल लग खाली छ।"</string>
+ <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"सबै कल लग हटाउने हो?"</string>
+ <string name="clearCallLogConfirmation" msgid="5043563133171583152">"तपाइँको सम्पूर्ण कल रेकर्डहरू हटाइने छ।"</string>
+ <string name="clearCallLogProgress_title" msgid="8365943000154295771">"कल लग हटाउँदै..."</string>
+ <plurals name="notification_voicemail_title">
+ <item quantity="one" msgid="1746619685488504230">"भ्वाइसमेल"</item>
+ <item quantity="other" msgid="5513481419205061254">"<xliff:g id="COUNT">%1$d</xliff:g> भ्वाइसमेलहरू"</item>
+ </plurals>
+ <string name="notification_action_voicemail_play" msgid="6113133136977996863">"बजाउनुहोस्"</string>
+ <string name="notification_voicemail_callers_list" msgid="1153954809339404149">"<xliff:g id="NEWER_CALLERS">%1$s</xliff:g> , <xliff:g id="OLDER_CALLER">%2$s</xliff:g>"</string>
+ <string name="notification_new_voicemail_ticker" msgid="895342132049452081">"<xliff:g id="CALLER">%1$s</xliff:g> बाट नयाँ भ्वाइसमेल"</string>
+ <string name="voicemail_playback_error" msgid="1811242131549854624">"भ्वाइसमेल बजाउन सकिएन।"</string>
+ <string name="voicemail_buffering" msgid="738287747618697097">"बफरिङ हुदै..."</string>
+ <string name="voicemail_fetching_content" msgid="877911315738258780">"भ्वाइसमेल ल्याइँदै ..."</string>
+ <string name="voicemail_fetching_timout" msgid="6691792377574905201">"भ्वाइसमेल ल्याउन सकेन।"</string>
+ <string name="call_log_voicemail_header" msgid="3945407886667089173">"भ्वाइसमेलका साथ मात्र कल गर्नुहोस्"</string>
+ <string name="call_log_incoming_header" msgid="2787722299753674684">"आगमन कलहरू मात्र"</string>
+ <string name="call_log_outgoing_header" msgid="761009180766735769">"बहिर्गमन कलहरू मात्र"</string>
+ <string name="call_log_missed_header" msgid="8017148056610855956">"छुटेका कलहरू मात्र"</string>
+ <string name="voicemail_status_voicemail_not_available" msgid="3021980206152528883">"भ्वाइसमेल सर्भरसँग जोड्न सक्दैन।"</string>
+ <string name="voicemail_status_messages_waiting" msgid="7113421459602803605">"भ्वाइसमेल सर्भरमा जडान गर्न सकेन। नयाँ भ्वाइसमेलहरू कुर्दै छन्।"</string>
+ <string name="voicemail_status_configure_voicemail" msgid="3738537770636895689">"तपाईँको भ्वाइसमेल मिलाउनुहोस्"</string>
+ <string name="voicemail_status_audio_not_available" msgid="3369618334553341626">"अडियो उपलव्ध छैन।"</string>
+ <string name="voicemail_status_action_configure" msgid="8671796489912239589">"मिलाउनुहोस्"</string>
+ <string name="voicemail_status_action_call_server" msgid="1824816252288551794">"भ्वाइसमेल कल गर्नुहोस्"</string>
+ <string name="voicemail_speed_slowest" msgid="1733460666177707312">"सबभन्दा ढिलो गति"</string>
+ <string name="voicemail_speed_slower" msgid="1508601287347216244">"सुस्त गति"</string>
+ <string name="voicemail_speed_normal" msgid="9033988544627228892">"सामान्य गति"</string>
+ <string name="voicemail_speed_faster" msgid="2019965121475935488">"तेज गति"</string>
+ <string name="voicemail_speed_fastest" msgid="5758712343491183292">"सबभन्दा तेज गति"</string>
+ <string name="call_log_item_count_and_date" msgid="7641933305703520787">"( <xliff:g id="COUNT">%1$d</xliff:g> ) <xliff:g id="DATE">%2$s</xliff:g>"</string>
+ <string name="sms_disambig_title" msgid="5846266399240630846">"नम्बर रोज्नुहोस्"</string>
+ <string name="call_disambig_title" msgid="4392886850104795739">"नम्बर छान्नुहोस्"</string>
+ <string name="make_primary" msgid="5829291915305113983">"यो छनौट याद राख्नुहोस्"</string>
+ <string name="description_image_button_one" msgid="1740638037139856139">"एक"</string>
+ <string name="description_image_button_two" msgid="5882638439003731308">"दुई"</string>
+ <string name="description_image_button_three" msgid="8709731759376015180">"तिन"</string>
+ <string name="description_image_button_four" msgid="3530239685642246130">"चार"</string>
+ <string name="description_image_button_five" msgid="1182465427501188413">"पाँच"</string>
+ <string name="description_image_button_six" msgid="2093656269261415475">"छ"</string>
+ <string name="description_image_button_seven" msgid="2450357020447676481">"सात"</string>
+ <string name="description_image_button_eight" msgid="6969435115163287801">"आठ"</string>
+ <string name="description_image_button_nine" msgid="7857248695662558323">"नौ"</string>
+ <string name="description_image_button_star" msgid="3365919907520767866">"तारा चिन्ह"</string>
+ <string name="description_image_button_zero" msgid="4133108949401820710">"शून्य"</string>
+ <string name="description_image_button_pound" msgid="3039765597595889230">"पाउन्ड"</string>
+ <string name="description_voicemail_button" msgid="3402506823655455591">"भ्वाइसमेल"</string>
+ <string name="description_search_button" msgid="3660807558587384889">"खोजी गर्नुहोस्"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"डायल"</string>
+ <string name="description_delete_button" msgid="6263102114033407382">"ब्याकस्पेस"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"डायल गर्न संख्या"</string>
+ <string name="action_menu_call_history_description" msgid="9018442816219748968">"कल इतिहास"</string>
+ <string name="action_menu_overflow_description" msgid="2303272250613084574">"थप विकल्पहरू"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"डायल प्याड"</string>
+ <string name="menu_copy" msgid="6108677035381940698">"प्रतिलिपि गर्नुहोस्"</string>
+ <string name="menu_show_outgoing_only" msgid="1965570298133301970">"बहिर्गमन मात्र देखाउनुहोस्"</string>
+ <string name="menu_show_incoming_only" msgid="7534206815238877417">"आगमन कल मात्र देखाउनुहोस्"</string>
+ <string name="menu_show_missed_only" msgid="154473166059743996">"छुटेकाहरू मात्र देखाउनुहोस्"</string>
+ <string name="menu_show_voicemails_only" msgid="1898421289561435703">"भ्वाइसमेलहरू मात्र देखाउनुहोस्"</string>
+ <string name="menu_show_all_calls" msgid="7560347482073345885">"सबै कलहरू देखाउनुहोस्"</string>
+ <string name="add_2sec_pause" msgid="9214012315201040129">"२ सेकन्डको रोकाइ थप्नुहोस्"</string>
+ <string name="add_wait" msgid="3360818652790319634">"पर्खाइ थप्नुहोस्"</string>
+ <string name="call_settings" msgid="7666474782093693667">"सेटिङहरू"</string>
+ <string name="menu_newContact" msgid="1209922412763274638">"नयाँ सम्पर्क"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"सबै सम्पर्कहरू"</string>
+ <string name="callDetailTitle" msgid="5340227785196217938">"कल विवरण"</string>
+ <string name="toast_call_detail_error" msgid="7200975244804730096">"अनुरोध गरिएको कलको जानकारी पढ्न सकेन।"</string>
+ <string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"स्पर्श टोन किप्याडको प्रयोग गर्नुहोस्"</string>
+ <string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"हुदै गरेको कलमा फर्कनुहोस्"</string>
+ <string name="dialer_addAnotherCall" msgid="4205688819890074468">"कल थप्नुहोस्"</string>
+ <string name="type_incoming" msgid="6502076603836088532">"आगमन कल"</string>
+ <string name="type_outgoing" msgid="343108709599392641">"बहिर्गमन कल"</string>
+ <string name="type_missed" msgid="2720502601640509542">"मिस कल"</string>
+ <string name="type_voicemail" msgid="5153139450668549908">"भ्वाइसमेल"</string>
+ <string name="actionIncomingCall" msgid="6028930669817038600">"आगमन कलहरू"</string>
+ <string name="description_call_log_play_button" msgid="651182125650429846">"भ्वाइसमेल बजाउनुहोस्"</string>
+ <string name="description_call_log_incoming_call" msgid="4485427487637250143">"आगमन कल"</string>
+ <string name="description_call_log_outgoing_call" msgid="604831756853471658">"बहिर्गमन कल"</string>
+ <string name="description_call_log_missed_call" msgid="2242805209983708825">"मिस कल"</string>
+ <string name="description_call_log_voicemail" msgid="4600798771975158948">"भ्वाइसमेल"</string>
+ <string name="description_add_contact" msgid="3103414772502485851">"सम्पर्क थप्नुहोस्"</string>
+ <string name="description_view_contact" msgid="5205669345700598415">"<xliff:g id="NAME">%1$s</xliff:g> सम्पर्क हेर्नुहोस्"</string>
+ <string name="description_call" msgid="3443678121983852666">"कल <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_send_text_message" msgid="7803126439934046891">"<xliff:g id="NAME">%1$s</xliff:g>मा पाठ सन्देश पठाउनुहोस्"</string>
+ <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"नसुनिएका भ्वाइसमेल"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"आवाज खोजी सुरु गर्नुहोस्"</string>
+ <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"<xliff:g id="NUMBER">%s</xliff:g> कल गर्नुहोस्"</string>
+ <string name="unknown" msgid="740067747858270469">"अज्ञात"</string>
+ <string name="voicemail" msgid="3851469869202611441">"भ्वाइसमेल"</string>
+ <string name="private_num" msgid="6374339738119166953">"नीजि नम्बर"</string>
+ <string name="payphone" msgid="4864313342828942922">"भुक्तानी फोन"</string>
+ <string name="dialerKeyboardHintText" msgid="5401660096579787344">"डायल गर्न किबोर्ड प्रयोग गर्नुहोस्"</string>
+ <string name="dialerDialpadHintText" msgid="5824490365898349041">"एउटा कल थप्नका लागि डायल गर्नुहोस्"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> मिनेट <xliff:g id="SECONDS">%s</xliff:g> सेकेन्ड"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"कल गएन"</string>
+ <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"भ्वाइसमेल सेट गर्नका लागि मेनु सेटिङमा जानुहोस्।"</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"भ्वाइसमेल कल गर्नका लागि पहिले हवाइजहाज मोड बन्द गर्नुहोस्।"</string>
+ <string name="contact_list_loading" msgid="5488620820563977329">"लोड हुँदै..."</string>
+ <string name="imei" msgid="3045126336951684285">"IMEI"</string>
+ <string name="meid" msgid="6210568493746275750">"MEID"</string>
+ <string name="simContacts_emptyLoading" msgid="6700035985448642408">"SIM कार्डबाट लोड हुँदै"</string>
+ <string name="simContacts_title" msgid="27341688347689769">"SIM कार्ड सम्पर्कहरू"</string>
+ <string name="add_contact_not_available" msgid="1419207765446461366">"यो सुविधा प्रयोग गर्नका लागि मानिसहरूको अनुप्रयोग पुनःसक्षम गर्नुहोस्।"</string>
+ <!-- no translation found for dialer_hint_find_contact (8798845521253672403) -->
+ <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"सबै"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"छुटेको"</string>
+ <string name="recentMissed_empty" msgid="5427113551557296665">"हालमा छुटेका कुनै कलहरू छैनन्।"</string>
+ <string name="recentVoicemails_empty" msgid="5163114119598014048">"हालको कुनै voicemail हरू छैनन्।"</string>
+ <string name="show_all_contacts" msgid="1732256558071778056">"सबै सम्पर्कहरू देखाउनुहोस्"</string>
+ <string name="show_favorites_only" msgid="5520072531022614595">"मनपर्ने मात्र देखाउनुहोस्"</string>
+ <string name="call_log_activity_title" msgid="4612824396355272023">"इतिहास"</string>
+ <string name="dialpad_0_number" msgid="8859392433961251108">"०"</string>
+ <string name="dialpad_1_number" msgid="6536740525419909212">"१"</string>
+ <string name="dialpad_2_number" msgid="4941546415280852148">"२"</string>
+ <string name="dialpad_3_number" msgid="6539414865185536881">"३"</string>
+ <string name="dialpad_4_number" msgid="979988372051042362">"४"</string>
+ <string name="dialpad_5_number" msgid="5492272478939926734">"५"</string>
+ <string name="dialpad_6_number" msgid="8044579516869379093">"६"</string>
+ <string name="dialpad_7_number" msgid="4175113016564167123">"७"</string>
+ <string name="dialpad_8_number" msgid="7949849563865941621">"८"</string>
+ <string name="dialpad_9_number" msgid="4377059952097526576">"९"</string>
+ <string name="show_all_contacts_title" msgid="8395378484578221791">"सबै सम्पर्कहरू"</string>
+ <string name="show_all_contacts_button_text" msgid="8057452310403090131">"सबै सम्पर्कहरू"</string>
+ <!-- no translation found for favorite_hidden (5011234945140912047) -->
+ <skip />
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"अनडु गर्नुहोस्"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"<xliff:g id="NUMBER">%s</xliff:g> कल गर्नुहोस्"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"सम्पर्कहरूमा थप्नुहोस्"</string>
+</resources>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
new file mode 100644
index 0000000..8ec13d7
--- /dev/null
+++ b/res/values-ne/strings.xml
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="8490255569343340580">"डायलर"</string>
+ <string name="launcherDialer" msgid="8636288196618486553">"फोन"</string>
+ <string name="dialerIconLabel" msgid="6500826552823403796">"फोन"</string>
+ <string name="recentCallsIconLabel" msgid="1419116422359067949">"कल लग"</string>
+ <string name="menu_sendTextMessage" msgid="6937343460284499306">"पाठ सन्देश पठाउनुहोस्"</string>
+ <string name="recentCalls_callNumber" msgid="1756372533999226126">"कल <xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"कल गर्नुअगाडी नम्बर सम्पादन गर्नुहोस्"</string>
+ <string name="recentCalls_addToContact" msgid="1429899535546487008">"सम्पर्कहरूमा थप्नुहोस्"</string>
+ <string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"कल लगबाट निकाल्नुहोस्"</string>
+ <string name="recentCalls_deleteAll" msgid="6352364392762163704">"कल लग हटाउनुहोस्"</string>
+ <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"भ्वाइसमेल हटाउनुहोस्"</string>
+ <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"भ्वाइसमेल साझेदारी गर्नुहोस्"</string>
+ <string name="recentCalls_empty" msgid="247053222448663107">"कल लग खाली छ।"</string>
+ <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"सबै कल लग हटाउने हो?"</string>
+ <string name="clearCallLogConfirmation" msgid="5043563133171583152">"तपाइँको सम्पूर्ण कल रेकर्डहरू हटाइने छ।"</string>
+ <string name="clearCallLogProgress_title" msgid="8365943000154295771">"कल लग हटाउँदै..."</string>
+ <plurals name="notification_voicemail_title">
+ <item quantity="one" msgid="1746619685488504230">"भ्वाइसमेल"</item>
+ <item quantity="other" msgid="5513481419205061254">"<xliff:g id="COUNT">%1$d</xliff:g> भ्वाइसमेलहरू"</item>
+ </plurals>
+ <string name="notification_action_voicemail_play" msgid="6113133136977996863">"बजाउनुहोस्"</string>
+ <string name="notification_voicemail_callers_list" msgid="1153954809339404149">"<xliff:g id="NEWER_CALLERS">%1$s</xliff:g> , <xliff:g id="OLDER_CALLER">%2$s</xliff:g>"</string>
+ <string name="notification_new_voicemail_ticker" msgid="895342132049452081">"<xliff:g id="CALLER">%1$s</xliff:g> बाट नयाँ भ्वाइसमेल"</string>
+ <string name="voicemail_playback_error" msgid="1811242131549854624">"भ्वाइसमेल बजाउन सकिएन।"</string>
+ <string name="voicemail_buffering" msgid="738287747618697097">"बफरिङ हुदै..."</string>
+ <string name="voicemail_fetching_content" msgid="877911315738258780">"भ्वाइसमेल ल्याइँदै ..."</string>
+ <string name="voicemail_fetching_timout" msgid="6691792377574905201">"भ्वाइसमेल ल्याउन सकेन।"</string>
+ <string name="call_log_voicemail_header" msgid="3945407886667089173">"भ्वाइसमेलका साथ मात्र कल गर्नुहोस्"</string>
+ <string name="call_log_incoming_header" msgid="2787722299753674684">"आगमन कलहरू मात्र"</string>
+ <string name="call_log_outgoing_header" msgid="761009180766735769">"बहिर्गमन कलहरू मात्र"</string>
+ <string name="call_log_missed_header" msgid="8017148056610855956">"छुटेका कलहरू मात्र"</string>
+ <string name="voicemail_status_voicemail_not_available" msgid="3021980206152528883">"भ्वाइसमेल सर्भरसँग जोड्न सक्दैन।"</string>
+ <string name="voicemail_status_messages_waiting" msgid="7113421459602803605">"भ्वाइसमेल सर्भरमा जडान गर्न सकेन। नयाँ भ्वाइसमेलहरू कुर्दै छन्।"</string>
+ <string name="voicemail_status_configure_voicemail" msgid="3738537770636895689">"तपाईँको भ्वाइसमेल मिलाउनुहोस्"</string>
+ <string name="voicemail_status_audio_not_available" msgid="3369618334553341626">"अडियो उपलव्ध छैन।"</string>
+ <string name="voicemail_status_action_configure" msgid="8671796489912239589">"मिलाउनुहोस्"</string>
+ <string name="voicemail_status_action_call_server" msgid="1824816252288551794">"भ्वाइसमेल कल गर्नुहोस्"</string>
+ <string name="voicemail_speed_slowest" msgid="1733460666177707312">"सबभन्दा ढिलो गति"</string>
+ <string name="voicemail_speed_slower" msgid="1508601287347216244">"सुस्त गति"</string>
+ <string name="voicemail_speed_normal" msgid="9033988544627228892">"सामान्य गति"</string>
+ <string name="voicemail_speed_faster" msgid="2019965121475935488">"तेज गति"</string>
+ <string name="voicemail_speed_fastest" msgid="5758712343491183292">"सबभन्दा तेज गति"</string>
+ <string name="call_log_item_count_and_date" msgid="7641933305703520787">"( <xliff:g id="COUNT">%1$d</xliff:g> ) <xliff:g id="DATE">%2$s</xliff:g>"</string>
+ <string name="sms_disambig_title" msgid="5846266399240630846">"नम्बर रोज्नुहोस्"</string>
+ <string name="call_disambig_title" msgid="4392886850104795739">"नम्बर छान्नुहोस्"</string>
+ <string name="make_primary" msgid="5829291915305113983">"यो छनौट याद राख्नुहोस्"</string>
+ <string name="description_image_button_one" msgid="1740638037139856139">"एक"</string>
+ <string name="description_image_button_two" msgid="5882638439003731308">"दुई"</string>
+ <string name="description_image_button_three" msgid="8709731759376015180">"तिन"</string>
+ <string name="description_image_button_four" msgid="3530239685642246130">"चार"</string>
+ <string name="description_image_button_five" msgid="1182465427501188413">"पाँच"</string>
+ <string name="description_image_button_six" msgid="2093656269261415475">"छ"</string>
+ <string name="description_image_button_seven" msgid="2450357020447676481">"सात"</string>
+ <string name="description_image_button_eight" msgid="6969435115163287801">"आठ"</string>
+ <string name="description_image_button_nine" msgid="7857248695662558323">"नौ"</string>
+ <string name="description_image_button_star" msgid="3365919907520767866">"तारा चिन्ह"</string>
+ <string name="description_image_button_zero" msgid="4133108949401820710">"शून्य"</string>
+ <string name="description_image_button_pound" msgid="3039765597595889230">"पाउन्ड"</string>
+ <string name="description_voicemail_button" msgid="3402506823655455591">"भ्वाइसमेल"</string>
+ <string name="description_search_button" msgid="3660807558587384889">"खोजी गर्नुहोस्"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"डायल"</string>
+ <string name="description_delete_button" msgid="6263102114033407382">"ब्याकस्पेस"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"डायल गर्न संख्या"</string>
+ <string name="action_menu_call_history_description" msgid="9018442816219748968">"कल इतिहास"</string>
+ <string name="action_menu_overflow_description" msgid="2303272250613084574">"थप विकल्पहरू"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"डायल प्याड"</string>
+ <string name="menu_copy" msgid="6108677035381940698">"प्रतिलिपि गर्नुहोस्"</string>
+ <string name="menu_show_outgoing_only" msgid="1965570298133301970">"बहिर्गमन मात्र देखाउनुहोस्"</string>
+ <string name="menu_show_incoming_only" msgid="7534206815238877417">"आगमन कल मात्र देखाउनुहोस्"</string>
+ <string name="menu_show_missed_only" msgid="154473166059743996">"छुटेकाहरू मात्र देखाउनुहोस्"</string>
+ <string name="menu_show_voicemails_only" msgid="1898421289561435703">"भ्वाइसमेलहरू मात्र देखाउनुहोस्"</string>
+ <string name="menu_show_all_calls" msgid="7560347482073345885">"सबै कलहरू देखाउनुहोस्"</string>
+ <string name="add_2sec_pause" msgid="9214012315201040129">"२ सेकन्डको रोकाइ थप्नुहोस्"</string>
+ <string name="add_wait" msgid="3360818652790319634">"पर्खाइ थप्नुहोस्"</string>
+ <string name="call_settings" msgid="7666474782093693667">"सेटिङहरू"</string>
+ <string name="menu_newContact" msgid="1209922412763274638">"नयाँ सम्पर्क"</string>
+ <string name="callDetailTitle" msgid="5340227785196217938">"कल विवरण"</string>
+ <string name="toast_call_detail_error" msgid="7200975244804730096">"अनुरोध गरिएको कलको जानकारी पढ्न सकेन।"</string>
+ <string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"स्पर्श टोन किप्याडको प्रयोग गर्नुहोस्"</string>
+ <string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"हुदै गरेको कलमा फर्कनुहोस्"</string>
+ <string name="dialer_addAnotherCall" msgid="4205688819890074468">"कल थप्नुहोस्"</string>
+ <string name="type_incoming" msgid="6502076603836088532">"आगमन कल"</string>
+ <string name="type_outgoing" msgid="343108709599392641">"बहिर्गमन कल"</string>
+ <string name="type_missed" msgid="2720502601640509542">"मिस कल"</string>
+ <string name="type_voicemail" msgid="5153139450668549908">"भ्वाइसमेल"</string>
+ <string name="actionIncomingCall" msgid="6028930669817038600">"आगमन कलहरू"</string>
+ <string name="description_call_log_play_button" msgid="651182125650429846">"भ्वाइसमेल बजाउनुहोस्"</string>
+ <string name="description_call_log_incoming_call" msgid="4485427487637250143">"आगमन कल"</string>
+ <string name="description_call_log_outgoing_call" msgid="604831756853471658">"बहिर्गमन कल"</string>
+ <string name="description_call_log_missed_call" msgid="2242805209983708825">"मिस कल"</string>
+ <string name="description_call_log_voicemail" msgid="4600798771975158948">"भ्वाइसमेल"</string>
+ <string name="description_add_contact" msgid="3103414772502485851">"सम्पर्क थप्नुहोस्"</string>
+ <string name="description_view_contact" msgid="5205669345700598415">"<xliff:g id="NAME">%1$s</xliff:g> सम्पर्क हेर्नुहोस्"</string>
+ <string name="description_call" msgid="3443678121983852666">"कल <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_send_text_message" msgid="7803126439934046891">"<xliff:g id="NAME">%1$s</xliff:g>मा पाठ सन्देश पठाउनुहोस्"</string>
+ <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"नसुनिएका भ्वाइसमेल"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"आवाज खोजी सुरु गर्नुहोस्"</string>
+ <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"<xliff:g id="NUMBER">%s</xliff:g> कल गर्नुहोस्"</string>
+ <string name="unknown" msgid="740067747858270469">"अज्ञात"</string>
+ <string name="voicemail" msgid="3851469869202611441">"भ्वाइसमेल"</string>
+ <string name="private_num" msgid="6374339738119166953">"नीजि नम्बर"</string>
+ <string name="payphone" msgid="4864313342828942922">"भुक्तानी फोन"</string>
+ <string name="dialerKeyboardHintText" msgid="5401660096579787344">"डायल गर्न किबोर्ड प्रयोग गर्नुहोस्"</string>
+ <string name="dialerDialpadHintText" msgid="5824490365898349041">"एउटा कल थप्नका लागि डायल गर्नुहोस्"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> मिनेट <xliff:g id="SECONDS">%s</xliff:g> सेकेन्ड"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"कल गएन"</string>
+ <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"भ्वाइसमेल सेट गर्नका लागि मेनु सेटिङमा जानुहोस्।"</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"भ्वाइसमेल कल गर्नका लागि पहिले हवाइजहाज मोड बन्द गर्नुहोस्।"</string>
+ <string name="contact_list_loading" msgid="5488620820563977329">"लोड हुँदै..."</string>
+ <string name="imei" msgid="3045126336951684285">"IMEI"</string>
+ <string name="meid" msgid="6210568493746275750">"MEID"</string>
+ <string name="simContacts_emptyLoading" msgid="6700035985448642408">"SIM कार्डबाट लोड हुँदै"</string>
+ <string name="simContacts_title" msgid="27341688347689769">"SIM कार्ड सम्पर्कहरू"</string>
+ <string name="add_contact_not_available" msgid="1419207765446461366">"यो सुविधा प्रयोग गर्नका लागि मानिसहरूको अनुप्रयोग पुनःसक्षम गर्नुहोस्।"</string>
+ <string name="dialer_hint_find_contact" msgid="9190419749917566623">"नाम वा फोन टाइप गर्नुहोस्"</string>
+ <string name="call_log_all_title" msgid="3566738938889333307">"सबै"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"छुटेको"</string>
+ <string name="recentMissed_empty" msgid="5427113551557296665">"हालमा छुटेका कुनै कलहरू छैनन्।"</string>
+ <string name="recentVoicemails_empty" msgid="5163114119598014048">"हालको कुनै voicemail हरू छैनन्।"</string>
+ <string name="show_all_contacts" msgid="1732256558071778056">"सबै सम्पर्कहरू देखाउनुहोस्"</string>
+ <string name="show_favorites_only" msgid="5520072531022614595">"मनपर्ने मात्र देखाउनुहोस्"</string>
+ <string name="call_log_activity_title" msgid="4612824396355272023">"इतिहास"</string>
+ <string name="dialpad_0_number" msgid="8859392433961251108">"०"</string>
+ <string name="dialpad_1_number" msgid="6536740525419909212">"१"</string>
+ <string name="dialpad_2_number" msgid="4941546415280852148">"२"</string>
+ <string name="dialpad_3_number" msgid="6539414865185536881">"३"</string>
+ <string name="dialpad_4_number" msgid="979988372051042362">"४"</string>
+ <string name="dialpad_5_number" msgid="5492272478939926734">"५"</string>
+ <string name="dialpad_6_number" msgid="8044579516869379093">"६"</string>
+ <string name="dialpad_7_number" msgid="4175113016564167123">"७"</string>
+ <string name="dialpad_8_number" msgid="7949849563865941621">"८"</string>
+ <string name="dialpad_9_number" msgid="4377059952097526576">"९"</string>
+ <string name="show_all_contacts_title" msgid="8395378484578221791">"सबै सम्पर्कहरू"</string>
+ <string name="show_all_contacts_button_text" msgid="8057452310403090131">"सबै सम्पर्कहरू"</string>
+ <string name="favorite_hidden" msgid="4837366417440391323">"मन पर्नेहरूबाट लुकाइएका"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"अनडु गर्नुहोस्"</string>
+</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index f4a5fd6..5a4b537 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -29,10 +29,10 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Gesprekken wissen"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Voicemail verwijderen"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Voicemail delen"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Gesprekken is leeg"</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Uw oproeplijst is leeg."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Oproeplog wissen?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Al uw oproepgegevens worden verwijderd."</string>
- <string name="clearCallLogProgress_title" msgid="8365943000154295771">"Oproeplogboek wissen..."</string>
+ <string name="clearCallLogProgress_title" msgid="8365943000154295771">"Gesprekkenlijst wissen..."</string>
<plurals name="notification_voicemail_title">
<item quantity="one" msgid="1746619685488504230">"Voicemail"</item>
<item quantity="other" msgid="5513481419205061254">"<xliff:g id="COUNT">%1$d</xliff:g> voicemails"</item>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"In buffer opslaan…"</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Voicemail ophalen…"</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Kan voicemail niet ophalen."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Nieuw"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Ouder"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Alleen oproepen met voicemail"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Alleen inkomende oproepen"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Alleen uitgaande oproepen"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"ster"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"nul"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"hekje"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"voicemail"</string>
<string name="description_search_button" msgid="3660807558587384889">"zoeken"</string>
<string name="description_dial_button" msgid="1274091017188142646">"bellen"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"nummer om te bellen"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Oproepgeschiedenis"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Meer opties"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"toetsenblok"</string>
<string name="menu_copy" msgid="6108677035381940698">"Kopiëren"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Alleen uitgaand weergeven"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Alleen inkomend weergeven"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Alleen gemist weergeven"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Alleen voicemails weergeven"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Alle oproepen weergeven"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Contact toevoegen"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Pauze van 2 seconden toevoegen"</string>
<string name="add_wait" msgid="3360818652790319634">"Wachten toevoegen"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Abonnement selecteren"</string>
<string name="call_settings" msgid="7666474782093693667">"Instellingen"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Nieuw contact"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Alle contacten"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Gespreksgegevens"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Kan geen gegevens over het gevraagde gesprek vinden."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Toetsen voor toonkiezen gebruiken"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Uitgaande oproep"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Gemiste oproep"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Voicemail"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Contact toevoegen"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Contact <xliff:g id="NAME">%1$s</xliff:g> bekijken"</string>
<string name="description_call" msgid="3443678121983852666">"<xliff:g id="NAME">%1$s</xliff:g> bellen"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Contactgegevens voor <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Nieuwe voicemail."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> telefoongesprekken."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Sms verzenden naar <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Niet-beluisterde voicemail"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Gesproken zoekopdracht"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Bel <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Onbekend"</string>
<string name="voicemail" msgid="3851469869202611441">"Voicemail"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Laden vanaf SIM-kaart..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Contacten op SIM-kaart"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Schakel de app \'Personen\' opnieuw in om deze functie te gebruiken."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Typ een naam of telefoon"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Alle"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Gemist"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Geen recente gemiste oproepen."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Geen recente voicemails."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Alle contacten weergeven"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Gesproken zoekopdrachten zijn niet beschikbaar"</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Kan niet bellen omdat de Telefoon-app is uitgeschakeld."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Geen geïnstalleerde activiteit beschikbaar om de geselecteerde actie te verwerken."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Typ een naam of telefoonnummer"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"U heeft geen recente gemiste oproepen."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"U heeft geen recente voicemails."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Alleen favorieten weergeven"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Geschiedenis"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Alle"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Gemist"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Voicemail"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Snelkeuze"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Recent"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Contacten"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Verwijderd uit favorieten"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Ongedaan maken"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Bel <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Toevoegen aan contacten"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Volledige oproepgeschiedenis bekijken"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> nieuwe gemiste oproepen"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Snelkeuze is kiezen met één tik op een toets\nvoor favorieten en nummers\ndie u vaak belt."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"U heeft geen contacten."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Tik op de afbeelding om alle nummers te bekijken of raak deze lang aan om de volgorde van nummers te wijzigen"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Sluiten"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Verwijderen"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ALLE CONTACTEN"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"TERUGBELLEN"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"LUISTEREN"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"DETAILS"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Gemiste oproep van <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Beantwoorde oproep van <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Oproep aan <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> terugbellen"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Voicemail beluisteren van <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Oproepgegevens voor <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Vermelding in gesprekkenlijst verwijderd."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Vandaag"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Gisteren"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Afgelopen week"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Ouder"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Oproeplijst"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Luidspreker inschakelen."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Luidspreker uitschakelen."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Sneller afspelen."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Langzamer afspelen."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Afspelen starten of onderbreken."</string>
</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 044a2b3..d056e3e 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Wyczyść rejestr połączeń"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Usuń pocztę głosową"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Udostępnij pocztę głosową"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Rejestr połączeń jest pusty."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Rejestr połączeń jest pusty."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Usunąć rejestr połączeń?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Wszystkie dane połączeń zostaną usunięte."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Czyszczenie rejestru połączeń…"</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Buforowanie..."</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Pobieranie poczty głosowej..."</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Nie można pobrać poczty głosowej."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Nowe"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Starsze"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Tylko połączenia z pocztą głosową"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Tylko połączenia przychodzące"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Tylko połączenia wychodzące"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"gwiazdka"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"zero"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"funt"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"poczta głosowa"</string>
<string name="description_search_button" msgid="3660807558587384889">"szukaj"</string>
<string name="description_dial_button" msgid="1274091017188142646">"wybierz numer"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"numer do wybrania"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Historia połączeń"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Więcej opcji"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"klawiatura"</string>
<string name="menu_copy" msgid="6108677035381940698">"Kopiuj"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Pokaż tylko wychodzące"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Pokaż tylko przychodzące"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Pokaż tylko nieodebrane"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Pokaż tylko pocztę głosową"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Pokaż wszystkie połączenia"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Dodaj kontakt"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Dodaj 2-sekundową pauzę"</string>
<string name="add_wait" msgid="3360818652790319634">"Dodaj oczekiwanie"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Wybierz subskrypcję"</string>
<string name="call_settings" msgid="7666474782093693667">"Ustawienia"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Nowy kontakt"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Wszystkie kontakty"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Szczegóły połączenia"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Nie można odczytać szczegółów żądanego połączenia."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Użyj klawiatury tonowej"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Połączenie wychodzące"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Nieodebrane połączenie"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Poczta głosowa"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Dodaj kontakt"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Wyświetl kontakt <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Połącz z: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Szczegóły kontaktu: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Nowa poczta głosowa."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"Połączenia: <xliff:g id="NUMBEROFCALLS">%1$s</xliff:g>."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Wyślij SMS do: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Nieodsłuchana poczta głosowa"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"–"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Wyszukiwanie głosowe"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Zadzwoń: <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Nieznane"</string>
<string name="voicemail" msgid="3851469869202611441">"Poczta głosowa"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Wczytywanie z karty SIM…"</string>
<string name="simContacts_title" msgid="27341688347689769">"Kontakty z karty SIM"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Aby korzystać z tej funkcji, włącz ponownie aplikację Kontakty."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Wpisz imię lub telefon"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Wszystkie"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Nieodebrane"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Brak nowych nieodebranych połączeń."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Brak nowej poczty głosowej."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Pokaż wszystkie kontakty"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Wyszukiwanie głosowe jest niedostępne."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Nie można zadzwonić, ponieważ aplikacja Telefon została wyłączona."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Brak zainstalowanej aplikacji wykonującej wybrane działanie."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Wpisz nazwisko/numer telefonu"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Nie masz nowych nieodebranych połączeń."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Nie masz nowej poczty głosowej."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Pokaż tylko ulubione"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Historia"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Wszystkie"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Nieodebrane"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Poczta gł."</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Szybkie wybieranie"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Niedawne"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Kontakty"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Usunięto z ulubionych"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Cofnij"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Zadzwoń: <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Dodaj do kontaktów"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Wyświetl pełną historię połączeń"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"Nowe nieodebrane połączenia: <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Używając szybkiego wybierania,\nmożesz jednym dotknięciem dzwonić\ndo ulubionych kontaktów i pod często wybierane numery."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Nie masz żadnych kontaktów."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Kliknij zdjęcie, by zobaczyć wszystkie numery, lub kliknij je i przytrzymaj, by zmienić kolejność"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Zamknij"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Usuń"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"WSZYSTKIE KONTAKTY"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"ODDZWOŃ"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"POSŁUCHAJ"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"SZCZEGÓŁY"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Nieodebrane połączenie od: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Odebrane połączenie od: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Połączenie wychodzące z: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Oddzwoń do: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Posłuchaj wiadomości głosowej od: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Szczegóły połączeń: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Wpis dziennika połączeń został usunięty."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Dzisiaj"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Wczoraj"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Ostatni tydzień"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Starsze"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Lista połączeń"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Włącz głośnik."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Wyłącz głośnik."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Odtwarzaj szybciej."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Odtwarzaj wolniej."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Rozpocznij lub wstrzymaj odtwarzanie."</string>
</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 7899671..08fb541 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -29,8 +29,8 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Limpar registo de chamadas"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Eliminar correio de voz"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Partilhar correio de voz"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"O registo de chamadas está vazio."</string>
- <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Limpar reg. de cham.?"</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"O seu registo de chamadas está vazio."</string>
+ <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Limpar registo de chamadas?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Todos os registos de chamadas serão eliminados."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"A limpar registo de chamadas..."</string>
<plurals name="notification_voicemail_title">
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"A colocar na memória intermédia..."</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"A obter correio de voz..."</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Não foi possível obter correio de voz."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Novo"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"+ antigo"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Apenas chamadas com correio de voz"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Apenas chamadas recebidas"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Apenas chamadas efetuadas"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"estrela"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"zero"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"libra"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"correio de voz"</string>
<string name="description_search_button" msgid="3660807558587384889">"pesquisar"</string>
<string name="description_dial_button" msgid="1274091017188142646">"marcar"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"retrocesso"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"número a marcar"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Histórico de Chamadas"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Mais opções"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"teclado"</string>
<string name="menu_copy" msgid="6108677035381940698">"Copiar"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Mostrar apenas cham. efetuadas"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Mostrar apenas cham. recebidas"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Mostrar apenas cham. n. atend."</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Mostrar apenas msgs corr. voz"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Mostrar todas as chamadas"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Adicionar contacto"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Adicionar pausa de 2 seg."</string>
<string name="add_wait" msgid="3360818652790319634">"Adicionar espera"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Selecionar subscrição"</string>
<string name="call_settings" msgid="7666474782093693667">"Definições"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Novo contacto"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Todos os contactos"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Detalhes da chamada"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Não foi possível ler os detalhes da chamada solicitada."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Utilizar teclado numérico com tons de toque"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Chamada efetuada"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Chamada não atendida"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Correio de voz"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Adicionar contacto"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Ver o contacto <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Ligar a <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Detalhes de contacto para <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Novo correio de voz."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> chamadas."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Enviar mensagem de texto para <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Mensagem de correio de voz ainda não ouvida"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Iniciar pesquisa por voz"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Telefonar para <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Desconhecido"</string>
<string name="voicemail" msgid="3851469869202611441">"Correio de voz"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"A carregar a partir do cartão SIM..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Contactos no cartão SIM"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Reative a aplicação Pessoas para utilizar esta funcionalidade."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Introduzir nome/telemóvel"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Todos"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Não atend."</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Não existem chamadas não atendidas recentes."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Não existe correio de voz recente."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Mostrar todos os contactos"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"A pesquisa por voz não está disponível."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Não é possível efetuar uma chamada porque a aplicação Telefone foi desativada."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Não existe qualquer atividade instalada disponível para processar a ação selecionada."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Introduzir nome ou n.º telef."</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Não existem chamadas não atendidas recentes."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Não existem mensagens de correio de voz recentes."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Mostrar apenas os favoritos"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Histórico"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Todos"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Não atendidas"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Corr. Voz"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Marcação rápida"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Recentes"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Contactos"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Removido dos favoritos"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Anular"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Telefonar para <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Adicionar aos contactos"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Ver histórico de chamadas completo"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> chamadas não atendidas novas"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"A marcação rápida diz respeito à marcação com um único toque\npara favoritos e números\n que utiliza com frequência."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Não tem contactos."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Toque na imagem para ver todos os números ou prima sem soltar para reordenar"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Ignorar"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Remover"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"TODOS OS CONTACTOS"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"TELEFONAR DE VOLTA"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"OUVIR"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"DETALHES"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Chamada não atendida de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Chamada atendida de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Chamada para <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Telefonar de volta para <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Ouvir o correio de voz de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Detalhes de chamadas de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Entrada eliminada do registo de chamadas."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Hoje"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Ontem"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Última semana"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Mais antigas"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Lista de chamadas"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Ligar altifalante."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Desligar altifalante"</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Reproduzir mais rápido."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Reproduzir mais lento."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Iniciar ou interromper a reprodução."</string>
</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index f5b88f3..d21097b 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Limpar registro de chamadas"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Excluir correio de voz"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Compartilhar correio de voz"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"O registro de chamadas está vazio."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Seu registo de chamadas está vazio."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Limpar registro de chamadas?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Todos os registros de chamada serão eliminados."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Limpando o registro de chamadas..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Armazenar em buffer…"</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Buscando o correio de voz…"</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Não foi possível obter o correio de voz."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Novas"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Antigas"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Somente chamadas com correio de voz"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Somente chamadas recebidas"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Somente chamadas de saída"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"estrela"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"zero"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"libra"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"correio de voz"</string>
<string name="description_search_button" msgid="3660807558587384889">"pesquisar"</string>
<string name="description_dial_button" msgid="1274091017188142646">"discar"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"número para discagem"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Histórico de chamadas"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Mais opções"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"teclado numérico"</string>
<string name="menu_copy" msgid="6108677035381940698">"Copiar"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Mostrar apenas enviadas"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Mostrar apenas recebidas"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Mostrar apenas perdidas"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Exibir apenas mensagens de voz"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Mostrar todas as chamadas"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Adicionar contato"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Adicionar pausa de 2 segundos"</string>
<string name="add_wait" msgid="3360818652790319634">"Adicionar espera"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Selecionar cartão SIM"</string>
<string name="call_settings" msgid="7666474782093693667">"Configurações"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Novo contato"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Todos os contatos"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Detalhes da chamada"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Não foi possível ler os detalhes para a chamada solicitada."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Usar teclado multifrequencial"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Chamada realizada"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Chamada perdida"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Mensagem de voz"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Adicionar contato"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Visualizar contato <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Ligar para <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Detalhes de contato para <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Nova mensagem de voz."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> chamadas."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Enviar mensagem de texto para <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Nova mensagem de voz"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Iniciar pesquisa por voz"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Ligar para <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Desconhecido"</string>
<string name="voicemail" msgid="3851469869202611441">"Correio de voz"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Carregando do cartão SIM..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Contatos do cartão SIM"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Reative o aplicativo Pessoas para usar este recurso."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Digite o número/telefone"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Tudo"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Perdidas"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Nenhuma chamada perdida recente."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Nenhuma mensagem de voz recente."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Mostrar todos os contatos"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"A pesquisa por voz não está disponível."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Não é possível fazer uma chamada porque o aplicativo Telefone foi desativado."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Nenhuma atividade instalada disponível para a ação selecionada."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Digite um nome ou telefone"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Você não tem chamadas perdidas recentes."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Você não tem correios de voz recentes."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Mostrar somente favoritos"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Histórico"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Tudo"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Perdidas"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Correio de voz"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Discagem rápida"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Recentes"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Contatos"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Removido dos favoritos"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Desfazer"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Ligar para <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Adicionar aos contatos"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Ver todo o histórico de chamadas"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> novas chamadas perdidas"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"A discagem rápida é uma discagem por um toque\npara favoritos e números\nusados com frequência."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Você não tem contatos."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Toque na imagem para ver todos os números ou pressione e segure para reordenar"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Descartar"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Remover"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"TODOS OS CONTATOS"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"RETORNAR CHAMADA"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"OUVIR"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"DETALHES"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Chamada perdida de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Chamada atendida de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Chamada para <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Retornar chamada de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Ouvir mensagem de voz de <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Detalhes de chamada para <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Entrada do registro de chamadas excluída."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Hoje"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Ontem"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Última semana"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Antiga"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Lista de chamadas"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Ative o alto-falante."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Desative o alto-falante."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Reprodução mais rápida."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Reprodução mais lenta."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Inicie ou pause a reprodução."</string>
</resources>
diff --git a/res/values-rm/strings.xml b/res/values-rm/strings.xml
index 0681c51..505f0cb 100644
--- a/res/values-rm/strings.xml
+++ b/res/values-rm/strings.xml
@@ -32,7 +32,8 @@
<skip />
<!-- no translation found for recentCalls_shareVoicemail (1416112847592942840) -->
<skip />
- <string name="recentCalls_empty" msgid="247053222448663107">"La glista da cloms e vida"</string>
+ <!-- no translation found for recentCalls_empty (7711926651216108723) -->
+ <skip />
<!-- no translation found for clearCallLogConfirmation_title (6427524640461816332) -->
<skip />
<!-- no translation found for clearCallLogConfirmation (5043563133171583152) -->
@@ -55,10 +56,6 @@
<skip />
<!-- no translation found for voicemail_fetching_timout (6691792377574905201) -->
<skip />
- <!-- no translation found for call_log_new_header (846546437517724715) -->
- <skip />
- <!-- no translation found for call_log_old_header (6262205894314263629) -->
- <skip />
<!-- no translation found for call_log_voicemail_header (3945407886667089173) -->
<skip />
<!-- no translation found for call_log_incoming_header (2787722299753674684) -->
@@ -108,17 +105,17 @@
<string name="description_image_button_star" msgid="3365919907520767866">"staila"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"nulla"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"glivra"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"Mailbox"</string>
<!-- no translation found for description_search_button (3660807558587384889) -->
<skip />
<string name="description_dial_button" msgid="1274091017188142646">"cumponer"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"tasta da return"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"numer da cumponer"</string>
<!-- no translation found for action_menu_call_history_description (9018442816219748968) -->
<skip />
<!-- no translation found for action_menu_overflow_description (2303272250613084574) -->
<!-- no translation found for action_menu_overflow_description (2295659037509008453) -->
<skip />
+ <!-- no translation found for action_menu_dialpad_button (1425910318049008136) -->
+ <skip />
<!-- no translation found for menu_copy (6108677035381940698) -->
<skip />
<!-- no translation found for menu_show_outgoing_only (1965570298133301970) -->
@@ -131,11 +128,17 @@
<skip />
<!-- no translation found for menu_show_all_calls (7560347482073345885) -->
<skip />
+ <!-- no translation found for add_contact (8875804371377471164) -->
+ <skip />
<string name="add_2sec_pause" msgid="9214012315201040129">"Agiuntar ina pausa da 2 secundas"</string>
<string name="add_wait" msgid="3360818652790319634">"Agiuntar Spetgar"</string>
+ <!-- no translation found for menu_select_subscription (363190251770943468) -->
+ <skip />
<!-- no translation found for call_settings (7666474782093693667) -->
<skip />
<string name="menu_newContact" msgid="1209922412763274638">"Nov contact"</string>
+ <!-- no translation found for menu_allContacts (6948308384034051670) -->
+ <skip />
<string name="callDetailTitle" msgid="5340227785196217938">"Detagls dal clom"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Impussibel da leger ils detagls dal clom dumandà."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Utilisar la tastatura dal telefon"</string>
@@ -157,20 +160,22 @@
<skip />
<!-- no translation found for description_call_log_voicemail (4600798771975158948) -->
<skip />
- <!-- no translation found for description_add_contact (3103414772502485851) -->
- <skip />
<!-- no translation found for description_view_contact (5205669345700598415) -->
<skip />
<!-- no translation found for description_call (3443678121983852666) -->
<skip />
+ <!-- no translation found for description_contact_details (51229793651342809) -->
+ <skip />
+ <!-- no translation found for description_new_voicemail (2133792360865517746) -->
+ <skip />
+ <!-- no translation found for description_num_calls (1601505153694540074) -->
+ <skip />
<!-- no translation found for description_send_text_message (7803126439934046891) -->
<skip />
<!-- no translation found for description_call_log_unheard_voicemail (118101684236996786) -->
<skip />
<!-- no translation found for description_start_voice_search (520539488194946012) -->
<skip />
- <!-- no translation found for call_log_empty_gecode (5588904744812100846) -->
- <skip />
<!-- no translation found for menu_callNumber (997146291983360266) -->
<skip />
<string name="unknown" msgid="740067747858270469">"Nunenconuschent"</string>
@@ -193,28 +198,96 @@
<string name="simContacts_title" msgid="27341688347689769">"Contacts sin la carta SIM"</string>
<!-- no translation found for add_contact_not_available (1419207765446461366) -->
<skip />
- <!-- no translation found for dialer_hint_find_contact (9190419749917566623) -->
+ <!-- no translation found for voice_search_not_available (7580616740587850828) -->
<skip />
- <!-- no translation found for call_log_all_title (3566738938889333307) -->
+ <!-- no translation found for call_not_available (8941576511946492225) -->
<skip />
- <!-- no translation found for call_log_missed_title (4541142293870638971) -->
+ <!-- no translation found for activity_not_available (8265265380537872585) -->
<skip />
- <!-- no translation found for recentMissed_empty (5427113551557296665) -->
+ <!-- no translation found for dialer_hint_find_contact (8798845521253672403) -->
<skip />
- <!-- no translation found for recentVoicemails_empty (5163114119598014048) -->
+ <!-- no translation found for recentMissed_empty (4177320482947526015) -->
<skip />
- <!-- no translation found for show_all_contacts (1732256558071778056) -->
+ <!-- no translation found for recentVoicemails_empty (4905583746647459963) -->
<skip />
<!-- no translation found for show_favorites_only (5520072531022614595) -->
<skip />
<!-- no translation found for call_log_activity_title (4612824396355272023) -->
<skip />
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
+ <!-- no translation found for call_log_all_title (3566738938889333307) -->
<skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
+ <!-- no translation found for call_log_missed_title (4541142293870638971) -->
<skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
+ <!-- no translation found for call_log_voicemail_title (940422274047025948) -->
+ <skip />
+ <!-- no translation found for tab_speed_dial (7807567599021643864) -->
+ <skip />
+ <!-- no translation found for tab_recents (929949073851377206) -->
+ <skip />
+ <!-- no translation found for tab_all_contacts (1410922767166533690) -->
+ <skip />
+ <!-- no translation found for favorite_hidden (5011234945140912047) -->
<skip />
<!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
<skip />
+ <!-- no translation found for search_shortcut_call_number (7277194656832895870) -->
+ <skip />
+ <!-- no translation found for search_shortcut_add_to_contacts (1853716708655789069) -->
+ <skip />
+ <!-- no translation found for recents_footer_text (7315554578957453359) -->
+ <skip />
+ <!-- no translation found for num_missed_calls (8081736535604293886) -->
+ <skip />
+ <!-- no translation found for speed_dial_empty (5476435149276295630) -->
+ <skip />
+ <!-- no translation found for all_contacts_empty (4536082452651392894) -->
+ <skip />
+ <!-- no translation found for contact_tooltip (7817483485692282287) -->
+ <skip />
+ <!-- no translation found for description_dismiss (2146276780562549643) -->
+ <skip />
+ <!-- no translation found for remove_contact (1080555335283662961) -->
+ <skip />
+ <!-- no translation found for favorites_menu_all_contacts (992506284449891186) -->
+ <skip />
+ <!-- no translation found for call_log_action_call_back (4944463006859852473) -->
+ <skip />
+ <!-- no translation found for call_log_action_voicemail (4978620572562925654) -->
+ <skip />
+ <!-- no translation found for call_log_action_details (6252596497021563115) -->
+ <skip />
+ <!-- no translation found for description_incoming_missed_call (2610535352863246949) -->
+ <skip />
+ <!-- no translation found for description_incoming_answered_call (7206670204016969740) -->
+ <skip />
+ <!-- no translation found for description_outgoing_call (3964211633673659733) -->
+ <skip />
+ <!-- no translation found for description_call_back_action (3012837380108884260) -->
+ <skip />
+ <!-- no translation found for description_voicemail_action (8054891873788903063) -->
+ <skip />
+ <!-- no translation found for description_details_action (2433827152749491785) -->
+ <skip />
+ <!-- no translation found for toast_entry_removed (3389119736202317999) -->
+ <skip />
+ <!-- no translation found for call_log_header_today (3225248682434212981) -->
+ <skip />
+ <!-- no translation found for call_log_header_yesterday (9139172458834033092) -->
+ <skip />
+ <!-- no translation found for call_log_header_last_week (5197040511028258038) -->
+ <skip />
+ <!-- no translation found for call_log_header_other (5769921959940709084) -->
+ <skip />
+ <!-- no translation found for call_detail_list_header (866455969433213220) -->
+ <skip />
+ <!-- no translation found for voicemail_speaker_on (209154030283487068) -->
+ <skip />
+ <!-- no translation found for voicemail_speaker_off (7390530056413093958) -->
+ <skip />
+ <!-- no translation found for voicemail_play_faster (3444751008615323006) -->
+ <skip />
+ <!-- no translation found for voicemail_play_slower (4544796503902818832) -->
+ <skip />
+ <!-- no translation found for voicemail_play_start_pause (3687447935787768983) -->
+ <skip />
</resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 3f09024..0b1f3b0 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Ștergeţi jurnalul de apeluri"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Ștergeţi mesajul vocal"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Distribuiţi mesajul vocal"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Jurnalul de apeluri este gol."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Jurnalul de apeluri este gol."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Ștergeţi apelurile?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Toate înregistrările apelurilor dvs. vor fi şterse."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Se goleşte jurnalul de apeluri..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Se utilizează memoria tampon..."</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Se preia mesajul vocal..."</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Nu s-a putut prelua mesajul vocal."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Noi"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Mai vechi"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Numai apelurile cu mesaje vocale"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Numai apelurile primite"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Numai apelurile efectuate"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"stea"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"zero"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"clar"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"Mesaj vocal"</string>
<string name="description_search_button" msgid="3660807558587384889">"căutare"</string>
<string name="description_dial_button" msgid="1274091017188142646">"apelaţi"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"tasta backspace"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"numărul de apelat"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Istoricul apelurilor"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Mai multe opţiuni"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"tastatură numerică"</string>
<string name="menu_copy" msgid="6108677035381940698">"Copiaţi"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Numai apelurile efectuate"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Numai apelurile primite"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Numai apelurile nepreluate"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Afişaţi numai mesajele vocale"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Afişaţi toate apelurile"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Adăugați o persoană de contact"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Pauză 2 secunde"</string>
<string name="add_wait" msgid="3360818652790319634">"Adăugaţi interval de aşteptare"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Selectați abonamentul"</string>
<string name="call_settings" msgid="7666474782093693667">"Setări"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Persoană nouă în agendă"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Toată agenda"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Detaliile apelului"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Nu se pot citi detaliile pentru apelul solicitat."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Utilizaţi tastatura DTMF"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Apel de ieşire"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Apel nepreluat"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Mesaj vocal"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Adăugaţi o persoană în agendă"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Afişaţi persoana din agendă <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Apelaţi pe <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Detalii de contact pentru <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Mesaj vocal nou."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> (de) apeluri."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Trimiteţi un mesaj text către <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Mesaje vocale neascultate"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Începeţi căutarea vocală"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Apelaţi <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Necunoscut"</string>
<string name="voicemail" msgid="3851469869202611441">"Mesagerie vocală"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Se încarcă de pe cardul SIM..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Persoanele din agendă de pe cardul SIM"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Pentru a utiliza această funcție, reactivați aplicația Persoane."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Introd. nume sau nr. tel."</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Toate"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Nepreluate"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Nu există apeluri nepreluate recente."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Nu există mesaje vocale recente."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Afișați toate persoanele de contact"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Funcția Căutare vocală nu este disponibilă."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Nu se poate efectua un apel telefonic, deoarece aplicația Telefon a fost dezactivată."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Nu este disponibilă nicio aplicație instalată pentru efectuarea acțiunii selectate."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Introd. nume sau nr. telefon"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Niciun apel nepreluat recent."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Niciun mesaj vocal recent."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Afișați numai preferate"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Istoric"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Toate"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Nepreluate"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Mes. vocal"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Apelare rapidă"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Recente"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Agendă"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"S-a eliminat din preferate"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Anulați"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Apelați <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Adăugați în Agendă"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Vedeți istoricul complet al apelurilor"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> (de) apeluri nepreluate noi"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Cu funcția Apelare rapidă puteți forma, cu o singură atingere, \nnumerele preferate și cele\n pe care le apelați frecvent."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Nu aveți nicio persoană de contact."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Atingeți imaginea pentru a vedea toate numerele sau apăsați și țineți apăsat pentru a reordona"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Închideți"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Eliminați"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"TOATĂ AGENDA"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"SUNAȚI"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"ASCULTAȚI"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"DETALII"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Apel pierdut de la <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Apel preluat de la <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Sunați la <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Sunați <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Ascultați mesajul vocal de la <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Detaliile apelului pentru <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Intrarea din jurnalul de apeluri a fost ștearsă."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Astăzi"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Ieri"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Săptămâna trecută"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Mai vechi"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Lista de apeluri"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Porniți difuzorul."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Opriți difuzorul."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Jucați mai repede."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Jucați mai lent."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Porniți sau întrerupeți redarea."</string>
</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index a70b5c3..9696bb2 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Очистить список"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Удалить голосовое сообщение"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Поделиться"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Список вызовов пуст."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Список вызовов пуст."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Удаление данных"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Журнал звонков будет очищен."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Очистка списка вызовов..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Буферизация..."</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Получение голосовой почты..."</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Не удалось получить голосовую почту."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Новые"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Раньше"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Только звонки с голосовой почтой"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Только входящие звонки"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Только исходящие звонки"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"пометить"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"нуль"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"решетка"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"голосовая почта"</string>
<string name="description_search_button" msgid="3660807558587384889">"поиск"</string>
<string name="description_dial_button" msgid="1274091017188142646">"набор номера"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"удаление последнего символа"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"набираемый номер"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"История вызовов"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Ещё"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"Панель набора номера"</string>
<string name="menu_copy" msgid="6108677035381940698">"Копировать"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Исходящие"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Входящие"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Пропущенные"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Показать голосовые сообщения"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Все вызовы"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Добавить в контакты"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Добавить двухсекундную паузу"</string>
<string name="add_wait" msgid="3360818652790319634">"Добавить паузу"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Выбрать SIM-карту"</string>
<string name="call_settings" msgid="7666474782093693667">"Настройки"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Новый контакт"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Все контакты"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Сведения о вызове"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Не удается получить сведения о вызове."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Использовать тональный набор"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Исходящий вызов"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Пропущенный вызов"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Голосовая почта"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Добавить контакт"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Просмотреть данные: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Позвонить: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Сведения о контакте <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Новое голосовое сообщение."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"Вызовов: <xliff:g id="NUMBEROFCALLS">%1$s</xliff:g>."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Отправить текстовое сообщение: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Непрослушанные сообщения голосовой почты"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Начать голосовой поиск"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Позвонить: <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Неизвестно"</string>
<string name="voicemail" msgid="3851469869202611441">"Голосовая почта"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Загрузка с SIM-карты…"</string>
<string name="simContacts_title" msgid="27341688347689769">"Контакты на SIM-карте"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Чтобы использовать эту функцию, включите приложение \"Контакты\"."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Имя или номер телефона"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Все"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Пропущенные"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Нет пропущенных звонков"</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Нет новых голосовых сообщений"</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Все контакты"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Голосовой поиск недоступен"</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Нельзя совершать телефонные звонки, поскольку приложение \"Телефон\" отключено."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"На устройстве нет приложения для этого действия."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Введите имя или номер телефона"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Пропущенных вызовов нет."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Сообщений голосовой почты нет."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Только часто используемые"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"История"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Все"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Пропущенные"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Г. почта"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Быстрый набор"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Недавние"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Контакты"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Контакт удален из избранных"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Отмена"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Позвонить: <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Добавить в контакты"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Посмотреть весь журнал звонков"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"Пропущенных вызовов: <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Быстрый набор позволяет звонить\nна избранные и часто используемые номера\n, нажимая всего одну кнопку."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Контактов нет."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Нажмите на фото, чтобы посмотреть информацию о контакте. Чтобы переставить контакт в списке, нажмите на него и передвиньте на нужное место."</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Закрыть"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Удалить"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ВСЕ КОНТАКТЫ"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"ВЫЗОВ"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"ПРОСЛУШАТЬ"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"ПОДРОБНЕЕ"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Пропущен вызов от контакта <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>. <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Принят вызов от контакта <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>. <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Звонок контакту <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>. <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Перезвонить контакту <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>."</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Прослушать сообщение от контакта <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>."</string>
+ <string name="description_details_action" msgid="2433827152749491785">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> – сведения о вызове"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Запись удалена"</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Сегодня"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Вчера"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Прошлая неделя"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Предыдущие записи"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Вызовы"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Включить динамик."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Выключить динамик."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Увеличить скорость воспроизведения."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Уменьшить скорость воспроизведения."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Начать или приостановить воспроизведение."</string>
</resources>
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml
new file mode 100644
index 0000000..721ab62
--- /dev/null
+++ b/res/values-si-rLK/strings.xml
@@ -0,0 +1,160 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="8490255569343340580">"අංකිත මුහුණ"</string>
+ <string name="launcherDialer" msgid="8636288196618486553">"දුරකථනය"</string>
+ <string name="dialerIconLabel" msgid="6500826552823403796">"දුරකථනය"</string>
+ <string name="recentCallsIconLabel" msgid="1419116422359067949">"ඇමතුම් ලොගය"</string>
+ <string name="menu_sendTextMessage" msgid="6937343460284499306">"කෙටි පණිවිඩය යවන්න"</string>
+ <string name="recentCalls_callNumber" msgid="1756372533999226126">"<xliff:g id="NAME">%s</xliff:g> අමතන්න"</string>
+ <string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"ඇමතීමට කලින් අංකය වෙනස් කරන්න"</string>
+ <string name="recentCalls_addToContact" msgid="1429899535546487008">"සම්බන්ධතා වලට එක් කරන්න"</string>
+ <string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"ඇමතුම් ලොගයෙන් ඉවත් කරන්න"</string>
+ <string name="recentCalls_deleteAll" msgid="6352364392762163704">"ඇමතුම් ලොගය හිස් කරන්න"</string>
+ <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"හඬ තැපෑල මකන්න"</string>
+ <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"හඬ තැපෑල බෙදාගන්න"</string>
+ <string name="recentCalls_empty" msgid="247053222448663107">"ඇමතුම් ලොගය හිස් ය."</string>
+ <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"ඇමතුම් ලොගය හිස් කරන්නද?"</string>
+ <string name="clearCallLogConfirmation" msgid="5043563133171583152">"ඔබගේ සියලුම ඇමතුම් වාර්තා මකා දැමෙනු ඇත."</string>
+ <string name="clearCallLogProgress_title" msgid="8365943000154295771">"ඇමතුම් ලොගය හිස් කරමින්…"</string>
+ <plurals name="notification_voicemail_title">
+ <item quantity="one" msgid="1746619685488504230">"හඬ තැපෑල"</item>
+ <item quantity="other" msgid="5513481419205061254">"හඬ තැපැල් <xliff:g id="COUNT">%1$d</xliff:g>"</item>
+ </plurals>
+ <string name="notification_action_voicemail_play" msgid="6113133136977996863">"ධාවනය කරන්න"</string>
+ <string name="notification_voicemail_callers_list" msgid="1153954809339404149">"<xliff:g id="NEWER_CALLERS">%1$s</xliff:g>, <xliff:g id="OLDER_CALLER">%2$s</xliff:g>"</string>
+ <string name="notification_new_voicemail_ticker" msgid="895342132049452081">"<xliff:g id="CALLER">%1$s</xliff:g> වෙතින් නව හඬ තැපැලක්"</string>
+ <string name="voicemail_playback_error" msgid="1811242131549854624">"හඬ තැපෑල ධාවනය කළ නොහැක."</string>
+ <string name="voicemail_buffering" msgid="738287747618697097">"අන්තරාචයනය වෙමින්..."</string>
+ <string name="voicemail_fetching_content" msgid="877911315738258780">"හඬ තැපැල් ලබාගනිමින්..."</string>
+ <string name="voicemail_fetching_timout" msgid="6691792377574905201">"හඬ තැපෑල ලබාගැනීමට නොහැකි විය."</string>
+ <string name="call_log_voicemail_header" msgid="3945407886667089173">"හඬ තැපෑල සහිත ඇමතුම් පමණි"</string>
+ <string name="call_log_incoming_header" msgid="2787722299753674684">"එන ඇමතුම් පමණි"</string>
+ <string name="call_log_outgoing_header" msgid="761009180766735769">"පිටතට යන ඇමතුම් පමණි"</string>
+ <string name="call_log_missed_header" msgid="8017148056610855956">"මඟ හැරුණු ඇමතුම් පමණි"</string>
+ <string name="voicemail_status_voicemail_not_available" msgid="3021980206152528883">"හඬ තැපැල් සේවාදායකය වෙත සම්බන්ධ විය නොහැක."</string>
+ <string name="voicemail_status_messages_waiting" msgid="7113421459602803605">"හඬ තැපැල් සේවාදායකය වෙත සම්බන්ධ විය නොහැක. නව හඬ තැපැල් රැඳී සිටී."</string>
+ <string name="voicemail_status_configure_voicemail" msgid="3738537770636895689">"ඔබගේ හඬ තැපැල් සකසා ගන්න."</string>
+ <string name="voicemail_status_audio_not_available" msgid="3369618334553341626">"ශබ්ද ලද නොහැක."</string>
+ <string name="voicemail_status_action_configure" msgid="8671796489912239589">"ස්ථාපනය කරන්න"</string>
+ <string name="voicemail_status_action_call_server" msgid="1824816252288551794">"හඬ තැපැල් අමතන්න"</string>
+ <string name="voicemail_speed_slowest" msgid="1733460666177707312">"ඉතාමත් මන්දගාමී වේගය"</string>
+ <string name="voicemail_speed_slower" msgid="1508601287347216244">"මන්දගාමී වේගය"</string>
+ <string name="voicemail_speed_normal" msgid="9033988544627228892">"සාමාන්ය වේගය"</string>
+ <string name="voicemail_speed_faster" msgid="2019965121475935488">"ඉතා වේගවත්"</string>
+ <string name="voicemail_speed_fastest" msgid="5758712343491183292">"ඉතාමත් වේගවත්"</string>
+ <string name="call_log_item_count_and_date" msgid="7641933305703520787">"(<xliff:g id="COUNT">%1$d</xliff:g>) <xliff:g id="DATE">%2$s</xliff:g>"</string>
+ <string name="sms_disambig_title" msgid="5846266399240630846">"අංකය තෝරන්න"</string>
+ <string name="call_disambig_title" msgid="4392886850104795739">"අංකය තෝරන්න"</string>
+ <string name="make_primary" msgid="5829291915305113983">"මෙම තේරීම මතක තබාගන්න"</string>
+ <string name="description_image_button_one" msgid="1740638037139856139">"එක"</string>
+ <string name="description_image_button_two" msgid="5882638439003731308">"දෙක"</string>
+ <string name="description_image_button_three" msgid="8709731759376015180">"තුන"</string>
+ <string name="description_image_button_four" msgid="3530239685642246130">"හතර"</string>
+ <string name="description_image_button_five" msgid="1182465427501188413">"පහ"</string>
+ <string name="description_image_button_six" msgid="2093656269261415475">"හය"</string>
+ <string name="description_image_button_seven" msgid="2450357020447676481">"හත"</string>
+ <string name="description_image_button_eight" msgid="6969435115163287801">"අට"</string>
+ <string name="description_image_button_nine" msgid="7857248695662558323">"නවය"</string>
+ <string name="description_image_button_star" msgid="3365919907520767866">"තරුව"</string>
+ <string name="description_image_button_zero" msgid="4133108949401820710">"බිංදුව"</string>
+ <string name="description_image_button_pound" msgid="3039765597595889230">"හෑෂ්"</string>
+ <string name="description_voicemail_button" msgid="3402506823655455591">"හඬ තැපෑල"</string>
+ <string name="description_search_button" msgid="3660807558587384889">"සෙවීම"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"අමතන්න"</string>
+ <string name="description_delete_button" msgid="6263102114033407382">"බැක්ස්පේස්"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"ඇමතීමට අංකය"</string>
+ <string name="action_menu_call_history_description" msgid="9018442816219748968">"ඇමතුම් ඉතිහාසය"</string>
+ <string name="action_menu_overflow_description" msgid="2303272250613084574">"තවත් විකල්ප"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"ඩයල් පෑඩය"</string>
+ <string name="menu_copy" msgid="6108677035381940698">"පිටපත්කරණය"</string>
+ <string name="menu_show_outgoing_only" msgid="1965570298133301970">"පිටතට යන ඒවා පමණක් පෙන්වන්න"</string>
+ <string name="menu_show_incoming_only" msgid="7534206815238877417">"එන ඒවා පමණක් පෙන්වන්න"</string>
+ <string name="menu_show_missed_only" msgid="154473166059743996">"මඟ හැරුණු ඒවා පමණක් පෙන්වන්න"</string>
+ <string name="menu_show_voicemails_only" msgid="1898421289561435703">"හඬ තැපැල් පමණක් පෙන්වන්න"</string>
+ <string name="menu_show_all_calls" msgid="7560347482073345885">"සියලු ඇමතුම් පෙන්වන්න"</string>
+ <string name="add_2sec_pause" msgid="9214012315201040129">"තත්පර 2 ක විරාමයක් එක් කරන්න"</string>
+ <string name="add_wait" msgid="3360818652790319634">"රැඳී සිටීම එක් කරන්න"</string>
+ <string name="call_settings" msgid="7666474782093693667">"සැකසුම්"</string>
+ <string name="menu_newContact" msgid="1209922412763274638">"නව සම්බන්ධතාවයක්"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"සියලුම සම්බන්ධතා"</string>
+ <string name="callDetailTitle" msgid="5340227785196217938">"ඇමතුම් විස්තර"</string>
+ <string name="toast_call_detail_error" msgid="7200975244804730096">"අයැදුම් කළ ඇමතුම සඳහා විස්තර කියවිය නොහැකි විය."</string>
+ <string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"ස්පර්ශ නාද යතුරුපෑඩය භාවිතා කරන්න"</string>
+ <string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"පවතින ඇමතුමට නැවත යන්න"</string>
+ <string name="dialer_addAnotherCall" msgid="4205688819890074468">"ඇමතුමක් එක් කරන්න"</string>
+ <string name="type_incoming" msgid="6502076603836088532">"එන ඇමතුම"</string>
+ <string name="type_outgoing" msgid="343108709599392641">"පිටතට යන ඇමතුම"</string>
+ <string name="type_missed" msgid="2720502601640509542">"මඟ හැරුණු ඇමතුම"</string>
+ <string name="type_voicemail" msgid="5153139450668549908">"හඬ තැපෑල"</string>
+ <string name="actionIncomingCall" msgid="6028930669817038600">"එන ඇමතුම්"</string>
+ <string name="description_call_log_play_button" msgid="651182125650429846">"හඬ තැපෑල ධාවනය කිරීම"</string>
+ <string name="description_call_log_incoming_call" msgid="4485427487637250143">"එන ඇමතුම"</string>
+ <string name="description_call_log_outgoing_call" msgid="604831756853471658">"පිටතට යන ඇමතුම"</string>
+ <string name="description_call_log_missed_call" msgid="2242805209983708825">"මඟ හැරුණු ඇමතුම"</string>
+ <string name="description_call_log_voicemail" msgid="4600798771975158948">"හඬ තැපෑල"</string>
+ <string name="description_add_contact" msgid="3103414772502485851">"සම්බන්ධතාවය එක් කරන්න"</string>
+ <string name="description_view_contact" msgid="5205669345700598415">"<xliff:g id="NAME">%1$s</xliff:g> සම්බන්ධතාවය බලන්න"</string>
+ <string name="description_call" msgid="3443678121983852666">"<xliff:g id="NAME">%1$s</xliff:g> අමතන්න"</string>
+ <string name="description_send_text_message" msgid="7803126439934046891">"<xliff:g id="NAME">%1$s</xliff:g> වෙත කෙටි පණිවිඩයක් යවන්න"</string>
+ <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"අසා නොමැති හඬ තැපෑල"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"හඬ සෙවීම අරඹන්න"</string>
+ <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"<xliff:g id="NUMBER">%s</xliff:g> අමතන්න"</string>
+ <string name="unknown" msgid="740067747858270469">"නොදනී"</string>
+ <string name="voicemail" msgid="3851469869202611441">"හඬ තැපෑල"</string>
+ <string name="private_num" msgid="6374339738119166953">"පුද්ගලික අංකය"</string>
+ <string name="payphone" msgid="4864313342828942922">"ගෙවුම් දුරකථනය"</string>
+ <string name="dialerKeyboardHintText" msgid="5401660096579787344">"ඩයල් කිරීමට යතුරු පුවරුව භාවිතා කරන්න"</string>
+ <string name="dialerDialpadHintText" msgid="5824490365898349041">"ඇමතුමක් එක් කිරීමට අමතන්න"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"මිනිත්තු <xliff:g id="MINUTES">%s</xliff:g> තත්පර <xliff:g id="SECONDS">%s</xliff:g>"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"ඇමතුම යැව්වේ නැත"</string>
+ <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"හඬ තැපෑල සකස් කර ගැනීමට, මෙනු > සැකසීම් වෙත යන්න."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"හඬ තැපෑල ඇමතීමට, මුලින්ම ගුවන්යානා ආකාරය වසා දමන්න."</string>
+ <string name="contact_list_loading" msgid="5488620820563977329">"පූරණය වෙමින්..."</string>
+ <string name="imei" msgid="3045126336951684285">"IMEI"</string>
+ <string name="meid" msgid="6210568493746275750">"MEID"</string>
+ <string name="simContacts_emptyLoading" msgid="6700035985448642408">"SIM පතෙන් පූරණය කරමින්…"</string>
+ <string name="simContacts_title" msgid="27341688347689769">"SIM පත් සම්බන්ධතා"</string>
+ <string name="add_contact_not_available" msgid="1419207765446461366">"මෙම අංගය භාවිතා කිරීමට පුද්ගල යෙදුම නැවත සබල කරන්න."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"නමක් හෝ දුරකථන අංකයක් ටයිප් කරන්න"</string>
+ <string name="call_log_all_title" msgid="3566738938889333307">"සියලු"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"මග හැරුණේය"</string>
+ <string name="recentMissed_empty" msgid="5427113551557296665">"මෑත කාලින මග හැරුණ ඇමතුම් නැත."</string>
+ <string name="recentVoicemails_empty" msgid="5163114119598014048">"මෑත කාලින හඬ තැපැල් නොමැත."</string>
+ <string name="show_all_contacts" msgid="1732256558071778056">"සියලු සම්බන්ධතා පෙන්වන්න"</string>
+ <string name="show_favorites_only" msgid="5520072531022614595">"ප්රියතමයන් පමණක් පෙන්වන්න"</string>
+ <string name="call_log_activity_title" msgid="4612824396355272023">"ඉතිහාසය"</string>
+ <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
+ <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
+ <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
+ <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
+ <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
+ <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
+ <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
+ <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
+ <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
+ <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+ <string name="show_all_contacts_title" msgid="8395378484578221791">"සියලුම සම්බන්ධතා"</string>
+ <string name="show_all_contacts_button_text" msgid="8057452310403090131">"සියලුම සම්බන්ධතා"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"ප්රියතමයන්ගෙන් ඉවත් කරන්න"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"අස් කරන්න"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"<xliff:g id="NUMBER">%s</xliff:g> අමතන්න"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"සම්බන්ධතා වලට එක් කරන්න"</string>
+</resources>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
new file mode 100644
index 0000000..85f53a7
--- /dev/null
+++ b/res/values-si/strings.xml
@@ -0,0 +1,157 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="8490255569343340580">"අංකිත මුහුණ"</string>
+ <string name="launcherDialer" msgid="8636288196618486553">"දුරකථනය"</string>
+ <string name="dialerIconLabel" msgid="6500826552823403796">"දුරකථනය"</string>
+ <string name="recentCallsIconLabel" msgid="1419116422359067949">"ඇමතුම් ලොගය"</string>
+ <string name="menu_sendTextMessage" msgid="6937343460284499306">"කෙටි පණිවිඩය යවන්න"</string>
+ <string name="recentCalls_callNumber" msgid="1756372533999226126">"<xliff:g id="NAME">%s</xliff:g> අමතන්න"</string>
+ <string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"ඇමතීමට කලින් අංකය වෙනස් කරන්න"</string>
+ <string name="recentCalls_addToContact" msgid="1429899535546487008">"සම්බන්ධතා වලට එක් කරන්න"</string>
+ <string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"ඇමතුම් ලොගයෙන් ඉවත් කරන්න"</string>
+ <string name="recentCalls_deleteAll" msgid="6352364392762163704">"ඇමතුම් ලොගය හිස් කරන්න"</string>
+ <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"හඬ තැපෑල මකන්න"</string>
+ <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"හඬ තැපෑල බෙදාගන්න"</string>
+ <string name="recentCalls_empty" msgid="247053222448663107">"ඇමතුම් ලොගය හිස් ය."</string>
+ <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"ඇමතුම් ලොගය හිස් කරන්නද?"</string>
+ <string name="clearCallLogConfirmation" msgid="5043563133171583152">"ඔබගේ සියලුම ඇමතුම් වාර්තා මකා දැමෙනු ඇත."</string>
+ <string name="clearCallLogProgress_title" msgid="8365943000154295771">"ඇමතුම් ලොගය හිස් කරමින්…"</string>
+ <plurals name="notification_voicemail_title">
+ <item quantity="one" msgid="1746619685488504230">"හඬ තැපෑල"</item>
+ <item quantity="other" msgid="5513481419205061254">"හඬ තැපැල් <xliff:g id="COUNT">%1$d</xliff:g>"</item>
+ </plurals>
+ <string name="notification_action_voicemail_play" msgid="6113133136977996863">"ධාවනය කරන්න"</string>
+ <string name="notification_voicemail_callers_list" msgid="1153954809339404149">"<xliff:g id="NEWER_CALLERS">%1$s</xliff:g>, <xliff:g id="OLDER_CALLER">%2$s</xliff:g>"</string>
+ <string name="notification_new_voicemail_ticker" msgid="895342132049452081">"<xliff:g id="CALLER">%1$s</xliff:g> වෙතින් නව හඬ තැපැලක්"</string>
+ <string name="voicemail_playback_error" msgid="1811242131549854624">"හඬ තැපෑල ධාවනය කළ නොහැක."</string>
+ <string name="voicemail_buffering" msgid="738287747618697097">"අන්තරාචයනය වෙමින්..."</string>
+ <string name="voicemail_fetching_content" msgid="877911315738258780">"හඬ තැපැල් ලබාගනිමින්..."</string>
+ <string name="voicemail_fetching_timout" msgid="6691792377574905201">"හඬ තැපෑල ලබාගැනීමට නොහැකි විය."</string>
+ <string name="call_log_voicemail_header" msgid="3945407886667089173">"හඬ තැපෑල සහිත ඇමතුම් පමණි"</string>
+ <string name="call_log_incoming_header" msgid="2787722299753674684">"එන ඇමතුම් පමණි"</string>
+ <string name="call_log_outgoing_header" msgid="761009180766735769">"පිටතට යන ඇමතුම් පමණි"</string>
+ <string name="call_log_missed_header" msgid="8017148056610855956">"මඟ හැරුණු ඇමතුම් පමණි"</string>
+ <string name="voicemail_status_voicemail_not_available" msgid="3021980206152528883">"හඬ තැපැල් සේවාදායකය වෙත සම්බන්ධ විය නොහැක."</string>
+ <string name="voicemail_status_messages_waiting" msgid="7113421459602803605">"හඬ තැපැල් සේවාදායකය වෙත සම්බන්ධ විය නොහැක. නව හඬ තැපැල් රැඳී සිටී."</string>
+ <string name="voicemail_status_configure_voicemail" msgid="3738537770636895689">"ඔබගේ හඬ තැපැල් සකසා ගන්න."</string>
+ <string name="voicemail_status_audio_not_available" msgid="3369618334553341626">"ශබ්ද ලද නොහැක."</string>
+ <string name="voicemail_status_action_configure" msgid="8671796489912239589">"ස්ථාපනය කරන්න"</string>
+ <string name="voicemail_status_action_call_server" msgid="1824816252288551794">"හඬ තැපැල් අමතන්න"</string>
+ <string name="voicemail_speed_slowest" msgid="1733460666177707312">"ඉතාමත් මන්දගාමී වේගය"</string>
+ <string name="voicemail_speed_slower" msgid="1508601287347216244">"මන්දගාමී වේගය"</string>
+ <string name="voicemail_speed_normal" msgid="9033988544627228892">"සාමාන්ය වේගය"</string>
+ <string name="voicemail_speed_faster" msgid="2019965121475935488">"ඉතා වේගවත්"</string>
+ <string name="voicemail_speed_fastest" msgid="5758712343491183292">"ඉතාමත් වේගවත්"</string>
+ <string name="call_log_item_count_and_date" msgid="7641933305703520787">"(<xliff:g id="COUNT">%1$d</xliff:g>) <xliff:g id="DATE">%2$s</xliff:g>"</string>
+ <string name="sms_disambig_title" msgid="5846266399240630846">"අංකය තෝරන්න"</string>
+ <string name="call_disambig_title" msgid="4392886850104795739">"අංකය තෝරන්න"</string>
+ <string name="make_primary" msgid="5829291915305113983">"මෙම තේරීම මතක තබාගන්න"</string>
+ <string name="description_image_button_one" msgid="1740638037139856139">"එක"</string>
+ <string name="description_image_button_two" msgid="5882638439003731308">"දෙක"</string>
+ <string name="description_image_button_three" msgid="8709731759376015180">"තුන"</string>
+ <string name="description_image_button_four" msgid="3530239685642246130">"හතර"</string>
+ <string name="description_image_button_five" msgid="1182465427501188413">"පහ"</string>
+ <string name="description_image_button_six" msgid="2093656269261415475">"හය"</string>
+ <string name="description_image_button_seven" msgid="2450357020447676481">"හත"</string>
+ <string name="description_image_button_eight" msgid="6969435115163287801">"අට"</string>
+ <string name="description_image_button_nine" msgid="7857248695662558323">"නවය"</string>
+ <string name="description_image_button_star" msgid="3365919907520767866">"තරුව"</string>
+ <string name="description_image_button_zero" msgid="4133108949401820710">"බිංදුව"</string>
+ <string name="description_image_button_pound" msgid="3039765597595889230">"හෑෂ්"</string>
+ <string name="description_voicemail_button" msgid="3402506823655455591">"හඬ තැපෑල"</string>
+ <string name="description_search_button" msgid="3660807558587384889">"සෙවීම"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"අමතන්න"</string>
+ <string name="description_delete_button" msgid="6263102114033407382">"බැක්ස්පේස්"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"ඇමතීමට අංකය"</string>
+ <string name="action_menu_call_history_description" msgid="9018442816219748968">"ඇමතුම් ඉතිහාසය"</string>
+ <string name="action_menu_overflow_description" msgid="2303272250613084574">"තවත් විකල්ප"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"ඩයල් පෑඩය"</string>
+ <string name="menu_copy" msgid="6108677035381940698">"පිටපත්කරණය"</string>
+ <string name="menu_show_outgoing_only" msgid="1965570298133301970">"පිටතට යන ඒවා පමණක් පෙන්වන්න"</string>
+ <string name="menu_show_incoming_only" msgid="7534206815238877417">"එන ඒවා පමණක් පෙන්වන්න"</string>
+ <string name="menu_show_missed_only" msgid="154473166059743996">"මඟ හැරුණු ඒවා පමණක් පෙන්වන්න"</string>
+ <string name="menu_show_voicemails_only" msgid="1898421289561435703">"හඬ තැපැල් පමණක් පෙන්වන්න"</string>
+ <string name="menu_show_all_calls" msgid="7560347482073345885">"සියලු ඇමතුම් පෙන්වන්න"</string>
+ <string name="add_2sec_pause" msgid="9214012315201040129">"තත්පර 2 ක විරාමයක් එක් කරන්න"</string>
+ <string name="add_wait" msgid="3360818652790319634">"රැඳී සිටීම එක් කරන්න"</string>
+ <string name="call_settings" msgid="7666474782093693667">"සැකසුම්"</string>
+ <string name="menu_newContact" msgid="1209922412763274638">"නව සම්බන්ධතාවයක්"</string>
+ <string name="callDetailTitle" msgid="5340227785196217938">"ඇමතුම් විස්තර"</string>
+ <string name="toast_call_detail_error" msgid="7200975244804730096">"අයැදුම් කළ ඇමතුම සඳහා විස්තර කියවිය නොහැකි විය."</string>
+ <string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"ස්පර්ශ නාද යතුරුපෑඩය භාවිතා කරන්න"</string>
+ <string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"පවතින ඇමතුමට නැවත යන්න"</string>
+ <string name="dialer_addAnotherCall" msgid="4205688819890074468">"ඇමතුමක් එක් කරන්න"</string>
+ <string name="type_incoming" msgid="6502076603836088532">"එන ඇමතුම"</string>
+ <string name="type_outgoing" msgid="343108709599392641">"පිටතට යන ඇමතුම"</string>
+ <string name="type_missed" msgid="2720502601640509542">"මඟ හැරුණු ඇමතුම"</string>
+ <string name="type_voicemail" msgid="5153139450668549908">"හඬ තැපෑල"</string>
+ <string name="actionIncomingCall" msgid="6028930669817038600">"එන ඇමතුම්"</string>
+ <string name="description_call_log_play_button" msgid="651182125650429846">"හඬ තැපෑල ධාවනය කිරීම"</string>
+ <string name="description_call_log_incoming_call" msgid="4485427487637250143">"එන ඇමතුම"</string>
+ <string name="description_call_log_outgoing_call" msgid="604831756853471658">"පිටතට යන ඇමතුම"</string>
+ <string name="description_call_log_missed_call" msgid="2242805209983708825">"මඟ හැරුණු ඇමතුම"</string>
+ <string name="description_call_log_voicemail" msgid="4600798771975158948">"හඬ තැපෑල"</string>
+ <string name="description_add_contact" msgid="3103414772502485851">"සම්බන්ධතාවය එක් කරන්න"</string>
+ <string name="description_view_contact" msgid="5205669345700598415">"<xliff:g id="NAME">%1$s</xliff:g> සම්බන්ධතාවය බලන්න"</string>
+ <string name="description_call" msgid="3443678121983852666">"<xliff:g id="NAME">%1$s</xliff:g> අමතන්න"</string>
+ <string name="description_send_text_message" msgid="7803126439934046891">"<xliff:g id="NAME">%1$s</xliff:g> වෙත කෙටි පණිවිඩයක් යවන්න"</string>
+ <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"අසා නොමැති හඬ තැපෑල"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"හඬ සෙවීම අරඹන්න"</string>
+ <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"<xliff:g id="NUMBER">%s</xliff:g> අමතන්න"</string>
+ <string name="unknown" msgid="740067747858270469">"නොදනී"</string>
+ <string name="voicemail" msgid="3851469869202611441">"හඬ තැපෑල"</string>
+ <string name="private_num" msgid="6374339738119166953">"පුද්ගලික අංකය"</string>
+ <string name="payphone" msgid="4864313342828942922">"ගෙවුම් දුරකථනය"</string>
+ <string name="dialerKeyboardHintText" msgid="5401660096579787344">"ඩයල් කිරීමට යතුරු පුවරුව භාවිතා කරන්න"</string>
+ <string name="dialerDialpadHintText" msgid="5824490365898349041">"ඇමතුමක් එක් කිරීමට අමතන්න"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"මිනිත්තු <xliff:g id="MINUTES">%s</xliff:g> තත්පර <xliff:g id="SECONDS">%s</xliff:g>"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"ඇමතුම යැව්වේ නැත"</string>
+ <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"හඬ තැපෑල සකස් කර ගැනීමට, මෙනු > සැකසීම් වෙත යන්න."</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"හඬ තැපෑල ඇමතීමට, මුලින්ම ගුවන්යානා ආකාරය වසා දමන්න."</string>
+ <string name="contact_list_loading" msgid="5488620820563977329">"පූරණය වෙමින්..."</string>
+ <string name="imei" msgid="3045126336951684285">"IMEI"</string>
+ <string name="meid" msgid="6210568493746275750">"MEID"</string>
+ <string name="simContacts_emptyLoading" msgid="6700035985448642408">"SIM පතෙන් පූරණය කරමින්…"</string>
+ <string name="simContacts_title" msgid="27341688347689769">"SIM පත් සම්බන්ධතා"</string>
+ <string name="add_contact_not_available" msgid="1419207765446461366">"මෙම අංගය භාවිතා කිරීමට පුද්ගල යෙදුම නැවත සබල කරන්න."</string>
+ <string name="dialer_hint_find_contact" msgid="9190419749917566623">"නමක් හෝ දුරකථනයක් ටයිප් කරන්න"</string>
+ <string name="call_log_all_title" msgid="3566738938889333307">"සියලු"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"මග හැරුණේය"</string>
+ <string name="recentMissed_empty" msgid="5427113551557296665">"මෑත කාලින මග හැරුණ ඇමතුම් නැත."</string>
+ <string name="recentVoicemails_empty" msgid="5163114119598014048">"මෑත කාලින හඬ තැපැල් නොමැත."</string>
+ <string name="show_all_contacts" msgid="1732256558071778056">"සියලු සම්බන්ධතා පෙන්වන්න"</string>
+ <string name="show_favorites_only" msgid="5520072531022614595">"ප්රියතමයන් පමණක් පෙන්වන්න"</string>
+ <string name="call_log_activity_title" msgid="4612824396355272023">"ඉතිහාසය"</string>
+ <string name="dialpad_0_number" msgid="8859392433961251108">"0"</string>
+ <string name="dialpad_1_number" msgid="6536740525419909212">"1"</string>
+ <string name="dialpad_2_number" msgid="4941546415280852148">"2"</string>
+ <string name="dialpad_3_number" msgid="6539414865185536881">"3"</string>
+ <string name="dialpad_4_number" msgid="979988372051042362">"4"</string>
+ <string name="dialpad_5_number" msgid="5492272478939926734">"5"</string>
+ <string name="dialpad_6_number" msgid="8044579516869379093">"6"</string>
+ <string name="dialpad_7_number" msgid="4175113016564167123">"7"</string>
+ <string name="dialpad_8_number" msgid="7949849563865941621">"8"</string>
+ <string name="dialpad_9_number" msgid="4377059952097526576">"9"</string>
+ <string name="show_all_contacts_title" msgid="8395378484578221791">"සියලුම සම්බන්ධතා"</string>
+ <string name="show_all_contacts_button_text" msgid="8057452310403090131">"සියලුම සම්බන්ධතා"</string>
+ <string name="favorite_hidden" msgid="4837366417440391323">"ප්රියතමයන් වෙතින් සඟවන ලදි"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"අස් කරන්න"</string>
+</resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index a474e4c..1499e5e 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -29,8 +29,8 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Vymazať záznam hovorov"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Odstrániť hlasovú správu"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Zdieľať hlasovú správu"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Záznam hovorov je prázdny."</string>
- <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Vymazať záznam hov.?"</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Váš denník hovorov je prázdny."</string>
+ <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Vymazať hovory?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Všetky záznamy o hovoroch budú odstránené."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Vymazávanie denníka hovorov..."</string>
<plurals name="notification_voicemail_title">
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Ukladanie do vyrovnávacej pamäte…"</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Načítavanie hlasovej správy…"</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Nepodarilo sa načítať hlasovú správu."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Nové"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Staršie"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Iba volania do hlasovej schránky"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Iba prichádzajúce hovory"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Iba odchádzajúce hovory"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"označiť hviezdičkou"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"nula"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"libra"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"hlasová schránka"</string>
<string name="description_search_button" msgid="3660807558587384889">"hľadať"</string>
<string name="description_dial_button" msgid="1274091017188142646">"vytáčanie"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"číslo, ktoré chcete vytočiť"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"História hovorov"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Ďalšie možnosti"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"číselná klávesnica"</string>
<string name="menu_copy" msgid="6108677035381940698">"Kopírovať"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Zobraziť len odchádzajúce"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Zobraziť len prichádzajúce"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Zobraziť len zmeškané"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Zobraziť len hlasové správy"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Zobraziť všetky hovory"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Pridať kontakt"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Pridať dvojsekundovú pauzu"</string>
<string name="add_wait" msgid="3360818652790319634">"Pridať čakanie"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Vybrať odber"</string>
<string name="call_settings" msgid="7666474782093693667">"Nastavenia"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Nový kontakt"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Všetky kontakty"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Podrobnosti hovoru"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Podrobnosti požadovaného hovoru nie je možné načítať."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Použiť dotykovú tónovú klávesnicu"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Odchádzajúci hovor"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Zmeškaný hovor"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Hlasová schránka"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Pridať kontakt"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Zobraziť kontakt <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Volať kontakt <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Podrobnosti kontaktu pre <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Nová hlasová správa."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"Počet volaní: <xliff:g id="NUMBEROFCALLS">%1$s</xliff:g>."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Poslať textovú správu kontaktu <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Nevypočutá hlasová správa"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Spustenie hlasového vyhľadávania"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Volať <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Neznáme"</string>
<string name="voicemail" msgid="3851469869202611441">"Hlasová schránka"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Prebieha načítavanie z karty SIM..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Kontakty na karte SIM"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Ak chcete použiť túto funkciu, znova povoľte aplikáciu Ľudia."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Zadajte meno / tel. č."</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Všetky"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Zmeškané"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Žiadne nedávne zmeškané hovory."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Žiadne nedávne hlasové správy."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Zobraziť všetky kontakty"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Hlasové vyhľadávanie nie je k dispozícii."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Nie je možné volať, pretože aplikácia Telefón bola deaktivovaná."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Nie je nainštalovaná žiadna aplikácia na spracovanie vybranej akcie."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Zadajte meno alebo tel. číslo"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Nemáte žiadne nové zmeškané hovory."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Nemáte žiadne nové hlasové schránky."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Zobraziť iba obľúbené"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"História"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Všetky"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Zmeškané"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Schránka"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Rýchla voľba"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Nedávne"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Kontakty"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Odstránené z obľúbených"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Späť"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Volať na číslo <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Pridať do kontaktov"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Zobraziť úplnú históriu hovorov"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"Počet nových zmeškaných hovorov: <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Rýchla voľba je funkcia umožňujúca jedným klepnutím vytočiť \nobľúbené kontakty a čísla\n, na ktoré často voláte."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Nemáte žiadne kontakty."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Klepnutím na obrázok zobrazíte všetky čísla a pridržaním ich zoradíte"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Zatvoriť"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Odstrániť"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"VŠETKY KONTAKTY"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"ZAVOLAŤ SPÄŤ"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"POČÚVAŤ"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"PODROBNOSTI"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Zmeškaný hovor od používateľa <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Prijatý hovor od používateľa <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Volať používateľovi <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Zavolať späť používateľovi <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Vypočuť si správu v hlasovej schránke od používateľa <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Podrobnosti hovoru pre kontakt <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Záznam v denníku hovorov bol odstránený."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Dnes"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Včera"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Posledný týždeň"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Staršie"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Zoznam hovorov"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Zapnúť reproduktor"</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Vypnúť reproduktor"</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Prehrať rýchlejšie"</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Prehrať pomalšie"</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Spustiť alebo pozastaviť prehrávanie"</string>
</resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 29c4a5b..0a83519 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Počisti dnevnik klicev"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Brisanje sporočil odzivnika"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Skupna raba odzivnika"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Dnevnik klicev je prazen."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Vaš dnevnik klicev je prazen."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Izbr. dnev. klicev?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Vsi vaši zapisi bodo izbrisani."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Brisanje dnevnika klicev ..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Medpomnjenje…"</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Prejemanje sporočil odzivnika…"</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Sporočil odzi. ni bilo mogoče prejeti."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Novo"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Starejši"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Samo klici z odzivnikom"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Samo dohodni klici"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Samo odhodni klici"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"zvezdica"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"nič"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"funt"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"glasovna pošta"</string>
<string name="description_search_button" msgid="3660807558587384889">"iskanje"</string>
<string name="description_dial_button" msgid="1274091017188142646">"pokliči"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"vračalka"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"številka, ki bo poklicana"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Zgodovina klicev"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Več možnosti"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"številčnica"</string>
<string name="menu_copy" msgid="6108677035381940698">"Kopiraj"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Pokaži samo odhodne"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Pokaži samo dohodne"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Pokaži samo neodgovorjene"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Pokaži samo spor. glasovne pošte"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Pokaži vse klice"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Dodaj stik"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Dodaj 2 sekundi premora"</string>
<string name="add_wait" msgid="3360818652790319634">"Dodaj premor"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Izbira naročnine"</string>
<string name="call_settings" msgid="7666474782093693667">"Nastavitve"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Nov stik"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Vsi stiki"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Podrobnosti klica"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Podrobnosti zahtevanega klica ni bilo mogoče prebrati."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Uporabi številčnico za tonsko klicanje"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Odhodni klic"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Neodgovorjeni klic"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Sporočila glasovne pošte"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Dodajanje stika"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Ogled stika <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Klicanje osebe <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Podrobnosti stika za <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Novo sporočilo v odzivniku."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"Št. klicev: <xliff:g id="NUMBEROFCALLS">%1$s</xliff:g>."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Pošlji SMS osebi <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Neodprta glasovna pošta"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Začni glasovno iskanje"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Pokliči <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Neznano"</string>
<string name="voicemail" msgid="3851469869202611441">"Glasovna pošta"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Nalaganje s kartice SIM ..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Stiki na kartici SIM"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Aplikaciji Osebe znova omogočite uporabo te funkcije."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Vnesite ime telefona"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Vsa"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Neodgovorjena"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Ni nedavnih neodgovorjenih klicev."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Ni nedavnih sporočil v odzivniku."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Pokaži vse stike"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Glasovno iskanje ni na voljo."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Ni mogoče opraviti telefonskega klica, ker je aplikacija Telefon onemogočena."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Na voljo ni nobene nameščene aplikacije za obdelavo izbranega dejanja."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Vnesite ime ali tel. številko"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Nimate nedavnih zgrešenih klicev."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Nimate nedavnih sporočil v odzivniku."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Pokaži samo priljubljene"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Zgodovina"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Vsa"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Neodgovorjena"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Odzivnik"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Hitro izbiranje"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Nedavni"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Stiki"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Odstranjeno iz priljubljenih"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Razveljavi"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Pokliči <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Dodaj med stike"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Prikaz celotne zgodovine klicev"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"Št. novih zgrešenih klicev: <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"S hitrim klicanjem z enim dotikom pokličete\npriljubljene osebe in številke\n, ki jih kličete pogosto."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Ni stikov."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Dotaknite se slike, da prikažete vse številke, ali jo pritisnite in pridržite, da spremenite vrstni red"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Opusti"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Odstrani"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"VSI STIKI"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"POVRATNI KLIC"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"POSLUŠAJ"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"PODROBNOSTI"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Neodgovorjeni klic ob <xliff:g id="TIMEOFCALL">%3$s</xliff:g> od: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> – <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Prejeti klic ob <xliff:g id="TIMEOFCALL">%3$s</xliff:g> od: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> – <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Klic: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g> – <xliff:g id="TYPEORLOCATION">%2$s</xliff:g> ob <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Povratni klic: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Poslušajte sporočilo v odzivniku od: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Podrobnosti klica za: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Vnos v dnevnik klicev je izbrisan."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Danes"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Včeraj"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Pretekli teden"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Starejši"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Seznam klicev"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Vklopi zvočnik."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Izklopi zvočnik."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Predvajaj hitreje."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Predvajaj počasneje."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Začni ali zaustavi predvajanje."</string>
</resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index d80399e..70e01e1 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Обриши евиденцију позива"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Избриши говорну поруку"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Дели говорну поруку"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Евиденција позива је празна."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Евиденција позива је празна."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Обрисати евиденцију позива?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Све евиденције позива ће бити избрисане."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Брисање евиденције позива..."</string>
@@ -40,12 +40,10 @@
<string name="notification_action_voicemail_play" msgid="6113133136977996863">"Пусти"</string>
<string name="notification_voicemail_callers_list" msgid="1153954809339404149">"<xliff:g id="NEWER_CALLERS">%1$s</xliff:g>, <xliff:g id="OLDER_CALLER">%2$s</xliff:g>"</string>
<string name="notification_new_voicemail_ticker" msgid="895342132049452081">"Нова говорна порука од <xliff:g id="CALLER">%1$s</xliff:g>"</string>
- <string name="voicemail_playback_error" msgid="1811242131549854624">"Није било могуће пустити говорну пошту."</string>
+ <string name="voicemail_playback_error" msgid="1811242131549854624">"Није могуће пустити говорну пошту."</string>
<string name="voicemail_buffering" msgid="738287747618697097">"Баферовање..."</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Преузимање говорне поште..."</string>
- <string name="voicemail_fetching_timout" msgid="6691792377574905201">"Није било могуће преузети говорну пошту."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Ново"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Старије"</string>
+ <string name="voicemail_fetching_timout" msgid="6691792377574905201">"Није могуће преузети говорну пошту."</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Само позиви са говорном поштом"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Само долазни позиви"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Само одлазни позиви"</string>
@@ -77,25 +75,27 @@
<string name="description_image_button_star" msgid="3365919907520767866">"звездица"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"нула"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"фунта"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"говорна пошта"</string>
<string name="description_search_button" msgid="3660807558587384889">"претражи"</string>
<string name="description_dial_button" msgid="1274091017188142646">"бирање"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"број за бирање"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Историја позива"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Још опција"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"нумеричка тастатура"</string>
<string name="menu_copy" msgid="6108677035381940698">"Копирај"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Прикажи само одлазне"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Прикажи само долазне"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Прикажи само пропуштене"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Прикажи само говорне поруке"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Прикажи све позиве"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Додај контакт"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Додај паузу од 2 секунде"</string>
<string name="add_wait" msgid="3360818652790319634">"Додај чекање"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Изабери претплату"</string>
<string name="call_settings" msgid="7666474782093693667">"Подешавања"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Нови контакт"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Сви контакти"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Детаљи позива"</string>
- <string name="toast_call_detail_error" msgid="7200975244804730096">"Није било могуће прочитати детаље о захтеваном позиву."</string>
+ <string name="toast_call_detail_error" msgid="7200975244804730096">"Није могуће прочитати детаље о захтеваном позиву."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Употребите бројчаник за тонско бирање"</string>
<string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"Врати се на позив који је у току"</string>
<string name="dialer_addAnotherCall" msgid="4205688819890074468">"Додај позив"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Одлазни позив"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Пропуштен позив"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Говорна пошта"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Додавање контакта"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Прикажи контакт <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Позови корисника <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Детаљи о контакту за <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Нова говорна порука."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> позива."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Слање текстуалне поруке контакту <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Непреслушана говорна пошта"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Покретање гласовне претраге"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Позови <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Непознато"</string>
<string name="voicemail" msgid="3851469869202611441">"Говорна пошта"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Учитавање са SIM картице је у току…"</string>
<string name="simContacts_title" msgid="27341688347689769">"Контакти на SIM картици"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Поново омогућите апликацију Људи да бисте користили ову функцију."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Унесите име или број телефона"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Све"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Пропуштени"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Нема недавно пропуштених позива."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Нема недавно примљене говорне поште."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Прикажи све контакте"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Гласовна претрага није доступна."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Није могуће упутити телефонски позив јер је апликација Телефон онемогућена."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Нема доступне инсталиране активности за руковање изабраном радњом."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Унесите име или број телефона"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Немате ниједан недавни пропуштени позив."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Немате ниједну недавну поруку говорне поште."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Прикажи само омиљене"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Историја"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Све"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Пропуштени"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Говорна пошта"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Брзо позивање"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Недавни контакти"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Контакти"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Уклоњено је из омиљених"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Опозови"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Позови <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Додај у контакте"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Приказ пуне историје позива"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"Нових пропуштених позива: <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Брзо позивање је позивање једним додиром\nза омиљене контакте и бројеве\n које често позивате."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Немате ниједан контакт."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Додирните слику да бисте видели све бројеве или притисните и задржите да бисте променили распоред"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Одбаци"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Уклони"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"СВИ КОНТАКТИ"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"УПУТИ ПОВРАТНИ ПОЗИВ"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"ПУСТИ"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"ДЕТАЉИ"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Пропуштени позив од <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Примљени позив од <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Позив за <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Упути повратни позив за <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Пусти говорну пошту од <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Детаљи позива за <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Унос у евиденцији позива је избрисан."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Данас"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Јуче"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Претходна недеља"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Старији"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Листа позива"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Укључите звучник."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Искључите звучник."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Бржа репродукција."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Спорија репродукција."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Започните или паузирајте репродукцију."</string>
</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index f7359e8..15cf88e 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Rensa samtalshistorik"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Ta bort röstmeddelande"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Dela röstmeddelande"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Samtalshistoriken är tom."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Samtalsloggen är tom."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Rensa samtalslista?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Alla samtalslistor kommer att tas bort."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Samtalshistoriken rensas …"</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Buffrar…"</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Hämtar röstmedelande…"</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Det gick inte att hämta röstmeddelandet."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Nya"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Äldre"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Endast samtal med röstmeddelande"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Endast inkommande samtal"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Endast utgående samtal"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"Stjärna"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"noll"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"pund"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"röstbrevlåda"</string>
<string name="description_search_button" msgid="3660807558587384889">"sök"</string>
<string name="description_dial_button" msgid="1274091017188142646">"ring"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"backsteg"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"nummer att ringa"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Samtalshistorik"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Fler alternativ"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"knappsats"</string>
<string name="menu_copy" msgid="6108677035381940698">"Kopiera"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Visa endast utgående samtal"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Visa endast inkommande samtal"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Visa endast missade samtal"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Visa bara röstmeddelanden"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Visa alla samtal"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Lägg till kontakt"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Lägg till en paus på 2 sek."</string>
<string name="add_wait" msgid="3360818652790319634">"Lägg till väntetid"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Välj prenumeration"</string>
<string name="call_settings" msgid="7666474782093693667">"Inställningar"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Ny kontakt"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Alla kontakter"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Samtalsinfo"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Det gick inte att läsa information om samtalet."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Använda tonvalstelefon"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Utgående samtal"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Missat samtal"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Röstmeddelande"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Lägg till kontakt"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Visa kontakten <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Ring <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Kontaktuppgifter för <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Nytt meddelande i röstbrevlådan"</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> samtal."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Skicka SMS till <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Ej hört röstmeddelande"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Starta röstsökning"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Ring <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Okänd"</string>
<string name="voicemail" msgid="3851469869202611441">"Röstbrevlåda"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Läser in från SIM-kort…"</string>
<string name="simContacts_title" msgid="27341688347689769">"Kontakter från SIM-kort"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Aktivera appen Personer på nytt om du vill använda den här funktionen."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Skriv namn/telefonnummer"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Alla"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Missade"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Inga nya missade samtal."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Inga nya röstmeddelanden."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Visa alla kontakter"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Röstsökning är inte tillgängligt."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Det går inte att ringa eftersom appen Telefon har inaktiverats."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Det finns ingen installerad app som är tillgänglig för att hantera den valda åtgärden."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Ange ett namn eller telefonnummer"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Du har inga nya missade samtal."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Du har inga nya röstmeddelanden."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Visa endast favoriter"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Historik"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Alla"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Missade"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Röstbrevlåda"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Snabbval"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Senaste"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Kontakter"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Borttagen från favoriter"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Ångra"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Ring <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Lägg till i Kontakter"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Visa hela samtalshistoriken"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> nya missade samtal"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Med kortnummer ringer du med en enda knapptryckning\ntill favoritkontakter och nummer\n som du ringer till ofta."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Du har inga kontakter."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Tryck på bilden om du vill visa alla nummer eller tryck länge om du vill flytta den"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Avvisa"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Ta bort"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ALLA KONTAKTER"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"RING UPP"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"LYSSNA"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"INFORMATION"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Missat samtal från <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Besvarat samtal från <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Ring till <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Ring upp <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Lyssna på ett röstmeddelande från <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Samtalsinformation för <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Posten i samtalsloggen har tagits bort."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"I dag"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"I går"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Förra veckan"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Äldre"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Samtalslista"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Slå på högtalaren."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Stäng av högtalaren."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Spela upp snabbare."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Spela upp långsammare."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Starta eller pausa uppspelning."</string>
</resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 72bc1c0..623f12f 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -27,25 +27,23 @@
<string name="recentCalls_addToContact" msgid="1429899535546487008">"Ongeza kwa anwani"</string>
<string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"Toa kwa orodha ya simu zilizopigwa"</string>
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Futa rekodi ya simu"</string>
- <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Futa barua ya sauti"</string>
- <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Shiriki barua ya sauti"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Orodha ya kupiga simu haina chochote."</string>
- <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Futa rekodi ya simu?"</string>
+ <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Futa ujumbe wa sauti"</string>
+ <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Shiriki ujumbe wa sauti"</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Rekodi yako ya nambari za simu haina kitu."</string>
+ <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Ungependa kufuta rekodi ya simu?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Kumbukumbu zako zote za simu zitafutwa."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Inafuta rekodi ya simu ..."</string>
<plurals name="notification_voicemail_title">
- <item quantity="one" msgid="1746619685488504230">"Barua ya sauti"</item>
+ <item quantity="one" msgid="1746619685488504230">"Ujumbe wa sauti"</item>
<item quantity="other" msgid="5513481419205061254">"Barua za sauti <xliff:g id="COUNT">%1$d</xliff:g>"</item>
</plurals>
<string name="notification_action_voicemail_play" msgid="6113133136977996863">"Cheza"</string>
<string name="notification_voicemail_callers_list" msgid="1153954809339404149">"<xliff:g id="NEWER_CALLERS">%1$s</xliff:g>, <xliff:g id="OLDER_CALLER">%2$s</xliff:g>"</string>
<string name="notification_new_voicemail_ticker" msgid="895342132049452081">"Barua mpya ya sauti kutoka <xliff:g id="CALLER">%1$s</xliff:g>"</string>
- <string name="voicemail_playback_error" msgid="1811242131549854624">"Haikuweza kucheza barua ya sauti."</string>
+ <string name="voicemail_playback_error" msgid="1811242131549854624">"Imeshindwa kucheza ujumbe wa sauti."</string>
<string name="voicemail_buffering" msgid="738287747618697097">"Inaakibisha..."</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Inaleta barua ya sauti…"</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Haikuweza kuleta barua ya sauti."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Mpya"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Nzee zaidi"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Simu zilizo na ujumbe wa sauti tu"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Simu zinazoingia tu"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Simu zinazotoka tu"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"nyota"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"sufuri"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"Pauni"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"Barua ya sauti"</string>
<string name="description_search_button" msgid="3660807558587384889">"tafuta"</string>
<string name="description_dial_button" msgid="1274091017188142646">"piga simu"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"futa"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"nambari ya kupiga"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Historia ya Simu"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Chaguo zaidi"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"kitufe cha kupiga"</string>
<string name="menu_copy" msgid="6108677035381940698">"Nakili"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Onyesha zinazotoka pekee"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Onyesha zinazoingia pekee"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Onyesha zilizokosa kupokewa pekee"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Onyesha barua za sauti pekee"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Onyesha simu zote"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Ongeza anwani"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Ongeza usitishaji wa sekunde 2"</string>
<string name="add_wait" msgid="3360818652790319634">"Ongeza kusubiri"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Chagua Usajili"</string>
<string name="call_settings" msgid="7666474782093693667">"Mipangilio"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Anwani mpya"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Anwani zote"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Maelezo ya simu"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Haikuweza kusoma maelezo ya simu iliyoombwa."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Tumia kibao cha kuchapa cha sauti na kugusa"</string>
@@ -104,22 +104,22 @@
<string name="type_missed" msgid="2720502601640509542">"Simu isiyojibiwa"</string>
<string name="type_voicemail" msgid="5153139450668549908">"Barua za sauti"</string>
<string name="actionIncomingCall" msgid="6028930669817038600">"Simu zinazoingia"</string>
- <string name="description_call_log_play_button" msgid="651182125650429846">"Cheza barua ya sauti"</string>
+ <string name="description_call_log_play_button" msgid="651182125650429846">"Sikiliza ujumbe wa sauti"</string>
<string name="description_call_log_incoming_call" msgid="4485427487637250143">"Simu inayoingia"</string>
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Simu inayotoka"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Simu isiyojibiwa"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Barua za sauti"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Ongeza anwani"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Angalia anwani <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Piga <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Maelezo ya <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Ujumbe mpya wa sauti."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"Simu <xliff:g id="NUMBEROFCALLS">%1$s</xliff:g>."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Tuma ujumbe wa maandishi kwa <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Barua sauti ambayo haijasikizwa"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Anza kutafuta kwa kutamka"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Piga simu <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Haijulikani"</string>
- <string name="voicemail" msgid="3851469869202611441">"Barua ya sauti"</string>
+ <string name="voicemail" msgid="3851469869202611441">"Ujumbe wa sauti"</string>
<string name="private_num" msgid="6374339738119166953">" Nambari isiyojulikana"</string>
<string name="payphone" msgid="4864313342828942922">"Simu ya kulipia"</string>
<string name="dialerKeyboardHintText" msgid="5401660096579787344">"Tumia kibodi kubonyeza"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Inapakia kutoka SIM kadi..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Anwani za SIM kadi"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Washa tena Programu ya watu ili itumie kipengele hiki."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Chapa jina au simu"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Zote"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Hazikupokewa"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Hakuna simu za hivi karibuni ambazo hazikupokewa."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Hakuna ujumbe wa sauti wa hivi karibuni."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Onyesha anwani zote"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Utafutaji kwa kutamka haupatikani."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Haiwezi kupiga simu kwa sababu programu ya Simu imezimwa."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Hakuna shughuli iliyosakinishwa imepatikana ya kushughulikia kitendo kilichochaguliwa."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Andika jina au nambari ya simu"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Huna simu za hivi majuzi ambazo hukuzipokea."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Huna ujumbe wa sauti wa hivi majuzi."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Onyesha zinazopendwa tu"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Historia"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Zote"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Ambazo hazikupokewa"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Ujumbe wa sauti"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Unaowasiliana nao zaidi"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Zilizotumika majuzi"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Walioalikwa"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Imeondolowa kwenye vipendwa"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Tendua"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Piga simu <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Ongeza kwenye anwani"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Angalia historia kamili ya simu zilizopigwa"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"Simu <xliff:g id="NUMBER">%s</xliff:g> za karibuni ambazo hazikujibiwa"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Kupiga simu kwa haraka ni kupiga simu kwa kugusa mara moja\n nambari na watu unaowapigia mara kwa mara\n."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Huna anwani."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Gonga picha ili uone nambari zote au bonyeza na ushikilie ili upange upya"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Ondoa"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Ondoa"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"ANWANI ZOTE"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"PIGA SIMU"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"SIKILIZA"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"MAELEZO"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Simu ambayo haikujibiwa kutoka kwa <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Simu iliyopokelewa kutoka kwa <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Simu kwa <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Piga simu kwa <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Sikiliza ujumbe wa sauti kutoka kwa <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Maelezo ya simu ya <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Kumbukumbu ya simu imefutwa."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Leo"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Jana"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Wiki iliyopita"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Nzee zaidi"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Orodha ya Simu"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Washa spika."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Zima spika."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Cheza kwa kasi zaidi."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Cheza polepole."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Anzisha au usitishe kucheza."</string>
</resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index ca99f26..73cab1f 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -28,8 +28,8 @@
<string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"ลบจากบันทึกการโทร"</string>
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"ล้างบันทึกการโทร"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"ลบข้อความเสียง"</string>
- <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"แบ่งปันข้อความเสียง"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"บันทึกการโทรว่างเปล่า"</string>
+ <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"แชร์ข้อความเสียง"</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"ประวัติการโทรว่างเปล่า"</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"ล้างบันทึกการโทร"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"บันทึกการโทรทั้งหมดของคุณจะถูกลบออก"</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"กำลังล้างบันทึกการโทร..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"กำลังเก็บบัฟเฟอร์…"</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"กำลังดึงข้อความเสียง…"</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"ไม่สามารถดึงข้อความเสียง"</string>
- <string name="call_log_new_header" msgid="846546437517724715">"ใหม่"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"เก่ากว่า"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"เฉพาะสายที่มีข้อความเสียง"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"เฉพาะสายเรียกเข้า"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"เฉพาะสายโทรออก"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"ติดดาว"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"ศูนย์"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"ปอนด์"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"ข้อความเสียง"</string>
<string name="description_search_button" msgid="3660807558587384889">"ค้นหา"</string>
<string name="description_dial_button" msgid="1274091017188142646">"หมุนหมายเลข"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"ย้อนกลับ"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"หมายเลขที่จะโทร"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"ประวัติการโทร"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"ตัวเลือกเพิ่มเติม"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"แป้นหมายเลข"</string>
<string name="menu_copy" msgid="6108677035381940698">"คัดลอก"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"แสดงสายที่โทรออกเท่านั้น"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"แสดงสายโทรเข้าเท่านั้น"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"แสดงสายที่ไม่ได้รับเท่านั้น"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"แสดงเฉพาะข้อความเสียง"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"แสดงการโทรทั้งหมด"</string>
+ <string name="add_contact" msgid="8875804371377471164">"เพิ่มที่อยู่ติดต่อ"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"เพิ่มช่วงคั่น 2 วินาที"</string>
<string name="add_wait" msgid="3360818652790319634">"เพิ่มการรอ"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"เลือกการสมัครรับข้อมูล"</string>
<string name="call_settings" msgid="7666474782093693667">"การตั้งค่า"</string>
<string name="menu_newContact" msgid="1209922412763274638">"สร้างรายชื่อใหม่"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"ที่อยู่ติดต่อทั้งหมด"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"รายละเอียดการโทร"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"ไม่สามารถอ่านรายละเอียดสำหรับการโทรที่ขอ"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"ใช้ปุ่มกดสัญญาณเสียง"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"สายโทรออก"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"สายที่ไม่ได้รับ"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"ข้อความเสียง"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"เพิ่มรายชื่อติดต่อ"</string>
<string name="description_view_contact" msgid="5205669345700598415">"ดูรายชื่อติดต่อ <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"โทรหา <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"รายละเอียดที่อยู่ติดต่อสำหรับ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"ข้อความเสียงใหม่"</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> สาย"</string>
<string name="description_send_text_message" msgid="7803126439934046891">"ส่งข้อความไปที่ <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"ข้อความเสียงที่ยังไม่ได้ฟัง"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"เริ่มต้นการค้นหาด้วยเสียง"</string>
<string name="menu_callNumber" msgid="997146291983360266">"โทร <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"ไม่ทราบ"</string>
<string name="voicemail" msgid="3851469869202611441">"ข้อความเสียง"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"กำลังโหลดจากซิมการ์ด…"</string>
<string name="simContacts_title" msgid="27341688347689769">"รายชื่อบนซิมการ์ด"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"เปิดใช้งานแอปพลิเคชัน People อีกครั้งเพื่อใช้คุณลักษณะนี้"</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"พิมพ์ชื่อ/หมายเลขโทรศัพท์"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"ทั้งหมด"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"ไม่ได้รับ"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"ไม่มีสายที่ไม่ได้รับล่าสุด"</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"ไม่มีข้อความเสียงล่าสุด"</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"แสดงรายชื่อในสมุดโทรศัพท์ทั้งหมด"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"ค้นหาด้วยเสียงไม่สามารถใช้งานได้"</string>
+ <string name="call_not_available" msgid="8941576511946492225">"ไม่สามารถโทรศัพท์ได้เนื่องจากแอปพลิเคชันโทรศัพท์ถูกปิดใช้งาน"</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"ไม่มีกิจกรรมที่ติดตั้งไว้ใช้จัดการการดำเนินการที่เลือก"</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"พิมพ์ชื่อหรือหมายเลขโทรศัพท์"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"คุณไม่มีสายที่ไม่ได้รับล่าสุด"</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"คุณไม่มีข้อความเสียงล่าสุด"</string>
<string name="show_favorites_only" msgid="5520072531022614595">"แสดงเฉพาะรายชื่อที่ชื่นชอบ"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"ประวัติ"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"ทั้งหมด"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"ไม่ได้รับ"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"ข้อความเสียง"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"โทรด่วน"</string>
+ <string name="tab_recents" msgid="929949073851377206">"ล่าสุด"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"ที่อยู่ติดต่อ"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"นำออกจากรายการโปรด"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"เลิกทำ"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"โทร <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"เพิ่มในสมุดติดต่อ"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"ดูประวัติการโทรแบบเต็ม"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"สายที่ไม่ได้รับใหม่ <xliff:g id="NUMBER">%s</xliff:g> สาย"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"การโทรด่วนคือการแตะครั้งเดียว\nเพื่อโทรหาคนสนิทหรือหมายเลข\nที่คุณโทรบ่อยๆ"</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"คุณไม่มีที่อยู่ติดต่อ"</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"แตะรูปภาพเพื่อดูหมายเลขทั้งหมด หรือกดค้างเพื่อจัดลำดับใหม่"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"ปิด"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"นำออก"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"รายชื่อติดต่อทั้งหมด"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"โทรกลับ"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"ฟัง"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"รายละเอียด"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"สายที่ไม่ได้รับจาก <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"สายที่ได้รับจาก <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"โทรไปยัง <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>"</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"โทรกลับ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"ฟังข้อความเสียงจาก <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"รายละเอียดการโทรสำหรับ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"ลบรายการประวัติการโทรแล้ว"</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"วันนี้"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"เมื่อวานนี้"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"สัปดาห์ที่แล้ว"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"เก่ากว่า"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"รายการโทร"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"เปิดลำโพง"</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"ปิดลำโพง"</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"เล่นเร็วขึ้น"</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"เล่นช้าลง"</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"เริ่มหรือหยุดเล่นชั่วคราว"</string>
</resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 67471bc..161ad6c 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"I-clear ang log ng tawag"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Tanggalin ang voicemail"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Ibahagi ang voicemail"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Walang laman ang log ng tawag."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Walang laman ang iyong log ng tawag."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"I-clear ang log ng tawag?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Tatanggalin ang lahat ng iyong record ng tawag."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Kini-clear ang log ng tawag…"</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Nagba-buffer…"</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Kinukuha ang voicemail…"</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Hindi makuha ang voicemail."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Bago"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Mas Luma"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Mga tawag lang na may voicemail"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Mga papasok na tawag lang"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Mga papalabas na tawag lang"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"lagyan ng bituin"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"zero"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"pound"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"voicemail"</string>
<string name="description_search_button" msgid="3660807558587384889">"maghanap"</string>
<string name="description_dial_button" msgid="1274091017188142646">"mag-dial"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"numerong ida-dial"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Kasaysayan ng Tawag"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Higit pang mga pagpipilian"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"dial pad"</string>
<string name="menu_copy" msgid="6108677035381940698">"Kopyahin"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Ipakita lang ang papalabas"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Ipakita lang ang paparating"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Ipakita lang ang hindi nasagot"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Ipakita lamang ang mga voicemail"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Ipakita ang lahat ng tawag"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Magdagdag ng contact"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Magdagdag ng pag-pause na 2-seg"</string>
<string name="add_wait" msgid="3360818652790319634">"Magdagdag ng paghihintay"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Pumili ng Subscription"</string>
<string name="call_settings" msgid="7666474782093693667">"Mga Setting"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Bagong contact"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Lahat ng contact"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Mga detalye ng tawag"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Hindi mabasa ang mga detalye para sa hiniling na tawag."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Gumamit ng touch tone na keypad"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Papalabas na tawag"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Hindi nasagot na tawag"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Voicemail"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Magdagdag ng contact"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Tingnan ang contact na si <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Tawagan si <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Mga detalye sa pakikipag-ugnayan para kay/sa <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Bagong voicemail."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> (na) tawag."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Ipadala ang text message kay <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Hindi pa naririnig na voicemail"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Simulan ang paghahanap gamit ang boses"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Tumawag sa <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Di-kilala"</string>
<string name="voicemail" msgid="3851469869202611441">"Voicemail"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Naglo-load mula sa SIM card…"</string>
<string name="simContacts_title" msgid="27341688347689769">"Mga contact sa SIM card"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Paganahing muli ang application ng Mga Tao upang magamit ang tampok na ito."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Mag-type pangalan o phone"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Lahat"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Di nasagot"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Walang mga kamakailang hindi nasagot na tawag."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Walang mga kamakailang voicemail."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Ipakita ang lahat ng contact"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Hindi available ang paghahanap gamit ang boses."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Hindi makagawa ng tawag sa telepono dahil naka-disable ang application na Telepono."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Walang available na naka-install na aktibidad upang pangasiwaan ang napiling pagkilos."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"I-type pangalan o phone number"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Wala kang mga hindi nasagot na tawag kamakailan."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Wala kang mga voicemail kamakailan."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Mga paborito lang ang ipakita"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Kasaysayan"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Lahat"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Di nasagot"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Voicemail"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Speed Dial"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Mga Kamakailan"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Mga Contact"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Inalis sa mga paborito"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"I-undo"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Tumawag sa <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Idagdag sa mga contact"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Tingnan ang buong kasaysayan ng tawag"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> (na) bagong hindi nasagot na tawag"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Ang speed dial ay pagda-dial sa isang pindot lang\npara sa mga paborito at numerong\n madalas mong tawagan."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Wala kang mga contact."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"I-tap ang larawan upang makita ang lahat ng numero at pindutin nang matagal upang ayusing muli"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"I-dismiss"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Alisin"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"LAHAT NG CONTACT"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"TUMAWAG"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"MAKINIG"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"MGA DETALYE"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Hindi nasagot na tawag mula sa/kay <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Sumagot ng tawag mula sa/kay <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Tumawag sa/kay <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Tumawag sa/kay <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Makinig sa voicemail mula sa/kay <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Mga detalye ng tawag para sa/kay <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Tinanggal ang entry sa log ng tawag."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Ngayon"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Kahapon"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Nakaraang linggo"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Mas Luma"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Listahan ng Tawag"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"I-on ang speaker."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"I-off ang speaker."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Mag-play nang mas mabilis."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Mag-play nang mas mabagal."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Simulan o i-pause ang pag-playback."</string>
</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index e4faefe..e80c34e 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Çağrı kaydını temizle"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Sesli mesajı sil"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Sesli mesajı paylaş"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Çağrı kaydı boş."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Çağrı kaydınız boş."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Çağrı günlüğünü sil?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Tüm çağrı kayıtlarınız silinecek."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Çağrı günlüğü temizleniyor..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Arabelleğe alınıyor..."</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Sesli mesaj getiriliyor..."</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Sesli mesaj getirilemedi."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Yeni"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Daha eski"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Yalnızca sesli mesaj içeren çağrılar"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Yalnızca gelen çağrılar"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Yalnızca giden çağrılar"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"yıldız"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"sıfır"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"pound"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"Sesli mesaj"</string>
<string name="description_search_button" msgid="3660807558587384889">"ara"</string>
<string name="description_dial_button" msgid="1274091017188142646">"çevir"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"geri tuşu"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"çevrilecek numara"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Çağrı Geçmişi"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Diğer seçenekler"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"tuş takımı"</string>
<string name="menu_copy" msgid="6108677035381940698">"Kopyala"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Yalnızca gidenleri göster"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Yalnızca gelenleri göster"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Yalnızca cevapsızları göster"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Yalnızca sesli msajları göster"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Tüm çağrıları göster"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Kişi ekle"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"2 saniyelik duraklama ekle"</string>
<string name="add_wait" msgid="3360818652790319634">"Bekleme ekle"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Abonelik Seç"</string>
<string name="call_settings" msgid="7666474782093693667">"Ayarlar"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Yeni kişi"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Tüm kişiler"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Çağrı ayrıntıları"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"İstenen çağrı için ayrıntılar okunamadı."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Telefon tuş takımını kullan"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Giden çağrı"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Cevapsız çağrı"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Sesli mesaj"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Kişi ekle"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Kişiyi görüntüle: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Sesli arama yap: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> için kişi ayrıntıları"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Yeni sesli mesaj."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> çağrı."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Şu kişiye kısa mesaj gönder: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Dinlenilmemiş sesli mesaj"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Sesli arama başlat"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Çağrı yap: <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Bilinmiyor"</string>
<string name="voicemail" msgid="3851469869202611441">"Sesli Mesaj"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"SIM karttan yükleniyor..."</string>
<string name="simContacts_title" msgid="27341688347689769">"SIM kart kişileri"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Bu özelliği kullanmak için Kişiler uygulamasını yeniden etkinleştirin."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Bir ad veya telefon yazın"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Tümü"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Cevapsız"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Yakın zamanda cevapsız çağrı yok."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Yakın zamanda bırakılan sesli mesaj yok."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Tüm kişileri göster"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Sesli arama kullanılamıyor."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Telefon uygulaması devre dışı bırakıldığından telefon edilemiyor."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Seçilen işlemi gerçekleştirmek için kullanılabilir yüklü etkinlik yok."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Ad veya telefon numarası yazın"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Yakın zamanda cevapsız çağrınız yok."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Yakın zamanda sesli mesajınız yok."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Yalnızca favori kişileri göster"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Geçmiş"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Tümü"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Cevapsız"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Sesli Mesaj"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Hızlı Arama"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Son Kişiler"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Kişiler"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Favorilerden kaldırıldı"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Geri al"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Telefon et: <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Kişilere ekle"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Tüm çağrı geçmişini görüntüle"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> yeni cevapsız çağrı"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Hızlı arama, sık telefon ettiğiniz \nfavori kişilerinizi ve numaralarınızı\ntek dokunuşla aramaktır."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Kişiniz yok."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Tüm numaraları görmek için resme hafifçe vurun veya yeniden sıralamak için basılı tutun"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Kapat"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Kaldır"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"TÜM KİŞİLER"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"GERİ ARA"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"DİNLE"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"AYRINTILAR"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Cevapsız çağrı: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Yanıtlanan çağrı: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Aranan numara: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Geri ara: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Şu numaradan gelen sesli mesajı dinle: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g> için çağrı ayrıntıları"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Çağrı kaydı girişi silindi."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Bugün"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Dün"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Son 1 hafta"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Daha eski"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Çağrı Listesi"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Hoparlörü açın."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Hoparlörü kapatın."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Daha hızlı çalın."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Daha yavaş çalın."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Çalmayı başlatın veya duraklatın."</string>
</resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index ab12178..d34e974 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Очист. журнал викл."</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Видалити голосову пошту"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Надіслати голос. повідомлення"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Журн. викл. порожній."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Журнал дзвінків порожній."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Очистити журнал викликів?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Усі записи викликів буде видалено."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Очищення журналу викликів..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Буферизація..."</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Отримання голосової пошти..."</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Не вдалось отримати голосову пошту."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Нові"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Старіші"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Лише виклики з голосовою поштою"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Лише вхідні виклики"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Лише вихідні виклики"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"зірочка"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"нуль"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"решітка"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"голос. пошта"</string>
<string name="description_search_button" msgid="3660807558587384889">"пошук"</string>
<string name="description_dial_button" msgid="1274091017188142646">"дзвон."</string>
- <string name="description_delete_button" msgid="6263102114033407382">"видалити"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"номер для набору"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Історія викликів"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Інші варіанти"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"цифрова клавіатура"</string>
<string name="menu_copy" msgid="6108677035381940698">"Копіювати"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Показувати лише вихідні"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Показувати лише вхідні"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Показувати лише пропущені"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Показувати лише голосову пошту"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Показувати всі виклики"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Додати контакта"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Дод. 2-сек. паузу"</string>
<string name="add_wait" msgid="3360818652790319634">"Дод. очікув."</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Вибрати підписку"</string>
<string name="call_settings" msgid="7666474782093693667">"Налаштування"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Новий контакт"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Усі контакти"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Деталі виклику"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Неможл. прочитати деталі потрібного виклику."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Викор. кнопкову клавіат."</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Вихідний дзвінок"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Пропущений виклик"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Голосова пошта"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Додати контакт"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Переглянути контакт <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Дзвонити: <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Відомості про контакт <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Нова голосове повідомлення."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"Викликів: <xliff:g id="NUMBEROFCALLS">%1$s</xliff:g>."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Надіслати текстове повідомлення: <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Непрослухана голосова пошта"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"–"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Розпочати голосовий пошук"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Телефонувати <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Невідомий"</string>
<string name="voicemail" msgid="3851469869202611441">"Голос. пошта"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Завантаж. із SIM-карти…"</string>
<string name="simContacts_title" msgid="27341688347689769">"Контакти SIM-карти"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Повторно ввімкніть програму Люди, щоб скористатися цією функцією."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Введіть ім’я або телефон"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Усі"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Пропущені"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Немає нещодавніх пропущених викликів."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Немає нещодавніх повідомлень голосової пошти."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Показати всі контакти"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Голосовий пошук недоступний."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Не вдається здійснити дзвінок, оскільки додаток Телефон вимкнено."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Неможливо обробити вибрану дію."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Введіть ім’я чи номер телефону"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Немає нещодавно пропущених дзвінків."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Немає нещодавніх повідомлень голосової пошти."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Показати лише вибрані"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Історія"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Усі"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Пропущені"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Голос.пошта"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Швидкий набір"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Останні"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Контакти"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Вилучено з вибраного"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Відмінити"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Набрати <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Додати до контактів"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Переглянути всю історію дзвінків"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"Нових пропущених дзвінків: <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Швидкий набір – це набір \nвибраних номерів і номерів\n, на які ви часто телефонуєте, одним дотиком."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"У вас немає контактів."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Торкніться зображення, щоб побачити всі номери, або натисніть і утримуйте, щоб змінити порядок"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Закрити"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Видалити"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"УСІ КОНТАКТИ"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"ТЕЛЕФОНУВАТИ"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"СЛУХАТИ"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"ДЕТАЛІ"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Пропущений дзвінок: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Прийнятий дзвінок: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Дзвінок: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Телефонувати: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Слухати голосову пошту: <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>: деталі дзвінків"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Запис журналу дзвінків видалено."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Сьогодні"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Учора"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Останній тиждень"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Старіші"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Список дзвінків"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Увімкнути динамік."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Вимкнути динамік."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Відтворювати швидше."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Відтворювати повільніше."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Почати або призупинити відтворення."</string>
</resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index c891a07..415cae6 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Xóa nhật ký cuộc gọi"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Xóa thư thoại"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Hiển thị thư thoại"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Nhật ký cuộc gọi trống."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Nhật ký cuộc gọi của bạn trống."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Xóa nhật ký c.gọi?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Tất cả bản ghi cuộc gọi của bạn sẽ bị xóa."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Đang xóa nhật ký cuộc gọi…"</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Đang lưu tạm vào bộ đệm…"</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"Đang tìm nạp thư thoại…"</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Không thể tìm nạp thư thoại."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Mới"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Cũ hơn"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Chỉ cuộc gọi có thư thoại"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Chỉ cuộc gọi đến"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Chỉ cuộc gọi đi"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"sao"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"không"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"dấu thăng"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"thư thoại"</string>
<string name="description_search_button" msgid="3660807558587384889">"tìm kiếm"</string>
<string name="description_dial_button" msgid="1274091017188142646">"quay số"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"backspace"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"số để quay"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Nhật ký cuộc gọi"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Tùy chọn khác"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"bàn phím số"</string>
<string name="menu_copy" msgid="6108677035381940698">"Sao chép"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Chỉ hiển thị cuộc gọi đi"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Chỉ hiển thị cuộc gọi đến"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Chỉ hiển thị cuộc gọi nhỡ"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Chỉ hiển thị thư thoại"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Hiển thị tất cả cuộc gọi"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Thêm liên hệ"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Thêm 2 giây dừng"</string>
<string name="add_wait" msgid="3360818652790319634">"Thêm chờ"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Chọn đăng ký"</string>
<string name="call_settings" msgid="7666474782093693667">"Cài đặt"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Liên hệ mới"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Tất cả liên hệ"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Chi tiết cuộc gọi"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Không thể đọc chi tiết về cuộc gọi yêu cầu."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Sử dụng bộ tạo xung từ bàn phím"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Cuộc gọi đi"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Cuộc gọi nhỡ"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Thư thoại"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Thêm địa chỉ liên hệ"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Xem thông tin liên hệ của <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Gọi <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Chi tiết liên lạc cho <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Thư thoại mới."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> cuộc gọi."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Gửi tin nhắn văn bản tới <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"Thư thoại chưa nghe"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Bắt đầu tìm kiếm bằng giọng nói"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Gọi <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Không xác định"</string>
<string name="voicemail" msgid="3851469869202611441">"Thư thoại"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Đang tải từ thẻ SIM…"</string>
<string name="simContacts_title" msgid="27341688347689769">"Danh bạ trên thẻ SIM"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Bật lại ứng dụng Liên hệ để sử dụng tính năng này."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Nhập tên hoặc điện thoại"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Tất cả"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Bị nhỡ"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Không có cuộc gọi nhỡ gần đây nào."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Không có thư thoại gần đây nào."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Hiển thị tất cả liên hệ"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Tìm kiếm bằng giọng nói không khả dụng."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Không thể thực hiện cuộc gọi điện thoại vì ứng dụng Điện thoại đã bị tắt."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Không có ứng dụng đã cài đặt nào để xử lý tác vụ đã chọn."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Nhập tên hoặc số điện thoại"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Bạn không có cuộc gọi nhỡ nào gần đây."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Bạn không có thư thoại nào gần đây."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Chỉ hiển thị liên hệ ưa thích"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Lịch sử"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Tất cả"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Bị nhỡ"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Thư thoại"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Quay số nhanh"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Gần đây"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Địa chỉ liên hệ"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Đã xóa khỏi mục yêu thích"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Hoàn tác"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Gọi <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Thêm vào danh bạ"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Xem lịch sử cuộc gọi đầy đủ"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> cuộc gọi nhỡ mới"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Gọi nhanh là gọi bằng một lần chạm\nđối với các liên hệ yêu thích và số điện thoại\n bạn thường xuyên gọi."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Bạn không có liên hệ nào."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Chạm vào hình ảnh để xem tất cả các số hoặc nhấn và giữ để sắp xếp lại"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Loại bỏ"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Xóa"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"TẤT CẢ NGƯỜI LIÊN HỆ"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"GỌI LẠI"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"NGHE"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"CHI TIẾT"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Cuộc gọi nhỡ từ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Cuộc gọi đã trả lời từ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Cuộc gọi đến <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Gọi lại <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Nghe thư thoại từ <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Chi tiết cuộc gọi cho <xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Đã xóa mục nhật ký cuộc gọi."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Hôm nay"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Hôm qua"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Tuần trước"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Cũ hơn"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Danh sách cuộc gọi"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Bật loa."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Tắt loa."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Phát nhanh hơn."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Phát chậm hơn."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Bắt đầu hoặc tạm dừng phát lại."</string>
</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index dc63b0d..629f843 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -24,12 +24,12 @@
<string name="menu_sendTextMessage" msgid="6937343460284499306">"发送短信"</string>
<string name="recentCalls_callNumber" msgid="1756372533999226126">"呼叫<xliff:g id="NAME">%s</xliff:g>"</string>
<string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"呼叫之前编辑号码"</string>
- <string name="recentCalls_addToContact" msgid="1429899535546487008">"添加到“联系人”"</string>
+ <string name="recentCalls_addToContact" msgid="1429899535546487008">"添加到通讯录"</string>
<string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"从通话记录中删除"</string>
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"清除通话记录"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"删除语音邮件"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"分享语音邮件"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"通话记录为空。"</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"您没有通话记录。"</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"要清除通话记录吗?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"系统将删除您的所有通话记录。"</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"正在清除通话记录..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"正在缓冲…"</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"正在抓取语音邮件…"</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"无法抓取语音邮件。"</string>
- <string name="call_log_new_header" msgid="846546437517724715">"新记录"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"旧记录"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"只显示语音信箱留言"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"只显示来电"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"只显示外拨电话"</string>
@@ -77,23 +75,26 @@
<string name="description_image_button_star" msgid="3365919907520767866">"星形符号"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"零"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"英镑符号"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"语音信箱"</string>
<string name="description_search_button" msgid="3660807558587384889">"搜索"</string>
<string name="description_dial_button" msgid="1274091017188142646">"拨打"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"退格"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"要拨打的号码"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"通话记录"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"更多选项"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"拨号键盘"</string>
<string name="menu_copy" msgid="6108677035381940698">"复制"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"仅显示外拨电话"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"仅显示来电"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"仅显示未接来电"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"只显示语音邮件"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"显示所有通话"</string>
- <string name="add_2sec_pause" msgid="9214012315201040129">"暂停时间延长 2 秒"</string>
+ <string name="add_contact" msgid="8875804371377471164">"添加联系人"</string>
+ <string name="add_2sec_pause" msgid="9214012315201040129">"延长暂停时间2秒"</string>
<string name="add_wait" msgid="3360818652790319634">"延长等待时间"</string>
+ <!-- no translation found for menu_select_subscription (363190251770943468) -->
+ <skip />
<string name="call_settings" msgid="7666474782093693667">"设置"</string>
<string name="menu_newContact" msgid="1209922412763274638">"新建联系人"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"所有联系人"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"通话详情"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"无法读取所请求呼叫的详细信息。"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"使用按键式键盘"</string>
@@ -109,18 +110,18 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"去电"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"未接电话"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"语音邮件"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"添加联系人"</string>
<string name="description_view_contact" msgid="5205669345700598415">"查看联系人<xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"呼叫<xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>的详细联系信息"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"有新的语音邮件。"</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g>次通话。"</string>
<string name="description_send_text_message" msgid="7803126439934046891">"向<xliff:g id="NAME">%1$s</xliff:g>发送短信"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"未收听的语音邮件"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"开始语音搜索"</string>
<string name="menu_callNumber" msgid="997146291983360266">"拨打 <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"未知"</string>
<string name="voicemail" msgid="3851469869202611441">"语音信箱"</string>
- <string name="private_num" msgid="6374339738119166953">"私人号码"</string>
+ <string name="private_num" msgid="6374339738119166953">"私密号码"</string>
<string name="payphone" msgid="4864313342828942922">"公用电话"</string>
<string name="dialerKeyboardHintText" msgid="5401660096579787344">"使用键盘拨号"</string>
<string name="dialerDialpadHintText" msgid="5824490365898349041">"拨号以添加通话"</string>
@@ -134,20 +135,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"正从 SIM 卡中加载..."</string>
<string name="simContacts_title" msgid="27341688347689769">"SIM 卡联系人"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"必须重新启用联系人应用才能使用此功能。"</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"请输入姓名或电话号码"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"无法使用语音搜索。"</string>
+ <string name="call_not_available" msgid="8941576511946492225">"“电话”应用已被停用,因此无法拨打电话。"</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"没有任何已安装的应用可以处理所选操作。"</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"输入姓名或手机号"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"您最近没有未接电话。"</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"您最近没有语音邮件。"</string>
+ <string name="show_favorites_only" msgid="5520072531022614595">"仅显示收藏的联系人"</string>
+ <string name="call_log_activity_title" msgid="4612824396355272023">"通话记录"</string>
<string name="call_log_all_title" msgid="3566738938889333307">"全部"</string>
<string name="call_log_missed_title" msgid="4541142293870638971">"未接电话"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"最近没有未接来电。"</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"最近没有语音邮件。"</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"显示所有联系人"</string>
- <string name="show_favorites_only" msgid="5520072531022614595">"仅显示常用联系人"</string>
- <string name="call_log_activity_title" msgid="4612824396355272023">"通话记录"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"语音邮件"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"快速拨号"</string>
+ <string name="tab_recents" msgid="929949073851377206">"最近"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"联系人"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"已从收藏中移除"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"撤消"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"拨打<xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"添加到通讯录"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"查看全部通话记录"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g>个新的未接电话"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"使用快速拨号功能,只需轻轻一点即可拨打\n收藏联系人的电话号码\n以及经常拨打的电话号码。"</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"您没有联系人。"</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"点按图片可查看所有号码,按住图片可重新排序"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"关闭"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"移除"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"所有联系人"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"回电"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"听取"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"详情"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"<xliff:g id="TIMEOFCALL">%3$s</xliff:g>来自<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>(<xliff:g id="TYPEORLOCATION">%2$s</xliff:g>)的未接电话。"</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"<xliff:g id="TIMEOFCALL">%3$s</xliff:g>来自<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>(<xliff:g id="TYPEORLOCATION">%2$s</xliff:g>)的已接电话。"</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"<xliff:g id="TIMEOFCALL">%3$s</xliff:g>与<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>(<xliff:g id="TYPEORLOCATION">%2$s</xliff:g>)的通话。"</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"给<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>回电"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"听取来自<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>的语音邮件"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"与<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>的通话详情"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"通话记录条目已删除。"</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"今天"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"昨天"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"上周"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"更早"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"通话记录"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"打开扬声器。"</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"关闭扬声器。"</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"快放。"</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"慢放。"</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"开始或暂停播放。"</string>
</resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
new file mode 100644
index 0000000..6e52345
--- /dev/null
+++ b/res/values-zh-rHK/strings.xml
@@ -0,0 +1,183 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ ~ 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
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="applicationLabel" msgid="8490255569343340580">"撥號器"</string>
+ <string name="launcherDialer" msgid="8636288196618486553">"電話"</string>
+ <string name="dialerIconLabel" msgid="6500826552823403796">"電話"</string>
+ <string name="recentCallsIconLabel" msgid="1419116422359067949">"通話記錄"</string>
+ <string name="menu_sendTextMessage" msgid="6937343460284499306">"傳送短訊"</string>
+ <string name="recentCalls_callNumber" msgid="1756372533999226126">"打電話給<xliff:g id="NAME">%s</xliff:g>"</string>
+ <string name="recentCalls_editNumberBeforeCall" msgid="7756171675833267857">"在撥打前編輯號碼"</string>
+ <string name="recentCalls_addToContact" msgid="1429899535546487008">"新增至通訊錄"</string>
+ <string name="recentCalls_removeFromRecentList" msgid="401662244636511330">"從通話記錄中移除"</string>
+ <string name="recentCalls_deleteAll" msgid="6352364392762163704">"清除通話記錄"</string>
+ <string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"刪除留言"</string>
+ <string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"分享留言信箱"</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"無通話記錄。"</string>
+ <string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"要清除通話記錄嗎?"</string>
+ <string name="clearCallLogConfirmation" msgid="5043563133171583152">"即將刪除您所有的通話記錄。"</string>
+ <string name="clearCallLogProgress_title" msgid="8365943000154295771">"正在清除通話記錄…"</string>
+ <plurals name="notification_voicemail_title">
+ <item quantity="one" msgid="1746619685488504230">"話音留言"</item>
+ <item quantity="other" msgid="5513481419205061254">"<xliff:g id="COUNT">%1$d</xliff:g> 個語音留言"</item>
+ </plurals>
+ <string name="notification_action_voicemail_play" msgid="6113133136977996863">"播放"</string>
+ <string name="notification_voicemail_callers_list" msgid="1153954809339404149">"<xliff:g id="NEWER_CALLERS">%1$s</xliff:g> , <xliff:g id="OLDER_CALLER">%2$s</xliff:g>"</string>
+ <string name="notification_new_voicemail_ticker" msgid="895342132049452081">"來自<xliff:g id="CALLER">%1$s</xliff:g>的新語音留言"</string>
+ <string name="voicemail_playback_error" msgid="1811242131549854624">"無法播放留言。"</string>
+ <string name="voicemail_buffering" msgid="738287747618697097">"正在緩衝..."</string>
+ <string name="voicemail_fetching_content" msgid="877911315738258780">"正在擷取留言..."</string>
+ <string name="voicemail_fetching_timout" msgid="6691792377574905201">"無法擷取留言。"</string>
+ <string name="call_log_voicemail_header" msgid="3945407886667089173">"只顯示有留言的來電"</string>
+ <string name="call_log_incoming_header" msgid="2787722299753674684">"只顯示來電"</string>
+ <string name="call_log_outgoing_header" msgid="761009180766735769">"只顯示撥出電話"</string>
+ <string name="call_log_missed_header" msgid="8017148056610855956">"只顯示未接來電"</string>
+ <string name="voicemail_status_voicemail_not_available" msgid="3021980206152528883">"無法連接留言信箱伺服器。"</string>
+ <string name="voicemail_status_messages_waiting" msgid="7113421459602803605">"無法連接留言信箱伺服器,新的留言仍有待聽取。"</string>
+ <string name="voicemail_status_configure_voicemail" msgid="3738537770636895689">"設定您的留言信箱。"</string>
+ <string name="voicemail_status_audio_not_available" msgid="3369618334553341626">"無法使用語音。"</string>
+ <string name="voicemail_status_action_configure" msgid="8671796489912239589">"設定"</string>
+ <string name="voicemail_status_action_call_server" msgid="1824816252288551794">"致電語音信箱號碼"</string>
+ <string name="voicemail_speed_slowest" msgid="1733460666177707312">"最慢速"</string>
+ <string name="voicemail_speed_slower" msgid="1508601287347216244">"慢速"</string>
+ <string name="voicemail_speed_normal" msgid="9033988544627228892">"正常速度"</string>
+ <string name="voicemail_speed_faster" msgid="2019965121475935488">"快速"</string>
+ <string name="voicemail_speed_fastest" msgid="5758712343491183292">"最快速"</string>
+ <string name="call_log_item_count_and_date" msgid="7641933305703520787">"( <xliff:g id="COUNT">%1$d</xliff:g> ) <xliff:g id="DATE">%2$s</xliff:g>"</string>
+ <string name="sms_disambig_title" msgid="5846266399240630846">"選擇號碼"</string>
+ <string name="call_disambig_title" msgid="4392886850104795739">"選擇號碼"</string>
+ <string name="make_primary" msgid="5829291915305113983">"記住這個選擇"</string>
+ <string name="description_image_button_one" msgid="1740638037139856139">"一"</string>
+ <string name="description_image_button_two" msgid="5882638439003731308">"二"</string>
+ <string name="description_image_button_three" msgid="8709731759376015180">"三"</string>
+ <string name="description_image_button_four" msgid="3530239685642246130">"四"</string>
+ <string name="description_image_button_five" msgid="1182465427501188413">"五"</string>
+ <string name="description_image_button_six" msgid="2093656269261415475">"六"</string>
+ <string name="description_image_button_seven" msgid="2450357020447676481">"七"</string>
+ <string name="description_image_button_eight" msgid="6969435115163287801">"八"</string>
+ <string name="description_image_button_nine" msgid="7857248695662558323">"九"</string>
+ <string name="description_image_button_star" msgid="3365919907520767866">"星號"</string>
+ <string name="description_image_button_zero" msgid="4133108949401820710">"零"</string>
+ <string name="description_image_button_pound" msgid="3039765597595889230">"井號鍵"</string>
+ <string name="description_search_button" msgid="3660807558587384889">"搜尋"</string>
+ <string name="description_dial_button" msgid="1274091017188142646">"撥號"</string>
+ <string name="description_digits_edittext" msgid="8760207516497016437">"致電號碼"</string>
+ <string name="action_menu_call_history_description" msgid="9018442816219748968">"通話記錄"</string>
+ <string name="action_menu_overflow_description" msgid="2303272250613084574">"更多選項"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"撥號盤"</string>
+ <string name="menu_copy" msgid="6108677035381940698">"複製"</string>
+ <string name="menu_show_outgoing_only" msgid="1965570298133301970">"只顯示撥出電話"</string>
+ <string name="menu_show_incoming_only" msgid="7534206815238877417">"只顯示來電"</string>
+ <string name="menu_show_missed_only" msgid="154473166059743996">"只顯示未接來電"</string>
+ <string name="menu_show_voicemails_only" msgid="1898421289561435703">"僅顯示語音留言"</string>
+ <string name="menu_show_all_calls" msgid="7560347482073345885">"顯示所有通話"</string>
+ <string name="add_contact" msgid="8875804371377471164">"新增聯絡人"</string>
+ <string name="add_2sec_pause" msgid="9214012315201040129">"新增 2 秒暫停功能"</string>
+ <string name="add_wait" msgid="3360818652790319634">"新增插播功能"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"選取 [訂閱]"</string>
+ <string name="call_settings" msgid="7666474782093693667">"設定"</string>
+ <string name="menu_newContact" msgid="1209922412763274638">"新增聯絡人"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"所有聯絡人"</string>
+ <string name="callDetailTitle" msgid="5340227785196217938">"通話詳細資料"</string>
+ <string name="toast_call_detail_error" msgid="7200975244804730096">"無法讀取所需通話的詳細資訊。"</string>
+ <string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"使用觸控音頻按鍵"</string>
+ <string name="dialer_returnToInCallScreen" msgid="3719386377550913067">"返回進行中的通話"</string>
+ <string name="dialer_addAnotherCall" msgid="4205688819890074468">"新增通話"</string>
+ <string name="type_incoming" msgid="6502076603836088532">"來電"</string>
+ <string name="type_outgoing" msgid="343108709599392641">"撥出電話"</string>
+ <string name="type_missed" msgid="2720502601640509542">"未接來電"</string>
+ <string name="type_voicemail" msgid="5153139450668549908">"留言信箱"</string>
+ <string name="actionIncomingCall" msgid="6028930669817038600">"來電"</string>
+ <string name="description_call_log_play_button" msgid="651182125650429846">"播放語音留言"</string>
+ <string name="description_call_log_incoming_call" msgid="4485427487637250143">"來電"</string>
+ <string name="description_call_log_outgoing_call" msgid="604831756853471658">"撥出電話"</string>
+ <string name="description_call_log_missed_call" msgid="2242805209983708825">"未接來電"</string>
+ <string name="description_call_log_voicemail" msgid="4600798771975158948">"語音信箱"</string>
+ <string name="description_view_contact" msgid="5205669345700598415">"查看聯絡人<xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_call" msgid="3443678121983852666">"致電<xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」的聯絡人詳細資料"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"新留言。"</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> 次通話次數。"</string>
+ <string name="description_send_text_message" msgid="7803126439934046891">"發短訊給<xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"未聽取的語音留言"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"開始語音搜尋"</string>
+ <string name="menu_callNumber" msgid="997146291983360266">"撥打 <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="unknown" msgid="740067747858270469">"未知"</string>
+ <string name="voicemail" msgid="3851469869202611441">"留言"</string>
+ <string name="private_num" msgid="6374339738119166953">"私人號碼"</string>
+ <string name="payphone" msgid="4864313342828942922">"公共電話"</string>
+ <string name="dialerKeyboardHintText" msgid="5401660096579787344">"使用鍵盤撥號"</string>
+ <string name="dialerDialpadHintText" msgid="5824490365898349041">"撥號即可新增通話"</string>
+ <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> 分 <xliff:g id="SECONDS">%s</xliff:g> 秒"</string>
+ <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"未傳送通話"</string>
+ <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"如要設定留言信箱,請移至 [選單] > [設定]。"</string>
+ <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"如要致電留言信箱,請先關閉飛行模式。"</string>
+ <string name="contact_list_loading" msgid="5488620820563977329">"正在載入..."</string>
+ <string name="imei" msgid="3045126336951684285">"IMEI"</string>
+ <string name="meid" msgid="6210568493746275750">"MEID"</string>
+ <string name="simContacts_emptyLoading" msgid="6700035985448642408">"正在從 SIM 卡載入..."</string>
+ <string name="simContacts_title" msgid="27341688347689769">"SIM 卡聯絡人"</string>
+ <string name="add_contact_not_available" msgid="1419207765446461366">"請重新啟用「通訊錄」應用程式,才能使用這項功能。"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"無法使用語音搜尋功能。"</string>
+ <string name="call_not_available" msgid="8941576511946492225">"由於「電話」應用程式已停用,因此無法打電話。"</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"沒有任何已安裝的活動可以處理指定操作。"</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"輸入姓名或電話號碼"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"最近沒有未接來電。"</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"最近沒有語音留言。"</string>
+ <string name="show_favorites_only" msgid="5520072531022614595">"只顯示我的最愛"</string>
+ <string name="call_log_activity_title" msgid="4612824396355272023">"記錄"</string>
+ <string name="call_log_all_title" msgid="3566738938889333307">"全部"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"未接來電"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"留言信箱"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"快速撥號"</string>
+ <string name="tab_recents" msgid="929949073851377206">"最近存取的聯絡人"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"聯絡人"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"已從「我的最愛」中移除"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"復原"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"撥打 <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"加入通訊錄"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"查看完整通話記錄"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> 個新的未接來電"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"快速撥號功能讓您只要輕觸一下\n即可撥號給最愛聯絡人\n以及經常撥打的號碼。"</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"您沒有聯絡人。"</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"輕按相片可查看所有號碼,按住則可重新排序"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"關閉"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"移除"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"所有聯絡人"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"回撥電話"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"收聽"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"詳情"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"未接來電:「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」(<xliff:g id="TYPEORLOCATION">%2$s</xliff:g>),通話時間:<xliff:g id="TIMEOFCALL">%3$s</xliff:g>。"</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"已接來電:「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」(<xliff:g id="TYPEORLOCATION">%2$s</xliff:g>),通話時間:<xliff:g id="TIMEOFCALL">%3$s</xliff:g>。"</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"與「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」通話 (<xliff:g id="TYPEORLOCATION">%2$s</xliff:g>),通話時間:<xliff:g id="TIMEOFCALL">%3$s</xliff:g>。"</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"回撥電話給「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"收聽來自「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」的留言信箱"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"與「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」通話的詳細資料"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"已刪除通話記錄項目。"</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"今天"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"昨天"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"上星期"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"較早"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"通話清單"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"開啟揚聲器。"</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"關閉揚聲器。"</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"加快播放速度。"</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"放慢播放速度。"</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"開始或暫停播放。"</string>
+</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 935ff58..b042759 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"清除通話紀錄"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"刪除語音留言"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"分享語音信箱"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"無通話紀錄。"</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"無通話紀錄。"</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"確定要清除通話紀錄?"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"即將刪除您所有的通話紀錄。"</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"正在清除通話紀錄…"</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"緩衝處理中…"</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"正在擷取語音留言..."</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"無法擷取語音留言。"</string>
- <string name="call_log_new_header" msgid="846546437517724715">"最新"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"較舊"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"僅顯示語音信箱留言"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"僅顯示來電"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"僅顯示已撥電話"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"星號"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"0"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"磅"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"語音信箱"</string>
<string name="description_search_button" msgid="3660807558587384889">"搜尋"</string>
<string name="description_dial_button" msgid="1274091017188142646">"撥號"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"Backspace"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"撥號號碼"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"通話紀錄"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"更多選項"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"撥號鍵盤"</string>
<string name="menu_copy" msgid="6108677035381940698">"複製"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"僅顯示撥出電話"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"僅顯示來電"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"僅顯示未接來電"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"僅顯示語音留言"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"顯示所有通話"</string>
- <string name="add_2sec_pause" msgid="9214012315201040129">"新增 2 秒暫停功能"</string>
- <string name="add_wait" msgid="3360818652790319634">"新增插播功能"</string>
+ <string name="add_contact" msgid="8875804371377471164">"新增聯絡人"</string>
+ <string name="add_2sec_pause" msgid="9214012315201040129">"暫停時間延長 2 秒"</string>
+ <string name="add_wait" msgid="3360818652790319634">"延長等待時間"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"選取訂閱"</string>
<string name="call_settings" msgid="7666474782093693667">"設定"</string>
<string name="menu_newContact" msgid="1209922412763274638">"新增聯絡人"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"所有聯絡人"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"通話詳細資料"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"無法解讀通話要求詳細資訊。"</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"使用觸控音按鍵"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"已撥電話"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"未接來電"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"語音留言"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"新增聯絡人"</string>
<string name="description_view_contact" msgid="5205669345700598415">"查看聯絡人<xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"撥電話給<xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」的聯絡詳細資料"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"新的語音留言。"</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"通話 <xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> 次。"</string>
<string name="description_send_text_message" msgid="7803126439934046891">"傳送簡訊給<xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"未聽取的語音留言"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"開始進行語音搜尋"</string>
<string name="menu_callNumber" msgid="997146291983360266">"撥打 <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"不明"</string>
<string name="voicemail" msgid="3851469869202611441">"語音留言"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"從 SIM 卡讀取中…"</string>
<string name="simContacts_title" msgid="27341688347689769">"SIM 卡聯絡人"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"您必須重新啟用「使用者」應用程式,才能使用這項功能。"</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"輸入姓名或電話"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"無法使用語音搜尋。"</string>
+ <string name="call_not_available" msgid="8941576511946492225">"「電話」應用程式已遭停用,因此無法撥打電話。"</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"沒有任何已安裝的活動可以處理指定的操作。"</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"輸入姓名或電話號碼"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"最近沒有未接來電。"</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"最近沒有語音留言。"</string>
+ <string name="show_favorites_only" msgid="5520072531022614595">"只顯示我的收藏"</string>
+ <string name="call_log_activity_title" msgid="4612824396355272023">"通話紀錄"</string>
<string name="call_log_all_title" msgid="3566738938889333307">"全部"</string>
<string name="call_log_missed_title" msgid="4541142293870638971">"未接來電"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"最近沒有未接來電。"</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"最近沒有語音留言。"</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"顯示所有聯絡人"</string>
- <string name="show_favorites_only" msgid="5520072531022614595">"只顯示我的最愛"</string>
- <string name="call_log_activity_title" msgid="4612824396355272023">"通話紀錄"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"語音留言"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"快速撥號"</string>
+ <string name="tab_recents" msgid="929949073851377206">"最近存取過"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"聯絡人"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"已從最愛的聯絡人移除"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"復原"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"撥打 <xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"新增為聯絡人"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"查看完整通話紀錄"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> 通新的未接來電"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"使用快速撥號功能,只要輕觸一下\n即可撥號給最愛聯絡人\n以及經常撥打的號碼。"</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"您沒有聯絡人。"</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"輕按圖片即可查看所有號碼,按住圖片則可重新排序"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"關閉"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"移除"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"所有聯絡人"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"回電"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"聽取"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"詳細資料"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"未接來電,來自「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」,<xliff:g id="TYPEORLOCATION">%2$s</xliff:g>,<xliff:g id="TIMEOFCALL">%3$s</xliff:g>。"</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"已接來電,來自「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」,<xliff:g id="TYPEORLOCATION">%2$s</xliff:g>,<xliff:g id="TIMEOFCALL">%3$s</xliff:g>。"</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"撥號給「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」,<xliff:g id="TYPEORLOCATION">%2$s</xliff:g>,<xliff:g id="TIMEOFCALL">%3$s</xliff:g>。"</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"回電給「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"聽取「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」的語音留言"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"與「<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>」通話的詳細資料"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"通話紀錄項目已刪除。"</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"今天"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"昨天"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"上週"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"較舊"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"通話清單"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"開啟喇叭。"</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"關閉喇叭。"</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"加快播放速度。"</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"放慢播放速度。"</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"開始或暫停播放。"</string>
</resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index b994076..6148814 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -29,7 +29,7 @@
<string name="recentCalls_deleteAll" msgid="6352364392762163704">"Sula ifayela lokungena"</string>
<string name="recentCalls_trashVoicemail" msgid="7604696960787435655">"Susa imeyili yezwi"</string>
<string name="recentCalls_shareVoicemail" msgid="1416112847592942840">"Abelana nemeyili yezwi"</string>
- <string name="recentCalls_empty" msgid="247053222448663107">"Ilogu yamakholi alinalutho."</string>
+ <string name="recentCalls_empty" msgid="7711926651216108723">"Irekhodi lakho lamakholi alinalutho."</string>
<string name="clearCallLogConfirmation_title" msgid="6427524640461816332">"Sula ifayela lokungena"</string>
<string name="clearCallLogConfirmation" msgid="5043563133171583152">"Yonke imininingwane eqoshiwe iyosuswa."</string>
<string name="clearCallLogProgress_title" msgid="8365943000154295771">"Isula imininingwane yokushaya..."</string>
@@ -44,8 +44,6 @@
<string name="voicemail_buffering" msgid="738287747618697097">"Ukugcina kumthamo"</string>
<string name="voicemail_fetching_content" msgid="877911315738258780">"ilanda i-voicemail..."</string>
<string name="voicemail_fetching_timout" msgid="6691792377574905201">"Yehlulekile ukulanda i-voicemail."</string>
- <string name="call_log_new_header" msgid="846546437517724715">"Okusha"</string>
- <string name="call_log_old_header" msgid="6262205894314263629">"Okudadlana"</string>
<string name="call_log_voicemail_header" msgid="3945407886667089173">"Amakholi anevoyisimeyili kuphela"</string>
<string name="call_log_incoming_header" msgid="2787722299753674684">"Amakholi angenayo kuphela"</string>
<string name="call_log_outgoing_header" msgid="761009180766735769">"Amakholi aphumayo kuphela"</string>
@@ -77,23 +75,25 @@
<string name="description_image_button_star" msgid="3365919907520767866">"ikanyezi"</string>
<string name="description_image_button_zero" msgid="4133108949401820710">"lutho"</string>
<string name="description_image_button_pound" msgid="3039765597595889230">"iphawundi"</string>
- <string name="description_voicemail_button" msgid="3402506823655455591">"Umyalezo wezwi"</string>
<string name="description_search_button" msgid="3660807558587384889">"sesha"</string>
<string name="description_dial_button" msgid="1274091017188142646">"dayela"</string>
- <string name="description_delete_button" msgid="6263102114033407382">"i-backspace"</string>
<string name="description_digits_edittext" msgid="8760207516497016437">"inombolo okumele uyidayele"</string>
<string name="action_menu_call_history_description" msgid="9018442816219748968">"Umlando wekholi"</string>
<string name="action_menu_overflow_description" msgid="2303272250613084574">"Izinketho eziningi"</string>
+ <string name="action_menu_dialpad_button" msgid="1425910318049008136">"okokudayila"</string>
<string name="menu_copy" msgid="6108677035381940698">"Kopisha"</string>
<string name="menu_show_outgoing_only" msgid="1965570298133301970">"Bonisa eziphumayo kuphela"</string>
<string name="menu_show_incoming_only" msgid="7534206815238877417">"Bonisa okungenayo kuphela"</string>
<string name="menu_show_missed_only" msgid="154473166059743996">"Bonisa okugejiwe kuphela"</string>
<string name="menu_show_voicemails_only" msgid="1898421289561435703">"Bonisa ama-imeyli ezwi kuphela"</string>
<string name="menu_show_all_calls" msgid="7560347482073345885">"Bonisa zonke izingcingo ezenziwe"</string>
+ <string name="add_contact" msgid="8875804371377471164">"Engeza oxhumana naye"</string>
<string name="add_2sec_pause" msgid="9214012315201040129">"Faka ukumisa okwesikhashana kwamasekhondi angu-2"</string>
<string name="add_wait" msgid="3360818652790319634">"Yengeza ukulinda"</string>
+ <string name="menu_select_subscription" msgid="363190251770943468">"Khetha imali ekhishelwayo"</string>
<string name="call_settings" msgid="7666474782093693667">"Izilungiselelo"</string>
<string name="menu_newContact" msgid="1209922412763274638">"Othintana naye omusha"</string>
+ <string name="menu_allContacts" msgid="6948308384034051670">"Bonke oxhumana nabo"</string>
<string name="callDetailTitle" msgid="5340227785196217938">"Imininingwane yokushayela"</string>
<string name="toast_call_detail_error" msgid="7200975244804730096">"Ayikwazanga ukufunda imininingwane yokushayela okuceliwe."</string>
<string name="dialer_useDtmfDialpad" msgid="1707548397435075040">"Sebenzisa ikhiphedi yethoni yokuthinta"</string>
@@ -109,14 +109,14 @@
<string name="description_call_log_outgoing_call" msgid="604831756853471658">"Ikholi eliphumayo"</string>
<string name="description_call_log_missed_call" msgid="2242805209983708825">"Ikholi ekulahlekele"</string>
<string name="description_call_log_voicemail" msgid="4600798771975158948">"Ivoyisimeyili"</string>
- <string name="description_add_contact" msgid="3103414772502485851">"Faka oxhumana naye"</string>
<string name="description_view_contact" msgid="5205669345700598415">"Bheka oxhumana naye <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call" msgid="3443678121983852666">"Fonela <xliff:g id="NAME">%1$s</xliff:g>"</string>
+ <string name="description_contact_details" msgid="51229793651342809">"Imininingwane yokuxhumana ka-<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_new_voicemail" msgid="2133792360865517746">"Ivoyisimeyili entsha."</string>
+ <string name="description_num_calls" msgid="1601505153694540074">"<xliff:g id="NUMBEROFCALLS">%1$s</xliff:g> amakholi."</string>
<string name="description_send_text_message" msgid="7803126439934046891">"Hambisa umyalezo ku <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="description_call_log_unheard_voicemail" msgid="118101684236996786">"I-imeyli yezwi engazwakalanga"</string>
- <!-- no translation found for description_start_voice_search (520539488194946012) -->
- <skip />
- <string name="call_log_empty_gecode" msgid="5588904744812100846">"-"</string>
+ <string name="description_start_voice_search" msgid="520539488194946012">"Qalisa ukusesha ngezwi"</string>
<string name="menu_callNumber" msgid="997146291983360266">"Shayela <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="unknown" msgid="740067747858270469">"Akwaziwa"</string>
<string name="voicemail" msgid="3851469869202611441">"Ivoyisimeyili"</string>
@@ -134,20 +134,50 @@
<string name="simContacts_emptyLoading" msgid="6700035985448642408">"Ilayisha kusuka ekhadini le-SIM..."</string>
<string name="simContacts_title" msgid="27341688347689769">"Othintana nabo bekhadi le-SIM"</string>
<string name="add_contact_not_available" msgid="1419207765446461366">"Phinda unike amandla uhlelo lokusebenza lwabantu ukuze basebenzise lesi sici."</string>
- <string name="dialer_hint_find_contact" msgid="9190419749917566623">"Thayipha igama noma ifoni"</string>
- <string name="call_log_all_title" msgid="3566738938889333307">"Konke"</string>
- <string name="call_log_missed_title" msgid="4541142293870638971">"Phuthelwe"</string>
- <string name="recentMissed_empty" msgid="5427113551557296665">"Awekho amakholi wakamuva aphuthelwe."</string>
- <string name="recentVoicemails_empty" msgid="5163114119598014048">"Awekho amavoyisimeyili wakamuva."</string>
- <string name="show_all_contacts" msgid="1732256558071778056">"Bonakalisa bonke oxhumana nabo"</string>
+ <string name="voice_search_not_available" msgid="7580616740587850828">"Ukusesha ngezwi akutholakali."</string>
+ <string name="call_not_available" msgid="8941576511946492225">"Ayikwazi ukwenza ikholi yefoni ngoba uhlelo lokusebenza lwefoni likhutshaziwe."</string>
+ <string name="activity_not_available" msgid="8265265380537872585">"Awukho umsebenzi ofakiwe otholakalayo ukuze uphathe isenzo esikhethiwe."</string>
+ <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Thayipha igama noma inombolo yefoni"</string>
+ <string name="recentMissed_empty" msgid="4177320482947526015">"Awunawo amakholi wakamuva owaphuthelwe."</string>
+ <string name="recentVoicemails_empty" msgid="4905583746647459963">"Awunawo amavoyisimeyili wakamuva."</string>
<string name="show_favorites_only" msgid="5520072531022614595">"Bonisa izintandokazi kuphela"</string>
<string name="call_log_activity_title" msgid="4612824396355272023">"Umlando"</string>
- <!-- no translation found for show_all_contacts_title (8395378484578221791) -->
- <skip />
- <!-- no translation found for show_all_contacts_button_text (8057452310403090131) -->
- <skip />
- <!-- no translation found for favorite_hidden (4837366417440391323) -->
- <skip />
- <!-- no translation found for favorite_hidden_undo (2508998611039406474) -->
- <skip />
+ <string name="call_log_all_title" msgid="3566738938889333307">"Konke"</string>
+ <string name="call_log_missed_title" msgid="4541142293870638971">"Phuthelwe"</string>
+ <string name="call_log_voicemail_title" msgid="940422274047025948">"Ivoyisimeyili"</string>
+ <string name="tab_speed_dial" msgid="7807567599021643864">"Ukudayela okusheshayo"</string>
+ <string name="tab_recents" msgid="929949073851377206">"Okwakamuva"</string>
+ <string name="tab_all_contacts" msgid="1410922767166533690">"Oxhumana nabo"</string>
+ <string name="favorite_hidden" msgid="5011234945140912047">"Kukhishiwe kusuka kuzintandokazi"</string>
+ <string name="favorite_hidden_undo" msgid="2508998611039406474">"Hlehlisa"</string>
+ <string name="search_shortcut_call_number" msgid="7277194656832895870">"Shayela ku-<xliff:g id="NUMBER">%s</xliff:g>"</string>
+ <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Engeza koxhumana nabo"</string>
+ <string name="recents_footer_text" msgid="7315554578957453359">"Buka wonke umlando wekholi"</string>
+ <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> amakholi amasha owaphuthelwe"</string>
+ <string name="speed_dial_empty" msgid="5476435149276295630">"Ukudayela ngokushesha kungukudayela kokuthinta okukodwa\nkwezintandokazi nezinombolo\n ozishayela ngokuvamile."</string>
+ <string name="all_contacts_empty" msgid="4536082452651392894">"Awunabo oxhumana nabo."</string>
+ <string name="contact_tooltip" msgid="7817483485692282287">"Thepha isithombe ukuze ubone zonke izinombolo noma cindezela uphinde ubambe ukuze uhlele kabusha"</string>
+ <string name="description_dismiss" msgid="2146276780562549643">"Cashisa"</string>
+ <string name="remove_contact" msgid="1080555335283662961">"Susa"</string>
+ <string name="favorites_menu_all_contacts" msgid="992506284449891186">"BONKE OXHUMANA NABO"</string>
+ <string name="call_log_action_call_back" msgid="4944463006859852473">"SHAYA FUTHI"</string>
+ <string name="call_log_action_voicemail" msgid="4978620572562925654">"LALELA"</string>
+ <string name="call_log_action_details" msgid="6252596497021563115">"IMINININGWANE"</string>
+ <string name="description_incoming_missed_call" msgid="2610535352863246949">"Ikholi ephuthelwe esuka ku-<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_incoming_answered_call" msgid="7206670204016969740">"Ikholi ephenduliwe kusukela ku-<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_outgoing_call" msgid="3964211633673659733">"Ikholi eya ku-<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>, <xliff:g id="TYPEORLOCATION">%2$s</xliff:g>, <xliff:g id="TIMEOFCALL">%3$s</xliff:g>."</string>
+ <string name="description_call_back_action" msgid="3012837380108884260">"Phinda ushayele u-<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_voicemail_action" msgid="8054891873788903063">"Lalela ivoyisimeyili esuka ku-<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="description_details_action" msgid="2433827152749491785">"Imininingwane yekholi ye-<xliff:g id="NAMEORNUMBER">%1$s</xliff:g>"</string>
+ <string name="toast_entry_removed" msgid="3389119736202317999">"Ukufakwa kurekhodi lamakholi kususiwe."</string>
+ <string name="call_log_header_today" msgid="3225248682434212981">"Namhlanje"</string>
+ <string name="call_log_header_yesterday" msgid="9139172458834033092">"Izolo"</string>
+ <string name="call_log_header_last_week" msgid="5197040511028258038">"Iviki eledlule"</string>
+ <string name="call_log_header_other" msgid="5769921959940709084">"Okudala"</string>
+ <string name="call_detail_list_header" msgid="866455969433213220">"Uhlu lwekholi"</string>
+ <string name="voicemail_speaker_on" msgid="209154030283487068">"Vula isipikha."</string>
+ <string name="voicemail_speaker_off" msgid="7390530056413093958">"Vala isipikha."</string>
+ <string name="voicemail_play_faster" msgid="3444751008615323006">"Dala ngokushesha."</string>
+ <string name="voicemail_play_slower" msgid="4544796503902818832">"Dlala ngokungasheshi."</string>
+ <string name="voicemail_play_start_pause" msgid="3687447935787768983">"Qala noma misa isikhashana ukudlala."</string>
</resources>
diff --git a/res/values/animation_constants.xml b/res/values/animation_constants.xml
index 4e4bc36..7863060 100644
--- a/res/values/animation_constants.xml
+++ b/res/values/animation_constants.xml
@@ -27,4 +27,16 @@
<dimen name="min_swipe">0dip</dimen>
<dimen name="min_vert">10dip</dimen>
<dimen name="min_lock">20dip</dimen>
+
+ <!-- Expand/collapse of call log entry duration. -->
+ <integer name="call_log_expand_collapse_duration">200</integer>
+
+ <!-- Start delay for the fade in of the call log actions. -->
+ <integer name="call_log_actions_fade_start">150</integer>
+
+ <!-- Duration of the fade in of the call log actions. -->
+ <integer name="call_log_actions_fade_in_duration">200</integer>
+
+ <!-- Duration of the fade out of the call log actions. -->
+ <integer name="call_log_actions_fade_out_duration">20</integer>
</resources>
diff --git a/res/values/attrs.xml b/res/values/attrs.xml
index f734aae..23f639f 100644
--- a/res/values/attrs.xml
+++ b/res/values/attrs.xml
@@ -31,4 +31,6 @@
<attr name="call_log_voicemail_status_action_text_color" format="color" />
</declare-styleable>
+ <declare-styleable name="SearchEditTextLayout" />
+
</resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index 8712b25..6624c2d 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -15,23 +15,11 @@
-->
<resources>
-
- <!-- Secondary text color in the Phone app -->
+ <!-- Primary text color in the Dialer -->
<color name="dialtacts_primary_text_color">#000000</color>
+ <!-- Secondary text color in the Dialer -->
<color name="dialtacts_secondary_text_color">#888888</color>
-
- <!-- Background color of dialpad -->
- <color name="background_dialpad">#ffffff</color>
- <!-- Pressed color of dialpad buttons -->
- <color name="background_dialpad_pressed">#ececec</color>
- <!-- Primary color of dialpad text, including the call button -->
- <color name="dialpad_primary_text_color">#3B77E7</color>
- <!-- Secondary color of dialpad text (used for the letters corresponding to each digit -->
- <color name="dialpad_secondary_text_color">#8b8b8b</color>
- <!-- Color of dialpad digits -->
- <color name="dialpad_digits_text_color">#000000</color>
- <!-- Color for dialpad separator lines -->
- <color name="dialpad_separator_line_color">#dadada</color>
+ <color name="dialer_accent_color">#eeff41</color>
<!-- Color of the text describing an unconsumed missed call. -->
<color name="call_log_missed_call_highlight_color">#FF0000</color>
@@ -51,85 +39,58 @@
<!-- Standard color for selected items. -->
<color name="item_selected">#660099cc</color>
+ <!-- White background for dialer -->
+ <color name="background_dialer_white">#ffffff</color>
<!-- Background color of new dialer activity -->
- <color name="background_dialer_light">#eeeeee</color>
-
+ <color name="background_dialer_light">#f6f6f6</color>
<!-- Background color of dialer list items (contacts, call log entries) -->
- <color name="background_dialer_list_items">#eeeeee</color>
+ <color name="background_dialer_list_items">@color/background_dialer_light</color>
- <!-- Background color of action bars -->
- <color name="actionbar_background_color">#3B77E7</color>
-
- <!-- Underline color of action bars -->
- <color name="actionbar_underline">#3265C1</color>
+ <color name="search_shortcut_background_color">#b6b6b6</color>
+ <color name="search_shortcut_icon_color">#f8f8f8</color>
<!-- Color of the 1dp divider that separates favorites -->
<color name="favorite_contacts_separator_color">#d0d0d0</color>
- <!-- Background color of the search box -->
- <color name="searchbox_background_color">#ffffff</color>
- <!-- Text color of the search box text as entered by user -->
- <color name="searchbox_text_color">#000000</color>
- <!-- Text color of the search box hint text -->
- <color name="searchbox_hint_text_color">#d3d3d3</color>
+ <color name="searchbox_icon_tint">#a4a4a4</color>
<!-- Color of the contact name in favorite tiles -->
<color name="contact_tile_name_color">#ffffff</color>
+ <color name="contact_list_name_text_color">#4d4d4d</color>
+
<!-- Undo dialogue color -->
<color name="undo_dialogue_text_color">#4d4d4d</color>
- <!-- Text color for no favorites message -->
- <color name="nofavorite_text_color">#777777</color>
+ <color name="empty_list_text_color">#b2b2b2</color>
- <!-- Text color for the "Remove" text in its regular state -->
- <color name="remove_text_color">#555555</color>
+ <color name="remove_text_color">#ffffff</color>
<!-- Text color for the "Remove" text when a contact is dragged on top of the remove view -->
<color name="remove_highlighted_text_color">#FF3F3B</color>
- <!-- Text color for the "speed dial" label in the favorites menu. -->
- <color name="speed_dial_text_color">#555555</color>
-
- <!-- Background color for the "All Contacts" button in the favorites menu. -->
- <color name="all_contacts_button_color">#999999</color>
-
- <!-- Background color for the favorites menu when pressed. -->
- <color name="favorites_menu_pressed_color">#d6d6d6</color>
-
- <!-- Background color for the favorites menu. -->
- <color name="favorites_menu_background_color">#ebebeb</color>
-
- <!-- Text color for the "All Contacts" button above the favorite callers -->
- <color name="all_contacts_button_text_color">#ffffff</color>
-
- <!-- Background gradient start color for tabs in an unpressed state. -->
- <color name="tab_background_gradient_start_color">#d3d3d3</color>
-
- <!-- Background gradient end color for tabs in an unpressed state. -->
- <color name="tab_background_gradient_end_color">#ebebeb</color>
-
- <!-- Background gradient start color for tabs in a pressed state. -->
- <color name="tab_background_gradient_start_pressed_color">#c4c4c4</color>
-
- <!-- Background gradient end color for tabs in a pressed state. -->
- <color name="tab_background_gradient_end_pressed_color">#dedede</color>
-
- <!-- Color of the underline for a tab which is selected. -->
- <color name="tab_underline_selected_color">#3265c1</color>
-
- <!-- Color of the underline for a tab which is not selected. -->
- <color name="tab_underline_color">#c8c8c8</color>
-
- <!-- Color of the selection indicator for a tab which is selected. -->
- <color name="tab_selected_color">#3b77e7</color>
-
- <!-- Color of tab text. -->
- <color name="tab_text_color">#505050</color>
-
<!-- Color of the bottom border below the contacts grid on the main dialer screen. -->
<color name="contacts_grid_bottom_border_color">#16000000</color>
- <!-- Color of action bar text. -->
- <color name="actionbar_text_color">#FFFFFF</color>
+ <color name="call_log_expanded_background_color">#ffffff</color>
+ <!-- Color of actions in expanded call log entries. This text color represents actions such
+ as call back, play voicemail, etc. -->
+ <color name="call_log_action_text">#1dc7db</color>
+
+ <!-- Color of view full call history item text. -->
+ <color name="view_full_call_history_color">#1dc7db</color>
+
+ <!-- Color for missed call icons. -->
+ <color name="missed_call">#ff2e58</color>
+
+ <!-- Color for answered or outgoing call icons. -->
+ <color name="answered_call">#2aad6f</color>
+
+ <!-- Color for icons in the actionbar -->
+ <color name="actionbar_icon_color">#ffffff</color>
+
+ <color name="dialer_dialpad_touch_tint">#331dc7db</color>
+
+ <color name="tab_ripple_color">@color/dialer_accent_color</color>
+ <color name="tab_selected_underline_color">@color/dialer_accent_color</color>
</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 9490d8d..86604ed 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -15,10 +15,6 @@
~ limitations under the License
-->
<resources>
-
- <!-- Search View -->
- <dimen name="search_text_size">14sp</dimen>
-
<!--
Drag to remove view (in dp because it is used in conjunction with a statically
sized icon
@@ -30,104 +26,109 @@
<dimen name="call_log_call_action_width">54dp</dimen>
<dimen name="call_log_icon_margin">4dip</dimen>
<dimen name="call_log_inner_margin">8dip</dimen>
- <dimen name="call_log_outer_margin">8dip</dimen>
+ <dimen name="call_log_outer_margin">8dp</dimen>
+ <dimen name="call_log_start_margin">16dp</dimen>
<dimen name="call_log_indent_margin">24dip</dimen>
+ <dimen name="call_log_name_margin_bottom">2dp</dimen>
<dimen name="call_log_list_item_height">56dip</dimen>
- <dimen name="call_log_list_contact_photo_size">64dip</dimen>
- <dimen name="call_detail_contact_name_margin">24dip</dimen>
+
+ <!-- Size of contact photos in the call log and call details. -->
+ <dimen name="contact_photo_size">40dp</dimen>
<dimen name="call_detail_button_spacing">2dip</dimen>
- <!-- Defines the vertical margin for the vertical separator between
- the main area of a call log entry and the secondary action button. -->
- <dimen name="call_log_list_item_vertical_divider_margin">17dp</dimen>
+ <dimen name="call_detail_horizontal_margin">16dp</dimen>
+ <dimen name="call_detail_top_margin">36dp</dimen>
+ <dimen name="call_detail_bottom_margin">32dp</dimen>
+ <dimen name="call_detail_header_top_margin">24dp</dimen>
+ <dimen name="call_detail_translation_z">0.5dp</dimen>
- <!-- Defines the width of the vertical separator between
- the main area of a call log entry and the secondary action button. -->
- <dimen name="call_log_list_item_vertical_divider_width">1dp</dimen>
-
- <!-- Text dimensions for dialpad keys -->
- <dimen name="dialpad_key_numbers_size">40sp</dimen>
- <dimen name="dialpad_key_letters_size">13sp</dimen>
- <dimen name="dialpad_key_star_pound_size">26sp</dimen>
- <dimen name="dialpad_key_numbers_width">30dp</dimen>
- <dimen name="dialpad_key_letters_width">50dp</dimen>
- <dimen name="dialpad_key_height">56dp</dimen>
- <dimen name="dialpad_key_plus_size">18sp</dimen>
- <dimen name="dialpad_number_to_letters_padding">11dp</dimen>
- <dimen name="dialpad_horizontal_padding">5dp</dimen>
- <dimen name="dialpad_digits_text_size">36sp</dimen>
- <dimen name="dialpad_digits_height">47dp</dimen>
- <dimen name="dialpad_digits_padding">16dp</dimen>
- <dimen name="dialpad_digits_margin_bottom">0px</dimen>
- <dimen name="dialpad_center_margin">3dp</dimen>
- <dimen name="dialpad_button_margin">2dp</dimen>
<!-- Match call_button_height to Phone's dimens/in_call_end_button_height -->
<dimen name="call_button_height">74dp</dimen>
- <dimen name="fake_action_bar_height">60dp</dimen>
- <!-- Min with of fake menu buttons, which should be same as ActionBar's one -->
- <dimen name="fake_menu_button_min_width">56dp</dimen>
- <!-- Favorites tile and recent call log padding -->
- <dimen name="contact_tile_divider_width">12dp</dimen>
- <!-- Favorites tile and recent call log padding -->
- <dimen name="contact_tile_divider_padding">3dp</dimen>
+ <!-- Dimensions for speed dial tiles -->
+ <dimen name="contact_tile_divider_width">1dp</dimen>
<dimen name="contact_tile_info_button_height_and_width">36dp</dimen>
- <item name="contact_tile_height_to_width_ratio" type="dimen">67%</item>
- <dimen name="contact_tile_text_side_padding">10dp</dimen>
- <dimen name="contact_tile_text_bottom_padding">8dp</dimen>
- <dimen name="favorites_row_top_padding">6dp</dimen>
- <dimen name="favorites_row_bottom_padding">6dp</dimen>
- <dimen name="favorites_row_start_padding">8dp</dimen>
- <dimen name="favorites_row_end_padding">8dp</dimen>
+ <item name="contact_tile_height_to_width_ratio" type="dimen">76%</item>
+ <dimen name="contact_tile_text_side_padding">12dp</dimen>
+ <dimen name="contact_tile_text_bottom_padding">9dp</dimen>
+ <dimen name="favorites_row_top_padding">2dp</dimen>
+ <dimen name="favorites_row_bottom_padding">0dp</dimen>
+ <dimen name="favorites_row_start_padding">1dp</dimen>
+
+ <!-- Padding from the last contact tile will provide the end padding. -->
+ <dimen name="favorites_row_end_padding">0dp</dimen>
<dimen name="favorites_row_undo_text_side_padding">32dp</dimen>
- <dimen name="recent_call_log_item_padding">8dp</dimen>
+
+ <!-- Dimensions for most recent call shortcut cards -->
+ <dimen name="recent_call_log_item_translation_z">1dp</dimen>
+ <dimen name="recent_call_log_item_margin_horizontal">8dp</dimen>
+ <dimen name="recent_call_log_item_margin_top">4dp</dimen>
+ <dimen name="recent_call_log_item_margin_bottom">6dp</dimen>
+
+ <!-- The maximum amount to clip on the left and right of the recent call shortcut card -->
+ <dimen name="recent_call_log_item_horizontal_clip_limit">20dp</dimen>
+ <dimen name="recent_call_log_item_padding_start">8dp</dimen>
+ <dimen name="recent_call_log_item_padding_top">12dp</dimen>
+ <dimen name="recent_call_log_item_padding_bottom">11dp</dimen>
+
+ <!-- Size of the star icon on the favorites tile. -->
+ <dimen name="favorites_star_icon_size">12dp</dimen>
<!-- Padding for the tooltip -->
<dimen name="dismiss_button_padding_start">20dip</dimen>
<dimen name="dismiss_button_padding_end">28dip</dimen>
- <!-- Padding above the favorites menu. -->
- <dimen name="favorites_menu_padding_top">6dp</dimen>
- <!-- Padding below the favorites menu.. -->
- <dimen name="favorites_menu_padding_bottom">3dp</dimen>
- <!-- Horizontal padding in the favorites menu. -->
- <dimen name="favorites_menu_padding_horizontal">8dp</dimen>
- <!-- Text size for the "speed dial" text in the favorites menu. -->
- <dimen name="favorites_menu_speed_dial_text_size">18sp</dimen>
- <!-- Height of the speed dial TextView in the favorites menu. -->
- <dimen name="favorites_menu_speed_dial_height">24dp</dimen>
- <!-- Text size for the "All Contacts" text in the favorites menu. -->
- <dimen name="favorites_menu_all_contacts_text_size">12sp</dimen>
- <!-- Height of the all contacts Button in the favorites menu. -->
- <dimen name="favorites_menu_all_contacts_height">24dp</dimen>
+ <!-- Height of the actionBar - this is 8dps bigger than the platform standard to give more
+ room to the search box-->
+ <dimen name="action_bar_height">64dp</dimen>
+ <dimen name="tab_height">43dp</dimen>
+ <dimen name="tab_elevation">2dp</dimen>
+ <!-- actionbar height + tab height -->
+ <dimen name="actionbar_and_tab_height">107dp</dimen>
<!-- Margin to the left and right of the search box. -->
- <dimen name="search_margin_horizontal">7dp</dimen>
+ <dimen name="search_margin_horizontal">8dp</dimen>
<!-- Margin above the search box. -->
- <dimen name="search_top_margin">10dp</dimen>
+ <dimen name="search_top_margin">8dp</dimen>
<!-- Margin below the search box. -->
- <dimen name="search_bottom_margin">4dp</dimen>
- <!-- Height of the search box. -->
- <dimen name="search_box_height">41dp</dimen>
- <!-- Search box text size -->
- <dimen name="search_text_size">13.24sp</dimen>
+ <dimen name="search_bottom_margin">8dp</dimen>
+ <dimen name="search_collapsed_text_size">14sp</dimen>
<!-- Search box interior padding - left -->
- <dimen name="search_box_left_padding">16dp</dimen>
+ <dimen name="search_box_left_padding">8dp</dimen>
<!-- Search box interior padding - right -->
<dimen name="search_box_right_padding">8dp</dimen>
<!-- Padding around the icon in the search box. -->
- <dimen name="search_box_icon_padding">3dp</dimen>
- <!-- Left margin of the text field in the search box. -->
- <dimen name="search_box_text_left_margin">8dp</dimen>
+ <dimen name="search_box_icon_margin">4dp</dimen>
+ <dimen name="search_box_search_icon_padding">2dp</dimen>
+ <dimen name="search_box_collapsed_text_margin_left">22dp</dimen>
+ <dimen name="search_box_expanded_text_margin_left">26dp</dimen>
<!-- Size of the icon (voice search, close search) in the search box. -->
- <dimen name="search_box_icon_size">37dp</dimen>
+ <dimen name="search_box_icon_size">28dp</dimen>
+ <dimen name="search_list_padding_top">8dp</dimen>
+ <dimen name="search_box_elevation">2dp</dimen>
- <!-- Height of the underline of a tab. -->
- <dimen name="tab_underline_height">2dp</dimen>
- <!-- Height of the selection indicator of a tab. -->
- <dimen name="tab_selection_height">7.7dp</dimen>
- <!-- Padding above and below the divider line of a tab. -->
- <dimen name="tab_divider_padding">12dp</dimen>
- <!-- Size of text in tabs. -->
- <dimen name="tab_text_size">12sp</dimen>
+ <!-- Padding to the left and right of call log action buttons. -->
+ <dimen name="call_log_action_horizontal_padding">8dp</dimen>
+ <!-- Left-padding for the call log action buttons - ensures the buttons align with the text
+ to the right of the contact badge. Adjust when any of the following change:
+ call_log_action_horizontal_padding
+ call_log_list_contact_photo_size -->
+ <dimen name="call_log_actions_left_padding">64dp</dimen>
+ <dimen name="call_log_primary_text_size">16sp</dimen>
+ <dimen name="call_log_secondary_text_size">14sp</dimen>
+ <dimen name="call_log_list_item_actions_text_size">12sp</dimen>
+ <!-- Height of the call log actions section for each call log entry -->
+ <dimen name="call_log_action_height">44dp</dimen>
+ <!-- Z Translation of expanded call log items. -->
+ <dimen name="call_log_expanded_translation_z">4dp</dimen>
+ <dimen name="call_log_day_group_padding_top">15dp</dimen>
+ <dimen name="call_log_day_group_padding_bottom">9dp</dimen>
+
+ <!-- Size of icon for contacts number shortcuts -->
+ <dimen name="search_shortcut_radius">40dp</dimen>
+
+ <!-- Length of dialpad's shadows in dialer. -->
+ <dimen name="shadow_length">10dp</dimen>
+
+ <dimen name="empty_list_message_text_size">16sp</dimen>
</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 6cd140c..f40544c 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -66,8 +66,8 @@
<!-- Menu item used to share a voicemail. [CHAR LIMIT=30] -->
<string name="recentCalls_shareVoicemail">Share voicemail</string>
- <!-- Text displayed when the call log is empty -->
- <string name="recentCalls_empty">Call log is empty.</string>
+ <!-- Text displayed when the call log is empty. -->
+ <string name="recentCalls_empty">Your call log is empty.</string>
<!-- Title of the confirmation dialog for clearing the call log. [CHAR LIMIT=37] -->
<string name="clearCallLogConfirmation_title">Clear call log?</string>
@@ -265,11 +265,10 @@
-->
<string name="description_image_button_pound">pound</string>
- <!-- String describing the Voicemail ImageButton
+ <!-- String describing the image on ImageButton plus
Used by AccessibilityService to announce the purpose of the button.
-->
- <string name="description_voicemail_button">voicemail</string>
<!-- String describing the Search ImageButton
@@ -284,12 +283,6 @@
-->
<string name="description_dial_button">dial</string>
- <!-- String describing the Delete/Backspace ImageButton
-
- Used by AccessibilityService to announce the purpose of the button.
- -->
- <string name="description_delete_button">backspace</string>
-
<!-- String describing the digits text box containing the number to dial.
Used by AccessibilityService to announce the purpose of the view.
@@ -328,17 +321,21 @@
<!-- Menu item used to show all calls in the call log. [CHAR LIMIT=30] -->
<string name="menu_show_all_calls">Show all calls</string>
- <!-- Menu items for dialpad options as part of Pause and Wait ftr -->
+ <!-- Menu items for dialpad options as part of Pause and Wait ftr [CHAR LIMIT=30] -->
+ <string name="add_contact">Add contact</string>
<string name="add_2sec_pause">Add 2-sec pause</string>
<string name="add_wait">Add wait</string>
+ <!-- Menu item to select subscription (connection provider) to place call from [CHAR LIMIT=30] -->
+ <string name="menu_select_subscription">Select Subscription</string>
+
<!-- Menu item label for call settings [CHAR LIMIT=30] -->
<string name="call_settings">Settings</string>
- <!-- Menu item to create a new contact -->
+ <!-- Menu item to create a new contact [CHAR LIMIT=30] -->
<string name="menu_newContact">New contact</string>
- <!-- Menu item to display all contacts -->
+ <!-- Menu item to display all contacts [CHAR LIMIT=30] -->
<string name="menu_allContacts">All contacts</string>
<!-- Title bar for call detail screen -->
@@ -414,13 +411,6 @@
-->
<string name="description_call_log_voicemail">Voicemail</string>
- <!-- String describing the button to add a contact for the current number.
-
- Note: AccessibilityServices use this attribute to announce what the view represents.
- This is especially valuable for views without textual representation like ImageView.
- -->
- <string name="description_add_contact">Add contact</string>
-
<!-- String describing the button to view the contact for the current number.
Note: AccessibilityServices use this attribute to announce what the view represents.
@@ -442,13 +432,6 @@
-->
<string name="description_contact_details">Contact details for <xliff:g id="nameOrNumber">%1$s</xliff:g></string>
- <!-- String describing the button to access call details in the call log.
-
- Note: AccessibilityServices use this attribute to announce what the view represents.
- This is especially valuable for views without textual representation like ImageView.
- -->
- <string name="description_call_details">Call details</string>
-
<!-- String indicating a call log entry has an associated voicemail.
Note: AccessibilityServices use this attribute to announce what the view represents.
@@ -463,59 +446,6 @@
-->
<string name="description_num_calls"><xliff:g id="numberOfCalls">%1$s</xliff:g> calls.</string>
-
- <!-- Call history description for a missed call from a caller.
-
- Note: AccessibilityServices use this attribute to announce what the view represents.
- This is especially valuable for views without textual representation like ImageView.
- -->
- <string name="description_return_missed_call">Return missed call from <xliff:g id="nameOrNumber">%1$s</xliff:g> <xliff:g id="typeOrLocation">%2$s</xliff:g> <xliff:g id="timeOfCall">%3$s</xliff:g></string>
-
-
- <!-- Call history description for an answered call for a caller.
-
- Note: AccessibilityServices use this attribute to announce what the view represents.
- This is especially valuable for views without textual representation like ImageView.
- -->
- <string name="description_return_answered_call">Return answered call from <xliff:g id="nameOrNumber">%1$s</xliff:g> <xliff:g id="typeOrLocation">%2$s</xliff:g> <xliff:g id="timeOfCall">%3$s</xliff:g></string>
-
- <!-- Call history description for a missed call from an unknown caller.
- Drops the "return" part of description_return_missed_call since it is not
- possible to actually call an unknown number.
-
- Note: AccessibilityServices use this attribute to announce what the view represents.
- This is especially valuable for views without textual representation like ImageView.
- -->
- <string name="description_unknown_missed_call">Missed call from <xliff:g id="nameOrNumber">%1$s</xliff:g> <xliff:g id="typeOrLocation">%2$s</xliff:g> <xliff:g id="timeOfCall">%3$s</xliff:g></string>
-
-
- <!-- Call history description for an answered call from an unknown caller.
- Drops the "return" part of description_return_answered_call since it is not
- possible to actually call an unknown number.
- Note: AccessibilityServices use this attribute to announce what the view represents.
- This is especially valuable for views without textual representation like ImageView.
- -->
- <string name="description_unknown_answered_call">Answered call from <xliff:g id="nameOrNumber">%1$s</xliff:g> <xliff:g id="typeOrLocation">%2$s</xliff:g> <xliff:g id="timeOfCall">%3$s</xliff:g></string>
-
- <!-- String describing an outgoing call entry in the call log. Used to indicate that
- a call will be made to the specified caller. Used when there are multiple calls to/from
- the caller.
-
- Note: AccessibilityServices use this attribute to announce what the view represents.
- This is especially valuable for views without textual representation like ImageView.
- -->
- <string name="description_call_last_multiple">Call <xliff:g id="nameOrNumber">%1$s</xliff:g> <xliff:g id="typeOrLocation">%2$s</xliff:g>. Last called <xliff:g id="timeOfCall">%3$s</xliff:g>.</string>
-
- <!-- String describing an outgoing call entry in the call log. Used to indicate that
- a call will be made to the specified caller. Used when there is only a single call
- related to/from the caller.
-
- Note: AccessibilityServices use this attribute to announce what the view represents.
- This is especially valuable for views without textual representation like ImageView.
- -->
- <string name="description_call_last">Call <xliff:g id="nameOrNumber">%1$s</xliff:g> <xliff:g id="typeOrLocation">%2$s</xliff:g>. Called <xliff:g id="timeOfCall">%3$s</xliff:g>.</string>
-
-
<!-- String describing the button to SMS a number or contact.
Note: AccessibilityServices use this attribute to announce what the view represents.
@@ -533,16 +463,9 @@
-->
<string name="description_call_log_unheard_voicemail">Unheard voicemail</string>
- <!-- String describing the icon used to clear the search field -->
- <string name="description_clear_search">Clear search</string>
-
<!-- String describing the icon used to start a voice search -->
<string name="description_start_voice_search">Start voice search</string>
- <!-- The string used to represent an unknown location for a phone number in the call log
- Do not translate. -->
- <string name="call_log_empty_geocode"></string>
-
<!-- Menu item used to call a contact, containing the number of the contact to call -->
<string name="menu_callNumber">Call <xliff:g id="number">%s</xliff:g></string>
@@ -606,34 +529,31 @@
<!-- Message displayed when there is no application available to handle voice search. [CHAR LIMIT=NONE] -->
<string name="voice_search_not_available">Voice search is not available.</string>
+ <!-- Message displayed when the Phone application has been disabled and a phone call cannot
+ be made. [CHAR LIMIT=NONE] -->
+ <string name="call_not_available">Cannot make a phone call because the Phone application has been disabled.</string>
+
+ <!-- Message displayed when there is no application available to handle a particular action.
+ [CHAR LIMIT=NONE] -->
+ <string name="activity_not_available">No installed activity available to handle selected action.</string>
+
<!-- Hint displayed in dialer search box when there is no query that is currently typed.
[CHAR LIMIT=30] -->
<string name="dialer_hint_find_contact">Type a name or phone number</string>
- <!-- Title for the call log tab containing the list of all voicemails and calls
- [CHAR LIMIT=15] -->
- <string name="call_log_all_title">All</string>
-
- <!-- Title for the call log tab containing the list of all missed calls only
- [CHAR LIMIT=15] -->
- <string name="call_log_missed_title">Missed</string>
-
<!-- String resource for the font-family to use for the call log activity's title
Do not translate. -->
<string name="call_log_activity_title_font_family">sans-serif-light</string>
- <!-- String resource for the font-family to use for show all contacts' title
+ <!-- String resource for the font-family to use for the full call history footer
Do not translate. -->
- <string name="show_all_contacts_title_font_family">sans-serif-light</string>
+ <string name="view_full_call_history_font_family">sans-serif</string>
<!-- Text displayed when the list of missed calls is empty -->
- <string name="recentMissed_empty">No recent missed calls.</string>
+ <string name="recentMissed_empty">You have no recent missed calls.</string>
<!-- Text displayed when the list of voicemails is empty -->
- <string name="recentVoicemails_empty">No recent voicemails.</string>
-
- <!-- Menu option to enable all contacts to be displayed -->
- <string name="show_all_contacts">Show all contacts</string>
+ <string name="recentVoicemails_empty">You have no recent voicemails.</string>
<!-- Menu option to show favorite contacts only -->
<string name="show_favorites_only">Show favorites only</string>
@@ -641,60 +561,24 @@
<!-- Title of activity that displays a list of all calls -->
<string name="call_log_activity_title">History</string>
- <!-- The digit to be displayed on the 0 key of the dialpad [CHAR LIMIT=1]-->
- <string name="dialpad_0_number">0</string>
- <!-- The digit to be displayed on the 1 key of the dialpad [CHAR LIMIT=1]-->
- <string name="dialpad_1_number">1</string>
- <!-- The digit to be displayed on the 2 key of the dialpad [CHAR LIMIT=1]-->
- <string name="dialpad_2_number">2</string>
- <!-- The digit to be displayed on the 3 key of the dialpad [CHAR LIMIT=1]-->
- <string name="dialpad_3_number">3</string>
- <!-- The digit to be displayed on the 4 key of the dialpad [CHAR LIMIT=1]-->
- <string name="dialpad_4_number">4</string>
- <!-- The digit to be displayed on the 5 key of the dialpad [CHAR LIMIT=1]-->
- <string name="dialpad_5_number">5</string>
- <!-- The digit to be displayed on the 6 key of the dialpad [CHAR LIMIT=1]-->
- <string name="dialpad_6_number">6</string>
- <!-- The digit to be displayed on the 7 key of the dialpad [CHAR LIMIT=1]-->
- <string name="dialpad_7_number">7</string>
- <!-- The digit to be displayed on the 8 key of the dialpad [CHAR LIMIT=1]-->
- <string name="dialpad_8_number">8</string>
- <!-- The digit to be displayed on the 9 key of the dialpad [CHAR LIMIT=1]-->
- <string name="dialpad_9_number">9</string>
- <!-- Do not translate. -->
- <string name="dialpad_star_number">*</string>
- <!-- Do not translate. -->
- <string name="dialpad_pound_number">#</string>
+ <!-- Title for the call log tab containing the list of all voicemails and calls
+ [CHAR LIMIT=30] -->
+ <string name="call_log_all_title">All</string>
- <!-- Do not translate. -->
- <string name="dialpad_0_letters">+</string>
- <!-- Do not translate. -->
- <string name="dialpad_1_letters"></string>
- <!-- Do not translate. -->
- <string name="dialpad_2_letters">ABC</string>
- <!-- Do not translate. -->
- <string name="dialpad_3_letters">DEF</string>
- <!-- Do not translate. -->
- <string name="dialpad_4_letters">GHI</string>
- <!-- Do not translate. -->
- <string name="dialpad_5_letters">JKL</string>
- <!-- Do not translate. -->
- <string name="dialpad_6_letters">MNO</string>
- <!-- Do not translate. -->
- <string name="dialpad_7_letters">PQRS</string>
- <!-- Do not translate. -->
- <string name="dialpad_8_letters">TUV</string>
- <!-- Do not translate. -->
- <string name="dialpad_9_letters">WXYZ</string>
- <!-- Do not translate. -->
- <string name="dialpad_star_letters"></string>
- <!-- Do not translate. -->
- <string name="dialpad_pound_letters"></string>
+ <!-- Title for the call log tab containing the list of all missed calls only
+ [CHAR LIMIT=30] -->
+ <string name="call_log_missed_title">Missed</string>
- <!-- Title of fragment that displays all contacts -->
- <string name="show_all_contacts_title">All contacts</string>
- <!-- Title of show all contacts button -->
- <string name="show_all_contacts_button_text">All contacts</string>
+ <!-- Title for the call log tab containing the list of all voicemail calls only
+ [CHAR LIMIT=30] -->
+ <string name="call_log_voicemail_title">Voicemail</string>
+
+ <string name="tab_speed_dial">Speed Dial</string>
+
+ <string name="tab_recents">Recents</string>
+
+ <string name="tab_all_contacts">Contacts</string>
+
<!-- Text displayed when user swipes out a favorite contact -->
<string name="favorite_hidden">Removed from favorites</string>
<!-- Text displayed for the undo button to undo removing a favorite contact -->
@@ -708,11 +592,17 @@
<!-- Shortcut item used to add a number directly from search -->
<string name="search_shortcut_add_to_contacts">Add to contacts</string>
+ <!-- Title for the recent calls footer that brings users to the full call history when clicked -->
+ <string name="recents_footer_text">View full call history</string>
+
<!-- Number of missed calls shown on call card [CHAR LIMIT=40] -->
<string name="num_missed_calls"><xliff:g id="number">%s</xliff:g> new missed calls</string>
- <!-- Shows when there are no favorites. -->
- <string name="no_favorites">Favorites & contacts you\ncall often will show here.\nSo, start calling.</string>
+ <!-- Shown when there are no speed dial favorites. -->
+ <string name="speed_dial_empty">Speed dial is one touch dialing\nfor favorites and numbers\n you call frequently.</string>
+
+ <!-- Shown when there are no contacts in the all contacts list. -->
+ <string name="all_contacts_empty">You have no contacts.</string>
<!-- Shows up as a tooltip to provide a hint to the user that the profile pic in a contact
card can be tapped to bring up a list of all numbers, or long pressed to start reordering
@@ -726,29 +616,117 @@
<!-- Remove button that shows up when contact is long-pressed. [CHAR LIMIT=NONE] -->
<string name="remove_contact">Remove</string>
- <!-- Header text displayed on the main dialer screen above the list of favorite phone numbers.
- [CHAR LIMIT=21] -->
- <string name="favorites_menu_speed_dial">Speed Dial</string>
-
<!-- Button text for the "all contacts" button displayed on the main dialer screen above the
list of favorite phone numbers. Navigates the user to the "All Contacts" list.
This text represents the same action as the text in string "menu_allContacts".
[CHAR LIMIT=21] -->
<string name="favorites_menu_all_contacts">ALL CONTACTS</string>
- <!-- The font-family to use for the "speed dial" label on the favorites menu.
- Do not translate. -->
- <string name="favorites_menu_speed_dial_font_family">sans-serif-light</string>
+ <!-- Button text for the "call back" button displayed underneath an entry in the call log.
+ Tapping causes a call to be placed to the caller represented by the call log entry.
+ [CHAR LIMIT=30] -->
+ <string name="call_log_action_call_back">CALL BACK</string>
- <!-- The font-family to use for the "all contacts" label on the favorites menu.
- Do not translate. -->
- <string name="favorites_menu_all_contacts_font_family">sans-serif</string>
+ <!-- Button text for the "LISTEN" button displayed underneath an entry in the call log.
+ Tapping navigates the user to the call details screen where the user can listen to the
+ voicemail represented by the call log entry.
+ [CHAR LIMIT=30] -->
+ <string name="call_log_action_voicemail">LISTEN</string>
- <!-- The font-family to use for the text inside the searchbox.
- Do not translate. -->
- <string name="search_font_family">sans-serif</string>
+ <!-- Button text for the "DETAILS" button displayed underneath an entry in the call log.
+ Tapping navigates the user to the call details screen where the user can view details for
+ the call log entry.
+ [CHAR LIMIT=30] -->
+ <string name="call_log_action_details">DETAILS</string>
- <!-- The font-family to use for tab text.
- Do not translate. -->
- <string name="tab_font_family">sans-serif</string>
+ <!-- String describing an incoming missed call entry in the call log.
+ Note: AccessibilityServices uses this attribute to announce what the view represents.
+ [CHAR LIMIT=NONE] -->
+ <string name="description_incoming_missed_call">Missed call from <xliff:g id="nameOrNumber" example="John Smith">%1$s</xliff:g>, <xliff:g id="typeOrLocation" example="Mobile">%2$s</xliff:g>, <xliff:g id="timeOfCall" example="2 min ago">%3$s</xliff:g>.</string>
+
+ <!-- String describing an incoming answered call entry in the call log.
+ Note: AccessibilityServices uses this attribute to announce what the view represents.
+ [CHAR LIMIT=NONE] -->
+ <string name="description_incoming_answered_call">Answered call from <xliff:g id="nameOrNumber" example="John Smith">%1$s</xliff:g>, <xliff:g id="typeOrLocation" example="Mobile">%2$s</xliff:g>, <xliff:g id="timeOfCall" example="2 min ago">%3$s</xliff:g>.</string>
+
+ <!-- String describing an outgoing call entry in the call log.
+ Note: AccessibilityServices uses this attribute to announce what the view represents.
+ [CHAR LIMIT=NONE] -->
+ <string name="description_outgoing_call">Call to <xliff:g id="nameOrNumber" example="John Smith">%1$s</xliff:g>, <xliff:g id="typeOrLocation" example="Mobile">%2$s</xliff:g>, <xliff:g id="timeOfCall" example="2 min ago">%3$s</xliff:g>.</string>
+
+ <!-- String describing the "call back" action for an entry in the call log. The call back
+ action triggers a return call to the named user.
+ Note: AccessibilityServices uses this attribute to announce the purpose of the button.
+ [CHAR LIMIT=NONE] -->
+ <string name="description_call_back_action">Call back <xliff:g id="nameOrNumber" example="John Smith">%1$s</xliff:g></string>
+
+ <!-- String describing the "listen" action for an entry in the call log. The listen
+ action is shown for call log entries representing a voicemail message and this button
+ triggers playing back the voicemail.
+ Note: AccessibilityServices uses this attribute to announce the purpose of the button.
+ [CHAR LIMIT=NONE] -->
+ <string name="description_voicemail_action">Listen to voicemail from <xliff:g id="nameOrNumber" example="John Smith">%1$s</xliff:g></string>
+
+ <!-- String describing the "details" action for an entry in the call log. The details action
+ displays the call details screen for an entry in the call log. This shows the calls to
+ and from the specified number associated with the call log entry.
+ [CHAR LIMIT=NONE] -->
+ <string name="description_details_action">Call details for <xliff:g id="nameOrNumber" example="John Smith">%1$s</xliff:g></string>
+
+ <!-- Toast message which appears when a call log entry is deleted.
+ [CHAR LIMIT=NONE] -->
+ <string name="toast_entry_removed">Call log entry deleted.</string>
+
+ <!-- String used as a header in the call log above calls which occurred today.
+ [CHAR LIMIT=65] -->
+ <string name="call_log_header_today">Today</string>
+
+ <!-- String used as a header in the call log above calls which occurred yesterday.
+ [CHAR LIMIT=65] -->
+ <string name="call_log_header_yesterday">Yesterday</string>
+
+ <!-- String used as a header in the call log above calls which occurred last week.
+ [CHAR LIMIT=65] -->
+ <string name="call_log_header_last_week">Last week</string>
+
+ <!-- String used as a header in the call log above calls which occurred more than a week ago.
+ [CHAR LIMIT=65] -->
+ <string name="call_log_header_other">Older</string>
+
+ <!-- String a header on the call details screen. Appears above the list calls to or from a
+ particular number.
+ [CHAR LIMIT=65] -->
+ <string name="call_detail_list_header">Call List</string>
+
+ <!-- String describing the "speaker on" button on the playback control used to listen to a
+ voicemail message. When speaker is on, playback of the voicemail will occur through the
+ phone speaker.
+ Note: AccessibilityServices uses this attribute to announce the purpose of the button.
+ [CHAR LIMIT=NONE] -->
+ <string name="voicemail_speaker_on">Turn speaker on.</string>
+
+ <!-- String describing the "speaker off" button on the playback control used to listen to a
+ voicemail message. When speaker is off, playback of the voicemail will occur through the
+ phone earpiece.
+ Note: AccessibilityServices uses this attribute to announce the purpose of the button.
+ [CHAR LIMIT=NONE] -->
+ <string name="voicemail_speaker_off">Turn speaker off.</string>
+
+ <!-- String describing the "play faster" button in the playback control used to listen to a
+ voicemail message. Speeds up playback of the voicemail message.
+ Note: AccessibilityServices uses this attribute to announce the purpose of the button.
+ [CHAR LIMIT=NONE] -->
+ <string name="voicemail_play_faster">Play faster.</string>
+
+ <!-- String describing the "play slower" button in the playback control used to listen to a
+ voicemail message. Slows down playback of the voicemail message.
+ Note: AccessibilityServices uses this attribute to announce the purpose of the button.
+ [CHAR LIMIT=NONE] -->
+ <string name="voicemail_play_slower">Play slower.</string>
+
+ <!-- String describing the "play/pause" button in the playback control used to listen to a
+ voicemail message. Starts playback or pauses ongoing playback.
+ Note: AccessibilityServices uses this attribute to announce the purpose of the button.
+ [CHAR LIMIT=NONE] -->
+ <string name="voicemail_play_start_pause">Start or pause playback.</string>
</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 3921a5d..0140db8 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -16,33 +16,25 @@
-->
<resources>
<style name="DialtactsTheme"
- parent="android:Theme.Holo.Light">
+ parent="android:Theme.Material.Light">
<item name="android:textColorPrimary">@color/dialtacts_primary_text_color</item>
<item name="android:textColorSecondary">@color/dialtacts_secondary_text_color</item>
- <item name="android:windowActionBarOverlay">false</item>
+ <item name="android:windowActionBarOverlay">true</item>
+ <item name="android:windowActionModeOverlay">true</item>
<item name="android:actionBarStyle">@style/DialtactsActionBarStyle</item>
- <!-- Style for the tabs (for the tabs) -->
- <item name="android:actionBarTabStyle">@style/DialtactsActionBarTabStyle</item>
- <!-- Style for the tab bar (for the divider between tabs) -->
- <item name="android:actionBarTabBarStyle">@style/DialtactsActionBarTabBarStyle</item>
- <!-- Style for the tab bar text (for text on tabs) -->
- <item name="android:actionBarTabTextStyle">@style/DialtactsActionBarTabTextStyle</item>
<!-- Style for the overflow button in the actionbar. -->
<item name="android:actionOverflowButtonStyle">@style/DialtactsActionBarOverflow</item>
- <!-- The "Up" icon in the action bar. -->
+ <!-- Drawable for the back button -->
<item name="android:homeAsUpIndicator">@drawable/ic_back_arrow</item>
<item name="android:windowContentOverlay">@null</item>
- <!-- Searchbox Style -->
- <item name="android:editTextStyle">@style/DialtactsSearchboxStyle</item>
<item name="android:listViewStyle">@style/ListViewStyle</item>
<item name="activated_background">@drawable/list_item_activated_background</item>
<item name="section_header_background">@drawable/list_title_holo</item>
<item name="list_section_header_height">32dip</item>
- <item name="list_item_divider">?android:attr/listDivider</item>
- <item name="list_item_padding_top">8dip</item>
- <item name="list_item_padding_right">0dip</item>
- <item name="list_item_padding_bottom">8dip</item>
- <item name="list_item_padding_left">0dip</item>
+ <item name="list_item_padding_top">12dp</item>
+ <item name="list_item_padding_right">32dp</item>
+ <item name="list_item_padding_bottom">12dp</item>
+ <item name="list_item_padding_left">16dp</item>
<item name="list_item_gap_between_image_and_text">8dip</item>
<item name="list_item_gap_between_label_and_data">5dip</item>
<item name="list_item_presence_icon_margin">4dip</item>
@@ -50,20 +42,22 @@
<item name="list_item_photo_size">@dimen/contact_browser_list_item_photo_size</item>
<item name="list_item_profile_photo_size">70dip</item>
<item name="list_item_prefix_highlight_color">@color/people_app_theme_color</item>
+ <item name="list_item_background_color">@color/background_dialer_light</item>
<item name="list_item_header_text_indent">8dip</item>
<item name="list_item_header_text_color">@color/people_app_theme_color</item>
<item name="list_item_header_text_size">14sp</item>
<item name="list_item_header_height">30dip</item>
- <item name="list_item_header_underline_height">1dip</item>
- <item name="list_item_header_underline_color">@color/favorite_contacts_separator_color</item>
<item name="list_item_data_width_weight">5</item>
<item name="list_item_label_width_weight">3</item>
- <item name="contact_browser_list_padding_left">8dip</item>
- <item name="contact_browser_list_padding_right">0dip</item>
- <item name="contact_browser_background">@android:color/transparent</item>
+ <item name="contact_browser_list_padding_left">0dp</item>
+ <item name="contact_browser_list_padding_right">0dp</item>
+ <item name="contact_browser_background">@color/background_dialer_light</item>
+ <item name="list_item_name_text_color">@color/contact_list_name_text_color</item>
+ <item name="list_item_name_text_size">16sp</item>
<item name="list_item_text_indent">@dimen/contact_browser_list_item_text_indent</item>
+ <item name="list_item_text_offset_top">-2dp</item>
<!-- CallLog -->
- <item name="call_log_primary_text_color">#000000</item>
+ <item name="call_log_primary_text_color">@color/contact_list_name_text_color</item>
<item name="call_log_primary_background_color">#000000</item>
<item name="call_log_secondary_text_color">@color/dialtacts_secondary_text_color</item>
<item name="call_log_secondary_background_color">#333333</item>
@@ -75,47 +69,42 @@
<item name="call_log_voicemail_status_action_text_color">#33b5e5</item>
<!-- Favorites -->
<item name="favorites_padding_bottom">?android:attr/actionBarSize</item>
- </style>
-
- <!-- An extension of the main DialtactsTheme used when the the launcher activity is shown.
- Ensures that there is no actionbar showing during the load of the dialer app. -->
- <style name="DialtactsThemeHiddenActionBar" parent="DialtactsTheme">
- <item name="android:actionBarStyle">@style/DialtactsHiddenActionBarStyle</item>
- </style>
-
- <!-- A "hidden" action bar style. Used when loading the launcher activity so that the
- default actionbar is effectively hidden. -->
- <style name="DialtactsHiddenActionBarStyle" parent="DialtactsActionBarStyle">
- <item name="android:background">@color/background_dialer_light</item>
- <item name="android:titleTextStyle">@style/DialtactsHiddenActionBarTextStyle</item>
- </style>
-
- <style name="DialtactsHiddenActionBarTextStyle" parent="@android:style/TextAppearance">
- <item name="android:textColor">@color/background_dialer_light</item>
+ <item name="android:colorPrimaryDark">@color/actionbar_background_color_dark</item>
+ <item name="dialpad_key_button_touch_tint">@color/dialer_dialpad_touch_tint</item>
</style>
<!-- Action bar overflow menu icon. -->
<style name="DialtactsActionBarOverflow"
- parent="@android:style/Widget.Holo.ActionButton.Overflow">
+ parent="@android:style/Widget.Material.Light.ActionButton.Overflow">
<item name="android:src">@drawable/ic_menu_overflow_lt</item>
</style>
+ <!-- Action bar overflow menu icon. White with no shadow. -->
+ <style name="DialtactsActionBarOverflowWhite"
+ parent="@android:style/Widget.Material.Light.ActionButton.Overflow">
+ <item name="android:src">@drawable/overflow_menu</item>
+ </style>
+
<style name="DialpadTheme" parent="DialtactsTheme">
<item name="android:textColorPrimary">#FFFFFF</item>
</style>
- <style name="DialtactsThemeWithActionBarOverlay" parent="DialtactsTheme">
- <item name="android:windowActionBarOverlay">true</item>
+ <style name="DialtactsThemeWithoutActionBarOverlay" parent="DialtactsTheme">
+ <item name="android:windowActionBarOverlay">false</item>
+ <item name="android:actionOverflowButtonStyle">@style/DialtactsActionBarOverflowWhite</item>
</style>
- <style name="CallDetailActivityTheme" parent="android:Theme.Holo.Light">
- <item name="android:windowBackground">@color/background_dialer_list_items</item>
- <item name="android:gravity">top</item>
- <item name="android:listViewStyle">@style/ListViewStyle</item>
+ <!-- Hide the actionbar title during the activity preview -->
+ <style name="DialtactsActivityTheme" parent="DialtactsTheme">
+ <item name="android:actionBarStyle">@style/DialtactsActionBarWithoutTitleStyle</item>
+ </style>
+
+ <style name="CallDetailActivityTheme" parent="DialtactsThemeWithoutActionBarOverlay">
+ <item name="android:windowBackground">@color/background_dialer_light</item>
<!-- CallLog -->
- <item name="call_log_primary_text_color">#333333</item>
+ <item name="call_log_primary_text_color">#404040</item>
<item name="call_log_primary_background_color">#FFFFFF</item>
- <item name="call_log_secondary_text_color">#333333</item>
+ <item name="call_log_secondary_text_color">#8f8f8f</item>
<item name="call_log_secondary_background_color">#FFFFFF</item>
<item name="call_log_header_color">#FFFFFF</item>
<!-- VoicemailStatus -->
@@ -123,101 +112,40 @@
<item name="call_log_voicemail_status_background_color">#262626</item>
<item name="call_log_voicemail_status_text_color">#888888</item>
<item name="call_log_voicemail_status_action_text_color">#33b5e5</item>
+ <item name="android:actionOverflowButtonStyle">@style/DialtactsActionBarOverflowWhite</item>
</style>
- <style name="DialpadKeyNumberStyle">
- <item name="android:textColor">@color/actionbar_background_color</item>
- <item name="android:textSize">@dimen/dialpad_key_numbers_size</item>
- <item name="android:fontFamily">sans-serif-light</item>
- <item name="android:layout_width">@dimen/dialpad_key_numbers_width</item>
- <item name="android:layout_height">wrap_content</item>
- <item name="android:gravity">center</item>
- </style>
-
- <style name="DialpadKeyStarPoundStyle">
- <item name="android:textColor">@color/dialpad_secondary_text_color</item>
- <item name="android:textSize">@dimen/dialpad_key_star_pound_size</item>
- <item name="android:fontFamily">sans-serif-light</item>
- <item name="android:layout_width">@dimen/dialpad_key_numbers_width</item>
- <item name="android:layout_height">wrap_content</item>
- <item name="android:gravity">center</item>
- </style>
-
- <style name="DialpadKeyLettersStyle">
- <item name="android:textColor">@color/dialpad_secondary_text_color</item>
- <item name="android:textSize">@dimen/dialpad_key_letters_size</item>
- <item name="android:fontFamily">sans-serif-light</item>
- <item name="android:layout_width">@dimen/dialpad_key_letters_width</item>
- <item name="android:layout_height">wrap_content</item>
- <item name="android:paddingLeft">@dimen/dialpad_number_to_letters_padding</item>
- </style>
-
- <style name="DialpadKeyButtonStyle">
- <item name="android:soundEffectsEnabled">false</item>
- <item name="android:clickable">true</item>
- <item name="android:layout_width">fill_parent</item>
- <item name="android:layout_height">@dimen/dialpad_key_height</item>
- <item name="android:background">@drawable/dialpad_key_colors</item>
- <item name="android:focusable">true</item>
- </style>
-
- <style name="DialpadKeyInternalLayoutStyle">
- <item name="android:layout_width">wrap_content</item>
- <item name="android:layout_height">wrap_content</item>
- <item name="android:layout_gravity">center</item>
- </style>
-
- <style name="DialtactsActionBarStyle" parent="android:Widget.Holo.ActionBar">
- <item name="android:background">@drawable/call_history_actionbar_background</item>
- <item name="android:backgroundStacked">#ffffff</item>
+ <style name="DialtactsActionBarStyle" parent="android:Widget.Material.ActionBar">
+ <item name="android:background">@color/actionbar_background_color</item>
<item name="android:titleTextStyle">@style/DialtactsActionBarTitleText</item>
+ <item name="android:height">@dimen/action_bar_height</item>
<!-- Empty icon -->
<item name="android:icon">@android:color/transparent</item>
+ <item name="android:contentInsetStart">1px</item>
+ </style>
+
+ <style name="DialtactsActionBarWithoutTitleStyle" parent="DialtactsActionBarStyle">
+ <item name="android:displayOptions"></item>
</style>
<!-- Text in the action bar at the top of the screen -->
<style name="DialtactsActionBarTitleText"
- parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
+ parent="@android:style/TextAppearance.Material.Widget.ActionBar.Title">
<item name="android:textColor">@color/actionbar_text_color</item>
</style>
- <!-- Styling for the tab bar; handles styling of the divider line. -->
- <style name="DialtactsActionBarTabBarStyle"
- parent="@android:style/Widget.Holo.ActionBar.TabBar">
- <item name="android:divider">@drawable/divider</item>
- <item name="android:showDividers">middle</item>
- <item name="android:dividerPadding">@dimen/tab_divider_padding</item>
- <item name="android:background">@drawable/action_bar_tab</item>
- </style>
-
- <!-- Styling for tabs. -->
- <style name="DialtactsActionBarTabStyle" parent="@android:style/Widget.Holo.ActionBar.TabView">
- <item name="android:background">@drawable/action_bar_tab</item>
- <item name="android:showDividers">none</item>
- </style>
-
<!-- Text style for tabs. -->
<style name="DialtactsActionBarTabTextStyle"
- parent="android:style/Widget.Holo.Light.ActionBar.TabText">
+ parent="android:style/Widget.Material.Light.ActionBar.TabText">
<item name="android:textColor">@color/tab_text_color</item>
<item name="android:textSize">@dimen/tab_text_size</item>
- <item name="android:fontFamily">@string/tab_font_family</item>
- <item name="android:textStyle">bold</item>
+ <item name="android:fontFamily">"sans-serif-medium"</item>
</style>
- <style name="ListViewStyle" parent="@android:style/Widget.Holo.Light.ListView">
+ <style name="ListViewStyle" parent="@android:style/Widget.Material.Light.ListView">
<item name="android:overScrollMode">always</item>
</style>
- <style name="FragmentActionBarPadding">
- <item name="android:paddingBottom">?android:attr/actionBarSize</item>
- </style>
-
- <style name="DialtactsSearchboxStyle" parent="@android:style/Widget.EditText">
- <item name="android:background">@null</item>
- <item name="android:textColorHint">@color/searchbox_text_color</item>
- </style>
-
<style name="DismissButtonStyle">
<item name="android:paddingLeft">@dimen/dismiss_button_padding_start</item>
<item name="android:paddingRight">@dimen/dismiss_button_padding_end</item>
diff --git a/res/drawable/dialpad_key_colors.xml b/res/xml/searchable.xml
similarity index 66%
copy from res/drawable/dialpad_key_colors.xml
copy to res/xml/searchable.xml
index 27b4d4f..0e8242d 100644
--- a/res/drawable/dialpad_key_colors.xml
+++ b/res/xml/searchable.xml
@@ -13,10 +13,10 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item
- android:state_pressed="true"
- android:drawable="@color/background_dialpad_pressed" />
- <item android:drawable="@color/background_dialpad" />
-</selector>
+<searchable xmlns:android="http://schemas.android.com/apk/res/android"
+ android:label="@string/applicationLabel"
+ android:hint="@string/dialer_hint_find_contact"
+ android:inputType="textNoSuggestions"
+ android:imeOptions="actionSearch"
+ android:voiceSearchMode="showVoiceSearchButton|launchRecognizer"
+ />
\ No newline at end of file
diff --git a/src/com/android/dialer/BackScrollManager.java b/src/com/android/dialer/BackScrollManager.java
deleted file mode 100644
index 5728702..0000000
--- a/src/com/android/dialer/BackScrollManager.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.dialer;
-
-import android.view.View;
-import android.widget.AbsListView;
-import android.widget.ListView;
-
-/**
- * Handles scrolling back of a list tied to a header.
- * <p>
- * This is used to implement a header that scrolls up with the content of a list to be partially
- * obscured.
- */
-public class BackScrollManager {
- /** Defines the header to be scrolled. */
- public interface ScrollableHeader {
- /** Sets the offset by which to scroll. */
- public void setOffset(int offset);
- /** Gets the maximum offset that should be applied to the header. */
- public int getMaximumScrollableHeaderOffset();
- }
-
- private final ScrollableHeader mHeader;
- private final ListView mListView;
-
- private final AbsListView.OnScrollListener mScrollListener =
- new AbsListView.OnScrollListener() {
- @Override
- public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
- int totalItemCount) {
- if (firstVisibleItem != 0) {
- // The first item is not shown, the header should be pinned at the top.
- mHeader.setOffset(mHeader.getMaximumScrollableHeaderOffset());
- return;
- }
-
- View firstVisibleItemView = view.getChildAt(firstVisibleItem);
- if (firstVisibleItemView == null) {
- return;
- }
- // We scroll the header up, but at most pin it to the top of the screen.
- int offset = Math.min(
- (int) -view.getChildAt(firstVisibleItem).getY(),
- mHeader.getMaximumScrollableHeaderOffset());
- mHeader.setOffset(offset);
- }
-
- @Override
- public void onScrollStateChanged(AbsListView view, int scrollState) {
- // Nothing to do here.
- }
- };
-
- /**
- * Creates a new instance of a {@link BackScrollManager} that connected the header and the list
- * view.
- */
- public static void bind(ScrollableHeader header, ListView listView) {
- BackScrollManager backScrollManager = new BackScrollManager(header, listView);
- backScrollManager.bind();
- }
-
- private BackScrollManager(ScrollableHeader header, ListView listView) {
- mHeader = header;
- mListView = listView;
- }
-
- private void bind() {
- mListView.setOnScrollListener(mScrollListener);
- // We disable the scroll bar because it would otherwise be incorrect because of the hidden
- // header.
- mListView.setVerticalScrollBarEnabled(false);
- }
-}
diff --git a/src/com/android/dialer/CallDetailActivity.java b/src/com/android/dialer/CallDetailActivity.java
index 42f295c..695f8aa 100644
--- a/src/com/android/dialer/CallDetailActivity.java
+++ b/src/com/android/dialer/CallDetailActivity.java
@@ -17,53 +17,37 @@
package com.android.dialer;
import android.app.Activity;
-import android.app.LoaderManager.LoaderCallbacks;
-import android.content.ActivityNotFoundException;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
-import android.content.Loader;
import android.content.res.Resources;
import android.database.Cursor;
-import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Bundle;
import android.provider.CallLog;
-import android.provider.ContactsContract;
import android.provider.CallLog.Calls;
import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.Contacts;
-import android.provider.ContactsContract.DisplayNameSources;
-import android.provider.ContactsContract.Intents.Insert;
import android.provider.VoicemailContract.Voicemails;
-import android.telephony.PhoneNumberUtils;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.Log;
-import android.view.ActionMode;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
-import android.widget.ImageButton;
-import android.widget.ImageView;
import android.widget.ListView;
+import android.widget.QuickContactBadge;
import android.widget.TextView;
import android.widget.Toast;
import com.android.contacts.common.ContactPhotoManager;
import com.android.contacts.common.CallUtil;
-import com.android.contacts.common.ClipboardUtils;
import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
import com.android.contacts.common.GeoUtil;
-import com.android.contacts.common.model.Contact;
-import com.android.contacts.common.model.ContactLoader;
-import com.android.contacts.common.util.UriUtils;
-import com.android.dialer.BackScrollManager.ScrollableHeader;
import com.android.dialer.calllog.CallDetailHistoryAdapter;
import com.android.dialer.calllog.CallTypeHelper;
import com.android.dialer.calllog.ContactInfo;
@@ -72,6 +56,7 @@
import com.android.dialer.calllog.PhoneNumberUtilsWrapper;
import com.android.dialer.util.AsyncTaskExecutor;
import com.android.dialer.util.AsyncTaskExecutors;
+import com.android.dialer.util.DialerUtils;
import com.android.dialer.voicemail.VoicemailPlaybackFragment;
import com.android.dialer.voicemail.VoicemailStatusHelper;
import com.android.dialer.voicemail.VoicemailStatusHelper.StatusMessage;
@@ -118,12 +103,9 @@
private CallTypeHelper mCallTypeHelper;
private PhoneNumberDisplayHelper mPhoneNumberHelper;
- private PhoneCallDetailsHelper mPhoneCallDetailsHelper;
- private TextView mHeaderTextView;
- private View mHeaderOverlayView;
- private ImageView mMainActionView;
- private ImageButton mMainActionPushLayerView;
- private ImageView mContactBackgroundView;
+ private QuickContactBadge mQuickContactBadge;
+ private TextView mCallerName;
+ private TextView mCallerNumber;
private AsyncTaskExecutor mAsyncTaskExecutor;
private ContactInfoHelper mContactInfoHelper;
@@ -153,15 +135,6 @@
private ProximitySensorManager mProximitySensorManager;
private final ProximitySensorListener mProximitySensorListener = new ProximitySensorListener();
- /**
- * The action mode used when the phone number is selected. This will be non-null only when the
- * phone number is selected.
- */
- private ActionMode mPhoneNumberActionMode;
-
- private CharSequence mPhoneNumberLabelToCopy;
- private CharSequence mPhoneNumberToCopy;
-
/** Listener to changes in the proximity sensor state. */
private class ProximitySensorListener implements ProximitySensorManager.Listener {
/** Used to show a blank view and hide the action bar. */
@@ -231,67 +204,6 @@
static final int GEOCODED_LOCATION_COLUMN_INDEX = 5;
static final int NUMBER_PRESENTATION_COLUMN_INDEX = 6;
- private final View.OnClickListener mPrimaryActionListener = new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- if (finishPhoneNumerSelectedActionModeIfShown()) {
- return;
- }
- startActivity(((ViewEntry) view.getTag()).primaryIntent);
- }
- };
-
- private final View.OnClickListener mSecondaryActionListener = new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- if (finishPhoneNumerSelectedActionModeIfShown()) {
- return;
- }
- startActivity(((ViewEntry) view.getTag()).secondaryIntent);
- }
- };
-
- private final View.OnLongClickListener mPrimaryLongClickListener =
- new View.OnLongClickListener() {
- @Override
- public boolean onLongClick(View v) {
- if (finishPhoneNumerSelectedActionModeIfShown()) {
- return true;
- }
- startPhoneNumberSelectedActionMode(v);
- return true;
- }
- };
-
- private final LoaderCallbacks<Contact> mLoaderCallbacks = new LoaderCallbacks<Contact>() {
- @Override
- public void onLoaderReset(Loader<Contact> loader) {
- }
-
- @Override
- public void onLoadFinished(Loader<Contact> loader, Contact data) {
- final Intent intent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
- intent.setType(Contacts.CONTENT_ITEM_TYPE);
- if (data.getDisplayNameSource() >= DisplayNameSources.ORGANIZATION) {
- intent.putExtra(Insert.NAME, data.getDisplayName());
- }
- intent.putExtra(Insert.DATA, data.getContentValues());
- bindContactPhotoAction(intent, R.drawable.ic_add_contact_holo_dark,
- getString(R.string.description_add_contact));
- }
-
- @Override
- public Loader<Contact> onCreateLoader(int id, Bundle args) {
- final Uri contactUri = args.getParcelable(BUNDLE_CONTACT_URI_EXTRA);
- if (contactUri == null) {
- Log.wtf(TAG, "No contact lookup uri provided.");
- }
- return new ContactLoader(CallDetailActivity.this, contactUri,
- false /* loadGroupMetaData */, false /* loadInvitableAccountTypes */,
- false /* postViewNotification */, true /* computeFormattedPhoneNumber */);
- }
- };
-
@Override
protected void onCreate(Bundle icicle) {
super.onCreate(icicle);
@@ -304,18 +216,15 @@
mCallTypeHelper = new CallTypeHelper(getResources());
mPhoneNumberHelper = new PhoneNumberDisplayHelper(mResources);
- mPhoneCallDetailsHelper = new PhoneCallDetailsHelper(mResources, mCallTypeHelper,
- new PhoneNumberUtilsWrapper());
mVoicemailStatusHelper = new VoicemailStatusHelperImpl();
mAsyncQueryHandler = new CallDetailActivityQueryHandler(this);
- mHeaderTextView = (TextView) findViewById(R.id.header_text);
- mHeaderOverlayView = findViewById(R.id.photo_text_bar);
mStatusMessageView = findViewById(R.id.voicemail_status);
mStatusMessageText = (TextView) findViewById(R.id.voicemail_status_message);
mStatusMessageAction = (TextView) findViewById(R.id.voicemail_status_action);
- mMainActionView = (ImageView) findViewById(R.id.main_action);
- mMainActionPushLayerView = (ImageButton) findViewById(R.id.main_action_push_layer);
- mContactBackgroundView = (ImageView) findViewById(R.id.contact_background);
+ mQuickContactBadge = (QuickContactBadge) findViewById(R.id.quick_contact_photo);
+ mQuickContactBadge.setOverlay(null);
+ mCallerName = (TextView) findViewById(R.id.caller_name);
+ mCallerNumber = (TextView) findViewById(R.id.caller_number);
mDefaultCountryIso = GeoUtil.getCurrentCountryIso(this);
mContactPhotoManager = ContactPhotoManager.getInstance(this);
mProximitySensorManager = new ProximitySensorManager(this, mProximitySensorListener);
@@ -395,14 +304,15 @@
* If both are available, the data on the intent takes precedence.
*/
private Uri[] getCallLogEntryUris() {
- Uri uri = getIntent().getData();
+ final Uri uri = getIntent().getData();
if (uri != null) {
// If there is a data on the intent, it takes precedence over the extra.
return new Uri[]{ uri };
}
- long[] ids = getIntent().getLongArrayExtra(EXTRA_CALL_LOG_IDS);
- Uri[] uris = new Uri[ids.length];
- for (int index = 0; index < ids.length; ++index) {
+ final long[] ids = getIntent().getLongArrayExtra(EXTRA_CALL_LOG_IDS);
+ final int numIds = ids == null ? 0 : ids.length;
+ final Uri[] uris = new Uri[numIds];
+ for (int index = 0; index < numIds; ++index) {
uris[index] = ContentUris.withAppendedId(Calls.CONTENT_URI_WITH_VOICEMAIL, ids[index]);
}
return uris;
@@ -416,8 +326,10 @@
TelephonyManager tm = (TelephonyManager)
getSystemService(Context.TELEPHONY_SERVICE);
if (tm.getCallState() == TelephonyManager.CALL_STATE_IDLE) {
- startActivity(CallUtil.getCallIntent(
- Uri.fromParts(CallUtil.SCHEME_TEL, mNumber, null)));
+ DialerUtils.startActivityWithErrorToast(this,
+ CallUtil.getCallIntent(Uri.fromParts(CallUtil.SCHEME_TEL, mNumber,
+ null)),
+ R.string.call_not_available);
return true;
}
}
@@ -469,9 +381,6 @@
final Uri contactUri = firstDetails.contactUri;
final Uri photoUri = firstDetails.photoUri;
- // Set the details header, based on the first phone call.
- mPhoneCallDetailsHelper.setCallDetailsHeader(mHeaderTextView, firstDetails);
-
// Cache the details about the phone number.
final boolean canPlaceCallsTo =
PhoneNumberUtilsWrapper.canPlaceCallsTo(mNumber, numberPresentation);
@@ -479,73 +388,7 @@
final boolean isVoicemailNumber = phoneUtils.isVoicemailNumber(mNumber);
final boolean isSipNumber = phoneUtils.isSipNumber(mNumber);
- // Let user view contact details if they exist, otherwise add option to create new
- // contact from this number.
- final Intent mainActionIntent;
- final int mainActionIcon;
- final String mainActionDescription;
-
- final CharSequence nameOrNumber;
- if (!TextUtils.isEmpty(firstDetails.name)) {
- nameOrNumber = firstDetails.name;
- } else {
- nameOrNumber = firstDetails.number;
- }
-
- boolean skipBind = false;
-
- if (contactUri != null && !UriUtils.isEncodedContactUri(contactUri)) {
- mainActionIntent = new Intent(Intent.ACTION_VIEW, contactUri);
- // This will launch People's detail contact screen, so we probably want to
- // treat it as a separate People task.
- mainActionIntent.setFlags(
- Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
- mainActionIcon = R.drawable.ic_contacts_holo_dark;
- mainActionDescription =
- getString(R.string.description_view_contact, nameOrNumber);
- } else if (UriUtils.isEncodedContactUri(contactUri)) {
- final Bundle bundle = new Bundle(1);
- bundle.putParcelable(BUNDLE_CONTACT_URI_EXTRA, contactUri);
- getLoaderManager().initLoader(LOADER_ID, bundle, mLoaderCallbacks);
- mainActionIntent = null;
- mainActionIcon = R.drawable.ic_add_contact_holo_dark;
- mainActionDescription = getString(R.string.description_add_contact);
- skipBind = true;
- } else if (isVoicemailNumber) {
- mainActionIntent = null;
- mainActionIcon = 0;
- mainActionDescription = null;
- } else if (isSipNumber) {
- // TODO: This item is currently disabled for SIP addresses, because
- // the Insert.PHONE extra only works correctly for PSTN numbers.
- //
- // To fix this for SIP addresses, we need to:
- // - define ContactsContract.Intents.Insert.SIP_ADDRESS, and use it here if
- // the current number is a SIP address
- // - update the contacts UI code to handle Insert.SIP_ADDRESS by
- // updating the SipAddress field
- // and then we can remove the "!isSipNumber" check above.
- mainActionIntent = null;
- mainActionIcon = 0;
- mainActionDescription = null;
- } else if (canPlaceCallsTo) {
- mainActionIntent = new Intent(Intent.ACTION_INSERT_OR_EDIT);
- mainActionIntent.setType(Contacts.CONTENT_ITEM_TYPE);
- mainActionIntent.putExtra(Insert.PHONE, mNumber);
- mainActionIcon = R.drawable.ic_add_contact_holo_dark;
- mainActionDescription = getString(R.string.description_add_contact);
- } else {
- // If we cannot call the number, when we probably cannot add it as a contact
- // either. This is usually the case of private, unknown, or payphone numbers.
- mainActionIntent = null;
- mainActionIcon = 0;
- mainActionDescription = null;
- }
-
- if (!skipBind) {
- bindContactPhotoAction(mainActionIntent, mainActionIcon,
- mainActionDescription);
- }
+ final CharSequence callLocationOrType = getNumberTypeOrLocation(firstDetails);
final CharSequence displayNumber =
mPhoneNumberHelper.getDisplayNumber(
@@ -553,39 +396,18 @@
firstDetails.numberPresentation,
firstDetails.formattedNumber);
- // This action allows to call the number that places the call.
- if (canPlaceCallsTo) {
- ViewEntry entry = new ViewEntry(
- getString(R.string.menu_callNumber,
- forceLeftToRight(displayNumber)),
- CallUtil.getCallIntent(mNumber),
- getString(R.string.description_call, nameOrNumber));
-
- // Only show a label if the number is shown and it is not a SIP address.
- if (!TextUtils.isEmpty(firstDetails.name)
- && !TextUtils.isEmpty(firstDetails.number)
- && !PhoneNumberUtils.isUriNumber(firstDetails.number.toString())) {
- entry.label = Phone.getTypeLabel(mResources, firstDetails.numberType,
- firstDetails.numberLabel);
- }
-
- // The secondary action allows to send an SMS to the number that placed the
- // call.
- if (phoneUtils.canSendSmsTo(mNumber, numberPresentation)) {
- entry.setSecondaryAction(
- R.drawable.ic_text_holo_light,
- new Intent(Intent.ACTION_SENDTO,
- Uri.fromParts("sms", mNumber, null)),
- getString(R.string.description_send_text_message, nameOrNumber));
- }
-
- configureCallButton(entry);
- mPhoneNumberToCopy = displayNumber;
- mPhoneNumberLabelToCopy = entry.label;
+ if (!TextUtils.isEmpty(firstDetails.name)) {
+ mCallerName.setText(firstDetails.name);
+ mCallerNumber.setText(callLocationOrType + " " + displayNumber);
} else {
- disableCallButton();
- mPhoneNumberToCopy = null;
- mPhoneNumberLabelToCopy = null;
+ mCallerName.setText(displayNumber);
+ if (!TextUtils.isEmpty(callLocationOrType)) {
+ mCallerNumber.setText(callLocationOrType);
+ mCallerNumber.setVisibility(View.VISIBLE);
+ } else {
+ mCallerNumber.setVisibility(View.GONE);
+ }
+
}
mHasEditNumberBeforeCallOption =
@@ -597,39 +419,10 @@
ListView historyList = (ListView) findViewById(R.id.history);
historyList.setAdapter(
new CallDetailHistoryAdapter(CallDetailActivity.this, mInflater,
- mCallTypeHelper, details, hasVoicemail(), canPlaceCallsTo,
- findViewById(R.id.controls)));
- BackScrollManager.bind(
- new ScrollableHeader() {
- private View mControls = findViewById(R.id.controls);
- private View mPhoto = findViewById(R.id.contact_background_sizer);
- private View mHeader = findViewById(R.id.photo_text_bar);
- private View mSeparator = findViewById(R.id.separator);
+ mCallTypeHelper, details));
- @Override
- public void setOffset(int offset) {
- mControls.setY(-offset);
- }
-
- @Override
- public int getMaximumScrollableHeaderOffset() {
- // We can scroll the photo out, but we should keep the header if
- // present.
- if (mHeader.getVisibility() == View.VISIBLE) {
- return mPhoto.getHeight() - mHeader.getHeight();
- } else {
- // If the header is not present, we should also scroll out the
- // separator line.
- return mPhoto.getHeight() + mSeparator.getHeight();
- }
- }
- },
- historyList);
-
- final String displayNameForDefaultImage = TextUtils.isEmpty(firstDetails.name) ?
- displayNumber.toString() : firstDetails.name.toString();
-
- final String lookupKey = ContactInfoHelper.getLookupKeyFromUri(contactUri);
+ String lookupKey = contactUri == null ? null
+ : ContactInfoHelper.getLookupKeyFromUri(contactUri);
final boolean isBusiness = mContactInfoHelper.isBusiness(firstDetails.sourceType);
@@ -638,42 +431,39 @@
isBusiness ? ContactPhotoManager.TYPE_BUSINESS :
ContactPhotoManager.TYPE_DEFAULT;
- loadContactPhotos(photoUri, displayNameForDefaultImage, lookupKey, contactType);
+ String nameForDefaultImage;
+ if (TextUtils.isEmpty(firstDetails.name)) {
+ nameForDefaultImage = mPhoneNumberHelper.getDisplayNumber(firstDetails.number,
+ firstDetails.numberPresentation,
+ firstDetails.formattedNumber).toString();
+ } else {
+ nameForDefaultImage = firstDetails.name.toString();
+ }
+
+ loadContactPhotos(
+ contactUri, photoUri, nameForDefaultImage, lookupKey, contactType);
findViewById(R.id.call_detail).setVisibility(View.VISIBLE);
}
+
+ /**
+ * Determines the location geocode text for a call, or the phone number type
+ * (if available).
+ *
+ * @param details The call details.
+ * @return The phone number type or location.
+ */
+ private CharSequence getNumberTypeOrLocation(PhoneCallDetails details) {
+ if (!TextUtils.isEmpty(details.name)) {
+ return Phone.getTypeLabel(mResources, details.numberType,
+ details.numberLabel);
+ } else {
+ return details.geocode;
+ }
+ }
}
mAsyncTaskExecutor.submit(Tasks.UPDATE_PHONE_CALL_DETAILS, new UpdateContactDetailsTask());
}
- private void bindContactPhotoAction(final Intent actionIntent, int actionIcon,
- String actionDescription) {
- if (actionIntent == null) {
- mMainActionView.setVisibility(View.INVISIBLE);
- mMainActionPushLayerView.setVisibility(View.GONE);
- mHeaderTextView.setVisibility(View.INVISIBLE);
- mHeaderOverlayView.setVisibility(View.INVISIBLE);
- } else {
- mMainActionView.setVisibility(View.VISIBLE);
- mMainActionView.setImageResource(actionIcon);
- mMainActionPushLayerView.setVisibility(View.VISIBLE);
- mMainActionPushLayerView.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- try {
- startActivity(actionIntent);
- } catch (ActivityNotFoundException e) {
- final Toast toast = Toast.makeText(CallDetailActivity.this,
- R.string.add_contact_not_available, Toast.LENGTH_SHORT);
- toast.show();
- }
- }
- });
- mMainActionPushLayerView.setContentDescription(actionDescription);
- mHeaderTextView.setVisibility(View.VISIBLE);
- mHeaderOverlayView.setVisibility(View.VISIBLE);
- }
- }
-
/** Return the phone call details for a given call log URI. */
private PhoneCallDetails getPhoneCallDetailsForUri(Uri callUri) {
ContentResolver resolver = getContentResolver();
@@ -742,12 +532,18 @@
}
/** Load the contact photos and places them in the corresponding views. */
- private void loadContactPhotos(Uri photoUri, String displayName, String lookupKey,
- int contactType) {
+ private void loadContactPhotos(Uri contactUri, Uri photoUri, String displayName,
+ String lookupKey, int contactType) {
+
final DefaultImageRequest request = new DefaultImageRequest(displayName, lookupKey,
- contactType);
- mContactPhotoManager.loadPhoto(mContactBackgroundView, photoUri,
- mContactBackgroundView.getWidth(), true, request);
+ contactType, true /* isCircular */);
+
+ mQuickContactBadge.assignContactUri(contactUri);
+ mQuickContactBadge.setContentDescription(
+ mResources.getString(R.string.description_contact_details, displayName));
+
+ mContactPhotoManager.loadDirectoryPhoto(mQuickContactBadge, photoUri,
+ false /* darkTheme */, true /* isCircular */, request);
}
static final class ViewEntry {
@@ -777,48 +573,6 @@
}
}
- /** Disables the call button area, e.g., for private numbers. */
- private void disableCallButton() {
- findViewById(R.id.call_and_sms).setVisibility(View.GONE);
- }
-
- /** Configures the call button area using the given entry. */
- private void configureCallButton(ViewEntry entry) {
- View convertView = findViewById(R.id.call_and_sms);
- convertView.setVisibility(View.VISIBLE);
-
- ImageView icon = (ImageView) convertView.findViewById(R.id.call_and_sms_icon);
- View divider = convertView.findViewById(R.id.call_and_sms_divider);
- TextView text = (TextView) convertView.findViewById(R.id.call_and_sms_text);
-
- View mainAction = convertView.findViewById(R.id.call_and_sms_main_action);
- mainAction.setOnClickListener(mPrimaryActionListener);
- mainAction.setTag(entry);
- mainAction.setContentDescription(entry.primaryDescription);
- mainAction.setOnLongClickListener(mPrimaryLongClickListener);
-
- if (entry.secondaryIntent != null) {
- icon.setOnClickListener(mSecondaryActionListener);
- icon.setImageResource(entry.secondaryIcon);
- icon.setVisibility(View.VISIBLE);
- icon.setTag(entry);
- icon.setContentDescription(entry.secondaryDescription);
- divider.setVisibility(View.VISIBLE);
- } else {
- icon.setVisibility(View.GONE);
- divider.setVisibility(View.GONE);
- }
- text.setText(entry.text);
-
- TextView label = (TextView) convertView.findViewById(R.id.call_and_sms_label);
- if (TextUtils.isEmpty(entry.label)) {
- label.setVisibility(View.GONE);
- } else {
- label.setText(entry.label);
- label.setVisibility(View.VISIBLE);
- }
- }
-
protected void updateVoicemailStatusMessage(Cursor statusCursor) {
if (statusCursor == null) {
mStatusMessageView.setVisibility(View.GONE);
@@ -840,7 +594,8 @@
mStatusMessageAction.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- startActivity(new Intent(Intent.ACTION_VIEW, message.actionUri));
+ DialerUtils.startActivityWithErrorToast(CallDetailActivity.this,
+ new Intent(Intent.ACTION_VIEW, message.actionUri));
}
});
} else {
@@ -899,7 +654,8 @@
public void onPostExecute(Void result) {
finish();
}
- });
+ }
+ );
}
public void onMenuEditNumberBeforeCall(MenuItem menuItem) {
@@ -915,20 +671,13 @@
getContentResolver().delete(voicemailUri, null, null);
return null;
}
+
@Override
public void onPostExecute(Void result) {
finish();
}
- });
- }
-
- /** Invoked when the user presses the home button in the action bar. */
- private void onHomeSelected() {
- Intent intent = new Intent(Intent.ACTION_VIEW, Calls.CONTENT_URI);
- // This will open the call log even if the detail view has been opened directly.
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- startActivity(intent);
- finish();
+ }
+ );
}
@Override
@@ -949,70 +698,10 @@
mProximitySensorManager.disable(waitForFarState);
}
- /**
- * If the phone number is selected, unselect it and return {@code true}.
- * Otherwise, just {@code false}.
- */
- private boolean finishPhoneNumerSelectedActionModeIfShown() {
- if (mPhoneNumberActionMode == null) return false;
- mPhoneNumberActionMode.finish();
- return true;
- }
-
- private void startPhoneNumberSelectedActionMode(View targetView) {
- mPhoneNumberActionMode = startActionMode(new PhoneNumberActionModeCallback(targetView));
- }
-
private void closeSystemDialogs() {
sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
}
- private class PhoneNumberActionModeCallback implements ActionMode.Callback {
- private final View mTargetView;
- private final Drawable mOriginalViewBackground;
-
- public PhoneNumberActionModeCallback(View targetView) {
- mTargetView = targetView;
-
- // Highlight the phone number view. Remember the old background, and put a new one.
- mOriginalViewBackground = mTargetView.getBackground();
- mTargetView.setBackgroundColor(getResources().getColor(R.color.item_selected));
- }
-
- @Override
- public boolean onCreateActionMode(ActionMode mode, Menu menu) {
- if (TextUtils.isEmpty(mPhoneNumberToCopy)) return false;
-
- getMenuInflater().inflate(R.menu.call_details_cab, menu);
- return true;
- }
-
- @Override
- public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
- return true;
- }
-
- @Override
- public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
- switch (item.getItemId()) {
- case R.id.copy_phone_number:
- ClipboardUtils.copyText(CallDetailActivity.this, mPhoneNumberLabelToCopy,
- mPhoneNumberToCopy, true);
- mode.finish(); // Close the CAB
- return true;
- }
- return false;
- }
-
- @Override
- public void onDestroyActionMode(ActionMode mode) {
- mPhoneNumberActionMode = null;
-
- // Restore the view background.
- mTargetView.setBackground(mOriginalViewBackground);
- }
- }
-
/** Returns the given text, forced to be left-to-right. */
private static CharSequence forceLeftToRight(CharSequence text) {
StringBuilder sb = new StringBuilder();
diff --git a/src/com/android/dialer/DialerApplication.java b/src/com/android/dialer/DialerApplication.java
index 39a1ac7..e788144 100644
--- a/src/com/android/dialer/DialerApplication.java
+++ b/src/com/android/dialer/DialerApplication.java
@@ -1,16 +1,47 @@
-// Copyright 2013 Google Inc. All Rights Reserved.
+/*
+ * Copyright (C) 2013 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;
import android.app.Application;
+import com.android.contacts.common.ContactPhotoManager;
import com.android.contacts.common.extensions.ExtensionsFactory;
public class DialerApplication extends Application {
+ private ContactPhotoManager mContactPhotoManager;
+
@Override
public void onCreate() {
super.onCreate();
ExtensionsFactory.init(getApplicationContext());
}
+
+ @Override
+ public Object getSystemService(String name) {
+ if (ContactPhotoManager.CONTACT_PHOTO_SERVICE.equals(name)) {
+ if (mContactPhotoManager == null) {
+ mContactPhotoManager = ContactPhotoManager.createContactPhotoManager(this);
+ registerComponentCallbacks(mContactPhotoManager);
+ mContactPhotoManager.preloadPhotosInBackground();
+ }
+ return mContactPhotoManager;
+ }
+
+ return super.getSystemService(name);
+ }
}
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 1e99b23..8e873c8 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -16,67 +16,81 @@
package com.android.dialer;
-import android.animation.Animator;
-import android.animation.Animator.AnimatorListener;
-import android.animation.AnimatorListenerAdapter;
+import android.animation.LayoutTransition;
+import android.app.ActionBar;
import android.app.Activity;
import android.app.Fragment;
-import android.app.FragmentManager;
import android.app.FragmentTransaction;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
+import android.content.res.Configuration;
+import android.content.res.Resources;
+import android.content.res.TypedArray;
import android.net.Uri;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.ServiceManager;
-import android.provider.CallLog.Calls;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Intents;
-import android.provider.ContactsContract.Intents.UI;
import android.speech.RecognizerIntent;
+import android.support.v4.view.ViewPager;
+import android.telecomm.Subscription;
import android.telephony.TelephonyManager;
import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.util.Log;
+import android.view.DragEvent;
+import android.view.KeyEvent;
import android.view.Menu;
import android.view.MenuItem;
+import android.view.MotionEvent;
import android.view.View;
-import android.view.ViewGroup.LayoutParams;
-import android.view.ViewTreeObserver.OnGlobalLayoutListener;
+import android.view.ViewTreeObserver;
+import android.view.View.OnDragListener;
+import android.view.View.OnTouchListener;
+import android.view.animation.Animation;
+import android.view.animation.AnimationUtils;
import android.view.inputmethod.InputMethodManager;
import android.widget.AbsListView.OnScrollListener;
import android.widget.EditText;
-import android.widget.LinearLayout;
+import android.widget.FrameLayout;
+import android.widget.ImageButton;
import android.widget.PopupMenu;
import android.widget.Toast;
import com.android.contacts.common.CallUtil;
+import com.android.contacts.common.SubscriptionManager;
import com.android.contacts.common.activity.TransactionSafeActivity;
import com.android.contacts.common.dialog.ClearFrequentsDialog;
+import com.android.contacts.common.dialog.SelectSubscriptionDialogFragment;
import com.android.contacts.common.interactions.ImportExportDialogFragment;
import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
+import com.android.contacts.common.widget.FloatingActionButtonController;
import com.android.dialer.calllog.CallLogActivity;
import com.android.dialer.database.DialerDatabaseHelper;
import com.android.dialer.dialpad.DialpadFragment;
import com.android.dialer.dialpad.SmartDialNameMatcher;
import com.android.dialer.dialpad.SmartDialPrefix;
import com.android.dialer.interactions.PhoneNumberInteraction;
-import com.android.dialer.list.AllContactsActivity;
import com.android.dialer.list.DragDropController;
+import com.android.dialer.list.ListsFragment;
import com.android.dialer.list.OnDragDropListener;
import com.android.dialer.list.OnListFragmentScrolledListener;
-import com.android.dialer.list.PhoneFavoriteFragment;
-import com.android.dialer.list.PhoneFavoriteTileView;
+import com.android.dialer.list.SpeedDialFragment;
+import com.android.dialer.list.PhoneFavoriteSquareTileView;
import com.android.dialer.list.RegularSearchFragment;
-import com.android.dialer.list.RemoveView;
import com.android.dialer.list.SearchFragment;
import com.android.dialer.list.SmartDialSearchFragment;
+import com.android.dialer.util.DialerUtils;
+import com.android.dialer.widget.ActionBarController;
+import com.android.dialer.widget.SearchEditTextLayout;
+import com.android.dialer.widget.SearchEditTextLayout.OnBackButtonClickedListener;
import com.android.dialerbind.DatabaseHelperManager;
-import com.android.internal.telephony.ITelephony;
+import com.android.phone.common.animation.AnimationListenerAdapter;
import java.util.ArrayList;
import java.util.List;
@@ -85,16 +99,24 @@
* The dialer tab's title is 'phone', a more common name (see strings.xml).
*/
public class DialtactsActivity extends TransactionSafeActivity implements View.OnClickListener,
- DialpadFragment.OnDialpadQueryChangedListener, PopupMenu.OnMenuItemClickListener,
+ DialpadFragment.OnDialpadQueryChangedListener,
OnListFragmentScrolledListener,
DialpadFragment.HostInterface,
- PhoneFavoriteFragment.OnShowAllContactsListener,
- PhoneFavoriteFragment.HostInterface,
- OnDragDropListener, View.OnLongClickListener {
+ ListsFragment.HostInterface,
+ SpeedDialFragment.HostInterface,
+ SearchFragment.HostInterface,
+ OnDragDropListener,
+ OnPhoneNumberPickerActionListener,
+ PopupMenu.OnMenuItemClickListener,
+ ViewPager.OnPageChangeListener,
+ ActionBarController.ActivityUi {
private static final String TAG = "DialtactsActivity";
public static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+ /** Temporary flag for disabling subscription selection menu */
+ public static final boolean ENABLE_SUBSCRIPTION_SELECT = false;
+
public static final String SHARED_PREFS_NAME = "com.android.dialer_preferences";
/** Used to open Call Setting */
@@ -109,6 +131,7 @@
private static final String KEY_IN_DIALPAD_SEARCH_UI = "in_dialpad_search_ui";
private static final String KEY_SEARCH_QUERY = "search_query";
private static final String KEY_FIRST_LAUNCH = "first_launch";
+ private static final String KEY_IS_DIALPAD_SHOWN = "is_dialpad_shown";
private static final String TAG_DIALPAD_FRAGMENT = "dialpad";
private static final String TAG_REGULAR_SEARCH_FRAGMENT = "search";
@@ -122,14 +145,7 @@
private static final int ACTIVITY_REQUEST_CODE_VOICE_SEARCH = 1;
- private static final int ANIMATION_DURATION = 200;
-
- private String mFilterText;
-
- /**
- * The main fragment displaying the user's favorites and frequent contacts
- */
- private PhoneFavoriteFragment mPhoneFavoriteFragment;
+ private FrameLayout parentLayout;
/**
* Fragment containing the dialpad that slides into view
@@ -146,20 +162,51 @@
*/
private SmartDialSearchFragment mSmartDialSearchFragment;
- private View mMenuButton;
- private View mFakeActionBar;
- private View mCallHistoryButton;
- private View mDialpadButton;
- private View mDialButton;
- private PopupMenu mOverflowMenu;
- private PopupMenu mDialpadOverflowMenu;
+ /**
+ * Animation that slides in.
+ */
+ private Animation mSlideIn;
- // Padding view used to shift the fragments up when the dialpad is shown.
- private View mFragmentsFrame;
+ /**
+ * Animation that slides out.
+ */
+ private Animation mSlideOut;
+
+ /**
+ * Listener for after slide out animation completes on dialer fragment.
+ */
+ AnimationListenerAdapter mSlideOutListener = new AnimationListenerAdapter() {
+ @Override
+ public void onAnimationEnd(Animation animation) {
+ commitDialpadFragmentHide();
+ }
+ };
+
+ /**
+ * Fragment containing the speed dial list, recents list, and all contacts list.
+ */
+ private ListsFragment mListsFragment;
private boolean mInDialpadSearch;
private boolean mInRegularSearch;
private boolean mClearSearchOnPause;
+ private boolean mIsDialpadShown;
+ private boolean mShowDialpadOnResume;
+
+ /**
+ * Whether or not the device is in landscape orientation.
+ */
+ private boolean mIsLandscape;
+
+ /**
+ * Information about the currently selected subscription.
+ */
+ private SubscriptionManager mSubscriptionManager = null;
+
+ /**
+ * The position of the currently selected tab in the attached {@link ListsFragment}.
+ */
+ private int mCurrentTabPosition = 0;
/**
* True if the dialpad is only temporarily showing due to being in call
@@ -170,21 +217,35 @@
* True when this activity has been launched for the first time.
*/
private boolean mFirstLaunch;
- private View mSearchViewContainer;
- private RemoveView mRemoveViewContainer;
- // This view points to the Framelayout that houses both the search view and remove view
- // containers.
- private View mSearchAndRemoveViewContainer;
- private View mSearchViewCloseButton;
- private View mVoiceSearchButton;
+
+ /**
+ * Search query to be applied to the SearchView in the ActionBar once
+ * onCreateOptionsMenu has been called.
+ */
+ private String mPendingSearchViewQuery;
+
private EditText mSearchView;
+ private View mVoiceSearchButton;
private String mSearchQuery;
private DialerDatabaseHelper mDialerDatabaseHelper;
+ private DragDropController mDragDropController;
+ private ActionBarController mActionBarController;
- private class OverflowPopupMenu extends PopupMenu {
- public OverflowPopupMenu(Context context, View anchor) {
+ private String mDescriptionDialButtonStr;
+ private String mActionMenuDialpadButtonStr;
+ private ImageButton mFloatingActionButton;
+ private FloatingActionButtonController mFloatingActionButtonController;
+ /**
+ * Additional offset for FAB to be lowered when dialpad is open.
+ */
+ private int mFloatingActionButtonDialpadMarginBottomOffset;
+
+ private int mActionBarHeight;
+
+ private class OptionsPopupMenu extends PopupMenu {
+ public OptionsPopupMenu(Context context, View anchor) {
super(context, anchor);
}
@@ -192,119 +253,169 @@
public void show() {
final Menu menu = getMenu();
final MenuItem clearFrequents = menu.findItem(R.id.menu_clear_frequents);
- clearFrequents.setVisible(mPhoneFavoriteFragment.hasFrequents());
+ clearFrequents.setVisible(mListsFragment != null &&
+ mListsFragment.getSpeedDialFragment() != null &&
+ mListsFragment.getSpeedDialFragment().hasFrequents());
super.show();
}
}
/**
- * Listener used when one of phone numbers in search UI is selected. This will initiate a
- * phone call using the phone number.
+ * Listener that listens to drag events and sends their x and y coordinates to a
+ * {@link DragDropController}.
*/
- private final OnPhoneNumberPickerActionListener mPhoneNumberPickerActionListener =
- new OnPhoneNumberPickerActionListener() {
- @Override
- public void onPickPhoneNumberAction(Uri dataUri) {
- // Specify call-origin so that users will see the previous tab instead of
- // CallLog screen (search UI will be automatically exited).
- PhoneNumberInteraction.startInteractionForPhoneCall(
- DialtactsActivity.this, dataUri, getCallOrigin());
- mClearSearchOnPause = true;
- }
-
- @Override
- public void onCallNumberDirectly(String phoneNumber) {
- Intent intent = CallUtil.getCallIntent(phoneNumber, getCallOrigin());
- startActivity(intent);
- mClearSearchOnPause = true;
- }
-
- @Override
- public void onShortcutIntentCreated(Intent intent) {
- Log.w(TAG, "Unsupported intent has come (" + intent + "). Ignoring.");
- }
-
- @Override
- public void onHomeInActionBarSelected() {
- exitSearchUi();
- }
- };
+ private class LayoutOnDragListener implements OnDragListener {
+ @Override
+ public boolean onDrag(View v, DragEvent event) {
+ if (event.getAction() == DragEvent.ACTION_DRAG_LOCATION) {
+ mDragDropController.handleDragHovered(v, (int) event.getX(), (int) event.getY());
+ }
+ return true;
+ }
+ }
/**
* Listener used to send search queries to the phone search fragment.
*/
private final TextWatcher mPhoneSearchQueryTextListener = new TextWatcher() {
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+ }
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+ final String newText = s.toString();
+ if (newText.equals(mSearchQuery)) {
+ // If the query hasn't changed (perhaps due to activity being destroyed
+ // and restored, or user launching the same DIAL intent twice), then there is
+ // no need to do anything here.
+ return;
}
+ if (DEBUG) {
+ Log.d(TAG, "onTextChange for mSearchView called with new query: " + newText);
+ Log.d(TAG, "Previous Query: " + mSearchQuery);
+ }
+ mSearchQuery = newText;
- @Override
- public void onTextChanged(CharSequence s, int start, int before, int count) {
- final String newText = s.toString();
- if (newText.equals(mSearchQuery)) {
- // If the query hasn't changed (perhaps due to activity being destroyed
- // and restored, or user launching the same DIAL intent twice), then there is
- // no need to do anything here.
- return;
- }
- mSearchQuery = newText;
- if (DEBUG) {
- Log.d(TAG, "onTextChange for mSearchView called with new query: " + s);
- }
- final boolean dialpadSearch = isDialpadShowing();
-
- // Show search result with non-empty text. Show a bare list otherwise.
- if (TextUtils.isEmpty(newText) && getInSearchUi()) {
- exitSearchUi();
- mSearchViewCloseButton.setVisibility(View.GONE);
- mVoiceSearchButton.setVisibility(View.VISIBLE);
- return;
- } else if (!TextUtils.isEmpty(newText)) {
- final boolean sameSearchMode = (dialpadSearch && mInDialpadSearch) ||
- (!dialpadSearch && mInRegularSearch);
- if (!sameSearchMode) {
- // call enterSearchUi only if we are switching search modes, or entering
- // search ui for the first time
- enterSearchUi(dialpadSearch, newText);
- }
-
- if (dialpadSearch && mSmartDialSearchFragment != null) {
- mSmartDialSearchFragment.setQueryString(newText, false);
- } else if (mRegularSearchFragment != null) {
- mRegularSearchFragment.setQueryString(newText, false);
- }
- mSearchViewCloseButton.setVisibility(View.VISIBLE);
- mVoiceSearchButton.setVisibility(View.GONE);
- return;
+ // Show search fragment only when the query string is changed to non-empty text.
+ if (!TextUtils.isEmpty(newText)) {
+ // Call enterSearchUi only if we are switching search modes, or showing a search
+ // fragment for the first time.
+ final boolean sameSearchMode = (mIsDialpadShown && mInDialpadSearch) ||
+ (!mIsDialpadShown && mInRegularSearch);
+ if (!sameSearchMode) {
+ enterSearchUi(mIsDialpadShown, mSearchQuery);
}
}
- @Override
- public void afterTextChanged(Editable s) {
+ if (mSmartDialSearchFragment != null && mSmartDialSearchFragment.isVisible()) {
+ mSmartDialSearchFragment.setQueryString(mSearchQuery, false /* delaySelection */);
+ } else if (mRegularSearchFragment != null && mRegularSearchFragment.isVisible()) {
+ mRegularSearchFragment.setQueryString(mSearchQuery, false /* delaySelection */);
}
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ }
};
- private boolean isDialpadShowing() {
- return mDialpadFragment != null && mDialpadFragment.isVisible();
- }
+
+ /**
+ * Open the search UI when the user clicks on the search box.
+ */
+ private final View.OnClickListener mSearchViewOnClickListener = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (!isInSearchUi()) {
+ mActionBarController.onSearchBoxTapped();
+ enterSearchUi(false /* smartDialSearch */, mSearchView.getText().toString());
+ }
+ }
+ };
+
+ /**
+ * If the search term is empty and the user closes the soft keyboard, close the search UI.
+ */
+ private final View.OnKeyListener mSearchEditTextLayoutListener = new View.OnKeyListener() {
+ @Override
+ public boolean onKey(View v, int keyCode, KeyEvent event) {
+ if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN &&
+ TextUtils.isEmpty(mSearchView.getText().toString())) {
+ maybeExitSearchUi();
+ }
+ return false;
+ }
+ };
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mFirstLaunch = true;
- final Intent intent = getIntent();
- fixIntent(intent);
+ final Resources resources = getResources();
+ mActionBarHeight = resources.getDimensionPixelSize(R.dimen.action_bar_height);
+ mDescriptionDialButtonStr = resources.getString(R.string.description_dial_button);
+ mActionMenuDialpadButtonStr = resources.getString(R.string.action_menu_dialpad_button);
setContentView(R.layout.dialtacts_activity);
+ getWindow().setBackgroundDrawable(null);
- getActionBar().hide();
+ final ActionBar actionBar = getActionBar();
+ actionBar.setCustomView(R.layout.search_edittext);
+ actionBar.setDisplayShowCustomEnabled(true);
+ actionBar.setBackgroundDrawable(null);
+
+ mActionBarController = new ActionBarController(this,
+ (SearchEditTextLayout) actionBar.getCustomView());
+
+ SearchEditTextLayout searchEditTextLayout =
+ (SearchEditTextLayout) actionBar.getCustomView();
+ searchEditTextLayout.setPreImeKeyListener(mSearchEditTextLayoutListener);
+
+ mSearchView = (EditText) searchEditTextLayout.findViewById(R.id.search_view);
+ mSearchView.addTextChangedListener(mPhoneSearchQueryTextListener);
+ mVoiceSearchButton = searchEditTextLayout.findViewById(R.id.voice_search_button);
+ searchEditTextLayout.findViewById(R.id.search_magnifying_glass)
+ .setOnClickListener(mSearchViewOnClickListener);
+ searchEditTextLayout.findViewById(R.id.search_box_start_search)
+ .setOnClickListener(mSearchViewOnClickListener);
+ searchEditTextLayout.setOnBackButtonClickedListener(new OnBackButtonClickedListener() {
+ @Override
+ public void onBackButtonClicked() {
+ onBackPressed();
+ }
+ });
+
+ mIsLandscape = getResources().getConfiguration().orientation
+ == Configuration.ORIENTATION_LANDSCAPE;
+
+ if (getTelephonyManager().getSubscriptions().size() > 1 && ENABLE_SUBSCRIPTION_SELECT) {
+ mSubscriptionManager = new SubscriptionManager(getTelephonyManager());
+ }
+
+ final View floatingActionButtonContainer = findViewById(
+ R.id.floating_action_button_container);
+ mFloatingActionButton = (ImageButton) findViewById(R.id.floating_action_button);
+ int floatingActionButtonWidth = resources.getDimensionPixelSize(
+ R.dimen.floating_action_button_width);
+ mFloatingActionButton.setOnClickListener(this);
+ mFloatingActionButtonController = new FloatingActionButtonController(this,
+ floatingActionButtonContainer);
+ mFloatingActionButtonDialpadMarginBottomOffset = resources.getDimensionPixelOffset(
+ R.dimen.floating_action_button_dialpad_margin_bottom_offset);
+
+ ImageButton optionsMenuButton =
+ (ImageButton) searchEditTextLayout.findViewById(R.id.dialtacts_options_menu_button);
+ optionsMenuButton.setOnClickListener(this);
+ final OptionsPopupMenu optionsMenu = buildOptionsMenu(optionsMenuButton);
+ optionsMenuButton.setOnTouchListener(optionsMenu.getDragToOpenListener());
// Add the favorites fragment, and the dialpad fragment, but only if savedInstanceState
// is null. Otherwise the fragment manager takes care of recreating these fragments.
if (savedInstanceState == null) {
getFragmentManager().beginTransaction()
- .add(R.id.dialtacts_frame, new PhoneFavoriteFragment(), TAG_FAVORITES_FRAGMENT)
+ .add(R.id.dialtacts_frame, new ListsFragment(), TAG_FAVORITES_FRAGMENT)
.add(R.id.dialtacts_container, new DialpadFragment(), TAG_DIALPAD_FRAGMENT)
.commit();
} else {
@@ -312,28 +423,55 @@
mInRegularSearch = savedInstanceState.getBoolean(KEY_IN_REGULAR_SEARCH_UI);
mInDialpadSearch = savedInstanceState.getBoolean(KEY_IN_DIALPAD_SEARCH_UI);
mFirstLaunch = savedInstanceState.getBoolean(KEY_FIRST_LAUNCH);
+ mShowDialpadOnResume = savedInstanceState.getBoolean(KEY_IS_DIALPAD_SHOWN);
+ mActionBarController.restoreInstanceState(savedInstanceState);
}
- mFragmentsFrame = findViewById(R.id.dialtacts_frame);
+ mSlideIn = AnimationUtils.loadAnimation(this,
+ mIsLandscape ? R.anim.dialpad_slide_in_right : R.anim.dialpad_slide_in_bottom);
+ mSlideOut = AnimationUtils.loadAnimation(this,
+ mIsLandscape ? R.anim.dialpad_slide_out_right : R.anim.dialpad_slide_out_bottom);
- mRemoveViewContainer = (RemoveView) findViewById(R.id.remove_view_container);
+ mSlideOut.setAnimationListener(mSlideOutListener);
- mSearchAndRemoveViewContainer = findViewById(R.id.search_and_remove_view_container);
+ parentLayout = (FrameLayout) findViewById(R.id.dialtacts_mainlayout);
+ parentLayout.getLayoutTransition().enableTransitionType(LayoutTransition.CHANGING);
+ parentLayout.setOnDragListener(new LayoutOnDragListener());
+ floatingActionButtonContainer.getViewTreeObserver().addOnGlobalLayoutListener(
+ new ViewTreeObserver.OnGlobalLayoutListener() {
+ @Override
+ public void onGlobalLayout() {
+ final ViewTreeObserver observer = floatingActionButtonContainer
+ .getViewTreeObserver();
+ if (!observer.isAlive()) {
+ return;
+ }
+ observer.removeOnGlobalLayoutListener(this);
+ int screenWidth = parentLayout.getWidth();
+ mFloatingActionButtonController.setScreenWidth(screenWidth);
+ updateFloatingActionButtonControllerAlignment(false /* animate */);
+ }
+ });
- setupFakeActionBarItems();
- prepareSearchView();
-
- if (UI.FILTER_CONTACTS_ACTION.equals(intent.getAction())
- && savedInstanceState == null) {
- setupFilterText(intent);
- }
-
- hideDialpadFragment(false, false);
+ setupActivityOverlay();
mDialerDatabaseHelper = DatabaseHelperManager.getDatabaseHelper(this);
SmartDialPrefix.initializeNanpSettings(this);
}
+ private void setupActivityOverlay() {
+ final View activityOverlay = findViewById(R.id.activity_overlay);
+ activityOverlay.setOnTouchListener(new OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ if (!mIsDialpadShown) {
+ maybeExitSearchUi();
+ }
+ return false;
+ }
+ });
+ }
+
@Override
protected void onResume() {
super.onResume();
@@ -342,10 +480,14 @@
} else if (!phoneIsInUse() && mInCallDialpadUp) {
hideDialpadFragment(false, true);
mInCallDialpadUp = false;
+ } else if (mShowDialpadOnResume) {
+ showDialpadFragment(false);
+ mShowDialpadOnResume = false;
}
- prepareVoiceSearchButton();
mFirstLaunch = false;
+ prepareVoiceSearchButton();
mDialerDatabaseHelper.startSmartDialUpdateThread();
+ updateFloatingActionButtonControllerAlignment(false /* animate */);
}
@Override
@@ -364,69 +506,31 @@
outState.putBoolean(KEY_IN_REGULAR_SEARCH_UI, mInRegularSearch);
outState.putBoolean(KEY_IN_DIALPAD_SEARCH_UI, mInDialpadSearch);
outState.putBoolean(KEY_FIRST_LAUNCH, mFirstLaunch);
+ outState.putBoolean(KEY_IS_DIALPAD_SHOWN, mIsDialpadShown);
+ mActionBarController.saveInstanceState(outState);
}
@Override
public void onAttachFragment(Fragment fragment) {
if (fragment instanceof DialpadFragment) {
mDialpadFragment = (DialpadFragment) fragment;
- final FragmentTransaction transaction = getFragmentManager().beginTransaction();
- transaction.hide(mDialpadFragment);
- transaction.commit();
+ if (!mShowDialpadOnResume) {
+ final FragmentTransaction transaction = getFragmentManager().beginTransaction();
+ transaction.hide(mDialpadFragment);
+ transaction.commit();
+ }
} else if (fragment instanceof SmartDialSearchFragment) {
mSmartDialSearchFragment = (SmartDialSearchFragment) fragment;
- mSmartDialSearchFragment.setOnPhoneNumberPickerActionListener(
- mPhoneNumberPickerActionListener);
- if (mFragmentsFrame != null) {
- mFragmentsFrame.setAlpha(1.0f);
- }
+ mSmartDialSearchFragment.setOnPhoneNumberPickerActionListener(this);
} else if (fragment instanceof SearchFragment) {
mRegularSearchFragment = (RegularSearchFragment) fragment;
- mRegularSearchFragment.setOnPhoneNumberPickerActionListener(
- mPhoneNumberPickerActionListener);
- if (mFragmentsFrame != null) {
- mFragmentsFrame.setAlpha(1.0f);
- }
- } else if (fragment instanceof PhoneFavoriteFragment) {
- mPhoneFavoriteFragment = (PhoneFavoriteFragment) fragment;
- mPhoneFavoriteFragment.setListener(mPhoneFavoriteListener);
+ mRegularSearchFragment.setOnPhoneNumberPickerActionListener(this);
+ } else if (fragment instanceof ListsFragment) {
+ mListsFragment = (ListsFragment) fragment;
+ mListsFragment.addOnPageChangeListener(this);
}
}
- @Override
- public boolean onMenuItemClick(MenuItem item) {
- switch (item.getItemId()) {
- case R.id.menu_import_export:
- // We hard-code the "contactsAreAvailable" argument because doing it properly would
- // involve querying a {@link ProviderStatusLoader}, which we don't want to do right
- // now in Dialtacts for (potential) performance reasons. Compare with how it is
- // done in {@link PeopleActivity}.
- ImportExportDialogFragment.show(getFragmentManager(), true,
- DialtactsActivity.class);
- return true;
- case R.id.menu_clear_frequents:
- ClearFrequentsDialog.show(getFragmentManager());
- return true;
- case R.id.menu_add_contact:
- try {
- startActivity(new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI));
- } catch (ActivityNotFoundException e) {
- Toast toast = Toast.makeText(this,
- R.string.add_contact_not_available,
- Toast.LENGTH_SHORT);
- toast.show();
- }
- return true;
- case R.id.menu_call_settings:
- handleMenuSettings();
- return true;
- case R.id.menu_all_contacts:
- onShowAllContacts();
- return true;
- }
- return false;
- }
-
protected void handleMenuSettings() {
openTelephonySetting(this);
}
@@ -439,37 +543,13 @@
@Override
public void onClick(View view) {
switch (view.getId()) {
- case R.id.overflow_menu: {
- if (isDialpadShowing()) {
- mDialpadOverflowMenu.show();
+ case R.id.floating_action_button:
+ if (!mIsDialpadShown) {
+ mInCallDialpadUp = false;
+ showDialpadFragment(true);
} else {
- mOverflowMenu.show();
- }
- break;
- }
- case R.id.dialpad_button:
- // Reset the boolean flag that tracks whether the dialpad was up because
- // we were in call. Regardless of whether it was true before, we want to
- // show the dialpad because the user has explicitly clicked the dialpad
- // button.
- mInCallDialpadUp = false;
- showDialpadFragment(true);
- break;
- case R.id.dial_button:
- // Dial button was pressed; tell the Dialpad fragment
- mDialpadFragment.dialButtonPressed();
- break;
- case R.id.call_history_button:
- // Use explicit CallLogActivity intent instead of ACTION_VIEW +
- // CONTENT_TYPE, so that we always open our call log from our dialer
- final Intent intent = new Intent(this, CallLogActivity.class);
- startActivity(intent);
- break;
- case R.id.search_close_button:
- // Clear the search field
- if (!TextUtils.isEmpty(mSearchView.getText())) {
- mDialpadFragment.clearDialpad();
- mSearchView.setText("");
+ // Dial button was pressed; tell the Dialpad fragment
+ mDialpadFragment.dialButtonPressed();
}
break;
case R.id.voice_search_button:
@@ -481,6 +561,9 @@
Toast.LENGTH_SHORT).show();
}
break;
+ case R.id.dialtacts_options_menu_button:
+ buildOptionsMenu(view).show();
+ break;
default: {
Log.wtf(TAG, "Unexpected onClick event from " + view);
break;
@@ -489,17 +572,38 @@
}
@Override
- public boolean onLongClick(View view) {
- switch (view.getId()) {
- case R.id.dial_button: {
- // Dial button was pressed; tell the Dialpad fragment
- mDialpadFragment.dialButtonPressed();
- return true; // Consume the event
- }
- default: {
- Log.wtf(TAG, "Unexpected onClick event from " + view);
+ public boolean onMenuItemClick(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.menu_history:
+ showCallHistory();
break;
- }
+ case R.id.menu_add_contact:
+ try {
+ startActivity(new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI));
+ } catch (ActivityNotFoundException e) {
+ Toast toast = Toast.makeText(this,
+ R.string.add_contact_not_available,
+ Toast.LENGTH_SHORT);
+ toast.show();
+ }
+ break;
+ case R.id.menu_import_export:
+ // We hard-code the "contactsAreAvailable" argument because doing it properly would
+ // involve querying a {@link ProviderStatusLoader}, which we don't want to do right
+ // now in Dialtacts for (potential) performance reasons. Compare with how it is
+ // done in {@link PeopleActivity}.
+ ImportExportDialogFragment.show(getFragmentManager(), true,
+ DialtactsActivity.class);
+ return true;
+ case R.id.menu_clear_frequents:
+ ClearFrequentsDialog.show(getFragmentManager());
+ return true;
+ case R.id.menu_call_settings:
+ handleMenuSettings();
+ return true;
+ case R.id.menu_select_subscription:
+ SelectSubscriptionDialogFragment.show(getFragmentManager(), mSubscriptionManager);
+ return true;
}
return false;
}
@@ -523,58 +627,142 @@
super.onActivityResult(requestCode, resultCode, data);
}
+ /**
+ * Initiates a fragment transaction to show the dialpad fragment. Animations and other visual
+ * updates are handled by a callback which is invoked after the dialpad fragment is shown.
+ * @see #onDialpadShown
+ */
private void showDialpadFragment(boolean animate) {
- mDialpadFragment.setAdjustTranslationForAnimation(animate);
+ if (mIsDialpadShown) {
+ return;
+ }
+ mIsDialpadShown = true;
+ mDialpadFragment.setAnimate(animate);
+ mDialpadFragment.setSubscriptionManager(mSubscriptionManager);
+
final FragmentTransaction ft = getFragmentManager().beginTransaction();
- if (animate) {
- ft.setCustomAnimations(R.anim.slide_in, 0);
+ ft.show(mDialpadFragment);
+ ft.commit();
+
+ mActionBarController.onDialpadUp();
+
+ if (!isInSearchUi()) {
+ enterSearchUi(true /* isSmartDial */, mSearchQuery);
+ }
+ }
+
+ /**
+ * Callback from child DialpadFragment when the dialpad is shown.
+ */
+ public void onDialpadShown() {
+ mFloatingActionButton.setImageResource(R.drawable.fab_ic_call);
+ mFloatingActionButton.setContentDescription(mDescriptionDialButtonStr);
+ updateFloatingActionButtonControllerAlignment(mDialpadFragment.getAnimate());
+ if (mDialpadFragment.getAnimate()) {
+ mDialpadFragment.getView().startAnimation(mSlideIn);
} else {
mDialpadFragment.setYFraction(0);
}
- ft.show(mDialpadFragment);
- ft.commit();
- mDialButton.setVisibility(shouldShowOnscreenDialButton() ? View.VISIBLE : View.GONE);
- mDialpadButton.setVisibility(View.GONE);
- if (mDialpadOverflowMenu == null) {
- mDialpadOverflowMenu = mDialpadFragment.buildOptionsMenu(mMenuButton);
- }
-
- mMenuButton.setOnTouchListener(mDialpadOverflowMenu.getDragToOpenListener());
+ updateSearchFragmentPosition();
}
+ /**
+ * Initiates animations and other visual updates to hide the dialpad. The fragment is hidden in
+ * a callback after the hide animation ends.
+ * @see #commitDialpadFragmentHide
+ */
public void hideDialpadFragment(boolean animate, boolean clearDialpad) {
- if (mDialpadFragment == null) return;
+ if (mDialpadFragment == null) {
+ return;
+ }
if (clearDialpad) {
mDialpadFragment.clearDialpad();
}
- if (!mDialpadFragment.isVisible()) return;
- mDialpadFragment.setAdjustTranslationForAnimation(animate);
- final FragmentTransaction ft = getFragmentManager().beginTransaction();
- if (animate) {
- ft.setCustomAnimations(0, R.anim.slide_out);
+ if (!mIsDialpadShown) {
+ return;
}
- ft.hide(mDialpadFragment);
- ft.commit();
- mDialButton.setVisibility(View.GONE);
- mDialpadButton.setVisibility(View.VISIBLE);
- mMenuButton.setOnTouchListener(mOverflowMenu.getDragToOpenListener());
+ mIsDialpadShown = false;
+ mDialpadFragment.setAnimate(animate);
+
+ updateSearchFragmentPosition();
+ mFloatingActionButton.setImageResource(R.drawable.fab_ic_dial);
+ mFloatingActionButton.setContentDescription(mActionMenuDialpadButtonStr);
+
+ updateFloatingActionButtonControllerAlignment(animate);
+ if (animate) {
+ mDialpadFragment.getView().startAnimation(mSlideOut);
+ } else {
+ commitDialpadFragmentHide();
+ }
+
+ mActionBarController.onDialpadDown();
+
+ if (isInSearchUi()) {
+ if (TextUtils.isEmpty(mSearchQuery)) {
+ exitSearchUi();
+ }
+ }
}
- private void prepareSearchView() {
- mSearchViewContainer = findViewById(R.id.search_view_container);
- mSearchViewCloseButton = findViewById(R.id.search_close_button);
- mSearchViewCloseButton.setOnClickListener(this);
+ /**
+ * Finishes hiding the dialpad fragment after any animations are completed.
+ */
+ private void commitDialpadFragmentHide() {
+ final FragmentTransaction ft = getFragmentManager().beginTransaction();
+ ft.hide(mDialpadFragment);
+ ft.commit();
+ }
- mSearchView = (EditText) findViewById(R.id.search_view);
- mSearchView.addTextChangedListener(mPhoneSearchQueryTextListener);
- mSearchView.setHint(getString(R.string.dialer_hint_find_contact));
+ private void updateSearchFragmentPosition() {
+ SearchFragment fragment = null;
+ if (mSmartDialSearchFragment != null && mSmartDialSearchFragment.isVisible()) {
+ fragment = mSmartDialSearchFragment;
+ } else if (mRegularSearchFragment != null && mRegularSearchFragment.isVisible()) {
+ fragment = mRegularSearchFragment;
+ }
+ if (fragment != null && fragment.isVisible()) {
+ fragment.updatePosition(true /* animate */);
+ }
+ }
- prepareVoiceSearchButton();
+ @Override
+ public boolean isInSearchUi() {
+ return mInDialpadSearch || mInRegularSearch;
+ }
+
+ @Override
+ public boolean hasSearchQuery() {
+ return !TextUtils.isEmpty(mSearchQuery);
+ }
+
+ @Override
+ public boolean shouldShowActionBar() {
+ return mListsFragment.shouldShowActionBar();
+ }
+
+ private void setNotInSearchUi() {
+ mInDialpadSearch = false;
+ mInRegularSearch = false;
+ }
+
+ private void hideDialpadAndSearchUi() {
+ if (mIsDialpadShown) {
+ hideDialpadFragment(false, true);
+ } else {
+ exitSearchUi();
+ }
+ }
+
+ private void hideInputMethod(View view) {
+ final InputMethodManager imm = (InputMethodManager) getSystemService(
+ Context.INPUT_METHOD_SERVICE);
+ if (imm != null && view != null) {
+ imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
+ }
}
private void prepareVoiceSearchButton() {
- mVoiceSearchButton = findViewById(R.id.voice_search_button);
final Intent voiceIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
if (canIntentBeHandled(voiceIntent)) {
mVoiceSearchButton.setVisibility(View.VISIBLE);
@@ -584,114 +772,23 @@
}
}
- final AnimatorListener mHideListener = new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- mSearchAndRemoveViewContainer.setVisibility(View.GONE);
+ private OptionsPopupMenu buildOptionsMenu(View invoker) {
+ final OptionsPopupMenu popupMenu = new OptionsPopupMenu(this, invoker);
+ popupMenu.inflate(R.menu.dialtacts_options);
+ final Menu menu = popupMenu.getMenu();
+ final MenuItem selectSubscription = menu.findItem(R.id.menu_select_subscription);
+ selectSubscription.setVisible(mSubscriptionManager != null);
+ popupMenu.setOnMenuItemClickListener(this);
+ return popupMenu;
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ if (mPendingSearchViewQuery != null) {
+ mSearchView.setText(mPendingSearchViewQuery);
+ mPendingSearchViewQuery = null;
}
- };
-
- private boolean getInSearchUi() {
- return mInDialpadSearch || mInRegularSearch;
- }
-
- private void setNotInSearchUi() {
- mInDialpadSearch = false;
- mInRegularSearch = false;
- }
-
- private void hideDialpadAndSearchUi() {
- mSearchView.setText(null);
- hideDialpadFragment(false, true);
- }
-
- public void hideSearchBar() {
- final int height = mSearchAndRemoveViewContainer.getHeight();
- mSearchAndRemoveViewContainer.animate().cancel();
- mSearchAndRemoveViewContainer.setAlpha(1);
- mSearchAndRemoveViewContainer.setTranslationY(0);
- mSearchAndRemoveViewContainer.animate().withLayer().alpha(0)
- .translationY(-height).setDuration(ANIMATION_DURATION)
- .setListener(mHideListener);
-
- mFragmentsFrame.animate().withLayer()
- .translationY(-height).setDuration(ANIMATION_DURATION).setListener(
- new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- mFragmentsFrame.setTranslationY(0);
- }
- });
-
- if (!mInDialpadSearch && !mInRegularSearch) {
- // If the favorites fragment is showing, fade to blank.
- mFragmentsFrame.animate().alpha(0.0f);
- }
- }
-
- public void showSearchBar() {
- final int height = mSearchAndRemoveViewContainer.getHeight();
- mSearchAndRemoveViewContainer.animate().cancel();
- mSearchAndRemoveViewContainer.setAlpha(0);
- mSearchAndRemoveViewContainer.setTranslationY(-height);
- mSearchAndRemoveViewContainer.animate().withLayer().alpha(1).translationY(0)
- .setDuration(ANIMATION_DURATION).setListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationStart(Animator animation) {
- mSearchAndRemoveViewContainer.setVisibility(View.VISIBLE);
- }
- });
-
- mFragmentsFrame.setTranslationY(-height);
- mFragmentsFrame.animate().withLayer().translationY(0).setDuration(ANIMATION_DURATION)
- .alpha(1.0f)
- .setListener(
- new AnimatorListenerAdapter() {
- @Override
- public void onAnimationStart(Animator animation) {
- }
- });
- }
-
- private void setupFakeActionBarItems() {
- mMenuButton = findViewById(R.id.overflow_menu);
- if (mMenuButton != null) {
- mMenuButton.setOnClickListener(this);
- if (mOverflowMenu == null) {
- mOverflowMenu = buildOptionsMenu(mMenuButton);
- }
- mMenuButton.setOnTouchListener(mOverflowMenu.getDragToOpenListener());
- }
-
- mFakeActionBar = findViewById(R.id.fake_action_bar);
-
- mCallHistoryButton = findViewById(R.id.call_history_button);
- mCallHistoryButton.setOnClickListener(this);
-
- mDialButton = findViewById(R.id.dial_button);
- mDialButton.setOnClickListener(this);
- mDialButton.setOnLongClickListener(this);
-
- mDialpadButton = findViewById(R.id.dialpad_button);
- mDialpadButton.setOnClickListener(this);
- }
-
- private PopupMenu buildOptionsMenu(View invoker) {
- PopupMenu menu = new OverflowPopupMenu(this, invoker);
- menu.inflate(R.menu.dialtacts_options);
- menu.setOnMenuItemClickListener(this);
- return menu;
- }
-
- private void fixIntent(Intent intent) {
- // This should be cleaned up: the call key used to send an Intent
- // that just said to go to the recent calls list. It now sends this
- // abstract action, but this class hasn't been rewritten to deal with it.
- if (Intent.ACTION_CALL_BUTTON.equals(intent.getAction())) {
- intent.setDataAndType(Calls.CONTENT_URI, Calls.CONTENT_TYPE);
- intent.putExtra("call_key", true);
- setIntent(intent);
- }
+ return false;
}
/**
@@ -699,22 +796,16 @@
* KEYCODE_CALL) while in a call.
*
* @param intent the intent that launched this activity
- * @param recentCallsRequest true if the intent is requesting to view recent calls
* @return true if the intent is due to hitting the green send key while in a call
*/
- private boolean isSendKeyWhileInCall(Intent intent, boolean recentCallsRequest) {
- // If there is a call in progress go to the call screen
- if (recentCallsRequest) {
- final boolean callKey = intent.getBooleanExtra("call_key", false);
+ private boolean isSendKeyWhileInCall(Intent intent) {
+ // If there is a call in progress and the user launched the dialer by hitting the call
+ // button, go straight to the in-call screen.
+ final boolean callKey = Intent.ACTION_CALL_BUTTON.equals(intent.getAction());
- try {
- ITelephony phone = ITelephony.Stub.asInterface(ServiceManager.checkService("phone"));
- if (callKey && phone != null && phone.showCallScreen()) {
- return true;
- }
- } catch (RemoteException e) {
- Log.e(TAG, "Failed to handle send while in call", e);
- }
+ if (callKey) {
+ getTelephonyManager().showCallScreen();
+ return true;
}
return false;
@@ -727,16 +818,14 @@
*/
private void displayFragment(Intent intent) {
// If we got here by hitting send and we're in call forward along to the in-call activity
- boolean recentCallsRequest = Calls.CONTENT_TYPE.equals(intent.resolveType(
- getContentResolver()));
- if (isSendKeyWhileInCall(intent, recentCallsRequest)) {
+ if (isSendKeyWhileInCall(intent)) {
finish();
return;
}
if (mDialpadFragment != null) {
final boolean phoneIsInUse = phoneIsInUse();
- if (phoneIsInUse || isDialIntent(intent)) {
+ if (phoneIsInUse || (intent.getData() != null && isDialIntent(intent))) {
mDialpadFragment.setStartedFromNewIntent(true);
if (phoneIsInUse && !mDialpadFragment.isVisible()) {
mInCallDialpadUp = true;
@@ -749,9 +838,7 @@
@Override
public void onNewIntent(Intent newIntent) {
setIntent(newIntent);
- fixIntent(newIntent);
displayFragment(newIntent);
- final String action = newIntent.getAction();
invalidateOptionsMenu();
}
@@ -782,90 +869,6 @@
}
/**
- * Retrieves the filter text stored in {@link #setupFilterText(Intent)}.
- * This text originally came from a FILTER_CONTACTS_ACTION intent received
- * by this activity. The stored text will then be cleared after after this
- * method returns.
- *
- * @return The stored filter text
- */
- public String getAndClearFilterText() {
- String filterText = mFilterText;
- mFilterText = null;
- return filterText;
- }
-
- /**
- * Stores the filter text associated with a FILTER_CONTACTS_ACTION intent.
- * This is so child activities can check if they are supposed to display a filter.
- *
- * @param intent The intent received in {@link #onNewIntent(Intent)}
- */
- private void setupFilterText(Intent intent) {
- // If the intent was relaunched from history, don't apply the filter text.
- if ((intent.getFlags() & Intent.FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY) != 0) {
- return;
- }
- String filter = intent.getStringExtra(UI.FILTER_TEXT_EXTRA_KEY);
- if (filter != null && filter.length() > 0) {
- mFilterText = filter;
- }
- }
-
- private final PhoneFavoriteFragment.Listener mPhoneFavoriteListener =
- new PhoneFavoriteFragment.Listener() {
- @Override
- public void onContactSelected(Uri contactUri) {
- PhoneNumberInteraction.startInteractionForPhoneCall(
- DialtactsActivity.this, contactUri, getCallOrigin());
- }
-
- @Override
- public void onCallNumberDirectly(String phoneNumber) {
- Intent intent = CallUtil.getCallIntent(phoneNumber, getCallOrigin());
- startActivity(intent);
- }
- };
-
- /* TODO krelease: This is only relevant for phones that have a hard button search key (i.e.
- * Nexus S). Supporting it is a little more tricky because of the dialpad fragment might
- * be showing when the search key is pressed so there is more state management involved.
-
- @Override
- public void startSearch(String initialQuery, boolean selectInitialQuery,
- Bundle appSearchData, boolean globalSearch) {
- if (mRegularSearchFragment != null && mRegularSearchFragment.isAdded() && !globalSearch) {
- if (mInSearchUi) {
- if (mSearchView.hasFocus()) {
- showInputMethod(mSearchView.findFocus());
- } else {
- mSearchView.requestFocus();
- }
- } else {
- enterSearchUi();
- }
- } else {
- super.startSearch(initialQuery, selectInitialQuery, appSearchData, globalSearch);
- }
- }*/
-
- private void showInputMethod(View view) {
- final InputMethodManager imm = (InputMethodManager) getSystemService(
- Context.INPUT_METHOD_SERVICE);
- if (imm != null) {
- imm.showSoftInput(view, 0);
- }
- }
-
- private void hideInputMethod(View view) {
- final InputMethodManager imm = (InputMethodManager) getSystemService(
- Context.INPUT_METHOD_SERVICE);
- if (imm != null && view != null) {
- imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
- }
- }
-
- /**
* Shows the search fragment
*/
private void enterSearchUi(boolean smartDialSearch, String query) {
@@ -881,14 +884,10 @@
}
final FragmentTransaction transaction = getFragmentManager().beginTransaction();
-
- SearchFragment fragment;
- if (mInDialpadSearch) {
+ if (mInDialpadSearch && mSmartDialSearchFragment != null) {
transaction.remove(mSmartDialSearchFragment);
- } else if (mInRegularSearch) {
+ } else if (mInRegularSearch && mRegularSearchFragment != null) {
transaction.remove(mRegularSearchFragment);
- } else {
- transaction.remove(mPhoneFavoriteFragment);
}
final String tag;
@@ -900,18 +899,26 @@
mInDialpadSearch = smartDialSearch;
mInRegularSearch = !smartDialSearch;
- fragment = (SearchFragment) getFragmentManager().findFragmentByTag(tag);
+ SearchFragment fragment = (SearchFragment) getFragmentManager().findFragmentByTag(tag);
+ transaction.setCustomAnimations(android.R.animator.fade_in, 0);
if (fragment == null) {
if (smartDialSearch) {
fragment = new SmartDialSearchFragment();
} else {
fragment = new RegularSearchFragment();
}
+ transaction.add(R.id.dialtacts_frame, fragment, tag);
+ } else {
+ transaction.show(fragment);
}
- transaction.replace(R.id.dialtacts_frame, fragment, tag);
- transaction.addToBackStack(null);
- fragment.setQueryString(query, false);
+
+ // DialtactsActivity will provide the options menu
+ fragment.setHasOptionsMenu(false);
+ fragment.setShowEmptyListForNullQuery(true);
+ fragment.setQueryString(query, false /* delaySelection */);
transaction.commit();
+
+ mListsFragment.getView().animate().alpha(0).withLayer();
}
/**
@@ -922,14 +929,22 @@
if (getFragmentManager().isDestroyed()) {
return;
}
- // Go all the way back to the favorites fragment, regardless of how many times we
- // transitioned between search fragments
- getFragmentManager().popBackStack(0, FragmentManager.POP_BACK_STACK_INCLUSIVE);
+
+ mSearchView.setText(null);
+ mDialpadFragment.clearDialpad();
setNotInSearchUi();
- if (isDialpadShowing()) {
- mFragmentsFrame.setAlpha(0);
+ final FragmentTransaction transaction = getFragmentManager().beginTransaction();
+ if (mSmartDialSearchFragment != null) {
+ transaction.remove(mSmartDialSearchFragment);
}
+ if (mRegularSearchFragment != null) {
+ transaction.remove(mRegularSearchFragment);
+ }
+ transaction.commit();
+
+ mListsFragment.getView().animate().alpha(1).withLayer();
+ mActionBarController.onSearchUiExited();
}
/** Returns an Intent to launch Call Settings screen */
@@ -942,20 +957,41 @@
@Override
public void onBackPressed() {
- if (mDialpadFragment != null && mDialpadFragment.isVisible()) {
+ if (mIsDialpadShown) {
+ if (TextUtils.isEmpty(mSearchQuery) ||
+ (mSmartDialSearchFragment != null && mSmartDialSearchFragment.isVisible()
+ && mSmartDialSearchFragment.getAdapter().getCount() == 0)) {
+ exitSearchUi();
+ }
hideDialpadFragment(true, false);
- } else if (getInSearchUi()) {
- mSearchView.setText(null);
- mDialpadFragment.clearDialpad();
+ } else if (isInSearchUi()) {
+ exitSearchUi();
+ hideInputMethod(parentLayout);
} else {
super.onBackPressed();
}
}
+ /**
+ * @return True if the search UI was exited, false otherwise
+ */
+ private boolean maybeExitSearchUi() {
+ if (isInSearchUi() && TextUtils.isEmpty(mSearchQuery)) {
+ exitSearchUi();
+ hideInputMethod(parentLayout);
+ return true;
+ }
+ return false;
+ }
+
@Override
public void onDialpadQueryChanged(String query) {
+ if (mSmartDialSearchFragment != null) {
+ mSmartDialSearchFragment.setAddToContactNumber(query);
+ }
final String normalizedQuery = SmartDialNameMatcher.normalizeNumber(query,
SmartDialNameMatcher.LATIN_SMART_DIAL_MAP);
+
if (!TextUtils.equals(mSearchView.getText(), normalizedQuery)) {
if (DEBUG) {
Log.d(TAG, "onDialpadQueryChanged - new query: " + query);
@@ -966,6 +1002,9 @@
// that would bring the user back to the search fragment regardless of the
// previous state of the application. Instead, just return here and let the
// fragment manager correctly figure out whatever fragment was last displayed.
+ if (!TextUtils.isEmpty(normalizedQuery)) {
+ mPendingSearchViewQuery = normalizedQuery;
+ }
return;
}
mSearchView.setText(normalizedQuery);
@@ -981,27 +1020,20 @@
}
@Override
- public void setDialButtonEnabled(boolean enabled) {
- if (mDialButton != null) {
- mDialButton.setEnabled(enabled);
- }
+ public void onListFragmentScroll(int firstVisibleItem, int visibleItemCount,
+ int totalItemCount) {
+ // TODO: No-op for now. This should eventually show/hide the actionBar based on
+ // interactions with the ListsFragments.
}
@Override
- public void setDialButtonContainerVisible(boolean visible) {
- mFakeActionBar.setVisibility(visible ? View.VISIBLE : View.GONE);
+ public void setFloatingActionButtonVisible(boolean visible) {
+ mFloatingActionButtonController.setVisible(visible);
}
private boolean phoneIsInUse() {
- final TelephonyManager tm = (TelephonyManager) getSystemService(
- Context.TELEPHONY_SERVICE);
- return tm.getCallState() != TelephonyManager.CALL_STATE_IDLE;
- }
-
- @Override
- public void onShowAllContacts() {
- final Intent intent = new Intent(this, AllContactsActivity.class);
- startActivity(intent);
+ // TODO(santoscordon): Replace with a TelecommService method call.
+ return getTelephonyManager().getCallState() != TelephonyManager.CALL_STATE_IDLE;
}
public static Intent getAddNumberToContactIntent(CharSequence text) {
@@ -1019,50 +1051,149 @@
}
@Override
- public void onDragStarted(int itemIndex, int x, int y, PhoneFavoriteTileView view) {
- crossfadeViews(mRemoveViewContainer, mSearchViewContainer, ANIMATION_DURATION);
+ public void showCallHistory() {
+ // Use explicit CallLogActivity intent instead of ACTION_VIEW +
+ // CONTENT_TYPE, so that we always open our call log from our dialer
+ final Intent intent = new Intent(this, CallLogActivity.class);
+ startActivity(intent);
+ }
+
+ /**
+ * Called when the user has long-pressed a contact tile to start a drag operation.
+ */
+ @Override
+ public void onDragStarted(int x, int y, PhoneFavoriteSquareTileView view) {
+ if (mListsFragment.isPaneOpen()) {
+ mActionBarController.setAlpha(ListsFragment.REMOVE_VIEW_SHOWN_ALPHA);
+ }
+ mListsFragment.showRemoveView(true);
}
@Override
- public void onDragHovered(int itemIndex, int x, int y) {}
+ public void onDragHovered(int x, int y, PhoneFavoriteSquareTileView view) {
+ }
+ /**
+ * Called when the user has released a contact tile after long-pressing it.
+ */
@Override
public void onDragFinished(int x, int y) {
- crossfadeViews(mSearchViewContainer, mRemoveViewContainer, ANIMATION_DURATION);
+ if (mListsFragment.isPaneOpen()) {
+ mActionBarController.setAlpha(ListsFragment.REMOVE_VIEW_HIDDEN_ALPHA);
+ }
+ mListsFragment.showRemoveView(false);
}
@Override
public void onDroppedOnRemove() {}
/**
- * Allows the PhoneFavoriteFragment to attach the drag controller to mRemoveViewContainer
+ * Allows the SpeedDialFragment to attach the drag controller to mRemoveViewContainer
* once it has been attached to the activity.
*/
@Override
public void setDragDropController(DragDropController dragController) {
- mRemoveViewContainer.setDragDropController(dragController);
+ mDragDropController = dragController;
+ mListsFragment.getRemoveView().setDragDropController(dragController);
+ }
+
+ @Override
+ public void onPickPhoneNumberAction(Uri dataUri) {
+ // Specify call-origin so that users will see the previous tab instead of
+ // CallLog screen (search UI will be automatically exited).
+ PhoneNumberInteraction.startInteractionForPhoneCall(
+ DialtactsActivity.this, dataUri, getCallOrigin());
+ mClearSearchOnPause = true;
+ }
+
+ @Override
+ public void onCallNumberDirectly(String phoneNumber) {
+ Intent intent = CallUtil.getCallIntent(phoneNumber, getCallOrigin());
+ DialerUtils.startActivityWithErrorToast(this, intent);
+ mClearSearchOnPause = true;
+ }
+
+ @Override
+ public void onShortcutIntentCreated(Intent intent) {
+ Log.w(TAG, "Unsupported intent has come (" + intent + "). Ignoring.");
+ }
+
+ @Override
+ public void onHomeInActionBarSelected() {
+ exitSearchUi();
+ }
+
+ @Override
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+ // Only scroll the button when the first tab is selected. The button should scroll from
+ // the middle to right position only on the transition from the first tab to the second
+ // tab.
+ if (position == ListsFragment.TAB_INDEX_SPEED_DIAL && !mIsLandscape) {
+ mFloatingActionButtonController.onPageScrolled(positionOffset);
+ } else if (position != ListsFragment.TAB_INDEX_SPEED_DIAL) {
+ mFloatingActionButtonController.onPageScrolled(1);
+ }
+ }
+
+ @Override
+ public void onPageSelected(int position) {
+ mCurrentTabPosition = position;
+ }
+
+ @Override
+ public void onPageScrollStateChanged(int state) {
+ }
+
+ private TelephonyManager getTelephonyManager() {
+ return (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
+ }
+
+ @Override
+ public boolean isActionBarShowing() {
+ return mActionBarController.isActionBarShowing();
+ }
+
+ public boolean isDialpadShown() {
+ return mIsDialpadShown;
+ }
+
+ @Override
+ public int getActionBarHideOffset() {
+ return getActionBar().getHideOffset();
+ }
+
+ @Override
+ public int getActionBarHeight() {
+ return mActionBarHeight;
+ }
+
+ @Override
+ public void setActionBarHideOffset(int hideOffset) {
+ getActionBar().setHideOffset(hideOffset);
}
/**
- * Crossfades two views so that the first one appears while the other one is fading
- * out of view.
+ * Updates controller based on currently known information.
+ *
+ * @param animate Whether or not to animate the transition.
*/
- private void crossfadeViews(final View fadeIn, final View fadeOut, int duration) {
- fadeOut.animate().alpha(0).setDuration(duration)
- .setListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationEnd(Animator animation) {
- fadeOut.setVisibility(View.GONE);
+ private void updateFloatingActionButtonControllerAlignment(boolean animate) {
+ int align;
+ if (mIsDialpadShown) {
+ align = mIsLandscape ? FloatingActionButtonController.ALIGN_QUARTER_RIGHT
+ : FloatingActionButtonController.ALIGN_MIDDLE;
+ } else {
+ if (!mIsLandscape) {
+ align = mCurrentTabPosition == ListsFragment.TAB_INDEX_SPEED_DIAL
+ ? FloatingActionButtonController.ALIGN_MIDDLE
+ : FloatingActionButtonController.ALIGN_RIGHT;
+ } else {
+ align = FloatingActionButtonController.ALIGN_RIGHT;
}
- });
-
- fadeIn.setVisibility(View.VISIBLE);
- fadeIn.setAlpha(0);
- fadeIn.animate().alpha(1).setDuration(ANIMATION_DURATION)
- .setListener(null);
- }
-
- private boolean shouldShowOnscreenDialButton() {
- return getResources().getBoolean(R.bool.config_show_onscreen_dial_button);
+ }
+ mFloatingActionButtonController.align(align,
+ 0 /* offsetX */,
+ mIsDialpadShown ? mFloatingActionButtonDialpadMarginBottomOffset : 0 /* offsetY */,
+ animate);
}
}
diff --git a/src/com/android/dialer/PhoneCallDetailsHelper.java b/src/com/android/dialer/PhoneCallDetailsHelper.java
index aee5052..f1b6f7f 100644
--- a/src/com/android/dialer/PhoneCallDetailsHelper.java
+++ b/src/com/android/dialer/PhoneCallDetailsHelper.java
@@ -18,9 +18,7 @@
import android.content.res.Resources;
import android.graphics.Typeface;
-import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.telephony.PhoneNumberUtils;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.TextUtils;
@@ -30,11 +28,16 @@
import android.view.View;
import android.widget.TextView;
-import com.android.contacts.common.test.NeededForTesting;
+import com.android.contacts.common.testing.NeededForTesting;
+import com.android.contacts.common.util.PhoneNumberHelper;
import com.android.dialer.calllog.CallTypeHelper;
import com.android.dialer.calllog.ContactInfo;
import com.android.dialer.calllog.PhoneNumberDisplayHelper;
import com.android.dialer.calllog.PhoneNumberUtilsWrapper;
+import com.google.common.collect.Lists;
+
+import java.util.ArrayList;
+import java.util.List;
/**
* Helper class to fill in the views in {@link PhoneCallDetailsViews}.
@@ -52,6 +55,11 @@
private final PhoneNumberUtilsWrapper mPhoneNumberUtilsWrapper;
/**
+ * List of items to be concatenated together for accessibility descriptions
+ */
+ private ArrayList<CharSequence> mDescriptionItems = Lists.newArrayList();
+
+ /**
* Creates a new instance of the helper.
* <p>
* Generally you should have a single instance of this helper in any context.
@@ -67,8 +75,7 @@
}
/** Fills the call details views with content. */
- public void setPhoneCallDetails(PhoneCallDetailsViews views, PhoneCallDetails details,
- boolean isHighlighted) {
+ public void setPhoneCallDetails(PhoneCallDetailsViews views, PhoneCallDetails details) {
// Display up to a given number of icons.
views.callTypeIcons.clear();
int count = details.callTypes.length;
@@ -85,46 +92,54 @@
} else {
callCount = null;
}
- // The color to highlight the count and date in, if any. This is based on the first call.
- Integer highlightColor =
- isHighlighted ? mCallTypeHelper.getHighlightedColor(details.callTypes[0]) : null;
- // The date of this call, relative to the current time.
- CharSequence dateText = getCallDate(details);
+ CharSequence callLocationAndDate = getCallLocationAndDate(details);
- // Set the call count and date.
- setCallCountAndDate(views, callCount, dateText, highlightColor);
-
- // Get type of call (ie mobile, home, etc) if known, or the caller's
- CharSequence numberFormattedLabel = getCallTypeOrLocation(details);
+ // Set the call count, location and date.
+ setCallCountAndDate(views, callCount, callLocationAndDate);
final CharSequence nameText;
- final CharSequence numberText;
- final CharSequence labelText;
final CharSequence displayNumber =
mPhoneNumberHelper.getDisplayNumber(details.number,
details.numberPresentation, details.formattedNumber);
if (TextUtils.isEmpty(details.name)) {
nameText = displayNumber;
- if (TextUtils.isEmpty(details.geocode)
- || mPhoneNumberUtilsWrapper.isVoicemailNumber(details.number)) {
- numberText = mResources.getString(R.string.call_log_empty_geocode);
- } else {
- numberText = details.geocode;
- }
- labelText = numberText;
// 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 = TextUtils.isEmpty(numberFormattedLabel) ? numberText :
- numberFormattedLabel;
}
views.nameView.setText(nameText);
- views.labelView.setText(labelText);
- views.labelView.setVisibility(TextUtils.isEmpty(labelText) ? View.GONE : View.VISIBLE);
+
+ // TODO: At the current time the voicemail transcription is not supported. This view
+ // is kept for future expansion when we may wish to show a transcription of voicemail.
+ views.voicemailTranscriptionView.setText("");
+ views.voicemailTranscriptionView.setVisibility(View.GONE);
+ }
+
+ /**
+ * Builds a string containing the call location and date.
+ *
+ * @param details The call details.
+ * @return The call location and date string.
+ */
+ private CharSequence getCallLocationAndDate(PhoneCallDetails details) {
+ mDescriptionItems.clear();
+
+ // Get type of call (ie mobile, home, etc) if known, or the caller's location.
+ CharSequence callTypeOrLocation = getCallTypeOrLocation(details);
+
+ // Only add the call type or location if its not empty. It will be empty for unknown
+ // callers.
+ if (!TextUtils.isEmpty(callTypeOrLocation)) {
+ mDescriptionItems.add(callTypeOrLocation);
+ }
+ // The date of this call, relative to the current time.
+ mDescriptionItems.add(getCallDate(details));
+
+ // Create a comma separated list from the call type or location, and call date.
+ return TextUtils.join(", " , mDescriptionItems);
}
/**
@@ -138,7 +153,9 @@
CharSequence numberFormattedLabel = null;
// Only show a label if the number is shown and it is not a SIP address.
if (!TextUtils.isEmpty(details.number)
- && !PhoneNumberUtils.isUriNumber(details.number.toString())) {
+ && !PhoneNumberHelper.isUriNumber(details.number.toString())
+ && !mPhoneNumberUtilsWrapper.isVoicemailNumber(details.number)) {
+
if (details.numberLabel == ContactInfo.GEOCODE_AS_LABEL) {
numberFormattedLabel = details.geocode;
} else {
@@ -146,6 +163,11 @@
details.numberLabel);
}
}
+
+ if (!TextUtils.isEmpty(details.name) && TextUtils.isEmpty(numberFormattedLabel)) {
+ numberFormattedLabel = mPhoneNumberHelper.getDisplayNumber(details.number,
+ details.numberPresentation, details.formattedNumber);
+ }
return numberFormattedLabel;
}
@@ -163,6 +185,7 @@
}
/** Sets the text of the header view for the details page of a phone call. */
+ @NeededForTesting
public void setCallDetailsHeader(TextView nameView, PhoneCallDetails details) {
final CharSequence nameText;
final CharSequence displayNumber =
@@ -197,7 +220,7 @@
/** Sets the call count and date. */
private void setCallCountAndDate(PhoneCallDetailsViews views, Integer callCount,
- CharSequence dateText, Integer highlightColor) {
+ CharSequence dateText) {
// Combine the count (if present) and the date.
final CharSequence text;
if (callCount != null) {
@@ -207,23 +230,6 @@
text = dateText;
}
- // Apply the highlight color if present.
- final CharSequence formattedText;
- if (highlightColor != null) {
- formattedText = addBoldAndColor(text, highlightColor);
- } else {
- formattedText = text;
- }
-
- views.callTypeAndDate.setText(formattedText);
- }
-
- /** Creates a SpannableString for the given text which is bold and in the given color. */
- private CharSequence addBoldAndColor(CharSequence text, int color) {
- int flags = Spanned.SPAN_INCLUSIVE_INCLUSIVE;
- SpannableString result = new SpannableString(text);
- result.setSpan(new StyleSpan(Typeface.BOLD), 0, text.length(), flags);
- result.setSpan(new ForegroundColorSpan(color), 0, text.length(), flags);
- return result;
+ views.callLocationAndDate.setText(text);
}
}
diff --git a/src/com/android/dialer/PhoneCallDetailsViews.java b/src/com/android/dialer/PhoneCallDetailsViews.java
index 4e48210..30023ea 100644
--- a/src/com/android/dialer/PhoneCallDetailsViews.java
+++ b/src/com/android/dialer/PhoneCallDetailsViews.java
@@ -29,16 +29,17 @@
public final TextView nameView;
public final View callTypeView;
public final CallTypeIconsView callTypeIcons;
- public final TextView callTypeAndDate;
- public final TextView labelView;
+ public final TextView callLocationAndDate;
+ public final TextView voicemailTranscriptionView;
private PhoneCallDetailsViews(TextView nameView, View callTypeView,
- CallTypeIconsView callTypeIcons, TextView callTypeAndDate, TextView labelView) {
+ CallTypeIconsView callTypeIcons, TextView callLocationAndDate,
+ TextView voicemailTranscriptionView) {
this.nameView = nameView;
this.callTypeView = callTypeView;
this.callTypeIcons = callTypeIcons;
- this.callTypeAndDate = callTypeAndDate;
- this.labelView = labelView;
+ this.callLocationAndDate = callLocationAndDate;
+ this.voicemailTranscriptionView = voicemailTranscriptionView;
}
/**
@@ -52,8 +53,8 @@
return new PhoneCallDetailsViews((TextView) view.findViewById(R.id.name),
view.findViewById(R.id.call_type),
(CallTypeIconsView) view.findViewById(R.id.call_type_icons),
- (TextView) view.findViewById(R.id.call_count_and_date),
- (TextView) view.findViewById(R.id.label));
+ (TextView) view.findViewById(R.id.call_location_and_date),
+ (TextView) view.findViewById(R.id.voicemail_transcription));
}
public static PhoneCallDetailsViews createForTest(Context context) {
diff --git a/src/com/android/dialer/SpecialCharSequenceMgr.java b/src/com/android/dialer/SpecialCharSequenceMgr.java
index fdef263..9d622aa 100644
--- a/src/com/android/dialer/SpecialCharSequenceMgr.java
+++ b/src/com/android/dialer/SpecialCharSequenceMgr.java
@@ -30,6 +30,7 @@
import android.os.Looper;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.provider.Settings;
import android.telephony.PhoneNumberUtils;
import android.telephony.TelephonyManager;
import android.util.Log;
@@ -39,8 +40,6 @@
import com.android.contacts.common.database.NoNullCursorAsyncQueryHandler;
import com.android.internal.telephony.ITelephony;
-import com.android.internal.telephony.TelephonyCapabilities;
-import com.android.internal.telephony.TelephonyIntents;
/**
* Helper class to listen for some magic character sequences
@@ -57,6 +56,7 @@
public class SpecialCharSequenceMgr {
private static final String TAG = "SpecialCharSequenceMgr";
+ private static final String SECRET_CODE_ACTION = "android.provider.Telephony.SECRET_CODE";
private static final String MMI_IMEI_DISPLAY = "*#06#";
private static final String MMI_REGULATORY_INFO_DISPLAY = "*#07#";
@@ -136,7 +136,7 @@
// Secret codes are in the form *#*#<code>#*#*
int len = input.length();
if (len > 8 && input.startsWith("*#*#") && input.endsWith("#*#*")) {
- Intent intent = new Intent(TelephonyIntents.SECRET_CODE_ACTION,
+ final Intent intent = new Intent(SECRET_CODE_ACTION,
Uri.parse("android_secret_code://" + input.substring(4, len - 4)));
context.sendBroadcast(intent);
return true;
@@ -158,7 +158,7 @@
TelephonyManager telephonyManager =
(TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if (telephonyManager == null
- || !TelephonyCapabilities.supportsAdn(telephonyManager.getCurrentPhoneType())) {
+ || telephonyManager.getPhoneType() != TelephonyManager.PHONE_TYPE_GSM) {
return false;
}
@@ -243,7 +243,7 @@
TelephonyManager telephonyManager =
(TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
if (telephonyManager != null && input.equals(MMI_IMEI_DISPLAY)) {
- int phoneType = telephonyManager.getCurrentPhoneType();
+ int phoneType = telephonyManager.getPhoneType();
if (phoneType == TelephonyManager.PHONE_TYPE_GSM) {
showIMEIPanel(context, useSystemWindow, telephonyManager);
return true;
@@ -259,10 +259,7 @@
private static boolean handleRegulatoryInfoDisplay(Context context, String input) {
if (input.equals(MMI_REGULATORY_INFO_DISPLAY)) {
Log.d(TAG, "handleRegulatoryInfoDisplay() sending intent to settings app");
- ComponentName regInfoDisplayActivity = new ComponentName(
- "com.android.settings", "com.android.settings.RegulatoryInfoDisplayActivity");
- Intent showRegInfoIntent = new Intent("android.settings.SHOW_REGULATORY_INFO");
- showRegInfoIntent.setComponent(regInfoDisplayActivity);
+ Intent showRegInfoIntent = new Intent(Settings.ACTION_SHOW_REGULATORY_INFO);
try {
context.startActivity(showRegInfoIntent);
} catch (ActivityNotFoundException e) {
diff --git a/src/com/android/dialer/calllog/CallDetailHistoryAdapter.java b/src/com/android/dialer/calllog/CallDetailHistoryAdapter.java
index 8af3b82..67cadb1 100644
--- a/src/com/android/dialer/calllog/CallDetailHistoryAdapter.java
+++ b/src/com/android/dialer/calllog/CallDetailHistoryAdapter.java
@@ -41,34 +41,13 @@
private final LayoutInflater mLayoutInflater;
private final CallTypeHelper mCallTypeHelper;
private final PhoneCallDetails[] mPhoneCallDetails;
- /** Whether the voicemail controls are shown. */
- private final boolean mShowVoicemail;
- /** Whether the call and SMS controls are shown. */
- private final boolean mShowCallAndSms;
- /** The controls that are shown on top of the history list. */
- private final View mControls;
- /** The listener to changes of focus of the header. */
- private View.OnFocusChangeListener mHeaderFocusChangeListener =
- new View.OnFocusChangeListener() {
- @Override
- public void onFocusChange(View v, boolean hasFocus) {
- // When the header is focused, focus the controls above it instead.
- if (hasFocus) {
- mControls.requestFocus();
- }
- }
- };
public CallDetailHistoryAdapter(Context context, LayoutInflater layoutInflater,
- CallTypeHelper callTypeHelper, PhoneCallDetails[] phoneCallDetails,
- boolean showVoicemail, boolean showCallAndSms, View controls) {
+ CallTypeHelper callTypeHelper, PhoneCallDetails[] phoneCallDetails) {
mContext = context;
mLayoutInflater = layoutInflater;
mCallTypeHelper = callTypeHelper;
mPhoneCallDetails = phoneCallDetails;
- mShowVoicemail = showVoicemail;
- mShowCallAndSms = showCallAndSms;
- mControls = controls;
}
@Override
@@ -117,14 +96,6 @@
final View header = convertView == null
? mLayoutInflater.inflate(R.layout.call_detail_history_header, parent, false)
: convertView;
- // Voicemail controls are only shown in the main UI if there is a voicemail.
- View voicemailContainer = header.findViewById(R.id.header_voicemail_container);
- voicemailContainer.setVisibility(mShowVoicemail ? View.VISIBLE : View.GONE);
- // Call and SMS controls are only shown in the main UI if there is a known number.
- View callAndSmsContainer = header.findViewById(R.id.header_call_and_sms_container);
- callAndSmsContainer.setVisibility(mShowCallAndSms ? View.VISIBLE : View.GONE);
- header.setFocusable(true);
- header.setOnFocusChangeListener(mHeaderFocusChangeListener);
return header;
}
diff --git a/src/com/android/dialer/calllog/CallLogActivity.java b/src/com/android/dialer/calllog/CallLogActivity.java
index 42318f0..13d5f03 100644
--- a/src/com/android/dialer/calllog/CallLogActivity.java
+++ b/src/com/android/dialer/calllog/CallLogActivity.java
@@ -19,38 +19,41 @@
import android.app.Activity;
import android.app.Fragment;
import android.app.FragmentManager;
-import android.app.ActionBar.Tab;
-import android.app.ActionBar.TabListener;
-import android.app.FragmentTransaction;
import android.content.Intent;
+import android.database.Cursor;
import android.os.Bundle;
import android.provider.CallLog.Calls;
import android.support.v13.app.FragmentPagerAdapter;
-import android.support.v4.view.PagerTabStrip;
import android.support.v4.view.ViewPager;
-import android.support.v4.view.ViewPager.OnPageChangeListener;
-import android.text.Spannable;
-import android.text.SpannableString;
-import android.text.style.TypefaceSpan;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import com.android.dialer.DialtactsActivity;
import com.android.dialer.R;
-import com.android.dialer.calllog.CallLogFragment;
+import com.android.dialer.list.ViewPagerTabs;
+import com.android.dialer.voicemail.VoicemailStatusHelper;
+import com.android.dialer.voicemail.VoicemailStatusHelperImpl;
-public class CallLogActivity extends Activity {
-
+public class CallLogActivity extends Activity implements CallLogQueryHandler.Listener {
private ViewPager mViewPager;
+ private ViewPagerTabs mViewPagerTabs;
private ViewPagerAdapter mViewPagerAdapter;
private CallLogFragment mAllCallsFragment;
private CallLogFragment mMissedCallsFragment;
+ private CallLogFragment mVoicemailFragment;
+ private VoicemailStatusHelper mVoicemailStatusHelper;
+
+ private String[] mTabTitles;
private static final int TAB_INDEX_ALL = 0;
private static final int TAB_INDEX_MISSED = 1;
+ private static final int TAB_INDEX_VOICEMAIL = 2;
- private static final int TAB_INDEX_COUNT = 2;
+ private static final int TAB_INDEX_COUNT_DEFAULT = 2;
+ private static final int TAB_INDEX_COUNT_WITH_VOICEMAIL = 3;
+
+ private boolean mHasActiveVoicemailProvider;
public class ViewPagerAdapter extends FragmentPagerAdapter {
public ViewPagerAdapter(FragmentManager fm) {
@@ -66,81 +69,61 @@
case TAB_INDEX_MISSED:
mMissedCallsFragment = new CallLogFragment(Calls.MISSED_TYPE);
return mMissedCallsFragment;
+ case TAB_INDEX_VOICEMAIL:
+ mVoicemailFragment = new CallLogFragment(Calls.VOICEMAIL_TYPE);
+ return mVoicemailFragment;
}
throw new IllegalStateException("No fragment at position " + position);
}
@Override
+ public CharSequence getPageTitle(int position) {
+ return mTabTitles[position];
+ }
+
+ @Override
public int getCount() {
- return TAB_INDEX_COUNT;
+ return mHasActiveVoicemailProvider ? TAB_INDEX_COUNT_WITH_VOICEMAIL :
+ TAB_INDEX_COUNT_DEFAULT;
}
}
- private final TabListener mTabListener = new TabListener() {
- @Override
- public void onTabUnselected(Tab tab, FragmentTransaction ft) {
- }
-
- @Override
- public void onTabSelected(Tab tab, FragmentTransaction ft) {
- if (mViewPager != null && mViewPager.getCurrentItem() != tab.getPosition()) {
- mViewPager.setCurrentItem(tab.getPosition(), true);
- }
- }
-
- @Override
- public void onTabReselected(Tab tab, FragmentTransaction ft) {
- }
- };
-
- private final OnPageChangeListener mOnPageChangeListener = new OnPageChangeListener() {
-
- @Override
- public void onPageScrolled(
- int position, float positionOffset, int positionOffsetPixels) {}
-
- @Override
- public void onPageSelected(int position) {
- final ActionBar actionBar = getActionBar();
- actionBar.selectTab(actionBar.getTabAt(position));
- }
-
- @Override
- public void onPageScrollStateChanged(int arg0) {
- }
- };
-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.call_log_activity);
+ getWindow().setBackgroundDrawable(null);
final ActionBar actionBar = getActionBar();
- actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
actionBar.setDisplayShowHomeEnabled(true);
actionBar.setDisplayHomeAsUpEnabled(true);
actionBar.setDisplayShowTitleEnabled(true);
- final Tab allTab = actionBar.newTab();
- final String allTitle = getString(R.string.call_log_all_title);
- allTab.setContentDescription(allTitle);
- allTab.setText(allTitle);
- allTab.setTabListener(mTabListener);
- actionBar.addTab(allTab);
-
- final Tab missedTab = actionBar.newTab();
- final String missedTitle = getString(R.string.call_log_missed_title);
- missedTab.setContentDescription(missedTitle);
- missedTab.setText(missedTitle);
- missedTab.setTabListener(mTabListener);
- actionBar.addTab(missedTab);
+ mTabTitles = new String[TAB_INDEX_COUNT_WITH_VOICEMAIL];
+ mTabTitles[0] = getString(R.string.call_log_all_title);
+ mTabTitles[1] = getString(R.string.call_log_missed_title);
+ mTabTitles[2] = getString(R.string.call_log_voicemail_title);
mViewPager = (ViewPager) findViewById(R.id.call_log_pager);
+
mViewPagerAdapter = new ViewPagerAdapter(getFragmentManager());
mViewPager.setAdapter(mViewPagerAdapter);
- mViewPager.setOnPageChangeListener(mOnPageChangeListener);
- mViewPager.setOffscreenPageLimit(1);
+ mViewPager.setOffscreenPageLimit(2);
+
+ mViewPagerTabs = (ViewPagerTabs) findViewById(R.id.viewpager_header);
+ mViewPagerTabs.setViewPager(mViewPager);
+ mViewPager.setOnPageChangeListener(mViewPagerTabs);
+
+ mVoicemailStatusHelper = new VoicemailStatusHelperImpl();
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ CallLogQueryHandler callLogQueryHandler =
+ new CallLogQueryHandler(this.getContentResolver(), this);
+ callLogQueryHandler.fetchVoicemailStatus();
}
@Override
@@ -176,4 +159,24 @@
}
return super.onOptionsItemSelected(item);
}
-}
+
+ @Override
+ public void onVoicemailStatusFetched(Cursor statusCursor) {
+ if (this.isFinishing()) {
+ return;
+ }
+
+ // Update mHasActiveVoicemailProvider, which controls the number of tabs displayed.
+ int activeSources = mVoicemailStatusHelper.getNumberActivityVoicemailSources(statusCursor);
+ if (activeSources > 0 != mHasActiveVoicemailProvider) {
+ mHasActiveVoicemailProvider = activeSources > 0;
+ mViewPagerAdapter.notifyDataSetChanged();
+ mViewPagerTabs.setViewPager(mViewPager);
+ }
+ }
+
+ @Override
+ public void onCallsFetched(Cursor statusCursor) {
+ // Do nothing. Implemented to satisfy CallLogQueryHandler.Listener.
+ }
+}
\ No newline at end of file
diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java
index 175a733..f19b924 100644
--- a/src/com/android/dialer/calllog/CallLogAdapter.java
+++ b/src/com/android/dialer/calllog/CallLogAdapter.java
@@ -27,7 +27,6 @@
import android.provider.CallLog.Calls;
import android.provider.ContactsContract.PhoneLookup;
import android.text.TextUtils;
-import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -39,15 +38,18 @@
import com.android.common.widget.GroupingListAdapter;
import com.android.contacts.common.ContactPhotoManager;
import com.android.contacts.common.ContactPhotoManager.DefaultImageRequest;
+import com.android.contacts.common.util.DateUtils;
import com.android.contacts.common.util.UriUtils;
import com.android.dialer.PhoneCallDetails;
import com.android.dialer.PhoneCallDetailsHelper;
import com.android.dialer.R;
+import com.android.dialer.util.DialerUtils;
import com.android.dialer.util.ExpirableCache;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Objects;
+import java.util.HashMap;
import java.util.LinkedList;
/**
@@ -56,6 +58,29 @@
public class CallLogAdapter extends GroupingListAdapter
implements ViewTreeObserver.OnPreDrawListener, CallLogGroupBuilder.GroupCreator {
+ /** The enumeration of {@link android.os.AsyncTask} objects used in this class. */
+ public enum Tasks {
+ REMOVE_CALL_LOG_ENTRIES,
+ }
+
+ /** Interface used to inform a parent UI element that a list item has been expanded. */
+ public interface CallItemExpandedListener {
+ /**
+ * @param view The {@link CallLogListItemView} that represents the item that was clicked
+ * on.
+ */
+ public void onItemExpanded(CallLogListItemView view);
+
+ /**
+ * Retrieves the call log view for the specified call Id. If the view is not currently
+ * visible, returns null.
+ *
+ * @param callId The call Id.
+ * @return The call log view.
+ */
+ public CallLogListItemView getViewForCallId(long callId);
+ }
+
/** Interface used to initiate a refresh of the content. */
public interface CallFetcher {
public void fetchCalls();
@@ -98,6 +123,9 @@
/** The size of the cache of contact info. */
private static final int CONTACT_INFO_CACHE_SIZE = 100;
+ /** Constant used to indicate no row is expanded. */
+ private static final long NONE_EXPANDED = -1;
+
protected final Context mContext;
private final ContactInfoHelper mContactInfoHelper;
private final CallFetcher mCallFetcher;
@@ -114,6 +142,31 @@
private ExpirableCache<NumberWithCountryIso, ContactInfo> mContactInfoCache;
/**
+ * Tracks the call log row which was previously expanded. Used so that the closure of a
+ * previously expanded call log entry can be animated on rebind.
+ */
+ private long mPreviouslyExpanded = NONE_EXPANDED;
+
+ /**
+ * Tracks the currently expanded call log row.
+ */
+ private long mCurrentlyExpanded = NONE_EXPANDED;
+
+ /**
+ * Hashmap, keyed by call Id, used to track the day group for a call. As call log entries are
+ * put into the primary call groups in {@link com.android.dialer.calllog.CallLogGroupBuilder},
+ * they are also assigned a secondary "day group". This hashmap tracks the day group assigned
+ * to all calls in the call log. This information is used to trigger the display of a day
+ * group header above the call log entry at the start of a day group.
+ * Note: Multiple calls are grouped into a single primary "call group" in the call log, and
+ * the cursor used to bind rows includes all of these calls. When determining if a day group
+ * change has occurred it is necessary to look at the last entry in the call log to determine
+ * its day group. This hashmap provides a means of determining the previous day group without
+ * having to reverse the cursor to the start of the previous day call log entry.
+ */
+ private HashMap<Long,Integer> mDayGroups = new HashMap<Long, Integer>();
+
+ /**
* A request for contact details for the given number.
*/
private static final class ContactInfoRequest {
@@ -183,15 +236,11 @@
/** Helper to group call log entries. */
private final CallLogGroupBuilder mCallLogGroupBuilder;
+ private CallItemExpandedListener mCallItemExpandedListener;
+
/** Can be set to true by tests to disable processing of requests. */
private volatile boolean mRequestProcessingDisabled = false;
- /**
- * Whether to show the secondary action button used to play voicemail or show call details.
- * True if created from a CallLogFragment.
- * False if created from the PhoneFavoriteFragment. */
- private boolean mShowSecondaryActionButton = true;
-
private boolean mIsCallLog = true;
private int mNumMissedCalls = 0;
private int mNumMissedCallsShown = 0;
@@ -200,6 +249,10 @@
private ImageView mBadgeImageView;
private TextView mBadgeText;
+ private int mCallLogBackgroundColor;
+ private int mExpandedBackgroundColor;
+ private float mExpandedTranslationZ;
+
/** Listener for the primary or secondary actions in the list.
* Primary opens the call details.
* Secondary calls or plays.
@@ -211,13 +264,48 @@
}
};
+ /**
+ * The onClickListener used to expand or collapse the action buttons section for a call log
+ * entry.
+ */
+ private final View.OnClickListener mExpandCollapseListener = new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ final CallLogListItemView callLogItem = (CallLogListItemView) v.getParent().getParent();
+ final CallLogListItemViews views = (CallLogListItemViews) callLogItem.getTag();
+
+ // Hide or show the actions view.
+ boolean expanded = toggleExpansion(views.rowId);
+
+ // Trigger loading of the viewstub and visual expand or collapse.
+ expandOrCollapseActions(callLogItem, expanded);
+
+ // Animate the expansion or collapse.
+ if (mCallItemExpandedListener != null) {
+ mCallItemExpandedListener.onItemExpanded(callLogItem);
+
+ // Animate the collapse of the previous item if it is still visible on screen.
+ if (mPreviouslyExpanded != NONE_EXPANDED) {
+ CallLogListItemView previousItem = mCallItemExpandedListener.getViewForCallId(
+ mPreviouslyExpanded);
+
+ if (previousItem != null) {
+ expandOrCollapseActions(previousItem, false);
+ mCallItemExpandedListener.onItemExpanded(previousItem);
+ }
+ mPreviouslyExpanded = NONE_EXPANDED;
+ }
+ }
+ }
+ };
+
private void startActivityForAction(View view) {
final IntentProvider intentProvider = (IntentProvider) view.getTag();
if (intentProvider != null) {
final Intent intent = intentProvider.getIntent(mContext);
// See IntentProvider.getCallDetailIntentProvider() for why this may be null.
if (intent != null) {
- mContext.startActivity(intent);
+ DialerUtils.startActivityWithErrorToast(mContext, intent);
}
}
}
@@ -251,21 +339,24 @@
};
public CallLogAdapter(Context context, CallFetcher callFetcher,
- ContactInfoHelper contactInfoHelper, boolean showSecondaryActionButton,
+ ContactInfoHelper contactInfoHelper, CallItemExpandedListener callItemExpandedListener,
boolean isCallLog) {
super(context);
mContext = context;
mCallFetcher = callFetcher;
mContactInfoHelper = contactInfoHelper;
- mShowSecondaryActionButton = showSecondaryActionButton;
mIsCallLog = isCallLog;
+ mCallItemExpandedListener = callItemExpandedListener;
mContactInfoCache = ExpirableCache.create(CONTACT_INFO_CACHE_SIZE);
mRequests = new LinkedList<ContactInfoRequest>();
Resources resources = mContext.getResources();
CallTypeHelper callTypeHelper = new CallTypeHelper(resources);
+ mCallLogBackgroundColor = resources.getColor(R.color.background_dialer_list_items);
+ mExpandedBackgroundColor = resources.getColor(R.color.call_log_expanded_background_color);
+ mExpandedTranslationZ = resources.getDimension(R.dimen.call_log_expanded_translation_z);
mContactPhotoManager = ContactPhotoManager.getInstance(mContext);
mPhoneNumberHelper = new PhoneNumberDisplayHelper(resources);
@@ -489,7 +580,15 @@
protected View newChildView(Context context, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.call_log_list_item, parent, false);
- findAndCacheViews(view);
+
+ // Get the views to bind to and cache them.
+ CallLogListItemViews views = CallLogListItemViews.fromView(view);
+ view.setTag(views);
+
+ // Set text height to false on the TextViews so they don't have extra padding.
+ views.phoneCallDetailsViews.nameView.setElegantTextHeight(false);
+ views.phoneCallDetailsViews.callLocationAndDate.setElegantTextHeight(false);
+
return view;
}
@@ -510,11 +609,6 @@
}
private void findAndCacheViews(View view) {
- // Get the views to bind to.
- CallLogListItemViews views = CallLogListItemViews.fromView(view);
- views.primaryActionView.setOnClickListener(mActionListener);
- views.secondaryActionButtonView.setOnClickListener(mActionListener);
- view.setTag(views);
}
/**
@@ -525,11 +619,11 @@
* @param count the number of entries in the current item, greater than 1 if it is a group
*/
private void bindView(View view, Cursor c, int count) {
+ final CallLogListItemView callLogItemView = (CallLogListItemView) view;
final CallLogListItemViews views = (CallLogListItemViews) view.getTag();
// Default case: an item in the call log.
views.primaryActionView.setVisibility(View.VISIBLE);
- views.listHeaderTextView.setVisibility(View.GONE);
final String number = c.getString(CallLogQuery.NUMBER);
final int numberPresentation = c.getInt(CallLogQuery.NUMBER_PRESENTATION);
@@ -537,38 +631,64 @@
final long duration = c.getLong(CallLogQuery.DURATION);
final int callType = c.getInt(CallLogQuery.CALL_TYPE);
final String countryIso = c.getString(CallLogQuery.COUNTRY_ISO);
+ final long rowId = c.getLong(CallLogQuery.ID);
+ views.rowId = rowId;
+
+ // For entries in the call log, check if the day group has changed and display a header
+ // if necessary.
+ if (mIsCallLog) {
+ int currentGroup = getDayGroupForCall(rowId);
+ int previousGroup = getPreviousDayGroup(c);
+ if (currentGroup != previousGroup) {
+ views.dayGroupHeader.setVisibility(View.VISIBLE);
+ views.dayGroupHeader.setText(getGroupDescription(currentGroup));
+ } else {
+ views.dayGroupHeader.setVisibility(View.GONE);
+ }
+ } else {
+ views.dayGroupHeader.setVisibility(View.GONE);
+ }
+
+ // Store some values used when the actions ViewStub is inflated on expansion of the actions
+ // section.
+ views.number = number;
+ views.numberPresentation = numberPresentation;
+ views.callType = callType;
+ views.voicemailUri = c.getString(CallLogQuery.VOICEMAIL_URI);
+ // Stash away the Ids of the calls so that we can support deleting a row in the call log.
+ views.callIds = getCallIds(c, count);
final ContactInfo cachedContactInfo = getContactInfoFromCallLog(c);
final boolean isVoicemailNumber =
PhoneNumberUtilsWrapper.INSTANCE.isVoicemailNumber(number);
- // Primary action is always to call, if possible.
- if (PhoneNumberUtilsWrapper.canPlaceCallsTo(number, numberPresentation)) {
- // Sets the primary action to call the number.
- views.primaryActionView.setTag(IntentProvider.getReturnCallIntentProvider(number));
- } else {
- views.primaryActionView.setTag(null);
- }
+ // Where binding and not in the call log, use default behaviour of invoking a call when
+ // tapping the primary view.
+ if (!mIsCallLog) {
+ views.primaryActionView.setOnClickListener(this.mActionListener);
- if ( mShowSecondaryActionButton ) {
- // Store away the voicemail information so we can play it directly.
- if (callType == Calls.VOICEMAIL_TYPE) {
- String voicemailUri = c.getString(CallLogQuery.VOICEMAIL_URI);
- final long rowId = c.getLong(CallLogQuery.ID);
- views.secondaryActionButtonView.setTag(
- IntentProvider.getPlayVoicemailIntentProvider(rowId, voicemailUri));
+ // Set return call intent, otherwise null.
+ if (PhoneNumberUtilsWrapper.canPlaceCallsTo(number, numberPresentation)) {
+ // Sets the primary action to call the number.
+ views.primaryActionView.setTag(IntentProvider.getReturnCallIntentProvider(number));
} else {
- // Store the call details information.
- views.secondaryActionButtonView.setTag(
- IntentProvider.getCallDetailIntentProvider(
- getCursor(), c.getPosition(), c.getLong(CallLogQuery.ID), count));
+ // Number is not callable, so hide button.
+ views.primaryActionView.setTag(null);
}
} else {
- // No action enabled.
- views.secondaryActionButtonView.setTag(null);
+ // In the call log, expand/collapse an actions section for the call log entry when
+ // the primary view is tapped.
+ views.primaryActionView.setOnClickListener(this.mExpandCollapseListener);
+
+ // Note: Binding of the action buttons is done as required in configureActionViews
+ // when the user expands the actions ViewStub.
}
+ // Restore expansion state of the row on rebind. Inflate the actions ViewStub if required,
+ // and set its visibility state accordingly.
+ expandOrCollapseActions(callLogItemView, isExpanded(rowId));
+
// Lookup contacts with this number
NumberWithCountryIso numberCountryIso = new NumberWithCountryIso(number, countryIso);
ExpirableCache.CachedValue<ContactInfo> cachedInfo =
@@ -628,11 +748,7 @@
duration, name, ntype, label, lookupUri, photoUri, sourceType);
}
- final boolean isNew = c.getInt(CallLogQuery.IS_READ) == 0;
- // New items also use the highlighted version of the text.
- final boolean isHighlighted = isNew;
- mCallLogViewsHelper.setPhoneCallDetails(views, details, isHighlighted,
- mShowSecondaryActionButton);
+ mCallLogViewsHelper.setPhoneCallDetails(views, details);
int contactType = ContactPhotoManager.TYPE_DEFAULT;
@@ -642,11 +758,8 @@
contactType = ContactPhotoManager.TYPE_BUSINESS;
}
- String lookupKey = info.lookupKey;
- if (lookupUri != null) {
- //lookupKey = ContactInfoHelper.getLookupKeyFromUri(lookupUri);
-
- }
+ String lookupKey = lookupUri == null ? null
+ : ContactInfoHelper.getLookupKeyFromUri(lookupUri);
String nameForDefaultImage = null;
if (TextUtils.isEmpty(name)) {
@@ -671,6 +784,184 @@
bindBadge(view, info, details, callType);
}
+ /**
+ * Retrieves the day group of the previous call in the call log. Used to determine if the day
+ * group has changed and to trigger display of the day group text.
+ *
+ * @param cursor The call log cursor.
+ * @return The previous day group, or DAY_GROUP_NONE if this is the first call.
+ */
+ private int getPreviousDayGroup(Cursor cursor) {
+ // We want to restore the position in the cursor at the end.
+ int startingPosition = cursor.getPosition();
+ int dayGroup = CallLogGroupBuilder.DAY_GROUP_NONE;
+ if (cursor.moveToPrevious()) {
+ long previousRowId = cursor.getLong(CallLogQuery.ID);
+ dayGroup = getDayGroupForCall(previousRowId);
+ }
+ cursor.moveToPosition(startingPosition);
+ return dayGroup;
+ }
+
+ /**
+ * Given a call Id, look up the day group that the call belongs to. The day group data is
+ * populated in {@link com.android.dialer.calllog.CallLogGroupBuilder}.
+ *
+ * @param callId The call to retrieve the day group for.
+ * @return The day group for the call.
+ */
+ private int getDayGroupForCall(long callId) {
+ if (mDayGroups.containsKey(callId)) {
+ return mDayGroups.get(callId);
+ }
+ return CallLogGroupBuilder.DAY_GROUP_NONE;
+ }
+ /**
+ * Determines if a call log row with the given Id is expanded.
+ * @param rowId The row Id of the call.
+ * @return True if the row should be expanded.
+ */
+ private boolean isExpanded(long rowId) {
+ return mCurrentlyExpanded == rowId;
+ }
+
+ /**
+ * Toggles the expansion state tracked for the call log row identified by rowId and returns
+ * the new expansion state. Assumes that only a single call log row will be expanded at any
+ * one point and tracks the current and previous expanded item.
+ *
+ * @param rowId The row Id associated with the call log row to expand/collapse.
+ * @return True where the row is now expanded, false otherwise.
+ */
+ private boolean toggleExpansion(long rowId) {
+ if (rowId == mCurrentlyExpanded) {
+ // Collapsing currently expanded row.
+ mPreviouslyExpanded = NONE_EXPANDED;
+ mCurrentlyExpanded = NONE_EXPANDED;
+
+ return false;
+ } else {
+ // Expanding a row (collapsing current expanded one).
+
+ mPreviouslyExpanded = mCurrentlyExpanded;
+ mCurrentlyExpanded = rowId;
+ return true;
+ }
+ }
+
+ /**
+ * Expands or collapses the view containing the CALLBACK, VOICEMAIL and DETAILS action buttons.
+ *
+ * @param callLogItem The call log entry parent view.
+ * @param isExpanded The new expansion state of the view.
+ */
+ private void expandOrCollapseActions(CallLogListItemView callLogItem, boolean isExpanded) {
+ final CallLogListItemViews views = (CallLogListItemViews)callLogItem.getTag();
+
+ if (isExpanded) {
+ // Inflate the view stub if necessary, and wire up the event handlers.
+ inflateActionViewStub(callLogItem);
+
+ views.actionsView.setVisibility(View.VISIBLE);
+ views.actionsView.setAlpha(1.0f);
+ views.callLogEntryView.setBackgroundColor(mExpandedBackgroundColor);
+ callLogItem.setTranslationZ(mExpandedTranslationZ);
+
+ // Attempt to give accessibility focus to one of the action buttons.
+ // This ensures that a user realizes the expansion occurred.
+ // NOTE(tgunn): requestAccessibilityFocus returns true if the requested
+ // focus was successful. The first successful focus will satisfy the OR
+ // block and block further attempts to set focus.
+ boolean focused = views.callBackButtonView.requestAccessibilityFocus() ||
+ views.voicemailButtonView.requestAccessibilityFocus() ||
+ views.detailsButtonView.requestAccessibilityFocus();
+ } else {
+ // When recycling a view, it is possible the actionsView ViewStub was previously
+ // inflated so we should hide it in this case.
+ if (views.actionsView != null) {
+ views.actionsView.setVisibility(View.GONE);
+ }
+
+ views.callLogEntryView.setBackgroundColor(mCallLogBackgroundColor);
+ callLogItem.setTranslationZ(0);
+ }
+ }
+
+ /**
+ * Configures the action buttons in the expandable actions ViewStub. The ViewStub is not
+ * inflated during initial binding, so click handlers, tags and accessibility text must be set
+ * here, if necessary.
+ *
+ * @param callLogItem The call log list item view.
+ */
+ private void inflateActionViewStub(View callLogItem) {
+ final CallLogListItemViews views = (CallLogListItemViews)callLogItem.getTag();
+
+ ViewStub stub = (ViewStub)callLogItem.findViewById(R.id.call_log_entry_actions_stub);
+ if (stub != null) {
+ views.actionsView = stub.inflate();
+ }
+
+ if (views.callBackButtonView == null) {
+ views.callBackButtonView = (TextView)views.actionsView.findViewById(
+ R.id.call_back_action);
+ }
+
+ if (views.voicemailButtonView == null) {
+ views.voicemailButtonView = (TextView)views.actionsView.findViewById(
+ R.id.voicemail_action);
+ }
+
+ if (views.detailsButtonView == null) {
+ views.detailsButtonView = (TextView)views.actionsView.findViewById(R.id.details_action);
+ }
+
+ bindActionButtons(views);
+ }
+
+ /***
+ * Binds click handlers and intents to the voicemail, details and callback action buttons.
+ *
+ * @param views The call log item views.
+ */
+ private void bindActionButtons(CallLogListItemViews views) {
+ // Set return call intent, otherwise null.
+ if (PhoneNumberUtilsWrapper.canPlaceCallsTo(views.number, views.numberPresentation)) {
+ // Sets the primary action to call the number.
+ views.callBackButtonView.setTag(
+ IntentProvider.getReturnCallIntentProvider(views.number));
+ views.callBackButtonView.setVisibility(View.VISIBLE);
+ views.callBackButtonView.setOnClickListener(mActionListener);
+ } else {
+ // Number is not callable, so hide button.
+ views.callBackButtonView.setTag(null);
+ views.callBackButtonView.setVisibility(View.GONE);
+ }
+
+ // For voicemail calls, show the "VOICEMAIL" action button; hide otherwise.
+ if (views.callType == Calls.VOICEMAIL_TYPE) {
+ views.voicemailButtonView.setOnClickListener(mActionListener);
+ views.voicemailButtonView.setTag(
+ IntentProvider.getPlayVoicemailIntentProvider(
+ views.rowId, views.voicemailUri));
+ views.voicemailButtonView.setVisibility(View.VISIBLE);
+
+ views.detailsButtonView.setVisibility(View.GONE);
+ } else {
+ views.voicemailButtonView.setTag(null);
+ views.voicemailButtonView.setVisibility(View.GONE);
+
+ views.detailsButtonView.setOnClickListener(mActionListener);
+ views.detailsButtonView.setTag(
+ IntentProvider.getCallDetailIntentProvider(
+ views.rowId, views.callIds, null)
+ );
+
+ }
+
+ mCallLogViewsHelper.setActionContentDescriptions(views);
+ }
+
protected void bindBadge(View view, ContactInfo info, PhoneCallDetails details, int callType) {
// Do not show badge in call log.
@@ -806,7 +1097,9 @@
values.put(Calls.CACHED_LOOKUP_URI, UriUtils.uriToString(updatedInfo.lookupUri));
needsUpdate = true;
}
- if (!TextUtils.equals(updatedInfo.normalizedNumber, callLogInfo.normalizedNumber)) {
+ // Only replace the normalized number if the new updated normalized number isn't empty.
+ if (!TextUtils.isEmpty(updatedInfo.normalizedNumber) &&
+ !TextUtils.equals(updatedInfo.normalizedNumber, callLogInfo.normalizedNumber)) {
values.put(Calls.CACHED_NORMALIZED_NUMBER, updatedInfo.normalizedNumber);
needsUpdate = true;
}
@@ -885,21 +1178,36 @@
private void setPhoto(CallLogListItemViews views, long photoId, Uri contactUri,
String displayName, String identifier, int contactType) {
views.quickContactView.assignContactUri(contactUri);
+ views.quickContactView.setOverlay(null);
DefaultImageRequest request = new DefaultImageRequest(displayName, identifier,
- contactType);
+ contactType, true /* isCircular */);
mContactPhotoManager.loadThumbnail(views.quickContactView, photoId, false /* darkTheme */,
- request);
+ true /* isCircular */, request);
}
private void setPhoto(CallLogListItemViews views, Uri photoUri, Uri contactUri,
String displayName, String identifier, int contactType) {
views.quickContactView.assignContactUri(contactUri);
+ views.quickContactView.setOverlay(null);
DefaultImageRequest request = new DefaultImageRequest(displayName, identifier,
- contactType);
+ contactType, true /* isCircular */);
mContactPhotoManager.loadDirectoryPhoto(views.quickContactView, photoUri,
- false /* darkTheme */, request);
+ false /* darkTheme */, true /* isCircular */, request);
}
+ /**
+ * Bind a call log entry view for testing purposes. Also inflates the action view stub so
+ * unit tests can access the buttons contained within.
+ *
+ * @param view The current call log row.
+ * @param context The current context.
+ * @param cursor The cursor to bind from.
+ */
+ @VisibleForTesting
+ void bindViewForTest(View view, Context context, Cursor cursor) {
+ bindStandAloneView(view, context, cursor);
+ inflateActionViewStub(view);
+ }
/**
* Sets whether processing of requests for contact details should be enabled.
@@ -923,6 +1231,27 @@
super.addGroup(cursorPosition, size, expanded);
}
+ /**
+ * Stores the day group associated with a call in the call log.
+ *
+ * @param rowId The row Id of the current call.
+ * @param dayGroup The day group the call belongs in.
+ */
+ @Override
+ public void setDayGroup(long rowId, int dayGroup) {
+ if (!mDayGroups.containsKey(rowId)) {
+ mDayGroups.put(rowId, dayGroup);
+ }
+ }
+
+ /**
+ * Clears the day group associations on re-bind of the call log.
+ */
+ @Override
+ public void clearDayGroups() {
+ mDayGroups.clear();
+ }
+
/*
* Get the number from the Contacts, if available, since sometimes
* the number provided by caller id may not be formatted properly
@@ -961,4 +1290,42 @@
}
return number;
}
+
+ /**
+ * Retrieves the call Ids represented by the current call log row.
+ *
+ * @param cursor Call log cursor to retrieve call Ids from.
+ * @param groupSize Number of calls associated with the current call log row.
+ * @return Array of call Ids.
+ */
+ private long[] getCallIds(final Cursor cursor, final int groupSize) {
+ // We want to restore the position in the cursor at the end.
+ int startingPosition = cursor.getPosition();
+ long[] ids = new long[groupSize];
+ // Copy the ids of the rows in the group.
+ for (int index = 0; index < groupSize; ++index) {
+ ids[index] = cursor.getLong(CallLogQuery.ID);
+ cursor.moveToNext();
+ }
+ cursor.moveToPosition(startingPosition);
+ return ids;
+ }
+
+ /**
+ * Determines the description for a day group.
+ *
+ * @param group The day group to retrieve the description for.
+ * @return The day group description.
+ */
+ private CharSequence getGroupDescription(int group) {
+ if (group == CallLogGroupBuilder.DAY_GROUP_TODAY) {
+ return mContext.getResources().getString(R.string.call_log_header_today);
+ } else if (group == CallLogGroupBuilder.DAY_GROUP_YESTERDAY) {
+ return mContext.getResources().getString(R.string.call_log_header_yesterday);
+ } else if (group == CallLogGroupBuilder.DAY_GROUP_LAST_WEEK) {
+ return mContext.getResources().getString(R.string.call_log_header_last_week);
+ } else {
+ return mContext.getResources().getString(R.string.call_log_header_other);
+ }
+ }
}
diff --git a/src/com/android/dialer/calllog/CallLogFragment.java b/src/com/android/dialer/calllog/CallLogFragment.java
index 46c02a7..4f5c355 100644
--- a/src/com/android/dialer/calllog/CallLogFragment.java
+++ b/src/com/android/dialer/calllog/CallLogFragment.java
@@ -16,6 +16,9 @@
package com.android.dialer.calllog;
+import android.animation.Animator;
+import android.animation.ValueAnimator;
+import android.animation.Animator.AnimatorListener;
import android.app.Activity;
import android.app.KeyguardManager;
import android.app.ListFragment;
@@ -23,6 +26,7 @@
import android.content.Intent;
import android.database.ContentObserver;
import android.database.Cursor;
+import android.graphics.Outline;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
@@ -30,24 +34,29 @@
import android.provider.CallLog.Calls;
import android.provider.ContactsContract;
import android.provider.VoicemailContract.Status;
-import android.telephony.PhoneNumberUtils;
-import android.telephony.TelephonyManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
+import android.view.View.OnClickListener;
+import android.view.ViewGroup.LayoutParams;
+import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import com.android.common.io.MoreCloseables;
import com.android.contacts.common.CallUtil;
import com.android.contacts.common.GeoUtil;
+import com.android.contacts.common.util.PhoneNumberHelper;
+import com.android.contacts.common.util.ViewUtil;
import com.android.dialer.R;
+import com.android.dialer.list.ListsFragment.HostInterface;
+import com.android.dialer.util.DialerUtils;
import com.android.dialer.util.EmptyLoader;
import com.android.dialer.voicemail.VoicemailStatusHelper;
import com.android.dialer.voicemail.VoicemailStatusHelper.StatusMessage;
import com.android.dialer.voicemail.VoicemailStatusHelperImpl;
import com.android.dialerbind.ObjectFactory;
-import com.android.internal.telephony.ITelephony;
import java.util.List;
@@ -56,7 +65,9 @@
* (all, missed or voicemails), specify it in the constructor.
*/
public class CallLogFragment extends ListFragment
- implements CallLogQueryHandler.Listener, CallLogAdapter.CallFetcher {
+ implements CallLogQueryHandler.Listener,
+ CallLogAdapter.CallFetcher,
+ CallLogAdapter.CallItemExpandedListener {
private static final String TAG = "CallLogFragment";
/**
@@ -64,6 +75,11 @@
*/
private static final int EMPTY_LOADER_ID = 0;
+ private static final String KEY_FILTER_TYPE = "filter_type";
+ private static final String KEY_LOG_LIMIT = "log_limit";
+ private static final String KEY_DATE_LIMIT = "date_limit";
+ private static final String KEY_SHOW_FOOTER = "show_footer";
+
private CallLogAdapter mAdapter;
private CallLogQueryHandler mCallLogQueryHandler;
private boolean mScrollToTop;
@@ -76,14 +92,19 @@
private TextView mStatusMessageText;
private TextView mStatusMessageAction;
private KeyguardManager mKeyguardManager;
+ private View mFooterView;
private boolean mEmptyLoaderRunning;
private boolean mCallLogFetched;
private boolean mVoicemailStatusFetched;
- private final Handler mHandler = new Handler();
+ private float mExpandedItemTranslationZ;
+ private int mFadeInDuration;
+ private int mFadeInStartDelay;
+ private int mFadeOutDuration;
+ private int mExpandCollapseDuration;
- private TelephonyManager mTelephonyManager;
+ private final Handler mHandler = new Handler();
private class CustomContentObserver extends ContentObserver {
public CustomContentObserver() {
@@ -111,6 +132,13 @@
// will be used.
private int mLogLimit = -1;
+ // Date limit (in millis since epoch) - when non-zero, only calls which occurred on or after
+ // the date filter are included. If zero, no date-based filtering occurs.
+ private long mDateLimit = 0;
+
+ // Whether or not to show the Show call history footer view
+ private boolean mHasFooterView = false;
+
public CallLogFragment() {
this(CallLogQueryHandler.CALL_TYPE_ALL, -1);
}
@@ -125,10 +153,43 @@
mLogLimit = logLimit;
}
+ /**
+ * Creates a call log fragment, filtering to include only calls of the desired type, occurring
+ * after the specified date.
+ * @param filterType type of calls to include.
+ * @param dateLimit limits results to calls occurring on or after the specified date.
+ */
+ public CallLogFragment(int filterType, long dateLimit) {
+ this(filterType, -1, dateLimit);
+ }
+
+ /**
+ * Creates a call log fragment, filtering to include only calls of the desired type, occurring
+ * after the specified date. Also provides a means to limit the number of results returned.
+ * @param filterType type of calls to include.
+ * @param logLimit limits the number of results to return.
+ * @param dateLimit limits results to calls occurring on or after the specified date.
+ */
+ public CallLogFragment(int filterType, int logLimit, long dateLimit) {
+ this(filterType, logLimit);
+ mDateLimit = dateLimit;
+ }
+
@Override
public void onCreate(Bundle state) {
super.onCreate(state);
+ if (state != null) {
+ mCallTypeFilter = state.getInt(KEY_FILTER_TYPE, mCallTypeFilter);
+ mLogLimit = state.getInt(KEY_LOG_LIMIT, mLogLimit);
+ mDateLimit = state.getLong(KEY_DATE_LIMIT, mDateLimit);
+ mHasFooterView = state.getBoolean(KEY_SHOW_FOOTER, mHasFooterView);
+ }
+
+ String currentCountryIso = GeoUtil.getCurrentCountryIso(getActivity());
+ mAdapter = ObjectFactory.newCallLogAdapter(getActivity(), this, new ContactInfoHelper(
+ getActivity(), currentCountryIso), this, true);
+ setListAdapter(mAdapter);
mCallLogQueryHandler = new CallLogQueryHandler(getActivity().getContentResolver(),
this, mLogLimit);
mKeyguardManager =
@@ -140,7 +201,15 @@
getActivity().getContentResolver().registerContentObserver(
Status.CONTENT_URI, true, mVoicemailStatusObserver);
setHasOptionsMenu(true);
- updateCallList(mCallTypeFilter);
+ updateCallList(mCallTypeFilter, mDateLimit);
+
+ mExpandedItemTranslationZ =
+ getResources().getDimension(R.dimen.call_log_expanded_translation_z);
+ mFadeInDuration = getResources().getInteger(R.integer.call_log_actions_fade_in_duration);
+ mFadeInStartDelay = getResources().getInteger(R.integer.call_log_actions_fade_start);
+ mFadeOutDuration = getResources().getInteger(R.integer.call_log_actions_fade_out_duration);
+ mExpandCollapseDuration = getResources().getInteger(
+ R.integer.call_log_expand_collapse_duration);
}
/** Called by the CallLogQueryHandler when the list of calls has been fetched or updated. */
@@ -231,12 +300,11 @@
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
- updateEmptyMessage(mCallTypeFilter);
- String currentCountryIso = GeoUtil.getCurrentCountryIso(getActivity());
- mAdapter = ObjectFactory.newCallLogAdapter(getActivity(), this, new ContactInfoHelper(
- getActivity(), currentCountryIso), true, true);
- setListAdapter(mAdapter);
+ getListView().setEmptyView(view.findViewById(R.id.empty_list_view));
getListView().setItemsCanFocus(true);
+ maybeAddFooterView();
+
+ updateEmptyMessage(mCallTypeFilter);
}
/**
@@ -322,37 +390,50 @@
}
@Override
+ public void onSaveInstanceState(Bundle outState) {
+ super.onSaveInstanceState(outState);
+ outState.putInt(KEY_FILTER_TYPE, mCallTypeFilter);
+ outState.putInt(KEY_LOG_LIMIT, mLogLimit);
+ outState.putLong(KEY_DATE_LIMIT, mDateLimit);
+ outState.putBoolean(KEY_SHOW_FOOTER, mHasFooterView);
+ }
+
+ @Override
public void fetchCalls() {
- mCallLogQueryHandler.fetchCalls(mCallTypeFilter);
+ mCallLogQueryHandler.fetchCalls(mCallTypeFilter, mDateLimit);
}
public void startCallsQuery() {
mAdapter.setLoading(true);
- mCallLogQueryHandler.fetchCalls(mCallTypeFilter);
+ mCallLogQueryHandler.fetchCalls(mCallTypeFilter, mDateLimit);
}
private void startVoicemailStatusQuery() {
mCallLogQueryHandler.fetchVoicemailStatus();
}
- private void updateCallList(int filterType) {
- mCallLogQueryHandler.fetchCalls(filterType);
+ private void updateCallList(int filterType, long dateLimit) {
+ mCallLogQueryHandler.fetchCalls(filterType, dateLimit);
}
private void updateEmptyMessage(int filterType) {
- final String message;
+ final int messageId;
switch (filterType) {
case Calls.MISSED_TYPE:
- message = getString(R.string.recentMissed_empty);
+ messageId = R.string.recentMissed_empty;
+ break;
+ case Calls.VOICEMAIL_TYPE:
+ messageId = R.string.recentVoicemails_empty;
break;
case CallLogQueryHandler.CALL_TYPE_ALL:
- message = getString(R.string.recentCalls_empty);
+ messageId = R.string.recentCalls_empty;
break;
default:
throw new IllegalArgumentException("Unexpected filter type in CallLogFragment: "
+ filterType);
}
- ((TextView) getListView().getEmptyView()).setText(message);
+ DialerUtils.configureEmptyListView(
+ getListView().getEmptyView(), R.drawable.empty_call_log, messageId, getResources());
}
public void callSelectedEntry() {
@@ -373,7 +454,7 @@
}
Intent intent;
// If "number" is really a SIP address, construct a sip: URI.
- if (PhoneNumberUtils.isUriNumber(number)) {
+ if (PhoneNumberHelper.isUriNumber(number)) {
intent = CallUtil.getCallIntent(
Uri.fromParts(CallUtil.SCHEME_SIP, number, null));
} else {
@@ -453,4 +534,177 @@
CallLogNotificationsHelper.updateVoicemailNotifications(getActivity());
}
}
+
+ /**
+ * Enables/disables the showing of the view full call history footer
+ *
+ * @param hasFooterView Whether or not to show the footer
+ */
+ public void setHasFooterView(boolean hasFooterView) {
+ mHasFooterView = hasFooterView;
+ maybeAddFooterView();
+ }
+
+ /**
+ * Determine whether or not the footer view should be added to the listview. If getView()
+ * is null, which means onCreateView hasn't been called yet, defer the addition of the footer
+ * until onViewCreated has been called.
+ */
+ private void maybeAddFooterView() {
+ if (!mHasFooterView || getView() == null) {
+ return;
+ }
+
+ if (mFooterView == null) {
+ mFooterView = getActivity().getLayoutInflater().inflate(
+ R.layout.recents_list_footer, (ViewGroup) getView(), false);
+ mFooterView.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ ((HostInterface) getActivity()).showCallHistory();
+ }
+ });
+ }
+
+ final ListView listView = getListView();
+ listView.removeFooterView(mFooterView);
+ listView.addFooterView(mFooterView);
+
+ ViewUtil.addBottomPaddingToListViewForFab(listView, getResources());
+ }
+
+ @Override
+ public void onItemExpanded(final CallLogListItemView view) {
+ final int startingHeight = view.getHeight();
+ final CallLogListItemViews viewHolder = (CallLogListItemViews) view.getTag();
+ final ViewTreeObserver observer = getListView().getViewTreeObserver();
+ observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
+ @Override
+ public boolean onPreDraw() {
+ // We don't want to continue getting called for every draw.
+ if (observer.isAlive()) {
+ observer.removeOnPreDrawListener(this);
+ }
+ // Calculate some values to help with the animation.
+ final int endingHeight = view.getHeight();
+ final int distance = Math.abs(endingHeight - startingHeight);
+ final int baseHeight = Math.min(endingHeight, startingHeight);
+ final boolean isExpand = endingHeight > startingHeight;
+
+ // Set the views back to the start state of the animation
+ view.getLayoutParams().height = startingHeight;
+ if (!isExpand) {
+ viewHolder.actionsView.setVisibility(View.VISIBLE);
+ }
+
+ // If the day group header is shown, subtract the header from the outline of the
+ // view. The outline is used for generating the shadow of the view, but we only want
+ // a shadow on the call log list item and not the header. This is a slight hack, but
+ // the hierarchy of the call log list items makes it hard to achieve the desired
+ // shadow behavior otherwise.
+ if (viewHolder.dayGroupHeader.isShown()) {
+ Outline outline = new Outline();
+ outline.setRect(
+ 0 /* left */,
+ viewHolder.dayGroupHeader.getHeight() /* top */,
+ view.getWidth() /* right */,
+ view.getHeight() /* bottom */);
+ view.setOutline(outline);
+ }
+
+ // Set up the fade effect for the action buttons.
+ if (isExpand) {
+ // Start the fade in after the expansion has partly completed, otherwise it
+ // will be mostly over before the expansion completes.
+ viewHolder.actionsView.setAlpha(0f);
+ viewHolder.actionsView.animate()
+ .alpha(1f)
+ .setStartDelay(mFadeInStartDelay)
+ .setDuration(mFadeInDuration)
+ .start();
+ } else {
+ viewHolder.actionsView.setAlpha(1f);
+ viewHolder.actionsView.animate()
+ .alpha(0f)
+ .setDuration(mFadeOutDuration)
+ .start();
+ }
+ view.requestLayout();
+
+ // Set up the animator to animate the expansion and shadow depth.
+ ValueAnimator animator = isExpand ? ValueAnimator.ofFloat(0f, 1f)
+ : ValueAnimator.ofFloat(1f, 0f);
+
+ animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+ @Override
+ public void onAnimationUpdate(ValueAnimator animator) {
+ Float value = (Float) animator.getAnimatedValue();
+
+ // For each value from 0 to 1, animate the various parts of the layout.
+ view.getLayoutParams().height = (int) (value * distance + baseHeight);
+ view.setTranslationZ(mExpandedItemTranslationZ * value);
+ view.requestLayout();
+ }
+ });
+ // Set everything to their final values when the animation's done.
+ animator.addListener(new AnimatorListener() {
+ @Override
+ public void onAnimationEnd(Animator animation) {
+ view.getLayoutParams().height = LayoutParams.WRAP_CONTENT;
+
+ if (!isExpand) {
+ viewHolder.actionsView.setVisibility(View.GONE);
+ } else {
+ // This seems like it should be unnecessary, but without this, after
+ // navigating out of the activity and then back, the action view alpha
+ // is defaulting to the value (0) at the start of the expand animation.
+ viewHolder.actionsView.setAlpha(1);
+ }
+ }
+
+ @Override
+ public void onAnimationCancel(Animator animation) { }
+ @Override
+ public void onAnimationRepeat(Animator animation) { }
+ @Override
+ public void onAnimationStart(Animator animation) { }
+ });
+
+ animator.setDuration(mExpandCollapseDuration);
+ animator.start();
+
+ // Return false so this draw does not occur to prevent the final frame from
+ // being drawn for the single frame before the animations start.
+ return false;
+ }
+ });
+ }
+
+ /**
+ * Retrieves the call log view for the specified call Id. If the view is not currently
+ * visible, returns null.
+ *
+ * @param callId The call Id.
+ * @return The call log view.
+ */
+ @Override
+ public CallLogListItemView getViewForCallId(long callId) {
+ ListView listView = getListView();
+
+ int firstPosition = listView.getFirstVisiblePosition();
+ int lastPosition = listView.getLastVisiblePosition();
+
+ for (int position = 0; position <= lastPosition - firstPosition; position++) {
+ View view = listView.getChildAt(position);
+
+ if (view != null) {
+ final CallLogListItemViews viewHolder = (CallLogListItemViews) view.getTag();
+ if (viewHolder != null && viewHolder.rowId == callId) {
+ return (CallLogListItemView)view;
+ }
+ }
+ }
+
+ return null;
+ }
}
diff --git a/src/com/android/dialer/calllog/CallLogGroupBuilder.java b/src/com/android/dialer/calllog/CallLogGroupBuilder.java
index 213f1e7..50cf054 100644
--- a/src/com/android/dialer/calllog/CallLogGroupBuilder.java
+++ b/src/com/android/dialer/calllog/CallLogGroupBuilder.java
@@ -19,20 +19,74 @@
import android.database.Cursor;
import android.provider.CallLog.Calls;
import android.telephony.PhoneNumberUtils;
+import android.text.format.Time;
import com.android.common.widget.GroupingListAdapter;
+import com.android.contacts.common.util.DateUtils;
+import com.android.contacts.common.util.PhoneNumberHelper;
+
import com.google.common.annotations.VisibleForTesting;
/**
- * Groups together calls in the call log.
+ * Groups together calls in the call log. The primary grouping attempts to group together calls
+ * to and from the same number into a single row on the call log.
+ * A secondary grouping assigns calls, grouped via the primary grouping, to "day groups". The day
+ * groups provide a means of identifying the calls which occurred "Today", "Yesterday", "Last week",
+ * or "Other".
* <p>
* This class is meant to be used in conjunction with {@link GroupingListAdapter}.
*/
public class CallLogGroupBuilder {
public interface GroupCreator {
+
+ /**
+ * Defines the interface for adding a group to the call log.
+ * The primary group for a call log groups the calls together based on the number which was
+ * dialed.
+ * @param cursorPosition The starting position of the group in the cursor.
+ * @param size The size of the group.
+ * @param expanded Whether the group is expanded; always false for the call log.
+ */
public void addGroup(int cursorPosition, int size, boolean expanded);
+
+ /**
+ * Defines the interface for tracking the day group each call belongs to. Calls in a call
+ * group are assigned the same day group as the first call in the group. The day group
+ * assigns calls to the buckets: Today, Yesterday, Last week, and Other
+ *
+ * @param rowId The row Id of the current call.
+ * @param dayGroup The day group the call belongs in.
+ */
+ public void setDayGroup(long rowId, int dayGroup);
+
+ /**
+ * Defines the interface for clearing the day groupings information on rebind/regroup.
+ */
+ public void clearDayGroups();
}
+ /**
+ * Day grouping for call log entries used to represent no associated day group. Used primarily
+ * when retrieving the previous day group, but there is no previous day group (i.e. we are at
+ * the start of the list).
+ */
+ public static final int DAY_GROUP_NONE = -1;
+
+ /** Day grouping for calls which occurred today. */
+ public static final int DAY_GROUP_TODAY = 0;
+
+ /** Day grouping for calls which occurred yesterday. */
+ public static final int DAY_GROUP_YESTERDAY = 1;
+
+ /** Day grouping for calls which occurred last week. */
+ public static final int DAY_GROUP_LAST_WEEK = 2;
+
+ /** Day grouping for calls which occurred before last week. */
+ public static final int DAY_GROUP_OTHER = 3;
+
+ /** Instance of the time object used for time calculations. */
+ private static final Time TIME = new Time();
+
/** The object on which the groups are created. */
private final GroupCreator mGroupCreator;
@@ -57,18 +111,33 @@
return;
}
+ // Clear any previous day grouping information.
+ mGroupCreator.clearDayGroups();
+
+ // Get current system time, used for calculating which day group calls belong to.
+ long currentTime = System.currentTimeMillis();
+
int currentGroupSize = 1;
cursor.moveToFirst();
// The number of the first entry in the group.
String firstNumber = cursor.getString(CallLogQuery.NUMBER);
// This is the type of the first call in the group.
int firstCallType = cursor.getInt(CallLogQuery.CALL_TYPE);
+
+ // Determine the day group for the first call in the cursor.
+ final long firstDate = cursor.getLong(CallLogQuery.DATE);
+ final long firstRowId = cursor.getLong(CallLogQuery.ID);
+ int currentGroupDayGroup = getDayGroup(firstDate, currentTime);
+ mGroupCreator.setDayGroup(firstRowId, currentGroupDayGroup);
+
while (cursor.moveToNext()) {
// The number of the current row in the cursor.
final String currentNumber = cursor.getString(CallLogQuery.NUMBER);
final int callType = cursor.getInt(CallLogQuery.CALL_TYPE);
final boolean sameNumber = equalNumbers(firstNumber, currentNumber);
final boolean shouldGroup;
+ final long currentCallId = cursor.getLong(CallLogQuery.ID);
+ final long date = cursor.getLong(CallLogQuery.DATE);
if (!sameNumber) {
// Should only group with calls from the same number.
@@ -86,6 +155,11 @@
// the group until we find a call that does not match.
currentGroupSize++;
} else {
+ // The call group has changed, so determine the day group for the new call group.
+ // This ensures all calls grouped together in the call log are assigned the same
+ // day group.
+ currentGroupDayGroup = getDayGroup(date, currentTime);
+
// Create a group for the previous set of calls, excluding the current one, but do
// not create a group for a single call.
if (currentGroupSize > 1) {
@@ -97,6 +171,9 @@
firstNumber = currentNumber;
firstCallType = callType;
}
+
+ // Save the day group associated with the current call.
+ mGroupCreator.setDayGroup(currentCallId, currentGroupDayGroup);
}
// If the last set of calls at the end of the call log was itself a group, create it now.
if (currentGroupSize > 1) {
@@ -117,7 +194,7 @@
@VisibleForTesting
boolean equalNumbers(String number1, String number2) {
- if (PhoneNumberUtils.isUriNumber(number1) || PhoneNumberUtils.isUriNumber(number2)) {
+ if (PhoneNumberHelper.isUriNumber(number1) || PhoneNumberHelper.isUriNumber(number2)) {
return compareSipAddresses(number1, number2);
} else {
return PhoneNumberUtils.compare(number1, number2);
@@ -152,4 +229,25 @@
return userinfo1.equals(userinfo2) && rest1.equalsIgnoreCase(rest2);
}
+
+ /**
+ * Given a call date and the current date, determine which date group the call belongs in.
+ *
+ * @param date The call date.
+ * @param now The current date.
+ * @return The date group the call belongs in.
+ */
+ private int getDayGroup(long date, long now) {
+ int days = DateUtils.getDayDifference(TIME, date, now);
+
+ if (days == 0) {
+ return DAY_GROUP_TODAY;
+ } else if (days == 1) {
+ return DAY_GROUP_YESTERDAY;
+ } else if (days > 1 && days <=7) {
+ return DAY_GROUP_LAST_WEEK;
+ } else {
+ return DAY_GROUP_OTHER;
+ }
+ }
}
diff --git a/src/com/android/dialer/calllog/CallLogListItemHelper.java b/src/com/android/dialer/calllog/CallLogListItemHelper.java
index a85cd01..cb7c7cd 100644
--- a/src/com/android/dialer/calllog/CallLogListItemHelper.java
+++ b/src/com/android/dialer/calllog/CallLogListItemHelper.java
@@ -17,10 +17,8 @@
package com.android.dialer.calllog;
import android.content.res.Resources;
-import android.provider.CallLog;
import android.provider.CallLog.Calls;
import android.text.TextUtils;
-import android.view.View;
import com.android.dialer.PhoneCallDetails;
import com.android.dialer.PhoneCallDetailsHelper;
@@ -55,14 +53,9 @@
*
* @param views the views to populate
* @param details the details of a phone call needed to fill in the data
- * @param isHighlighted whether to use the highlight text for the call
- * @param showSecondaryActionButton whether to show the secondary action button or not
*/
- public void setPhoneCallDetails(CallLogListItemViews views, PhoneCallDetails details,
- boolean isHighlighted, boolean showSecondaryActionButton) {
- mPhoneCallDetailsHelper.setPhoneCallDetails(views.phoneCallDetailsViews, details,
- isHighlighted);
- boolean canPlay = details.callTypes[0] == Calls.VOICEMAIL_TYPE;
+ public void setPhoneCallDetails(CallLogListItemViews views, PhoneCallDetails details) {
+ mPhoneCallDetailsHelper.setPhoneCallDetails(views.phoneCallDetailsViews, details);
// Set the accessibility text for the contact badge
views.quickContactView.setContentDescription(getContactBadgeDescription(details));
@@ -70,35 +63,25 @@
// Set the primary action accessibility description
views.primaryActionView.setContentDescription(getCallDescription(details));
- // If secondary action is visible, either show voicemail playback icon, or
- // show the "clock" icon corresponding to the call details screen.
- if (showSecondaryActionButton) {
- if (canPlay) {
- // Playback action takes preference.
- configurePlaySecondaryAction(views, isHighlighted);
- } else {
- // Call details is the secondary action.
- configureCallDetailsSecondaryAction(views, details);
- }
- } else {
- // No secondary action is to be shown (ie this is likely a PhoneFavoriteFragment)
- views.secondaryActionView.setVisibility(View.GONE);
- }
+ // Cache name or number of caller. Used when setting the content descriptions of buttons
+ // when the actions ViewStub is inflated.
+ views.nameOrNumber = this.getNameOrNumber(details);
}
/**
- * Sets the secondary action to invoke call details.
+ * Sets the accessibility descriptions for the action buttons in the action button ViewStub.
*
- * @param views the views to populate
- * @param details the details of a phone call needed to fill in the call details data
+ * @param views The views associated with the current call log entry.
*/
- private void configureCallDetailsSecondaryAction(CallLogListItemViews views,
- PhoneCallDetails details) {
- views.secondaryActionView.setVisibility(View.VISIBLE);
- // Use the small dark grey clock icon.
- views.secondaryActionButtonView.setImageResource(R.drawable.ic_menu_history_dk);
- views.secondaryActionButtonView.setContentDescription(
- mResources.getString(R.string.description_call_details));
+ public void setActionContentDescriptions(CallLogListItemViews views) {
+ views.callBackButtonView.setContentDescription(
+ mResources.getString(R.string.description_call_back_action, views.nameOrNumber));
+
+ views.voicemailButtonView.setContentDescription(
+ mResources.getString(R.string.description_voicemail_action, views.nameOrNumber));
+
+ views.detailsButtonView.setContentDescription(
+ mResources.getString(R.string.description_details_action, views.nameOrNumber));
}
/**
@@ -123,16 +106,11 @@
*
* The {Caller Information} references the most recent call associated with the caller.
* For incoming calls:
- * If missed call: Return missed call from {Name/Number} {Call Type} {Call Time}.
- * If answered call: Return answered call from {Name/Number} {Call Type} {Call Time}.
- *
- * For unknown callers, drop the "Return" part, since the call can't be returned:
- * If answered unknown: Answered call from {Name/Number} {Call Time}.
- * If missed unknown: Missed call from {Name/Number} {Call Time}.
+ * If missed call: Missed call from {Name/Number} {Call Type} {Call Time}.
+ * If answered call: Answered call from {Name/Number} {Call Type} {Call Time}.
*
* For outgoing calls:
- * If outgoing: Call {Name/Number] {Call Type}. {Last} called {Call Time}.
- * Where {Last} is dropped if the number of calls for the caller is 1.
+ * If outgoing: Call to {Name/Number] {Call Type} {Call Time}.
*
* Where:
* {Name/Number} is the name or number of the caller (as shown in call log).
@@ -140,8 +118,8 @@
* {Call Time} is the time since the last call for the contact occurred.
*
* Examples:
- * 3 calls. New Voicemail. Return missed call from Joe Smith mobile 2 hours ago.
- * 2 calls. Call John Doe mobile. Last called 1 hour ago.
+ * 3 calls. New Voicemail. Missed call from Joe Smith mobile 2 hours ago.
+ * 2 calls. Answered call from John Doe mobile. Last called 1 hour ago.
* @param details Details of call.
* @return Return call action description.
*/
@@ -191,43 +169,17 @@
*/
public int getCallDescriptionStringID(PhoneCallDetails details) {
int lastCallType = getLastCallType(details.callTypes);
- boolean isNumberCallable = PhoneNumberUtilsWrapper.canPlaceCallsTo(details.number,
- details.numberPresentation);
+ int stringID;
- // Default string to use is "call XYZ..." just in case we manage to fall through.
- int stringID = R.string.description_call_last_multiple;
-
- if (!isNumberCallable) {
- // Number isn't callable; this is an incoming call from an unknown caller.
- // An uncallable outgoing call wouldn't be in the call log.
-
- // Voicemail and missed calls are both considered missed.
- if (lastCallType == Calls.VOICEMAIL_TYPE ||
- lastCallType == Calls.MISSED_TYPE) {
- stringID = R.string.description_unknown_missed_call;
- } else if (lastCallType == Calls.INCOMING_TYPE) {
- stringID = R.string.description_unknown_answered_call;
- }
+ if (lastCallType == Calls.VOICEMAIL_TYPE || lastCallType == Calls.MISSED_TYPE) {
+ //Message: Missed call from <NameOrNumber>, <TypeOrLocation>, <TimeOfCall>.
+ stringID = R.string.description_incoming_missed_call;
+ } else if (lastCallType == Calls.INCOMING_TYPE) {
+ //Message: Answered call from <NameOrNumber>, <TypeOrLocation>, <TimeOfCall>.
+ stringID = R.string.description_incoming_answered_call;
} else {
- // Known caller, so callable.
-
- // Missed call (ie voicemail or missed)
- if (lastCallType == Calls.VOICEMAIL_TYPE ||
- lastCallType == Calls.MISSED_TYPE) {
- stringID = R.string.description_return_missed_call;
- } else if (lastCallType == Calls.INCOMING_TYPE) {
- // Incoming answered.
- stringID = R.string.description_return_answered_call;
- } else {
- // Outgoing call.
-
- // If we have a history of multiple calls
- if (details.callTypes.length > 1) {
- stringID = R.string.description_call_last_multiple;
- } else {
- stringID = R.string.description_call_last;
- }
- }
+ //Message: Call to <NameOrNumber>, <TypeOrLocation>, <TimeOfCall>.
+ stringID = R.string.description_outgoing_call;
}
return stringID;
}
@@ -260,13 +212,4 @@
}
return recipient;
}
-
- /** Sets the secondary action to correspond to the play button. */
- private void configurePlaySecondaryAction(CallLogListItemViews views, boolean isHighlighted) {
- views.secondaryActionView.setVisibility(View.VISIBLE);
- views.secondaryActionButtonView.setImageResource(
- isHighlighted ? R.drawable.ic_play_active_holo_dark : R.drawable.ic_play_holo_light);
- views.secondaryActionButtonView.setContentDescription(
- mResources.getString(R.string.description_call_log_play_button));
- }
}
diff --git a/src/com/android/dialer/calllog/CallLogListItemView.java b/src/com/android/dialer/calllog/CallLogListItemView.java
index 113b02a..b8990f5 100644
--- a/src/com/android/dialer/calllog/CallLogListItemView.java
+++ b/src/com/android/dialer/calllog/CallLogListItemView.java
@@ -35,12 +35,4 @@
public CallLogListItemView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
-
- @Override
- public void requestLayout() {
- // We will assume that once measured this will not need to resize
- // itself, so there is no need to pass the layout request to the parent
- // view (ListView).
- forceLayout();
- }
}
diff --git a/src/com/android/dialer/calllog/CallLogListItemViews.java b/src/com/android/dialer/calllog/CallLogListItemViews.java
index a378956..ade720f 100644
--- a/src/com/android/dialer/calllog/CallLogListItemViews.java
+++ b/src/com/android/dialer/calllog/CallLogListItemViews.java
@@ -22,7 +22,7 @@
import android.widget.QuickContactBadge;
import android.widget.TextView;
-import com.android.contacts.common.test.NeededForTesting;
+import com.android.contacts.common.testing.NeededForTesting;
import com.android.dialer.PhoneCallDetailsViews;
import com.android.dialer.R;
@@ -34,47 +34,95 @@
public final QuickContactBadge quickContactView;
/** The primary action view of the entry. */
public final View primaryActionView;
- /** The secondary action view, which includes both the vertical divider line and
- * the action button itself. Used so that the button and divider line can be
- * made visible/hidden as a whole. */
- public final View secondaryActionView;
- /** The secondary action button on the entry. */
- public final ImageView secondaryActionButtonView;
/** The details of the phone call. */
public final PhoneCallDetailsViews phoneCallDetailsViews;
- /** The text of the header of a section. */
- public final TextView listHeaderTextView;
+ /** The text of the header for a day grouping. */
+ public final TextView dayGroupHeader;
+ /** The view containing the details for the call log row, including the action buttons. */
+ public final View callLogEntryView;
+ /** The view containing call log item actions. Null until the ViewStub is inflated. */
+ public View actionsView;
+ /** The "call back" action button - assigned only when the action section is expanded. */
+ public TextView callBackButtonView;
+ /** The "voicemail" action button - assigned only when the action section is expanded. */
+ public TextView voicemailButtonView;
+ /** The "details" action button - assigned only when the action section is expanded. */
+ public TextView detailsButtonView;
+
+ /**
+ * The row Id for the first call associated with the call log entry. Used as a key for the
+ * map used to track which call log entries have the action button section expanded.
+ */
+ public long rowId;
+
+ /**
+ * The call Ids for the calls represented by the current call log entry. Used when the user
+ * deletes a call log entry.
+ */
+ public long[] callIds;
+
+ /**
+ * The callable phone number for the current call log entry. Cached here as the call back
+ * intent is set only when the actions ViewStub is inflated.
+ */
+ public String number;
+
+ /**
+ * The phone number presentation for the current call log entry. Cached here as the call back
+ * intent is set only when the actions ViewStub is inflated.
+ */
+ public int numberPresentation;
+
+ /**
+ * The type of call for the current call log entry. Cached here as the call back
+ * intent is set only when the actions ViewStub is inflated.
+ */
+ public int callType;
+
+ /**
+ * If the call has an associated voicemail message, the URI of the voicemail message for
+ * playback. Cached here as the voicemail intent is only set when the actions ViewStub is
+ * inflated.
+ */
+ public String voicemailUri;
+
+ /**
+ * The name or number associated with the call. Cached here for use when setting content
+ * descriptions on buttons in the actions ViewStub when it is inflated.
+ */
+ public CharSequence nameOrNumber;
private CallLogListItemViews(QuickContactBadge quickContactView, View primaryActionView,
- View secondaryActionView, ImageView secondaryActionButtonView,
- PhoneCallDetailsViews phoneCallDetailsViews,
- TextView listHeaderTextView) {
+ PhoneCallDetailsViews phoneCallDetailsViews, View callLogEntryView,
+ TextView dayGroupHeader) {
this.quickContactView = quickContactView;
this.primaryActionView = primaryActionView;
- this.secondaryActionView = secondaryActionView;
- this.secondaryActionButtonView = secondaryActionButtonView;
this.phoneCallDetailsViews = phoneCallDetailsViews;
- this.listHeaderTextView = listHeaderTextView;
+ this.callLogEntryView = callLogEntryView;
+ this.dayGroupHeader = dayGroupHeader;
}
public static CallLogListItemViews fromView(View view) {
return new CallLogListItemViews(
(QuickContactBadge) view.findViewById(R.id.quick_contact_photo),
view.findViewById(R.id.primary_action_view),
- view.findViewById(R.id.secondary_action_view),
- (ImageView) view.findViewById(R.id.secondary_action_icon),
PhoneCallDetailsViews.fromView(view),
- (TextView) view.findViewById(R.id.call_log_header));
+ view.findViewById(R.id.call_log_row),
+ (TextView) view.findViewById(R.id.call_log_day_group_label));
}
@NeededForTesting
public static CallLogListItemViews createForTest(Context context) {
- return new CallLogListItemViews(
+ CallLogListItemViews views = new CallLogListItemViews(
new QuickContactBadge(context),
new View(context),
- new View(context),
- new ImageView(context),
PhoneCallDetailsViews.createForTest(context),
+ new View(context),
new TextView(context));
+ views.callBackButtonView = new TextView(context);
+ views.voicemailButtonView = new TextView(context);
+ views.detailsButtonView = new TextView(context);
+ views.actionsView = new View(context);
+ return views;
}
}
diff --git a/src/com/android/dialer/calllog/CallLogQueryHandler.java b/src/com/android/dialer/calllog/CallLogQueryHandler.java
index 3992676..64eddec 100644
--- a/src/com/android/dialer/calllog/CallLogQueryHandler.java
+++ b/src/com/android/dialer/calllog/CallLogQueryHandler.java
@@ -112,6 +112,8 @@
Log.w(TAG, "Exception on background worker thread", e);
} catch (SQLiteDatabaseCorruptException e) {
Log.w(TAG, "Exception on background worker thread", e);
+ } catch (IllegalArgumentException e) {
+ Log.w(TAG, "ContactsProvider not present on device", e);
}
}
}
diff --git a/src/com/android/dialer/calllog/CallTypeIconsView.java b/src/com/android/dialer/calllog/CallTypeIconsView.java
index a65f2c2..afbced4 100644
--- a/src/com/android/dialer/calllog/CallTypeIconsView.java
+++ b/src/com/android/dialer/calllog/CallTypeIconsView.java
@@ -18,12 +18,14 @@
import android.content.Context;
import android.graphics.Canvas;
+import android.graphics.PorterDuff;
import android.graphics.drawable.Drawable;
import android.provider.CallLog.Calls;
import android.util.AttributeSet;
import android.view.View;
-import com.android.contacts.common.test.NeededForTesting;
+import com.android.contacts.common.testing.NeededForTesting;
+import com.android.contacts.common.util.BitmapUtil;
import com.android.dialer.R;
import com.google.common.collect.Lists;
@@ -112,17 +114,54 @@
}
private static class Resources {
+
+ /**
+ * Drawable representing an incoming answered call.
+ */
public final Drawable incoming;
+
+ /**
+ * Drawable respresenting an outgoing call.
+ */
public final Drawable outgoing;
+
+ /**
+ * Drawable representing an incoming missed call.
+ */
public final Drawable missed;
+
+ /**
+ * Drawable representing a voicemail.
+ */
public final Drawable voicemail;
+
+ /**
+ * The margin to use for icons.
+ */
public final int iconMargin;
+ /**
+ * Configures the call icon drawables.
+ * A single white call arrow which points down and left is used as a basis for all of the
+ * call arrow icons, applying rotation and colors as needed.
+ *
+ * @param context The current context.
+ */
public Resources(Context context) {
final android.content.res.Resources r = context.getResources();
- incoming = r.getDrawable(R.drawable.ic_call_incoming_holo_dark);
- outgoing = r.getDrawable(R.drawable.ic_call_outgoing_holo_dark);
- missed = r.getDrawable(R.drawable.ic_call_missed_holo_dark);
+
+ incoming = r.getDrawable(R.drawable.ic_call_arrow);
+ incoming.setColorFilter(r.getColor(R.color.answered_call), PorterDuff.Mode.MULTIPLY);
+
+ // Create a rotated instance of the call arrow for outgoing calls.
+ outgoing = BitmapUtil.getRotatedDrawable(r, R.drawable.ic_call_arrow, 180f);
+ outgoing.setColorFilter(r.getColor(R.color.answered_call), PorterDuff.Mode.MULTIPLY);
+
+ // Need to make a copy of the arrow drawable, otherwise the same instance colored
+ // above will be recolored here.
+ missed = r.getDrawable(R.drawable.ic_call_arrow).mutate();
+ missed.setColorFilter(r.getColor(R.color.missed_call), PorterDuff.Mode.MULTIPLY);
+
voicemail = r.getDrawable(R.drawable.ic_call_voicemail_holo_dark);
iconMargin = r.getDimensionPixelSize(R.dimen.call_log_icon_margin);
}
diff --git a/src/com/android/dialer/calllog/ContactInfoHelper.java b/src/com/android/dialer/calllog/ContactInfoHelper.java
index e1a01b4..1bebfc4 100644
--- a/src/com/android/dialer/calllog/ContactInfoHelper.java
+++ b/src/com/android/dialer/calllog/ContactInfoHelper.java
@@ -26,6 +26,7 @@
import android.text.TextUtils;
import com.android.contacts.common.util.Constants;
+import com.android.contacts.common.util.PhoneNumberHelper;
import com.android.contacts.common.util.UriUtils;
import com.android.dialer.service.CachedNumberLookupService;
import com.android.dialer.service.CachedNumberLookupService.CachedContactInfo;
@@ -66,13 +67,13 @@
final ContactInfo info;
// Determine the contact info.
- if (PhoneNumberUtils.isUriNumber(number)) {
+ if (PhoneNumberHelper.isUriNumber(number)) {
// This "number" is really a SIP address.
ContactInfo sipInfo = queryContactInfoForSipAddress(number);
if (sipInfo == null || sipInfo == ContactInfo.EMPTY) {
// Check whether the "username" part of the SIP address is
// actually the phone number of a contact.
- String username = PhoneNumberUtils.getUsernameFromUriNumber(number);
+ String username = PhoneNumberHelper.getUsernameFromUriNumber(number);
if (PhoneNumberUtils.isGlobalPhoneNumber(username)) {
sipInfo = queryContactInfoForPhoneNumber(username, countryIso);
}
@@ -100,6 +101,8 @@
updatedInfo = new ContactInfo();
updatedInfo.number = number;
updatedInfo.formattedNumber = formatPhoneNumber(number, null, countryIso);
+ updatedInfo.normalizedNumber = PhoneNumberUtils.formatNumberToE164(
+ number, countryIso);
updatedInfo.lookupUri = createTemporaryContactUri(updatedInfo.formattedNumber);
} else {
updatedInfo = info;
@@ -248,7 +251,7 @@
return "";
}
// If "number" is really a SIP address, don't try to do any formatting at all.
- if (PhoneNumberUtils.isUriNumber(number)) {
+ if (PhoneNumberHelper.isUriNumber(number)) {
return number;
}
if (TextUtils.isEmpty(countryIso)) {
@@ -269,7 +272,7 @@
final List<String> segments = lookupUri.getPathSegments();
// This returns the third path segment of the uri, where the lookup key is located.
// See {@link android.provider.ContactsContract.Contacts#CONTENT_LOOKUP_URI}.
- return (segments.size() < 3) ? null : segments.get(2);
+ return (segments.size() < 3) ? null : Uri.encode(segments.get(2));
} else {
return null;
}
diff --git a/src/com/android/dialer/calllog/IntentProvider.java b/src/com/android/dialer/calllog/IntentProvider.java
index da0c69d..96020be 100644
--- a/src/com/android/dialer/calllog/IntentProvider.java
+++ b/src/com/android/dialer/calllog/IntentProvider.java
@@ -65,39 +65,29 @@
};
}
+ /**
+ * Retrieves the call details intent provider for an entry in the call log.
+ *
+ * @param id The call ID of the first call in the call group.
+ * @param extraIds The call ID of the other calls grouped together with the call.
+ * @param voicemailUri If call log entry is for a voicemail, the voicemail URI.
+ * @return The call details intent provider.
+ */
public static IntentProvider getCallDetailIntentProvider(
- final Cursor cursor, final int position, final long id, final int groupSize) {
+ final long id, final long[] extraIds, final String voicemailUri) {
return new IntentProvider() {
@Override
public Intent getIntent(Context context) {
- if (cursor.isClosed()) {
- // There are reported instances where the cursor is already closed.
- // b/10937133
- // When causes a crash when it's accessed here.
- Log.e(TAG, "getCallDetailIntentProvider() cursor is already closed.");
- return null;
- }
-
- cursor.moveToPosition(position);
-
Intent intent = new Intent(context, CallDetailActivity.class);
// Check if the first item is a voicemail.
- String voicemailUri = cursor.getString(CallLogQuery.VOICEMAIL_URI);
if (voicemailUri != null) {
intent.putExtra(CallDetailActivity.EXTRA_VOICEMAIL_URI,
Uri.parse(voicemailUri));
}
intent.putExtra(CallDetailActivity.EXTRA_VOICEMAIL_START_PLAYBACK, false);
- if (groupSize > 1) {
- // We want to restore the position in the cursor at the end.
- long[] ids = new long[groupSize];
- // Copy the ids of the rows in the group.
- for (int index = 0; index < groupSize; ++index) {
- ids[index] = cursor.getLong(CallLogQuery.ID);
- cursor.moveToNext();
- }
- intent.putExtra(CallDetailActivity.EXTRA_CALL_LOG_IDS, ids);
+ if (extraIds != null && extraIds.length > 0) {
+ intent.putExtra(CallDetailActivity.EXTRA_CALL_LOG_IDS, extraIds);
} else {
// If there is a single item, use the direct URI for it.
intent.setData(ContentUris.withAppendedId(
diff --git a/src/com/android/dialer/calllog/PhoneNumberUtilsWrapper.java b/src/com/android/dialer/calllog/PhoneNumberUtilsWrapper.java
index 2faab75..00a260a 100644
--- a/src/com/android/dialer/calllog/PhoneNumberUtilsWrapper.java
+++ b/src/com/android/dialer/calllog/PhoneNumberUtilsWrapper.java
@@ -20,6 +20,8 @@
import android.telephony.PhoneNumberUtils;
import android.text.TextUtils;
+import com.android.contacts.common.util.PhoneNumberHelper;
+
import com.google.common.collect.Sets;
import java.util.Set;
@@ -58,7 +60,7 @@
* static method.
*/
public boolean isSipNumber(CharSequence number) {
- return number != null && PhoneNumberUtils.isUriNumber(number.toString());
+ return number != null && PhoneNumberHelper.isUriNumber(number.toString());
}
public static boolean isUnknownNumberThatCanBeLookedUp(CharSequence number, int presentation) {
diff --git a/src/com/android/dialer/database/DialerDatabaseHelper.java b/src/com/android/dialer/database/DialerDatabaseHelper.java
index f6f5f6c..95249a6 100644
--- a/src/com/android/dialer/database/DialerDatabaseHelper.java
+++ b/src/com/android/dialer/database/DialerDatabaseHelper.java
@@ -69,7 +69,7 @@
/**
* SmartDial DB version ranges:
* <pre>
- * 0-98 KeyLimePie
+ * 0-98 KitKat
* </pre>
*/
public static final int DATABASE_VERSION = 4;
@@ -989,7 +989,7 @@
photoId));
counter++;
if (DEBUG) {
- stopWatch.lap("Added one result");
+ stopWatch.lap("Added one result: Name: " + displayName);
}
}
}
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index 83cfbd8..6e91f19 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -21,6 +21,7 @@
import android.app.Dialog;
import android.app.DialogFragment;
import android.app.Fragment;
+import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.DialogInterface;
@@ -35,7 +36,6 @@
import android.os.Bundle;
import android.os.RemoteException;
import android.os.ServiceManager;
-import android.os.SystemProperties;
import android.provider.Contacts.People;
import android.provider.Contacts.Phones;
import android.provider.Contacts.PhonesColumns;
@@ -71,15 +71,20 @@
import com.android.contacts.common.CallUtil;
import com.android.contacts.common.GeoUtil;
+import com.android.contacts.common.SubscriptionManager;
+import com.android.contacts.common.dialog.SelectSubscriptionDialogFragment;
import com.android.contacts.common.util.PhoneNumberFormatter;
import com.android.contacts.common.util.StopWatch;
import com.android.dialer.NeededForReflection;
import com.android.dialer.DialtactsActivity;
import com.android.dialer.R;
import com.android.dialer.SpecialCharSequenceMgr;
-import com.android.internal.telephony.ITelephony;
+import com.android.dialer.util.DialerUtils;
import com.android.phone.common.CallLogAsync;
import com.android.phone.common.HapticFeedback;
+import com.android.phone.common.dialpad.DialpadKeyButton;
+import com.android.phone.common.dialpad.DialpadView;
+
import com.google.common.annotations.VisibleForTesting;
import java.util.HashSet;
@@ -95,6 +100,8 @@
DialpadKeyButton.OnPressedListener {
private static final String TAG = DialpadFragment.class.getSimpleName();
+ private static SubscriptionManager mSubscriptionManager;
+
/**
* This interface allows the DialpadFragment to tell its hosting Activity when and when not
* to display the "dial" button. While this is logically part of the DialpadFragment, the
@@ -106,8 +113,7 @@
* TODO: Refactor the app so this interchange is a bit cleaner.
*/
public interface HostInterface {
- void setDialButtonEnabled(boolean enabled);
- void setDialButtonContainerVisible(boolean visible);
+ void setFloatingActionButtonVisible(boolean visible);
}
/**
@@ -141,30 +147,6 @@
}
}
- /**
- * LinearLayout that always returns true for onHoverEvent callbacks, to fix
- * problems with accessibility due to the dialpad overlaying other fragments.
- */
- public static class HoverIgnoringLinearLayout extends LinearLayout {
-
- public HoverIgnoringLinearLayout(Context context) {
- super(context);
- }
-
- public HoverIgnoringLinearLayout(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public HoverIgnoringLinearLayout(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- }
-
- @Override
- public boolean onHoverEvent(MotionEvent event) {
- return true;
- }
- }
-
public interface OnDialpadQueryChangedListener {
void onDialpadQueryChanged(String query);
}
@@ -190,20 +172,16 @@
private OnDialpadQueryChangedListener mDialpadQueryListener;
- /**
- * View (usually FrameLayout) containing mDigits field. This can be null, in which mDigits
- * isn't enclosed by the container.
- */
- private View mDigitsContainer;
+ private DialpadView mDialpadView;
private EditText mDigits;
/** Remembers if we need to clear digits field when the screen is completely gone. */
private boolean mClearDigitsOnStop;
+ private PopupMenu mOverflowPopupMenu;
private View mDelete;
private ToneGenerator mToneGenerator;
private final Object mToneGeneratorLock = new Object();
- private View mDialpad;
private View mSpacer;
/**
@@ -241,9 +219,9 @@
* press/depress of the "hookswitch" of a landline phone. Aka "empty flash".
*
* TODO: Using an intent extra to tell the phone to send this flash is a
- * temporary measure. To be replaced with an ITelephony call in the future.
+ * temporary measure. To be replaced with an Telephony/TelecommManager call in the future.
* TODO: Keep in sync with the string defined in OutgoingCallBroadcaster.java
- * in Phone app until this is replaced with the ITelephony API.
+ * in Phone app until this is replaced with the Telephony/Telecomm API.
*/
private static final String EXTRA_SEND_EMPTY_FLASH
= "com.android.phone.extra.SEND_EMPTY_FLASH";
@@ -284,7 +262,9 @@
private boolean mStartedFromNewIntent = false;
private boolean mFirstLaunch = false;
- private boolean mAdjustTranslationForAnimation = false;
+ private boolean mAnimate = false;
+
+ private ComponentName mSmsPackageComponentName;
private static final String PREF_DIGITS_FILLED_BY_INTENT = "pref_digits_filled_by_intent";
@@ -292,10 +272,7 @@
* Return an Intent for launching voicemail screen.
*/
private static Intent getVoicemailIntent() {
- final Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED,
- Uri.fromParts("voicemail", "", null));
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- return intent;
+ return CallUtil.getCallIntent(Uri.fromParts("voicemail", "", null));
}
private TelephonyManager getTelephonyManager() {
@@ -339,7 +316,7 @@
if (mDialpadQueryListener != null) {
mDialpadQueryListener.onDialpadQueryChanged(mDigits.getText().toString());
}
- updateDialAndDeleteButtonEnabledState();
+ updateDeleteButtonEnabledState();
}
@Override
@@ -369,47 +346,26 @@
false);
fragmentView.buildLayer();
- final ViewTreeObserver vto = fragmentView.getViewTreeObserver();
- // Adjust the translation of the DialpadFragment in a preDrawListener instead of in
- // DialtactsActivity, because at the point in time when the DialpadFragment is added,
- // its views have not been laid out yet.
- final OnPreDrawListener preDrawListener = new OnPreDrawListener() {
-
- @Override
- public boolean onPreDraw() {
-
- if (isHidden()) return true;
- if (mAdjustTranslationForAnimation && fragmentView.getTranslationY() == 0) {
- ((DialpadSlidingLinearLayout) fragmentView).setYFraction(
- DIALPAD_SLIDE_FRACTION);
- }
- final ViewTreeObserver vto = fragmentView.getViewTreeObserver();
- vto.removeOnPreDrawListener(this);
- return true;
- }
-
- };
-
- vto.addOnPreDrawListener(preDrawListener);
-
- // Load up the resources for the text field.
Resources r = getResources();
- mDigitsContainer = fragmentView.findViewById(R.id.digits_container);
- mDigits = (EditText) fragmentView.findViewById(R.id.digits);
+ mDialpadView = (DialpadView) fragmentView.findViewById(R.id.dialpad_view);
+ mDialpadView.setCanDigitsBeEdited(true);
+ mDigits = mDialpadView.getDigits();
mDigits.setKeyListener(UnicodeDialerKeyListener.INSTANCE);
mDigits.setOnClickListener(this);
mDigits.setOnKeyListener(this);
mDigits.setOnLongClickListener(this);
mDigits.addTextChangedListener(this);
+ mDigits.setElegantTextHeight(false);
PhoneNumberFormatter.setPhoneNumberFormattingTextWatcher(getActivity(), mDigits);
// Check for the presence of the keypad
View oneButton = fragmentView.findViewById(R.id.one);
if (oneButton != null) {
- setupKeypad(fragmentView);
+ configureKeypadListeners(fragmentView);
}
- mDelete = fragmentView.findViewById(R.id.deleteButton);
+ mDelete = mDialpadView.getDeleteButton();
+
if (mDelete != null) {
mDelete.setOnClickListener(this);
mDelete.setOnLongClickListener(this);
@@ -427,14 +383,7 @@
}
});
- mDialpad = fragmentView.findViewById(R.id.dialpad); // This is null in landscape mode.
-
- // In landscape we put the keyboard in phone mode.
- if (null == mDialpad) {
- mDigits.setInputType(android.text.InputType.TYPE_CLASS_PHONE);
- } else {
- mDigits.setCursorVisible(false);
- }
+ mDigits.setCursorVisible(false);
// Set up the "dialpad chooser" UI; see showDialpadChooser().
mDialpadChooser = (ListView) fragmentView.findViewById(R.id.dialpadChooser);
@@ -443,11 +392,6 @@
return fragmentView;
}
- @Override
- public void onStart() {
- super.onStart();
- }
-
private boolean isLayoutReady() {
return mDigits != null;
}
@@ -597,49 +541,24 @@
}
}
- private void setupKeypad(View fragmentView) {
- final int[] buttonIds = new int[] {R.id.zero, R.id.one, R.id.two, R.id.three, R.id.four,
- R.id.five, R.id.six, R.id.seven, R.id.eight, R.id.nine, R.id.star, R.id.pound};
-
- final int[] numberIds = new int[] {R.string.dialpad_0_number, R.string.dialpad_1_number,
- R.string.dialpad_2_number, R.string.dialpad_3_number, R.string.dialpad_4_number,
- R.string.dialpad_5_number, R.string.dialpad_6_number, R.string.dialpad_7_number,
- R.string.dialpad_8_number, R.string.dialpad_9_number, R.string.dialpad_star_number,
- R.string.dialpad_pound_number};
-
- final int[] letterIds = new int[] {R.string.dialpad_0_letters, R.string.dialpad_1_letters,
- R.string.dialpad_2_letters, R.string.dialpad_3_letters, R.string.dialpad_4_letters,
- R.string.dialpad_5_letters, R.string.dialpad_6_letters, R.string.dialpad_7_letters,
- R.string.dialpad_8_letters, R.string.dialpad_9_letters,
- R.string.dialpad_star_letters, R.string.dialpad_pound_letters};
-
- final Resources resources = getResources();
+ private void configureKeypadListeners(View fragmentView) {
+ final int[] buttonIds = new int[] {R.id.one, R.id.two, R.id.three, R.id.four, R.id.five,
+ R.id.six, R.id.seven, R.id.eight, R.id.nine, R.id.star, R.id.zero, R.id.pound};
DialpadKeyButton dialpadKey;
- TextView numberView;
- TextView lettersView;
for (int i = 0; i < buttonIds.length; i++) {
dialpadKey = (DialpadKeyButton) fragmentView.findViewById(buttonIds[i]);
- dialpadKey.setLayoutParams(new TableRow.LayoutParams(
- TableRow.LayoutParams.MATCH_PARENT, TableRow.LayoutParams.MATCH_PARENT));
dialpadKey.setOnPressedListener(this);
- numberView = (TextView) dialpadKey.findViewById(R.id.dialpad_key_number);
- lettersView = (TextView) dialpadKey.findViewById(R.id.dialpad_key_letters);
- final String numberString = resources.getString(numberIds[i]);
- numberView.setText(numberString);
- dialpadKey.setContentDescription(numberString);
- if (lettersView != null) {
- lettersView.setText(resources.getString(letterIds[i]));
- }
}
// Long-pressing one button will initiate Voicemail.
- fragmentView.findViewById(R.id.one).setOnLongClickListener(this);
+ final DialpadKeyButton one = (DialpadKeyButton) fragmentView.findViewById(R.id.one);
+ one.setOnLongClickListener(this);
// Long-pressing zero button will enter '+' instead.
- fragmentView.findViewById(R.id.zero).setOnLongClickListener(this);
-
+ final DialpadKeyButton zero = (DialpadKeyButton) fragmentView.findViewById(R.id.zero);
+ zero.setOnLongClickListener(this);
}
@Override
@@ -724,11 +643,18 @@
stopWatch.lap("hnt");
- updateDialAndDeleteButtonEnabledState();
+ updateDeleteButtonEnabledState();
stopWatch.lap("bes");
stopWatch.stopAndLog(TAG, 50);
+
+ mSmsPackageComponentName = DialerUtils.getSmsComponent(activity);
+
+ View overflowMenuButton = mDialpadView.getOverflowMenuButton();
+ mOverflowPopupMenu = buildOptionsMenu(overflowMenuButton);
+ overflowMenuButton.setOnTouchListener(mOverflowPopupMenu.getDragToOpenListener());
+ overflowMenuButton.setOnClickListener(this);
}
@Override
@@ -771,22 +697,6 @@
outState.putBoolean(PREF_DIGITS_FILLED_BY_INTENT, mDigitsFilledByIntent);
}
- private void setupMenuItems(Menu menu) {
- final MenuItem addToContactMenuItem = menu.findItem(R.id.menu_add_contacts);
-
- // 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);
- } else {
- final CharSequence digits = mDigits.getText();
- // Put the current digits string into an intent
- addToContactMenuItem.setIntent(DialtactsActivity.getAddNumberToContactIntent(digits));
- addToContactMenuItem.setVisible(true);
- }
- }
-
private void keyPressed(int keyCode) {
if (getView().getTranslationY() != 0) {
return;
@@ -936,11 +846,26 @@
*
* @param invoker the View that invoked the options menu, to act as an anchor location.
*/
- public PopupMenu buildOptionsMenu(View invoker) {
- final PopupMenu popupMenu = new PopupMenu(getActivity(), invoker);
+ private PopupMenu buildOptionsMenu(View invoker) {
+ final PopupMenu popupMenu = new PopupMenu(getActivity(), invoker) {
+ @Override
+ public void show() {
+ final Menu menu = getMenu();
+ final MenuItem selectSubscription = menu.findItem(R.id.menu_select_subscription);
+ final MenuItem sendMessage = menu.findItem(R.id.menu_send_message);
+ selectSubscription.setVisible(mSubscriptionManager != null);
+ sendMessage.setVisible(mSmsPackageComponentName != null);
+
+ boolean enable = !isDigitsEmpty();
+ for (int i = 0; i < menu.size(); i++) {
+ menu.getItem(i).setEnabled(enable);
+ }
+
+ super.show();
+ }
+ };
popupMenu.inflate(R.menu.dialpad_options);
popupMenu.setOnMenuItemClickListener(this);
- setupMenuItems(popupMenu.getMenu());
return popupMenu;
}
@@ -966,6 +891,10 @@
}
return;
}
+ case R.id.dialpad_overflow: {
+ mOverflowPopupMenu.show();
+ break;
+ }
default: {
Log.wtf(TAG, "Unexpected onClick() event from: " + view);
return;
@@ -980,10 +909,6 @@
switch (id) {
case R.id.deleteButton: {
digits.clear();
- // TODO: The framework forgets to clear the pressed
- // status of disabled button. Until this is fixed,
- // clear manually the pressed status. b/2133127
- mDelete.setPressed(false);
return true;
}
case R.id.one: {
@@ -1043,7 +968,6 @@
* the previous digit or cancel previously entered character.
*/
private void removePreviousDigitIfPossible() {
- final Editable editable = mDigits.getText();
final int currentPosition = mDigits.getSelectionStart();
if (currentPosition > 0) {
mDigits.setSelection(currentPosition);
@@ -1052,7 +976,7 @@
}
public void callVoicemail() {
- startActivity(getVoicemailIntent());
+ DialerUtils.startActivityWithErrorToast(getActivity(), getVoicemailIntent());
hideAndClearDialpad(false);
}
@@ -1137,8 +1061,7 @@
// TODO: clean it up.
if (number != null
&& !TextUtils.isEmpty(mProhibitedPhoneNumberRegexp)
- && number.matches(mProhibitedPhoneNumberRegexp)
- && (SystemProperties.getInt("persist.radio.otaspdial", 0) != 1)) {
+ && number.matches(mProhibitedPhoneNumberRegexp)) {
Log.i(TAG, "The phone number is prohibited explicitly by a rule.");
if (getActivity() != null) {
DialogFragment dialogFragment = ErrorDialogFragment.newInstance(
@@ -1147,12 +1070,12 @@
}
// Clear the digits just in case.
- mDigits.getText().clear();
+ clearDialpad();
} else {
final Intent intent = CallUtil.getCallIntent(number,
(getActivity() instanceof DialtactsActivity ?
((DialtactsActivity) getActivity()).getCallOrigin() : null));
- startActivity(intent);
+ DialerUtils.startActivityWithErrorToast(getActivity(), intent);
hideAndClearDialpad(false);
}
}
@@ -1162,11 +1085,6 @@
mDigits.getText().clear();
}
- private String getCallOrigin() {
- return (getActivity() instanceof DialtactsActivity) ?
- ((DialtactsActivity) getActivity()).getCallOrigin() : null;
- }
-
private void handleDialButtonClickWithEmptyDigits() {
if (phoneIsCdma() && phoneIsOffhook()) {
// This is really CDMA specific. On GSM is it possible
@@ -1290,14 +1208,10 @@
if (enabled) {
// Log.i(TAG, "Showing dialpad chooser!");
- if (mDigitsContainer != null) {
- mDigitsContainer.setVisibility(View.GONE);
- } else {
- // mDigits is not enclosed by the container. Make the digits field itself gone.
- mDigits.setVisibility(View.GONE);
+ if (mDialpadView != null) {
+ mDialpadView.setVisibility(View.GONE);
}
- if (mDialpad != null) mDialpad.setVisibility(View.GONE);
- ((HostInterface) getActivity()).setDialButtonContainerVisible(false);
+ ((HostInterface) getActivity()).setFloatingActionButtonVisible(false);
mDialpadChooser.setVisibility(View.VISIBLE);
@@ -1309,13 +1223,12 @@
mDialpadChooser.setAdapter(mDialpadChooserAdapter);
} else {
// Log.i(TAG, "Displaying normal Dialer UI.");
- if (mDigitsContainer != null) {
- mDigitsContainer.setVisibility(View.VISIBLE);
+ if (mDialpadView != null) {
+ mDialpadView.setVisibility(View.VISIBLE);
} else {
mDigits.setVisibility(View.VISIBLE);
}
- if (mDialpad != null) mDialpad.setVisibility(View.VISIBLE);
- ((HostInterface) getActivity()).setDialButtonContainerVisible(true);
+ ((HostInterface) getActivity()).setFloatingActionButtonVisible(true);
mDialpadChooser.setVisibility(View.GONE);
}
}
@@ -1468,12 +1381,7 @@
* or "return to call" from the dialpad chooser.
*/
private void returnToInCallScreen(boolean showDialpad) {
- try {
- ITelephony phone = ITelephony.Stub.asInterface(ServiceManager.checkService("phone"));
- if (phone != null) phone.showCallScreenWithDialpad(showDialpad);
- } catch (RemoteException e) {
- Log.w(TAG, "phone.showCallScreenWithDialpad() failed", e);
- }
+ getTelephonyManager().showCallScreenWithDialpad(showDialpad);
// Finally, finish() ourselves so that we don't stay on the
// activity stack.
@@ -1510,14 +1418,31 @@
@Override
public boolean onMenuItemClick(MenuItem item) {
- // R.id.menu_add_contacts already has an add to contact intent populated by setupMenuItems
switch (item.getItemId()) {
+ case R.id.menu_add_contact: {
+ final CharSequence digits = mDigits.getText();
+ DialerUtils.startActivityWithErrorToast(getActivity(),
+ DialtactsActivity.getAddNumberToContactIntent(digits));
+ return true;
+ }
case R.id.menu_2s_pause:
updateDialString(PAUSE);
return true;
case R.id.menu_add_wait:
updateDialString(WAIT);
return true;
+ case R.id.menu_send_message: {
+ final CharSequence digits = mDigits.getText();
+ final Intent smsIntent = new Intent(Intent.ACTION_SENDTO,
+ Uri.fromParts(CallUtil.SCHEME_SMSTO, digits.toString(), null));
+ smsIntent.setComponent(mSmsPackageComponentName);
+ DialerUtils.startActivityWithErrorToast(getActivity(), smsIntent);
+ return true;
+ }
+ case R.id.menu_select_subscription:
+ SelectSubscriptionDialogFragment.show(getFragmentManager(), mSubscriptionManager);
+ return true;
+
default:
return false;
}
@@ -1562,23 +1487,12 @@
/**
* Update the enabledness of the "Dial" and "Backspace" buttons if applicable.
*/
- private void updateDialAndDeleteButtonEnabledState() {
+ private void updateDeleteButtonEnabledState() {
if (getActivity() == null) {
return;
}
final boolean digitsNotEmpty = !isDigitsEmpty();
mDelete.setEnabled(digitsNotEmpty);
- // On CDMA phones, if we're already on a call, we *always* enable the Dial button (since
- // you can press it without entering any digits to send an empty flash.)
- if (phoneIsCdma() && phoneIsOffhook()) {
- ((HostInterface) getActivity()).setDialButtonEnabled(true);
- } else {
- // Common case: GSM, or CDMA but not on a call. Enable the Dial button if something
- // has been entered into the digits field, or if there is a last dialed number that
- // could be redialed.
- ((HostInterface) getActivity()).setDialButtonEnabled(
- digitsNotEmpty || !TextUtils.isEmpty(mLastNumberDialed));
- }
}
/**
@@ -1663,7 +1577,7 @@
// doing anything here.
if (getActivity() == null) return;
mLastNumberDialed = number;
- updateDialAndDeleteButtonEnabledState();
+ updateDeleteButtonEnabledState();
}
});
mCallLog.getLastOutgoingCall(lastCallArgs);
@@ -1679,17 +1593,27 @@
public void onHiddenChanged(boolean hidden) {
super.onHiddenChanged(hidden);
final DialtactsActivity activity = (DialtactsActivity) getActivity();
+ final DialpadView dialpadView = (DialpadView) getView().findViewById(R.id.dialpad_view);
if (activity == null) return;
- if (hidden) {
- activity.showSearchBar();
- } else {
- activity.hideSearchBar();
+ if (!hidden) {
+ if (mAnimate) {
+ dialpadView.animateShow();
+ }
+ activity.onDialpadShown();
mDigits.requestFocus();
}
}
- public void setAdjustTranslationForAnimation(boolean value) {
- mAdjustTranslationForAnimation = value;
+ public void setAnimate(boolean value) {
+ mAnimate = value;
+ }
+
+ public boolean getAnimate() {
+ return mAnimate;
+ }
+
+ public void setSubscriptionManager(SubscriptionManager subscriptionManager) {
+ mSubscriptionManager = subscriptionManager;
}
public void setYFraction(float yFraction) {
diff --git a/src/com/android/dialer/dialpad/DialpadKeyButton.java b/src/com/android/dialer/dialpad/DialpadKeyButton.java
deleted file mode 100644
index 9a20993..0000000
--- a/src/com/android/dialer/dialpad/DialpadKeyButton.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * 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.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.FrameLayout;
-
-/**
- * Custom class for dialpad buttons.
- * <p>
- * This class implements lift-to-type interaction when touch exploration is
- * enabled.
- */
-public class DialpadKeyButton extends FrameLayout {
- /** Accessibility manager instance used to check touch exploration state. */
- private AccessibilityManager mAccessibilityManager;
-
- /** Bounds used to filter HOVER_EXIT events. */
- private Rect mHoverBounds = new Rect();
-
- public interface OnPressedListener {
- public void onPressed(View view, boolean pressed);
- }
-
- private OnPressedListener mOnPressedListener;
-
- public void setOnPressedListener(OnPressedListener onPressedListener) {
- mOnPressedListener = onPressedListener;
- }
-
- public DialpadKeyButton(Context context, AttributeSet attrs) {
- super(context, attrs);
- initForAccessibility(context);
- }
-
- public DialpadKeyButton(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- initForAccessibility(context);
- }
-
- private void initForAccessibility(Context context) {
- mAccessibilityManager = (AccessibilityManager) context.getSystemService(
- Context.ACCESSIBILITY_SERVICE);
- }
-
- @Override
- public void setPressed(boolean pressed) {
- super.setPressed(pressed);
- if (mOnPressedListener != null) {
- mOnPressedListener.onPressed(this, pressed);
- }
- }
-
- @Override
- public void onSizeChanged(int w, int h, int oldw, int oldh) {
- super.onSizeChanged(w, h, oldw, oldh);
-
- mHoverBounds.left = getPaddingLeft();
- mHoverBounds.right = w - getPaddingRight();
- mHoverBounds.top = getPaddingTop();
- mHoverBounds.bottom = h - getPaddingBottom();
- }
-
- @Override
- public boolean performAccessibilityAction(int action, Bundle arguments) {
- if (action == AccessibilityNodeInfo.ACTION_CLICK) {
- simulateClickForAccessibility();
- return true;
- }
-
- return super.performAccessibilityAction(action, arguments);
- }
-
- @Override
- public boolean onHoverEvent(MotionEvent event) {
- // When touch exploration is turned on, lifting a finger while inside
- // the button's hover target bounds should perform a click action.
- if (mAccessibilityManager.isEnabled()
- && mAccessibilityManager.isTouchExplorationEnabled()) {
- switch (event.getActionMasked()) {
- case MotionEvent.ACTION_HOVER_ENTER:
- // Lift-to-type temporarily disables double-tap activation.
- setClickable(false);
- break;
- case MotionEvent.ACTION_HOVER_EXIT:
- if (mHoverBounds.contains((int) event.getX(), (int) event.getY())) {
- simulateClickForAccessibility();
- }
- setClickable(true);
- break;
- }
- }
-
- 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
deleted file mode 100644
index 1a092be..0000000
--- a/src/com/android/dialer/dialpad/DigitsEditText.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.dialer.dialpad;
-
-import android.content.Context;
-import android.graphics.Rect;
-import android.text.InputType;
-import android.util.AttributeSet;
-import android.view.MotionEvent;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.EditText;
-
-/**
- * EditText which suppresses IME show up.
- */
-public class DigitsEditText extends EditText {
- public DigitsEditText(Context context, AttributeSet attrs) {
- super(context, attrs);
- setInputType(getInputType() | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
- setShowSoftInputOnFocus(false);
- }
-
- @Override
- protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) {
- super.onFocusChanged(focused, direction, previouslyFocusedRect);
- final InputMethodManager imm = ((InputMethodManager) getContext()
- .getSystemService(Context.INPUT_METHOD_SERVICE));
- if (imm != null && imm.isActive(this)) {
- imm.hideSoftInputFromWindow(getApplicationWindowToken(), 0);
- }
- }
-
- @Override
- public boolean onTouchEvent(MotionEvent event) {
- final boolean ret = super.onTouchEvent(event);
- // Must be done after super.onTouchEvent()
- final InputMethodManager imm = ((InputMethodManager) getContext()
- .getSystemService(Context.INPUT_METHOD_SERVICE));
- if (imm != null && imm.isActive(this)) {
- imm.hideSoftInputFromWindow(getApplicationWindowToken(), 0);
- }
- return ret;
- }
-}
diff --git a/src/com/android/dialer/dialpad/SmartDialNameMatcher.java b/src/com/android/dialer/dialpad/SmartDialNameMatcher.java
index c160bd2..0126864 100644
--- a/src/com/android/dialer/dialpad/SmartDialNameMatcher.java
+++ b/src/com/android/dialer/dialpad/SmartDialNameMatcher.java
@@ -34,7 +34,7 @@
*/
public class SmartDialNameMatcher {
- private final String mQuery;
+ private String mQuery;
// Whether or not we allow matches like 57 - (J)ohn (S)mith
private static final boolean ALLOW_INITIAL_MATCH = true;
@@ -135,10 +135,6 @@
SmartDialPrefix.parsePhoneNumber(phoneNumber);
if (phoneNumberTokens == null) {
- if (matchPos != null) {
- replaceBitInMask(builder, matchPos);
- mPhoneNumberMatchMask = builder.toString();
- }
return matchPos;
}
if (phoneNumberTokens.countryCodeOffset != 0) {
@@ -420,6 +416,10 @@
return new ArrayList<SmartDialMatchPosition>(mMatchPositions);
}
+ public void setQuery(String query) {
+ mQuery = query;
+ }
+
public String getNameMatchPositionsInString() {
return mNameMatchMask;
}
diff --git a/src/com/android/dialer/interactions/PhoneNumberInteraction.java b/src/com/android/dialer/interactions/PhoneNumberInteraction.java
index 722b9b3..b494fff 100644
--- a/src/com/android/dialer/interactions/PhoneNumberInteraction.java
+++ b/src/com/android/dialer/interactions/PhoneNumberInteraction.java
@@ -20,7 +20,6 @@
import android.app.Dialog;
import android.app.DialogFragment;
import android.app.FragmentManager;
-import android.content.ContentValues;
import android.content.Context;
import android.content.CursorLoader;
import android.content.DialogInterface;
@@ -37,7 +36,6 @@
import android.provider.ContactsContract.CommonDataKinds.SipAddress;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.PinnedPositions;
import android.provider.ContactsContract.RawContacts;
import android.view.LayoutInflater;
import android.view.View;
@@ -55,6 +53,8 @@
import com.android.contacts.common.util.ContactDisplayUtils;
import com.android.dialer.R;
import com.android.dialer.contact.ContactUpdateService;
+import com.android.dialer.util.DialerUtils;
+
import com.google.common.annotations.VisibleForTesting;
import java.util.ArrayList;
@@ -325,7 +325,7 @@
intent = CallUtil.getCallIntent(phoneNumber, callOrigin);
break;
}
- context.startActivity(intent);
+ DialerUtils.startActivityWithErrorToast(context, intent);
}
/**
diff --git a/src/com/android/dialer/interactions/UndemoteOutgoingCallReceiver.java b/src/com/android/dialer/interactions/UndemoteOutgoingCallReceiver.java
index c7e4c5f..2a686c7 100644
--- a/src/com/android/dialer/interactions/UndemoteOutgoingCallReceiver.java
+++ b/src/com/android/dialer/interactions/UndemoteOutgoingCallReceiver.java
@@ -22,6 +22,7 @@
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
+import android.provider.ContactsContract;
import android.provider.ContactsContract.PhoneLookup;
import android.provider.ContactsContract.PinnedPositions;
import android.text.TextUtils;
@@ -55,12 +56,11 @@
}
private void undemoteContactWithId(Context context, long id) {
- final ContentValues cv = new ContentValues(1);
- cv.put(String.valueOf(id), PinnedPositions.UNDEMOTE);
// If the contact is not demoted, this will not do anything. Otherwise, it will
// restore it to an unpinned position. If it was a frequently called contact, it will
// show up once again show up on the favorites screen.
- context.getContentResolver().update(PinnedPositions.UPDATE_URI, cv, null, null);
+ context.getContentResolver().call(ContactsContract.AUTHORITY_URI,
+ PinnedPositions.UNDEMOTE_METHOD, String.valueOf(id), null);
}
private long getContactIdFromPhoneNumber(Context context, String number) {
diff --git a/src/com/android/dialer/list/AllContactsActivity.java b/src/com/android/dialer/list/AllContactsActivity.java
deleted file mode 100644
index f5d739d..0000000
--- a/src/com/android/dialer/list/AllContactsActivity.java
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2013 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.list;
-
-import android.app.ActionBar;
-import android.app.Fragment;
-import android.content.Intent;
-import android.net.Uri;
-import android.os.Bundle;
-import android.text.Spannable;
-import android.text.SpannableString;
-import android.text.style.TypefaceSpan;
-import android.util.Log;
-
-import com.android.contacts.common.CallUtil;
-import com.android.contacts.common.activity.TransactionSafeActivity;
-import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
-import com.android.dialer.DialtactsActivity;
-import com.android.dialer.R;
-import com.android.dialer.interactions.PhoneNumberInteraction;
-
-public class AllContactsActivity extends TransactionSafeActivity {
- private static final String TAG = AllContactsActivity.class.getSimpleName();
-
- private AllContactsFragment mAllContactsFragment;
-
- // Same behavior as {@link DialtactsActivity}
- private final OnPhoneNumberPickerActionListener mPhoneNumberPickerActionListener =
- new OnPhoneNumberPickerActionListener() {
- @Override
- public void onPickPhoneNumberAction(Uri dataUri) {
- // Specify call-origin so that users will see the previous tab instead of
- // CallLog screen (search UI will be automatically exited).
- PhoneNumberInteraction.startInteractionForPhoneCall(
- AllContactsActivity.this, dataUri, null);
- }
-
- @Override
- public void onCallNumberDirectly(String phoneNumber) {
- final Intent intent = CallUtil.getCallIntent(phoneNumber, null);
- startActivity(intent);
- }
-
- @Override
- public void onShortcutIntentCreated(Intent intent) {
- Log.w(TAG, "Unsupported intent has come (" + intent + "). Ignoring.");
- }
-
- @Override
- public void onHomeInActionBarSelected() {
- // {@link PhoneNumberPickerFragment handles onClick on the home button
- // and performs the callback here. This means we don't have to handle it
- // ourself in the activity.
- final Intent intent = new Intent(AllContactsActivity.this,
- DialtactsActivity.class);
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
- startActivity(intent);
- }
- };
-
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
-
- final ActionBar actionBar = getActionBar();
- actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
- actionBar.setDisplayShowHomeEnabled(true);
- actionBar.setDisplayHomeAsUpEnabled(true);
- actionBar.setDisplayShowTitleEnabled(true);
-
- setContentView(R.layout.all_contacts_activity);
- }
-
- @Override
- public void onAttachFragment(Fragment fragment) {
- if (fragment instanceof AllContactsFragment) {
- mAllContactsFragment = (AllContactsFragment) fragment;
- mAllContactsFragment.setOnPhoneNumberPickerActionListener(
- mPhoneNumberPickerActionListener);
- }
- }
-}
diff --git a/src/com/android/dialer/list/AllContactsFragment.java b/src/com/android/dialer/list/AllContactsFragment.java
index 40d5c14..e4314db 100644
--- a/src/com/android/dialer/list/AllContactsFragment.java
+++ b/src/com/android/dialer/list/AllContactsFragment.java
@@ -1,5 +1,4 @@
/*
-
* Copyright (C) 2013 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -17,39 +16,79 @@
package com.android.dialer.list;
-import android.app.Activity;
-import android.os.Bundle;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.ContactsContract.QuickContact;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.AdapterView;
-import com.android.contacts.common.list.ContactListItemView;
-import com.android.contacts.common.list.PhoneNumberPickerFragment;
+import com.android.contacts.common.list.ContactEntryListAdapter;
+import com.android.contacts.common.list.ContactEntryListFragment;
+import com.android.contacts.common.list.ContactListFilter;
+import com.android.contacts.common.list.DefaultContactListAdapter;
+import com.android.contacts.common.util.ViewUtil;
import com.android.dialer.R;
+import com.android.dialer.util.DialerUtils;
/**
* Fragments to show all contacts with phone numbers.
*/
-public class AllContactsFragment extends PhoneNumberPickerFragment{
+public class AllContactsFragment extends ContactEntryListFragment<ContactEntryListAdapter> {
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
+ public AllContactsFragment() {
+ setQuickContactEnabled(false);
+ setAdjustSelectionBoundsEnabled(true);
+ setPhotoLoaderEnabled(true);
+ setSectionHeaderDisplayEnabled(true);
+ setDarkTheme(false);
+ setVisibleScrollbarEnabled(true);
}
@Override
- public void onAttach(Activity activity) {
- super.onAttach(activity);
+ public void onViewCreated(View view, android.os.Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
- // Customizes the listview according to the dialer specifics.
- setQuickContactEnabled(true);
- setDarkTheme(false);
- setPhotoPosition(ContactListItemView.getDefaultPhotoPosition(true /* opposite */));
- setUseCallableUri(true);
+ View emptyListView = view.findViewById(R.id.empty_list_view);
+ DialerUtils.configureEmptyListView(emptyListView, R.drawable.empty_contacts,
+ R.string.all_contacts_empty, getResources());
+ getListView().setEmptyView(emptyListView);
+
+ ViewUtil.addBottomPaddingToListViewForFab(getListView(), getResources());
+ }
+
+ @Override
+ protected ContactEntryListAdapter createListAdapter() {
+ final DefaultContactListAdapter adapter = new DefaultContactListAdapter(getActivity()) {
+ @Override
+ protected void bindView(View itemView, int partition, Cursor cursor, int position) {
+ super.bindView(itemView, partition, cursor, position);
+ itemView.setTag(this.getContactUri(partition, cursor));
+ }
+ };
+ adapter.setDisplayPhotos(true);
+ adapter.setFilter(ContactListFilter.createFilterWithType(
+ ContactListFilter.FILTER_TYPE_WITH_PHONE_NUMBERS_ONLY));
+ adapter.setSectionHeaderDisplayEnabled(isSectionHeaderDisplayEnabled());
+ return adapter;
}
@Override
protected View inflateView(LayoutInflater inflater, ViewGroup container) {
return inflater.inflate(R.layout.show_all_contacts_fragment, null);
}
+
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ final Uri uri = (Uri) view.getTag();
+ if (uri != null) {
+ QuickContact.showQuickContact(getActivity(), view, uri, QuickContact.MODE_LARGE, null);
+ }
+ }
+
+ @Override
+ protected void onItemClick(int position, long id) {
+ // Do nothing. Implemented to satisfy ContactEntryListFragment.
+ }
}
diff --git a/src/com/android/dialer/list/DialerPhoneNumberListAdapter.java b/src/com/android/dialer/list/DialerPhoneNumberListAdapter.java
index 4f3a4da..abceda4 100644
--- a/src/com/android/dialer/list/DialerPhoneNumberListAdapter.java
+++ b/src/com/android/dialer/list/DialerPhoneNumberListAdapter.java
@@ -139,16 +139,16 @@
switch (shortcutType) {
case SHORTCUT_DIRECT_CALL:
text = resources.getString(R.string.search_shortcut_call_number, number);
- drawableId = R.drawable.ic_phone_dk;
+ drawableId = R.drawable.ic_search_phone;
break;
case SHORTCUT_ADD_NUMBER_TO_CONTACTS:
text = resources.getString(R.string.search_shortcut_add_to_contacts);
- drawableId = R.drawable.ic_add_person_dk;
+ drawableId = R.drawable.ic_search_add_contact;
break;
default:
throw new IllegalArgumentException("Invalid shortcut type");
}
- v.setDrawableResource(R.drawable.list_item_avatar_bg, drawableId);
+ v.setDrawableResource(R.drawable.search_shortcut_background, drawableId);
v.setDisplayName(text);
v.setPhotoPosition(super.getPhotoPosition());
}
@@ -164,7 +164,7 @@
@Override
public void setQueryString(String queryString) {
mFormattedQueryString = PhoneNumberUtils.formatNumber(
- PhoneNumberUtils.convertAndStrip(queryString), mCountryIso);
+ PhoneNumberUtils.normalizeNumber(queryString), mCountryIso);
super.setQueryString(queryString);
}
}
diff --git a/src/com/android/dialer/list/DragDropController.java b/src/com/android/dialer/list/DragDropController.java
index 399cd09..8cd1046 100644
--- a/src/com/android/dialer/list/DragDropController.java
+++ b/src/com/android/dialer/list/DragDropController.java
@@ -1,9 +1,8 @@
package com.android.dialer.list;
+import android.util.Log;
import android.view.View;
-import com.android.dialer.list.PhoneFavoritesTileAdapter.ContactTileRow;
-
import java.util.ArrayList;
import java.util.List;
@@ -12,35 +11,48 @@
* off events to any OnDragDropListeners that have registered for callbacks.
*/
public class DragDropController {
- private List<OnDragDropListener> mOnDragDropListeners = new ArrayList<OnDragDropListener>();
+
+ private final List<OnDragDropListener> mOnDragDropListeners =
+ new ArrayList<OnDragDropListener>();
+ private final DragItemContainer mDragItemContainer;
+ private final int[] mLocationOnScreen = new int[2];
+
+ /**
+ * Callback interface used to retrieve views based on the current touch coordinates of the
+ * drag event. The {@link DragItemContainer} houses the draggable views that this
+ * {@link DragDropController} controls.
+ */
+ public interface DragItemContainer {
+ public PhoneFavoriteSquareTileView getViewForLocation(int x, int y);
+ }
+
+ public DragDropController(DragItemContainer dragItemContainer) {
+ mDragItemContainer = dragItemContainer;
+ }
/**
* @return True if the drag is started, false if the drag is cancelled for some reason.
*/
- boolean handleDragStarted(int x, int y, ContactTileRow tileRow) {
- final PhoneFavoriteTileView tileView =
- (PhoneFavoriteTileView) tileRow.getViewAtPosition(x, y);
-
- final int itemIndex = tileRow.getItemIndex(x, y);
- if (itemIndex != -1 && !mOnDragDropListeners.isEmpty()) {
- for (int i = 0; i < mOnDragDropListeners.size(); i++) {
- mOnDragDropListeners.get(i).onDragStarted(itemIndex, x, y, tileView);
- }
+ boolean handleDragStarted(int x, int y) {
+ final PhoneFavoriteSquareTileView tileView = mDragItemContainer.getViewForLocation(x, y);
+ if (tileView == null) {
+ return false;
+ }
+ for (int i = 0; i < mOnDragDropListeners.size(); i++) {
+ mOnDragDropListeners.get(i).onDragStarted(x, y, tileView);
}
return true;
}
- public void handleDragHovered(int x, int y, View view) {
- int itemIndex;
- if (!(view instanceof ContactTileRow)) {
- itemIndex = -1;
- } else {
- final ContactTileRow tile = (ContactTileRow) view;
- itemIndex = tile.getItemIndex(x, y);
- }
+ public void handleDragHovered(View v, int x, int y) {
+ v.getLocationOnScreen(mLocationOnScreen);
+ final int screenX = x + mLocationOnScreen[0];
+ final int screenY = y + mLocationOnScreen[1];
+ final PhoneFavoriteSquareTileView view = mDragItemContainer.getViewForLocation(
+ screenX, screenY);
for (int i = 0; i < mOnDragDropListeners.size(); i++) {
- mOnDragDropListeners.get(i).onDragHovered(itemIndex, x, y);
+ mOnDragDropListeners.get(i).onDragHovered(screenX, screenY, view);
}
}
diff --git a/src/com/android/dialer/list/ListsFragment.java b/src/com/android/dialer/list/ListsFragment.java
new file mode 100644
index 0000000..b50f94e
--- /dev/null
+++ b/src/com/android/dialer/list/ListsFragment.java
@@ -0,0 +1,389 @@
+package com.android.dialer.list;
+
+import android.animation.LayoutTransition;
+import android.app.ActionBar;
+import android.app.Fragment;
+import android.app.FragmentManager;
+import android.app.LoaderManager;
+import android.content.Context;
+import android.content.CursorLoader;
+import android.content.Loader;
+import android.content.SharedPreferences;
+import android.database.Cursor;
+import android.graphics.Rect;
+import android.net.Uri;
+import android.os.Bundle;
+import android.provider.CallLog;
+import android.support.v13.app.FragmentPagerAdapter;
+import android.support.v4.view.ViewPager;
+import android.support.v4.view.ViewPager.OnPageChangeListener;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ListView;
+
+import com.android.contacts.common.GeoUtil;
+import com.android.dialer.DialtactsActivity;
+
+import android.view.View.OnClickListener;
+
+import com.android.dialer.R;
+import com.android.dialer.calllog.CallLogAdapter;
+import com.android.dialer.calllog.CallLogFragment;
+import com.android.dialer.calllog.CallLogQuery;
+import com.android.dialer.calllog.CallLogQueryHandler;
+import com.android.dialer.calllog.ContactInfoHelper;
+import com.android.dialer.list.ShortcutCardsAdapter.SwipeableShortcutCard;
+import com.android.dialer.widget.OverlappingPaneLayout;
+import com.android.dialer.widget.OverlappingPaneLayout.PanelSlideListener;
+import com.android.dialerbind.ObjectFactory;
+
+import java.util.ArrayList;
+
+/**
+ * Fragment that is used as the main screen of the Dialer.
+ *
+ * Contains a ViewPager that contains various contact lists like the Speed Dial list and the
+ * All Contacts list. This will also eventually contain the logic that allows sliding the
+ * ViewPager containing the lists up above the shortcut cards and pin it against the top of the
+ * screen.
+ */
+public class ListsFragment extends Fragment implements CallLogQueryHandler.Listener,
+ CallLogAdapter.CallFetcher, ViewPager.OnPageChangeListener {
+
+ private static final boolean DEBUG = DialtactsActivity.DEBUG;
+ private static final String TAG = "ListsFragment";
+
+ public static final int TAB_INDEX_SPEED_DIAL = 0;
+ public static final int TAB_INDEX_RECENTS = 1;
+ public static final int TAB_INDEX_ALL_CONTACTS = 2;
+
+ private static final int TAB_INDEX_COUNT = 3;
+
+ private static final int MAX_RECENTS_ENTRIES = 20;
+ // Oldest recents entry to display is 2 weeks old.
+ private static final long OLDEST_RECENTS_DATE = 1000L * 60 * 60 * 24 * 14;
+
+ private static final String KEY_LAST_DISMISSED_CALL_SHORTCUT_DATE =
+ "key_last_dismissed_call_shortcut_date";
+
+ public static final float REMOVE_VIEW_SHOWN_ALPHA = 0.5f;
+ public static final float REMOVE_VIEW_HIDDEN_ALPHA = 1;
+
+ // Used with LoaderManager
+ private static int MISSED_CALL_LOADER = 1;
+
+ public interface HostInterface {
+ public void showCallHistory();
+ public int getActionBarHeight();
+ }
+
+ private ActionBar mActionBar;
+ private ViewPager mViewPager;
+ private ViewPagerTabs mViewPagerTabs;
+ private ViewPagerAdapter mViewPagerAdapter;
+ private ListView mShortcutCardsListView;
+ private RemoveView mRemoveView;
+ private View mRemoveViewContent;
+ private SpeedDialFragment mSpeedDialFragment;
+ private CallLogFragment mRecentsFragment;
+ private AllContactsFragment mAllContactsFragment;
+ private ArrayList<OnPageChangeListener> mOnPageChangeListeners =
+ new ArrayList<OnPageChangeListener>();
+
+ private String[] mTabTitles;
+
+ private ShortcutCardsAdapter mMergedAdapter;
+ private CallLogAdapter mCallLogAdapter;
+ private CallLogQueryHandler mCallLogQueryHandler;
+
+ private boolean mIsPanelOpen = true;
+
+ /**
+ * Call shortcuts older than this date (persisted in shared preferences) will not show up in
+ * at the top of the screen
+ */
+ private long mLastCallShortcutDate = 0;
+
+ /**
+ * The date of the current call shortcut that is showing on screen.
+ */
+ private long mCurrentCallShortcutDate = 0;
+
+ private class MissedCallLogLoaderListener implements LoaderManager.LoaderCallbacks<Cursor> {
+
+ @Override
+ public Loader<Cursor> onCreateLoader(int id, Bundle args) {
+ final Uri uri = CallLog.Calls.CONTENT_URI;
+ final String[] projection = new String[] {CallLog.Calls.TYPE};
+ final String selection = CallLog.Calls.TYPE + " = " + CallLog.Calls.MISSED_TYPE +
+ " AND " + CallLog.Calls.IS_READ + " = 0";
+ return new CursorLoader(getActivity(), uri, projection, selection, null, null);
+ }
+
+ @Override
+ public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor data) {
+ mCallLogAdapter.setMissedCalls(data);
+ }
+
+ @Override
+ public void onLoaderReset(Loader<Cursor> cursorLoader) {
+ }
+ }
+
+ private PanelSlideListener mPanelSlideListener = new PanelSlideListener() {
+ @Override
+ public void onPanelSlide(View panel, float slideOffset) {
+ // For every 1 percent that the panel is slid upwards, clip 1.5 percent from each edge
+ // of the shortcut card, to achieve the animated effect of the shortcut card
+ // rapidly shrinking and disappearing from view when the panel is slid upwards.
+ // slideOffset is 1 when the shortcut card is fully exposed, and 0 when completely
+ // hidden.
+ float ratioCardHidden = (1 - slideOffset) * 1.5f;
+ if (mShortcutCardsListView.getCount() > 0) {
+ SwipeableShortcutCard v =
+ (SwipeableShortcutCard) mShortcutCardsListView.getChildAt(0);
+ v.clipCard(ratioCardHidden);
+ }
+
+ if (mActionBar != null) {
+ // Amount of available space that is not being hidden by the bottom pane
+ final int topPaneHeight = (int) (slideOffset * mShortcutCardsListView.getHeight());
+
+ final int availableActionBarHeight =
+ Math.min(mActionBar.getHeight(), topPaneHeight);
+ mActionBar.setHideOffset(mActionBar.getHeight() - availableActionBarHeight);
+
+ if (!mActionBar.isShowing()) {
+ mActionBar.show();
+ }
+ }
+ }
+
+ @Override
+ public void onPanelOpened(View panel) {
+ if (DEBUG) {
+ Log.d(TAG, "onPanelOpened");
+ }
+ mIsPanelOpen = true;
+ }
+
+ @Override
+ public void onPanelClosed(View panel) {
+ if (DEBUG) {
+ Log.d(TAG, "onPanelClosed");
+ }
+ mIsPanelOpen = false;
+ }
+ };
+
+ public class ViewPagerAdapter extends FragmentPagerAdapter {
+ public ViewPagerAdapter(FragmentManager fm) {
+ super(fm);
+ }
+
+ @Override
+ public Fragment getItem(int position) {
+ switch (position) {
+ case TAB_INDEX_SPEED_DIAL:
+ mSpeedDialFragment = new SpeedDialFragment();
+ return mSpeedDialFragment;
+ case TAB_INDEX_RECENTS:
+ mRecentsFragment = new CallLogFragment(CallLogQueryHandler.CALL_TYPE_ALL,
+ MAX_RECENTS_ENTRIES, System.currentTimeMillis() - OLDEST_RECENTS_DATE);
+ mRecentsFragment.setHasFooterView(true);
+ return mRecentsFragment;
+ case TAB_INDEX_ALL_CONTACTS:
+ mAllContactsFragment = new AllContactsFragment();
+ return mAllContactsFragment;
+ }
+ throw new IllegalStateException("No fragment at position " + position);
+ }
+
+ @Override
+ public int getCount() {
+ return TAB_INDEX_COUNT;
+ }
+
+ @Override
+ public CharSequence getPageTitle(int position) {
+ return mTabTitles[position];
+ }
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ mCallLogQueryHandler = new CallLogQueryHandler(getActivity().getContentResolver(),
+ this, 1);
+ final String currentCountryIso = GeoUtil.getCurrentCountryIso(getActivity());
+ mCallLogAdapter = ObjectFactory.newCallLogAdapter(getActivity(), this,
+ new ContactInfoHelper(getActivity(), currentCountryIso), null, false);
+
+ mMergedAdapter = new ShortcutCardsAdapter(getActivity(), this, mCallLogAdapter);
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ getLoaderManager().initLoader(MISSED_CALL_LOADER, null, new MissedCallLogLoaderListener());
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ final SharedPreferences prefs = getActivity().getSharedPreferences(
+ DialtactsActivity.SHARED_PREFS_NAME, Context.MODE_PRIVATE);
+ mLastCallShortcutDate = prefs.getLong(KEY_LAST_DISMISSED_CALL_SHORTCUT_DATE, 0);
+ mActionBar = getActivity().getActionBar();
+ fetchCalls();
+ mCallLogAdapter.setLoading(true);
+ }
+
+ @Override
+ public void onPause() {
+ // Wipe the cache to refresh the call shortcut item. This is not that expensive because
+ // it only contains one item.
+ mCallLogAdapter.invalidateCache();
+ super.onPause();
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ final View parentView = inflater.inflate(R.layout.lists_fragment, container, false);
+ mViewPager = (ViewPager) parentView.findViewById(R.id.lists_pager);
+ mViewPagerAdapter = new ViewPagerAdapter(getChildFragmentManager());
+ mViewPager.setAdapter(mViewPagerAdapter);
+ mViewPager.setOffscreenPageLimit(2);
+ mViewPager.setOnPageChangeListener(this);
+
+ mTabTitles = new String[TAB_INDEX_COUNT];
+ mTabTitles[TAB_INDEX_SPEED_DIAL] = getResources().getString(R.string.tab_speed_dial);
+ mTabTitles[TAB_INDEX_RECENTS] = getResources().getString(R.string.tab_recents);
+ mTabTitles[TAB_INDEX_ALL_CONTACTS] = getResources().getString(R.string.tab_all_contacts);
+
+ mViewPagerTabs = (ViewPagerTabs) parentView.findViewById(R.id.lists_pager_header);
+ mViewPagerTabs.setViewPager(mViewPager);
+ addOnPageChangeListener(mViewPagerTabs);
+
+ mShortcutCardsListView = (ListView) parentView.findViewById(R.id.shortcut_card_list);
+ mShortcutCardsListView.setAdapter(mMergedAdapter);
+
+ mRemoveView = (RemoveView) parentView.findViewById(R.id.remove_view);
+ mRemoveViewContent = parentView.findViewById(R.id.remove_view_content);
+
+ setupPaneLayout((OverlappingPaneLayout) parentView);
+
+ return parentView;
+ }
+
+ @Override
+ public void onVoicemailStatusFetched(Cursor statusCursor) {
+ // no-op
+ }
+
+ @Override
+ public void onCallsFetched(Cursor cursor) {
+ mCallLogAdapter.setLoading(false);
+
+ // Save the date of the most recent call log item
+ if (cursor != null && cursor.moveToFirst()) {
+ mCurrentCallShortcutDate = cursor.getLong(CallLogQuery.DATE);
+ }
+
+ mCallLogAdapter.changeCursor(cursor);
+ mMergedAdapter.notifyDataSetChanged();
+ }
+
+ @Override
+ public void fetchCalls() {
+ mCallLogQueryHandler.fetchCalls(CallLogQueryHandler.CALL_TYPE_ALL, mLastCallShortcutDate);
+ }
+
+ public void dismissShortcut(View view) {
+ mLastCallShortcutDate = mCurrentCallShortcutDate;
+ final SharedPreferences prefs = view.getContext().getSharedPreferences(
+ DialtactsActivity.SHARED_PREFS_NAME, Context.MODE_PRIVATE);
+ prefs.edit().putLong(KEY_LAST_DISMISSED_CALL_SHORTCUT_DATE, mLastCallShortcutDate)
+ .apply();
+ fetchCalls();
+ }
+
+ public void addOnPageChangeListener(OnPageChangeListener onPageChangeListener) {
+ if (!mOnPageChangeListeners.contains(onPageChangeListener)) {
+ mOnPageChangeListeners.add(onPageChangeListener);
+ }
+ }
+
+ @Override
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+ final int count = mOnPageChangeListeners.size();
+ for (int i = 0; i < count; i++) {
+ mOnPageChangeListeners.get(i).onPageScrolled(position, positionOffset,
+ positionOffsetPixels);
+ }
+ }
+
+ @Override
+ public void onPageSelected(int position) {
+ final int count = mOnPageChangeListeners.size();
+ for (int i = 0; i < count; i++) {
+ mOnPageChangeListeners.get(i).onPageSelected(position);
+ }
+ }
+
+ @Override
+ public void onPageScrollStateChanged(int state) {
+ final int count = mOnPageChangeListeners.size();
+ for (int i = 0; i < count; i++) {
+ mOnPageChangeListeners.get(i).onPageScrollStateChanged(state);
+ }
+ }
+
+ public void showRemoveView(boolean show) {
+ mRemoveViewContent.setVisibility(show ? View.VISIBLE : View.GONE);
+ mRemoveView.setAlpha(show ? 0 : 1);
+ mRemoveView.animate().alpha(show ? 1 : 0).start();
+
+ if (mShortcutCardsListView.getCount() > 0) {
+ View v = mShortcutCardsListView.getChildAt(0);
+ v.animate().withLayer()
+ .alpha(show ? REMOVE_VIEW_SHOWN_ALPHA : REMOVE_VIEW_HIDDEN_ALPHA)
+ .start();
+ }
+ }
+
+ public boolean shouldShowActionBar() {
+ return mIsPanelOpen && mActionBar != null;
+ }
+
+ public boolean isPaneOpen() {
+ return mIsPanelOpen;
+ }
+
+ private void setupPaneLayout(OverlappingPaneLayout paneLayout) {
+ // TODO: Remove the notion of a capturable view. The entire view be slideable, once
+ // the framework better supports nested scrolling.
+ paneLayout.setCapturableView(mViewPagerTabs);
+ paneLayout.openPane();
+ paneLayout.setPanelSlideListener(mPanelSlideListener);
+ paneLayout.setIntermediatePinnedOffset(
+ ((HostInterface) getActivity()).getActionBarHeight());
+
+ LayoutTransition transition = paneLayout.getLayoutTransition();
+ // Turns on animations for all types of layout changes so that they occur for
+ // height changes.
+ transition.enableTransitionType(LayoutTransition.CHANGING);
+ }
+
+ public SpeedDialFragment getSpeedDialFragment() {
+ return mSpeedDialFragment;
+ }
+
+ public RemoveView getRemoveView() {
+ return mRemoveView;
+ }
+}
diff --git a/src/com/android/dialer/list/OnDragDropListener.java b/src/com/android/dialer/list/OnDragDropListener.java
index 7f6d179..c9ef50b 100644
--- a/src/com/android/dialer/list/OnDragDropListener.java
+++ b/src/com/android/dialer/list/OnDragDropListener.java
@@ -8,22 +8,22 @@
public interface OnDragDropListener {
/**
* Called when a drag is started.
- * @param itemIndex Index of the contact on which the drag was triggered
* @param x X-coordinate of the drag event
* @param y Y-coordinate of the drag event
* @param view The contact tile which the drag was started on
*/
- public void onDragStarted(int itemIndex, int x, int y, PhoneFavoriteTileView view);
+ public void onDragStarted(int x, int y, PhoneFavoriteSquareTileView view);
/**
* Called when a drag is in progress and the user moves the dragged contact to a
* location.
- * @param itemIndex Index of the contact in the ListView which is currently being displaced
- * by the dragged contact
+ *
* @param x X-coordinate of the drag event
* @param y Y-coordinate of the drag event
+ * @param view Contact tile in the ListView which is currently being displaced
+ * by the dragged contact
*/
- public void onDragHovered(int itemIndex, int x, int y);
+ public void onDragHovered(int x, int y, PhoneFavoriteSquareTileView view);
/**
* Called when a drag is completed (whether by dropping it somewhere or simply by dragging
diff --git a/src/com/android/dialer/list/OnListFragmentScrolledListener.java b/src/com/android/dialer/list/OnListFragmentScrolledListener.java
index cc5f3cd..5ed3a64 100644
--- a/src/com/android/dialer/list/OnListFragmentScrolledListener.java
+++ b/src/com/android/dialer/list/OnListFragmentScrolledListener.java
@@ -21,4 +21,6 @@
*/
public interface OnListFragmentScrolledListener {
public void onListFragmentScrollStateChange(int scrollState);
+ public void onListFragmentScroll(int firstVisibleItem, int visibleItemCount,
+ int totalItemCount);
}
diff --git a/src/com/android/dialer/list/PhoneFavoriteFragment.java b/src/com/android/dialer/list/PhoneFavoriteFragment.java
deleted file mode 100644
index 484a3d9..0000000
--- a/src/com/android/dialer/list/PhoneFavoriteFragment.java
+++ /dev/null
@@ -1,689 +0,0 @@
-/*
- * Copyright (C) 2013 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.list;
-
-import android.animation.Animator;
-import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
-import android.app.Activity;
-import android.app.Fragment;
-import android.app.LoaderManager;
-import android.content.Context;
-import android.content.CursorLoader;
-import android.content.Loader;
-import android.content.SharedPreferences;
-import android.database.Cursor;
-import android.graphics.Rect;
-import android.net.Uri;
-import android.os.Bundle;
-import android.provider.CallLog;
-import android.util.Log;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup;
-import android.view.ViewTreeObserver;
-import android.widget.AbsListView;
-import android.widget.AdapterView;
-import android.widget.AdapterView.OnItemClickListener;
-import android.widget.Button;
-import android.widget.ImageView;
-import android.widget.ListView;
-import android.widget.RelativeLayout;
-import android.widget.RelativeLayout.LayoutParams;
-
-import com.android.contacts.common.ContactPhotoManager;
-import com.android.contacts.common.ContactTileLoaderFactory;
-import com.android.contacts.common.GeoUtil;
-import com.android.contacts.common.list.ContactEntry;
-import com.android.contacts.common.list.ContactListItemView;
-import com.android.contacts.common.list.ContactTileView;
-import com.android.dialer.DialtactsActivity;
-import com.android.dialer.R;
-import com.android.dialer.calllog.CallLogAdapter;
-import com.android.dialer.calllog.CallLogQuery;
-import com.android.dialer.calllog.CallLogQueryHandler;
-import com.android.dialer.calllog.ContactInfoHelper;
-import com.android.dialer.list.PhoneFavoritesTileAdapter.ContactTileRow;
-import com.android.dialerbind.ObjectFactory;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-
-/**
- * Fragment for Phone UI's favorite screen.
- *
- * This fragment contains three kinds of contacts in one screen: "starred", "frequent", and "all"
- * contacts. To show them at once, this merges results from {@link com.android.contacts.common.list.ContactTileAdapter} and
- * {@link com.android.contacts.common.list.PhoneNumberListAdapter} into one unified list using {@link PhoneFavoriteMergedAdapter}.
- * A contact filter header is also inserted between those adapters' results.
- */
-public class PhoneFavoriteFragment extends Fragment implements OnItemClickListener,
- CallLogQueryHandler.Listener, CallLogAdapter.CallFetcher,
- PhoneFavoritesTileAdapter.OnDataSetChangedForAnimationListener {
-
- /**
- * By default, the animation code assumes that all items in a list view are of the same height
- * when animating new list items into view (e.g. from the bottom of the screen into view).
- * This can cause incorrect translation offsets when a item that is larger or smaller than
- * other list item is removed from the list. This key is used to provide the actual height
- * of the removed object so that the actual translation appears correct to the user.
- */
- private static final long KEY_REMOVED_ITEM_HEIGHT = Long.MAX_VALUE;
-
- private static final String TAG = PhoneFavoriteFragment.class.getSimpleName();
- private static final boolean DEBUG = false;
-
- private int mAnimationDuration;
-
- /**
- * Used with LoaderManager.
- */
- private static int LOADER_ID_CONTACT_TILE = 1;
- private static int MISSED_CALL_LOADER = 2;
-
- private static final String KEY_LAST_DISMISSED_CALL_SHORTCUT_DATE =
- "key_last_dismissed_call_shortcut_date";
-
- public interface OnShowAllContactsListener {
- public void onShowAllContacts();
- }
-
- public interface Listener {
- public void onContactSelected(Uri contactUri);
- public void onCallNumberDirectly(String phoneNumber);
- }
-
- public interface HostInterface {
- public void setDragDropController(DragDropController controller);
- }
-
- private class MissedCallLogLoaderListener implements LoaderManager.LoaderCallbacks<Cursor> {
-
- @Override
- public Loader<Cursor> onCreateLoader(int id, Bundle args) {
- final Uri uri = CallLog.Calls.CONTENT_URI;
- final String[] projection = new String[] {CallLog.Calls.TYPE};
- final String selection = CallLog.Calls.TYPE + " = " + CallLog.Calls.MISSED_TYPE +
- " AND " + CallLog.Calls.IS_READ + " = 0";
- return new CursorLoader(getActivity(), uri, projection, selection, null, null);
- }
-
- @Override
- public void onLoadFinished(Loader<Cursor> cursorLoader, Cursor data) {
- mCallLogAdapter.setMissedCalls(data);
- }
-
- @Override
- public void onLoaderReset(Loader<Cursor> cursorLoader) {
- }
- }
-
- private class ContactTileLoaderListener implements LoaderManager.LoaderCallbacks<Cursor> {
- @Override
- public CursorLoader onCreateLoader(int id, Bundle args) {
- if (DEBUG) Log.d(TAG, "ContactTileLoaderListener#onCreateLoader.");
- return ContactTileLoaderFactory.createStrequentPhoneOnlyLoader(getActivity());
- }
-
- @Override
- public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
- if (DEBUG) Log.d(TAG, "ContactTileLoaderListener#onLoadFinished");
- mContactTileAdapter.setContactCursor(data);
- setEmptyViewVisibility(mContactTileAdapter.getCount() == 0);
- }
-
- @Override
- public void onLoaderReset(Loader<Cursor> loader) {
- if (DEBUG) Log.d(TAG, "ContactTileLoaderListener#onLoaderReset. ");
- }
- }
-
- private class ContactTileAdapterListener implements ContactTileView.Listener {
- @Override
- public void onContactSelected(Uri contactUri, Rect targetRect) {
- if (mListener != null) {
- mListener.onContactSelected(contactUri);
- }
- }
-
- @Override
- public void onCallNumberDirectly(String phoneNumber) {
- if (mListener != null) {
- mListener.onCallNumberDirectly(phoneNumber);
- }
- }
-
- @Override
- public int getApproximateTileWidth() {
- return getView().getWidth() / mContactTileAdapter.getColumnCount();
- }
- }
-
- private class ScrollListener implements ListView.OnScrollListener {
- @Override
- public void onScroll(AbsListView view,
- int firstVisibleItem, int visibleItemCount, int totalItemCount) {
- }
-
- @Override
- public void onScrollStateChanged(AbsListView view, int scrollState) {
- mActivityScrollListener.onListFragmentScrollStateChange(scrollState);
- }
- }
-
- private Listener mListener;
-
- private OnListFragmentScrolledListener mActivityScrollListener;
- private OnShowAllContactsListener mShowAllContactsListener;
- private PhoneFavoriteMergedAdapter mAdapter;
- private PhoneFavoritesTileAdapter mContactTileAdapter;
-
- private CallLogAdapter mCallLogAdapter;
- private CallLogQueryHandler mCallLogQueryHandler;
-
- private View mParentView;
-
- private PhoneFavoriteListView mListView;
-
- private View mPhoneFavoritesMenu;
- private View mContactTileFrame;
-
- private TileInteractionTeaserView mTileInteractionTeaserView;
-
- private final HashMap<Long, Integer> mItemIdTopMap = new HashMap<Long, Integer>();
- private final HashMap<Long, Integer> mItemIdLeftMap = new HashMap<Long, Integer>();
-
- /**
- * Layout used when there are no favorites.
- */
- private View mEmptyView;
-
- /**
- * Call shortcuts older than this date (persisted in shared preferences) will not show up in
- * at the top of the screen
- */
- private long mLastCallShortcutDate = 0;
-
- /**
- * The date of the current call shortcut that is showing on screen.
- */
- private long mCurrentCallShortcutDate = 0;
-
- private final ContactTileView.Listener mContactTileAdapterListener =
- new ContactTileAdapterListener();
- private final LoaderManager.LoaderCallbacks<Cursor> mContactTileLoaderListener =
- new ContactTileLoaderListener();
- private final ScrollListener mScrollListener = new ScrollListener();
-
- @Override
- public void onAttach(Activity activity) {
- if (DEBUG) Log.d(TAG, "onAttach()");
- super.onAttach(activity);
-
- // Construct two base adapters which will become part of PhoneFavoriteMergedAdapter.
- // We don't construct the resultant adapter at this moment since it requires LayoutInflater
- // that will be available on onCreateView().
- mContactTileAdapter = new PhoneFavoritesTileAdapter(activity, mContactTileAdapterListener,
- this,
- getResources().getInteger(R.integer.contact_tile_column_count_in_favorites),
- PhoneFavoritesTileAdapter.NO_ROW_LIMIT);
- mContactTileAdapter.setPhotoLoader(ContactPhotoManager.getInstance(activity));
- }
-
- @Override
- public void onCreate(Bundle savedState) {
- if (DEBUG) Log.d(TAG, "onCreate()");
- super.onCreate(savedState);
-
- mAnimationDuration = getResources().getInteger(R.integer.fade_duration);
- mCallLogQueryHandler = new CallLogQueryHandler(getActivity().getContentResolver(),
- this, 1);
- final String currentCountryIso = GeoUtil.getCurrentCountryIso(getActivity());
- mCallLogAdapter = ObjectFactory.newCallLogAdapter(getActivity(), this,
- new ContactInfoHelper(getActivity(), currentCountryIso), false, false);
- setHasOptionsMenu(true);
- }
-
- @Override
- public void onResume() {
- super.onResume();
- final SharedPreferences prefs = getActivity().getSharedPreferences(
- DialtactsActivity.SHARED_PREFS_NAME, Context.MODE_PRIVATE);
-
- mLastCallShortcutDate = prefs.getLong(KEY_LAST_DISMISSED_CALL_SHORTCUT_DATE, 0);
-
- fetchCalls();
- mCallLogAdapter.setLoading(true);
- getLoaderManager().getLoader(LOADER_ID_CONTACT_TILE).forceLoad();
- }
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container,
- Bundle savedInstanceState) {
- mParentView = inflater.inflate(R.layout.phone_favorites_fragment, container, false);
-
- mListView = (PhoneFavoriteListView) mParentView.findViewById(R.id.contact_tile_list);
- mListView.setItemsCanFocus(true);
- mListView.setOnItemClickListener(this);
- mListView.setVerticalScrollBarEnabled(false);
- mListView.setVerticalScrollbarPosition(View.SCROLLBAR_POSITION_RIGHT);
- mListView.setScrollBarStyle(ListView.SCROLLBARS_OUTSIDE_OVERLAY);
- mListView.setOnItemSwipeListener(mContactTileAdapter);
- mListView.getDragDropController().addOnDragDropListener(mContactTileAdapter);
-
- final ImageView dragShadowOverlay =
- (ImageView) mParentView.findViewById(R.id.contact_tile_drag_shadow_overlay);
- mListView.setDragShadowOverlay(dragShadowOverlay);
-
- mEmptyView = mParentView.findViewById(R.id.phone_no_favorites_view);
-
- mPhoneFavoritesMenu = inflater.inflate(R.layout.phone_favorites_menu, mListView, false);
- prepareFavoritesMenu(mPhoneFavoritesMenu);
-
- mContactTileFrame = mParentView.findViewById(R.id.contact_tile_frame);
-
- mTileInteractionTeaserView = (TileInteractionTeaserView) inflater.inflate(
- R.layout.tile_interactions_teaser_view, mListView, false);
-
- mAdapter = new PhoneFavoriteMergedAdapter(getActivity(), this, mContactTileAdapter,
- mCallLogAdapter, mPhoneFavoritesMenu, mTileInteractionTeaserView);
-
- mTileInteractionTeaserView.setAdapter(mAdapter);
-
- mListView.setAdapter(mAdapter);
-
- mListView.setOnScrollListener(mScrollListener);
- mListView.setFastScrollEnabled(false);
- mListView.setFastScrollAlwaysVisible(false);
-
- return mParentView;
- }
-
- public boolean hasFrequents() {
- if (mContactTileAdapter == null) return false;
- return mContactTileAdapter.getNumFrequents() > 0;
- }
-
- /* package */ void setEmptyViewVisibility(final boolean visible) {
- final int previousVisibility = mEmptyView.getVisibility();
- final int newVisibility = visible ? View.VISIBLE : View.GONE;
-
- if (previousVisibility != newVisibility) {
- final RelativeLayout.LayoutParams params = (LayoutParams) mContactTileFrame
- .getLayoutParams();
- params.height = visible ? LayoutParams.WRAP_CONTENT : LayoutParams.MATCH_PARENT;
- mContactTileFrame.setLayoutParams(params);
- mEmptyView.setVisibility(newVisibility);
- }
- }
-
- @Override
- public void onStart() {
- super.onStart();
-
- final Activity activity = getActivity();
-
- try {
- mActivityScrollListener = (OnListFragmentScrolledListener) activity;
- } catch (ClassCastException e) {
- throw new ClassCastException(activity.toString()
- + " must implement OnListFragmentScrolledListener");
- }
-
- try {
- mShowAllContactsListener = (OnShowAllContactsListener) activity;
- } catch (ClassCastException e) {
- throw new ClassCastException(activity.toString()
- + " must implement OnShowAllContactsListener");
- }
-
- try {
- OnDragDropListener listener = (OnDragDropListener) activity;
- mListView.getDragDropController().addOnDragDropListener(listener);
- ((HostInterface) activity).setDragDropController(mListView.getDragDropController());
- } catch (ClassCastException e) {
- throw new ClassCastException(activity.toString()
- + " must implement OnDragDropListener and HostInterface");
- }
-
- // Use initLoader() instead of restartLoader() to refraining unnecessary reload.
- // This method call implicitly assures ContactTileLoaderListener's onLoadFinished() will
- // be called, on which we'll check if "all" contacts should be reloaded again or not.
- getLoaderManager().initLoader(LOADER_ID_CONTACT_TILE, null, mContactTileLoaderListener);
- getLoaderManager().initLoader(MISSED_CALL_LOADER, null, new MissedCallLogLoaderListener());
- }
-
- /**
- * {@inheritDoc}
- *
- * This is only effective for elements provided by {@link #mContactTileAdapter}.
- * {@link #mContactTileAdapter} has its own logic for click events.
- */
- @Override
- public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- final int contactTileAdapterCount = mContactTileAdapter.getCount();
- if (position <= contactTileAdapterCount) {
- Log.e(TAG, "onItemClick() event for unexpected position. "
- + "The position " + position + " is before \"all\" section. Ignored.");
- }
- }
-
- /**
- * Gets called when user click on the show all contacts button.
- */
- private void showAllContacts() {
- mShowAllContactsListener.onShowAllContacts();
- }
-
- public void setListener(Listener listener) {
- mListener = listener;
- }
-
- @Override
- public void onVoicemailStatusFetched(Cursor statusCursor) {
- // no-op
- }
-
- @Override
- public void onCallsFetched(Cursor cursor) {
- animateListView();
- mCallLogAdapter.setLoading(false);
-
- // Save the date of the most recent call log item
- if (cursor != null && cursor.moveToFirst()) {
- mCurrentCallShortcutDate = cursor.getLong(CallLogQuery.DATE);
- }
-
- mCallLogAdapter.changeCursor(cursor);
- mAdapter.notifyDataSetChanged();
- }
-
- @Override
- public void fetchCalls() {
- mCallLogQueryHandler.fetchCalls(CallLogQueryHandler.CALL_TYPE_ALL, mLastCallShortcutDate);
- }
-
- @Override
- public void onPause() {
- // If there are any pending contact entries that are to be removed, remove them
- mContactTileAdapter.removePendingContactEntry();
- // Wipe the cache to refresh the call shortcut item. This is not that expensive because
- // it only contains one item.
- mCallLogAdapter.invalidateCache();
- super.onPause();
- }
-
- /**
- * Cache the current view offsets into memory. Once a relayout of views in the ListView
- * has happened due to a dataset change, the cached offsets are used to create animations
- * that slide views from their previous positions to their new ones, to give the appearance
- * that the views are sliding into their new positions.
- */
- @SuppressWarnings("unchecked")
- private void saveOffsets(int removedItemHeight) {
- final int firstVisiblePosition = mListView.getFirstVisiblePosition();
- if (DEBUG) {
- Log.d(TAG, "Child count : " + mListView.getChildCount());
- }
- for (int i = 0; i < mListView.getChildCount(); i++) {
- final View child = mListView.getChildAt(i);
- final int position = firstVisiblePosition + i;
- final long itemId = mAdapter.getItemId(position);
- final int itemViewType = mAdapter.getItemViewType(position);
- if (itemViewType == PhoneFavoritesTileAdapter.ViewTypes.TOP &&
- child instanceof ContactTileRow) {
- // This is a tiled row, so save horizontal offsets instead
- saveHorizontalOffsets((ContactTileRow) child, (ArrayList<ContactEntry>)
- mAdapter.getItem(position), position);
- }
- if (DEBUG) {
- Log.d(TAG, "Saving itemId: " + itemId + " for listview child " + i + " Top: "
- + child.getTop());
- }
- mItemIdTopMap.put(itemId, child.getTop());
- }
-
- mItemIdTopMap.put(KEY_REMOVED_ITEM_HEIGHT, removedItemHeight);
- }
-
- /**
- * Saves the horizontal offsets for contacts that are displayed as tiles in a row. Saving
- * these offsets allow us to animate tiles sliding left and right within the same row.
- * See {@link #saveOffsets(int removedItemHeight)}
- */
- private void saveHorizontalOffsets(ContactTileRow row, ArrayList<ContactEntry> list,
- int currentRowIndex) {
- for (int i = 0; i < list.size() && i < row.getChildCount(); i++) {
- final View child = row.getChildAt(i);
- if (child == null) {
- continue;
- }
- final ContactEntry entry = list.get(i);
- final long itemId = mContactTileAdapter.getAdjustedItemId(entry.id);
- if (DEBUG) {
- Log.d(TAG, "Saving itemId: " + itemId + " for tileview child " + i + " Left: "
- + child.getTop());
- }
- mItemIdTopMap.put(itemId, currentRowIndex);
- mItemIdLeftMap.put(itemId, child.getLeft());
- }
- }
-
- /*
- * Performs a animations for a row of tiles
- */
- private void performHorizontalAnimations(ContactTileRow row, ArrayList<ContactEntry> list,
- long[] idsInPlace, int currentRow) {
- if (mItemIdLeftMap.isEmpty()) {
- return;
- }
- final AnimatorSet animSet = new AnimatorSet();
- final ArrayList<Animator> animators = new ArrayList<Animator>();
- for (int i = 0; i < list.size(); i++) {
- final View child = row.getChildAt(i);
- final ContactEntry entry = list.get(i);
- final long itemId = mContactTileAdapter.getAdjustedItemId(entry.id);
-
- if (containsId(idsInPlace, itemId)) {
- animators.add(ObjectAnimator.ofFloat(
- child, "alpha", 0.0f, 1.0f));
- break;
- } else {
- Integer startLeft = mItemIdLeftMap.get(itemId);
- int left = child.getLeft();
-
- Integer startRow = mItemIdTopMap.get(itemId);
-
- if (startRow != null) {
- if (startRow > currentRow) {
- // Item has shifted upwards to the previous row.
- // It should now animate in from right to left.
- startLeft = left + child.getWidth();
- } else if (startRow < currentRow) {
- // Item has shifted downwards to the next row.
- // It should now animate in from left to right.
- startLeft = left - child.getWidth();
- }
-
- // If the item hasn't shifted rows (startRow == currentRow), it either remains
- // in the same position or has shifted left or right within its current row.
- // Either way, startLeft has already been correctly saved and retrieved from
- // mItemIdTopMap.
- }
-
- if (startLeft != null) {
- if (startLeft != left) {
- int delta = startLeft - left;
- if (DEBUG) {
- Log.d(TAG, "Found itemId: " + itemId + " for tileview child " + i +
- " Left: " + left +
- " Delta: " + delta);
- }
- animators.add(ObjectAnimator.ofFloat(
- child, "translationX", delta, 0.0f));
- }
- } else {
- // In case the last square row is pushed up from the non-square section.
- animators.add(ObjectAnimator.ofFloat(
- child, "translationX", left, 0.0f));
- }
- }
- }
- if (animators.size() > 0) {
- animSet.setDuration(mAnimationDuration).playTogether(animators);
- animSet.start();
- }
- }
-
- /*
- * Performs animations for the list view. If the list item is a row of tiles, horizontal
- * animations will be performed instead.
- */
- private void animateListView(final long... idsInPlace) {
- if (mItemIdTopMap.isEmpty()) {
- // Don't do animations if the database is being queried for the first time and
- // the previous item offsets have not been cached, or the user hasn't done anything
- // (dragging, swiping etc) that requires an animation.
- return;
- }
-
- final int removedItemHeight = mItemIdTopMap.get(KEY_REMOVED_ITEM_HEIGHT);
-
- final ViewTreeObserver observer = mListView.getViewTreeObserver();
- observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
- @SuppressWarnings("unchecked")
- @Override
- public boolean onPreDraw() {
- observer.removeOnPreDrawListener(this);
- final int firstVisiblePosition = mListView.getFirstVisiblePosition();
- final AnimatorSet animSet = new AnimatorSet();
- final ArrayList<Animator> animators = new ArrayList<Animator>();
- for (int i = 0; i < mListView.getChildCount(); i++) {
- final View child = mListView.getChildAt(i);
- int position = firstVisiblePosition + i;
- final int itemViewType = mAdapter.getItemViewType(position);
- if (itemViewType == PhoneFavoritesTileAdapter.ViewTypes.TOP &&
- child instanceof ContactTileRow) {
- // This is a tiled row, so perform horizontal animations instead
- performHorizontalAnimations((ContactTileRow) child, (
- ArrayList<ContactEntry>) mAdapter.getItem(position), idsInPlace,
- position);
- }
-
- final long itemId = mAdapter.getItemId(position);
-
- if (containsId(idsInPlace, itemId)) {
- animators.add(ObjectAnimator.ofFloat(
- child, "alpha", 0.0f, 1.0f));
- break;
- } else {
- Integer startTop = mItemIdTopMap.get(itemId);
- final int top = child.getTop();
- int delta = 0;
- if (startTop != null) {
- if (startTop != top) {
- delta = startTop - top;
- }
- } else if (!mItemIdLeftMap.containsKey(itemId)) {
- // Animate new views along with the others. The catch is that they did
- // not exist in the start state, so we must calculate their starting
- // position based on neighboring views.
-
- final int itemHeight;
- if (removedItemHeight == 0) {
- itemHeight = child.getHeight() + mListView.getDividerHeight();
- } else {
- itemHeight = removedItemHeight;
- }
- startTop = top + (i > 0 ? itemHeight : -itemHeight);
- delta = startTop - top;
- } else {
- // In case the first non-square row is pushed down
- // from the square section.
- animators.add(ObjectAnimator.ofFloat(
- child, "alpha", 0.0f, 1.0f));
- }
- if (DEBUG) {
- Log.d(TAG, "Found itemId: " + itemId + " for listview child " + i +
- " Top: " + top +
- " Delta: " + delta);
- }
-
- if (delta != 0) {
- animators.add(ObjectAnimator.ofFloat(
- child, "translationY", delta, 0.0f));
- }
- }
- }
-
- if (animators.size() > 0) {
- animSet.setDuration(mAnimationDuration).playTogether(animators);
- animSet.start();
- }
-
- mItemIdTopMap.clear();
- mItemIdLeftMap.clear();
- return true;
- }
- });
- }
-
- private boolean containsId(long[] ids, long target) {
- // Linear search on array is fine because this is typically only 0-1 elements long
- for (int i = 0; i < ids.length; i++) {
- if (ids[i] == target) {
- return true;
- }
- }
- return false;
- }
-
- @Override
- public void onDataSetChangedForAnimation(long... idsInPlace) {
- animateListView(idsInPlace);
- }
-
- @Override
- public void cacheOffsetsForDatasetChange() {
- saveOffsets(0);
- }
-
- public void dismissShortcut(int height) {
- saveOffsets(height);
- mLastCallShortcutDate = mCurrentCallShortcutDate;
- final SharedPreferences prefs = getActivity().getSharedPreferences(
- DialtactsActivity.SHARED_PREFS_NAME, Context.MODE_PRIVATE);
- prefs.edit().putLong(KEY_LAST_DISMISSED_CALL_SHORTCUT_DATE, mLastCallShortcutDate)
- .apply();
- fetchCalls();
- }
-
- /**
- * Prepares the favorites menu which contains the static label "Speed Dial" and the
- * "All Contacts" button. Taps anywhere in the view take the user to "All Contacts".
- * This emulates how the headers in Play Store work.
- */
- private void prepareFavoritesMenu(View favoritesMenu) {
- // Set the onClick listener for the view to bring up the all contacts view.
- favoritesMenu.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View view) {
- showAllContacts();
- }
- });
- }
-}
diff --git a/src/com/android/dialer/list/PhoneFavoriteListView.java b/src/com/android/dialer/list/PhoneFavoriteListView.java
index 078cf3e..4ecc1cd 100644
--- a/src/com/android/dialer/list/PhoneFavoriteListView.java
+++ b/src/com/android/dialer/list/PhoneFavoriteListView.java
@@ -29,31 +29,20 @@
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewConfiguration;
+import android.widget.GridView;
import android.widget.ImageView;
-import android.widget.ListView;
import com.android.dialer.R;
-import com.android.dialer.list.PhoneFavoritesTileAdapter.ContactTileRow;
-import com.android.dialer.list.SwipeHelper.OnItemGestureListener;
-import com.android.dialer.list.SwipeHelper.SwipeHelperCallback;
+import com.android.dialer.list.DragDropController.DragItemContainer;
/**
- * The ListView composed of {@link ContactTileRow}.
- * This ListView handles both
- * - Swiping, which is borrowed from packages/apps/UnifiedEmail (com.android.mail.ui.Swipeable)
- * - Drag and drop
+ * Viewgroup that presents the user's speed dial contacts in a grid.
*/
-public class PhoneFavoriteListView extends ListView implements SwipeHelperCallback,
- OnDragDropListener {
+public class PhoneFavoriteListView extends GridView implements OnDragDropListener,
+ DragItemContainer {
public static final String LOG_TAG = PhoneFavoriteListView.class.getSimpleName();
- private SwipeHelper mSwipeHelper;
- private boolean mEnableSwipe = true;
-
- private OnItemGestureListener mOnItemGestureListener;
-
- private float mDensityScale;
private float mTouchSlop;
private int mTopScrollBound;
@@ -70,8 +59,11 @@
private Bitmap mDragShadowBitmap;
private ImageView mDragShadowOverlay;
+ private View mDragShadowParent;
private int mAnimationDuration;
+ final int[] mLocationOnScreen = new int[2];
+
// X and Y offsets inside the item from where the user grabbed to the
// child's left coordinate. This is used to aid in the drawing of the drag shadow.
private int mTouchOffsetToChildLeft;
@@ -80,7 +72,7 @@
private int mDragShadowLeft;
private int mDragShadowTop;
- private DragDropController mDragDropController = new DragDropController();
+ private DragDropController mDragDropController = new DragDropController(this);
private final float DRAG_SHADOW_ALPHA = 0.7f;
@@ -126,36 +118,14 @@
public PhoneFavoriteListView(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
mAnimationDuration = context.getResources().getInteger(R.integer.fade_duration);
- mDensityScale = getResources().getDisplayMetrics().density;
mTouchSlop = ViewConfiguration.get(context).getScaledPagingTouchSlop();
- mSwipeHelper = new SwipeHelper(context, SwipeHelper.X, this,
- mDensityScale, mTouchSlop);
- setItemsCanFocus(true);
mDragDropController.addOnDragDropListener(this);
}
@Override
protected void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
- mDensityScale= getResources().getDisplayMetrics().density;
mTouchSlop = ViewConfiguration.get(getContext()).getScaledPagingTouchSlop();
- mSwipeHelper.setDensityScale(mDensityScale);
- mSwipeHelper.setPagingTouchSlop(mTouchSlop);
- }
-
- /**
- * Enable swipe gestures.
- */
- public void enableSwipe(boolean enable) {
- mEnableSwipe = enable;
- }
-
- public boolean isSwipeEnabled() {
- return mEnableSwipe && mOnItemGestureListener.isSwipeEnabled();
- }
-
- public void setOnItemSwipeListener(OnItemGestureListener listener) {
- mOnItemGestureListener = listener;
}
/**
@@ -168,111 +138,25 @@
mTouchDownForDragStartX = (int) ev.getX();
mTouchDownForDragStartY = (int) ev.getY();
}
- if (isSwipeEnabled()) {
- return mSwipeHelper.onInterceptTouchEvent(ev) || super.onInterceptTouchEvent(ev);
- } else {
- return super.onInterceptTouchEvent(ev);
- }
+
+ return super.onInterceptTouchEvent(ev);
}
@Override
- public boolean onTouchEvent(MotionEvent ev) {
- if (mOnItemGestureListener != null) {
- mOnItemGestureListener.onTouch();
- }
- if (isSwipeEnabled()) {
- return mSwipeHelper.onTouchEvent(ev) || super.onTouchEvent(ev);
- } else {
- return super.onTouchEvent(ev);
- }
- }
-
- @Override
- public View getChildAtPosition(MotionEvent ev) {
- final View view = getViewAtPosition((int) ev.getX(), (int) ev.getY());
- if (view != null &&
- SwipeHelper.isSwipeable(view) &&
- view.getVisibility() != GONE) {
- // If this view is swipable in this listview, then return it. Otherwise
- // return a null view, which will simply be ignored by the swipe helper.
- return view;
- }
- return null;
- }
-
- @Override
- public View getChildContentView(View view) {
- return view.findViewById(R.id.contact_favorite_card);
- }
-
- @Override
- public void onScroll() {}
-
- @Override
- public boolean canChildBeDismissed(View v) {
- return SwipeHelper.isSwipeable(v);
- }
-
- @Override
- public void onChildDismissed(final View v) {
- if (v != null) {
- if (mOnItemGestureListener != null) {
- mOnItemGestureListener.onSwipe(v);
- }
- }
- }
-
- @Override
- public void onDragCancelled(View v) {}
-
- @Override
- public void onBeginDrag(View v) {
- final View tileRow = (View) v.getParent();
-
- // We do this so the underlying ScrollView knows that it won't get
- // the chance to intercept events anymore
- requestDisallowInterceptTouchEvent(true);
- }
-
- /**
- * End of swipe-to-remove code
- */
-
- @Override
- public boolean dispatchDragEvent(DragEvent event) {
+ public boolean onDragEvent(DragEvent event) {
final int action = event.getAction();
final int eX = (int) event.getX();
final int eY = (int) event.getY();
switch (action) {
- case DragEvent.ACTION_DRAG_STARTED:
- final int[] coordinates = new int[2];
- getLocationOnScreen(coordinates);
- // Calculate the X and Y coordinates of the drag event relative to the view
- final int viewX = eX - coordinates[0];
- final int viewY = eY - coordinates[1];
- final View child = getViewAtPosition(viewX, viewY);
-
- if (!(child instanceof ContactTileRow)) {
- // Bail early.
- return false;
- }
-
- final ContactTileRow tile = (ContactTileRow) child;
-
- // Disable drag and drop if there is a contact that has been swiped and is currently
- // in the pending remove state
- if (tile.getTileAdapter().hasPotentialRemoveEntryIndex()) {
- return false;
- }
-
- if (!mDragDropController.handleDragStarted(viewX, viewY, tile)) {
+ case DragEvent.ACTION_DRAG_STARTED: {
+ if (!mDragDropController.handleDragStarted(eX, eY)) {
return false;
}
break;
+ }
case DragEvent.ACTION_DRAG_LOCATION:
mLastDragY = eY;
- final View view = getViewAtPosition(eX, eY);
- mDragDropController.handleDragHovered(eX, eY, view);
+ mDragDropController.handleDragHovered(this, eX, eY);
// Kick off {@link #mScrollHandler} if it's not started yet.
if (!mIsDragScrollerRunning &&
// And if the distance traveled while dragging exceeds the touch slop
@@ -307,6 +191,7 @@
public void setDragShadowOverlay(ImageView overlay) {
mDragShadowOverlay = overlay;
+ mDragShadowParent = (View) mDragShadowOverlay.getParent();
}
/**
@@ -317,7 +202,8 @@
View child;
for (int childIdx = 0; childIdx < count; childIdx++) {
child = getChildAt(childIdx);
- if (y >= child.getTop() && y <= child.getBottom()) {
+ if (y >= child.getTop() && y <= child.getBottom() && x >= child.getLeft()
+ && x <= child.getRight()) {
return child;
}
}
@@ -335,7 +221,7 @@
}
@Override
- public void onDragStarted(int itemIndex, int x, int y, PhoneFavoriteTileView tileView) {
+ public void onDragStarted(int x, int y, PhoneFavoriteSquareTileView tileView) {
if (mDragShadowOverlay == null) {
return;
}
@@ -346,15 +232,21 @@
return;
}
- if (tileView instanceof PhoneFavoriteRegularRowView) {
- mDragShadowLeft = tileView.getParentRow().getLeft();
- mDragShadowTop = tileView.getParentRow().getTop();
- } else {
- // Square tile is relative to the contact tile,
- // and contact tile is relative to this list view.
- mDragShadowLeft = tileView.getLeft() + tileView.getParentRow().getLeft();
- mDragShadowTop = tileView.getTop() + tileView.getParentRow().getTop();
- }
+ tileView.getLocationOnScreen(mLocationOnScreen);
+ mDragShadowLeft = mLocationOnScreen[0];
+ mDragShadowTop = mLocationOnScreen[1];
+
+ // x and y are the coordinates of the on-screen touch event. Using these
+ // and the on-screen location of the tileView, calculate the difference between
+ // the position of the user's finger and the position of the tileView. These will
+ // be used to offset the location of the drag shadow so that it appears that the
+ // tileView is positioned directly under the user's finger.
+ mTouchOffsetToChildLeft = x - mDragShadowLeft;
+ mTouchOffsetToChildTop = y - mDragShadowTop;
+
+ mDragShadowParent.getLocationOnScreen(mLocationOnScreen);
+ mDragShadowLeft -= mLocationOnScreen[0];
+ mDragShadowTop -= mLocationOnScreen[1];
mDragShadowOverlay.setImageBitmap(mDragShadowBitmap);
mDragShadowOverlay.setVisibility(VISIBLE);
@@ -362,19 +254,14 @@
mDragShadowOverlay.setX(mDragShadowLeft);
mDragShadowOverlay.setY(mDragShadowTop);
-
- // x and y passed in are the coordinates of where the user has touched down,
- // calculate the offset to the top left coordinate of the dragged child. This
- // will be used for drawing the drag shadow.
- mTouchOffsetToChildLeft = x - mDragShadowLeft;
- mTouchOffsetToChildTop = y - mDragShadowTop;
}
@Override
- public void onDragHovered(int itemIndex, int x, int y) {
+ public void onDragHovered(int x, int y, PhoneFavoriteSquareTileView tileView) {
// Update the drag shadow location.
- mDragShadowLeft = x - mTouchOffsetToChildLeft;
- mDragShadowTop = y - mTouchOffsetToChildTop;
+ mDragShadowParent.getLocationOnScreen(mLocationOnScreen);
+ mDragShadowLeft = x - mTouchOffsetToChildLeft - mLocationOnScreen[0];
+ mDragShadowTop = y - mTouchOffsetToChildTop - mLocationOnScreen[1];
// Draw the drag shadow at its last known location if the drag shadow exists.
if (mDragShadowOverlay != null) {
mDragShadowOverlay.setX(mDragShadowLeft);
@@ -384,10 +271,6 @@
@Override
public void onDragFinished(int x, int y) {
- // Update the drag shadow location.
- mDragShadowLeft = x - mTouchOffsetToChildLeft;
- mDragShadowTop = y - mTouchOffsetToChildTop;
-
if (mDragShadowOverlay != null) {
mDragShadowOverlay.clearAnimation();
mDragShadowOverlay.animate().alpha(0.0f)
@@ -419,4 +302,19 @@
return bitmap;
}
+
+ @Override
+ public PhoneFavoriteSquareTileView getViewForLocation(int x, int y) {
+ getLocationOnScreen(mLocationOnScreen);
+ // Calculate the X and Y coordinates of the drag event relative to the view
+ final int viewX = x - mLocationOnScreen[0];
+ final int viewY = y - mLocationOnScreen[1];
+ final View child = getViewAtPosition(viewX, viewY);
+
+ if (!(child instanceof PhoneFavoriteSquareTileView)) {
+ return null;
+ }
+
+ return (PhoneFavoriteSquareTileView) child;
+ }
}
diff --git a/src/com/android/dialer/list/PhoneFavoriteMergedAdapter.java b/src/com/android/dialer/list/PhoneFavoriteMergedAdapter.java
deleted file mode 100644
index d2288e4..0000000
--- a/src/com/android/dialer/list/PhoneFavoriteMergedAdapter.java
+++ /dev/null
@@ -1,416 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc.
- * Licensed to 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.list;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.database.Cursor;
-import android.database.DataSetObserver;
-import android.view.MotionEvent;
-import android.view.View;
-import android.view.ViewConfiguration;
-import android.view.ViewGroup;
-import android.widget.BaseAdapter;
-import android.widget.FrameLayout;
-
-import com.android.dialer.R;
-import com.android.dialer.calllog.CallLogAdapter;
-import com.android.dialer.calllog.CallLogNotificationsHelper;
-import com.android.dialer.calllog.CallLogQueryHandler;
-import com.android.dialer.list.SwipeHelper.OnItemGestureListener;
-import com.android.dialer.list.SwipeHelper.SwipeHelperCallback;
-
-/**
- * An adapter that combines items from {@link com.android.contacts.common.list.ContactTileAdapter}
- * and {@link com.android.dialer.calllog.CallLogAdapter} into a single list.
- */
-public class PhoneFavoriteMergedAdapter extends BaseAdapter {
-
- private class CustomDataSetObserver extends DataSetObserver {
- @Override
- public void onChanged() {
- notifyDataSetChanged();
- }
- }
-
- private static final String TAG = PhoneFavoriteMergedAdapter.class.getSimpleName();
-
- private static final int TILE_INTERACTION_TEASER_VIEW_POSITION = 3;
- private static final int TILE_INTERACTION_TEASER_VIEW_ID = -2;
- private static final int FAVORITES_MENU_ITEM_ID = -3;
- private final PhoneFavoritesTileAdapter mContactTileAdapter;
- private final CallLogAdapter mCallLogAdapter;
- private final View mPhoneFavoritesMenu;
- private final PhoneFavoriteFragment mFragment;
- private final TileInteractionTeaserView mTileInteractionTeaserView;
-
- private final int mCallLogPadding;
-
- private final Context mContext;
-
- private final DataSetObserver mObserver;
-
- private final CallLogQueryHandler mCallLogQueryHandler;
-
- private final OnItemGestureListener mCallLogOnItemSwipeListener =
- new OnItemGestureListener() {
- @Override
- public void onSwipe(View view) {
- mCallLogQueryHandler.markNewCallsAsOld();
- mCallLogQueryHandler.markNewVoicemailsAsOld();
- CallLogNotificationsHelper.removeMissedCallNotifications();
- CallLogNotificationsHelper.updateVoicemailNotifications(mContext);
- mFragment.dismissShortcut(((View) view.getParent()).getHeight());
- }
-
- @Override
- public void onTouch() {}
-
- @Override
- public boolean isSwipeEnabled() {
- return true;
- }
- };
-
- private final CallLogQueryHandler.Listener mCallLogQueryHandlerListener =
- new CallLogQueryHandler.Listener() {
- @Override
- public void onVoicemailStatusFetched(Cursor statusCursor) {}
-
- @Override
- public void onCallsFetched(Cursor combinedCursor) {
- mCallLogAdapter.invalidateCache();
- mCallLogAdapter.changeCursor(combinedCursor);
- mCallLogAdapter.notifyDataSetChanged();
- }
- };
-
- public PhoneFavoriteMergedAdapter(Context context,
- PhoneFavoriteFragment fragment,
- PhoneFavoritesTileAdapter contactTileAdapter,
- CallLogAdapter callLogAdapter,
- View phoneFavoritesMenu,
- TileInteractionTeaserView tileInteractionTeaserView) {
- final Resources resources = context.getResources();
- mContext = context;
- mFragment = fragment;
- mCallLogPadding = resources.getDimensionPixelSize(R.dimen.recent_call_log_item_padding);
- mContactTileAdapter = contactTileAdapter;
- mCallLogAdapter = callLogAdapter;
- mObserver = new CustomDataSetObserver();
- mCallLogAdapter.registerDataSetObserver(mObserver);
- mContactTileAdapter.registerDataSetObserver(mObserver);
- mPhoneFavoritesMenu = phoneFavoritesMenu;
- mTileInteractionTeaserView = tileInteractionTeaserView;
- mCallLogQueryHandler = new CallLogQueryHandler(mContext.getContentResolver(),
- mCallLogQueryHandlerListener);
- }
-
- /**
- * Determines the number of items in the adapter.
- * mCallLogAdapter contains the item for the most recent caller.
- * mContactTileAdapter contains the starred contacts.
- * The +1 is to account for the presence of the favorites menu.
- *
- * @return Number of items in the adapter.
- */
- @Override
- public int getCount() {
- return mContactTileAdapter.getCount() + mCallLogAdapter.getCount() + getTeaserViewCount()
- + 1;
- }
-
- @Override
- public Object getItem(int position) {
- final int callLogAdapterCount = mCallLogAdapter.getCount();
-
- if (callLogAdapterCount > 0) {
- if (position < callLogAdapterCount) {
- return mCallLogAdapter.getItem(position);
- }
- }
- // Set position to the position of the actual favorite contact in the favorites adapter
- position = getAdjustedFavoritePosition(position, callLogAdapterCount);
-
- return mContactTileAdapter.getItem(position);
- }
-
- /**
- * In order to ensure that items have stable ids (for animation purposes), we need to
- * guarantee that every single item has a unique ID, even across data set changes.
- *
- * These are the ranges of IDs reserved for each item type.
- *
- * -4 and lower: CallLogAdapterItems representing most recent call.
- * -3: Favorites menu
- * -2: Teaser
- * 0 to (N -1): Rows of tiled contacts, where N is equal to the max rows of tiled contacts
- * N to infinity: Rows of regular contacts. Their item id is calculated by N + contact_id,
- * where contact_id is guaranteed to never be negative.
- */
- @Override
- public long getItemId(int position) {
- final int callLogAdapterCount = mCallLogAdapter.getCount();
- if (position < callLogAdapterCount) {
- // Call log items are not animated, so reusing their position for IDs is fine.
- return FAVORITES_MENU_ITEM_ID - 1 - position;
- } else if (position == TILE_INTERACTION_TEASER_VIEW_POSITION + callLogAdapterCount &&
- mTileInteractionTeaserView.getShouldDisplayInList()) {
- return TILE_INTERACTION_TEASER_VIEW_ID;
- } else if (position == callLogAdapterCount) {
- return FAVORITES_MENU_ITEM_ID;
- } else if (position < (callLogAdapterCount + mContactTileAdapter.getCount() +
- getTeaserViewCount() + 1)) {
- return mContactTileAdapter.getItemId(
- getAdjustedFavoritePosition(position, callLogAdapterCount));
- } else {
- // Default fallback. We don't normally get here.
- return FAVORITES_MENU_ITEM_ID;
- }
- }
-
- @Override
- public boolean hasStableIds() {
- return true;
- }
-
- /**
- * Determine the number of view types present.
- */
- @Override
- public int getViewTypeCount() {
- return (mContactTileAdapter.getViewTypeCount() + /* Favorite and frequent */
- mCallLogAdapter.getViewTypeCount() + /* Recent call log */
- getTeaserViewCount() + /* Teaser */
- 1); /* Favorites menu. */
- }
-
- @Override
- public int getItemViewType(int position) {
- final int callLogAdapterCount = mCallLogAdapter.getCount();
-
- if (position < callLogAdapterCount) {
- // View type of the call log adapter is the last view type of the contact tile adapter
- // + 1
- return mContactTileAdapter.getViewTypeCount();
- } else if (position == TILE_INTERACTION_TEASER_VIEW_POSITION + callLogAdapterCount &&
- mTileInteractionTeaserView.getShouldDisplayInList()) {
- // View type of the teaser row is the last view type of the contact tile adapter +2
- return mContactTileAdapter.getViewTypeCount() + 2;
- } else if (position == callLogAdapterCount) {
- // View type of the favorites menu is last view type of contact tile adapter +3
- return mContactTileAdapter.getViewTypeCount() + 3;
- } else if (position < getCount()) {
- return mContactTileAdapter.getItemViewType(
- getAdjustedFavoritePosition(position, callLogAdapterCount));
- } else {
- // Catch-all - we shouldn't get here but if we do use the same as the favorites menu.
- return mContactTileAdapter.getViewTypeCount() + 3;
- }
- }
-
- /**
- * Determines the view for a specified position.
- *
- * @param position Position for which to retrieve view.
- * @return view corresponding to position.
- */
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- final int callLogAdapterCount = mCallLogAdapter.getCount();
-
- // Get the view for the "teaser view" which describes how to re-arrange favorites.
- if (mTileInteractionTeaserView.getShouldDisplayInList()
- && position == TILE_INTERACTION_TEASER_VIEW_POSITION + callLogAdapterCount) {
- return mTileInteractionTeaserView;
- } else if (callLogAdapterCount > 0 && position < callLogAdapterCount) {
- // Handle case where we are requesting the view for the "most recent caller".
-
- final SwipeableCallLogRow wrapper;
- if (convertView == null) {
- wrapper = new SwipeableCallLogRow(mContext);
- wrapper.setOnItemSwipeListener(mCallLogOnItemSwipeListener);
- } else {
- wrapper = (SwipeableCallLogRow) convertView;
- }
-
- // Special case wrapper view for the most recent call log item. This allows
- // us to create a card-like effect for the more recent call log item in
- // the PhoneFavoriteMergedAdapter, but keep the original look of the item in
- // the CallLogAdapter.
- final View view = mCallLogAdapter.getView(position, convertView == null ?
- null : wrapper.getChildAt(0), parent);
- wrapper.removeAllViews();
- final View callLogItem = view.findViewById(R.id.call_log_list_item);
- // Reset the internal call log item view if it is being recycled
- callLogItem.setTranslationX(0);
- callLogItem.setAlpha(1);
- wrapper.addView(view);
- return wrapper;
- } else if (position == callLogAdapterCount) {
- // If position is just after the entries in the mCallLogAdapter (most recent call),
- // return the favorites menu.
- return mPhoneFavoritesMenu;
- }
-
- // Set position to the position of the actual favorite contact in the favorites adapter.
- // Adjusts based on the presence of other views, such as the favorites menu.
- position = getAdjustedFavoritePosition(position, callLogAdapterCount);
-
- // Favorites section
- final View view = mContactTileAdapter.getView(position, convertView, parent);
- if (position >= mContactTileAdapter.getMaxTiledRows()) {
- final FrameLayout frameLayout = (FrameLayout) view;
- final View child = frameLayout.getChildAt(0);
- FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
- FrameLayout.LayoutParams.WRAP_CONTENT,
- FrameLayout.LayoutParams.WRAP_CONTENT);
- child.setLayoutParams(params);
- }
- return view;
- }
-
- @Override
- public boolean areAllItemsEnabled() {
- return mCallLogAdapter.areAllItemsEnabled() && mContactTileAdapter.areAllItemsEnabled();
- }
-
- @Override
- public boolean isEnabled(int position) {
- final int callLogAdapterCount = mCallLogAdapter.getCount();
- if (position < callLogAdapterCount) {
- return mCallLogAdapter.isEnabled(position);
- } else { // For favorites section
- return mContactTileAdapter.isEnabled(
- getAdjustedFavoritePosition(position, callLogAdapterCount));
- }
- }
-
- /**
- * Determines the index into the mContactTileAdapter for the current position.
- *
- * @param position current position in the overall adapter.
- * @param callLogAdapterCount number of entries in "last calls" list (ie 0 or 1).
- * @return position in the mContactTileAdapter.
- */
- private int getAdjustedFavoritePosition(int position, int callLogAdapterCount) {
- if (position - callLogAdapterCount > TILE_INTERACTION_TEASER_VIEW_POSITION &&
- mTileInteractionTeaserView.getShouldDisplayInList()) {
- return position - callLogAdapterCount - 2;
- } else {
- return position - callLogAdapterCount - 1;
- }
- }
-
- /**
- * Determines the number of teaser views visible.
- * @return 1 or 0 depending on if the teaser view is showing.
- */
- private int getTeaserViewCount() {
- return (mContactTileAdapter.getCount() > TILE_INTERACTION_TEASER_VIEW_POSITION &&
- mTileInteractionTeaserView.getShouldDisplayInList() ? 1 : 0);
- }
-
- /**
- * The swipeable call log row.
- * See also {@link PhoneFavoritesTileAdapter.ContactTileRow}.
- */
- private class SwipeableCallLogRow extends FrameLayout implements SwipeHelperCallback {
- private SwipeHelper mSwipeHelper;
- private OnItemGestureListener mOnItemSwipeListener;
-
- public SwipeableCallLogRow(Context context) {
- super(context);
- final float densityScale = getResources().getDisplayMetrics().density;
- final float pagingTouchSlop = ViewConfiguration.get(context)
- .getScaledPagingTouchSlop();
- mSwipeHelper = new SwipeHelper(context, SwipeHelper.X, this,
- densityScale, pagingTouchSlop);
- }
-
- @Override
- public void addView(View view) {
- view.setBackgroundResource(R.drawable.ic_tile_for_recents_and_contact_tile);
-
- final FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
- FrameLayout.LayoutParams.MATCH_PARENT,
- FrameLayout.LayoutParams.WRAP_CONTENT);
- params.setMarginsRelative(mCallLogPadding, mCallLogPadding, mCallLogPadding,
- mCallLogPadding);
- view.setLayoutParams(params);
-
- super.addView(view);
- }
-
- @Override
- public View getChildAtPosition(MotionEvent ev) {
- return getChildCount() > 0 ? getChildAt(0) : null;
- }
-
- @Override
- public View getChildContentView(View v) {
- return v.findViewById(R.id.call_log_list_item);
- }
-
- @Override
- public void onScroll() {}
-
- @Override
- public boolean canChildBeDismissed(View v) {
- return true;
- }
-
- @Override
- public void onBeginDrag(View v) {
- // We do this so the underlying ScrollView knows that it won't get
- // the chance to intercept events anymore
- requestDisallowInterceptTouchEvent(true);
- }
-
- @Override
- public void onChildDismissed(View v) {
- if (v != null && mOnItemSwipeListener != null) {
- mOnItemSwipeListener.onSwipe(v);
- }
- }
-
- @Override
- public void onDragCancelled(View v) {}
-
- @Override
- public boolean onInterceptTouchEvent(MotionEvent ev) {
- if (mSwipeHelper != null) {
- return mSwipeHelper.onInterceptTouchEvent(ev) || super.onInterceptTouchEvent(ev);
- } else {
- return super.onInterceptTouchEvent(ev);
- }
- }
-
- @Override
- public boolean onTouchEvent(MotionEvent ev) {
- if (mSwipeHelper != null) {
- return mSwipeHelper.onTouchEvent(ev) || super.onTouchEvent(ev);
- } else {
- return super.onTouchEvent(ev);
- }
- }
-
- public void setOnItemSwipeListener(OnItemGestureListener listener) {
- mOnItemSwipeListener = listener;
- }
- }
-}
diff --git a/src/com/android/dialer/list/PhoneFavoriteRegularRowView.java b/src/com/android/dialer/list/PhoneFavoriteRegularRowView.java
deleted file mode 100644
index 91b09d7..0000000
--- a/src/com/android/dialer/list/PhoneFavoriteRegularRowView.java
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package com.android.dialer.list;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.util.AttributeSet;
-import android.view.View;
-
-import com.android.contacts.common.util.ViewUtil;
-import com.android.dialer.R;
-
-public class PhoneFavoriteRegularRowView extends PhoneFavoriteTileView {
- private static final String TAG = PhoneFavoriteRegularRowView.class.getSimpleName();
- private static final boolean DEBUG = false;
-
- public PhoneFavoriteRegularRowView(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- @Override
- protected void onFinishInflate() {
- super.onFinishInflate();
-
- final View favoriteContactCard = findViewById(R.id.contact_favorite_card);
-
- final int rowPaddingStart;
- final int rowPaddingEnd;
- final int rowPaddingTop;
- final int rowPaddingBottom;
-
- final Resources resources = getResources();
- rowPaddingStart = resources.getDimensionPixelSize(
- R.dimen.favorites_row_start_padding);
- rowPaddingEnd = resources.getDimensionPixelSize(
- R.dimen.favorites_row_end_padding);
- rowPaddingTop = resources.getDimensionPixelSize(
- R.dimen.favorites_row_top_padding);
- rowPaddingBottom = resources.getDimensionPixelSize(
- R.dimen.favorites_row_bottom_padding);
-
- favoriteContactCard.setBackgroundResource(R.drawable.contact_list_item_background);
-
- favoriteContactCard.setPaddingRelative(rowPaddingStart, rowPaddingTop, rowPaddingEnd,
- rowPaddingBottom);
-
- final View quickContactBadge = findViewById(R.id.contact_tile_quick);
- quickContactBadge.setOnLongClickListener(new OnLongClickListener() {
- @Override
- public boolean onLongClick(View v) {
- return PhoneFavoriteRegularRowView.this.performLongClick();
- }
- });
- }
-
- @Override
- protected int getApproximateImageSize() {
- return ViewUtil.getConstantPreLayoutWidth(getQuickContact());
- }
-}
diff --git a/src/com/android/dialer/list/PhoneFavoriteSquareTileView.java b/src/com/android/dialer/list/PhoneFavoriteSquareTileView.java
index 181d602..5f88776 100644
--- a/src/com/android/dialer/list/PhoneFavoriteSquareTileView.java
+++ b/src/com/android/dialer/list/PhoneFavoriteSquareTileView.java
@@ -18,39 +18,47 @@
import android.content.Context;
import android.provider.ContactsContract.QuickContact;
-import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageButton;
+import android.widget.TextView;
-import com.android.contacts.common.R;
import com.android.contacts.common.list.ContactEntry;
-
-import java.util.regex.Pattern;
+import com.android.dialer.R;
/**
- * Displays the contact's picture overlayed with their name
- * in a perfect square. It also has an additional touch target for a secondary action.
+ * Displays the contact's picture overlaid with their name and number type in a tile.
*/
public class PhoneFavoriteSquareTileView extends PhoneFavoriteTileView {
private static final String TAG = PhoneFavoriteSquareTileView.class.getSimpleName();
+
+ private final float mHeightToWidthRatio;
+
private ImageButton mSecondaryButton;
+ private ContactEntry mContactEntry;
+
public PhoneFavoriteSquareTileView(Context context, AttributeSet attrs) {
super(context, attrs);
+
+ mHeightToWidthRatio = getResources().getFraction(
+ R.dimen.contact_tile_height_to_width_ratio, 1, 1);
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
-
+ final TextView nameView = (TextView) findViewById(R.id.contact_tile_name);
+ nameView.setElegantTextHeight(false);
+ final TextView phoneTypeView = (TextView) findViewById(R.id.contact_tile_phone_type);
+ phoneTypeView.setElegantTextHeight(false);
mSecondaryButton = (ImageButton) findViewById(R.id.contact_tile_secondary_button);
}
@Override
protected int getApproximateImageSize() {
// The picture is the full size of the tile (minus some padding, but we can be generous)
- return mListener.getApproximateTileWidth();
+ return getWidth();
}
private void launchQuickContact() {
@@ -69,5 +77,24 @@
}
});
}
+ mContactEntry = entry;
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ final int width = MeasureSpec.getSize(widthMeasureSpec);
+ final int height = (int) (mHeightToWidthRatio * width);
+ final int count = getChildCount();
+ for (int i = 0; i < count; i++) {
+ getChildAt(i).measure(
+ MeasureSpec.makeMeasureSpec(width, MeasureSpec.EXACTLY),
+ MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
+ );
+ }
+ setMeasuredDimension(width, height);
+ }
+
+ public ContactEntry getContactEntry() {
+ return mContactEntry;
}
}
diff --git a/src/com/android/dialer/list/PhoneFavoriteTileView.java b/src/com/android/dialer/list/PhoneFavoriteTileView.java
index f55d4fc..5f2d2a9 100644
--- a/src/com/android/dialer/list/PhoneFavoriteTileView.java
+++ b/src/com/android/dialer/list/PhoneFavoriteTileView.java
@@ -16,16 +16,12 @@
*/
package com.android.dialer.list;
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.AnimatorSet;
-import android.animation.ObjectAnimator;
import android.content.ClipData;
import android.content.Context;
import android.text.TextUtils;
import android.util.AttributeSet;
-import android.view.GestureDetector;
import android.view.View;
+import android.widget.ImageView;
import com.android.contacts.common.ContactPhotoManager;
import com.android.contacts.common.MoreContactUtils;
@@ -33,8 +29,6 @@
import com.android.contacts.common.list.ContactEntry;
import com.android.contacts.common.list.ContactTileView;
import com.android.dialer.R;
-import com.android.dialer.list.PhoneFavoritesTileAdapter.ContactTileRow;
-import com.android.dialer.list.PhoneFavoritesTileAdapter.ViewTypes;
/**
* A light version of the {@link com.android.contacts.common.list.ContactTileView} that is used in
@@ -54,70 +48,31 @@
private static final float DEFAULT_IMAGE_LETTER_OFFSET = -0.14f;
private static final float DEFAULT_IMAGE_LETTER_SCALE = 0.70f;
- /** Length of all animations in milliseconds. */
- private int mAnimationDuration;
-
- /** The view that holds the front layer of the favorite contact card. */
- private View mFavoriteContactCard;
- /** The view that holds the background layer of the removal dialogue. */
- private View mRemovalDialogue;
- /** Undo button for undoing favorite removal. */
- private View mUndoRemovalButton;
- /** The view that holds the list view row. */
- protected ContactTileRow mParentRow;
/** View that contains the transparent shadow that is overlaid on top of the contact image. */
private View mShadowOverlay;
/** Users' most frequent phone number. */
private String mPhoneNumberString;
- /** Custom gesture detector.*/
- protected GestureDetector mGestureDetector;
-
// Dummy clip data object that is attached to drag shadows so that text views
// don't crash with an NPE if the drag shadow is released in their bounds
private static final ClipData EMPTY_CLIP_DATA = ClipData.newPlainText("", "");
public PhoneFavoriteTileView(Context context, AttributeSet attrs) {
super(context, attrs);
- mAnimationDuration = context.getResources().getInteger(R.integer.fade_duration);
- }
-
- public ContactTileRow getParentRow() {
- return mParentRow;
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
mShadowOverlay = findViewById(R.id.shadow_overlay);
- mFavoriteContactCard = findViewById(R.id.contact_favorite_card);
- mRemovalDialogue = findViewById(R.id.favorite_remove_dialogue);
- mUndoRemovalButton = findViewById(R.id.favorite_remove_undo_button);
-
- mUndoRemovalButton.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View view) {
- undoRemove();
- }
- });
setOnLongClickListener(new OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
final PhoneFavoriteTileView view = (PhoneFavoriteTileView) v;
// NOTE The drag shadow is handled in the ListView.
- if (view instanceof PhoneFavoriteRegularRowView) {
- final ContactTileRow parent = view.getParentRow();
- // If the view is regular row, start drag the row view.
- // Drag is not available for the item exceeds the PIN_LIMIT.
- if (parent.getRegularRowItemIndex() < PhoneFavoritesTileAdapter.PIN_LIMIT) {
- parent.startDrag(EMPTY_CLIP_DATA, new View.DragShadowBuilder(), null, 0);
- }
- } else {
- // If the view is a tile view, start drag the tile.
- view.startDrag(EMPTY_CLIP_DATA, new View.DragShadowBuilder(), null, 0);
- }
+ view.startDrag(EMPTY_CLIP_DATA, new View.DragShadowBuilder(), null, 0);
return true;
}
});
@@ -126,97 +81,25 @@
@Override
public void loadFromContact(ContactEntry entry) {
super.loadFromContact(entry);
- mPhoneNumberString = null; // ... in case we're reusing the view
+ // Set phone number to null in case we're reusing the view.
+ mPhoneNumberString = null;
if (entry != null) {
- // Grab the phone-number to call directly... see {@link onClick()}
+ // Grab the phone-number to call directly. See {@link onClick()}.
mPhoneNumberString = entry.phoneNumber;
// If this is a blank entry, don't show anything.
- // TODO krelease:Just hide the view for now. For this to truly look like an empty row
+ // TODO krelease: Just hide the view for now. For this to truly look like an empty row
// the entire ContactTileRow needs to be hidden.
if (entry == ContactEntry.BLANK_ENTRY) {
setVisibility(View.INVISIBLE);
} else {
+ final ImageView starIcon = (ImageView) findViewById(R.id.contact_star_icon);
+ starIcon.setVisibility(entry.isFavorite ? View.VISIBLE : View.GONE);
setVisibility(View.VISIBLE);
}
}
}
- public void displayRemovalDialog() {
- mRemovalDialogue.setVisibility(VISIBLE);
- mRemovalDialogue.setAlpha(0f);
- final ObjectAnimator fadeIn = ObjectAnimator.ofFloat(mRemovalDialogue, "alpha",
- 1.f).setDuration(mAnimationDuration);
-
- fadeIn.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationStart(Animator animation) {
- mParentRow.setHasTransientState(true);
- };
-
- @Override
- public void onAnimationEnd(Animator animation) {
- mParentRow.setHasTransientState(false);
- }
- });
- fadeIn.start();
- }
-
- /**
- * Signals the user wants to undo removing the favorite contact.
- */
- public void undoRemove() {
- // Makes the removal dialogue invisible.
- mRemovalDialogue.setAlpha(0.0f);
- mRemovalDialogue.setVisibility(GONE);
-
- // Animates back the favorite contact card.
- final ObjectAnimator fadeIn = ObjectAnimator.ofFloat(mFavoriteContactCard, "alpha", 1.f).
- setDuration(mAnimationDuration);
- final ObjectAnimator moveBack = ObjectAnimator.ofFloat(mFavoriteContactCard, "translationX",
- 0.f).setDuration(mAnimationDuration);
-
- final AnimatorSet animSet = new AnimatorSet();
-
- animSet.playTogether(fadeIn, moveBack);
-
- animSet.addListener(new AnimatorListenerAdapter() {
- @Override
- public void onAnimationStart(Animator animation) {
- mParentRow.setHasTransientState(true);
- }
- @Override
- public void onAnimationEnd(Animator animation) {
- if (mParentRow.getItemViewType() == ViewTypes.FREQUENT) {
- SwipeHelper.setSwipeable(mParentRow, true);
- } else {
- SwipeHelper.setSwipeable(PhoneFavoriteTileView.this, true);
- }
- mParentRow.setHasTransientState(false);
- }
- });
- animSet.start();
- // Signals the PhoneFavoritesTileAdapter to undo the potential delete.
- mParentRow.getTileAdapter().undoPotentialRemoveEntryIndex();
- }
-
- /**
- * Sets up the favorite contact card.
- */
- public void setupFavoriteContactCard() {
- if (mRemovalDialogue != null) {
- mRemovalDialogue.setVisibility(GONE);
- mRemovalDialogue.setAlpha(0.f);
- }
- mFavoriteContactCard.setAlpha(1.0f);
- mFavoriteContactCard.setTranslationX(0.f);
- }
-
- @Override
- protected void onAttachedToWindow() {
- mParentRow = (ContactTileRow) getParent();
- }
-
@Override
protected boolean isDarkTheme() {
return false;
@@ -227,13 +110,13 @@
return new OnClickListener() {
@Override
public void onClick(View v) {
- // When the removal dialog is present, don't allow a click to call
- if (mListener == null || mRemovalDialogue.isShown()) return;
+ if (mListener == null) {
+ return;
+ }
if (TextUtils.isEmpty(mPhoneNumberString)) {
// Copy "superclass" implementation
mListener.onContactSelected(getLookupUri(), MoreContactUtils
- .getTargetRectFromView(
- mContext, PhoneFavoriteTileView.this));
+ .getTargetRectFromView(PhoneFavoriteTileView.this));
} else {
// When you tap a frequently-called contact, you want to
// call them at the number that you usually talk to them
@@ -248,7 +131,7 @@
@Override
protected DefaultImageRequest getDefaultImageRequest(String displayName, String lookupKey) {
return new DefaultImageRequest(displayName, lookupKey, ContactPhotoManager.TYPE_DEFAULT,
- DEFAULT_IMAGE_LETTER_SCALE, DEFAULT_IMAGE_LETTER_OFFSET);
+ DEFAULT_IMAGE_LETTER_SCALE, DEFAULT_IMAGE_LETTER_OFFSET, false);
}
@Override
@@ -258,4 +141,10 @@
mShadowOverlay.setVisibility(isDefaultImage ? View.GONE : View.VISIBLE);
}
}
+
+ @Override
+ protected boolean isContactPhotoCircular() {
+ // Unlike Contacts' tiles, the Dialer's favorites tiles are square.
+ return false;
+ }
}
diff --git a/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java b/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
index d1ac955..0c4e23e 100644
--- a/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
+++ b/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
@@ -17,34 +17,35 @@
import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ComparisonChain;
+import com.google.common.collect.Lists;
+import android.content.ContentProviderOperation;
import android.content.ContentUris;
import android.content.ContentValues;
import android.content.Context;
+import android.content.OperationApplicationException;
import android.content.res.Resources;
import android.database.Cursor;
import android.net.Uri;
+import android.os.RemoteException;
+import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.PinnedPositions;
import android.text.TextUtils;
import android.util.Log;
import android.util.LongSparseArray;
-import android.view.MotionEvent;
import android.view.View;
-import android.view.ViewConfiguration;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.FrameLayout;
import com.android.contacts.common.ContactPhotoManager;
import com.android.contacts.common.ContactTileLoaderFactory;
-import com.android.contacts.common.R;
import com.android.contacts.common.list.ContactEntry;
import com.android.contacts.common.list.ContactTileAdapter.DisplayType;
import com.android.contacts.common.list.ContactTileView;
-import com.android.dialer.list.SwipeHelper.OnItemGestureListener;
-import com.android.dialer.list.SwipeHelper.SwipeHelperCallback;
+import com.android.dialer.R;
import java.util.ArrayList;
import java.util.Comparator;
@@ -54,12 +55,9 @@
/**
* Also allows for a configurable number of columns as well as a maximum row of tiled contacts.
- *
- * This adapter has been rewritten to only support a maximum of one row for favorites.
- *
*/
public class PhoneFavoritesTileAdapter extends BaseAdapter implements
- SwipeHelper.OnItemGestureListener, OnDragDropListener {
+ OnDragDropListener {
private static final String TAG = PhoneFavoritesTileAdapter.class.getSimpleName();
private static final boolean DEBUG = false;
@@ -83,9 +81,6 @@
private int mDropEntryIndex = -1;
/** New position of the temporarily entered contact in the cache. */
private int mDragEnteredEntryIndex = -1;
- /** Position of the contact pending removal. */
- private int mPotentialRemoveEntryIndex = -1;
- private long mIdToKeepInPlace = -1;
private boolean mAwaitingRemove = false;
private boolean mDelayCursorUpdates = false;
@@ -94,10 +89,6 @@
protected int mNumFrequents;
protected int mNumStarred;
- protected int mColumnCount;
- private int mMaxTiledRows = ROW_LIMIT_DEFAULT;
- private int mStarredIndex;
-
protected int mIdIndex;
protected int mLookupIndex;
protected int mPhotoUriIndex;
@@ -109,11 +100,10 @@
private int mPhoneNumberTypeIndex;
private int mPhoneNumberLabelIndex;
private int mIsDefaultNumberIndex;
+ private int mStarredIndex;
protected int mPinnedIndex;
protected int mContactIdIndex;
- private final int mPaddingInPixels;
-
/** Indicates whether a drag is in process. */
private boolean mInDragging = false;
@@ -144,19 +134,14 @@
};
public PhoneFavoritesTileAdapter(Context context, ContactTileView.Listener listener,
- OnDataSetChangedForAnimationListener dataSetChangedListener,
- int numCols, int maxTiledRows) {
+ OnDataSetChangedForAnimationListener dataSetChangedListener) {
mDataSetChangedListener = dataSetChangedListener;
mListener = listener;
mContext = context;
mResources = context.getResources();
- mColumnCount = numCols;
mNumFrequents = 0;
- mMaxTiledRows = maxTiledRows;
mContactEntries = new ArrayList<ContactEntry>();
- // Converting padding in dips to padding in pixels
- mPaddingInPixels = mContext.getResources()
- .getDimensionPixelSize(R.dimen.contact_tile_divider_width);
+
bindColumnIndices();
}
@@ -165,14 +150,6 @@
mPhotoManager = photoLoader;
}
- public void setMaxRowCount(int maxRows) {
- mMaxTiledRows = maxRows;
- }
-
- public void setColumnCount(int columnCount) {
- mColumnCount = columnCount;
- }
-
/**
* Indicates whether a drag is in process.
*
@@ -237,12 +214,7 @@
// cause a refresh of any views that rely on this data
notifyDataSetChanged();
// about to start redraw
- if (mIdToKeepInPlace != -1) {
- mDataSetChangedListener.onDataSetChangedForAnimation(mIdToKeepInPlace);
- } else {
- mDataSetChangedListener.onDataSetChangedForAnimation();
- }
- mIdToKeepInPlace = -1;
+ mDataSetChangedListener.onDataSetChangedForAnimation();
}
}
@@ -346,17 +318,6 @@
}
/**
- * Loads a contact from the cached list.
- *
- * @param position Position of the Contact.
- * @return Contact at the requested position.
- */
- protected ContactEntry getContactEntryFromCache(int position) {
- if (mContactEntries.size() <= position) return null;
- return mContactEntries.get(position);
- }
-
- /**
* Returns the number of frequents that will be displayed in the list.
*/
public int getNumFrequents() {
@@ -365,52 +326,11 @@
@Override
public int getCount() {
- if (mContactEntries == null || mContactEntries.isEmpty()) {
+ if (mContactEntries == null) {
return 0;
}
- int total = mContactEntries.size();
- // The number of contacts that don't show up as tiles
- final int nonTiledRows = Math.max(0, total - getMaxContactsInTiles());
- // The number of tiled rows
- final int tiledRows = getRowCount(total - nonTiledRows);
- return nonTiledRows + tiledRows;
- }
-
- public int getMaxTiledRows() {
- return mMaxTiledRows;
- }
-
- /**
- * Returns the number of rows required to show the provided number of entries
- * with the current number of columns.
- */
- protected int getRowCount(int entryCount) {
- if (entryCount == 0) return 0;
- final int nonLimitedRows = ((entryCount - 1) / mColumnCount) + 1;
- if (mMaxTiledRows == NO_ROW_LIMIT) {
- return nonLimitedRows;
- }
- return Math.min(mMaxTiledRows, nonLimitedRows);
- }
-
- private int getMaxContactsInTiles() {
- if (mMaxTiledRows == NO_ROW_LIMIT) {
- return Integer.MAX_VALUE;
- }
- return mColumnCount * mMaxTiledRows;
- }
-
- public int getRowIndex(int entryIndex) {
- if (entryIndex < getMaxContactsInTiles()) {
- return entryIndex / mColumnCount;
- } else {
- return entryIndex - mMaxTiledRows * (mColumnCount + 1);
- }
- }
-
- public int getColumnCount() {
- return mColumnCount;
+ return mContactEntries.size();
}
/**
@@ -418,44 +338,8 @@
* on the row for the given position.
*/
@Override
- public ArrayList<ContactEntry> getItem(int position) {
- ArrayList<ContactEntry> resultList = new ArrayList<ContactEntry>(mColumnCount);
-
- final int entryIndex = getFirstContactEntryIndexForPosition(position);
-
- final int viewType = getItemViewType(position);
-
- final int columnCount;
- if (viewType == ViewTypes.TOP) {
- columnCount = mColumnCount;
- } else {
- columnCount = 1;
- }
-
- for (int i = 0; i < columnCount; i++) {
- final ContactEntry entry = getContactEntryFromCache(entryIndex + i);
- if (entry == null) break; // less than mColumnCount contacts
- resultList.add(entry);
- }
-
- return resultList;
- }
-
- /*
- * Given a position in the adapter, returns the index of the first contact entry that is to be
- * in that row.
- */
- private int getFirstContactEntryIndexForPosition(int position) {
- final int maxContactsInTiles = getMaxContactsInTiles();
- if (position < getRowCount(maxContactsInTiles)) {
- // Contacts that appear as tiles
- return position * mColumnCount;
- } else {
- // Contacts that appear as rows
- // The actual position of the contact in the cursor is simply total the number of
- // tiled contacts + the given position
- return maxContactsInTiles + position - mMaxTiledRows;
- }
+ public ContactEntry getItem(int position) {
+ return mContactEntries.get(position);
}
/**
@@ -467,22 +351,7 @@
*/
@Override
public long getItemId(int position) {
- if (getItemViewType(position) == ViewTypes.FREQUENT) {
- return getAdjustedItemId(getItem(position).get(0).id);
- } else {
- return position;
- }
- }
-
- /**
- * Calculates the stable itemId for a particular entry based on the entry's contact ID. This
- * stable itemId is used for animation purposes.
- */
- public long getAdjustedItemId(long id) {
- if (mMaxTiledRows == NO_ROW_LIMIT) {
- return id;
- }
- return mMaxTiledRows + id;
+ return getItem(position).id;
}
@Override
@@ -492,7 +361,6 @@
@Override
public boolean areAllItemsEnabled() {
- // No dividers, so all items are enabled.
return true;
}
@@ -517,34 +385,22 @@
int itemViewType = getItemViewType(position);
- ContactTileRow contactTileRowView = null;
+ PhoneFavoriteTileView tileView = null;
- if (convertView instanceof ContactTileRow) {
- contactTileRowView = (ContactTileRow) convertView;
+ if (convertView instanceof PhoneFavoriteTileView) {
+ tileView = (PhoneFavoriteTileView) convertView;
}
- ArrayList<ContactEntry> contactList = getItem(position);
-
- if (contactTileRowView == null) {
- // Creating new row if needed
- contactTileRowView = new ContactTileRow(mContext, itemViewType, position);
+ if (tileView == null) {
+ tileView = (PhoneFavoriteTileView) View.inflate(mContext,
+ R.layout.phone_favorite_tile_view, null);
}
-
- contactTileRowView.configureRow(contactList, position, position == getCount() - 1);
-
- return contactTileRowView;
+ tileView.setPhotoManager(mPhotoManager);
+ tileView.setListener(mListener);
+ tileView.loadFromContact(getItem(position));
+ return tileView;
}
- private int getLayoutResourceId(int viewType) {
- switch (viewType) {
- case ViewTypes.FREQUENT:
- return R.layout.phone_favorite_regular_row_view;
- case ViewTypes.TOP:
- return R.layout.phone_favorite_tile_view;
- default:
- throw new IllegalArgumentException("Unrecognized viewType " + viewType);
- }
- }
@Override
public int getViewTypeCount() {
return ViewTypes.COUNT;
@@ -552,11 +408,7 @@
@Override
public int getItemViewType(int position) {
- if (position < getMaxContactsInTiles()) {
- return ViewTypes.TOP;
- } else {
- return ViewTypes.FREQUENT;
- }
+ return ViewTypes.TILE;
}
/**
@@ -614,7 +466,6 @@
// populated with the dragged ContactEntry at the correct spot.
mDropEntryIndex = mDragEnteredEntryIndex;
mContactEntries.set(mDropEntryIndex, mDraggedEntry);
- mIdToKeepInPlace = getAdjustedItemId(mDraggedEntry.id);
mDataSetChangedListener.cacheOffsetsForDatasetChange();
changed = true;
} else if (isIndexInBound(mDraggedEntryIndex)) {
@@ -627,11 +478,18 @@
}
if (changed && mDropEntryIndex < PIN_LIMIT) {
- final ContentValues cv = getReflowedPinnedPositions(mContactEntries, mDraggedEntry,
- mDraggedEntryIndex, mDropEntryIndex);
- final Uri pinUri = PinnedPositions.UPDATE_URI.buildUpon().build();
- // update the database here with the new pinned positions
- mContext.getContentResolver().update(pinUri, cv, null, null);
+ final ArrayList<ContentProviderOperation> operations =
+ getReflowedPinningOperations(mContactEntries, mDraggedEntryIndex,
+ mDropEntryIndex);
+ if (!operations.isEmpty()) {
+ // update the database here with the new pinned positions
+ try {
+ mContext.getContentResolver().applyBatch(ContactsContract.AUTHORITY,
+ operations);
+ } catch (RemoteException | OperationApplicationException e) {
+ Log.e(TAG, "Exception thrown when pinning contacts", e);
+ }
+ }
}
mDraggedEntry = null;
}
@@ -650,44 +508,6 @@
}
/**
- * Sets an item to for pending removal. If the user does not click the undo button, the item
- * will be removed at the next interaction.
- *
- * @param index Index of the item to be removed.
- */
- public void setPotentialRemoveEntryIndex(int index) {
- mPotentialRemoveEntryIndex = index;
- }
-
- /**
- * Removes a contact entry from the list.
- *
- * @return True is an item is removed. False is there is no item to be removed.
- */
- public boolean removePendingContactEntry() {
- boolean removed = false;
- if (isIndexInBound(mPotentialRemoveEntryIndex)) {
- final ContactEntry entry = mContactEntries.get(mPotentialRemoveEntryIndex);
- unstarAndUnpinContact(entry.lookupUri);
- removed = true;
- mAwaitingRemove = true;
- }
- cleanTempVariables();
- return removed;
- }
-
- /**
- * Resets the item for pending removal.
- */
- public void undoPotentialRemoveEntryIndex() {
- mPotentialRemoveEntryIndex = -1;
- }
-
- public boolean hasPotentialRemoveEntryIndex() {
- return isIndexInBound(mPotentialRemoveEntryIndex);
- }
-
- /**
* Clears all temporary variables at a new interaction.
*/
public void cleanTempVariables() {
@@ -695,390 +515,12 @@
mDropEntryIndex = -1;
mDragEnteredEntryIndex = -1;
mDraggedEntry = null;
- mPotentialRemoveEntryIndex = -1;
}
/**
- * Acts as a row item composed of {@link ContactTileView}
- *
- */
- public class ContactTileRow extends FrameLayout implements SwipeHelperCallback {
- public static final int CONTACT_ENTRY_INDEX_TAG = R.id.contact_entry_index_tag;
-
- private int mItemViewType;
- private int mLayoutResId;
- private final int mRowPaddingStart;
- private final int mRowPaddingEnd;
- private final int mRowPaddingTop;
- private final int mRowPaddingBottom;
- private final float mHeightToWidthRatio;
- private int mPosition;
- private SwipeHelper mSwipeHelper;
- private OnItemGestureListener mOnItemSwipeListener;
-
- public ContactTileRow(Context context, int itemViewType, int position) {
- super(context);
- mItemViewType = itemViewType;
- mLayoutResId = getLayoutResourceId(mItemViewType);
- mPosition = position;
-
- final Resources resources = mContext.getResources();
-
- mHeightToWidthRatio = getResources().getFraction(
- R.dimen.contact_tile_height_to_width_ratio, 1, 1);
-
- if (mItemViewType == ViewTypes.TOP) {
- // For tiled views, we still want padding to be set on the ContactTileRow.
- // Otherwise the padding would be set around each of the tiles, which we don't want
- mRowPaddingTop = resources.getDimensionPixelSize(
- R.dimen.favorites_row_top_padding);
- mRowPaddingBottom = resources.getDimensionPixelSize(
- R.dimen.favorites_row_bottom_padding);
- mRowPaddingStart = resources.getDimensionPixelSize(
- R.dimen.favorites_row_start_padding);
- mRowPaddingEnd = resources.getDimensionPixelSize(
- R.dimen.favorites_row_end_padding);
- } else {
- // For row views, padding is set on the view itself.
- mRowPaddingTop = 0;
- mRowPaddingBottom = 0;
- mRowPaddingStart = 0;
- mRowPaddingEnd = 0;
- }
-
- setPaddingRelative(mRowPaddingStart, mRowPaddingTop, mRowPaddingEnd,
- mRowPaddingBottom);
-
- // Remove row (but not children) from accessibility node tree.
- setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
-
- if (mItemViewType == ViewTypes.FREQUENT) {
- // ListView handles swiping for this item
- SwipeHelper.setSwipeable(this, true);
- } else if (mItemViewType == ViewTypes.TOP) {
- // The contact tile row has its own swipe helpers, that makes each individual
- // tile swipeable.
- final float densityScale = getResources().getDisplayMetrics().density;
- final float pagingTouchSlop = ViewConfiguration.get(context)
- .getScaledPagingTouchSlop();
- mSwipeHelper = new SwipeHelper(context, SwipeHelper.X, this, densityScale,
- pagingTouchSlop);
- // Increase swipe thresholds for square tiles since they are relatively small.
- mSwipeHelper.setChildSwipedFarEnoughFactor(0.9f);
- mSwipeHelper.setChildSwipedFastEnoughFactor(0.1f);
- mOnItemSwipeListener = PhoneFavoritesTileAdapter.this;
- }
- }
-
- /**
- * Configures the row to add {@link ContactEntry}s information to the views
- */
- public void configureRow(ArrayList<ContactEntry> list, int position, boolean isLastRow) {
- int columnCount = mItemViewType == ViewTypes.FREQUENT ? 1 : mColumnCount;
- mPosition = position;
-
- // Adding tiles to row and filling in contact information
- for (int columnCounter = 0; columnCounter < columnCount; columnCounter++) {
- ContactEntry entry =
- columnCounter < list.size() ? list.get(columnCounter) : null;
- addTileFromEntry(entry, columnCounter, isLastRow);
- }
- if (columnCount == 1) {
- if (list.get(0) == ContactEntry.BLANK_ENTRY) {
- setVisibility(View.INVISIBLE);
- } else {
- setVisibility(View.VISIBLE);
- }
- }
- }
-
- private void addTileFromEntry(ContactEntry entry, int childIndex, boolean isLastRow) {
- final PhoneFavoriteTileView contactTile;
-
- if (getChildCount() <= childIndex) {
-
- contactTile = (PhoneFavoriteTileView) inflate(mContext, mLayoutResId, null);
- // Note: the layoutparam set here is only actually used for FREQUENT.
- // We override onMeasure() for STARRED and we don't care the layout param there.
- final Resources resources = mContext.getResources();
- FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
- ViewGroup.LayoutParams.WRAP_CONTENT,
- ViewGroup.LayoutParams.WRAP_CONTENT);
-
- params.setMargins(
- resources.getDimensionPixelSize(R.dimen.detail_item_side_margin), 0,
- resources.getDimensionPixelSize(R.dimen.detail_item_side_margin), 0);
- contactTile.setLayoutParams(params);
- contactTile.setPhotoManager(mPhotoManager);
- contactTile.setListener(mListener);
- addView(contactTile);
- } else {
- contactTile = (PhoneFavoriteTileView) getChildAt(childIndex);
- }
- contactTile.loadFromContact(entry);
-
- int entryIndex = -1;
- switch (mItemViewType) {
- case ViewTypes.TOP:
- // Setting divider visibilities
- contactTile.setPaddingRelative(0, 0,
- childIndex >= mColumnCount - 1 ? 0 : mPaddingInPixels, 0);
- entryIndex = getFirstContactEntryIndexForPosition(mPosition) + childIndex;
- SwipeHelper.setSwipeable(contactTile, false);
- break;
- case ViewTypes.FREQUENT:
- contactTile.setHorizontalDividerVisibility(
- isLastRow ? View.GONE : View.VISIBLE);
- entryIndex = getFirstContactEntryIndexForPosition(mPosition);
- SwipeHelper.setSwipeable(this, true);
- break;
- default:
- break;
- }
- // tag the tile with the index of the contact entry it is associated with
- if (entryIndex != -1) {
- contactTile.setTag(CONTACT_ENTRY_INDEX_TAG, entryIndex);
- }
- contactTile.setupFavoriteContactCard();
- }
-
- @Override
- protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
- switch (mItemViewType) {
- case ViewTypes.TOP:
- onLayoutForTiles();
- return;
- default:
- super.onLayout(changed, left, top, right, bottom);
- return;
- }
- }
-
- private void onLayoutForTiles() {
- final int count = getChildCount();
-
- // Just line up children horizontally.
- int childLeft = getPaddingStart();
- for (int i = 0; i < count; i++) {
- final View child = getChildAt(i);
-
- // Note MeasuredWidth includes the padding.
- final int childWidth = child.getMeasuredWidth();
- child.layout(childLeft, getPaddingTop(), childLeft + childWidth,
- getPaddingTop() + child.getMeasuredHeight());
- childLeft += childWidth;
- }
- }
-
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- switch (mItemViewType) {
- case ViewTypes.TOP:
- onMeasureForTiles(widthMeasureSpec);
- return;
- default:
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- return;
- }
- }
-
- private void onMeasureForTiles(int widthMeasureSpec) {
- final int width = MeasureSpec.getSize(widthMeasureSpec);
-
- final int childCount = getChildCount();
- if (childCount == 0) {
- // Just in case...
- setMeasuredDimension(width, 0);
- return;
- }
-
- // 1. Calculate image size.
- // = ([total width] - [total padding]) / [child count]
- //
- // 2. Set it to width/height of each children.
- // If we have a remainder, some tiles will have 1 pixel larger width than its height.
- //
- // 3. Set the dimensions of itself.
- // Let width = given width.
- // Let height = image size + bottom paddding.
-
- final int totalPaddingsInPixels = (mColumnCount - 1) * mPaddingInPixels
- + mRowPaddingStart + mRowPaddingEnd;
-
- // Preferred width / height for images (excluding the padding).
- // The actual width may be 1 pixel larger than this if we have a remainder.
- final int imageWidth = (width - totalPaddingsInPixels) / mColumnCount;
- final int remainder = width - (imageWidth * mColumnCount) - totalPaddingsInPixels;
-
- final int height = (int) (mHeightToWidthRatio * imageWidth);
-
- for (int i = 0; i < childCount; i++) {
- final View child = getChildAt(i);
- final int childWidth = imageWidth + child.getPaddingRight()
- // Compensate for the remainder
- + (i < remainder ? 1 : 0);
- child.measure(
- MeasureSpec.makeMeasureSpec(childWidth, MeasureSpec.EXACTLY),
- MeasureSpec.makeMeasureSpec(height, MeasureSpec.EXACTLY)
- );
- }
- setMeasuredDimension(width, height + getPaddingTop() + getPaddingBottom());
- }
-
- /**
- * Gets the index of the item at the specified coordinates.
- *
- * @param itemX X-coordinate of the selected item.
- * @param itemY Y-coordinate of the selected item.
- * @return Index of the selected item in the cached array.
- */
- public int getItemIndex(float itemX, float itemY) {
- if (mMaxTiledRows == NO_ROW_LIMIT || mPosition < mMaxTiledRows) {
- if (DEBUG) {
- Log.v(TAG, String.valueOf(itemX) + " " + String.valueOf(itemY));
- }
- for (int i = 0; i < getChildCount(); ++i) {
- /** If the row contains multiple tiles, checks each tile to see if the point
- * is contained in the tile. */
- final View child = getChildAt(i);
- /** The coordinates passed in are based on the ListView,
- * translate for each child first */
- final int xInListView = child.getLeft() + getLeft();
- final int yInListView = child.getTop() + getTop();
- final int distanceX = (int) itemX - xInListView;
- final int distanceY = (int) itemY - yInListView;
- if ((distanceX > 0 && distanceX < child.getWidth()) &&
- (distanceY > 0 && distanceY < child.getHeight())) {
- /** If the point is contained in the rectangle, computes the index of the
- * item in the cached array. */
- return i + (mPosition) * mColumnCount;
- }
- }
- } else {
- /** If the selected item is one of the rows, compute the index. */
- return getRegularRowItemIndex();
- }
- return -1;
- }
-
- /**
- * Gets the index of the regular row item.
- *
- * @return Index of the selected item in the cached array.
- */
- public int getRegularRowItemIndex() {
- return (mPosition - mMaxTiledRows) + mColumnCount * mMaxTiledRows;
- }
-
- public PhoneFavoritesTileAdapter getTileAdapter() {
- return PhoneFavoritesTileAdapter.this;
- }
-
- public int getPosition() {
- return mPosition;
- }
-
- /**
- * Find the view under the pointer.
- */
- public View getViewAtPosition(int x, int y) {
- // find the view under the pointer, accounting for GONE views
- final int count = getChildCount();
- View view;
- for (int childIdx = 0; childIdx < count; childIdx++) {
- view = getChildAt(childIdx);
- if (x >= view.getLeft() && x <= view.getRight()) {
- return view;
- }
- }
- return null;
- }
-
- @Override
- public View getChildAtPosition(MotionEvent ev) {
- final View view = getViewAtPosition((int) ev.getX(), (int) ev.getY());
- if (view != null &&
- SwipeHelper.isSwipeable(view) &&
- view.getVisibility() != GONE) {
- // If this view is swipable, then return it. If not, because the removal
- // dialog is currently showing, then return a null view, which will simply
- // be ignored by the swipe helper.
- return view;
- }
- return null;
- }
-
- @Override
- public View getChildContentView(View v) {
- return v.findViewById(R.id.contact_favorite_card);
- }
-
- @Override
- public void onScroll() {}
-
- @Override
- public boolean canChildBeDismissed(View v) {
- return true;
- }
-
- @Override
- public void onBeginDrag(View v) {
- removePendingContactEntry();
- final int index = indexOfChild(v);
-
- /*
- if (index > 0) {
- detachViewFromParent(index);
- attachViewToParent(v, 0, v.getLayoutParams());
- }*/
-
- // We do this so the underlying ScrollView knows that it won't get
- // the chance to intercept events anymore
- requestDisallowInterceptTouchEvent(true);
- }
-
- @Override
- public void onChildDismissed(View v) {
- if (v != null) {
- if (mOnItemSwipeListener != null) {
- mOnItemSwipeListener.onSwipe(v);
- }
- }
- }
-
- @Override
- public void onDragCancelled(View v) {}
-
- @Override
- public boolean onInterceptTouchEvent(MotionEvent ev) {
- if (mSwipeHelper != null && isSwipeEnabled()) {
- return mSwipeHelper.onInterceptTouchEvent(ev) || super.onInterceptTouchEvent(ev);
- } else {
- return super.onInterceptTouchEvent(ev);
- }
- }
-
- @Override
- public boolean onTouchEvent(MotionEvent ev) {
- if (mSwipeHelper != null && isSwipeEnabled()) {
- return mSwipeHelper.onTouchEvent(ev) || super.onTouchEvent(ev);
- } else {
- return super.onTouchEvent(ev);
- }
- }
-
- public int getItemViewType() {
- return mItemViewType;
- }
-
- public void setOnItemSwipeListener(OnItemGestureListener listener) {
- mOnItemSwipeListener = listener;
- }
- }
-
- /**
- * Used when a contact is swiped away. This will both unstar and set pinned position of the
- * contact to PinnedPosition.DEMOTED so that it doesn't show up anymore in the favorites list.
+ * Used when a contact is removed from speeddial. This will both unstar and set pinned position
+ * of the contact to PinnedPosition.DEMOTED so that it doesn't show up anymore in the favorites
+ * list.
*/
private void unstarAndUnpinContact(Uri contactUri) {
final ContentValues values = new ContentValues(2);
@@ -1150,68 +592,52 @@
/**
* Given an existing list of contact entries and a single entry that is to be pinned at a
- * particular position, return a ContentValues object that contains new pinned positions for
- * all contacts that are forced to be pinned at new positions, trying as much as possible to
- * keep pinned contacts at their original location.
+ * particular position, return a list of {@link ContentProviderOperation}s that contains new
+ * pinned positions for all contacts that are forced to be pinned at new positions, trying as
+ * much as possible to keep pinned contacts at their original location.
*
* At this point in time the pinned position of each contact in the list has already been
* updated by {@link #arrangeContactsByPinnedPosition}, so we can assume that all pinned
* positions(within {@link #PIN_LIMIT} are unique positive integers.
*/
@VisibleForTesting
- /* package */ ContentValues getReflowedPinnedPositions(ArrayList<ContactEntry> list,
- ContactEntry entryToPin, int oldPos, int newPinPos) {
-
- final ContentValues cv = new ContentValues();
+ /* package */ ArrayList<ContentProviderOperation> getReflowedPinningOperations(
+ ArrayList<ContactEntry> list, int oldPos, int newPinPos) {
+ final ArrayList<ContentProviderOperation> positions = Lists.newArrayList();
final int lowerBound = Math.min(oldPos, newPinPos);
final int upperBound = Math.max(oldPos, newPinPos);
for (int i = lowerBound; i <= upperBound; i++) {
final ContactEntry entry = list.get(i);
if (entry.pinned == i) continue;
- cv.put(String.valueOf(entry.id), i);
+
+ final Uri uri = Uri.withAppendedPath(Contacts.CONTENT_URI, String.valueOf(entry.id));
+ final ContentValues values = new ContentValues();
+ values.put(Contacts.PINNED, i);
+ positions.add(ContentProviderOperation.newUpdate(uri).withValues(values).build());
}
- return cv;
+ return positions;
}
protected static class ViewTypes {
- public static final int FREQUENT = 0;
- public static final int TOP = 1;
- public static final int COUNT = 2;
+ public static final int TILE = 0;
+ public static final int COUNT = 1;
}
@Override
- public void onSwipe(View view) {
- final PhoneFavoriteTileView tileView = (PhoneFavoriteTileView) view.findViewById(
- R.id.contact_tile);
- // When the view is in the removal dialog, it should no longer be swipeable
- SwipeHelper.setSwipeable(view, false);
- tileView.displayRemovalDialog();
-
- final Integer entryIndex = (Integer) tileView.getTag(
- ContactTileRow.CONTACT_ENTRY_INDEX_TAG);
-
- setPotentialRemoveEntryIndex(entryIndex);
- }
-
- @Override
- public void onTouch() {
- removePendingContactEntry();
- return;
- }
-
- @Override
- public boolean isSwipeEnabled() {
- return !mAwaitingRemove;
- }
-
- @Override
- public void onDragStarted(int itemIndex, int x, int y, PhoneFavoriteTileView view) {
+ public void onDragStarted(int x, int y, PhoneFavoriteSquareTileView view) {
setInDragging(true);
+ final int itemIndex = mContactEntries.indexOf(view.getContactEntry());
popContactEntry(itemIndex);
}
@Override
- public void onDragHovered(int itemIndex, int x, int y) {
+ public void onDragHovered(int x, int y, PhoneFavoriteSquareTileView view) {
+ if (view == null) {
+ // The user is hovering over a view that is not a contact tile, no need to do
+ // anything here.
+ return;
+ }
+ final int itemIndex = mContactEntries.indexOf(view.getContactEntry());
if (mInDragging &&
mDragEnteredEntryIndex != itemIndex &&
isIndexInBound(itemIndex) &&
diff --git a/src/com/android/dialer/list/RemoveView.java b/src/com/android/dialer/list/RemoveView.java
index 16942fe..fdb08f6 100644
--- a/src/com/android/dialer/list/RemoveView.java
+++ b/src/com/android/dialer/list/RemoveView.java
@@ -4,14 +4,16 @@
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
+import android.util.Log;
import android.view.DragEvent;
+import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.android.dialer.R;
-public class RemoveView extends LinearLayout {
+public class RemoveView extends FrameLayout {
DragDropController mDragDropController;
TextView mRemoveText;
@@ -19,7 +21,6 @@
int mUnhighlightedColor;
int mHighlightedColor;
Drawable mRemoveDrawable;
- Drawable mRemoveHighlightedDrawable;
public RemoveView(Context context) {
super(context);
@@ -41,7 +42,6 @@
mUnhighlightedColor = r.getColor(R.color.remove_text_color);
mHighlightedColor = r.getColor(R.color.remove_highlighted_text_color);
mRemoveDrawable = r.getDrawable(R.drawable.ic_remove);
- mRemoveHighlightedDrawable = r.getDrawable(R.drawable.ic_remove_highlight);
}
public void setDragDropController(DragDropController controller) {
@@ -49,42 +49,41 @@
}
@Override
- public boolean dispatchDragEvent(DragEvent event) {
- final int action = event.getAction();
- switch (action) {
- case DragEvent.ACTION_DRAG_ENTERED:
- setAppearanceHighlighted();
- break;
- case DragEvent.ACTION_DRAG_EXITED:
- setAppearanceNormal();
- break;
- case DragEvent.ACTION_DRAG_LOCATION:
- if (mDragDropController != null) {
- mDragDropController.handleDragHovered((int) event.getX(),
- // the true y-coordinate of the event with respect to the listview is
- // offset by the height of the remove view
- (int) event.getY() - getHeight(), null);
- }
- break;
- case DragEvent.ACTION_DROP:
- if (mDragDropController != null) {
- mDragDropController.handleDragFinished((int) event.getX(), (int) event.getY(), true);
- }
- setAppearanceNormal();
- break;
- }
- return true;
+ public boolean onDragEvent(DragEvent event) {
+ final int action = event.getAction();
+ switch (action) {
+ case DragEvent.ACTION_DRAG_ENTERED:
+ setAppearanceHighlighted();
+ break;
+ case DragEvent.ACTION_DRAG_EXITED:
+ setAppearanceNormal();
+ break;
+ case DragEvent.ACTION_DRAG_LOCATION:
+ if (mDragDropController != null) {
+ mDragDropController.handleDragHovered(this, (int) event.getX(),
+ (int) event.getY());
+ }
+ break;
+ case DragEvent.ACTION_DROP:
+ if (mDragDropController != null) {
+ mDragDropController.handleDragFinished((int) event.getX(), (int) event.getY(),
+ true);
+ }
+ setAppearanceNormal();
+ break;
+ }
+ return true;
}
private void setAppearanceNormal() {
mRemoveText.setTextColor(mUnhighlightedColor);
- mRemoveIcon.setImageDrawable(mRemoveDrawable);
+ mRemoveIcon.setColorFilter(mUnhighlightedColor);
invalidate();
}
private void setAppearanceHighlighted() {
mRemoveText.setTextColor(mHighlightedColor);
- mRemoveIcon.setImageDrawable(mRemoveHighlightedDrawable);
+ mRemoveIcon.setColorFilter(mHighlightedColor);
invalidate();
}
}
diff --git a/src/com/android/dialer/list/SearchFragment.java b/src/com/android/dialer/list/SearchFragment.java
index 006729b..03d2242 100644
--- a/src/com/android/dialer/list/SearchFragment.java
+++ b/src/com/android/dialer/list/SearchFragment.java
@@ -16,32 +16,58 @@
package com.android.dialer.list;
import android.app.Activity;
-import android.content.ActivityNotFoundException;
import android.content.Intent;
+import android.content.res.Resources;
+import android.os.Bundle;
+import android.text.TextUtils;
+import android.view.View;
+import android.view.animation.Interpolator;
import android.widget.AbsListView;
import android.widget.AbsListView.OnScrollListener;
-import android.widget.Toast;
+import android.widget.ListView;
import com.android.contacts.common.list.ContactEntryListAdapter;
import com.android.contacts.common.list.ContactListItemView;
import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
import com.android.contacts.common.list.PhoneNumberPickerFragment;
+import com.android.contacts.common.util.ViewUtil;
import com.android.dialer.DialtactsActivity;
import com.android.dialer.R;
-import com.android.dialer.dialpad.DialpadFragment;
-import com.android.dialer.list.OnListFragmentScrolledListener;
+import com.android.dialer.util.DialerUtils;
+import com.android.phone.common.animation.AnimUtils;
public class SearchFragment extends PhoneNumberPickerFragment {
private OnListFragmentScrolledListener mActivityScrollListener;
+ /*
+ * Stores the untouched user-entered string that is used to populate the add to contacts
+ * intent.
+ */
+ private String mAddToContactNumber;
+ private int mActionBarHeight;
+ private int mShadowHeight;
+ private int mPaddingTop;
+ private int mShowDialpadDuration;
+ private int mHideDialpadDuration;
+
+ private HostInterface mActivity;
+
+ public interface HostInterface {
+ public boolean isActionBarShowing();
+ public boolean isDialpadShown();
+ public int getActionBarHideOffset();
+ public int getActionBarHeight();
+ }
+
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
setQuickContactEnabled(true);
+ setAdjustSelectionBoundsEnabled(false);
setDarkTheme(false);
- setPhotoPosition(ContactListItemView.getDefaultPhotoPosition(true /* opposite */));
+ setPhotoPosition(ContactListItemView.getDefaultPhotoPosition(false /* opposite */));
setUseCallableUri(true);
try {
@@ -58,7 +84,23 @@
if (isSearchMode()) {
getAdapter().setHasHeader(0, false);
}
- getListView().setOnScrollListener(new OnScrollListener() {
+
+ mActivity = (HostInterface) getActivity();
+
+ final Resources res = getResources();
+ mActionBarHeight = mActivity.getActionBarHeight();
+ mShadowHeight = res.getDrawable(R.drawable.search_shadow).getIntrinsicHeight();
+ mPaddingTop = res.getDimensionPixelSize(R.dimen.search_list_padding_top);
+ mShowDialpadDuration = res.getInteger(R.integer.dialpad_slide_in_duration);
+ mHideDialpadDuration = res.getInteger(R.integer.dialpad_slide_out_duration);
+
+ final View parentView = getView();
+
+ final ListView listView = getListView();
+
+ listView.setClipToPadding(false);
+ setVisibleScrollbarEnabled(false);
+ listView.setOnScrollListener(new OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
mActivityScrollListener.onListFragmentScrollStateChange(scrollState);
@@ -69,6 +111,14 @@
int totalItemCount) {
}
});
+
+ updatePosition(false /* animate */);
+ }
+
+ @Override
+ public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ ViewUtil.addBottomPaddingToListViewForFab(getListView(), getResources());
}
@Override
@@ -81,6 +131,10 @@
}
}
+ public void setAddToContactNumber(String addToContactNumber) {
+ mAddToContactNumber = addToContactNumber;
+ }
+
@Override
protected ContactEntryListAdapter createListAdapter() {
DialerPhoneNumberListAdapter adapter = new DialerPhoneNumberListAdapter(getActivity());
@@ -103,19 +157,50 @@
listener.onCallNumberDirectly(getQueryString());
}
} else if (shortcutType == DialerPhoneNumberListAdapter.SHORTCUT_ADD_NUMBER_TO_CONTACTS) {
- final String number = adapter.getFormattedQueryString();
+ final String number = TextUtils.isEmpty(mAddToContactNumber) ?
+ adapter.getFormattedQueryString() : mAddToContactNumber;
final Intent intent = DialtactsActivity.getAddNumberToContactIntent(number);
- startActivityWithErrorToast(intent);
+ DialerUtils.startActivityWithErrorToast(getActivity(), intent,
+ R.string.add_contact_not_available);
}
}
- private void startActivityWithErrorToast(Intent intent) {
- try {
- startActivity(intent);
- } catch (ActivityNotFoundException e) {
- Toast toast = Toast.makeText(getActivity(), R.string.add_contact_not_available,
- Toast.LENGTH_SHORT);
- toast.show();
+ /**
+ * Updates the position and padding of the search fragment, depending on whether the dialpad is
+ * shown. This can be optionally animated.
+ * @param animate
+ */
+ public void updatePosition(boolean animate) {
+ // Use negative shadow height instead of 0 to account for the 9-patch's shadow.
+ int startTranslationValue =
+ mActivity.isDialpadShown() ? mActionBarHeight - mShadowHeight: -mShadowHeight;
+ int endTranslationValue = 0;
+ // Prevents ListView from being translated down after a rotation when the ActionBar is up.
+ if (animate || mActivity.isActionBarShowing()) {
+ endTranslationValue =
+ mActivity.isDialpadShown() ? 0 : mActionBarHeight -mShadowHeight;
}
+ if (animate) {
+ Interpolator interpolator =
+ mActivity.isDialpadShown() ? AnimUtils.EASE_IN : AnimUtils.EASE_OUT ;
+ int duration =
+ mActivity.isDialpadShown() ? mShowDialpadDuration : mHideDialpadDuration;
+ getView().setTranslationY(startTranslationValue);
+ getView().animate()
+ .translationY(endTranslationValue)
+ .setInterpolator(interpolator)
+ .setDuration(duration);
+ } else {
+ getView().setTranslationY(endTranslationValue);
+ }
+
+ // There is padding which should only be applied when the dialpad is not shown.
+ int paddingTop = mActivity.isDialpadShown() ? 0 : mPaddingTop;
+ final ListView listView = getListView();
+ listView.setPaddingRelative(
+ listView.getPaddingStart(),
+ paddingTop,
+ listView.getPaddingEnd(),
+ listView.getPaddingBottom());
}
}
diff --git a/src/com/android/dialer/list/ShortcutCardsAdapter.java b/src/com/android/dialer/list/ShortcutCardsAdapter.java
new file mode 100644
index 0000000..766bdda
--- /dev/null
+++ b/src/com/android/dialer/list/ShortcutCardsAdapter.java
@@ -0,0 +1,375 @@
+/*
+ * Copyright (C) 2011 Google Inc.
+ * Licensed to 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.list;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.database.DataSetObserver;
+import android.graphics.Rect;
+import android.view.Gravity;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewConfiguration;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.FrameLayout;
+import android.widget.LinearLayout;
+
+import com.android.dialer.R;
+import com.android.dialer.calllog.CallLogAdapter;
+import com.android.dialer.calllog.CallLogListItemView;
+import com.android.dialer.calllog.CallLogNotificationsHelper;
+import com.android.dialer.calllog.CallLogQueryHandler;
+import com.android.dialer.list.SwipeHelper.OnItemGestureListener;
+import com.android.dialer.list.SwipeHelper.SwipeHelperCallback;
+
+/**
+ * An adapter that displays call shortcuts from {@link com.android.dialer.calllog.CallLogAdapter}
+ * in the form of cards.
+ */
+public class ShortcutCardsAdapter extends BaseAdapter {
+
+ private class CustomDataSetObserver extends DataSetObserver {
+ @Override
+ public void onChanged() {
+ notifyDataSetChanged();
+ }
+ }
+
+ private static final String TAG = ShortcutCardsAdapter.class.getSimpleName();
+
+ private final CallLogAdapter mCallLogAdapter;
+
+ private final ListsFragment mFragment;
+
+ private final int mCallLogMarginHorizontal;
+ private final int mCallLogMarginTop;
+ private final int mCallLogMarginBottom;
+ private final int mCallLogPaddingStart;
+ private final int mCallLogPaddingTop;
+ private final int mCallLogPaddingBottom;
+ private final int mCardMaxHorizontalClip;
+ private final int mShortCardBackgroundColor;
+
+ private final Context mContext;
+
+ private final DataSetObserver mObserver;
+
+ private final CallLogQueryHandler mCallLogQueryHandler;
+
+ private final OnItemGestureListener mCallLogOnItemSwipeListener =
+ new OnItemGestureListener() {
+ @Override
+ public void onSwipe(View view) {
+ mCallLogQueryHandler.markNewCallsAsOld();
+ mCallLogQueryHandler.markNewVoicemailsAsOld();
+ CallLogNotificationsHelper.removeMissedCallNotifications();
+ CallLogNotificationsHelper.updateVoicemailNotifications(mContext);
+ mFragment.dismissShortcut(view);
+ }
+
+ @Override
+ public void onTouch() {}
+
+ @Override
+ public boolean isSwipeEnabled() {
+ return true;
+ }
+ };
+
+ private final CallLogQueryHandler.Listener mCallLogQueryHandlerListener =
+ new CallLogQueryHandler.Listener() {
+ @Override
+ public void onVoicemailStatusFetched(Cursor statusCursor) {}
+
+ @Override
+ public void onCallsFetched(Cursor combinedCursor) {
+ mCallLogAdapter.invalidateCache();
+ mCallLogAdapter.changeCursor(combinedCursor);
+ mCallLogAdapter.notifyDataSetChanged();
+ }
+ };
+
+ public ShortcutCardsAdapter(Context context,
+ ListsFragment fragment,
+ CallLogAdapter callLogAdapter) {
+ final Resources resources = context.getResources();
+ mContext = context;
+ mFragment = fragment;
+ mCardMaxHorizontalClip =
+ resources.getDimensionPixelSize(R.dimen.recent_call_log_item_horizontal_clip_limit);
+ mCallLogMarginHorizontal =
+ resources.getDimensionPixelSize(R.dimen.recent_call_log_item_margin_horizontal);
+ mCallLogMarginTop =
+ resources.getDimensionPixelSize(R.dimen.recent_call_log_item_margin_top);
+ mCallLogMarginBottom =
+ resources.getDimensionPixelSize(R.dimen.recent_call_log_item_margin_bottom);
+ mCallLogPaddingStart =
+ resources.getDimensionPixelSize(R.dimen.recent_call_log_item_padding_start);
+ mCallLogPaddingTop =
+ resources.getDimensionPixelSize(R.dimen.recent_call_log_item_padding_top);
+ mCallLogPaddingBottom =
+ resources.getDimensionPixelSize(R.dimen.recent_call_log_item_padding_bottom);
+ mShortCardBackgroundColor = resources.getColor(R.color.call_log_expanded_background_color);
+
+
+ mCallLogAdapter = callLogAdapter;
+ mObserver = new CustomDataSetObserver();
+ mCallLogAdapter.registerDataSetObserver(mObserver);
+ mCallLogQueryHandler = new CallLogQueryHandler(mContext.getContentResolver(),
+ mCallLogQueryHandlerListener);
+ }
+
+ /**
+ * Determines the number of items in the adapter.
+ * mCallLogAdapter contains the item for the most recent caller.
+ * mContactTileAdapter contains the starred contacts.
+ * The +1 is to account for the presence of the favorites menu.
+ *
+ * @return Number of items in the adapter.
+ */
+ @Override
+ public int getCount() {
+ return mCallLogAdapter.getCount();
+ }
+
+ @Override
+ public Object getItem(int position) {
+ return mCallLogAdapter.getItem(position);
+ }
+
+ @Override
+ public long getItemId(int position) {
+ return position;
+ }
+
+ @Override
+ public boolean hasStableIds() {
+ return true;
+ }
+
+ /**
+ * Determine the number of view types present.
+ */
+ @Override
+ public int getViewTypeCount() {
+ return mCallLogAdapter.getViewTypeCount();
+ }
+
+ @Override
+ public int getItemViewType(int position) {
+ return mCallLogAdapter.getItemViewType(position);
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ final SwipeableShortcutCard wrapper;
+ if (convertView == null) {
+ wrapper = new SwipeableShortcutCard(mContext);
+ wrapper.setOnItemSwipeListener(mCallLogOnItemSwipeListener);
+ } else {
+ wrapper = (SwipeableShortcutCard) convertView;
+ }
+
+ // Special case wrapper view for the most recent call log item. This allows
+ // us to create a card-like effect for the more recent call log item in
+ // the PhoneFavoriteMergedAdapter, but keep the original look of the item in
+ // the CallLogAdapter.
+ final View view = mCallLogAdapter.getView(position, convertView == null ?
+ null : wrapper.getChildAt(0), parent);
+ wrapper.removeAllViews();
+ wrapper.prepareChildView(view);
+ wrapper.addView(view);
+ return wrapper;
+ }
+
+ @Override
+ public boolean areAllItemsEnabled() {
+ return mCallLogAdapter.areAllItemsEnabled();
+ }
+
+ @Override
+ public boolean isEnabled(int position) {
+ return mCallLogAdapter.isEnabled(position);
+ }
+
+ /**
+ * The swipeable call log row.
+ */
+ class SwipeableShortcutCard extends FrameLayout implements SwipeHelperCallback {
+ private SwipeHelper mSwipeHelper;
+ private OnItemGestureListener mOnItemSwipeListener;
+
+ private float mPreviousTranslationZ = 0;
+ private Rect mClipRect = new Rect();
+
+ public SwipeableShortcutCard(Context context) {
+ super(context);
+ final float densityScale = getResources().getDisplayMetrics().density;
+ final float pagingTouchSlop = ViewConfiguration.get(context)
+ .getScaledPagingTouchSlop();
+ mSwipeHelper = new SwipeHelper(context, SwipeHelper.X, this,
+ densityScale, pagingTouchSlop);
+ }
+
+ private void prepareChildView(View view) {
+ view.setBackgroundResource(R.drawable.rounded_corner_bg);
+
+ final FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(
+ FrameLayout.LayoutParams.MATCH_PARENT,
+ FrameLayout.LayoutParams.WRAP_CONTENT);
+ params.setMargins(
+ mCallLogMarginHorizontal,
+ mCallLogMarginTop,
+ mCallLogMarginHorizontal,
+ mCallLogMarginBottom);
+ view.setLayoutParams(params);
+
+ LinearLayout actionView =
+ (LinearLayout)view.findViewById(R.id.primary_action_view);
+ actionView.setPaddingRelative(
+ mCallLogPaddingStart,
+ mCallLogPaddingTop,
+ actionView.getPaddingEnd(),
+ mCallLogPaddingBottom);
+
+ mPreviousTranslationZ = getResources().getDimensionPixelSize(
+ R.dimen.recent_call_log_item_translation_z);
+ view.setTranslationZ(mPreviousTranslationZ);
+
+ final CallLogListItemView callLogItem =
+ (CallLogListItemView) view.findViewById(R.id.call_log_list_item);
+ // Reset the internal call log item view if it is being recycled
+ callLogItem.setTranslationX(0);
+ callLogItem.setTranslationY(0);
+ callLogItem.setAlpha(1);
+ callLogItem.setClipBounds(null);
+ setChildrenOpacity(callLogItem, 1.0f);
+
+ callLogItem.findViewById(R.id.call_log_row)
+ .setBackgroundColor(mShortCardBackgroundColor);
+ }
+
+ @Override
+ public View getChildAtPosition(MotionEvent ev) {
+ return getChildCount() > 0 ? getChildAt(0) : null;
+ }
+
+ @Override
+ public View getChildContentView(View v) {
+ return v.findViewById(R.id.call_log_list_item);
+ }
+
+ @Override
+ public void onScroll() {}
+
+ @Override
+ public boolean canChildBeDismissed(View v) {
+ return true;
+ }
+
+ @Override
+ public void onBeginDrag(View v) {
+ // We do this so the underlying ScrollView knows that it won't get
+ // the chance to intercept events anymore
+ requestDisallowInterceptTouchEvent(true);
+ }
+
+ @Override
+ public void onChildDismissed(View v) {
+ if (v != null && mOnItemSwipeListener != null) {
+ mOnItemSwipeListener.onSwipe(v);
+ }
+ }
+
+ @Override
+ public void onDragCancelled(View v) {}
+
+ @Override
+ public boolean onInterceptTouchEvent(MotionEvent ev) {
+ if (mSwipeHelper != null) {
+ return mSwipeHelper.onInterceptTouchEvent(ev) || super.onInterceptTouchEvent(ev);
+ } else {
+ return super.onInterceptTouchEvent(ev);
+ }
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent ev) {
+ if (mSwipeHelper != null) {
+ return mSwipeHelper.onTouchEvent(ev) || super.onTouchEvent(ev);
+ } else {
+ return super.onTouchEvent(ev);
+ }
+ }
+
+ public void setOnItemSwipeListener(OnItemGestureListener listener) {
+ mOnItemSwipeListener = listener;
+ }
+
+ /**
+ * Clips the card by a specified amount.
+ *
+ * @param ratioHidden A float indicating how much of each edge of the card should be
+ * clipped. If 0, the entire card is displayed. If 0.5f, each edge is hidden
+ * entirely, thus obscuring the entire card.
+ */
+ public void clipCard(float ratioHidden) {
+ final View viewToClip = getChildAt(0);
+ if (viewToClip == null) {
+ return;
+ }
+ int width = viewToClip.getWidth();
+ int height = viewToClip.getHeight();
+
+ if (ratioHidden <= 0.001f) {
+ viewToClip.setTranslationZ(mPreviousTranslationZ);
+ } else if (viewToClip.getTranslationZ() != 0){
+ mPreviousTranslationZ = viewToClip.getTranslationZ();
+ viewToClip.setTranslationZ(0);
+ }
+
+ if (ratioHidden > 0.5f) {
+ mClipRect.set(0, 0 , 0, 0);
+ } else {
+ int newLeft = (int) (ratioHidden * mCardMaxHorizontalClip);
+ int newRight = width - newLeft;
+ int newTop = (int) (ratioHidden * height);
+ int newBottom = (height - newTop);
+ mClipRect.set(newLeft, newTop, newRight, newBottom);
+
+ // Since the pane will be overlapping with the action bar, apply a vertical offset
+ // to visually center the clipped card in the viewable area;
+ int verticalOffset = -newTop / 2;
+ viewToClip.setTranslationY(verticalOffset);
+ }
+ viewToClip.setClipBounds(mClipRect);
+
+ // If the view has any children, fade them out of view.
+ final ViewGroup viewGroup = (ViewGroup) viewToClip;
+ setChildrenOpacity(viewGroup, Math.max(0, 1 - 4.5f * ratioHidden));
+ }
+
+ private void setChildrenOpacity(ViewGroup viewGroup, float alpha) {
+ final int count = viewGroup.getChildCount();
+ for (int i = 0; i < count; i++) {
+ viewGroup.getChildAt(i).setAlpha(alpha);
+ }
+ }
+ }
+}
diff --git a/src/com/android/dialer/list/SmartDialNumberListAdapter.java b/src/com/android/dialer/list/SmartDialNumberListAdapter.java
index 962d8ee..25d442e 100644
--- a/src/com/android/dialer/list/SmartDialNumberListAdapter.java
+++ b/src/com/android/dialer/list/SmartDialNumberListAdapter.java
@@ -46,6 +46,8 @@
public SmartDialNumberListAdapter(Context context) {
super(context);
+ mNameMatcher = new SmartDialNameMatcher("", SmartDialPrefix.getMap());
+
if (DEBUG) {
Log.v(TAG, "Constructing List Adapter");
}
@@ -60,12 +62,11 @@
}
if (getQueryString() == null) {
- mNameMatcher = new SmartDialNameMatcher("", SmartDialPrefix.getMap());
loader.configureQuery("");
+ mNameMatcher.setQuery("");
} else {
loader.configureQuery(getQueryString());
- mNameMatcher = new SmartDialNameMatcher(PhoneNumberUtils.normalizeNumber(
- getQueryString()), SmartDialPrefix.getMap());
+ mNameMatcher.setQuery(PhoneNumberUtils.normalizeNumber(getQueryString()));
}
}
diff --git a/src/com/android/dialer/list/SmartDialSearchFragment.java b/src/com/android/dialer/list/SmartDialSearchFragment.java
index 0efe918..4f0ce72 100644
--- a/src/com/android/dialer/list/SmartDialSearchFragment.java
+++ b/src/com/android/dialer/list/SmartDialSearchFragment.java
@@ -41,6 +41,8 @@
// Disable the direct call shortcut for the smart dial fragment, since the call button
// will already be showing anyway.
adapter.setShortcutEnabled(SmartDialNumberListAdapter.SHORTCUT_DIRECT_CALL, false);
+ adapter.setShortcutEnabled(SmartDialNumberListAdapter.SHORTCUT_ADD_NUMBER_TO_CONTACTS,
+ false);
return adapter;
}
diff --git a/src/com/android/dialer/list/SpeedDialFragment.java b/src/com/android/dialer/list/SpeedDialFragment.java
new file mode 100644
index 0000000..a04d4cc
--- /dev/null
+++ b/src/com/android/dialer/list/SpeedDialFragment.java
@@ -0,0 +1,423 @@
+/*
+ * Copyright (C) 2013 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.list;
+
+import android.animation.Animator;
+import android.animation.AnimatorSet;
+import android.animation.ObjectAnimator;
+import android.app.Activity;
+import android.app.Fragment;
+import android.app.LoaderManager;
+import android.content.CursorLoader;
+import android.content.Loader;
+import android.content.res.Resources;
+import android.database.Cursor;
+import android.graphics.Rect;
+import android.net.Uri;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
+import android.view.animation.AnimationUtils;
+import android.view.animation.LayoutAnimationController;
+import android.widget.AbsListView;
+import android.widget.AdapterView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.RelativeLayout;
+import android.widget.RelativeLayout.LayoutParams;
+
+import com.android.contacts.common.ContactPhotoManager;
+import com.android.contacts.common.ContactTileLoaderFactory;
+import com.android.contacts.common.list.ContactTileView;
+import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
+import com.android.dialer.R;
+import com.android.dialer.util.DialerUtils;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+
+/**
+ * This fragment displays the user's favorite/frequent contacts in a grid.
+ */
+public class SpeedDialFragment extends Fragment implements OnItemClickListener,
+ PhoneFavoritesTileAdapter.OnDataSetChangedForAnimationListener {
+
+ /**
+ * By default, the animation code assumes that all items in a list view are of the same height
+ * when animating new list items into view (e.g. from the bottom of the screen into view).
+ * This can cause incorrect translation offsets when a item that is larger or smaller than
+ * other list item is removed from the list. This key is used to provide the actual height
+ * of the removed object so that the actual translation appears correct to the user.
+ */
+ private static final long KEY_REMOVED_ITEM_HEIGHT = Long.MAX_VALUE;
+
+ private static final String TAG = SpeedDialFragment.class.getSimpleName();
+ private static final boolean DEBUG = false;
+
+ private int mAnimationDuration;
+
+ /**
+ * Used with LoaderManager.
+ */
+ private static int LOADER_ID_CONTACT_TILE = 1;
+
+ public interface HostInterface {
+ public void setDragDropController(DragDropController controller);
+ }
+
+ private class ContactTileLoaderListener implements LoaderManager.LoaderCallbacks<Cursor> {
+ @Override
+ public CursorLoader onCreateLoader(int id, Bundle args) {
+ if (DEBUG) Log.d(TAG, "ContactTileLoaderListener#onCreateLoader.");
+ return ContactTileLoaderFactory.createStrequentPhoneOnlyLoader(getActivity());
+ }
+
+ @Override
+ public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
+ if (DEBUG) Log.d(TAG, "ContactTileLoaderListener#onLoadFinished");
+ mContactTileAdapter.setContactCursor(data);
+ setEmptyViewVisibility(mContactTileAdapter.getCount() == 0);
+ }
+
+ @Override
+ public void onLoaderReset(Loader<Cursor> loader) {
+ if (DEBUG) Log.d(TAG, "ContactTileLoaderListener#onLoaderReset. ");
+ }
+ }
+
+ private class ContactTileAdapterListener implements ContactTileView.Listener {
+ @Override
+ public void onContactSelected(Uri contactUri, Rect targetRect) {
+ if (mPhoneNumberPickerActionListener != null) {
+ mPhoneNumberPickerActionListener.onPickPhoneNumberAction(contactUri);
+ }
+ }
+
+ @Override
+ public void onCallNumberDirectly(String phoneNumber) {
+ if (mPhoneNumberPickerActionListener != null) {
+ mPhoneNumberPickerActionListener.onCallNumberDirectly(phoneNumber);
+ }
+ }
+
+ @Override
+ public int getApproximateTileWidth() {
+ return getView().getWidth();
+ }
+ }
+
+ private class ScrollListener implements ListView.OnScrollListener {
+ @Override
+ public void onScroll(AbsListView view,
+ int firstVisibleItem, int visibleItemCount, int totalItemCount) {
+ if (mActivityScrollListener != null) {
+ mActivityScrollListener.onListFragmentScroll(firstVisibleItem, visibleItemCount,
+ totalItemCount);
+ }
+ }
+
+ @Override
+ public void onScrollStateChanged(AbsListView view, int scrollState) {
+ mActivityScrollListener.onListFragmentScrollStateChange(scrollState);
+ }
+ }
+
+ private OnPhoneNumberPickerActionListener mPhoneNumberPickerActionListener;
+
+ private OnListFragmentScrolledListener mActivityScrollListener;
+ private PhoneFavoritesTileAdapter mContactTileAdapter;
+
+ private View mParentView;
+
+ private PhoneFavoriteListView mListView;
+
+ private View mContactTileFrame;
+
+ private TileInteractionTeaserView mTileInteractionTeaserView;
+
+ private final HashMap<Long, Integer> mItemIdTopMap = new HashMap<Long, Integer>();
+ private final HashMap<Long, Integer> mItemIdLeftMap = new HashMap<Long, Integer>();
+
+ /**
+ * Layout used when there are no favorites.
+ */
+ private View mEmptyView;
+
+ private final ContactTileView.Listener mContactTileAdapterListener =
+ new ContactTileAdapterListener();
+ private final LoaderManager.LoaderCallbacks<Cursor> mContactTileLoaderListener =
+ new ContactTileLoaderListener();
+ private final ScrollListener mScrollListener = new ScrollListener();
+
+ @Override
+ public void onAttach(Activity activity) {
+ if (DEBUG) Log.d(TAG, "onAttach()");
+ super.onAttach(activity);
+
+ // Construct two base adapters which will become part of PhoneFavoriteMergedAdapter.
+ // We don't construct the resultant adapter at this moment since it requires LayoutInflater
+ // that will be available on onCreateView().
+ mContactTileAdapter = new PhoneFavoritesTileAdapter(activity, mContactTileAdapterListener,
+ this);
+ mContactTileAdapter.setPhotoLoader(ContactPhotoManager.getInstance(activity));
+ }
+
+ @Override
+ public void onCreate(Bundle savedState) {
+ if (DEBUG) Log.d(TAG, "onCreate()");
+ super.onCreate(savedState);
+
+ mAnimationDuration = getResources().getInteger(R.integer.fade_duration);
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+
+ getLoaderManager().getLoader(LOADER_ID_CONTACT_TILE).forceLoad();
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ mParentView = inflater.inflate(R.layout.speed_dial_fragment, container, false);
+
+ mListView = (PhoneFavoriteListView) mParentView.findViewById(R.id.contact_tile_list);
+ mListView.setOnItemClickListener(this);
+ mListView.setVerticalScrollBarEnabled(false);
+ mListView.setVerticalScrollbarPosition(View.SCROLLBAR_POSITION_RIGHT);
+ mListView.setScrollBarStyle(ListView.SCROLLBARS_OUTSIDE_OVERLAY);
+ mListView.getDragDropController().addOnDragDropListener(mContactTileAdapter);
+
+ final ImageView dragShadowOverlay =
+ (ImageView) getActivity().findViewById(R.id.contact_tile_drag_shadow_overlay);
+ mListView.setDragShadowOverlay(dragShadowOverlay);
+
+ final Resources resources = getResources();
+ mEmptyView = mParentView.findViewById(R.id.empty_list_view);
+ DialerUtils.configureEmptyListView(
+ mEmptyView, R.drawable.empty_speed_dial, R.string.speed_dial_empty, getResources());
+
+ mContactTileFrame = mParentView.findViewById(R.id.contact_tile_frame);
+
+ mTileInteractionTeaserView = (TileInteractionTeaserView) inflater.inflate(
+ R.layout.tile_interactions_teaser_view, mListView, false);
+
+ final LayoutAnimationController controller = new LayoutAnimationController(
+ AnimationUtils.loadAnimation(getActivity(), android.R.anim.fade_in));
+ controller.setDelay(0);
+ mListView.setLayoutAnimation(controller);
+ mListView.setAdapter(mContactTileAdapter);
+
+ mListView.setOnScrollListener(mScrollListener);
+ mListView.setFastScrollEnabled(false);
+ mListView.setFastScrollAlwaysVisible(false);
+
+ return mParentView;
+ }
+
+ public boolean hasFrequents() {
+ if (mContactTileAdapter == null) return false;
+ return mContactTileAdapter.getNumFrequents() > 0;
+ }
+
+ /* package */ void setEmptyViewVisibility(final boolean visible) {
+ final int previousVisibility = mEmptyView.getVisibility();
+ final int newVisibility = visible ? View.VISIBLE : View.GONE;
+
+ if (previousVisibility != newVisibility) {
+ final RelativeLayout.LayoutParams params = (LayoutParams) mContactTileFrame
+ .getLayoutParams();
+ params.height = visible ? LayoutParams.WRAP_CONTENT : LayoutParams.MATCH_PARENT;
+ mContactTileFrame.setLayoutParams(params);
+ mEmptyView.setVisibility(newVisibility);
+ }
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+
+ final Activity activity = getActivity();
+
+ try {
+ mActivityScrollListener = (OnListFragmentScrolledListener) activity;
+ } catch (ClassCastException e) {
+ throw new ClassCastException(activity.toString()
+ + " must implement OnListFragmentScrolledListener");
+ }
+
+ try {
+ OnDragDropListener listener = (OnDragDropListener) activity;
+ mListView.getDragDropController().addOnDragDropListener(listener);
+ ((HostInterface) activity).setDragDropController(mListView.getDragDropController());
+ } catch (ClassCastException e) {
+ throw new ClassCastException(activity.toString()
+ + " must implement OnDragDropListener and HostInterface");
+ }
+
+ try {
+ mPhoneNumberPickerActionListener = (OnPhoneNumberPickerActionListener) activity;
+ } catch (ClassCastException e) {
+ throw new ClassCastException(activity.toString()
+ + " must implement PhoneFavoritesFragment.listener");
+ }
+
+ // Use initLoader() instead of restartLoader() to refraining unnecessary reload.
+ // This method call implicitly assures ContactTileLoaderListener's onLoadFinished() will
+ // be called, on which we'll check if "all" contacts should be reloaded again or not.
+ getLoaderManager().initLoader(LOADER_ID_CONTACT_TILE, null, mContactTileLoaderListener);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * This is only effective for elements provided by {@link #mContactTileAdapter}.
+ * {@link #mContactTileAdapter} has its own logic for click events.
+ */
+ @Override
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ final int contactTileAdapterCount = mContactTileAdapter.getCount();
+ if (position <= contactTileAdapterCount) {
+ Log.e(TAG, "onItemClick() event for unexpected position. "
+ + "The position " + position + " is before \"all\" section. Ignored.");
+ }
+ }
+
+ /**
+ * Cache the current view offsets into memory. Once a relayout of views in the ListView
+ * has happened due to a dataset change, the cached offsets are used to create animations
+ * that slide views from their previous positions to their new ones, to give the appearance
+ * that the views are sliding into their new positions.
+ */
+ private void saveOffsets(int removedItemHeight) {
+ final int firstVisiblePosition = mListView.getFirstVisiblePosition();
+ if (DEBUG) {
+ Log.d(TAG, "Child count : " + mListView.getChildCount());
+ }
+ for (int i = 0; i < mListView.getChildCount(); i++) {
+ final View child = mListView.getChildAt(i);
+ final int position = firstVisiblePosition + i;
+ final long itemId = mContactTileAdapter.getItemId(position);
+ if (DEBUG) {
+ Log.d(TAG, "Saving itemId: " + itemId + " for listview child " + i + " Top: "
+ + child.getTop());
+ }
+ mItemIdTopMap.put(itemId, child.getTop());
+ mItemIdLeftMap.put(itemId, child.getLeft());
+ }
+
+ mItemIdTopMap.put(KEY_REMOVED_ITEM_HEIGHT, removedItemHeight);
+ }
+
+ /*
+ * Performs animations for the gridView
+ */
+ private void animateGridView(final long... idsInPlace) {
+ if (mItemIdTopMap.isEmpty()) {
+ // Don't do animations if the database is being queried for the first time and
+ // the previous item offsets have not been cached, or the user hasn't done anything
+ // (dragging, swiping etc) that requires an animation.
+ return;
+ }
+
+ final ViewTreeObserver observer = mListView.getViewTreeObserver();
+ observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
+ @SuppressWarnings("unchecked")
+ @Override
+ public boolean onPreDraw() {
+ observer.removeOnPreDrawListener(this);
+ final int firstVisiblePosition = mListView.getFirstVisiblePosition();
+ final AnimatorSet animSet = new AnimatorSet();
+ final ArrayList<Animator> animators = new ArrayList<Animator>();
+ for (int i = 0; i < mListView.getChildCount(); i++) {
+ final View child = mListView.getChildAt(i);
+ int position = firstVisiblePosition + i;
+
+ final long itemId = mContactTileAdapter.getItemId(position);
+
+ if (containsId(idsInPlace, itemId)) {
+ animators.add(ObjectAnimator.ofFloat(
+ child, "alpha", 0.0f, 1.0f));
+ break;
+ } else {
+ Integer startTop = mItemIdTopMap.get(itemId);
+ Integer startLeft = mItemIdLeftMap.get(itemId);
+ final int top = child.getTop();
+ final int left = child.getLeft();
+ int deltaX = 0;
+ int deltaY = 0;
+
+ if (startLeft != null) {
+ if (startLeft != left) {
+ deltaX = startLeft - left;
+ animators.add(ObjectAnimator.ofFloat(
+ child, "translationX", deltaX, 0.0f));
+ }
+ }
+
+ if (startTop != null) {
+ if (startTop != top) {
+ deltaY = startTop - top;
+ animators.add(ObjectAnimator.ofFloat(
+ child, "translationY", deltaY, 0.0f));
+ }
+ }
+
+ if (DEBUG) {
+ Log.d(TAG, "Found itemId: " + itemId + " for listview child " + i +
+ " Top: " + top +
+ " Delta: " + deltaY);
+ }
+ }
+ }
+
+ if (animators.size() > 0) {
+ animSet.setDuration(mAnimationDuration).playTogether(animators);
+ animSet.start();
+ }
+
+ mItemIdTopMap.clear();
+ mItemIdLeftMap.clear();
+ return true;
+ }
+ });
+ }
+
+ private boolean containsId(long[] ids, long target) {
+ // Linear search on array is fine because this is typically only 0-1 elements long
+ for (int i = 0; i < ids.length; i++) {
+ if (ids[i] == target) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ @Override
+ public void onDataSetChangedForAnimation(long... idsInPlace) {
+ animateGridView(idsInPlace);
+ }
+
+ @Override
+ public void cacheOffsetsForDatasetChange() {
+ saveOffsets(0);
+ }
+}
diff --git a/src/com/android/dialer/list/TileInteractionTeaserView.java b/src/com/android/dialer/list/TileInteractionTeaserView.java
index 6e70fd1..fd5ed34 100644
--- a/src/com/android/dialer/list/TileInteractionTeaserView.java
+++ b/src/com/android/dialer/list/TileInteractionTeaserView.java
@@ -31,7 +31,7 @@
private int mTextTop;
private int mAnimatedHeight = -1;
- private PhoneFavoriteMergedAdapter mAdapter;
+ private ShortcutCardsAdapter mAdapter;
public TileInteractionTeaserView(final Context context) {
this(context, null);
@@ -91,7 +91,7 @@
return prefs.getBoolean(KEY_TILE_INTERACTION_TEASER_SHOWN, true);
}
- public void setAdapter(PhoneFavoriteMergedAdapter adapter) {
+ public void setAdapter(ShortcutCardsAdapter adapter) {
mAdapter = adapter;
}
diff --git a/src/com/android/dialer/list/ViewPagerTabStrip.java b/src/com/android/dialer/list/ViewPagerTabStrip.java
new file mode 100644
index 0000000..ac16694
--- /dev/null
+++ b/src/com/android/dialer/list/ViewPagerTabStrip.java
@@ -0,0 +1,105 @@
+/*
+ * Copyright (C) 2014 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.list;
+
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Canvas;
+import android.graphics.Paint;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.LinearLayout;
+
+import com.android.dialer.R;
+
+public class ViewPagerTabStrip extends LinearLayout {
+ private int mSelectedUnderlineThickness;
+ private final Paint mSelectedUnderlinePaint;
+
+ private int mIndexForSelection;
+ private float mSelectionOffset;
+
+ public ViewPagerTabStrip(Context context) {
+ this(context, null);
+ }
+
+ public ViewPagerTabStrip(Context context, AttributeSet attrs) {
+ super(context, attrs);
+
+ final Resources res = context.getResources();
+
+ mSelectedUnderlineThickness =
+ res.getDimensionPixelSize(R.dimen.tab_selected_underline_height);
+ int underlineColor = res.getColor(R.color.tab_selected_underline_color);
+ int backgroundColor = res.getColor(R.color.actionbar_background_color);
+
+ mSelectedUnderlinePaint = new Paint();
+ mSelectedUnderlinePaint.setColor(underlineColor);
+
+ setBackgroundColor(backgroundColor);
+ setWillNotDraw(false);
+ }
+
+ /**
+ * Notifies this view that view pager has been scrolled. We save the tab index
+ * and selection offset for interpolating the position and width of selection
+ * underline.
+ */
+ void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+ mIndexForSelection = position;
+ mSelectionOffset = positionOffset;
+ invalidate();
+ }
+
+ /**
+ * Notifies this view that a new page has been selected in the view pager. We save the tab
+ * index and reset the selection offset to 0.
+ */
+ void onPageSelected(int position) {
+ mIndexForSelection = position;
+ mSelectionOffset = 0;
+ invalidate();
+ }
+
+ @Override
+ protected void onDraw(Canvas canvas) {
+ int childCount = getChildCount();
+
+ // Thick colored underline below the current selection
+ if (childCount > 0) {
+ View selectedTitle = getChildAt(mIndexForSelection);
+ int selectedLeft = selectedTitle.getLeft();
+ int selectedRight = selectedTitle.getRight();
+ if ((mSelectionOffset > 0.0f) &&
+ (mIndexForSelection < (getChildCount() - 1))) {
+ // Draw the selection partway between the tabs
+ View nextTitle = getChildAt(mIndexForSelection + 1);
+ int nextLeft = nextTitle.getLeft();
+ int nextRight = nextTitle.getRight();
+
+ selectedLeft = (int) (mSelectionOffset * nextLeft +
+ (1.0f - mSelectionOffset) * selectedLeft);
+ selectedRight = (int) (mSelectionOffset * nextRight +
+ (1.0f - mSelectionOffset) * selectedRight);
+ }
+
+ int height = getHeight();
+ canvas.drawRect(selectedLeft, height - mSelectedUnderlineThickness,
+ selectedRight, height, mSelectedUnderlinePaint);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/com/android/dialer/list/ViewPagerTabs.java b/src/com/android/dialer/list/ViewPagerTabs.java
new file mode 100644
index 0000000..7e5b594
--- /dev/null
+++ b/src/com/android/dialer/list/ViewPagerTabs.java
@@ -0,0 +1,199 @@
+package com.android.dialer.list;
+
+import android.content.Context;
+import android.content.res.ColorStateList;
+import android.content.res.TypedArray;
+import android.graphics.Outline;
+import android.support.v4.view.PagerAdapter;
+import android.support.v4.view.ViewPager;
+import android.util.AttributeSet;
+import android.util.TypedValue;
+import android.view.Gravity;
+import android.view.View;
+import android.widget.FrameLayout;
+import android.widget.HorizontalScrollView;
+import android.widget.LinearLayout;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.android.dialer.R;
+
+/**
+ * Lightweight implementation of ViewPager tabs. This looks similar to traditional actionBar tabs,
+ * but allows for the view containing the tabs to be placed anywhere on screen. Text-related
+ * attributes can also be assigned in XML - these will get propogated to the child TextViews
+ * automatically.
+ */
+public class ViewPagerTabs extends HorizontalScrollView implements ViewPager.OnPageChangeListener {
+
+ ViewPager mPager;
+ private ViewPagerTabStrip mTabStrip;
+
+ /**
+ * Linearlayout that will contain the TextViews serving as tabs. This is the only child
+ * of the parent HorizontalScrollView.
+ */
+ final int mTextStyle;
+ final ColorStateList mTextColor;
+ final int mTextSize;
+ final boolean mTextAllCaps;
+ int mPrevSelected = -1;
+ int mSidePadding;
+ Outline mOutline;
+
+ private static final int TAB_SIDE_PADDING_IN_DPS = 10;
+
+ // TODO: This should use <declare-styleable> in the future
+ private static final int[] ATTRS = new int[] {
+ android.R.attr.textSize,
+ android.R.attr.textStyle,
+ android.R.attr.textColor,
+ android.R.attr.textAllCaps
+ };
+
+ /**
+ * Simulates actionbar tab behavior by showing a toast with the tab title when long clicked.
+ */
+ private class OnTabLongClickListener implements OnLongClickListener {
+ final int mPosition;
+
+ public OnTabLongClickListener(int position) {
+ mPosition = position;
+ }
+
+ @Override
+ public boolean onLongClick(View v) {
+ final int[] screenPos = new int[2];
+ getLocationOnScreen(screenPos);
+
+ final Context context = getContext();
+ final int width = getWidth();
+ final int height = getHeight();
+ final int screenWidth = context.getResources().getDisplayMetrics().widthPixels;
+
+ Toast toast = Toast.makeText(context, mPager.getAdapter().getPageTitle(mPosition),
+ Toast.LENGTH_SHORT);
+
+ // Show the toast under the tab
+ toast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL,
+ (screenPos[0] + width / 2) - screenWidth / 2, screenPos[1] + height);
+
+ toast.show();
+ return true;
+ }
+ }
+
+ public ViewPagerTabs(Context context) {
+ this(context, null);
+ }
+
+ public ViewPagerTabs(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public ViewPagerTabs(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+ setFillViewport(true);
+
+ mSidePadding = (int) (getResources().getDisplayMetrics().density * TAB_SIDE_PADDING_IN_DPS);
+ mOutline = new Outline();
+
+ final TypedArray a = context.obtainStyledAttributes(attrs, ATTRS);
+ mTextSize = a.getDimensionPixelSize(0, 0);
+ mTextStyle = a.getInt(1, 0);
+ mTextColor = a.getColorStateList(2);
+ mTextAllCaps = a.getBoolean(3, false);
+
+ mTabStrip = new ViewPagerTabStrip(context);
+ addView(mTabStrip,
+ new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT));
+ a.recycle();
+ }
+
+ public void setViewPager(ViewPager viewPager) {
+ mPager = viewPager;
+ addTabs(mPager.getAdapter());
+ }
+
+ private void addTabs(PagerAdapter adapter) {
+ mTabStrip.removeAllViews();
+
+ final int count = adapter.getCount();
+ for (int i = 0; i < count; i++) {
+ addTab(adapter.getPageTitle(i), i);
+ }
+ }
+
+ private void addTab(CharSequence tabTitle, final int position) {
+ final TextView textView = new TextView(getContext());
+ textView.setText(tabTitle);
+ textView.setBackgroundResource(R.drawable.view_pager_tab_background);
+ textView.setGravity(Gravity.CENTER);
+ textView.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mPager.setCurrentItem(position);
+ }
+ });
+
+ textView.setOnLongClickListener(new OnTabLongClickListener(position));
+
+ // Assign various text appearance related attributes to child views.
+ if (mTextStyle > 0) {
+ textView.setTypeface(textView.getTypeface(), mTextStyle);
+ }
+ if (mTextSize > 0) {
+ textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, mTextSize);
+ }
+ if (mTextColor != null) {
+ textView.setTextColor(mTextColor);
+ }
+ textView.setAllCaps(mTextAllCaps);
+ textView.setPadding(mSidePadding, 0, mSidePadding, 0);
+ mTabStrip.addView(textView, new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT,
+ LayoutParams.MATCH_PARENT, 1));
+ // Default to the first child being selected
+ if (position == 0) {
+ mPrevSelected = 0;
+ textView.setSelected(true);
+ }
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int l, int t, int r, int b) {
+ // An outline is necessary to enable shadows
+ mOutline.setRect(l, t, r, b);
+ setOutline(mOutline);
+ super.onLayout(changed, l, t, r, b);
+ }
+
+ @Override
+ public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
+ int tabStripChildCount = mTabStrip.getChildCount();
+ if ((tabStripChildCount == 0) || (position < 0) || (position >= tabStripChildCount)) {
+ return;
+ }
+
+ mTabStrip.onPageScrolled(position, positionOffset, positionOffsetPixels);
+ smoothScrollTo(position, 0);
+ }
+
+ @Override
+ public void onPageSelected(int position) {
+ if (mPrevSelected >= 0) {
+ mTabStrip.getChildAt(mPrevSelected).setSelected(false);
+ }
+ final View selectedChild = mTabStrip.getChildAt(position);
+ selectedChild.setSelected(true);
+
+ // Update scroll position
+ final int scrollPos = selectedChild.getLeft() - (getWidth() - selectedChild.getWidth()) / 2;
+ smoothScrollTo(scrollPos, 0);
+ mPrevSelected = position;
+ }
+
+ @Override
+ public void onPageScrollStateChanged(int state) {
+ }
+}
+
diff --git a/src/com/android/dialer/util/AsyncTaskExecutors.java b/src/com/android/dialer/util/AsyncTaskExecutors.java
index 322a435..a59af3e 100644
--- a/src/com/android/dialer/util/AsyncTaskExecutors.java
+++ b/src/com/android/dialer/util/AsyncTaskExecutors.java
@@ -19,7 +19,7 @@
import android.os.AsyncTask;
import android.os.Looper;
-import com.android.contacts.common.test.NeededForTesting;
+import com.android.contacts.common.testing.NeededForTesting;
import com.google.common.base.Preconditions;
import java.util.concurrent.Executor;
diff --git a/src/com/android/dialer/util/DialerUtils.java b/src/com/android/dialer/util/DialerUtils.java
new file mode 100644
index 0000000..f1dfe20
--- /dev/null
+++ b/src/com/android/dialer/util/DialerUtils.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (C) 2014 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.util;
+
+import android.content.ActivityNotFoundException;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.res.Resources;
+import android.net.Uri;
+import android.provider.Telephony;
+import android.view.View;
+import android.widget.ImageView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import com.android.contacts.common.CallUtil;
+import com.android.dialer.R;
+
+import java.util.List;
+
+/**
+ * General purpose utility methods for the Dialer.
+ */
+public class DialerUtils {
+
+ /**
+ * Attempts to start an activity and displays a toast with the default error message if the
+ * activity is not found, instead of throwing an exception.
+ *
+ * @param context to start the activity with.
+ * @param intent to start the activity with.
+ */
+ public static void startActivityWithErrorToast(Context context, Intent intent) {
+ startActivityWithErrorToast(context, intent, R.string.activity_not_available);
+ }
+
+ /**
+ * Attempts to start an activity and displays a toast with a provided error message if the
+ * activity is not found, instead of throwing an exception.
+ *
+ * @param context to start the activity with.
+ * @param intent to start the activity with.
+ * @param msgId Resource ID of the string to display in an error message if the activity is
+ * not found.
+ */
+ public static void startActivityWithErrorToast(Context context, Intent intent, int msgId) {
+ try {
+ context.startActivity(intent);
+ } catch (ActivityNotFoundException e) {
+ Toast.makeText(context, msgId, Toast.LENGTH_SHORT).show();
+ }
+ }
+
+ /**
+ * Returns the component name to use in order to send an SMS using the default SMS application,
+ * or null if none exists.
+ */
+ public static ComponentName getSmsComponent(Context context) {
+ String smsPackage = Telephony.Sms.getDefaultSmsPackage(context);
+ if (smsPackage != null) {
+ final PackageManager packageManager = context.getPackageManager();
+ final Intent intent = new Intent(Intent.ACTION_SENDTO,
+ Uri.fromParts(CallUtil.SCHEME_SMSTO, "", null));
+ final List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(intent, 0);
+ for (ResolveInfo resolveInfo : resolveInfos) {
+ if (smsPackage.equals(resolveInfo.activityInfo.packageName)) {
+ return new ComponentName(smsPackage, resolveInfo.activityInfo.name);
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Sets the image asset and text for an empty list view (see empty_list_view.xml).
+ *
+ * @param emptyListView The empty list view.
+ * @param imageResId The resource id for the drawable to set as the image.
+ * @param strResId The resource id for the string to set as the message.
+ * @param res The resources to obtain the image and string from.
+ */
+ public static void configureEmptyListView(
+ View emptyListView, int imageResId, int strResId, Resources res) {
+ ImageView emptyListViewImage =
+ (ImageView) emptyListView.findViewById(R.id.emptyListViewImage);
+
+ emptyListViewImage.setImageDrawable(res.getDrawable(imageResId));
+ emptyListViewImage.setContentDescription(res.getString(strResId));
+
+ TextView emptyListViewMessage =
+ (TextView) emptyListView.findViewById(R.id.emptyListViewMessage);
+ emptyListViewMessage.setText(res.getString(strResId));
+ }
+}
diff --git a/src/com/android/dialer/util/ExpirableCache.java b/src/com/android/dialer/util/ExpirableCache.java
index 94ea6aa..00ebd16 100644
--- a/src/com/android/dialer/util/ExpirableCache.java
+++ b/src/com/android/dialer/util/ExpirableCache.java
@@ -18,7 +18,7 @@
import android.util.LruCache;
-import com.android.contacts.common.test.NeededForTesting;
+import com.android.contacts.common.testing.NeededForTesting;
import java.util.concurrent.atomic.AtomicInteger;
diff --git a/src/com/android/dialer/voicemail/VoicemailPlaybackFragment.java b/src/com/android/dialer/voicemail/VoicemailPlaybackFragment.java
index 1dbae65..33ae5c8 100644
--- a/src/com/android/dialer/voicemail/VoicemailPlaybackFragment.java
+++ b/src/com/android/dialer/voicemail/VoicemailPlaybackFragment.java
@@ -74,7 +74,9 @@
};
private VoicemailPlaybackPresenter mPresenter;
- private ScheduledExecutorService mScheduledExecutorService;
+ private static int mMediaPlayerRefCount = 0;
+ private static MediaPlayerProxy mMediaPlayerInstance;
+ private static ScheduledExecutorService mScheduledExecutorService;
private View mPlaybackLayout;
@Override
@@ -87,7 +89,6 @@
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
- mScheduledExecutorService = createScheduledExecutorService();
Bundle arguments = getArguments();
Preconditions.checkNotNull(arguments, "fragment must be started with arguments");
Uri voicemailUri = arguments.getParcelable(EXTRA_VOICEMAIL_URI);
@@ -99,8 +100,8 @@
powerManager.newWakeLock(
PowerManager.SCREEN_DIM_WAKE_LOCK, getClass().getSimpleName());
mPresenter = new VoicemailPlaybackPresenter(createPlaybackViewImpl(),
- createMediaPlayer(mScheduledExecutorService), voicemailUri,
- mScheduledExecutorService, startPlayback,
+ getMediaPlayerInstance(), voicemailUri,
+ getScheduledExecutorServiceInstance(), startPlayback,
AsyncTaskExecutors.createAsyncTaskExecutor(), wakeLock);
mPresenter.onCreate(savedInstanceState);
}
@@ -113,8 +114,8 @@
@Override
public void onDestroy() {
+ shutdownMediaPlayer();
mPresenter.onDestroy();
- mScheduledExecutorService.shutdown();
super.onDestroy();
}
@@ -129,12 +130,36 @@
mPlaybackLayout);
}
- private MediaPlayerProxy createMediaPlayer(ExecutorService executorService) {
- return VariableSpeed.createVariableSpeed(executorService);
+ private static synchronized MediaPlayerProxy getMediaPlayerInstance() {
+ ++mMediaPlayerRefCount;
+ if (mMediaPlayerInstance == null) {
+ mMediaPlayerInstance = VariableSpeed.createVariableSpeed(
+ getScheduledExecutorServiceInstance());
+ }
+ return mMediaPlayerInstance;
}
- private ScheduledExecutorService createScheduledExecutorService() {
- return Executors.newScheduledThreadPool(NUMBER_OF_THREADS_IN_POOL);
+ private static synchronized ScheduledExecutorService getScheduledExecutorServiceInstance() {
+ if (mScheduledExecutorService == null) {
+ mScheduledExecutorService = Executors.newScheduledThreadPool(
+ NUMBER_OF_THREADS_IN_POOL);
+ }
+ return mScheduledExecutorService;
+ }
+
+ private static synchronized void shutdownMediaPlayer() {
+ --mMediaPlayerRefCount;
+ if (mMediaPlayerRefCount > 0) {
+ return;
+ }
+ if (mScheduledExecutorService != null) {
+ mScheduledExecutorService.shutdown();
+ mScheduledExecutorService = null;
+ }
+ if (mMediaPlayerInstance != null) {
+ mMediaPlayerInstance.release();
+ mMediaPlayerInstance = null;
+ }
}
/**
@@ -398,8 +423,14 @@
getAudioManager().setSpeakerphoneOn(on);
if (on) {
mPlaybackSpeakerphone.setImageResource(R.drawable.ic_speakerphone_on);
+ // Speaker is now on, tapping button will turn it off.
+ mPlaybackSpeakerphone.setContentDescription(
+ mApplicationContext.getString(R.string.voicemail_speaker_off));
} else {
mPlaybackSpeakerphone.setImageResource(R.drawable.ic_speakerphone_off);
+ // Speaker is now off, tapping button will turn it on.
+ mPlaybackSpeakerphone.setContentDescription(
+ mApplicationContext.getString(R.string.voicemail_speaker_on));
}
}
diff --git a/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java b/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
index ebda0eb..085ef66 100644
--- a/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
+++ b/src/com/android/dialer/voicemail/VoicemailPlaybackPresenter.java
@@ -35,6 +35,7 @@
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
+import java.util.concurrent.RejectedExecutionException;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.TimeUnit;
@@ -311,6 +312,7 @@
mPlayer.setDataSource(mView.getDataSourceContext(), mVoicemailUri);
mPlayer.setAudioStreamType(PLAYBACK_STREAM);
mPlayer.prepare();
+ mDuration.set(mPlayer.getDuration());
return null;
} catch (Exception e) {
return e;
@@ -344,7 +346,7 @@
mView.setSpeakerPhoneOn(mView.isSpeakerPhoneOn());
mView.setRateDecreaseButtonListener(createRateDecreaseListener());
mView.setRateIncreaseButtonListener(createRateIncreaseListener());
- mView.setClipPosition(0, mPlayer.getDuration());
+ mView.setClipPosition(0, mDuration.get());
mView.playbackStopped();
// Always disable on stop.
mView.disableProximitySensor();
@@ -363,6 +365,10 @@
}
public void onDestroy() {
+ if (mPrepareTask != null) {
+ mPrepareTask.cancel(false);
+ mPrepareTask = null;
+ }
mPlayer.release();
if (mFetchResultHandler != null) {
mFetchResultHandler.destroy();
@@ -430,49 +436,67 @@
}
}
+ private class AsyncPrepareTask extends AsyncTask<Void, Void, Exception> {
+ private int mClipPositionInMillis;
+
+ AsyncPrepareTask(int clipPositionInMillis) {
+ mClipPositionInMillis = clipPositionInMillis;
+ }
+
+ @Override
+ public Exception doInBackground(Void... params) {
+ try {
+ if (!mPlayer.isReadyToPlay()) {
+ mPlayer.reset();
+ mPlayer.setDataSource(mView.getDataSourceContext(), mVoicemailUri);
+ mPlayer.setAudioStreamType(PLAYBACK_STREAM);
+ mPlayer.prepare();
+ }
+ return null;
+ } catch (Exception e) {
+ return e;
+ }
+ }
+
+ @Override
+ public void onPostExecute(Exception exception) {
+ mPrepareTask = null;
+ if (exception == null) {
+ final int duration = mPlayer.getDuration();
+ mDuration.set(duration);
+ int startPosition =
+ constrain(mClipPositionInMillis, 0, duration);
+ mPlayer.seekTo(startPosition);
+ mView.setClipPosition(startPosition, duration);
+ try {
+ // Can throw RejectedExecutionException
+ mPlayer.start();
+ mView.playbackStarted();
+ if (!mWakeLock.isHeld()) {
+ mWakeLock.acquire();
+ }
+ // Only enable if we are not currently using the speaker phone.
+ if (!mView.isSpeakerPhoneOn()) {
+ mView.enableProximitySensor();
+ }
+ // Can throw RejectedExecutionException
+ mPositionUpdater.startUpdating(startPosition, duration);
+ } catch (RejectedExecutionException e) {
+ handleError(e);
+ }
+ } else {
+ handleError(exception);
+ }
+ }
+ }
+
private void resetPrepareStartPlaying(final int clipPositionInMillis) {
if (mPrepareTask != null) {
mPrepareTask.cancel(false);
+ mPrepareTask = null;
}
mPrepareTask = mAsyncTaskExecutor.submit(Tasks.RESET_PREPARE_START_MEDIA_PLAYER,
- new AsyncTask<Void, Void, Exception>() {
- @Override
- public Exception doInBackground(Void... params) {
- try {
- mPlayer.reset();
- mPlayer.setDataSource(mView.getDataSourceContext(), mVoicemailUri);
- mPlayer.setAudioStreamType(PLAYBACK_STREAM);
- mPlayer.prepare();
- return null;
- } catch (Exception e) {
- return e;
- }
- }
-
- @Override
- public void onPostExecute(Exception exception) {
- mPrepareTask = null;
- if (exception == null) {
- mDuration.set(mPlayer.getDuration());
- int startPosition =
- constrain(clipPositionInMillis, 0, mDuration.get());
- mView.setClipPosition(startPosition, mDuration.get());
- mPlayer.seekTo(startPosition);
- mPlayer.start();
- mView.playbackStarted();
- if (!mWakeLock.isHeld()) {
- mWakeLock.acquire();
- }
- // Only enable if we are not currently using the speaker phone.
- if (!mView.isSpeakerPhoneOn()) {
- mView.enableProximitySensor();
- }
- mPositionUpdater.startUpdating(startPosition, mDuration.get());
- } else {
- handleError(exception);
- }
- }
- });
+ new AsyncPrepareTask(clipPositionInMillis));
}
private void handleError(Exception e) {
@@ -598,6 +622,7 @@
synchronized (mLock) {
if (mScheduledFuture != null) {
mScheduledFuture.cancel(false);
+ mScheduledFuture = null;
}
mScheduledFuture = mExecutorService.scheduleAtFixedRate(this, 0, mPeriodMillis,
TimeUnit.MILLISECONDS);
@@ -620,6 +645,7 @@
}
if (mPrepareTask != null) {
mPrepareTask.cancel(false);
+ mPrepareTask = null;
}
if (mWakeLock.isHeld()) {
mWakeLock.release();
diff --git a/src/com/android/dialer/widget/ActionBarController.java b/src/com/android/dialer/widget/ActionBarController.java
new file mode 100644
index 0000000..4f1e2e6
--- /dev/null
+++ b/src/com/android/dialer/widget/ActionBarController.java
@@ -0,0 +1,237 @@
+package com.android.dialer.widget;
+
+import com.google.common.annotations.VisibleForTesting;
+
+import android.animation.ValueAnimator;
+import android.animation.ValueAnimator.AnimatorUpdateListener;
+import android.os.Bundle;
+import android.util.Log;
+
+import com.android.dialer.DialtactsActivity;
+import com.android.phone.common.animation.AnimUtils;
+import com.android.phone.common.animation.AnimUtils.AnimationCallback;
+
+/**
+ * Controls the various animated properties of the actionBar: showing/hiding, fading/revealing,
+ * and collapsing/expanding, and assigns suitable properties to the actionBar based on the
+ * current state of the UI.
+ */
+public class ActionBarController {
+ public static final boolean DEBUG = DialtactsActivity.DEBUG;
+ public static final String TAG = "ActionBarController";
+ private static final String KEY_IS_SLID_UP = "key_actionbar_is_slid_up";
+ private static final String KEY_IS_FADED_OUT = "key_actionbar_is_faded_out";
+ private static final String KEY_IS_EXPANDED = "key_actionbar_is_expanded";
+
+ private ActivityUi mActivityUi;
+ private SearchEditTextLayout mSearchBox;
+
+ private boolean mIsActionBarSlidUp;
+
+ private final AnimationCallback mFadeOutCallback = new AnimationCallback() {
+ @Override
+ public void onAnimationEnd() {
+ slideActionBarUp(false);
+ }
+
+ @Override
+ public void onAnimationCancel() {
+ slideActionBarUp(false);
+ }
+ };
+
+ public interface ActivityUi {
+ public boolean isInSearchUi();
+ public boolean hasSearchQuery();
+ public boolean shouldShowActionBar();
+ public int getActionBarHeight();
+ public int getActionBarHideOffset();
+ public void setActionBarHideOffset(int hideOffset);
+ }
+
+ public ActionBarController(ActivityUi activityUi, SearchEditTextLayout searchBox) {
+ mActivityUi = activityUi;
+ mSearchBox = searchBox;
+ }
+
+ /**
+ * @return The offset the action bar is being translated upwards by
+ */
+ public int getHideOffset() {
+ return mActivityUi.getActionBarHideOffset();
+ }
+
+ /**
+ * @return Whether or not the action bar is currently showing (both slid down and visible)
+ */
+ public boolean isActionBarShowing() {
+ return !mIsActionBarSlidUp && !mSearchBox.isFadedOut();
+ }
+
+ /**
+ * Called when the user has tapped on the collapsed search box, to start a new search query.
+ */
+ public void onSearchBoxTapped() {
+ if (DEBUG) {
+ Log.d(TAG, "OnSearchBoxTapped: isInSearchUi " + mActivityUi.isInSearchUi());
+ }
+ if (!mActivityUi.isInSearchUi()) {
+ mSearchBox.expand(true /* animate */, true /* requestFocus */);
+ }
+ }
+
+ /**
+ * Called when search UI has been exited for some reason.
+ */
+ public void onSearchUiExited() {
+ if (DEBUG) {
+ Log.d(TAG, "OnSearchUIExited: isExpanded " + mSearchBox.isExpanded()
+ + " isFadedOut: " + mSearchBox.isFadedOut()
+ + " shouldShowActionBar: " + mActivityUi.shouldShowActionBar());
+ }
+ if (mSearchBox.isExpanded()) {
+ mSearchBox.collapse(true /* animate */);
+ }
+ if (mSearchBox.isFadedOut()) {
+ mSearchBox.fadeIn();
+ }
+
+ if (mActivityUi.shouldShowActionBar()) {
+ slideActionBarDown(false /* animate */);
+ } else {
+ slideActionBarUp(false /* animate */);
+ }
+ }
+
+ /**
+ * Called to indicate that the user is trying to hide the dialpad. Should be called before
+ * any state changes have actually occurred.
+ */
+ public void onDialpadDown() {
+ if (DEBUG) {
+ Log.d(TAG, "OnDialpadDown: isInSearchUi " + mActivityUi.isInSearchUi()
+ + " hasSearchQuery: " + mActivityUi.hasSearchQuery()
+ + " isFadedOut: " + mSearchBox.isFadedOut()
+ + " isExpanded: " + mSearchBox.isExpanded());
+ }
+ if (mActivityUi.isInSearchUi()) {
+ if (mActivityUi.hasSearchQuery()) {
+ if (mSearchBox.isFadedOut()) {
+ mSearchBox.setVisible(true);
+ }
+ if (!mSearchBox.isExpanded()) {
+ mSearchBox.expand(false /* animate */, false /* requestFocus */);
+ }
+ slideActionBarDown(true /* animate */);
+ } else {
+ mSearchBox.fadeIn();
+ }
+ }
+ }
+
+ /**
+ * Called to indicate that the user is trying to show the dialpad. Should be called before
+ * any state changes have actually occurred.
+ */
+ public void onDialpadUp() {
+ if (DEBUG) {
+ Log.d(TAG, "OnDialpadUp: isInSearchUi " + mActivityUi.isInSearchUi());
+ }
+ if (mActivityUi.isInSearchUi()) {
+ slideActionBarUp(true);
+ } else {
+ // From the lists fragment
+ mSearchBox.fadeOut(mFadeOutCallback);
+ }
+ }
+
+ public void slideActionBarUp(boolean animate) {
+ if (DEBUG) {
+ Log.d(TAG, "Sliding actionBar up - animate: " + animate);
+ }
+ if (animate) {
+ ValueAnimator animator = ValueAnimator.ofFloat(0, 1);
+ animator.addUpdateListener(new AnimatorUpdateListener() {
+ @Override
+ public void onAnimationUpdate(ValueAnimator animation) {
+ final float value = (float) animation.getAnimatedValue();
+ mActivityUi.setActionBarHideOffset(
+ (int) (mActivityUi.getActionBarHeight() * value));
+ }
+ });
+ animator.start();
+ } else {
+ mActivityUi.setActionBarHideOffset(mActivityUi.getActionBarHeight());
+ }
+ mIsActionBarSlidUp = true;
+ }
+
+ public void slideActionBarDown(boolean animate) {
+ if (DEBUG) {
+ Log.d(TAG, "Sliding actionBar down - animate: " + animate);
+ }
+ if (animate) {
+ ValueAnimator animator = ValueAnimator.ofFloat(1, 0);
+ animator.addUpdateListener(new AnimatorUpdateListener() {
+ @Override
+ public void onAnimationUpdate(ValueAnimator animation) {
+ final float value = (float) animation.getAnimatedValue();
+ mActivityUi.setActionBarHideOffset(
+ (int) (mActivityUi.getActionBarHeight() * value));
+ }
+ });
+ animator.start();
+ } else {
+ mActivityUi.setActionBarHideOffset(0);
+ }
+ mIsActionBarSlidUp = false;
+ }
+
+ public void setAlpha(float alphaValue) {
+ mSearchBox.animate().alpha(alphaValue).start();
+ }
+
+ /**
+ * Saves the current state of the action bar into a provided {@link Bundle}
+ */
+ public void saveInstanceState(Bundle outState) {
+ outState.putBoolean(KEY_IS_SLID_UP, mIsActionBarSlidUp);
+ outState.putBoolean(KEY_IS_FADED_OUT, mSearchBox.isFadedOut());
+ outState.putBoolean(KEY_IS_EXPANDED, mSearchBox.isExpanded());
+ }
+
+ /**
+ * Restores the action bar state from a provided {@link Bundle}
+ */
+ public void restoreInstanceState(Bundle inState) {
+ mIsActionBarSlidUp = inState.getBoolean(KEY_IS_SLID_UP);
+ if (mIsActionBarSlidUp) {
+ slideActionBarUp(false);
+ } else {
+ slideActionBarDown(false);
+ }
+
+ final boolean isSearchBoxFadedOut = inState.getBoolean(KEY_IS_FADED_OUT);
+ if (isSearchBoxFadedOut) {
+ if (!mSearchBox.isFadedOut()) {
+ mSearchBox.setVisible(false);
+ }
+ } else if (mSearchBox.isFadedOut()) {
+ mSearchBox.setVisible(true);
+ }
+
+ final boolean isSearchBoxExpanded = inState.getBoolean(KEY_IS_EXPANDED);
+ if (isSearchBoxExpanded) {
+ if (!mSearchBox.isExpanded()) {
+ mSearchBox.expand(false, false);
+ }
+ } else if (mSearchBox.isExpanded()) {
+ mSearchBox.collapse(false);
+ }
+ }
+
+ @VisibleForTesting
+ public boolean getIsActionBarSlidUp() {
+ return mIsActionBarSlidUp;
+ }
+}
diff --git a/src/com/android/dialer/widget/OverlappingPaneLayout.java b/src/com/android/dialer/widget/OverlappingPaneLayout.java
new file mode 100644
index 0000000..0b11e88
--- /dev/null
+++ b/src/com/android/dialer/widget/OverlappingPaneLayout.java
@@ -0,0 +1,1196 @@
+/*
+ * 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.widget;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.PixelFormat;
+import android.graphics.Rect;
+import android.graphics.drawable.Drawable;
+import android.os.Build;
+import android.os.Parcel;
+import android.os.Parcelable;
+import android.support.v4.view.AccessibilityDelegateCompat;
+import android.support.v4.view.MotionEventCompat;
+import android.support.v4.view.ViewCompat;
+import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewParent;
+import android.view.accessibility.AccessibilityEvent;
+
+/**
+ * A custom layout that aligns its child views vertically as two panes, and allows for the bottom
+ * pane to be dragged upwards to overlap and hide the top pane. This layout is adapted from
+ * {@link android.support.v4.widget.SlidingPaneLayout}.
+ */
+public class OverlappingPaneLayout extends ViewGroup {
+ private static final String TAG = "SlidingPaneLayout";
+ private static final boolean DEBUG = false;
+
+ /**
+ * Default size of the overhang for a pane in the open state.
+ * At least this much of a sliding pane will remain visible.
+ * This indicates that there is more content available and provides
+ * a "physical" edge to grab to pull it closed.
+ */
+ private static final int DEFAULT_OVERHANG_SIZE = 32; // dp;
+
+ /**
+ * If no fade color is given by default it will fade to 80% gray.
+ */
+ private static final int DEFAULT_FADE_COLOR = 0xcccccccc;
+
+ /**
+ * Minimum velocity that will be detected as a fling
+ */
+ private static final int MIN_FLING_VELOCITY = 400; // dips per second
+
+ /**
+ * The size of the overhang in pixels.
+ * This is the minimum section of the sliding panel that will
+ * be visible in the open state to allow for a closing drag.
+ */
+ private final int mOverhangSize;
+
+ /**
+ * True if a panel can slide with the current measurements
+ */
+ private boolean mCanSlide;
+
+ /**
+ * The child view that can slide, if any.
+ */
+ private View mSlideableView;
+
+ /**
+ * The view that can be used to start the drag with.
+ */
+ private View mCapturableView;
+
+ /**
+ * How far the panel is offset from its closed position.
+ * range [0, 1] where 0 = closed, 1 = open.
+ */
+ private float mSlideOffset;
+
+ /**
+ * How far the panel is offset from its closed position, in pixels.
+ * range [0, {@link #mSlideRange}] where 0 is completely closed.
+ */
+ private int mSlideOffsetPx;
+
+ /**
+ * How far in pixels the slideable panel may move.
+ */
+ private int mSlideRange;
+
+ /**
+ * A panel view is locked into internal scrolling or another condition that
+ * is preventing a drag.
+ */
+ private boolean mIsUnableToDrag;
+
+ /**
+ * Tracks whether or not a child view is in the process of a nested scroll.
+ */
+ private boolean mIsInNestedScroll;
+
+ /**
+ * Indicates that the layout is currently in the process of a nested pre-scroll operation where
+ * the child scrolling view is being dragged downwards, and still has the ability to consume
+ * scroll events itself. If so, we should open the pane up to the maximum offset defined in
+ * {@link #mIntermediateOffset}, and no further, so that the child view can continue performing
+ * its own scroll.
+ */
+ private boolean mInNestedPreScrollDownwards = false;
+
+ /**
+ * Indicates whether or not a nested scrolling child is able to scroll internally at this point
+ * in time.
+ */
+ private boolean mChildCannotConsumeScroll;
+
+ /**
+ * Stores an offset used to represent a point somewhere in between the panel's fully closed
+ * state and fully opened state where the panel can be temporarily pinned or opened up to
+ * during scrolling.
+ */
+ private int mIntermediateOffset = 0;
+
+ private float mInitialMotionX;
+ private float mInitialMotionY;
+
+ private PanelSlideListener mPanelSlideListener;
+
+ private final ViewDragHelper mDragHelper;
+
+ /**
+ * Stores whether or not the pane was open the last time it was slideable.
+ * If open/close operations are invoked this state is modified. Used by
+ * instance state save/restore.
+ */
+ private boolean mPreservedOpenState;
+ private boolean mFirstLayout = true;
+
+ private final Rect mTmpRect = new Rect();
+
+ /**
+ * Listener for monitoring events about sliding panes.
+ */
+ public interface PanelSlideListener {
+ /**
+ * Called when a sliding pane's position changes.
+ * @param panel The child view that was moved
+ * @param slideOffset The new offset of this sliding pane within its range, from 0-1
+ */
+ public void onPanelSlide(View panel, float slideOffset);
+ /**
+ * Called when a sliding pane becomes slid completely open. The pane may or may not
+ * be interactive at this point depending on how much of the pane is visible.
+ * @param panel The child view that was slid to an open position, revealing other panes
+ */
+ public void onPanelOpened(View panel);
+
+ /**
+ * Called when a sliding pane becomes slid completely closed. The pane is now guaranteed
+ * to be interactive. It may now obscure other views in the layout.
+ * @param panel The child view that was slid to a closed position
+ */
+ public void onPanelClosed(View panel);
+ }
+
+ public OverlappingPaneLayout(Context context) {
+ this(context, null);
+ }
+
+ public OverlappingPaneLayout(Context context, AttributeSet attrs) {
+ this(context, attrs, 0);
+ }
+
+ public OverlappingPaneLayout(Context context, AttributeSet attrs, int defStyle) {
+ super(context, attrs, defStyle);
+
+ final float density = context.getResources().getDisplayMetrics().density;
+ mOverhangSize = (int) (DEFAULT_OVERHANG_SIZE * density + 0.5f);
+
+ setWillNotDraw(false);
+
+ ViewCompat.setAccessibilityDelegate(this, new AccessibilityDelegate());
+ ViewCompat.setImportantForAccessibility(this, ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES);
+
+ mDragHelper = ViewDragHelper.create(this, 0.5f, new DragHelperCallback());
+ mDragHelper.setMinVelocity(MIN_FLING_VELOCITY * density);
+ }
+
+ /**
+ * Set an offset, somewhere in between the panel's fully closed state and fully opened state,
+ * where the panel can be temporarily pinned or opened up to.
+ *
+ * @param offset Offset in pixels
+ */
+ public void setIntermediatePinnedOffset(int offset) {
+ mIntermediateOffset = offset;
+ }
+
+ /**
+ * Set the view that can be used to start dragging the sliding pane.
+ */
+ public void setCapturableView(View capturableView) {
+ mCapturableView = capturableView;
+ }
+
+ public void setPanelSlideListener(PanelSlideListener listener) {
+ mPanelSlideListener = listener;
+ }
+
+ void dispatchOnPanelSlide(View panel) {
+ if (mPanelSlideListener != null) {
+ mPanelSlideListener.onPanelSlide(panel, mSlideOffset);
+ }
+ }
+
+ void dispatchOnPanelOpened(View panel) {
+ if (mPanelSlideListener != null) {
+ mPanelSlideListener.onPanelOpened(panel);
+ }
+ sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
+ }
+
+ void dispatchOnPanelClosed(View panel) {
+ if (mPanelSlideListener != null) {
+ mPanelSlideListener.onPanelClosed(panel);
+ }
+ sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
+ }
+
+ void updateObscuredViewsVisibility(View panel) {
+ final int startBound = getPaddingTop();
+ final int endBound = getHeight() - getPaddingBottom();
+
+ final int leftBound = getPaddingLeft();
+ final int rightBound = getWidth() - getPaddingRight();
+ final int left;
+ final int right;
+ final int top;
+ final int bottom;
+ if (panel != null && viewIsOpaque(panel)) {
+ left = panel.getLeft();
+ right = panel.getRight();
+ top = panel.getTop();
+ bottom = panel.getBottom();
+ } else {
+ left = right = top = bottom = 0;
+ }
+
+ for (int i = 0, childCount = getChildCount(); i < childCount; i++) {
+ final View child = getChildAt(i);
+
+ if (child == panel) {
+ // There are still more children above the panel but they won't be affected.
+ break;
+ }
+
+ final int clampedChildLeft = Math.max(leftBound, child.getLeft());
+ final int clampedChildRight = Math.min(rightBound, child.getRight());
+ final int clampedChildTop = Math.max(startBound, child.getTop());
+ final int clampedChildBottom = Math.min(endBound, child.getBottom());
+
+ final int vis;
+ if (clampedChildLeft >= left && clampedChildTop >= top &&
+ clampedChildRight <= right && clampedChildBottom <= bottom) {
+ vis = INVISIBLE;
+ } else {
+ vis = VISIBLE;
+ }
+ child.setVisibility(vis);
+ }
+ }
+
+ void setAllChildrenVisible() {
+ for (int i = 0, childCount = getChildCount(); i < childCount; i++) {
+ final View child = getChildAt(i);
+ if (child.getVisibility() == INVISIBLE) {
+ child.setVisibility(VISIBLE);
+ }
+ }
+ }
+
+ private static boolean viewIsOpaque(View v) {
+ if (ViewCompat.isOpaque(v)) return true;
+
+ final Drawable bg = v.getBackground();
+ if (bg != null) {
+ return bg.getOpacity() == PixelFormat.OPAQUE;
+ }
+ return false;
+ }
+
+ @Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+ mFirstLayout = true;
+ }
+
+ @Override
+ protected void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ mFirstLayout = true;
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+
+ int widthMode = MeasureSpec.getMode(widthMeasureSpec);
+ int widthSize = MeasureSpec.getSize(widthMeasureSpec);
+ int heightMode = MeasureSpec.getMode(heightMeasureSpec);
+ int heightSize = MeasureSpec.getSize(heightMeasureSpec);
+
+ if (widthMode != MeasureSpec.EXACTLY) {
+ if (isInEditMode()) {
+ // Don't crash the layout editor. Consume all of the space if specified
+ // or pick a magic number from thin air otherwise.
+ // TODO Better communication with tools of this bogus state.
+ // It will crash on a real device.
+ if (widthMode == MeasureSpec.AT_MOST) {
+ widthMode = MeasureSpec.EXACTLY;
+ } else if (widthMode == MeasureSpec.UNSPECIFIED) {
+ widthMode = MeasureSpec.EXACTLY;
+ widthSize = 300;
+ }
+ } else {
+ throw new IllegalStateException("Width must have an exact value or MATCH_PARENT");
+ }
+ } else if (heightMode == MeasureSpec.UNSPECIFIED) {
+ if (isInEditMode()) {
+ // Don't crash the layout editor. Pick a magic number from thin air instead.
+ // TODO Better communication with tools of this bogus state.
+ // It will crash on a real device.
+ if (heightMode == MeasureSpec.UNSPECIFIED) {
+ heightMode = MeasureSpec.AT_MOST;
+ heightSize = 300;
+ }
+ } else {
+ throw new IllegalStateException("Height must not be UNSPECIFIED");
+ }
+ }
+
+ int layoutWidth = 0;
+ int maxLayoutWidth = -1;
+ switch (widthMode) {
+ case MeasureSpec.EXACTLY:
+ layoutWidth = maxLayoutWidth = widthSize - getPaddingLeft() - getPaddingRight();
+ break;
+ case MeasureSpec.AT_MOST:
+ maxLayoutWidth = widthSize - getPaddingLeft() - getPaddingRight();
+ break;
+ }
+
+ float weightSum = 0;
+ boolean canSlide = false;
+ final int heightAvailable = heightSize - getPaddingTop() - getPaddingBottom();
+ int heightRemaining = heightAvailable;
+ final int childCount = getChildCount();
+
+ if (childCount > 2) {
+ Log.e(TAG, "onMeasure: More than two child views are not supported.");
+ }
+
+ // We'll find the current one below.
+ mSlideableView = null;
+
+ // First pass. Measure based on child LayoutParams width/height.
+ // Weight will incur a second pass.
+ for (int i = 0; i < childCount; i++) {
+ final View child = getChildAt(i);
+ final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+
+ if (child.getVisibility() == GONE) {
+ continue;
+ }
+
+ if (lp.weight > 0) {
+ weightSum += lp.weight;
+
+ // If we have no height, weight is the only contributor to the final size.
+ // Measure this view on the weight pass only.
+ if (lp.height == 0) continue;
+ }
+
+ int childHeightSpec;
+ final int verticalMargin = lp.topMargin + lp.bottomMargin;
+ if (lp.height == LayoutParams.WRAP_CONTENT) {
+ childHeightSpec = MeasureSpec.makeMeasureSpec(heightAvailable - verticalMargin,
+ MeasureSpec.AT_MOST);
+ } else if (lp.height == LayoutParams.MATCH_PARENT) {
+ childHeightSpec = MeasureSpec.makeMeasureSpec(heightAvailable - verticalMargin,
+ MeasureSpec.EXACTLY);
+ } else {
+ childHeightSpec = MeasureSpec.makeMeasureSpec(lp.height, MeasureSpec.EXACTLY);
+ }
+
+ int childWidthSpec;
+ if (lp.width == LayoutParams.WRAP_CONTENT) {
+ childWidthSpec = MeasureSpec.makeMeasureSpec(maxLayoutWidth, MeasureSpec.AT_MOST);
+ } else if (lp.width == LayoutParams.MATCH_PARENT) {
+ childWidthSpec = MeasureSpec.makeMeasureSpec(maxLayoutWidth, MeasureSpec.EXACTLY);
+ } else {
+ childWidthSpec = MeasureSpec.makeMeasureSpec(lp.width, MeasureSpec.EXACTLY);
+ }
+
+ child.measure(childWidthSpec, childHeightSpec);
+ final int childWidth = child.getMeasuredWidth();
+ final int childHeight = child.getMeasuredHeight();
+
+ if (widthMode == MeasureSpec.AT_MOST && childWidth > layoutWidth) {
+ layoutWidth = Math.min(childWidth, maxLayoutWidth);
+ }
+
+ heightRemaining -= childHeight;
+ canSlide |= lp.slideable = heightRemaining < 0;
+ if (lp.slideable) {
+ mSlideableView = child;
+ }
+ }
+
+ // Resolve weight and make sure non-sliding panels are smaller than the full screen.
+ if (canSlide || weightSum > 0) {
+ final int fixedPanelHeightLimit = heightAvailable - mOverhangSize;
+
+ for (int i = 0; i < childCount; i++) {
+ final View child = getChildAt(i);
+
+ if (child.getVisibility() == GONE) {
+ continue;
+ }
+
+ final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+
+ if (child.getVisibility() == GONE) {
+ continue;
+ }
+
+ final boolean skippedFirstPass = lp.height == 0 && lp.weight > 0;
+ final int measuredHeight = skippedFirstPass ? 0 : child.getMeasuredHeight();
+ if (canSlide && child != mSlideableView) {
+ if (lp.height < 0 && (measuredHeight > fixedPanelHeightLimit || lp.weight > 0)) {
+ // Fixed panels in a sliding configuration should
+ // be clamped to the fixed panel limit.
+ final int childWidthSpec;
+ if (skippedFirstPass) {
+ // Do initial width measurement if we skipped measuring this view
+ // the first time around.
+ if (lp.width == LayoutParams.WRAP_CONTENT) {
+ childWidthSpec = MeasureSpec.makeMeasureSpec(maxLayoutWidth,
+ MeasureSpec.AT_MOST);
+ } else if (lp.height == LayoutParams.MATCH_PARENT) {
+ childWidthSpec = MeasureSpec.makeMeasureSpec(maxLayoutWidth,
+ MeasureSpec.EXACTLY);
+ } else {
+ childWidthSpec = MeasureSpec.makeMeasureSpec(lp.width,
+ MeasureSpec.EXACTLY);
+ }
+ } else {
+ childWidthSpec = MeasureSpec.makeMeasureSpec(
+ child.getMeasuredWidth(), MeasureSpec.EXACTLY);
+ }
+ final int childHeightSpec = MeasureSpec.makeMeasureSpec(
+ fixedPanelHeightLimit, MeasureSpec.EXACTLY);
+ child.measure(childWidthSpec, childHeightSpec);
+ }
+ } else if (lp.weight > 0) {
+ int childWidthSpec;
+ if (lp.height == 0) {
+ // This was skipped the first time; figure out a real width spec.
+ if (lp.width == LayoutParams.WRAP_CONTENT) {
+ childWidthSpec = MeasureSpec.makeMeasureSpec(maxLayoutWidth,
+ MeasureSpec.AT_MOST);
+ } else if (lp.width == LayoutParams.MATCH_PARENT) {
+ childWidthSpec = MeasureSpec.makeMeasureSpec(maxLayoutWidth,
+ MeasureSpec.EXACTLY);
+ } else {
+ childWidthSpec = MeasureSpec.makeMeasureSpec(lp.width,
+ MeasureSpec.EXACTLY);
+ }
+ } else {
+ childWidthSpec = MeasureSpec.makeMeasureSpec(
+ child.getMeasuredWidth(), MeasureSpec.EXACTLY);
+ }
+
+ if (canSlide) {
+ // Consume available space
+ final int verticalMargin = lp.topMargin + lp.bottomMargin;
+ final int newHeight = heightAvailable - verticalMargin;
+ final int childHeightSpec = MeasureSpec.makeMeasureSpec(
+ newHeight, MeasureSpec.EXACTLY);
+ if (measuredHeight != newHeight) {
+ child.measure(childWidthSpec, childHeightSpec);
+ }
+ } else {
+ // Distribute the extra width proportionally similar to LinearLayout
+ final int heightToDistribute = Math.max(0, heightRemaining);
+ final int addedHeight = (int) (lp.weight * heightToDistribute / weightSum);
+ final int childHeightSpec = MeasureSpec.makeMeasureSpec(
+ measuredHeight + addedHeight, MeasureSpec.EXACTLY);
+ child.measure(childWidthSpec, childHeightSpec);
+ }
+ }
+ }
+ }
+
+ final int measuredHeight = heightSize;
+ final int measuredWidth = layoutWidth + getPaddingLeft() + getPaddingRight();
+
+ setMeasuredDimension(measuredWidth, measuredHeight);
+ mCanSlide = canSlide;
+
+ if (mDragHelper.getViewDragState() != ViewDragHelper.STATE_IDLE && !canSlide) {
+ // Cancel scrolling in progress, it's no longer relevant.
+ mDragHelper.abort();
+ }
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int l, int t, int r, int b) {
+ mDragHelper.setEdgeTrackingEnabled(ViewDragHelper.EDGE_TOP);
+
+ final int height = b - t;
+ final int paddingTop = getPaddingTop();
+ final int paddingBottom = getPaddingBottom();
+ final int paddingLeft = getPaddingLeft();
+
+ final int childCount = getChildCount();
+ int yStart = paddingTop;
+ int nextYStart = yStart;
+
+ if (mFirstLayout) {
+ mSlideOffset = mCanSlide && mPreservedOpenState ? 1.f : 0.f;
+ }
+
+ for (int i = 0; i < childCount; i++) {
+ final View child = getChildAt(i);
+
+ if (child.getVisibility() == GONE) {
+ continue;
+ }
+
+ final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+
+ final int childHeight = child.getMeasuredHeight();
+
+ if (lp.slideable) {
+ final int margin = lp.topMargin + lp.bottomMargin;
+ final int range = Math.min(nextYStart,
+ height - paddingBottom - mOverhangSize) - yStart - margin;
+ mSlideRange = range;
+ final int lpMargin = lp.topMargin;
+ final int pos = (int) (range * mSlideOffset);
+ yStart += pos + lpMargin;
+ updateSlideOffset(pos);
+ } else {
+ yStart = nextYStart;
+ }
+
+ final int childTop = yStart;
+ final int childBottom = childTop + childHeight;
+ final int childLeft = paddingLeft;
+ final int childRight = childLeft + child.getMeasuredWidth();
+
+ child.layout(childLeft, childTop, childRight, childBottom);
+
+ nextYStart += child.getHeight();
+ }
+
+ if (mFirstLayout) {
+ updateObscuredViewsVisibility(mSlideableView);
+ }
+
+ mFirstLayout = false;
+ }
+
+ @Override
+ protected void onSizeChanged(int w, int h, int oldw, int oldh) {
+ super.onSizeChanged(w, h, oldw, oldh);
+ // Recalculate sliding panes and their details
+ if (h != oldh) {
+ mFirstLayout = true;
+ }
+ }
+
+ @Override
+ public void requestChildFocus(View child, View focused) {
+ super.requestChildFocus(child, focused);
+ if (!isInTouchMode() && !mCanSlide) {
+ mPreservedOpenState = child == mSlideableView;
+ }
+ }
+
+ @Override
+ public boolean onInterceptTouchEvent(MotionEvent ev) {
+ final int action = MotionEventCompat.getActionMasked(ev);
+
+ // Preserve the open state based on the last view that was touched.
+ if (!mCanSlide && action == MotionEvent.ACTION_DOWN && getChildCount() > 1) {
+ // After the first things will be slideable.
+ final View secondChild = getChildAt(1);
+ if (secondChild != null) {
+ mPreservedOpenState = !mDragHelper.isViewUnder(secondChild,
+ (int) ev.getX(), (int) ev.getY());
+ }
+ }
+
+ if (!mCanSlide || (mIsUnableToDrag && action != MotionEvent.ACTION_DOWN)) {
+ if (!mIsInNestedScroll) {
+ mDragHelper.cancel();
+ }
+ return super.onInterceptTouchEvent(ev);
+ }
+
+ if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) {
+ if (!mIsInNestedScroll) {
+ mDragHelper.cancel();
+ }
+ return false;
+ }
+
+ switch (action) {
+ case MotionEvent.ACTION_DOWN: {
+ mIsUnableToDrag = false;
+ final float x = ev.getX();
+ final float y = ev.getY();
+ mInitialMotionX = x;
+ mInitialMotionY = y;
+
+ break;
+ }
+
+ case MotionEvent.ACTION_MOVE: {
+ final float x = ev.getX();
+ final float y = ev.getY();
+ final float adx = Math.abs(x - mInitialMotionX);
+ final float ady = Math.abs(y - mInitialMotionY);
+ final int slop = mDragHelper.getTouchSlop();
+ if (ady > slop && adx > ady || !isCapturableViewUnder((int) x, (int) y)) {
+ if (!mIsInNestedScroll) {
+ mDragHelper.cancel();
+ }
+ mIsUnableToDrag = true;
+ return false;
+ }
+ }
+ }
+
+ final boolean interceptForDrag = mDragHelper.shouldInterceptTouchEvent(ev);
+
+ return interceptForDrag;
+ }
+
+ @Override
+ public boolean onTouchEvent(MotionEvent ev) {
+ if (!mCanSlide) {
+ return super.onTouchEvent(ev);
+ }
+
+ mDragHelper.processTouchEvent(ev);
+
+ final int action = ev.getAction();
+ boolean wantTouchEvents = true;
+
+ switch (action & MotionEventCompat.ACTION_MASK) {
+ case MotionEvent.ACTION_DOWN: {
+ final float x = ev.getX();
+ final float y = ev.getY();
+ mInitialMotionX = x;
+ mInitialMotionY = y;
+ break;
+ }
+ }
+
+ return wantTouchEvents;
+ }
+
+ private boolean closePane(View pane, int initialVelocity) {
+ if (mFirstLayout || smoothSlideTo(0.f, initialVelocity)) {
+ mPreservedOpenState = false;
+ return true;
+ }
+ return false;
+ }
+
+ private boolean openPane(View pane, int initialVelocity) {
+ if (mFirstLayout || smoothSlideTo(1.f, initialVelocity)) {
+ mPreservedOpenState = true;
+ return true;
+ }
+ return false;
+ }
+
+ private void updateSlideOffset(int offsetPx) {
+ mSlideOffsetPx = offsetPx;
+ mSlideOffset = (float) mSlideOffsetPx / mSlideRange;
+ }
+
+ /**
+ * Open the sliding pane if it is currently slideable. If first layout
+ * has already completed this will animate.
+ *
+ * @return true if the pane was slideable and is now open/in the process of opening
+ */
+ public boolean openPane() {
+ return openPane(mSlideableView, 0);
+ }
+
+ /**
+ * Close the sliding pane if it is currently slideable. If first layout
+ * has already completed this will animate.
+ *
+ * @return true if the pane was slideable and is now closed/in the process of closing
+ */
+ public boolean closePane() {
+ return closePane(mSlideableView, 0);
+ }
+
+ /**
+ * Check if the layout is open. It can be open either because the slider
+ * itself is open revealing the left pane, or if all content fits without sliding.
+ *
+ * @return true if sliding panels are open
+ */
+ public boolean isOpen() {
+ return !mCanSlide || mSlideOffset > 0;
+ }
+
+ /**
+ * Check if the content in this layout cannot fully fit side by side and therefore
+ * the content pane can be slid back and forth.
+ *
+ * @return true if content in this layout can be slid open and closed
+ */
+ public boolean isSlideable() {
+ return mCanSlide;
+ }
+
+ private void onPanelDragged(int newTop) {
+ if (mSlideableView == null) {
+ // This can happen if we're aborting motion during layout because everything now fits.
+ mSlideOffset = 0;
+ return;
+ }
+ final LayoutParams lp = (LayoutParams) mSlideableView.getLayoutParams();
+
+ final int lpMargin = lp.topMargin;
+ final int topBound = getPaddingTop() + lpMargin;
+
+ updateSlideOffset(newTop - topBound);
+
+ dispatchOnPanelSlide(mSlideableView);
+ }
+
+ @Override
+ protected boolean drawChild(Canvas canvas, View child, long drawingTime) {
+ final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+ boolean result;
+ final int save = canvas.save(Canvas.CLIP_SAVE_FLAG);
+
+ if (mCanSlide && !lp.slideable && mSlideableView != null) {
+ // Clip against the slider; no sense drawing what will immediately be covered.
+ canvas.getClipBounds(mTmpRect);
+
+ mTmpRect.bottom = Math.min(mTmpRect.bottom, mSlideableView.getTop());
+ canvas.clipRect(mTmpRect);
+ }
+
+ if (Build.VERSION.SDK_INT >= 11) { // HC
+ result = super.drawChild(canvas, child, drawingTime);
+ } else {
+ if (child.isDrawingCacheEnabled()) {
+ child.setDrawingCacheEnabled(false);
+ }
+ result = super.drawChild(canvas, child, drawingTime);
+ }
+
+ canvas.restoreToCount(save);
+
+ return result;
+ }
+
+ /**
+ * Smoothly animate mDraggingPane to the target X position within its range.
+ *
+ * @param slideOffset position to animate to
+ * @param velocity initial velocity in case of fling, or 0.
+ */
+ boolean smoothSlideTo(float slideOffset, int velocity) {
+ if (!mCanSlide) {
+ // Nothing to do.
+ return false;
+ }
+
+ final LayoutParams lp = (LayoutParams) mSlideableView.getLayoutParams();
+
+ int y;
+ int topBound = getPaddingTop() + lp.topMargin;
+ y = (int) (topBound + slideOffset * mSlideRange);
+
+ if (mDragHelper.smoothSlideViewTo(mSlideableView, mSlideableView.getLeft(), y)) {
+ setAllChildrenVisible();
+ ViewCompat.postInvalidateOnAnimation(this);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public void computeScroll() {
+ if (mDragHelper.continueSettling(true)) {
+ if (!mCanSlide) {
+ mDragHelper.abort();
+ return;
+ }
+
+ ViewCompat.postInvalidateOnAnimation(this);
+ }
+ }
+
+ private boolean isCapturableViewUnder(int x, int y) {
+ View capturableView = mCapturableView != null ? mCapturableView : mSlideableView;
+ if (capturableView == null) {
+ return false;
+ }
+ int[] viewLocation = new int[2];
+ capturableView.getLocationOnScreen(viewLocation);
+ int[] parentLocation = new int[2];
+ this.getLocationOnScreen(parentLocation);
+ int screenX = parentLocation[0] + x;
+ int screenY = parentLocation[1] + y;
+ return screenX >= viewLocation[0]
+ && screenX < viewLocation[0] + capturableView.getWidth()
+ && screenY >= viewLocation[1]
+ && screenY < viewLocation[1] + capturableView.getHeight();
+ }
+
+ @Override
+ protected ViewGroup.LayoutParams generateDefaultLayoutParams() {
+ return new LayoutParams();
+ }
+
+ @Override
+ protected ViewGroup.LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {
+ return p instanceof MarginLayoutParams
+ ? new LayoutParams((MarginLayoutParams) p)
+ : new LayoutParams(p);
+ }
+
+ @Override
+ protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {
+ return p instanceof LayoutParams && super.checkLayoutParams(p);
+ }
+
+ @Override
+ public ViewGroup.LayoutParams generateLayoutParams(AttributeSet attrs) {
+ return new LayoutParams(getContext(), attrs);
+ }
+
+ @Override
+ protected Parcelable onSaveInstanceState() {
+ Parcelable superState = super.onSaveInstanceState();
+
+ SavedState ss = new SavedState(superState);
+ ss.isOpen = isSlideable() ? isOpen() : mPreservedOpenState;
+
+ return ss;
+ }
+
+ @Override
+ protected void onRestoreInstanceState(Parcelable state) {
+ SavedState ss = (SavedState) state;
+ super.onRestoreInstanceState(ss.getSuperState());
+
+ if (ss.isOpen) {
+ openPane();
+ } else {
+ closePane();
+ }
+ mPreservedOpenState = ss.isOpen;
+ }
+
+ @Override
+ public boolean onStartNestedScroll(View child, View target, int nestedScrollAxes) {
+ final boolean startNestedScroll = (nestedScrollAxes & SCROLL_AXIS_VERTICAL) != 0;
+ if (startNestedScroll) {
+ mIsInNestedScroll = true;
+ mChildCannotConsumeScroll = true;
+ mDragHelper.startNestedScroll(mSlideableView);
+ }
+ if (DEBUG) {
+ Log.d(TAG, "onStartNestedScroll: " + startNestedScroll);
+ }
+ return startNestedScroll;
+ }
+
+ @Override
+ public void onNestedPreScroll(View target, int dx, int dy, int[] consumed) {
+ if (dy == 0) {
+ // Nothing to do
+ return;
+ }
+ if (DEBUG) {
+ Log.d(TAG, "onNestedPreScroll: " + dy);
+ }
+ mInNestedPreScrollDownwards =
+ mChildCannotConsumeScroll && dy > 0 && mSlideOffsetPx <= mIntermediateOffset;
+ mDragHelper.processNestedScroll(mSlideableView, 0, dy, consumed);
+ }
+
+ @Override
+ public void onNestedScroll(View target, int dxConsumed, int dyConsumed, int dxUnconsumed,
+ int dyUnconsumed) {
+ if (DEBUG) {
+ Log.d(TAG, "onNestedScroll: " + dyUnconsumed);
+ }
+ mChildCannotConsumeScroll = false;
+ mInNestedPreScrollDownwards = false;
+ // We need to flip dyUnconsumed here, because its magnitude is reversed. b/14585990
+ mDragHelper.processNestedScroll(mSlideableView, 0, -dyUnconsumed, null);
+ }
+
+ @Override
+ public void onStopNestedScroll(View child) {
+ if (DEBUG) {
+ Log.d(TAG, "onStopNestedScroll");
+ }
+ if (mIsInNestedScroll) {
+ mDragHelper.stopNestedScroll(mSlideableView);
+ }
+ mIsInNestedScroll = false;
+ }
+
+ private class DragHelperCallback extends ViewDragHelper.Callback {
+
+ @Override
+ public boolean tryCaptureView(View child, int pointerId) {
+ if (mIsUnableToDrag) {
+ return false;
+ }
+
+ return ((LayoutParams) child.getLayoutParams()).slideable;
+ }
+
+ @Override
+ public void onViewDragStateChanged(int state) {
+ if (mDragHelper.getViewDragState() == ViewDragHelper.STATE_IDLE) {
+ if (mSlideOffset == 0) {
+ updateObscuredViewsVisibility(mSlideableView);
+ dispatchOnPanelClosed(mSlideableView);
+ mPreservedOpenState = false;
+ } else {
+ dispatchOnPanelOpened(mSlideableView);
+ mPreservedOpenState = true;
+ }
+ }
+ }
+
+ @Override
+ public void onViewCaptured(View capturedChild, int activePointerId) {
+ // Make all child views visible in preparation for sliding things around
+ setAllChildrenVisible();
+ }
+
+ @Override
+ public void onViewPositionChanged(View changedView, int left, int top, int dx, int dy) {
+ onPanelDragged(top);
+ invalidate();
+ }
+
+ @Override
+ public void onViewReleased(View releasedChild, float xvel, float yvel) {
+ if (releasedChild == null) {
+ return;
+ }
+ final LayoutParams lp = (LayoutParams) releasedChild.getLayoutParams();
+
+ int top = getPaddingTop() + lp.topMargin;
+
+ if (mInNestedPreScrollDownwards) {
+ // Snap to the closest pinnable position based on the current slide offset
+ // (in pixels) [0 - mIntermediateoffset - mSlideRange]
+ if (yvel > 0) {
+ top += mSlideRange;
+ } else if (0 <= mSlideOffsetPx && mSlideOffsetPx <= mIntermediateOffset / 2) {
+ // Offset is between 0 and mIntermediateOffset, but closer to 0
+ // Leave top unchanged
+ } else if (mIntermediateOffset / 2 <= mSlideOffsetPx
+ && mSlideOffsetPx <= (mIntermediateOffset + mSlideRange) / 2) {
+ // Offset is closest to mIntermediateOffset
+ top += mIntermediateOffset;
+ } else {
+ // Offset is between mIntermediateOffset and mSlideRange, but closer to
+ // mSlideRange
+ top += mSlideRange;
+ }
+ } else if (yvel > 0 || (yvel == 0 && mSlideOffset > 0.5f)) {
+ top += mSlideRange;
+ }
+
+ mDragHelper.settleCapturedViewAt(releasedChild.getLeft(), top);
+ invalidate();
+ }
+
+ @Override
+ public int getViewVerticalDragRange(View child) {
+ return mSlideRange;
+ }
+
+ @Override
+ public int clampViewPositionHorizontal(View child, int left, int dx) {
+ // Make sure we never move views horizontally.
+ return child.getLeft();
+ }
+
+ @Override
+ public int clampViewPositionVertical(View child, int top, int dy) {
+ final LayoutParams lp = (LayoutParams) mSlideableView.getLayoutParams();
+
+ final int newTop;
+ int topBound = getPaddingTop() + lp.topMargin;
+ int bottomBound = topBound
+ + (mInNestedPreScrollDownwards ? mIntermediateOffset : mSlideRange);
+ newTop = Math.min(Math.max(top, topBound), bottomBound);
+
+ return newTop;
+ }
+
+ @Override
+ public void onEdgeDragStarted(int edgeFlags, int pointerId) {
+ mDragHelper.captureChildView(mSlideableView, pointerId);
+ }
+ }
+
+ public static class LayoutParams extends ViewGroup.MarginLayoutParams {
+ private static final int[] ATTRS = new int[] {
+ android.R.attr.layout_weight
+ };
+
+ /**
+ * The weighted proportion of how much of the leftover space
+ * this child should consume after measurement.
+ */
+ public float weight = 0;
+
+ /**
+ * True if this pane is the slideable pane in the layout.
+ */
+ boolean slideable;
+
+ public LayoutParams() {
+ super(FILL_PARENT, FILL_PARENT);
+ }
+
+ public LayoutParams(int width, int height) {
+ super(width, height);
+ }
+
+ public LayoutParams(android.view.ViewGroup.LayoutParams source) {
+ super(source);
+ }
+
+ public LayoutParams(MarginLayoutParams source) {
+ super(source);
+ }
+
+ public LayoutParams(LayoutParams source) {
+ super(source);
+ this.weight = source.weight;
+ }
+
+ public LayoutParams(Context c, AttributeSet attrs) {
+ super(c, attrs);
+
+ final TypedArray a = c.obtainStyledAttributes(attrs, ATTRS);
+ this.weight = a.getFloat(0, 0);
+ a.recycle();
+ }
+
+ }
+
+ static class SavedState extends BaseSavedState {
+ boolean isOpen;
+
+ SavedState(Parcelable superState) {
+ super(superState);
+ }
+
+ private SavedState(Parcel in) {
+ super(in);
+ isOpen = in.readInt() != 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel out, int flags) {
+ super.writeToParcel(out, flags);
+ out.writeInt(isOpen ? 1 : 0);
+ }
+
+ public static final Parcelable.Creator<SavedState> CREATOR =
+ new Parcelable.Creator<SavedState>() {
+ public SavedState createFromParcel(Parcel in) {
+ return new SavedState(in);
+ }
+
+ public SavedState[] newArray(int size) {
+ return new SavedState[size];
+ }
+ };
+ }
+
+ class AccessibilityDelegate extends AccessibilityDelegateCompat {
+ private final Rect mTmpRect = new Rect();
+
+ @Override
+ public void onInitializeAccessibilityNodeInfo(View host, AccessibilityNodeInfoCompat info) {
+ final AccessibilityNodeInfoCompat superNode = AccessibilityNodeInfoCompat.obtain(info);
+ super.onInitializeAccessibilityNodeInfo(host, superNode);
+ copyNodeInfoNoChildren(info, superNode);
+ superNode.recycle();
+
+ info.setClassName(OverlappingPaneLayout.class.getName());
+ info.setSource(host);
+
+ final ViewParent parent = ViewCompat.getParentForAccessibility(host);
+ if (parent instanceof View) {
+ info.setParent((View) parent);
+ }
+
+ // This is a best-approximation of addChildrenForAccessibility()
+ // that accounts for filtering.
+ final int childCount = getChildCount();
+ for (int i = 0; i < childCount; i++) {
+ final View child = getChildAt(i);
+ if (child.getVisibility() == View.VISIBLE) {
+ // Force importance to "yes" since we can't read the value.
+ ViewCompat.setImportantForAccessibility(
+ child, ViewCompat.IMPORTANT_FOR_ACCESSIBILITY_YES);
+ info.addChild(child);
+ }
+ }
+ }
+
+ @Override
+ public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) {
+ super.onInitializeAccessibilityEvent(host, event);
+
+ event.setClassName(OverlappingPaneLayout.class.getName());
+ }
+
+ /**
+ * This should really be in AccessibilityNodeInfoCompat, but there unfortunately
+ * seem to be a few elements that are not easily cloneable using the underlying API.
+ * Leave it private here as it's not general-purpose useful.
+ */
+ private void copyNodeInfoNoChildren(AccessibilityNodeInfoCompat dest,
+ AccessibilityNodeInfoCompat src) {
+ final Rect rect = mTmpRect;
+
+ src.getBoundsInParent(rect);
+ dest.setBoundsInParent(rect);
+
+ src.getBoundsInScreen(rect);
+ dest.setBoundsInScreen(rect);
+
+ dest.setVisibleToUser(src.isVisibleToUser());
+ dest.setPackageName(src.getPackageName());
+ dest.setClassName(src.getClassName());
+ dest.setContentDescription(src.getContentDescription());
+
+ dest.setEnabled(src.isEnabled());
+ dest.setClickable(src.isClickable());
+ dest.setFocusable(src.isFocusable());
+ dest.setFocused(src.isFocused());
+ dest.setAccessibilityFocused(src.isAccessibilityFocused());
+ dest.setSelected(src.isSelected());
+ dest.setLongClickable(src.isLongClickable());
+
+ dest.addAction(src.getActions());
+
+ dest.setMovementGranularities(src.getMovementGranularities());
+ }
+ }
+}
diff --git a/src/com/android/dialer/widget/SearchEditTextLayout.java b/src/com/android/dialer/widget/SearchEditTextLayout.java
new file mode 100644
index 0000000..36e5789
--- /dev/null
+++ b/src/com/android/dialer/widget/SearchEditTextLayout.java
@@ -0,0 +1,285 @@
+/*
+ * Copyright (C) 2014 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.widget;
+
+import android.animation.ValueAnimator;
+import android.animation.ValueAnimator.AnimatorUpdateListener;
+import android.content.Context;
+import android.graphics.Color;
+import android.util.AttributeSet;
+import android.view.KeyEvent;
+import android.view.View;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+import android.widget.FrameLayout;
+
+import com.android.dialer.R;
+import com.android.phone.common.animation.AnimUtils;
+
+public class SearchEditTextLayout extends FrameLayout {
+ private static final float EXPAND_MARGIN_FRACTION_START = 0.8f;
+ private static final int ANIMATION_DURATION = 200;
+
+ private OnKeyListener mPreImeKeyListener;
+ private int mTopMargin;
+ private int mBottomMargin;
+ private int mLeftMargin;
+ private int mRightMargin;
+
+ private float mCollapsedElevation;
+
+ /* Subclass-visible for testing */
+ protected boolean mIsExpanded = false;
+ protected boolean mIsFadedOut = false;
+
+ private View mCollapsed;
+ private View mExpanded;
+ private EditText mSearchView;
+ private View mSearchIcon;
+ private View mCollapsedSearchBox;
+ private View mVoiceSearchButtonView;
+ private View mOverflowButtonView;
+ private View mBackButtonView;
+ private View mExpandedSearchBox;
+ private View mClearButtonView;
+
+ private ValueAnimator mAnimator;
+
+ private OnBackButtonClickedListener mOnBackButtonClickedListener;
+
+ /**
+ * Listener for the back button next to the search view being pressed
+ */
+ public interface OnBackButtonClickedListener {
+ public void onBackButtonClicked();
+ }
+
+ public SearchEditTextLayout(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public void setPreImeKeyListener(OnKeyListener listener) {
+ mPreImeKeyListener = listener;
+ }
+
+ public void setOnBackButtonClickedListener(OnBackButtonClickedListener listener) {
+ mOnBackButtonClickedListener = listener;
+ }
+
+ @Override
+ protected void onFinishInflate() {
+ MarginLayoutParams params = (MarginLayoutParams) getLayoutParams();
+ mTopMargin = params.topMargin;
+ mBottomMargin = params.bottomMargin;
+ mLeftMargin = params.leftMargin;
+ mRightMargin = params.rightMargin;
+
+ mCollapsedElevation = getElevation();
+
+ mCollapsed = findViewById(R.id.search_box_collapsed);
+ mExpanded = findViewById(R.id.search_box_expanded);
+ mSearchView = (EditText) mExpanded.findViewById(R.id.search_view);
+
+ mSearchIcon = findViewById(R.id.search_magnifying_glass);
+ mCollapsedSearchBox = findViewById(R.id.search_box_start_search);
+ mVoiceSearchButtonView = findViewById(R.id.voice_search_button);
+ mOverflowButtonView = findViewById(R.id.dialtacts_options_menu_button);
+ mBackButtonView = findViewById(R.id.search_back_button);
+ mExpandedSearchBox = findViewById(R.id.search_box_expanded);
+ mClearButtonView = findViewById(R.id.search_close_button);
+
+ mSearchView.setOnFocusChangeListener(new OnFocusChangeListener() {
+ @Override
+ public void onFocusChange(View v, boolean hasFocus) {
+ if (hasFocus) {
+ showInputMethod(v);
+ }
+ }
+ });
+
+ findViewById(R.id.search_close_button).setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ mSearchView.setText(null);
+ }
+ });
+
+ findViewById(R.id.search_back_button).setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ if (mOnBackButtonClickedListener != null) {
+ mOnBackButtonClickedListener.onBackButtonClicked();
+ }
+ }
+ });
+
+ super.onFinishInflate();
+ }
+
+ @Override
+ public boolean dispatchKeyEventPreIme(KeyEvent event) {
+ if (mPreImeKeyListener != null) {
+ if (mPreImeKeyListener.onKey(this, event.getKeyCode(), event)) {
+ return true;
+ }
+ }
+ return super.dispatchKeyEventPreIme(event);
+ }
+
+ public void fadeOut() {
+ fadeOut(null);
+ }
+
+ public void fadeOut(AnimUtils.AnimationCallback callback) {
+ AnimUtils.fadeOut(this, ANIMATION_DURATION, callback);
+ mIsFadedOut = true;
+ }
+
+ public void fadeIn() {
+ AnimUtils.fadeIn(this, ANIMATION_DURATION);
+ mIsFadedOut = false;
+ }
+
+ public void setVisible(boolean visible) {
+ if (visible) {
+ setAlpha(1);
+ setVisibility(View.VISIBLE);
+ mIsFadedOut = false;
+ } else {
+ setAlpha(0);
+ setVisibility(View.GONE);
+ mIsFadedOut = true;
+ }
+ }
+ public void expand(boolean animate, boolean requestFocus) {
+ updateVisibility(true /* isExpand */);
+
+ if (animate) {
+ AnimUtils.crossFadeViews(mExpanded, mCollapsed, ANIMATION_DURATION);
+ mAnimator = ValueAnimator.ofFloat(EXPAND_MARGIN_FRACTION_START, 0f);
+ setMargins(EXPAND_MARGIN_FRACTION_START);
+ prepareAnimator(true);
+ } else {
+ mExpanded.setVisibility(View.VISIBLE);
+ mExpanded.setAlpha(1);
+ setMargins(0f);
+ mCollapsed.setVisibility(View.GONE);
+ }
+
+ // Set 9-patch background. This owns the padding, so we need to restore the original values.
+ int paddingTop = this.getPaddingTop();
+ int paddingStart = this.getPaddingStart();
+ int paddingBottom = this.getPaddingBottom();
+ int paddingEnd = this.getPaddingEnd();
+ setBackgroundResource(R.drawable.search_shadow);
+ setElevation(0);
+ setPaddingRelative(paddingStart, paddingTop, paddingEnd, paddingBottom);
+
+ setElevation(0);
+ if (requestFocus) {
+ mSearchView.requestFocus();
+ }
+ mIsExpanded = true;
+ }
+
+ public void collapse(boolean animate) {
+ updateVisibility(false /* isExpand */);
+
+ if (animate) {
+ AnimUtils.crossFadeViews(mCollapsed, mExpanded, ANIMATION_DURATION);
+ mAnimator = ValueAnimator.ofFloat(0f, 1f);
+ prepareAnimator(false);
+ } else {
+ mCollapsed.setVisibility(View.VISIBLE);
+ mCollapsed.setAlpha(1);
+ setMargins(1f);
+ mExpanded.setVisibility(View.GONE);
+ }
+
+ mIsExpanded = false;
+ setElevation(mCollapsedElevation);
+ setBackgroundResource(R.drawable.rounded_corner);
+ }
+
+ /**
+ * Updates the visibility of views depending on whether we will show the expanded or collapsed
+ * search view. This helps prevent some jank with the crossfading if we are animating.
+ *
+ * @param isExpand Whether we are about to show the expanded search box.
+ */
+ private void updateVisibility(boolean isExpand) {
+ int collapsedViewVisibility = isExpand ? View.GONE : View.VISIBLE;
+ int expandedViewVisibility = isExpand ? View.VISIBLE : View.GONE;
+
+ mSearchIcon.setVisibility(collapsedViewVisibility);
+ mCollapsedSearchBox.setVisibility(collapsedViewVisibility);
+ mVoiceSearchButtonView.setVisibility(collapsedViewVisibility);
+ mOverflowButtonView.setVisibility(collapsedViewVisibility);
+ mBackButtonView.setVisibility(expandedViewVisibility);
+ // TODO: Prevents keyboard from jumping up in landscape mode after exiting the
+ // SearchFragment when the query string is empty. More elegant fix?
+ //mExpandedSearchBox.setVisibility(expandedViewVisibility);
+ mClearButtonView.setVisibility(expandedViewVisibility);
+ }
+
+ private void prepareAnimator(final boolean expand) {
+ if (mAnimator != null) {
+ mAnimator.cancel();
+ }
+
+ mAnimator.addUpdateListener(new AnimatorUpdateListener() {
+ @Override
+ public void onAnimationUpdate(ValueAnimator animation) {
+ final Float fraction = (Float) animation.getAnimatedValue();
+ setMargins(fraction);
+ }
+ });
+
+ mAnimator.setDuration(ANIMATION_DURATION);
+ mAnimator.start();
+ }
+
+ public boolean isExpanded() {
+ return mIsExpanded;
+ }
+
+ public boolean isFadedOut() {
+ return mIsFadedOut;
+ }
+
+ private void showInputMethod(View view) {
+ final InputMethodManager imm = (InputMethodManager) getContext().getSystemService(
+ Context.INPUT_METHOD_SERVICE);
+ if (imm != null) {
+ imm.showSoftInput(view, 0);
+ }
+ }
+
+ /**
+ * Assigns margins to the search box as a fraction of its maximum margin size
+ *
+ * @param fraction How large the margins should be as a fraction of their full size
+ */
+ private void setMargins(float fraction) {
+ MarginLayoutParams params = (MarginLayoutParams) getLayoutParams();
+ params.topMargin = (int) (mTopMargin * fraction);
+ params.bottomMargin = (int) (mBottomMargin * fraction);
+ params.leftMargin = (int) (mLeftMargin * fraction);
+ params.rightMargin = (int) (mRightMargin * fraction);
+ requestLayout();
+ }
+}
diff --git a/src/com/android/dialer/widget/ViewDragHelper.java b/src/com/android/dialer/widget/ViewDragHelper.java
new file mode 100644
index 0000000..3d55ad4
--- /dev/null
+++ b/src/com/android/dialer/widget/ViewDragHelper.java
@@ -0,0 +1,1495 @@
+/*
+ * Copyright (C) 2013 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.widget;
+
+import android.content.Context;
+import android.support.v4.view.MotionEventCompat;
+import android.support.v4.view.VelocityTrackerCompat;
+import android.support.v4.view.ViewCompat;
+import android.support.v4.widget.ScrollerCompat;
+import android.view.MotionEvent;
+import android.view.VelocityTracker;
+import android.view.View;
+import android.view.ViewConfiguration;
+import android.view.ViewGroup;
+import android.view.animation.Interpolator;
+
+import java.util.Arrays;
+
+/**
+ * ViewDragHelper is a utility class for writing custom ViewGroups. It offers a number
+ * of useful operations and state tracking for allowing a user to drag and reposition
+ * views within their parent ViewGroup.
+ */
+public class ViewDragHelper {
+ private static final String TAG = "ViewDragHelper";
+
+ /**
+ * A null/invalid pointer ID.
+ */
+ public static final int INVALID_POINTER = -1;
+
+ /**
+ * A view is not currently being dragged or animating as a result of a fling/snap.
+ */
+ public static final int STATE_IDLE = 0;
+
+ /**
+ * A view is currently being dragged. The position is currently changing as a result
+ * of user input or simulated user input.
+ */
+ public static final int STATE_DRAGGING = 1;
+
+ /**
+ * A view is currently settling into place as a result of a fling or
+ * predefined non-interactive motion.
+ */
+ public static final int STATE_SETTLING = 2;
+
+ /**
+ * Edge flag indicating that the left edge should be affected.
+ */
+ public static final int EDGE_LEFT = 1 << 0;
+
+ /**
+ * Edge flag indicating that the right edge should be affected.
+ */
+ public static final int EDGE_RIGHT = 1 << 1;
+
+ /**
+ * Edge flag indicating that the top edge should be affected.
+ */
+ public static final int EDGE_TOP = 1 << 2;
+
+ /**
+ * Edge flag indicating that the bottom edge should be affected.
+ */
+ public static final int EDGE_BOTTOM = 1 << 3;
+
+ /**
+ * Edge flag set indicating all edges should be affected.
+ */
+ public static final int EDGE_ALL = EDGE_LEFT | EDGE_TOP | EDGE_RIGHT | EDGE_BOTTOM;
+
+ /**
+ * Indicates that a check should occur along the horizontal axis
+ */
+ public static final int DIRECTION_HORIZONTAL = 1 << 0;
+
+ /**
+ * Indicates that a check should occur along the vertical axis
+ */
+ public static final int DIRECTION_VERTICAL = 1 << 1;
+
+ /**
+ * Indicates that a check should occur along all axes
+ */
+ public static final int DIRECTION_ALL = DIRECTION_HORIZONTAL | DIRECTION_VERTICAL;
+
+ private static final int EDGE_SIZE = 20; // dp
+
+ private static final int BASE_SETTLE_DURATION = 256; // ms
+ private static final int MAX_SETTLE_DURATION = 600; // ms
+
+ // Current drag state; idle, dragging or settling
+ private int mDragState;
+
+ // Distance to travel before a drag may begin
+ private int mTouchSlop;
+
+ // Last known position/pointer tracking
+ private int mActivePointerId = INVALID_POINTER;
+ private float[] mInitialMotionX;
+ private float[] mInitialMotionY;
+ private float[] mLastMotionX;
+ private float[] mLastMotionY;
+ private int[] mInitialEdgesTouched;
+ private int[] mEdgeDragsInProgress;
+ private int[] mEdgeDragsLocked;
+ private int mPointersDown;
+
+ private VelocityTracker mVelocityTracker;
+ private float mMaxVelocity;
+ private float mMinVelocity;
+
+ private int mEdgeSize;
+ private int mTrackingEdges;
+
+ private ScrollerCompat mScroller;
+
+ private final Callback mCallback;
+
+ private View mCapturedView;
+ private boolean mReleaseInProgress;
+
+ private final ViewGroup mParentView;
+
+ /**
+ * A Callback is used as a communication channel with the ViewDragHelper back to the
+ * parent view using it. <code>on*</code>methods are invoked on siginficant events and several
+ * accessor methods are expected to provide the ViewDragHelper with more information
+ * about the state of the parent view upon request. The callback also makes decisions
+ * governing the range and draggability of child views.
+ */
+ public static abstract class Callback {
+ /**
+ * Called when the drag state changes. See the <code>STATE_*</code> constants
+ * for more information.
+ *
+ * @param state The new drag state
+ *
+ * @see #STATE_IDLE
+ * @see #STATE_DRAGGING
+ * @see #STATE_SETTLING
+ */
+ public void onViewDragStateChanged(int state) {}
+
+ /**
+ * Called when the captured view's position changes as the result of a drag or settle.
+ *
+ * @param changedView View whose position changed
+ * @param left New X coordinate of the left edge of the view
+ * @param top New Y coordinate of the top edge of the view
+ * @param dx Change in X position from the last call
+ * @param dy Change in Y position from the last call
+ */
+ public void onViewPositionChanged(View changedView, int left, int top, int dx, int dy) {}
+
+ /**
+ * Called when a child view is captured for dragging or settling. The ID of the pointer
+ * currently dragging the captured view is supplied. If activePointerId is
+ * identified as {@link #INVALID_POINTER} the capture is programmatic instead of
+ * pointer-initiated.
+ *
+ * @param capturedChild Child view that was captured
+ * @param activePointerId Pointer id tracking the child capture
+ */
+ public void onViewCaptured(View capturedChild, int activePointerId) {}
+
+ /**
+ * Called when the child view is no longer being actively dragged.
+ * The fling velocity is also supplied, if relevant. The velocity values may
+ * be clamped to system minimums or maximums.
+ *
+ * <p>Calling code may decide to fling or otherwise release the view to let it
+ * settle into place. It should do so using {@link #settleCapturedViewAt(int, int)}
+ * or {@link #flingCapturedView(int, int, int, int)}. If the Callback invokes
+ * one of these methods, the ViewDragHelper will enter {@link #STATE_SETTLING}
+ * and the view capture will not fully end until it comes to a complete stop.
+ * If neither of these methods is invoked before <code>onViewReleased</code> returns,
+ * the view will stop in place and the ViewDragHelper will return to
+ * {@link #STATE_IDLE}.</p>
+ *
+ * @param releasedChild The captured child view now being released
+ * @param xvel X velocity of the pointer as it left the screen in pixels per second.
+ * @param yvel Y velocity of the pointer as it left the screen in pixels per second.
+ */
+ public void onViewReleased(View releasedChild, float xvel, float yvel) {}
+
+ /**
+ * Called when one of the subscribed edges in the parent view has been touched
+ * by the user while no child view is currently captured.
+ *
+ * @param edgeFlags A combination of edge flags describing the edge(s) currently touched
+ * @param pointerId ID of the pointer touching the described edge(s)
+ * @see #EDGE_LEFT
+ * @see #EDGE_TOP
+ * @see #EDGE_RIGHT
+ * @see #EDGE_BOTTOM
+ */
+ public void onEdgeTouched(int edgeFlags, int pointerId) {}
+
+ /**
+ * Called when the given edge may become locked. This can happen if an edge drag
+ * was preliminarily rejected before beginning, but after {@link #onEdgeTouched(int, int)}
+ * was called. This method should return true to lock this edge or false to leave it
+ * unlocked. The default behavior is to leave edges unlocked.
+ *
+ * @param edgeFlags A combination of edge flags describing the edge(s) locked
+ * @return true to lock the edge, false to leave it unlocked
+ */
+ public boolean onEdgeLock(int edgeFlags) {
+ return false;
+ }
+
+ /**
+ * Called when the user has started a deliberate drag away from one
+ * of the subscribed edges in the parent view while no child view is currently captured.
+ *
+ * @param edgeFlags A combination of edge flags describing the edge(s) dragged
+ * @param pointerId ID of the pointer touching the described edge(s)
+ * @see #EDGE_LEFT
+ * @see #EDGE_TOP
+ * @see #EDGE_RIGHT
+ * @see #EDGE_BOTTOM
+ */
+ public void onEdgeDragStarted(int edgeFlags, int pointerId) {}
+
+ /**
+ * Called to determine the Z-order of child views.
+ *
+ * @param index the ordered position to query for
+ * @return index of the view that should be ordered at position <code>index</code>
+ */
+ public int getOrderedChildIndex(int index) {
+ return index;
+ }
+
+ /**
+ * Return the magnitude of a draggable child view's horizontal range of motion in pixels.
+ * This method should return 0 for views that cannot move horizontally.
+ *
+ * @param child Child view to check
+ * @return range of horizontal motion in pixels
+ */
+ public int getViewHorizontalDragRange(View child) {
+ return 0;
+ }
+
+ /**
+ * Return the magnitude of a draggable child view's vertical range of motion in pixels.
+ * This method should return 0 for views that cannot move vertically.
+ *
+ * @param child Child view to check
+ * @return range of vertical motion in pixels
+ */
+ public int getViewVerticalDragRange(View child) {
+ return 0;
+ }
+
+ /**
+ * Called when the user's input indicates that they want to capture the given child view
+ * with the pointer indicated by pointerId. The callback should return true if the user
+ * is permitted to drag the given view with the indicated pointer.
+ *
+ * <p>ViewDragHelper may call this method multiple times for the same view even if
+ * the view is already captured; this indicates that a new pointer is trying to take
+ * control of the view.</p>
+ *
+ * <p>If this method returns true, a call to {@link #onViewCaptured(android.view.View, int)}
+ * will follow if the capture is successful.</p>
+ *
+ * @param child Child the user is attempting to capture
+ * @param pointerId ID of the pointer attempting the capture
+ * @return true if capture should be allowed, false otherwise
+ */
+ public abstract boolean tryCaptureView(View child, int pointerId);
+
+ /**
+ * Restrict the motion of the dragged child view along the horizontal axis.
+ * The default implementation does not allow horizontal motion; the extending
+ * class must override this method and provide the desired clamping.
+ *
+ *
+ * @param child Child view being dragged
+ * @param left Attempted motion along the X axis
+ * @param dx Proposed change in position for left
+ * @return The new clamped position for left
+ */
+ public int clampViewPositionHorizontal(View child, int left, int dx) {
+ return 0;
+ }
+
+ /**
+ * Restrict the motion of the dragged child view along the vertical axis.
+ * The default implementation does not allow vertical motion; the extending
+ * class must override this method and provide the desired clamping.
+ *
+ *
+ * @param child Child view being dragged
+ * @param top Attempted motion along the Y axis
+ * @param dy Proposed change in position for top
+ * @return The new clamped position for top
+ */
+ public int clampViewPositionVertical(View child, int top, int dy) {
+ return 0;
+ }
+ }
+
+ /**
+ * Interpolator defining the animation curve for mScroller
+ */
+ private static final Interpolator sInterpolator = new Interpolator() {
+ public float getInterpolation(float t) {
+ t -= 1.0f;
+ return t * t * t * t * t + 1.0f;
+ }
+ };
+
+ private final Runnable mSetIdleRunnable = new Runnable() {
+ public void run() {
+ setDragState(STATE_IDLE);
+ }
+ };
+
+ /**
+ * Factory method to create a new ViewDragHelper.
+ *
+ * @param forParent Parent view to monitor
+ * @param cb Callback to provide information and receive events
+ * @return a new ViewDragHelper instance
+ */
+ public static ViewDragHelper create(ViewGroup forParent, Callback cb) {
+ return new ViewDragHelper(forParent.getContext(), forParent, cb);
+ }
+
+ /**
+ * Factory method to create a new ViewDragHelper.
+ *
+ * @param forParent Parent view to monitor
+ * @param sensitivity Multiplier for how sensitive the helper should be about detecting
+ * the start of a drag. Larger values are more sensitive. 1.0f is normal.
+ * @param cb Callback to provide information and receive events
+ * @return a new ViewDragHelper instance
+ */
+ public static ViewDragHelper create(ViewGroup forParent, float sensitivity, Callback cb) {
+ final ViewDragHelper helper = create(forParent, cb);
+ helper.mTouchSlop = (int) (helper.mTouchSlop * (1 / sensitivity));
+ return helper;
+ }
+
+ /**
+ * Apps should use ViewDragHelper.create() to get a new instance.
+ * This will allow VDH to use internal compatibility implementations for different
+ * platform versions.
+ *
+ * @param context Context to initialize config-dependent params from
+ * @param forParent Parent view to monitor
+ */
+ private ViewDragHelper(Context context, ViewGroup forParent, Callback cb) {
+ if (forParent == null) {
+ throw new IllegalArgumentException("Parent view may not be null");
+ }
+ if (cb == null) {
+ throw new IllegalArgumentException("Callback may not be null");
+ }
+
+ mParentView = forParent;
+ mCallback = cb;
+
+ final ViewConfiguration vc = ViewConfiguration.get(context);
+ final float density = context.getResources().getDisplayMetrics().density;
+ mEdgeSize = (int) (EDGE_SIZE * density + 0.5f);
+
+ mTouchSlop = vc.getScaledTouchSlop();
+ mMaxVelocity = vc.getScaledMaximumFlingVelocity();
+ mMinVelocity = vc.getScaledMinimumFlingVelocity();
+ mScroller = ScrollerCompat.create(context, sInterpolator);
+ }
+
+ /**
+ * Set the minimum velocity that will be detected as having a magnitude greater than zero
+ * in pixels per second. Callback methods accepting a velocity will be clamped appropriately.
+ *
+ * @param minVel Minimum velocity to detect
+ */
+ public void setMinVelocity(float minVel) {
+ mMinVelocity = minVel;
+ }
+
+ /**
+ * Return the currently configured minimum velocity. Any flings with a magnitude less
+ * than this value in pixels per second. Callback methods accepting a velocity will receive
+ * zero as a velocity value if the real detected velocity was below this threshold.
+ *
+ * @return the minimum velocity that will be detected
+ */
+ public float getMinVelocity() {
+ return mMinVelocity;
+ }
+
+ /**
+ * Retrieve the current drag state of this helper. This will return one of
+ * {@link #STATE_IDLE}, {@link #STATE_DRAGGING} or {@link #STATE_SETTLING}.
+ * @return The current drag state
+ */
+ public int getViewDragState() {
+ return mDragState;
+ }
+
+ /**
+ * Enable edge tracking for the selected edges of the parent view.
+ * The callback's {@link Callback#onEdgeTouched(int, int)} and
+ * {@link Callback#onEdgeDragStarted(int, int)} methods will only be invoked
+ * for edges for which edge tracking has been enabled.
+ *
+ * @param edgeFlags Combination of edge flags describing the edges to watch
+ * @see #EDGE_LEFT
+ * @see #EDGE_TOP
+ * @see #EDGE_RIGHT
+ * @see #EDGE_BOTTOM
+ */
+ public void setEdgeTrackingEnabled(int edgeFlags) {
+ mTrackingEdges = edgeFlags;
+ }
+
+ /**
+ * Return the size of an edge. This is the range in pixels along the edges of this view
+ * that will actively detect edge touches or drags if edge tracking is enabled.
+ *
+ * @return The size of an edge in pixels
+ * @see #setEdgeTrackingEnabled(int)
+ */
+ public int getEdgeSize() {
+ return mEdgeSize;
+ }
+
+ /**
+ * Capture a specific child view for dragging within the parent. The callback will be notified
+ * but {@link Callback#tryCaptureView(android.view.View, int)} will not be asked permission to
+ * capture this view.
+ *
+ * @param childView Child view to capture
+ * @param activePointerId ID of the pointer that is dragging the captured child view
+ */
+ public void captureChildView(View childView, int activePointerId) {
+ if (childView.getParent() != mParentView) {
+ throw new IllegalArgumentException("captureChildView: parameter must be a descendant " +
+ "of the ViewDragHelper's tracked parent view (" + mParentView + ")");
+ }
+
+ mCapturedView = childView;
+ mActivePointerId = activePointerId;
+ mCallback.onViewCaptured(childView, activePointerId);
+ setDragState(STATE_DRAGGING);
+ }
+
+ /**
+ * @return The currently captured view, or null if no view has been captured.
+ */
+ public View getCapturedView() {
+ return mCapturedView;
+ }
+
+ /**
+ * @return The ID of the pointer currently dragging the captured view,
+ * or {@link #INVALID_POINTER}.
+ */
+ public int getActivePointerId() {
+ return mActivePointerId;
+ }
+
+ /**
+ * @return The minimum distance in pixels that the user must travel to initiate a drag
+ */
+ public int getTouchSlop() {
+ return mTouchSlop;
+ }
+
+ /**
+ * The result of a call to this method is equivalent to
+ * {@link #processTouchEvent(android.view.MotionEvent)} receiving an ACTION_CANCEL event.
+ */
+ public void cancel() {
+ mActivePointerId = INVALID_POINTER;
+ clearMotionHistory();
+
+ if (mVelocityTracker != null) {
+ mVelocityTracker.recycle();
+ mVelocityTracker = null;
+ }
+ }
+
+ /**
+ * {@link #cancel()}, but also abort all motion in progress and snap to the end of any
+ * animation.
+ */
+ public void abort() {
+ cancel();
+ if (mDragState == STATE_SETTLING) {
+ final int oldX = mScroller.getCurrX();
+ final int oldY = mScroller.getCurrY();
+ mScroller.abortAnimation();
+ final int newX = mScroller.getCurrX();
+ final int newY = mScroller.getCurrY();
+ mCallback.onViewPositionChanged(mCapturedView, newX, newY, newX - oldX, newY - oldY);
+ }
+ setDragState(STATE_IDLE);
+ }
+
+ /**
+ * Animate the view <code>child</code> to the given (left, top) position.
+ * If this method returns true, the caller should invoke {@link #continueSettling(boolean)}
+ * on each subsequent frame to continue the motion until it returns false. If this method
+ * returns false there is no further work to do to complete the movement.
+ *
+ * <p>This operation does not count as a capture event, though {@link #getCapturedView()}
+ * will still report the sliding view while the slide is in progress.</p>
+ *
+ * @param child Child view to capture and animate
+ * @param finalLeft Final left position of child
+ * @param finalTop Final top position of child
+ * @return true if animation should continue through {@link #continueSettling(boolean)} calls
+ */
+ public boolean smoothSlideViewTo(View child, int finalLeft, int finalTop) {
+ mCapturedView = child;
+ mActivePointerId = INVALID_POINTER;
+
+ return forceSettleCapturedViewAt(finalLeft, finalTop, 0, 0);
+ }
+
+ /**
+ * Settle the captured view at the given (left, top) position.
+ * The appropriate velocity from prior motion will be taken into account.
+ * If this method returns true, the caller should invoke {@link #continueSettling(boolean)}
+ * on each subsequent frame to continue the motion until it returns false. If this method
+ * returns false there is no further work to do to complete the movement.
+ *
+ * @param finalLeft Settled left edge position for the captured view
+ * @param finalTop Settled top edge position for the captured view
+ * @return true if animation should continue through {@link #continueSettling(boolean)} calls
+ */
+ public boolean settleCapturedViewAt(int finalLeft, int finalTop) {
+ if (!mReleaseInProgress) {
+ throw new IllegalStateException("Cannot settleCapturedViewAt outside of a call to " +
+ "Callback#onViewReleased");
+ }
+
+ return forceSettleCapturedViewAt(finalLeft, finalTop,
+ (int) VelocityTrackerCompat.getXVelocity(mVelocityTracker, mActivePointerId),
+ (int) VelocityTrackerCompat.getYVelocity(mVelocityTracker, mActivePointerId));
+ }
+
+ /**
+ * Settle the captured view at the given (left, top) position.
+ *
+ * @param finalLeft Target left position for the captured view
+ * @param finalTop Target top position for the captured view
+ * @param xvel Horizontal velocity
+ * @param yvel Vertical velocity
+ * @return true if animation should continue through {@link #continueSettling(boolean)} calls
+ */
+ private boolean forceSettleCapturedViewAt(int finalLeft, int finalTop, int xvel, int yvel) {
+ final int startLeft = mCapturedView.getLeft();
+ final int startTop = mCapturedView.getTop();
+ final int dx = finalLeft - startLeft;
+ final int dy = finalTop - startTop;
+
+ if (dx == 0 && dy == 0) {
+ // Nothing to do. Send callbacks, be done.
+ mScroller.abortAnimation();
+ setDragState(STATE_IDLE);
+ return false;
+ }
+
+ final int duration = computeSettleDuration(mCapturedView, dx, dy, xvel, yvel);
+ mScroller.startScroll(startLeft, startTop, dx, dy, duration);
+
+ setDragState(STATE_SETTLING);
+ return true;
+ }
+
+ private int computeSettleDuration(View child, int dx, int dy, int xvel, int yvel) {
+ xvel = clampMag(xvel, (int) mMinVelocity, (int) mMaxVelocity);
+ yvel = clampMag(yvel, (int) mMinVelocity, (int) mMaxVelocity);
+ final int absDx = Math.abs(dx);
+ final int absDy = Math.abs(dy);
+ final int absXVel = Math.abs(xvel);
+ final int absYVel = Math.abs(yvel);
+ final int addedVel = absXVel + absYVel;
+ final int addedDistance = absDx + absDy;
+
+ final float xweight = xvel != 0 ? (float) absXVel / addedVel :
+ (float) absDx / addedDistance;
+ final float yweight = yvel != 0 ? (float) absYVel / addedVel :
+ (float) absDy / addedDistance;
+
+ int xduration = computeAxisDuration(dx, xvel, mCallback.getViewHorizontalDragRange(child));
+ int yduration = computeAxisDuration(dy, yvel, mCallback.getViewVerticalDragRange(child));
+
+ return (int) (xduration * xweight + yduration * yweight);
+ }
+
+ private int computeAxisDuration(int delta, int velocity, int motionRange) {
+ if (delta == 0) {
+ return 0;
+ }
+
+ final int width = mParentView.getWidth();
+ final int halfWidth = width / 2;
+ final float distanceRatio = Math.min(1f, (float) Math.abs(delta) / width);
+ final float distance = halfWidth + halfWidth *
+ distanceInfluenceForSnapDuration(distanceRatio);
+
+ int duration;
+ velocity = Math.abs(velocity);
+ if (velocity > 0) {
+ duration = 4 * Math.round(1000 * Math.abs(distance / velocity));
+ } else {
+ final float range = (float) Math.abs(delta) / motionRange;
+ duration = (int) ((range + 1) * BASE_SETTLE_DURATION);
+ }
+ return Math.min(duration, MAX_SETTLE_DURATION);
+ }
+
+ /**
+ * Clamp the magnitude of value for absMin and absMax.
+ * If the value is below the minimum, it will be clamped to zero.
+ * If the value is above the maximum, it will be clamped to the maximum.
+ *
+ * @param value Value to clamp
+ * @param absMin Absolute value of the minimum significant value to return
+ * @param absMax Absolute value of the maximum value to return
+ * @return The clamped value with the same sign as <code>value</code>
+ */
+ private int clampMag(int value, int absMin, int absMax) {
+ final int absValue = Math.abs(value);
+ if (absValue < absMin) return 0;
+ if (absValue > absMax) return value > 0 ? absMax : -absMax;
+ return value;
+ }
+
+ /**
+ * Clamp the magnitude of value for absMin and absMax.
+ * If the value is below the minimum, it will be clamped to zero.
+ * If the value is above the maximum, it will be clamped to the maximum.
+ *
+ * @param value Value to clamp
+ * @param absMin Absolute value of the minimum significant value to return
+ * @param absMax Absolute value of the maximum value to return
+ * @return The clamped value with the same sign as <code>value</code>
+ */
+ private float clampMag(float value, float absMin, float absMax) {
+ final float absValue = Math.abs(value);
+ if (absValue < absMin) return 0;
+ if (absValue > absMax) return value > 0 ? absMax : -absMax;
+ return value;
+ }
+
+ private float distanceInfluenceForSnapDuration(float f) {
+ f -= 0.5f; // center the values about 0.
+ f *= 0.3f * Math.PI / 2.0f;
+ return (float) Math.sin(f);
+ }
+
+ /**
+ * Settle the captured view based on standard free-moving fling behavior.
+ * The caller should invoke {@link #continueSettling(boolean)} on each subsequent frame
+ * to continue the motion until it returns false.
+ *
+ * @param minLeft Minimum X position for the view's left edge
+ * @param minTop Minimum Y position for the view's top edge
+ * @param maxLeft Maximum X position for the view's left edge
+ * @param maxTop Maximum Y position for the view's top edge
+ */
+ public void flingCapturedView(int minLeft, int minTop, int maxLeft, int maxTop) {
+ if (!mReleaseInProgress) {
+ throw new IllegalStateException("Cannot flingCapturedView outside of a call to " +
+ "Callback#onViewReleased");
+ }
+
+ mScroller.fling(mCapturedView.getLeft(), mCapturedView.getTop(),
+ (int) VelocityTrackerCompat.getXVelocity(mVelocityTracker, mActivePointerId),
+ (int) VelocityTrackerCompat.getYVelocity(mVelocityTracker, mActivePointerId),
+ minLeft, maxLeft, minTop, maxTop);
+
+ setDragState(STATE_SETTLING);
+ }
+
+ /**
+ * Move the captured settling view by the appropriate amount for the current time.
+ * If <code>continueSettling</code> returns true, the caller should call it again
+ * on the next frame to continue.
+ *
+ * @param deferCallbacks true if state callbacks should be deferred via posted message.
+ * Set this to true if you are calling this method from
+ * {@link android.view.View#computeScroll()} or similar methods
+ * invoked as part of layout or drawing.
+ * @return true if settle is still in progress
+ */
+ public boolean continueSettling(boolean deferCallbacks) {
+ if (mDragState == STATE_SETTLING) {
+ boolean keepGoing = mScroller.computeScrollOffset();
+ final int x = mScroller.getCurrX();
+ final int y = mScroller.getCurrY();
+ final int dx = x - mCapturedView.getLeft();
+ final int dy = y - mCapturedView.getTop();
+
+ if (dx != 0) {
+ mCapturedView.offsetLeftAndRight(dx);
+ }
+ if (dy != 0) {
+ mCapturedView.offsetTopAndBottom(dy);
+ }
+
+ if (dx != 0 || dy != 0) {
+ mCallback.onViewPositionChanged(mCapturedView, x, y, dx, dy);
+ }
+
+ if (keepGoing && x == mScroller.getFinalX() && y == mScroller.getFinalY()) {
+ // Close enough. The interpolator/scroller might think we're still moving
+ // but the user sure doesn't.
+ mScroller.abortAnimation();
+ keepGoing = mScroller.isFinished();
+ }
+
+ if (!keepGoing) {
+ if (deferCallbacks) {
+ mParentView.post(mSetIdleRunnable);
+ } else {
+ setDragState(STATE_IDLE);
+ }
+ }
+ }
+
+ return mDragState == STATE_SETTLING;
+ }
+
+ /**
+ * Like all callback events this must happen on the UI thread, but release
+ * involves some extra semantics. During a release (mReleaseInProgress)
+ * is the only time it is valid to call {@link #settleCapturedViewAt(int, int)}
+ * or {@link #flingCapturedView(int, int, int, int)}.
+ */
+ private void dispatchViewReleased(float xvel, float yvel) {
+ mReleaseInProgress = true;
+ mCallback.onViewReleased(mCapturedView, xvel, yvel);
+ mReleaseInProgress = false;
+
+ if (mDragState == STATE_DRAGGING) {
+ // onViewReleased didn't call a method that would have changed this. Go idle.
+ setDragState(STATE_IDLE);
+ }
+ }
+
+ private void clearMotionHistory() {
+ if (mInitialMotionX == null) {
+ return;
+ }
+ Arrays.fill(mInitialMotionX, 0);
+ Arrays.fill(mInitialMotionY, 0);
+ Arrays.fill(mLastMotionX, 0);
+ Arrays.fill(mLastMotionY, 0);
+ Arrays.fill(mInitialEdgesTouched, 0);
+ Arrays.fill(mEdgeDragsInProgress, 0);
+ Arrays.fill(mEdgeDragsLocked, 0);
+ mPointersDown = 0;
+ }
+
+ private void clearMotionHistory(int pointerId) {
+ if (mInitialMotionX == null) {
+ return;
+ }
+ mInitialMotionX[pointerId] = 0;
+ mInitialMotionY[pointerId] = 0;
+ mLastMotionX[pointerId] = 0;
+ mLastMotionY[pointerId] = 0;
+ mInitialEdgesTouched[pointerId] = 0;
+ mEdgeDragsInProgress[pointerId] = 0;
+ mEdgeDragsLocked[pointerId] = 0;
+ mPointersDown &= ~(1 << pointerId);
+ }
+
+ private void ensureMotionHistorySizeForId(int pointerId) {
+ if (mInitialMotionX == null || mInitialMotionX.length <= pointerId) {
+ float[] imx = new float[pointerId + 1];
+ float[] imy = new float[pointerId + 1];
+ float[] lmx = new float[pointerId + 1];
+ float[] lmy = new float[pointerId + 1];
+ int[] iit = new int[pointerId + 1];
+ int[] edip = new int[pointerId + 1];
+ int[] edl = new int[pointerId + 1];
+
+ if (mInitialMotionX != null) {
+ System.arraycopy(mInitialMotionX, 0, imx, 0, mInitialMotionX.length);
+ System.arraycopy(mInitialMotionY, 0, imy, 0, mInitialMotionY.length);
+ System.arraycopy(mLastMotionX, 0, lmx, 0, mLastMotionX.length);
+ System.arraycopy(mLastMotionY, 0, lmy, 0, mLastMotionY.length);
+ System.arraycopy(mInitialEdgesTouched, 0, iit, 0, mInitialEdgesTouched.length);
+ System.arraycopy(mEdgeDragsInProgress, 0, edip, 0, mEdgeDragsInProgress.length);
+ System.arraycopy(mEdgeDragsLocked, 0, edl, 0, mEdgeDragsLocked.length);
+ }
+
+ mInitialMotionX = imx;
+ mInitialMotionY = imy;
+ mLastMotionX = lmx;
+ mLastMotionY = lmy;
+ mInitialEdgesTouched = iit;
+ mEdgeDragsInProgress = edip;
+ mEdgeDragsLocked = edl;
+ }
+ }
+
+ private void saveInitialMotion(float x, float y, int pointerId) {
+ ensureMotionHistorySizeForId(pointerId);
+ mInitialMotionX[pointerId] = mLastMotionX[pointerId] = x;
+ mInitialMotionY[pointerId] = mLastMotionY[pointerId] = y;
+ mInitialEdgesTouched[pointerId] = getEdgesTouched((int) x, (int) y);
+ mPointersDown |= 1 << pointerId;
+ }
+
+ private void saveLastMotion(MotionEvent ev) {
+ final int pointerCount = MotionEventCompat.getPointerCount(ev);
+ for (int i = 0; i < pointerCount; i++) {
+ final int pointerId = MotionEventCompat.getPointerId(ev, i);
+ final float x = MotionEventCompat.getX(ev, i);
+ final float y = MotionEventCompat.getY(ev, i);
+ mLastMotionX[pointerId] = x;
+ mLastMotionY[pointerId] = y;
+ }
+ }
+
+ /**
+ * Check if the given pointer ID represents a pointer that is currently down (to the best
+ * of the ViewDragHelper's knowledge).
+ *
+ * <p>The state used to report this information is populated by the methods
+ * {@link #shouldInterceptTouchEvent(android.view.MotionEvent)} or
+ * {@link #processTouchEvent(android.view.MotionEvent)}. If one of these methods has not
+ * been called for all relevant MotionEvents to track, the information reported
+ * by this method may be stale or incorrect.</p>
+ *
+ * @param pointerId pointer ID to check; corresponds to IDs provided by MotionEvent
+ * @return true if the pointer with the given ID is still down
+ */
+ public boolean isPointerDown(int pointerId) {
+ return (mPointersDown & 1 << pointerId) != 0;
+ }
+
+ void setDragState(int state) {
+ if (mDragState != state) {
+ mDragState = state;
+ mCallback.onViewDragStateChanged(state);
+ if (state == STATE_IDLE) {
+ mCapturedView = null;
+ }
+ }
+ }
+
+ /**
+ * Attempt to capture the view with the given pointer ID. The callback will be involved.
+ * This will put us into the "dragging" state. If we've already captured this view with
+ * this pointer this method will immediately return true without consulting the callback.
+ *
+ * @param toCapture View to capture
+ * @param pointerId Pointer to capture with
+ * @return true if capture was successful
+ */
+ boolean tryCaptureViewForDrag(View toCapture, int pointerId) {
+ if (toCapture == mCapturedView && mActivePointerId == pointerId) {
+ // Already done!
+ return true;
+ }
+ if (toCapture != null && mCallback.tryCaptureView(toCapture, pointerId)) {
+ mActivePointerId = pointerId;
+ captureChildView(toCapture, pointerId);
+ return true;
+ }
+ return false;
+ }
+
+ /**
+ * Tests scrollability within child views of v given a delta of dx.
+ *
+ * @param v View to test for horizontal scrollability
+ * @param checkV Whether the view v passed should itself be checked for scrollability (true),
+ * or just its children (false).
+ * @param dx Delta scrolled in pixels along the X axis
+ * @param dy Delta scrolled in pixels along the Y axis
+ * @param x X coordinate of the active touch point
+ * @param y Y coordinate of the active touch point
+ * @return true if child views of v can be scrolled by delta of dx.
+ */
+ protected boolean canScroll(View v, boolean checkV, int dx, int dy, int x, int y) {
+ if (v instanceof ViewGroup) {
+ final ViewGroup group = (ViewGroup) v;
+ final int scrollX = v.getScrollX();
+ final int scrollY = v.getScrollY();
+ final int count = group.getChildCount();
+ // Count backwards - let topmost views consume scroll distance first.
+ for (int i = count - 1; i >= 0; i--) {
+ // TODO: Add versioned support here for transformed views.
+ // This will not work for transformed views in Honeycomb+
+ final View child = group.getChildAt(i);
+ if (x + scrollX >= child.getLeft() && x + scrollX < child.getRight() &&
+ y + scrollY >= child.getTop() && y + scrollY < child.getBottom() &&
+ canScroll(child, true, dx, dy, x + scrollX - child.getLeft(),
+ y + scrollY - child.getTop())) {
+ return true;
+ }
+ }
+ }
+
+ return checkV && (ViewCompat.canScrollHorizontally(v, -dx) ||
+ ViewCompat.canScrollVertically(v, -dy));
+ }
+
+ /**
+ * Check if this event as provided to the parent view's onInterceptTouchEvent should
+ * cause the parent to intercept the touch event stream.
+ *
+ * @param ev MotionEvent provided to onInterceptTouchEvent
+ * @return true if the parent view should return true from onInterceptTouchEvent
+ */
+ public boolean shouldInterceptTouchEvent(MotionEvent ev) {
+ final int action = MotionEventCompat.getActionMasked(ev);
+ final int actionIndex = MotionEventCompat.getActionIndex(ev);
+
+ if (action == MotionEvent.ACTION_DOWN) {
+ // Reset things for a new event stream, just in case we didn't get
+ // the whole previous stream.
+ cancel();
+ }
+
+ if (mVelocityTracker == null) {
+ mVelocityTracker = VelocityTracker.obtain();
+ }
+ mVelocityTracker.addMovement(ev);
+
+ switch (action) {
+ case MotionEvent.ACTION_DOWN: {
+ final float x = ev.getX();
+ final float y = ev.getY();
+ final int pointerId = MotionEventCompat.getPointerId(ev, 0);
+ saveInitialMotion(x, y, pointerId);
+
+ final View toCapture = findTopChildUnder((int) x, (int) y);
+
+ // Catch a settling view if possible.
+ if (toCapture == mCapturedView && mDragState == STATE_SETTLING) {
+ tryCaptureViewForDrag(toCapture, pointerId);
+ }
+
+ final int edgesTouched = mInitialEdgesTouched[pointerId];
+ if ((edgesTouched & mTrackingEdges) != 0) {
+ mCallback.onEdgeTouched(edgesTouched & mTrackingEdges, pointerId);
+ }
+ break;
+ }
+
+ case MotionEventCompat.ACTION_POINTER_DOWN: {
+ final int pointerId = MotionEventCompat.getPointerId(ev, actionIndex);
+ final float x = MotionEventCompat.getX(ev, actionIndex);
+ final float y = MotionEventCompat.getY(ev, actionIndex);
+
+ saveInitialMotion(x, y, pointerId);
+
+ // A ViewDragHelper can only manipulate one view at a time.
+ if (mDragState == STATE_IDLE) {
+ final int edgesTouched = mInitialEdgesTouched[pointerId];
+ if ((edgesTouched & mTrackingEdges) != 0) {
+ mCallback.onEdgeTouched(edgesTouched & mTrackingEdges, pointerId);
+ }
+ } else if (mDragState == STATE_SETTLING) {
+ // Catch a settling view if possible.
+ final View toCapture = findTopChildUnder((int) x, (int) y);
+ if (toCapture == mCapturedView) {
+ tryCaptureViewForDrag(toCapture, pointerId);
+ }
+ }
+ break;
+ }
+
+ case MotionEvent.ACTION_MOVE: {
+ // First to cross a touch slop over a draggable view wins. Also report edge drags.
+ final int pointerCount = MotionEventCompat.getPointerCount(ev);
+ for (int i = 0; i < pointerCount; i++) {
+ final int pointerId = MotionEventCompat.getPointerId(ev, i);
+ final float x = MotionEventCompat.getX(ev, i);
+ final float y = MotionEventCompat.getY(ev, i);
+ final float dx = x - mInitialMotionX[pointerId];
+ final float dy = y - mInitialMotionY[pointerId];
+
+ reportNewEdgeDrags(dx, dy, pointerId);
+ if (mDragState == STATE_DRAGGING) {
+ // Callback might have started an edge drag
+ break;
+ }
+
+ final View toCapture = findTopChildUnder((int) x, (int) y);
+ if (toCapture != null && checkTouchSlop(toCapture, dx, dy) &&
+ tryCaptureViewForDrag(toCapture, pointerId)) {
+ break;
+ }
+ }
+ saveLastMotion(ev);
+ break;
+ }
+
+ case MotionEventCompat.ACTION_POINTER_UP: {
+ final int pointerId = MotionEventCompat.getPointerId(ev, actionIndex);
+ clearMotionHistory(pointerId);
+ break;
+ }
+
+ case MotionEvent.ACTION_UP:
+ case MotionEvent.ACTION_CANCEL: {
+ cancel();
+ break;
+ }
+ }
+
+ return mDragState == STATE_DRAGGING;
+ }
+
+ /**
+ * Process a touch event received by the parent view. This method will dispatch callback events
+ * as needed before returning. The parent view's onTouchEvent implementation should call this.
+ *
+ * @param ev The touch event received by the parent view
+ */
+ public void processTouchEvent(MotionEvent ev) {
+ final int action = MotionEventCompat.getActionMasked(ev);
+ final int actionIndex = MotionEventCompat.getActionIndex(ev);
+
+ if (action == MotionEvent.ACTION_DOWN) {
+ // Reset things for a new event stream, just in case we didn't get
+ // the whole previous stream.
+ cancel();
+ }
+
+ if (mVelocityTracker == null) {
+ mVelocityTracker = VelocityTracker.obtain();
+ }
+ mVelocityTracker.addMovement(ev);
+
+ switch (action) {
+ case MotionEvent.ACTION_DOWN: {
+ final float x = ev.getX();
+ final float y = ev.getY();
+ final int pointerId = MotionEventCompat.getPointerId(ev, 0);
+ final View toCapture = findTopChildUnder((int) x, (int) y);
+
+ saveInitialMotion(x, y, pointerId);
+
+ // Since the parent is already directly processing this touch event,
+ // there is no reason to delay for a slop before dragging.
+ // Start immediately if possible.
+ tryCaptureViewForDrag(toCapture, pointerId);
+
+ final int edgesTouched = mInitialEdgesTouched[pointerId];
+ if ((edgesTouched & mTrackingEdges) != 0) {
+ mCallback.onEdgeTouched(edgesTouched & mTrackingEdges, pointerId);
+ }
+ break;
+ }
+
+ case MotionEventCompat.ACTION_POINTER_DOWN: {
+ final int pointerId = MotionEventCompat.getPointerId(ev, actionIndex);
+ final float x = MotionEventCompat.getX(ev, actionIndex);
+ final float y = MotionEventCompat.getY(ev, actionIndex);
+
+ saveInitialMotion(x, y, pointerId);
+
+ // A ViewDragHelper can only manipulate one view at a time.
+ if (mDragState == STATE_IDLE) {
+ // If we're idle we can do anything! Treat it like a normal down event.
+
+ final View toCapture = findTopChildUnder((int) x, (int) y);
+ tryCaptureViewForDrag(toCapture, pointerId);
+
+ final int edgesTouched = mInitialEdgesTouched[pointerId];
+ if ((edgesTouched & mTrackingEdges) != 0) {
+ mCallback.onEdgeTouched(edgesTouched & mTrackingEdges, pointerId);
+ }
+ } else if (isCapturedViewUnder((int) x, (int) y)) {
+ // We're still tracking a captured view. If the same view is under this
+ // point, we'll swap to controlling it with this pointer instead.
+ // (This will still work if we're "catching" a settling view.)
+
+ tryCaptureViewForDrag(mCapturedView, pointerId);
+ }
+ break;
+ }
+
+ case MotionEvent.ACTION_MOVE: {
+ if (mDragState == STATE_DRAGGING) {
+ final int index = MotionEventCompat.findPointerIndex(ev, mActivePointerId);
+ final float x = MotionEventCompat.getX(ev, index);
+ final float y = MotionEventCompat.getY(ev, index);
+ final int idx = (int) (x - mLastMotionX[mActivePointerId]);
+ final int idy = (int) (y - mLastMotionY[mActivePointerId]);
+
+ dragTo(mCapturedView.getLeft() + idx, mCapturedView.getTop() + idy, idx, idy);
+
+ saveLastMotion(ev);
+ } else {
+ // Check to see if any pointer is now over a draggable view.
+ final int pointerCount = MotionEventCompat.getPointerCount(ev);
+ for (int i = 0; i < pointerCount; i++) {
+ final int pointerId = MotionEventCompat.getPointerId(ev, i);
+ final float x = MotionEventCompat.getX(ev, i);
+ final float y = MotionEventCompat.getY(ev, i);
+ final float dx = x - mInitialMotionX[pointerId];
+ final float dy = y - mInitialMotionY[pointerId];
+
+ reportNewEdgeDrags(dx, dy, pointerId);
+ if (mDragState == STATE_DRAGGING) {
+ // Callback might have started an edge drag.
+ break;
+ }
+
+ final View toCapture = findTopChildUnder((int) x, (int) y);
+ if (checkTouchSlop(toCapture, dx, dy) &&
+ tryCaptureViewForDrag(toCapture, pointerId)) {
+ break;
+ }
+ }
+ saveLastMotion(ev);
+ }
+ break;
+ }
+
+ case MotionEventCompat.ACTION_POINTER_UP: {
+ final int pointerId = MotionEventCompat.getPointerId(ev, actionIndex);
+ if (mDragState == STATE_DRAGGING && pointerId == mActivePointerId) {
+ // Try to find another pointer that's still holding on to the captured view.
+ int newActivePointer = INVALID_POINTER;
+ final int pointerCount = MotionEventCompat.getPointerCount(ev);
+ for (int i = 0; i < pointerCount; i++) {
+ final int id = MotionEventCompat.getPointerId(ev, i);
+ if (id == mActivePointerId) {
+ // This one's going away, skip.
+ continue;
+ }
+
+ final float x = MotionEventCompat.getX(ev, i);
+ final float y = MotionEventCompat.getY(ev, i);
+ if (findTopChildUnder((int) x, (int) y) == mCapturedView &&
+ tryCaptureViewForDrag(mCapturedView, id)) {
+ newActivePointer = mActivePointerId;
+ break;
+ }
+ }
+
+ if (newActivePointer == INVALID_POINTER) {
+ // We didn't find another pointer still touching the view, release it.
+ releaseViewForPointerUp();
+ }
+ }
+ clearMotionHistory(pointerId);
+ break;
+ }
+
+ case MotionEvent.ACTION_UP: {
+ if (mDragState == STATE_DRAGGING) {
+ releaseViewForPointerUp();
+ }
+ cancel();
+ break;
+ }
+
+ case MotionEvent.ACTION_CANCEL: {
+ if (mDragState == STATE_DRAGGING) {
+ dispatchViewReleased(0, 0);
+ }
+ cancel();
+ break;
+ }
+ }
+ }
+
+ private void reportNewEdgeDrags(float dx, float dy, int pointerId) {
+ int dragsStarted = 0;
+ if (checkNewEdgeDrag(dx, dy, pointerId, EDGE_LEFT)) {
+ dragsStarted |= EDGE_LEFT;
+ }
+ if (checkNewEdgeDrag(dy, dx, pointerId, EDGE_TOP)) {
+ dragsStarted |= EDGE_TOP;
+ }
+ if (checkNewEdgeDrag(dx, dy, pointerId, EDGE_RIGHT)) {
+ dragsStarted |= EDGE_RIGHT;
+ }
+ if (checkNewEdgeDrag(dy, dx, pointerId, EDGE_BOTTOM)) {
+ dragsStarted |= EDGE_BOTTOM;
+ }
+
+ if (dragsStarted != 0) {
+ mEdgeDragsInProgress[pointerId] |= dragsStarted;
+ mCallback.onEdgeDragStarted(dragsStarted, pointerId);
+ }
+ }
+
+ private boolean checkNewEdgeDrag(float delta, float odelta, int pointerId, int edge) {
+ final float absDelta = Math.abs(delta);
+ final float absODelta = Math.abs(odelta);
+
+ if ((mInitialEdgesTouched[pointerId] & edge) != edge || (mTrackingEdges & edge) == 0 ||
+ (mEdgeDragsLocked[pointerId] & edge) == edge ||
+ (mEdgeDragsInProgress[pointerId] & edge) == edge ||
+ (absDelta <= mTouchSlop && absODelta <= mTouchSlop)) {
+ return false;
+ }
+ if (absDelta < absODelta * 0.5f && mCallback.onEdgeLock(edge)) {
+ mEdgeDragsLocked[pointerId] |= edge;
+ return false;
+ }
+ return (mEdgeDragsInProgress[pointerId] & edge) == 0 && absDelta > mTouchSlop;
+ }
+
+ /**
+ * Check if we've crossed a reasonable touch slop for the given child view.
+ * If the child cannot be dragged along the horizontal or vertical axis, motion
+ * along that axis will not count toward the slop check.
+ *
+ * @param child Child to check
+ * @param dx Motion since initial position along X axis
+ * @param dy Motion since initial position along Y axis
+ * @return true if the touch slop has been crossed
+ */
+ private boolean checkTouchSlop(View child, float dx, float dy) {
+ if (child == null) {
+ return false;
+ }
+ final boolean checkHorizontal = mCallback.getViewHorizontalDragRange(child) > 0;
+ final boolean checkVertical = mCallback.getViewVerticalDragRange(child) > 0;
+
+ if (checkHorizontal && checkVertical) {
+ return dx * dx + dy * dy > mTouchSlop * mTouchSlop;
+ } else if (checkHorizontal) {
+ return Math.abs(dx) > mTouchSlop;
+ } else if (checkVertical) {
+ return Math.abs(dy) > mTouchSlop;
+ }
+ return false;
+ }
+
+ /**
+ * Check if any pointer tracked in the current gesture has crossed
+ * the required slop threshold.
+ *
+ * <p>This depends on internal state populated by
+ * {@link #shouldInterceptTouchEvent(android.view.MotionEvent)} or
+ * {@link #processTouchEvent(android.view.MotionEvent)}. You should only rely on
+ * the results of this method after all currently available touch data
+ * has been provided to one of these two methods.</p>
+ *
+ * @param directions Combination of direction flags, see {@link #DIRECTION_HORIZONTAL},
+ * {@link #DIRECTION_VERTICAL}, {@link #DIRECTION_ALL}
+ * @return true if the slop threshold has been crossed, false otherwise
+ */
+ public boolean checkTouchSlop(int directions) {
+ final int count = mInitialMotionX.length;
+ for (int i = 0; i < count; i++) {
+ if (checkTouchSlop(directions, i)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Check if the specified pointer tracked in the current gesture has crossed
+ * the required slop threshold.
+ *
+ * <p>This depends on internal state populated by
+ * {@link #shouldInterceptTouchEvent(android.view.MotionEvent)} or
+ * {@link #processTouchEvent(android.view.MotionEvent)}. You should only rely on
+ * the results of this method after all currently available touch data
+ * has been provided to one of these two methods.</p>
+ *
+ * @param directions Combination of direction flags, see {@link #DIRECTION_HORIZONTAL},
+ * {@link #DIRECTION_VERTICAL}, {@link #DIRECTION_ALL}
+ * @param pointerId ID of the pointer to slop check as specified by MotionEvent
+ * @return true if the slop threshold has been crossed, false otherwise
+ */
+ public boolean checkTouchSlop(int directions, int pointerId) {
+ if (!isPointerDown(pointerId)) {
+ return false;
+ }
+
+ final boolean checkHorizontal = (directions & DIRECTION_HORIZONTAL) == DIRECTION_HORIZONTAL;
+ final boolean checkVertical = (directions & DIRECTION_VERTICAL) == DIRECTION_VERTICAL;
+
+ final float dx = mLastMotionX[pointerId] - mInitialMotionX[pointerId];
+ final float dy = mLastMotionY[pointerId] - mInitialMotionY[pointerId];
+
+ if (checkHorizontal && checkVertical) {
+ return dx * dx + dy * dy > mTouchSlop * mTouchSlop;
+ } else if (checkHorizontal) {
+ return Math.abs(dx) > mTouchSlop;
+ } else if (checkVertical) {
+ return Math.abs(dy) > mTouchSlop;
+ }
+ return false;
+ }
+
+ /**
+ * Check if any of the edges specified were initially touched in the currently active gesture.
+ * If there is no currently active gesture this method will return false.
+ *
+ * @param edges Edges to check for an initial edge touch. See {@link #EDGE_LEFT},
+ * {@link #EDGE_TOP}, {@link #EDGE_RIGHT}, {@link #EDGE_BOTTOM} and
+ * {@link #EDGE_ALL}
+ * @return true if any of the edges specified were initially touched in the current gesture
+ */
+ public boolean isEdgeTouched(int edges) {
+ final int count = mInitialEdgesTouched.length;
+ for (int i = 0; i < count; i++) {
+ if (isEdgeTouched(edges, i)) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Check if any of the edges specified were initially touched by the pointer with
+ * the specified ID. If there is no currently active gesture or if there is no pointer with
+ * the given ID currently down this method will return false.
+ *
+ * @param edges Edges to check for an initial edge touch. See {@link #EDGE_LEFT},
+ * {@link #EDGE_TOP}, {@link #EDGE_RIGHT}, {@link #EDGE_BOTTOM} and
+ * {@link #EDGE_ALL}
+ * @return true if any of the edges specified were initially touched in the current gesture
+ */
+ public boolean isEdgeTouched(int edges, int pointerId) {
+ return isPointerDown(pointerId) && (mInitialEdgesTouched[pointerId] & edges) != 0;
+ }
+
+ private void releaseViewForPointerUp() {
+ mVelocityTracker.computeCurrentVelocity(1000, mMaxVelocity);
+ final float xvel = clampMag(
+ VelocityTrackerCompat.getXVelocity(mVelocityTracker, mActivePointerId),
+ mMinVelocity, mMaxVelocity);
+ final float yvel = clampMag(
+ VelocityTrackerCompat.getYVelocity(mVelocityTracker, mActivePointerId),
+ mMinVelocity, mMaxVelocity);
+ dispatchViewReleased(xvel, yvel);
+ }
+
+ private void dragTo(int left, int top, int dx, int dy) {
+ int clampedX = left;
+ int clampedY = top;
+ final int oldLeft = mCapturedView.getLeft();
+ final int oldTop = mCapturedView.getTop();
+ if (dx != 0) {
+ clampedX = mCallback.clampViewPositionHorizontal(mCapturedView, left, dx);
+ mCapturedView.offsetLeftAndRight(clampedX - oldLeft);
+ }
+ if (dy != 0) {
+ clampedY = mCallback.clampViewPositionVertical(mCapturedView, top, dy);
+ mCapturedView.offsetTopAndBottom(clampedY - oldTop);
+ }
+
+ if (dx != 0 || dy != 0) {
+ final int clampedDx = clampedX - oldLeft;
+ final int clampedDy = clampedY - oldTop;
+ mCallback.onViewPositionChanged(mCapturedView, clampedX, clampedY,
+ clampedDx, clampedDy);
+ }
+ }
+
+ /**
+ * Determine if the currently captured view is under the given point in the
+ * parent view's coordinate system. If there is no captured view this method
+ * will return false.
+ *
+ * @param x X position to test in the parent's coordinate system
+ * @param y Y position to test in the parent's coordinate system
+ * @return true if the captured view is under the given point, false otherwise
+ */
+ public boolean isCapturedViewUnder(int x, int y) {
+ return isViewUnder(mCapturedView, x, y);
+ }
+
+ /**
+ * Determine if the supplied view is under the given point in the
+ * parent view's coordinate system.
+ *
+ * @param view Child view of the parent to hit test
+ * @param x X position to test in the parent's coordinate system
+ * @param y Y position to test in the parent's coordinate system
+ * @return true if the supplied view is under the given point, false otherwise
+ */
+ public boolean isViewUnder(View view, int x, int y) {
+ if (view == null) {
+ return false;
+ }
+ return x >= view.getLeft() &&
+ x < view.getRight() &&
+ y >= view.getTop() &&
+ y < view.getBottom();
+ }
+
+ /**
+ * Find the topmost child under the given point within the parent view's coordinate system.
+ * The child order is determined using {@link Callback#getOrderedChildIndex(int)}.
+ *
+ * @param x X position to test in the parent's coordinate system
+ * @param y Y position to test in the parent's coordinate system
+ * @return The topmost child view under (x, y) or null if none found.
+ */
+ public View findTopChildUnder(int x, int y) {
+ final int childCount = mParentView.getChildCount();
+ for (int i = childCount - 1; i >= 0; i--) {
+ final View child = mParentView.getChildAt(mCallback.getOrderedChildIndex(i));
+ if (x >= child.getLeft() && x < child.getRight() &&
+ y >= child.getTop() && y < child.getBottom()) {
+ return child;
+ }
+ }
+ return null;
+ }
+
+ private int getEdgesTouched(int x, int y) {
+ int result = 0;
+
+ if (x < mParentView.getLeft() + mEdgeSize) result |= EDGE_LEFT;
+ if (y < mParentView.getTop() + mEdgeSize) result |= EDGE_TOP;
+ if (x > mParentView.getRight() - mEdgeSize) result |= EDGE_RIGHT;
+ if (y > mParentView.getBottom() - mEdgeSize) result |= EDGE_BOTTOM;
+
+ return result;
+ }
+
+ /**
+ * Prepares the {@link ViewDragHelper} for the beginning of a nested scroll.
+ *
+ * @param target The child view that is dispatching the nested scroll.
+ */
+ public void startNestedScroll(View target) {
+ if (mVelocityTracker == null) {
+ mVelocityTracker = VelocityTracker.obtain();
+ }
+ setDragState(STATE_DRAGGING);
+ mCapturedView = target;
+ }
+
+ /**
+ * Informs the {@link ViewDragHelper} that a nested scroll has ended.
+ *
+ * @param target The child view that is dispatching the nested scroll.
+ */
+ public void stopNestedScroll(View target) {
+ mCapturedView = target;
+ dispatchViewReleased(0, 0);
+ }
+
+ /**
+ * Update the {@link ViewDragHelper} with a new nested scrolling event.
+ *
+ * @param target The child view that is dispatching the nested scroll.
+ * @param dx The x distance scrolled on the child, in pixels.
+ * @param dy The y distance scroll on the child, in pixels.
+ * @param consumed An int array for the {@link ViewDragHelper} to report back the scroll
+ * deltas that it consumed.
+ */
+ public void processNestedScroll(View target, int dx, int dy, int[] consumed) {
+ final int targetX = mCapturedView.getLeft() + dx;
+ final int targetY = mCapturedView.getTop() + dy;
+ dragTo(targetX, targetY, dx, dy);
+ if (consumed != null) {
+ final int unconsumedX = targetX - mCapturedView.getLeft();
+ final int unconsumedY = targetY - mCapturedView.getTop();
+ consumed[0] = dx - unconsumedX;
+ consumed[1] = dy - unconsumedY;
+ }
+ }
+
+}
diff --git a/src/com/android/dialerbind/ObjectFactory.java b/src/com/android/dialerbind/ObjectFactory.java
index be91e33..9786311 100644
--- a/src/com/android/dialerbind/ObjectFactory.java
+++ b/src/com/android/dialerbind/ObjectFactory.java
@@ -21,6 +21,7 @@
import android.content.Context;
import com.android.dialer.calllog.CallLogAdapter;
+import com.android.dialer.calllog.CallLogAdapter.CallItemExpandedListener;
import com.android.dialer.calllog.ContactInfoHelper;
import com.android.dialer.service.CachedNumberLookupService;
@@ -39,15 +40,13 @@
* @param context The context to use.
* @param callFetcher Instance of call fetcher to use.
* @param contactInfoHelper Instance of contact info helper class to use.
- * @param hideSecondaryAction If true, secondary action will be hidden (ie call details
- * or play voicemail).
* @param isCallLog Is this call log adapter being used on the call log?
* @return Instance of CallLogAdapter.
*/
public static CallLogAdapter newCallLogAdapter(Context context, CallFetcher callFetcher,
- ContactInfoHelper contactInfoHelper, boolean hideSecondaryAction,
+ ContactInfoHelper contactInfoHelper, CallItemExpandedListener callItemExpandedListener,
boolean isCallLog) {
- return new CallLogAdapter(context, callFetcher, contactInfoHelper, hideSecondaryAction,
+ return new CallLogAdapter(context, callFetcher, contactInfoHelper, callItemExpandedListener,
isCallLog);
}
}
diff --git a/tests/res/layout/fill_call_log_test.xml b/tests/res/layout/fill_call_log_test.xml
index 704b9c6..9b89e4a 100644
--- a/tests/res/layout/fill_call_log_test.xml
+++ b/tests/res/layout/fill_call_log_test.xml
@@ -20,7 +20,7 @@
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:gravity="center_horizontal"
+ android:gravity="left"
>
<TextView
android:layout_width="match_parent"
@@ -53,4 +53,153 @@
android:indeterminate="false"
android:visibility="gone"
/>
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/add_custom_entry"
+ />
+ <RadioGroup
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+ <RadioButton
+ android:id="@+id/call_type_incoming"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/call_type_incoming" />
+ <RadioButton
+ android:id="@+id/call_type_missed"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/call_type_missed" />
+ <RadioButton
+ android:id="@+id/call_type_outgoing"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/call_type_outgoing" />
+ </RadioGroup>
+ <LinearLayout
+ android:orientation="horizontal"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="left"
+ >
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/call_date"
+ />
+ <TextView
+ android:id="@+id/call_date"
+ android:paddingStart="16dp"
+ android:layout_width="120dp"
+ android:layout_height="wrap_content"
+ />
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/edit"
+ android:onClick="showDatePickerDialog" />
+ </LinearLayout>
+ <LinearLayout
+ android:orientation="horizontal"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="left"
+ >
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/call_time"
+ />
+ <TextView
+ android:id="@+id/call_time"
+ android:paddingStart="16dp"
+ android:layout_width="120dp"
+ android:layout_height="wrap_content"
+ />
+ <Button
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/edit"
+ android:onClick="showTimePickerDialog" />
+ </LinearLayout>
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/call_presentation"
+ />
+ <RadioGroup
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal">
+ <RadioButton
+ android:id="@+id/presentation_allowed"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/presentation_allowed"
+ android:textSize="9sp" />
+ <RadioButton
+ android:id="@+id/presentation_restricted"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/presentation_restricted"
+ android:textSize="9sp" />
+ <RadioButton
+ android:id="@+id/presentation_unknown"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/presentation_unknown"
+ android:textSize="9sp" />
+ <RadioButton
+ android:id="@+id/presentation_payphone"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/presentation_payphone"
+ android:textSize="9sp" />
+ </RadioGroup>
+ <LinearLayout
+ android:orientation="horizontal"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="left"
+ >
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/number"
+ />
+ <EditText
+ android:id="@+id/phone_number"
+ android:layout_width="180dp"
+ android:layout_height="wrap_content"
+ android:inputType="phone"
+ />
+ </LinearLayout>
+ <Button
+ android:id="@+id/add_custom"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/addToCallLogButton"
+ android:onClick="addManualEntry"
+ />
+ <LinearLayout
+ android:orientation="horizontal"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:gravity="left"
+ >
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="@string/delta_after_add"
+ />
+ <EditText
+ android:id="@+id/delta_after_add"
+ android:layout_width="90dp"
+ android:layout_height="wrap_content"
+ android:text="-1"
+ android:inputType="number"
+ />
+ </LinearLayout>
</LinearLayout>
diff --git a/tests/res/values/donottranslate_strings.xml b/tests/res/values/donottranslate_strings.xml
index ceba5ea..25c3a5a 100644
--- a/tests/res/values/donottranslate_strings.xml
+++ b/tests/res/values/donottranslate_strings.xml
@@ -37,5 +37,18 @@
<string name="numberOfCallLogEntries">Number of call log entries to add:</string>
<string name="addedLogEntriesToast">Added %1$d call log entries.</string>
<string name="noLogEntriesToast">No entries in the call log yet. Need at least one record for the template. Or use random numbers.</string>
-
+ <string name="add_custom_entry">Add custom call log entry:</string>
+ <string name="call_type_incoming">Incoming</string>
+ <string name="call_type_missed">Missed</string>
+ <string name="call_type_outgoing">Outgoing</string>
+ <string name="call_date">Call date</string>
+ <string name="call_time">Call time</string>
+ <string name="edit">Edit</string>
+ <string name="number">Number</string>
+ <string name="call_presentation">Presentation</string>
+ <string name="presentation_allowed">Allowed</string>
+ <string name="presentation_restricted">Restricted</string>
+ <string name="presentation_unknown">Unknown</string>
+ <string name="presentation_payphone">Payphone</string>
+ <string name="delta_after_add">Offset call time after add (min): </string>
</resources>
diff --git a/tests/src/com/android/dialer/CallDetailActivityTest.java b/tests/src/com/android/dialer/CallDetailActivityTest.java
index 1ad17c4..1e16fe4 100644
--- a/tests/src/com/android/dialer/CallDetailActivityTest.java
+++ b/tests/src/com/android/dialer/CallDetailActivityTest.java
@@ -219,7 +219,6 @@
mFakeAsyncTaskExecutor.runTask(PREPARE_MEDIA_PLAYER);
mTestUtils.clickButton(mActivityUnderTest, R.id.playback_speakerphone);
mTestUtils.clickButton(mActivityUnderTest, R.id.playback_start_stop);
- mTestUtils.clickButton(mActivityUnderTest, R.id.call_and_sms_main_action);
Thread.sleep(2000);
// TODO: Suppressed the test for now, because I'm looking for an easy way to say "the audio
// is not playing at this point", and I can't find it without doing dirty things.
diff --git a/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java b/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java
index 9b7d9de..679335e 100644
--- a/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java
+++ b/tests/src/com/android/dialer/PhoneCallDetailsHelperTest.java
@@ -111,9 +111,7 @@
public void testSetPhoneCallDetails_Normal() {
setPhoneCallDetailsWithNumber("14125551212",
Calls.PRESENTATION_ALLOWED, "1-412-555-1212");
- assertEquals("Yesterday", mViews.callTypeAndDate.getText().toString());
- assertEqualsHtml("<font color='#33b5e5'><b>Yesterday</b></font>",
- mViews.callTypeAndDate.getText());
+ assertTrue(mViews.callLocationAndDate.getText().toString().contains("Yesterday"));
}
/** Asserts that a char sequence is actually a Spanned corresponding to the expected HTML. */
@@ -252,12 +250,12 @@
/** Asserts that the label text field contains the given string value. */
private void assertLabelEquals(String text) {
- assertEquals(text, mViews.labelView.getText().toString());
+ assertTrue(mViews.callLocationAndDate.getText().toString().contains(text));
}
/** Asserts that the date text field contains the given string value. */
private void assertDateEquals(String text) {
- assertEquals(text, mViews.callTypeAndDate.getText().toString());
+ assertTrue(mViews.callLocationAndDate.getText().toString().contains(text));
}
/** Asserts that the call type contains the images with the given drawables. */
@@ -268,7 +266,7 @@
assertEquals(id, mViews.callTypeIcons.getCallType(index));
}
assertEquals(View.VISIBLE, mViews.callTypeIcons.getVisibility());
- assertEquals("Yesterday", mViews.callTypeAndDate.getText().toString());
+ assertTrue(mViews.callLocationAndDate.getText().toString().contains("Yesterday"));
}
/**
@@ -282,7 +280,8 @@
assertEquals(id, mViews.callTypeIcons.getCallType(index));
}
assertEquals(View.VISIBLE, mViews.callTypeIcons.getVisibility());
- assertEquals(overflowText + " Yesterday", mViews.callTypeAndDate.getText().toString());
+ assertTrue(mViews.callLocationAndDate.getText().toString().contains(overflowText));
+ assertTrue(mViews.callLocationAndDate.getText().toString().contains("Yesterday"));
}
/** Sets the phone call details with default values and the given number. */
@@ -291,8 +290,8 @@
mHelper.setPhoneCallDetails(mViews,
new PhoneCallDetails(number, presentation, formattedNumber,
TEST_COUNTRY_ISO, TEST_GEOCODE,
- new int[]{ Calls.VOICEMAIL_TYPE }, TEST_DATE, TEST_DURATION),
- true);
+ new int[]{ Calls.VOICEMAIL_TYPE }, TEST_DATE, TEST_DURATION)
+ );
}
/** Sets the phone call details with default values and the given number. */
@@ -301,8 +300,8 @@
mHelper.setPhoneCallDetails(mViews,
new PhoneCallDetails(number, Calls.PRESENTATION_ALLOWED,
formattedNumber, TEST_COUNTRY_ISO, geocodedLocation,
- new int[]{ Calls.VOICEMAIL_TYPE }, TEST_DATE, TEST_DURATION),
- true);
+ new int[]{ Calls.VOICEMAIL_TYPE }, TEST_DATE, TEST_DURATION)
+ );
}
/** Sets the phone call details with default values and the given date. */
@@ -310,8 +309,8 @@
mHelper.setPhoneCallDetails(mViews,
new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, TEST_GEOCODE,
- new int[]{ Calls.INCOMING_TYPE }, date, TEST_DURATION),
- false);
+ new int[]{ Calls.INCOMING_TYPE }, date, TEST_DURATION)
+ );
}
/** Sets the phone call details with default values and the given call types using icons. */
@@ -319,8 +318,8 @@
mHelper.setPhoneCallDetails(mViews,
new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, TEST_GEOCODE,
- callTypes, TEST_DATE, TEST_DURATION),
- false);
+ callTypes, TEST_DATE, TEST_DURATION)
+ );
}
private void setCallDetailsHeaderWithNumber(String number, int presentation) {
diff --git a/tests/src/com/android/dialer/calllog/CallLogAdapterTest.java b/tests/src/com/android/dialer/calllog/CallLogAdapterTest.java
index 12cdb2b..f3679d4 100644
--- a/tests/src/com/android/dialer/calllog/CallLogAdapterTest.java
+++ b/tests/src/com/android/dialer/calllog/CallLogAdapterTest.java
@@ -68,7 +68,7 @@
mCursor = new MatrixCursor(CallLogQuery._PROJECTION);
mCursor.moveToFirst();
// The views into which to store the data.
- mView = new View(getContext());
+ mView = new CallLogListItemView(getContext());
mView.setTag(CallLogListItemViews.createForTest(getContext()));
}
@@ -212,7 +212,7 @@
public TestCallLogAdapter(Context context, CallFetcher callFetcher,
ContactInfoHelper contactInfoHelper) {
- super(context, callFetcher, contactInfoHelper, false, false);
+ super(context, callFetcher, contactInfoHelper, null, false);
}
@Override
diff --git a/tests/src/com/android/dialer/calllog/CallLogFragmentTest.java b/tests/src/com/android/dialer/calllog/CallLogFragmentTest.java
index 49d32e5..964d8a2 100644
--- a/tests/src/com/android/dialer/calllog/CallLogFragmentTest.java
+++ b/tests/src/com/android/dialer/calllog/CallLogFragmentTest.java
@@ -20,6 +20,7 @@
import android.app.FragmentTransaction;
import android.content.ComponentName;
import android.content.ContentUris;
+import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.database.MatrixCursor;
@@ -34,6 +35,7 @@
import android.test.ActivityInstrumentationTestCase2;
import android.test.suitebuilder.annotation.LargeTest;
import android.test.suitebuilder.annotation.MediumTest;
+import android.util.Log;
import android.view.View;
import android.widget.FrameLayout;
@@ -89,11 +91,6 @@
private Random mRnd;
- // References to the icons bitmaps used to build the list are stored in a
- // map mIcons. The keys to retrieve the icons are:
- // Calls.INCOMING_TYPE, Calls.OUTGOING_TYPE and Calls.MISSED_TYPE.
- private HashMap<Integer, Bitmap> mCallTypeIcons;
-
// An item in the call list. All the methods performing checks use it.
private CallLogListItemViews mItem;
// The list of views representing the data in the DB. View are in
@@ -121,7 +118,9 @@
// Wait for the fragment to be loaded.
getInstrumentation().waitForIdleSync();
- mVoicemail = TelephonyManager.getDefault().getVoiceMailNumber();
+ final TelephonyManager telephonyManager =
+ (TelephonyManager) mActivity.getSystemService(Context.TELEPHONY_SERVICE);
+ mVoicemail = telephonyManager.getVoiceMailNumber();
mAdapter = mFragment.getAdapter();
// Do not process requests for details during tests. This would start a background thread,
// which makes the tests flaky.
@@ -129,7 +128,6 @@
mAdapter.stopRequestProcessing();
mParentView = new FrameLayout(mActivity);
mCursor = new MatrixCursor(CallLogQuery._PROJECTION);
- buildIconMap();
}
/**
@@ -171,7 +169,6 @@
insertPrivate(NOW, 0);
View view = mAdapter.newGroupView(getActivity(), mParentView);
mAdapter.bindGroupView(view, getActivity(), mCursor, 3, false);
- assertNotNull(view.findViewById(R.id.secondary_action_icon));
}
@MediumTest
@@ -179,8 +176,7 @@
mCursor.moveToFirst();
insertPrivate(NOW, 0);
View view = mAdapter.newStandAloneView(getActivity(), mParentView);
- mAdapter.bindStandAloneView(view, getActivity(), mCursor);
- assertNotNull(view.findViewById(R.id.secondary_action_icon));
+ mAdapter.bindViewForTest(view, getActivity(), mCursor);
}
@MediumTest
@@ -189,7 +185,6 @@
insertPrivate(NOW, 0);
View view = mAdapter.newChildView(getActivity(), mParentView);
mAdapter.bindChildView(view, getActivity(), mCursor);
- assertNotNull(view.findViewById(R.id.secondary_action_icon));
}
@MediumTest
@@ -197,7 +192,7 @@
mCursor.moveToFirst();
insert(TEST_NUMBER, Calls.PRESENTATION_ALLOWED, NOW, 0, Calls.INCOMING_TYPE);
View view = mAdapter.newStandAloneView(getActivity(), mParentView);
- mAdapter.bindStandAloneView(view, getActivity(), mCursor);
+ mAdapter.bindViewForTest(view, getActivity(), mCursor);
CallLogListItemViews views = (CallLogListItemViews) view.getTag();
assertNameIs(views, TEST_NUMBER);
@@ -211,7 +206,7 @@
values[CallLogQuery.CACHED_FORMATTED_NUMBER] = TEST_FORMATTED_NUMBER;
insertValues(values);
View view = mAdapter.newStandAloneView(getActivity(), mParentView);
- mAdapter.bindStandAloneView(view, getActivity(), mCursor);
+ mAdapter.bindViewForTest(view, getActivity(), mCursor);
CallLogListItemViews views = (CallLogListItemViews) view.getTag();
assertNameIs(views, TEST_FORMATTED_NUMBER);
@@ -225,7 +220,7 @@
insertWithCachedValues(TEST_NUMBER, NOW, 0, Calls.INCOMING_TYPE,
"John Doe", Phone.TYPE_HOME, TEST_DEFAULT_CUSTOM_LABEL);
View view = mAdapter.newStandAloneView(getActivity(), mParentView);
- mAdapter.bindStandAloneView(view, getActivity(), mCursor);
+ mAdapter.bindViewForTest(view, getActivity(), mCursor);
CallLogListItemViews views = (CallLogListItemViews) view.getTag();
assertNameIs(views, "John Doe");
@@ -238,7 +233,7 @@
insertWithCachedValues("sip:johndoe@gmail.com", NOW, 0, Calls.INCOMING_TYPE,
"John Doe", Phone.TYPE_HOME, TEST_DEFAULT_CUSTOM_LABEL);
View view = mAdapter.newStandAloneView(getActivity(), mParentView);
- mAdapter.bindStandAloneView(view, getActivity(), mCursor);
+ mAdapter.bindViewForTest(view, getActivity(), mCursor);
CallLogListItemViews views = (CallLogListItemViews) view.getTag();
assertNameIs(views, "John Doe");
@@ -253,7 +248,7 @@
insertWithCachedValues(TEST_NUMBER, NOW, 0, Calls.INCOMING_TYPE,
"John Doe", Phone.TYPE_HOME, TEST_DEFAULT_CUSTOM_LABEL);
View view = mAdapter.newStandAloneView(getActivity(), mParentView);
- mAdapter.bindStandAloneView(view, getActivity(), mCursor);
+ mAdapter.bindViewForTest(view, getActivity(), mCursor);
CallLogListItemViews views = (CallLogListItemViews) view.getTag();
assertNameIs(views, "John Doe");
@@ -268,7 +263,7 @@
insertWithCachedValues(TEST_NUMBER, NOW, 0, Calls.INCOMING_TYPE,
"John Doe", Phone.TYPE_WORK, TEST_DEFAULT_CUSTOM_LABEL);
View view = mAdapter.newStandAloneView(getActivity(), mParentView);
- mAdapter.bindStandAloneView(view, getActivity(), mCursor);
+ mAdapter.bindViewForTest(view, getActivity(), mCursor);
CallLogListItemViews views = (CallLogListItemViews) view.getTag();
assertNameIs(views, "John Doe");
@@ -282,7 +277,7 @@
insertWithCachedValues(TEST_NUMBER, NOW, 0, Calls.INCOMING_TYPE,
"John Doe", Phone.TYPE_CUSTOM, numberLabel);
View view = mAdapter.newStandAloneView(getActivity(), mParentView);
- mAdapter.bindStandAloneView(view, getActivity(), mCursor);
+ mAdapter.bindViewForTest(view, getActivity(), mCursor);
CallLogListItemViews views = (CallLogListItemViews) view.getTag();
assertNameIs(views, "John Doe");
@@ -295,7 +290,7 @@
insertWithCachedValues(TEST_NUMBER, NOW, 0, Calls.INCOMING_TYPE,
"John Doe", Phone.TYPE_HOME, "");
View view = mAdapter.newStandAloneView(getActivity(), mParentView);
- mAdapter.bindStandAloneView(view, getActivity(), mCursor);
+ mAdapter.bindViewForTest(view, getActivity(), mCursor);
CallLogListItemViews views = (CallLogListItemViews) view.getTag();
assertTrue(views.quickContactView.isEnabled());
@@ -306,7 +301,7 @@
mCursor.moveToFirst();
insert(TEST_NUMBER, Calls.PRESENTATION_ALLOWED, NOW, 0, Calls.INCOMING_TYPE);
View view = mAdapter.newStandAloneView(getActivity(), mParentView);
- mAdapter.bindStandAloneView(view, getActivity(), mCursor);
+ mAdapter.bindViewForTest(view, getActivity(), mCursor);
CallLogListItemViews views = (CallLogListItemViews) view.getTag();
assertFalse(views.quickContactView.isEnabled());
@@ -317,7 +312,7 @@
mCursor.moveToFirst();
insert(TEST_NUMBER, Calls.PRESENTATION_ALLOWED, NOW, 0, Calls.INCOMING_TYPE);
View view = mAdapter.newStandAloneView(getActivity(), mParentView);
- mAdapter.bindStandAloneView(view, getActivity(), mCursor);
+ mAdapter.bindViewForTest(view, getActivity(), mCursor);
CallLogListItemViews views = (CallLogListItemViews) view.getTag();
@@ -325,7 +320,7 @@
// {@link com.android.dialer.calllog.CallLogAdapter#bindView} method. If it is possible
// to place a call to the phone number, a call intent will have been created for the
// primaryActionView.
- IntentProvider intentProvider = (IntentProvider) views.primaryActionView.getTag();
+ IntentProvider intentProvider = (IntentProvider) views.callBackButtonView.getTag();
Intent intent = intentProvider.getIntent(mActivity);
// Starts a call.
assertEquals(Intent.ACTION_CALL_PRIVILEGED, intent.getAction());
@@ -338,10 +333,10 @@
mCursor.moveToFirst();
insertVoicemail(TEST_NUMBER, Calls.PRESENTATION_ALLOWED, NOW, 0);
View view = mAdapter.newStandAloneView(getActivity(), mParentView);
- mAdapter.bindStandAloneView(view, getActivity(), mCursor);
+ mAdapter.bindViewForTest(view, getActivity(), mCursor);
CallLogListItemViews views = (CallLogListItemViews) view.getTag();
- IntentProvider intentProvider = (IntentProvider) views.secondaryActionButtonView.getTag();
+ IntentProvider intentProvider = (IntentProvider) views.voicemailButtonView.getTag();
Intent intent = intentProvider.getIntent(mActivity);
// Starts the call detail activity.
assertEquals(new ComponentName(mActivity, CallDetailActivity.class),
@@ -381,12 +376,12 @@
if (presentation == Calls.PRESENTATION_RESTRICTED ||
presentation == Calls.PRESENTATION_UNKNOWN) {
//If number is not callable, the primary action view should have a null tag.
- assertNull(mItem.primaryActionView.getTag());
+ assertNull(mItem.callBackButtonView.getTag());
} else {
//If the number is callable, the primary action view should have a non-null tag.
- assertNotNull(mItem.primaryActionView.getTag());
+ assertNotNull(mItem.callBackButtonView.getTag());
- IntentProvider intentProvider = (IntentProvider)mItem.primaryActionView.getTag();
+ IntentProvider intentProvider = (IntentProvider)mItem.callBackButtonView.getTag();
Intent callIntent = intentProvider.getIntent(mActivity);
//The intent should be to make the call
@@ -411,17 +406,6 @@
return d.getBitmap();
}
- /**
- * Fetch all the icons we need in tests from the contacts app and store them in a map.
- */
- private void buildIconMap() {
- mCallTypeIcons = new HashMap<Integer, Bitmap>(3);
-
- mCallTypeIcons.put(Calls.INCOMING_TYPE, getBitmap("ic_call_incoming_holo_dark"));
- mCallTypeIcons.put(Calls.MISSED_TYPE, getBitmap("ic_call_missed_holo_dark"));
- mCallTypeIcons.put(Calls.OUTGOING_TYPE, getBitmap("ic_call_outgoing_holo_dark"));
- }
-
//
// HELPERS to build/update the call entries (views) from the DB.
//
@@ -438,7 +422,7 @@
if (null == mList[i]) {
mList[i] = mAdapter.newStandAloneView(mActivity, mParentView);
}
- mAdapter.bindStandAloneView(mList[i], mActivity, mCursor);
+ mAdapter.bindViewForTest(mList[i], mActivity, mCursor);
mCursor.moveToPrevious();
i++;
}
@@ -647,10 +631,9 @@
/** Asserts that the label text view contains the given text. */
private void assertLabel(CallLogListItemViews views, CharSequence number,
CharSequence label) {
- assertEquals(label == null ? View.GONE : View.VISIBLE,
- views.phoneCallDetailsViews.labelView.getVisibility());
if (label != null) {
- assertEquals(label, views.phoneCallDetailsViews.labelView.getText().toString());
+ assertTrue(views.phoneCallDetailsViews.callLocationAndDate.getText().toString()
+ .contains(label));
}
}
}
diff --git a/tests/src/com/android/dialer/calllog/CallLogGroupBuilderTest.java b/tests/src/com/android/dialer/calllog/CallLogGroupBuilderTest.java
index cef717f..891f068 100644
--- a/tests/src/com/android/dialer/calllog/CallLogGroupBuilderTest.java
+++ b/tests/src/com/android/dialer/calllog/CallLogGroupBuilderTest.java
@@ -297,5 +297,15 @@
public void addGroup(int cursorPosition, int size, boolean expanded) {
groups.add(new GroupSpec(cursorPosition, size, expanded));
}
+
+ @Override
+ public void setDayGroup(long rowId, int dayGroup) {
+ //No-op
+ }
+
+ @Override
+ public void clearDayGroups() {
+ //No-op
+ }
}
}
diff --git a/tests/src/com/android/dialer/calllog/CallLogListItemHelperTest.java b/tests/src/com/android/dialer/calllog/CallLogListItemHelperTest.java
index 7e4736e..96eefbc 100644
--- a/tests/src/com/android/dialer/calllog/CallLogListItemHelperTest.java
+++ b/tests/src/com/android/dialer/calllog/CallLogListItemHelperTest.java
@@ -81,13 +81,7 @@
public void testSetPhoneCallDetails() {
setPhoneCallDetailsWithNumber("12125551234", Calls.PRESENTATION_ALLOWED,
"1-212-555-1234");
- assertEquals(View.VISIBLE, mViews.secondaryActionButtonView.getVisibility());
- }
-
- public void testSetPhoneCallDetailsInFavorites() {
- setPhoneCallDetailsWithNumberInFavorites("12125551234", Calls.PRESENTATION_ALLOWED,
- "1-212-555-1234");
- assertNoCallIntent();
+ assertEquals(View.VISIBLE, mViews.callBackButtonView.getVisibility());
}
public void testSetPhoneCallDetails_Unknown() {
@@ -95,73 +89,36 @@
assertNoCallIntent();
}
- public void testSetPhoneCallDetailsInFavorites_Unknown() {
- setPhoneCallDetailsWithNumberInFavorites("", Calls.PRESENTATION_UNKNOWN, "");
- assertNoCallIntent();
- }
-
public void testSetPhoneCallDetails_Private() {
setPhoneCallDetailsWithNumber("", Calls.PRESENTATION_RESTRICTED, "");
assertNoCallIntent();
}
- public void testSetPhoneCallDetailsInFavorites_Private() {
- setPhoneCallDetailsWithNumberInFavorites("", Calls.PRESENTATION_RESTRICTED, "");
- assertNoCallIntent();
- }
-
public void testSetPhoneCallDetails_Payphone() {
setPhoneCallDetailsWithNumber("", Calls.PRESENTATION_PAYPHONE, "");
assertNoCallIntent();
}
- public void testSetPhoneCallDetailsInFavorites_Payphone() {
- setPhoneCallDetailsWithNumberInFavorites("", Calls.PRESENTATION_PAYPHONE, "");
- assertNoCallIntent();
- }
-
public void testSetPhoneCallDetails_VoicemailNumber() {
setPhoneCallDetailsWithNumber(TEST_VOICEMAIL_NUMBER,
Calls.PRESENTATION_ALLOWED, TEST_VOICEMAIL_NUMBER);
- assertEquals(View.VISIBLE, mViews.secondaryActionButtonView.getVisibility());
+ assertEquals(View.VISIBLE, mViews.voicemailButtonView.getVisibility());
}
public void testSetPhoneCallDetails_ReadVoicemail() {
setPhoneCallDetailsWithTypes(Calls.VOICEMAIL_TYPE);
- assertEquals(View.VISIBLE, mViews.secondaryActionButtonView.getVisibility());
+ assertEquals(View.VISIBLE, mViews.voicemailButtonView.getVisibility());
}
public void testSetPhoneCallDetails_UnreadVoicemail() {
setUnreadPhoneCallDetailsWithTypes(Calls.VOICEMAIL_TYPE);
- assertEquals(View.VISIBLE, mViews.secondaryActionButtonView.getVisibility());
+ assertEquals(View.VISIBLE, mViews.voicemailButtonView.getVisibility());
}
public void testSetPhoneCallDetails_VoicemailFromUnknown() {
setPhoneCallDetailsWithNumberAndType("", Calls.PRESENTATION_UNKNOWN,
"", Calls.VOICEMAIL_TYPE);
- assertEquals(View.VISIBLE, mViews.secondaryActionButtonView.getVisibility());
- }
-
- public void testSetPhoneCallDetailsInFavorites_VoicemailNumber() {
- setPhoneCallDetailsWithNumberInFavorites(TEST_VOICEMAIL_NUMBER,
- Calls.PRESENTATION_ALLOWED, TEST_VOICEMAIL_NUMBER);
- assertNoCallIntent();
- }
-
- public void testSetPhoneCallDetailsInFavorites_ReadVoicemail() {
- setPhoneCallDetailsWithTypesInFavorites(Calls.VOICEMAIL_TYPE);
- assertEquals(View.VISIBLE, mViews.secondaryActionButtonView.getVisibility());
- }
-
- public void testSetPhoneCallDetailsInFavorites_UnreadVoicemail() {
- setUnreadPhoneCallDetailsWithTypesInFavorites(Calls.VOICEMAIL_TYPE);
- assertEquals(View.VISIBLE, mViews.secondaryActionButtonView.getVisibility());
- }
-
- public void testSetPhoneCallDetailsInFavorites_VoicemailFromUnknown() {
- setPhoneCallDetailsWithNumberAndTypeInFavorites("", Calls.PRESENTATION_UNKNOWN,
- "", Calls.VOICEMAIL_TYPE);
- assertEquals(View.VISIBLE, mViews.secondaryActionButtonView.getVisibility());
+ assertEquals(View.VISIBLE, mViews.voicemailButtonView.getVisibility());
}
/**
@@ -172,7 +129,7 @@
PhoneCallDetails details = new PhoneCallDetails("", Calls.PRESENTATION_UNKNOWN, "",
TEST_COUNTRY_ISO, TEST_GEOCODE,
new int[]{Calls.INCOMING_TYPE}, TEST_DATE, TEST_DURATION);
- assertEquals(R.string.description_unknown_answered_call,
+ assertEquals(R.string.description_incoming_answered_call,
mHelper.getCallDescriptionStringID(details));
}
@@ -184,7 +141,7 @@
PhoneCallDetails details = new PhoneCallDetails("", Calls.PRESENTATION_UNKNOWN, "",
TEST_COUNTRY_ISO, TEST_GEOCODE,
new int[]{Calls.MISSED_TYPE}, TEST_DATE, TEST_DURATION);
- assertEquals(R.string.description_unknown_missed_call,
+ assertEquals(R.string.description_incoming_missed_call,
mHelper.getCallDescriptionStringID(details));
}
@@ -196,7 +153,7 @@
PhoneCallDetails details = new PhoneCallDetails("", Calls.PRESENTATION_UNKNOWN, "",
TEST_COUNTRY_ISO, TEST_GEOCODE,
new int[]{Calls.VOICEMAIL_TYPE}, TEST_DATE, TEST_DURATION);
- assertEquals(R.string.description_unknown_missed_call,
+ assertEquals(R.string.description_incoming_missed_call,
mHelper.getCallDescriptionStringID(details));
}
@@ -209,7 +166,7 @@
TEST_FORMATTED_NUMBER,
TEST_COUNTRY_ISO, TEST_GEOCODE,
new int[]{Calls.INCOMING_TYPE}, TEST_DATE, TEST_DURATION);
- assertEquals(R.string.description_return_answered_call,
+ assertEquals(R.string.description_incoming_answered_call,
mHelper.getCallDescriptionStringID(details));
}
@@ -222,7 +179,7 @@
TEST_FORMATTED_NUMBER,
TEST_COUNTRY_ISO, TEST_GEOCODE,
new int[]{Calls.MISSED_TYPE}, TEST_DATE, TEST_DURATION);
- assertEquals(R.string.description_return_missed_call,
+ assertEquals(R.string.description_incoming_missed_call,
mHelper.getCallDescriptionStringID(details));
}
@@ -235,7 +192,7 @@
TEST_FORMATTED_NUMBER,
TEST_COUNTRY_ISO, TEST_GEOCODE,
new int[]{Calls.VOICEMAIL_TYPE}, TEST_DATE, TEST_DURATION);
- assertEquals(R.string.description_return_missed_call,
+ assertEquals(R.string.description_incoming_missed_call,
mHelper.getCallDescriptionStringID(details));
}
@@ -249,7 +206,7 @@
TEST_FORMATTED_NUMBER,
TEST_COUNTRY_ISO, TEST_GEOCODE,
new int[]{Calls.OUTGOING_TYPE}, TEST_DATE, TEST_DURATION);
- assertEquals(R.string.description_call_last,
+ assertEquals(R.string.description_outgoing_call,
mHelper.getCallDescriptionStringID(details));
}
@@ -263,7 +220,7 @@
TEST_FORMATTED_NUMBER,
TEST_COUNTRY_ISO, TEST_GEOCODE,
new int[]{Calls.OUTGOING_TYPE, Calls.OUTGOING_TYPE}, TEST_DATE, TEST_DURATION);
- assertEquals(R.string.description_call_last_multiple,
+ assertEquals(R.string.description_outgoing_call,
mHelper.getCallDescriptionStringID(details));
}
@@ -370,31 +327,14 @@
formattedNumber, Calls.INCOMING_TYPE);
}
- /** Sets the details of a phone call in the favorite screen using the specified phone number. */
- private void setPhoneCallDetailsWithNumberInFavorites(String number,
- int presentation, String formattedNumber) {
- setPhoneCallDetailsWithNumberAndTypeInFavorites(number, presentation,
- formattedNumber, Calls.INCOMING_TYPE);
- }
-
/** Sets the details of a phone call using the specified phone number. */
private void setPhoneCallDetailsWithNumberAndType(String number,
int presentation, String formattedNumber, int callType) {
mHelper.setPhoneCallDetails(mViews,
new PhoneCallDetails(number, presentation, formattedNumber,
TEST_COUNTRY_ISO, TEST_GEOCODE,
- new int[]{ callType }, TEST_DATE, TEST_DURATION),
- false, false);
- }
-
- /** Sets the details of a phone call in the favorite screen using the specified phone number. */
- private void setPhoneCallDetailsWithNumberAndTypeInFavorites(String number,
- int presentation, String formattedNumber, int callType) {
- mHelper.setPhoneCallDetails(mViews,
- new PhoneCallDetails(number, presentation, formattedNumber,
- TEST_COUNTRY_ISO, TEST_GEOCODE,
- new int[]{ callType }, TEST_DATE, TEST_DURATION),
- false, true);
+ new int[]{ callType }, TEST_DATE, TEST_DURATION)
+ );
}
/** Sets the details of a phone call using the specified call type. */
@@ -402,17 +342,8 @@
mHelper.setPhoneCallDetails(mViews,
new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, TEST_GEOCODE,
- types, TEST_DATE, TEST_DURATION),
- false, false);
- }
-
- /** Sets the details of a phone call in the favorite screen using the specified call type. */
- private void setPhoneCallDetailsWithTypesInFavorites(int... types) {
- mHelper.setPhoneCallDetails(mViews,
- new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
- TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, TEST_GEOCODE,
- types, TEST_DATE, TEST_DURATION),
- false, true);
+ types, TEST_DATE, TEST_DURATION)
+ );
}
/** Sets the details of an unread phone call using the specified call type. */
@@ -420,18 +351,7 @@
mHelper.setPhoneCallDetails(mViews,
new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, TEST_GEOCODE,
- types, TEST_DATE, TEST_DURATION),
- true, false);
- }
-
- /** Sets the details of an unread phone call in the favorite screen using the specified call
- * type.
- */
- private void setUnreadPhoneCallDetailsWithTypesInFavorites(int... types) {
- mHelper.setPhoneCallDetails(mViews,
- new PhoneCallDetails(TEST_NUMBER, Calls.PRESENTATION_ALLOWED,
- TEST_FORMATTED_NUMBER, TEST_COUNTRY_ISO, TEST_GEOCODE,
- types, TEST_DATE, TEST_DURATION),
- true, true);
+ types, TEST_DATE, TEST_DURATION)
+ );
}
}
diff --git a/tests/src/com/android/dialer/database/SmartDialPrefixTest.java b/tests/src/com/android/dialer/database/SmartDialPrefixTest.java
index 23bda7c..9cb842e 100644
--- a/tests/src/com/android/dialer/database/SmartDialPrefixTest.java
+++ b/tests/src/com/android/dialer/database/SmartDialPrefixTest.java
@@ -21,6 +21,8 @@
import android.test.suitebuilder.annotation.SmallTest;
import android.test.suitebuilder.annotation.Suppress;
import android.test.AndroidTestCase;
+import android.text.TextUtils;
+import android.util.Log;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.provider.ContactsContract.Contacts;
import android.provider.ContactsContract.Data;
@@ -31,16 +33,13 @@
import com.android.dialer.dialpad.SmartDialPrefix;
import java.lang.Exception;
-import java.lang.FindBugsSuppressWarnings;
import java.lang.Override;
import java.lang.String;
import java.util.ArrayList;
-import junit.framework.TestCase;
-
/**
* To run this test, use the command:
- * adb shell am instrument -w -e class com.android.dialer.dialpad.SmartDialPrefixTest /
+ * adb shell am instrument -w -e class com.android.dialer.database.SmartDialPrefixTest /
* com.android.dialer.tests/android.test.InstrumentationTestRunner
*/
@SmallTest
@@ -80,6 +79,7 @@
assertTrue(SmartDialPrefix.isCountryNanp("vi"));
}
+ @Override
protected void setUp() {
mTestHelper = DialerDatabaseHelper.getNewInstanceForTest(getContext());
}
@@ -136,8 +136,8 @@
private ContactNumber constructNewContactWithDummyIds(MatrixCursor contactCursor,
MatrixCursor nameCursor, String number, int id, String displayName) {
- return constructNewContact(contactCursor, nameCursor, id, number, 0, "", displayName, 0, 0,
- 0, 0, 0, 0, 0);
+ return constructNewContact(contactCursor, nameCursor, id, number, id, String.valueOf(id),
+ displayName, 0, 0, 0, 0, 0, 0, 0);
}
private ContactNumber constructNewContact(MatrixCursor contactCursor, MatrixCursor nameCursor,
@@ -147,6 +147,12 @@
assertNotNull(contactCursor);
assertNotNull(nameCursor);
+ if (TextUtils.isEmpty(number)) {
+ // Add a dummy number, otherwise DialerDatabaseHelper simply ignores the entire
+ // row if the number is empty
+ number = "0";
+ }
+
contactCursor.addRow(new Object[]{id, "", "", number, contactId, lookupKey, displayName,
photoId, lastTimeUsed, timesUsed, starred, isSuperPrimary, inVisibleGroup,
isPrimary});
@@ -294,7 +300,8 @@
// 6543 doesn't match
assertFalse(getLooseMatchesFromDb("6543").contains(martinjuniorharry));
- assertEquals(7, mTestHelper.countPrefixTableRows(db));
+ // 7 actual rows, + 1 for the dummy number we added
+ assertEquals(8, mTestHelper.countPrefixTableRows(db));
}
public void testPutForInitialMatchesForLongTokenNames() {
diff --git a/tests/src/com/android/dialer/dialpad/SmartDialNameMatcherTest.java b/tests/src/com/android/dialer/dialpad/SmartDialNameMatcherTest.java
index 1e578ee..c1365f5 100644
--- a/tests/src/com/android/dialer/dialpad/SmartDialNameMatcherTest.java
+++ b/tests/src/com/android/dialer/dialpad/SmartDialNameMatcherTest.java
@@ -198,6 +198,7 @@
}
public void testMatches_NumberNANP() {
+ SmartDialPrefix.setUserInNanpRegion(true);
// An 11 digit number prefixed with 1 should be matched by the 10 digit number, as well as
// the 7 digit number (without area code)
checkMatchesNumber("1-510-333-7596", "5103337596", true, true, 2, 14);
diff --git a/tests/src/com/android/dialer/list/PhoneFavoritesTileAdapterTest.java b/tests/src/com/android/dialer/list/PhoneFavoritesTileAdapterTest.java
index 7a2076d..c2069bd 100644
--- a/tests/src/com/android/dialer/list/PhoneFavoritesTileAdapterTest.java
+++ b/tests/src/com/android/dialer/list/PhoneFavoritesTileAdapterTest.java
@@ -53,75 +53,6 @@
}
- public void testGetRowIndex_NoRowLimit() {
- mAdapter = getAdapterForTest(2, PhoneFavoritesTileAdapter.NO_ROW_LIMIT);
- assertEquals(0, mAdapter.getRowCount(0));
- assertEquals(1, mAdapter.getRowCount(1));
- assertEquals(1, mAdapter.getRowCount(2));
- assertEquals(2, mAdapter.getRowCount(4));
- assertEquals(4, mAdapter.getRowCount(7));
- assertEquals(100, mAdapter.getRowCount(199));
-
- mAdapter = getAdapterForTest(5, PhoneFavoritesTileAdapter.NO_ROW_LIMIT);
- assertEquals(0, mAdapter.getRowCount(0));
- assertEquals(1, mAdapter.getRowCount(1));
- assertEquals(1, mAdapter.getRowCount(3));
- assertEquals(1, mAdapter.getRowCount(5));
- assertEquals(2, mAdapter.getRowCount(7));
- assertEquals(2, mAdapter.getRowCount(10));
- assertEquals(40, mAdapter.getRowCount(199));
- }
-
- public void testGetItemId_NoRowLimit() {
- mAdapter = getAdapterForTest(2, PhoneFavoritesTileAdapter.NO_ROW_LIMIT);
- assertEquals(0, mAdapter.getItemId(0));
- assertEquals(1, mAdapter.getItemId(1));
- assertEquals(5, mAdapter.getItemId(5));
- assertEquals(10, mAdapter.getItemId(10));
- }
-
- public void testGetAdjustedItemId_NoRowLimit() {
- mAdapter = getAdapterForTest(2, PhoneFavoritesTileAdapter.NO_ROW_LIMIT);
- assertEquals(0, mAdapter.getAdjustedItemId(0));
- assertEquals(1, mAdapter.getAdjustedItemId(1));
- assertEquals(5, mAdapter.getAdjustedItemId(5));
- assertEquals(10, mAdapter.getAdjustedItemId(10));
- }
-
- public void testGetItem_NoRowLimit() {
- mAdapter = getAdapterForTest(2, PhoneFavoritesTileAdapter.NO_ROW_LIMIT);
- mAdapter.setContactCursor(getCursorForTest(5, 5));
-
- final ArrayList<ContactEntry> row1 = new ArrayList<ContactEntry> ();
- row1.add(getTestContactEntry(0, true));
- row1.add(getTestContactEntry(1, true));
- assertContactEntryRowsEqual(row1, mAdapter.getItem(0));
-
- final ArrayList<ContactEntry> row3 = new ArrayList<ContactEntry> ();
- row3.add(getTestContactEntry(4, true));
- row3.add(getTestContactEntry(5, false));
- assertContactEntryRowsEqual(row3, mAdapter.getItem(2));
-
- final ArrayList<ContactEntry> row5 = new ArrayList<ContactEntry> ();
- row5.add(getTestContactEntry(8, false));
- row5.add(getTestContactEntry(9, false));
- assertContactEntryRowsEqual(row5, mAdapter.getItem(4));
- }
-
- /**
- * Ensures that PhoneFavoritesTileAdapter returns true for hasStableIds. This is needed for
- * animation purposes.
- */
- public void testHasStableIds() {
- mAdapter = new PhoneFavoritesTileAdapter(getContext(), null, null, 2, 2);
- assertTrue(mAdapter.hasStableIds());
- }
-
- private PhoneFavoritesTileAdapter getAdapterForTest(int numCols, int numRows) {
- return new PhoneFavoritesTileAdapter(getContext(), null,
- sOnDataSetChangedForAnimationListener, numCols, numRows);
- }
-
/**
* Returns a cursor containing starred and frequent contacts for test purposes.
*
diff --git a/tests/src/com/android/dialer/tests/calllog/FillCallLogTestActivity.java b/tests/src/com/android/dialer/tests/calllog/FillCallLogTestActivity.java
index b1b8e2f..1e5c257 100644
--- a/tests/src/com/android/dialer/tests/calllog/FillCallLogTestActivity.java
+++ b/tests/src/com/android/dialer/tests/calllog/FillCallLogTestActivity.java
@@ -17,7 +17,11 @@
package com.android.dialer.tests.calllog;
import android.app.Activity;
+import android.app.DatePickerDialog;
+import android.app.Dialog;
+import android.app.DialogFragment;
import android.app.LoaderManager;
+import android.app.TimePickerDialog;
import android.content.ContentProviderClient;
import android.content.ContentValues;
import android.content.CursorLoader;
@@ -27,16 +31,22 @@
import android.os.Bundle;
import android.os.RemoteException;
import android.provider.CallLog.Calls;
+import android.text.format.DateFormat;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
+import android.widget.DatePicker;
+import android.widget.EditText;
import android.widget.ProgressBar;
+import android.widget.RadioButton;
import android.widget.TextView;
+import android.widget.TimePicker;
import android.widget.Toast;
import com.android.dialer.tests.R;
+import java.util.Calendar;
import java.util.Random;
/**
@@ -56,6 +66,23 @@
private Button mAddButton;
private ProgressBar mProgressBar;
private CheckBox mUseRandomNumbers;
+ private RadioButton mCallTypeIncoming;
+ private RadioButton mCallTypeMissed;
+ private RadioButton mCallTypeOutgoing;
+ private RadioButton mPresentationAllowed;
+ private RadioButton mPresentationRestricted;
+ private RadioButton mPresentationUnknown;
+ private RadioButton mPresentationPayphone;
+ private TextView mCallDate;
+ private TextView mCallTime;
+ private TextView mPhoneNumber;
+ private EditText mOffset;
+
+ private int mCallTimeHour;
+ private int mCallTimeMinute;
+ private int mCallDateYear;
+ private int mCallDateMonth;
+ private int mCallDateDay;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -88,6 +115,28 @@
mProgressBar.setVisibility(View.VISIBLE);
}
});
+
+ mCallTypeIncoming = (RadioButton) findViewById(R.id.call_type_incoming);
+ mCallTypeMissed = (RadioButton) findViewById(R.id.call_type_missed);
+ mCallTypeOutgoing = (RadioButton) findViewById(R.id.call_type_outgoing);
+ mPresentationAllowed = (RadioButton) findViewById(R.id.presentation_allowed);
+ mPresentationPayphone = (RadioButton) findViewById(R.id.presentation_payphone);
+ mPresentationUnknown = (RadioButton) findViewById(R.id.presentation_unknown);
+ mPresentationRestricted = (RadioButton) findViewById(R.id.presentation_restricted);
+ mCallTime = (TextView) findViewById(R.id.call_time);
+ mCallDate = (TextView) findViewById(R.id.call_date);
+ mPhoneNumber = (TextView) findViewById(R.id.phone_number);
+ mOffset = (EditText) findViewById(R.id.delta_after_add);
+
+ // Use the current time as the default values for the picker
+ final Calendar c = Calendar.getInstance();
+ mCallTimeHour = c.get(Calendar.HOUR_OF_DAY);
+ mCallTimeMinute = c.get(Calendar.MINUTE);
+ mCallDateYear = c.get(Calendar.YEAR);
+ mCallDateMonth = c.get(Calendar.MONTH);
+ mCallDateDay = c.get(Calendar.DAY_OF_MONTH);
+ setDisplayDate();
+ setDisplayTime();
}
/**
@@ -306,4 +355,133 @@
public void updateCount(Integer count) {
mProgressBar.setProgress(count);
}
+
+ /**
+ * Determines the call type for a manually entered call.
+ *
+ * @return Call type.
+ */
+ private int getManualCallType() {
+ if (mCallTypeIncoming.isChecked()) {
+ return Calls.INCOMING_TYPE;
+ } else if (mCallTypeOutgoing.isChecked()) {
+ return Calls.OUTGOING_TYPE;
+ } else {
+ return Calls.MISSED_TYPE;
+ }
+ }
+
+ /**
+ * Determines the presentation for a manually entered call.
+ *
+ * @return Presentation.
+ */
+ private int getManualPresentation() {
+ if (mPresentationAllowed.isChecked()) {
+ return Calls.PRESENTATION_ALLOWED;
+ } else if (mPresentationPayphone.isChecked()) {
+ return Calls.PRESENTATION_PAYPHONE;
+ } else if (mPresentationRestricted.isChecked()) {
+ return Calls.PRESENTATION_RESTRICTED;
+ } else {
+ return Calls.PRESENTATION_UNKNOWN;
+ }
+ }
+
+ /**
+ * Shows a time picker dialog, storing the results in the time field.
+ */
+ public void showTimePickerDialog(View v) {
+ DialogFragment newFragment = new TimePickerFragment();
+ newFragment.show(getFragmentManager(),"timePicker");
+ }
+
+ /**
+ * Helper class to display time picker and store the hour/minute.
+ */
+ public class TimePickerFragment extends DialogFragment
+ implements TimePickerDialog.OnTimeSetListener {
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ // Create a new instance of TimePickerDialog and return it
+ return new TimePickerDialog(getActivity(), this, mCallTimeHour, mCallTimeMinute,
+ DateFormat.is24HourFormat(getActivity()));
+ }
+
+ public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
+ mCallTimeHour = hourOfDay;
+ mCallTimeMinute = minute;
+ setDisplayTime();
+ }
+ }
+
+ /**
+ * Sets the call time TextView to the current selected time.
+ */
+ private void setDisplayTime() {
+ mCallTime.setText(String.format("%02d:%02d", mCallTimeHour, mCallTimeMinute));
+ }
+
+ /**
+ * Sets the call date Textview to the current selected date
+ */
+ private void setDisplayDate() {
+ mCallDate.setText(String.format("%04d-%02d-%02d", mCallDateYear, mCallDateMonth,
+ mCallDateDay));
+ }
+
+ /**
+ * Shows a date picker dialog.
+ */
+ public void showDatePickerDialog(View v) {
+ DialogFragment newFragment = new DatePickerFragment();
+ newFragment.show(getFragmentManager(),"datePicker");
+ }
+
+ /**
+ * Helper class to show a date picker.
+ */
+ public class DatePickerFragment extends DialogFragment
+ implements DatePickerDialog.OnDateSetListener {
+
+ @Override
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ // Create a new instance of DatePickerDialog and return it
+ return new DatePickerDialog(getActivity(), this, mCallDateYear, mCallDateMonth,
+ mCallDateDay);
+ }
+
+ public void onDateSet(DatePicker view, int year, int month, int day) {
+ mCallDateYear = year;
+ mCallDateMonth = month;
+ mCallDateDay = day;
+ setDisplayDate();
+ }
+ }
+
+ /**
+ * OnClick handler for the button that adds a manual call log entry to the call log.
+ *
+ * @param v Calling view.
+ */
+ public void addManualEntry(View v) {
+ Calendar dateTime = Calendar.getInstance();
+ dateTime.set(mCallDateYear, mCallDateMonth, mCallDateDay, mCallTimeHour, mCallTimeMinute);
+
+ Calls.addCall(null, this, mPhoneNumber.getText().toString(), getManualPresentation(),
+ getManualCallType(), dateTime.getTimeInMillis(), RNG.nextInt(60 * 60));
+
+ // Subtract offset from the call date/time and store as new date/time
+ int offset = Integer.parseInt(mOffset.getText().toString());
+
+ dateTime.add(Calendar.MINUTE, offset);
+ mCallDateYear = dateTime.get(Calendar.YEAR);
+ mCallDateMonth = dateTime.get(Calendar.MONTH);
+ mCallDateDay = dateTime.get(Calendar.DAY_OF_MONTH);
+ mCallTimeHour = dateTime.get(Calendar.HOUR_OF_DAY);
+ mCallTimeMinute = dateTime.get(Calendar.MINUTE);
+ setDisplayDate();
+ setDisplayTime();
+ }
}
diff --git a/tests/src/com/android/dialer/widget/ActionBarControllerTest.java b/tests/src/com/android/dialer/widget/ActionBarControllerTest.java
new file mode 100644
index 0000000..c67ea35
--- /dev/null
+++ b/tests/src/com/android/dialer/widget/ActionBarControllerTest.java
@@ -0,0 +1,181 @@
+/*
+ * Copyright (C) 2014 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.widget;
+
+import android.content.Context;
+import android.test.InstrumentationTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+
+import com.android.dialer.widget.ActionBarController.ActivityUi;
+
+@SmallTest
+public class ActionBarControllerTest extends InstrumentationTestCase {
+
+ private static final int ACTION_BAR_HEIGHT = 100;
+ private ActionBarController mActionBarController;
+ private SearchEditTextLayout mSearchBox;
+ private MockActivityUi mActivityUi;
+
+ private class MockActivityUi implements ActivityUi {
+ boolean isInSearchUi;
+ boolean hasSearchQuery;
+ boolean shouldShowActionBar;
+ int actionBarHideOffset;
+
+ @Override
+ public boolean isInSearchUi() {
+ return isInSearchUi;
+ }
+
+ @Override
+ public boolean hasSearchQuery() {
+ return hasSearchQuery;
+ }
+
+ @Override
+ public boolean shouldShowActionBar() {
+ return shouldShowActionBar;
+ }
+
+ @Override
+ public int getActionBarHeight() {
+ return ACTION_BAR_HEIGHT;
+ }
+
+ @Override
+ public int getActionBarHideOffset() {
+ return actionBarHideOffset;
+ }
+
+ @Override
+ public void setActionBarHideOffset(int hideOffset) {
+ actionBarHideOffset = hideOffset;
+ }
+ }
+
+ /**
+ * Mock version of the searchbox, that updates its state immediately instead of animating
+ */
+ private class MockSearchBox extends SearchEditTextLayout {
+
+ public MockSearchBox(Context context) {
+ super(context, null);
+ }
+
+ @Override
+ public void expand(boolean animate, boolean requestFocus) {
+ mIsExpanded = true;
+ }
+
+ @Override
+ public void collapse(boolean animate) {
+ mIsExpanded = false;
+ }
+ }
+
+ @Override
+ protected void setUp() {
+ mActivityUi = new MockActivityUi();
+ mSearchBox = new MockSearchBox(this.getInstrumentation().getContext());
+ mActionBarController = new ActionBarController(mActivityUi, mSearchBox);
+ }
+
+ // Tapping the search box should only do something when the activity is not in the search UI
+ public void testSearchBoxTapped() {
+ mSearchBox.collapse(false);
+ mActivityUi.isInSearchUi = false;
+ mActionBarController.onSearchBoxTapped();
+ assertActionBarState(true, false, false);
+
+ // Collapse the search box manually again. This time tapping on the search box should not
+ // expand the search box because isInSearchUi is not true.
+ mSearchBox.collapse(false);
+ mActivityUi.isInSearchUi = true;
+ mActionBarController.onSearchBoxTapped();
+ assertActionBarState(false, false, false);
+ }
+
+ // The search box should always end up being faded in and collapsed. If necessary, it should
+ // be slid down or up depending on what the state of the action bar was before that.
+ public void testOnSearchUiExited() {
+ // ActionBar shown previously before entering searchUI
+ mSearchBox.expand(true, false);
+ mSearchBox.setVisible(false);
+ mActivityUi.shouldShowActionBar = true;
+ mActionBarController.onSearchUiExited();
+ assertActionBarState(false, false, false);
+
+ // ActionBar slid up previously before entering searchUI
+ mSearchBox.collapse(false);
+ mSearchBox.setVisible(false);
+ mActivityUi.shouldShowActionBar = false;
+ mActionBarController.onSearchUiExited();
+ assertActionBarState(false, false, true);
+ }
+
+ // Depending on what state the UI was in previously, sliding the dialpad down can mean either
+ // displaying the expanded search box by sliding it down, displaying the unexpanded search box,
+ // or nothing at all.
+ public void testOnDialpadDown() {
+ // No search query typed in the dialpad and action bar was showing before
+ mActivityUi.shouldShowActionBar = true;
+ mActivityUi.isInSearchUi = true;
+ mSearchBox.setVisible(false);
+ mActionBarController.onDialpadDown();
+ assertActionBarState(false, false, false);
+
+ // No search query typed in the dialpad, but action bar was not showing before
+ mActionBarController.slideActionBarUp(false);
+ mActivityUi.shouldShowActionBar = false;
+ mSearchBox.setVisible(false);
+ mActionBarController.onDialpadDown();
+ assertActionBarState(false, false, true);
+
+ // Something typed in the dialpad - so remain in search UI and slide the expanded search
+ // box down
+ mActionBarController.slideActionBarUp(false);
+ mActivityUi.shouldShowActionBar = true;
+ mActivityUi.hasSearchQuery= true;
+ mSearchBox.setVisible(false);
+ mSearchBox.expand(false, false);
+ mActionBarController.onDialpadDown();
+ assertActionBarState(true, false, false);
+ }
+
+ // Sliding the dialpad up should fade out the search box if we weren't already in search, or
+ // slide up the search box otherwise
+ public void testOnDialpadUp() {
+ mActivityUi.isInSearchUi = false;
+ mActionBarController.onDialpadUp();
+ assertActionBarState(false, true, false);
+
+ // In Search UI, with expanded search box and something currently typed in the search box
+ mActivityUi.isInSearchUi = true;
+ mActivityUi.hasSearchQuery = true;
+ mSearchBox.expand(true, false);
+ mSearchBox.setVisible(true);
+ mActionBarController.slideActionBarUp(false);
+ mActionBarController.onDialpadUp();
+ assertActionBarState(true, false, true);
+ }
+
+ private void assertActionBarState(boolean isExpanded, boolean isFadedOut, boolean isSlidUp) {
+ assertEquals(isExpanded, mSearchBox.isExpanded());
+ assertEquals(isFadedOut, mSearchBox.isFadedOut());
+ assertEquals(isSlidUp, mActionBarController.getIsActionBarSlidUp());
+ }
+}