summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSzuWei Lin <szuweilin@google.com>2020-09-01 18:23:12 +0800
committerSzuWei Lin <szuweilin@google.com>2020-09-01 18:23:12 +0800
commitdcd75c34276342ea917a989ba082cad120d23a99 (patch)
tree324888b5bf40a3e6c321e6773417529a1d7a54a6
parenteacd320e9610dd631043c1e434dfe9ff9d56abbd (diff)
parentc1e75810125391a954328ad7b1c858ccab3188d2 (diff)
downloadplatform_packages_apps_Car_Dialer-android10-gsi.tar.gz
platform_packages_apps_Car_Dialer-android10-gsi.tar.bz2
platform_packages_apps_Car_Dialer-android10-gsi.zip
Merge branch android10-qpr3-releaseandroid10-gsi
Change-Id: If7bb21717dadd95b743dc0d11935a530c0f66903
-rw-r--r--AndroidManifest.xml19
-rw-r--r--res/color/contact_details_icon_tint.xml26
-rw-r--r--res/color/icon_accent_activatable.xml2
-rw-r--r--res/color/text_accent_activatable.xml21
-rw-r--r--res/drawable/ic_arrow_right.xml3
-rw-r--r--res/drawable/ic_favorite_activatable.xml8
-rw-r--r--res/drawable/ic_imported_favorite.xml24
-rw-r--r--res/layout-port/dialpad_fragment.xml59
-rw-r--r--res/layout-w1280dp/type_down_list_item.xml57
-rw-r--r--res/layout/add_favorite_number_list_item.xml60
-rw-r--r--res/layout/audio_route_list_item.xml49
-rw-r--r--res/layout/audio_route_switch_dialog.xml21
-rw-r--r--res/layout/contact_result.xml3
-rw-r--r--res/layout/dialpad_fragment.xml5
-rw-r--r--res/layout/dialpad_info.xml32
-rw-r--r--res/layout/favorite_contact_list_item.xml26
-rw-r--r--res/layout/keypad.xml48
-rw-r--r--res/layout/phone_number_list_item.xml43
-rw-r--r--res/layout/type_down_list_item.xml46
-rw-r--r--res/values-af/strings.xml10
-rw-r--r--res/values-am/strings.xml10
-rw-r--r--res/values-ar/strings.xml10
-rw-r--r--res/values-as/strings.xml10
-rw-r--r--res/values-az/strings.xml10
-rw-r--r--res/values-b+sr+Latn/strings.xml10
-rw-r--r--res/values-be/strings.xml10
-rw-r--r--res/values-bg/strings.xml10
-rw-r--r--res/values-bn/strings.xml10
-rw-r--r--res/values-bs/strings.xml10
-rw-r--r--res/values-ca/strings.xml10
-rw-r--r--res/values-cs/strings.xml10
-rw-r--r--res/values-da/strings.xml10
-rw-r--r--res/values-de/strings.xml10
-rw-r--r--res/values-el/strings.xml10
-rw-r--r--res/values-en-rAU/strings.xml10
-rw-r--r--res/values-en-rCA/strings.xml10
-rw-r--r--res/values-en-rGB/strings.xml10
-rw-r--r--res/values-en-rIN/strings.xml10
-rw-r--r--res/values-en-rXC/strings.xml10
-rw-r--r--res/values-es-rUS/strings.xml10
-rw-r--r--res/values-es/strings.xml14
-rw-r--r--res/values-et/strings.xml10
-rw-r--r--res/values-eu/strings.xml10
-rw-r--r--res/values-fa/strings.xml10
-rw-r--r--res/values-fi/strings.xml12
-rw-r--r--res/values-fr-rCA/strings.xml10
-rw-r--r--res/values-fr/strings.xml10
-rw-r--r--res/values-gl/strings.xml10
-rw-r--r--res/values-gu/strings.xml10
-rw-r--r--res/values-h610dp/dimens.xml2
-rw-r--r--res/values-hi/strings.xml12
-rw-r--r--res/values-hr/strings.xml10
-rw-r--r--res/values-hu/strings.xml10
-rw-r--r--res/values-hy/strings.xml10
-rw-r--r--res/values-in/strings.xml10
-rw-r--r--res/values-is/strings.xml10
-rw-r--r--res/values-it/strings.xml10
-rw-r--r--res/values-iw/strings.xml10
-rw-r--r--res/values-ja/strings.xml12
-rw-r--r--res/values-ka/strings.xml10
-rw-r--r--res/values-kk/strings.xml10
-rw-r--r--res/values-km/strings.xml10
-rw-r--r--res/values-kn/strings.xml10
-rw-r--r--res/values-ko/strings.xml10
-rw-r--r--res/values-ky/strings.xml14
-rw-r--r--res/values-lo/strings.xml10
-rw-r--r--res/values-lt/strings.xml10
-rw-r--r--res/values-lv/strings.xml10
-rw-r--r--res/values-mk/strings.xml10
-rw-r--r--res/values-ml/strings.xml10
-rw-r--r--res/values-mn/strings.xml10
-rw-r--r--res/values-mr/strings.xml10
-rw-r--r--res/values-ms/strings.xml10
-rw-r--r--res/values-my/strings.xml10
-rw-r--r--res/values-nb/strings.xml10
-rw-r--r--res/values-ne/strings.xml10
-rw-r--r--res/values-nl/strings.xml10
-rw-r--r--res/values-or/strings.xml10
-rw-r--r--res/values-pa/strings.xml10
-rw-r--r--res/values-pl/strings.xml10
-rw-r--r--res/values-port/dimens.xml1
-rw-r--r--res/values-pt-rPT/strings.xml14
-rw-r--r--res/values-pt/strings.xml10
-rw-r--r--res/values-ro/strings.xml10
-rw-r--r--res/values-ru/strings.xml12
-rw-r--r--res/values-si/strings.xml10
-rw-r--r--res/values-sk/strings.xml10
-rw-r--r--res/values-sl/strings.xml10
-rw-r--r--res/values-sq/strings.xml10
-rw-r--r--res/values-sr/strings.xml10
-rw-r--r--res/values-sv/strings.xml10
-rw-r--r--res/values-sw/strings.xml10
-rw-r--r--res/values-ta/strings.xml10
-rw-r--r--res/values-te/strings.xml10
-rw-r--r--res/values-th/strings.xml10
-rw-r--r--res/values-tl/strings.xml10
-rw-r--r--res/values-tr/strings.xml10
-rw-r--r--res/values-uk/strings.xml10
-rw-r--r--res/values-ur/strings.xml10
-rw-r--r--res/values-uz/strings.xml10
-rw-r--r--res/values-vi/strings.xml10
-rw-r--r--res/values-zh-rCN/strings.xml10
-rw-r--r--res/values-zh-rHK/strings.xml10
-rw-r--r--res/values-zh-rTW/strings.xml12
-rw-r--r--res/values-zu/strings.xml10
-rw-r--r--res/values/colors.xml4
-rw-r--r--res/values/configs.xml10
-rw-r--r--res/values/dimens.xml16
-rw-r--r--res/values/strings.xml23
-rw-r--r--res/values/styles.xml4
-rw-r--r--res/values/themes.xml1
-rw-r--r--src/com/android/car/dialer/Constants.java4
-rw-r--r--src/com/android/car/dialer/notification/InCallNotificationController.java6
-rw-r--r--src/com/android/car/dialer/notification/MissedCallNotificationController.java8
-rw-r--r--src/com/android/car/dialer/notification/NotificationService.java27
-rw-r--r--src/com/android/car/dialer/telecom/InCallRouter.java25
-rw-r--r--src/com/android/car/dialer/telecom/InCallServiceImpl.java45
-rw-r--r--src/com/android/car/dialer/telecom/UiCallManager.java24
-rw-r--r--src/com/android/car/dialer/ui/TelecomActivity.java52
-rw-r--r--src/com/android/car/dialer/ui/TelecomActivityViewModel.java43
-rw-r--r--src/com/android/car/dialer/ui/activecall/InCallActivity.java19
-rw-r--r--src/com/android/car/dialer/ui/activecall/InCallViewModel.java20
-rw-r--r--src/com/android/car/dialer/ui/activecall/OnGoingCallControllerBarFragment.java152
-rw-r--r--src/com/android/car/dialer/ui/calllog/CallHistoryFragment.java1
-rw-r--r--src/com/android/car/dialer/ui/calllog/CallLogViewHolder.java13
-rw-r--r--src/com/android/car/dialer/ui/common/ContactResultsLiveData.java208
-rw-r--r--src/com/android/car/dialer/ui/common/DialerBaseFragment.java25
-rw-r--r--src/com/android/car/dialer/ui/common/DialerUtils.java54
-rw-r--r--src/com/android/car/dialer/ui/common/FavoritePhoneNumberListAdapter.java127
-rw-r--r--src/com/android/car/dialer/ui/common/PhoneNumberListAdapter.java65
-rw-r--r--src/com/android/car/dialer/ui/common/UiCallLogLiveData.java75
-rw-r--r--src/com/android/car/dialer/ui/common/entity/ActionButton.java21
-rw-r--r--src/com/android/car/dialer/ui/common/entity/Header.java (renamed from src/com/android/car/dialer/notification/NotificationReceiver.java)25
-rw-r--r--src/com/android/car/dialer/ui/common/entity/UiCallLog.java37
-rw-r--r--src/com/android/car/dialer/ui/contact/ContactDetailsFragment.java9
-rw-r--r--src/com/android/car/dialer/ui/contact/ContactDetailsViewHolder.java36
-rw-r--r--src/com/android/car/dialer/ui/contact/ContactListFragment.java1
-rw-r--r--src/com/android/car/dialer/ui/contact/ContactListViewHolder.java9
-rw-r--r--src/com/android/car/dialer/ui/dialpad/AbstractDialpadFragment.java1
-rw-r--r--src/com/android/car/dialer/ui/dialpad/DialpadFragment.java23
-rw-r--r--src/com/android/car/dialer/ui/dialpad/InCallDialpadFragment.java2
-rw-r--r--src/com/android/car/dialer/ui/dialpad/TypeDownResultsAdapter.java47
-rw-r--r--src/com/android/car/dialer/ui/dialpad/TypeDownResultsViewModel.java47
-rw-r--r--src/com/android/car/dialer/ui/favorite/AddFavoriteFragment.java100
-rw-r--r--src/com/android/car/dialer/ui/favorite/BluetoothFavoriteContactsLiveData.java76
-rw-r--r--src/com/android/car/dialer/ui/favorite/FavoriteAdapter.java79
-rw-r--r--src/com/android/car/dialer/ui/favorite/FavoriteContactViewHolder.java11
-rw-r--r--src/com/android/car/dialer/ui/favorite/FavoriteFragment.java34
-rw-r--r--src/com/android/car/dialer/ui/favorite/FavoriteViewModel.java47
-rw-r--r--src/com/android/car/dialer/ui/search/ContactResultViewHolder.java59
-rw-r--r--src/com/android/car/dialer/ui/search/ContactResultsAdapter.java28
-rw-r--r--src/com/android/car/dialer/ui/search/ContactResultsFragment.java3
-rw-r--r--src/com/android/car/dialer/ui/search/ContactResultsViewModel.java134
-rw-r--r--src/com/android/car/dialer/widget/LoadingFrameLayout.java9
-rw-r--r--tests/robotests/res/layout/test_activity.xml2
-rw-r--r--tests/robotests/src/com/android/car/dialer/telecom/InCallServiceImplTest.java42
-rw-r--r--tests/robotests/src/com/android/car/dialer/ui/activecall/OnGoingCallControllerBarFragmentTest.java3
-rw-r--r--tests/robotests/src/com/android/car/dialer/ui/calllog/CallHistoryFragmentTest.java12
-rw-r--r--tests/robotests/src/com/android/car/dialer/ui/contact/ContactDetailsFragmentTest.java2
-rw-r--r--tests/robotests/src/com/android/car/dialer/ui/contact/ContactListFragmentTest.java2
-rw-r--r--tests/robotests/src/com/android/car/dialer/ui/dialpad/DialpadFragmentTest.java37
-rw-r--r--tests/robotests/src/com/android/car/dialer/ui/favorite/FavoriteFragmentTest.java4
-rw-r--r--tests/robotests/src/com/android/car/dialer/ui/search/ContactResultsFragmentTest.java25
163 files changed, 2247 insertions, 1188 deletions
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 481589c0..99cf3888 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -16,6 +16,7 @@
<manifest
xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
package="com.android.car.dialer">
<uses-sdk android:minSdkVersion="24" android:targetSdkVersion='24'/>
@@ -38,7 +39,8 @@
android:name=".DialerApplication"
android:directBootAware="true"
android:label="@string/phone_app_name"
- android:icon="@drawable/ic_app_icon">
+ android:icon="@drawable/ic_app_icon"
+ android:supportsRtl="true">
<activity android:name=".ui.TelecomActivity"
android:launchMode="singleTask"
@@ -109,12 +111,6 @@
android:permission="android.permission.BIND_JOB_SERVICE">
</service>
- <!-- BroadcastReceiver for receiving Intents from Notification mechanism. -->
- <receiver
- android:directBootAware="true"
- android:exported="false"
- android:name="com.android.car.dialer.notification.NotificationReceiver"/>
-
<receiver
android:directBootAware="true"
android:name="com.android.car.dialer.notification.MissedCallReceiver">
@@ -130,5 +126,14 @@
<action android:name="android.bluetooth.device.action.BOND_STATE_CHANGED"/>
</intent-filter>
</receiver>
+
+ <!-- Workaround for b/113294940, remove when converting to Android.bp -->
+ <provider
+ android:name="androidx.lifecycle.ProcessLifecycleOwnerInitializer"
+ tools:replace="android:authorities"
+ android:authorities="${applicationId}"
+ android:exported="false"
+ android:multiprocess="true" />
+
</application>
</manifest>
diff --git a/res/color/contact_details_icon_tint.xml b/res/color/contact_details_icon_tint.xml
new file mode 100644
index 00000000..3d694c32
--- /dev/null
+++ b/res/color/contact_details_icon_tint.xml
@@ -0,0 +1,26 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<!--
+ Copyright (C) 2019 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:color="@color/primary_icon_color"
+ android:state_enabled="true"
+ android:state_activated="false"/>
+ <item android:color="#FFFFFF"
+ android:state_enabled="true"
+ android:state_activated="true"/>
+ <item android:color="#80FFFFFF"
+ android:state_enabled="false"/>
+</selector>
diff --git a/res/color/icon_accent_activatable.xml b/res/color/icon_accent_activatable.xml
index cf4b9e79..c652f079 100644
--- a/res/color/icon_accent_activatable.xml
+++ b/res/color/icon_accent_activatable.xml
@@ -16,6 +16,6 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/primary_icon_color"
android:state_activated="false"/>
- <item android:color="?android:colorAccent"
+ <item android:color="@color/audio_output_accent"
android:state_activated="true"/>
</selector>
diff --git a/res/color/text_accent_activatable.xml b/res/color/text_accent_activatable.xml
deleted file mode 100644
index 4f1dc0fc..00000000
--- a/res/color/text_accent_activatable.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version='1.0' encoding='UTF-8'?>
-<!-- Copyright (C) 2019 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:color="@color/primary_text_color"
- android:state_activated="false"/>
- <item android:color="?android:colorAccent"
- android:state_activated="true"/>
-</selector>
diff --git a/res/drawable/ic_arrow_right.xml b/res/drawable/ic_arrow_right.xml
index 051b6a05..877c510f 100644
--- a/res/drawable/ic_arrow_right.xml
+++ b/res/drawable/ic_arrow_right.xml
@@ -18,7 +18,8 @@ limitations under the License.
android:viewportHeight="48"
android:width="@dimen/primary_icon_size"
android:height="@dimen/primary_icon_size"
- android:tint="@color/icon_tint_state_list">
+ android:tint="@color/icon_tint_state_list"
+ android:autoMirrored="true">
<path android:pathData="M0-.25h48v48H0z"/>
<path
diff --git a/res/drawable/ic_favorite_activatable.xml b/res/drawable/ic_favorite_activatable.xml
index 72855133..d40add41 100644
--- a/res/drawable/ic_favorite_activatable.xml
+++ b/res/drawable/ic_favorite_activatable.xml
@@ -15,7 +15,11 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/ic_favorite_empty"
- android:state_activated="false"/>
+ android:state_activated="false" android:state_enabled="true"/>
<item android:drawable="@drawable/ic_favorite"
- android:state_activated="true"/>
+ android:state_activated="true" android:state_enabled="true"/>
+ <item android:drawable="@drawable/ic_favorite"
+ android:state_activated="true" android:state_enabled="false"/>
+ <item android:drawable="@drawable/ic_imported_favorite"
+ android:state_activated="false" android:state_enabled="false"/>
</selector>
diff --git a/res/drawable/ic_imported_favorite.xml b/res/drawable/ic_imported_favorite.xml
new file mode 100644
index 00000000..c6858bb6
--- /dev/null
+++ b/res/drawable/ic_imported_favorite.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2020 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.
+ -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="@dimen/primary_icon_size"
+ android:height="@dimen/primary_icon_size"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
+ <path android:pathData="M17 3H7c-1.1 0-1.99.9-1.99 2L5 21l7-3 7 3V5c0-1.1-.9-2-2-2z"
+ android:fillColor="#ff000000"/>
+</vector>
diff --git a/res/layout-port/dialpad_fragment.xml b/res/layout-port/dialpad_fragment.xml
index fffbf707..fd046c1c 100644
--- a/res/layout-port/dialpad_fragment.xml
+++ b/res/layout-port/dialpad_fragment.xml
@@ -16,16 +16,22 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
+ <androidx.constraintlayout.widget.Guideline
+ android:id="@+id/type_down_guideline"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ app:layout_constraintGuide_percent="@dimen/config_type_down_guideline_percent"/>
+
<fragment
android:id="@+id/dialpad_fragment"
android:name="com.android.car.dialer.ui.dialpad.KeypadFragment"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
- android:layout_marginTop="@dimen/keypad_margin"
- app:layout_constraintTop_toBottomOf="@+id/title"
- app:layout_constraintBottom_toTopOf="@+id/call_button"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toEndOf="parent"/>
+ android:layout_marginStart="@dimen/dialpad_info_margin_start"
+ app:layout_constraintTop_toBottomOf="@id/type_down_guideline"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintStart_toStartOf="parent"/>
<TextView
android:id="@+id/title"
@@ -37,9 +43,8 @@
android:autoSizeMinTextSize="@dimen/dialpad_info_title_text_size_min"
android:autoSizeMaxTextSize="@dimen/dialpad_info_title_text_size_max"
app:layout_constraintVertical_chainStyle="packed"
- app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintBottom_toTopOf="@id/dialpad_fragment"
- app:layout_constraintStart_toStartOf="@id/dialpad_fragment"
+ app:layout_constraintTop_toTopOf="@id/dialpad_fragment"
+ app:layout_constraintStart_toEndOf="@id/dialpad_fragment"
app:layout_constraintEnd_toStartOf="@+id/delete_button"
app:layout_goneMarginEnd="@dimen/dialpad_info_edge_padding_size"/>
@@ -48,19 +53,10 @@
style="@style/DialpadSecondaryButton"
android:src="@drawable/ic_backspace"
android:layout_marginStart="@dimen/dialpad_info_title_padding_size"
- android:layout_marginEnd="@dimen/dialpad_info_edge_padding_size"
+ android:layout_marginEnd="@dimen/dialpad_info_margin_end"
app:layout_constraintTop_toTopOf="@id/title"
app:layout_constraintBottom_toBottomOf="@id/title"
app:layout_constraintStart_toEndOf="@id/title"
- app:layout_constraintEnd_toEndOf="@id/dialpad_fragment"/>
-
- <include
- layout="@layout/dialpad_user_profile"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- app:layout_constraintTop_toBottomOf="@id/title"
- app:layout_constraintBottom_toTopOf="@id/dialpad_fragment"
- app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<ImageView
@@ -70,7 +66,32 @@
android:layout_height="@dimen/call_button_height"
android:src="@drawable/icon_call_button"
android:layout_marginBottom="@dimen/call_button_bottom_margin"
- app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintBottom_toBottomOf="@id/dialpad_fragment"
+ app:layout_constraintStart_toEndOf="@id/dialpad_fragment"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <View
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/dialpad_line_divider_height"
+ android:background="@color/divider_color"
+ android:layout_marginStart="@dimen/horizontal_divider_inset"
+ android:layout_marginEnd="@dimen/horizontal_divider_inset"
+ app:layout_constraintTop_toBottomOf="@id/type_down_guideline"/>
+
+ <include
+ layout="@layout/dialpad_user_profile"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ app:layout_constraintTop_toBottomOf="@id/title"
+ app:layout_constraintStart_toEndOf="@id/dialpad_fragment"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <include
+ layout="@layout/list_fragment"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toTopOf="@id/type_down_guideline"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
diff --git a/res/layout-w1280dp/type_down_list_item.xml b/res/layout-w1280dp/type_down_list_item.xml
new file mode 100644
index 00000000..fec8a538
--- /dev/null
+++ b/res/layout-w1280dp/type_down_list_item.xml
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2020 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
+ -->
+
+<androidx.constraintlayout.widget.ConstraintLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:id="@+id/contact_result"
+ android:foreground="?android:attr/selectableItemBackground"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/type_down_list_item_height">
+
+ <ImageView
+ android:id="@+id/contact_picture"
+ android:layout_width="@dimen/avatar_icon_size"
+ android:layout_height="@dimen/avatar_icon_size"
+ android:layout_marginStart="@dimen/contact_result_avatar_margin"
+ android:scaleType="centerCrop"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintStart_toStartOf="parent"/>
+
+ <TextView
+ android:id="@+id/contact_name"
+ android:layout_marginStart="@dimen/contact_result_name_margin"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:textAppearance="@style/TextAppearance.ContactResultTitle"
+ android:duplicateParentState="true"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toTopOf="@+id/phone_number"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <TextView
+ android:id="@+id/phone_number"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ app:layout_constraintTop_toBottomOf="@id/contact_name"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintStart_toStartOf="@id/contact_name"/>
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/res/layout/add_favorite_number_list_item.xml b/res/layout/add_favorite_number_list_item.xml
deleted file mode 100644
index ffe54459..00000000
--- a/res/layout/add_favorite_number_list_item.xml
+++ /dev/null
@@ -1,60 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2019 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.
--->
-
-<androidx.constraintlayout.widget.ConstraintLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:layout_height="@dimen/add_favorite_number_list_height"
- android:background="?android:attr/selectableItemBackground"
- android:paddingStart="@dimen/add_favorite_number_list_padding"
- android:paddingEnd="@dimen/add_favorite_number_list_padding">
-
- <TextView
- android:id="@+id/phone_number"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:textAppearance="@style/TextAppearance.AddFavoriteNumberTitle"
- android:duplicateParentState="true"
- app:layout_constraintVertical_chainStyle="packed"
- app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintBottom_toTopOf="@+id/phone_number_description"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toStartOf="@+id/phone_number_checkbox"/>
-
- <TextView
- android:id="@+id/phone_number_description"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:textAppearance="@style/TextAppearance.AddFavoriteNumberSubtitle"
- android:duplicateParentState="true"
- app:layout_constraintTop_toBottomOf="@id/phone_number"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toStartOf="@id/phone_number_checkbox"/>
-
- <ImageView
- android:id="@+id/phone_number_checkbox"
- android:src="@drawable/ic_favorite_activatable"
- android:layout_width="@dimen/primary_icon_size"
- android:layout_height="@dimen/primary_icon_size"
- android:tint="@color/primary_icon_selector"
- android:duplicateParentState="true"
- app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintEnd_toEndOf="parent"/>
-
-</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/res/layout/audio_route_list_item.xml b/res/layout/audio_route_list_item.xml
deleted file mode 100644
index c1510ef6..00000000
--- a/res/layout/audio_route_list_item.xml
+++ /dev/null
@@ -1,49 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2018 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.
--->
-<androidx.constraintlayout.widget.ConstraintLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- android:layout_width="match_parent"
- android:layout_height="@dimen/audio_route_height"
- android:background="?android:attr/selectableItemBackground"
- android:elevation="@dimen/dialer_card_elevation">
- <androidx.constraintlayout.widget.Guideline
- android:id="@+id/text_start"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- app:layout_constraintGuide_begin="@dimen/audio_route_constraint_guide_begin"/>
- <ImageView
- android:id="@+id/icon"
- android:layout_width="@dimen/audio_route_icon_size"
- android:layout_height="@dimen/audio_route_icon_size"
- android:scaleType="fitCenter"
- android:layout_marginStart="@dimen/audio_route_content_padding"
- android:tint="@color/icon_accent_activatable"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent"/>
- <TextView
- android:id="@+id/body"
- android:layout_width="0dp"
- android:layout_height="wrap_content"
- android:textAppearance="?android:attr/textAppearanceLarge"
- android:textColor="@color/text_accent_activatable"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintStart_toStartOf="@+id/text_start"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintTop_toTopOf="parent"/>
-</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/res/layout/audio_route_switch_dialog.xml b/res/layout/audio_route_switch_dialog.xml
deleted file mode 100644
index 7a5013c7..00000000
--- a/res/layout/audio_route_switch_dialog.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2018 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.
--->
-<androidx.recyclerview.widget.RecyclerView
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:id="@+id/list"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:clipChildren="false"/>
diff --git a/res/layout/contact_result.xml b/res/layout/contact_result.xml
index f6188f70..1e85899e 100644
--- a/res/layout/contact_result.xml
+++ b/res/layout/contact_result.xml
@@ -39,8 +39,9 @@
android:layout_height="wrap_content"
android:singleLine="true"
android:textAppearance="@style/TextAppearance.ContactResultTitle"
+ android:duplicateParentState="true"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
-</androidx.constraintlayout.widget.ConstraintLayout>
+</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file
diff --git a/res/layout/dialpad_fragment.xml b/res/layout/dialpad_fragment.xml
index 6627e704..a2655185 100644
--- a/res/layout/dialpad_fragment.xml
+++ b/res/layout/dialpad_fragment.xml
@@ -39,9 +39,8 @@
<FrameLayout
android:layout_height="0dp"
android:layout_width="0dp"
- app:layout_constraintDimensionRatio="W, 1:1"
- app:layout_constraintTop_toTopOf="@id/dialpad_fragment"
- app:layout_constraintBottom_toBottomOf="@id/dialpad_fragment"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toEndOf="@id/divider"
app:layout_constraintEnd_toEndOf="parent">
<include layout="@layout/dialpad_info"/>
diff --git a/res/layout/dialpad_info.xml b/res/layout/dialpad_info.xml
index f1827219..4219ba92 100644
--- a/res/layout/dialpad_info.xml
+++ b/res/layout/dialpad_info.xml
@@ -38,17 +38,27 @@
android:autoSizeMaxTextSize="@dimen/dialpad_info_title_text_size_max"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="@id/dialpad_info_guideline"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toStartOf="@+id/delete_button"/>
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintRight_toLeftOf="@+id/delete_button"/>
<ImageButton
android:id="@+id/delete_button"
style="@style/DialpadSecondaryButton"
android:src="@drawable/ic_backspace"
- android:layout_marginStart="@dimen/dialpad_info_title_padding_size"
+ android:layout_marginLeft="@dimen/dialpad_info_title_padding_size"
+ android:layout_marginRight="@dimen/dialpad_info_margin_end"
app:layout_constraintTop_toTopOf="@id/title"
app:layout_constraintBottom_toBottomOf="@id/title"
- app:layout_constraintStart_toEndOf="@id/title"
+ app:layout_constraintLeft_toRightOf="@id/title"
+ app:layout_constraintRight_toRightOf="parent"/>
+
+ <ImageView
+ android:id="@+id/call_button"
+ style="@style/DialpadPrimaryButton"
+ android:src="@drawable/icon_call_button"
+ android:layout_marginBottom="@dimen/dialpad_info_edge_padding_size"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
<include
@@ -57,15 +67,17 @@
android:layout_height="0dp"
android:layout_marginTop="@dimen/dialpad_user_profile_padding"
app:layout_constraintTop_toBottomOf="@id/title"
- app:layout_constraintBottom_toTopOf="@+id/call_button"
+ app:layout_constraintBottom_toTopOf="@id/call_button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
- <ImageView
- android:id="@+id/call_button"
- style="@style/DialpadPrimaryButton"
- android:src="@drawable/icon_call_button"
- app:layout_constraintBottom_toBottomOf="parent"
+ <include
+ layout="@layout/list_fragment"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_marginBottom="@dimen/dialpad_user_profile_padding"
+ app:layout_constraintTop_toBottomOf="@id/title"
+ app:layout_constraintBottom_toTopOf="@id/call_button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
diff --git a/res/layout/favorite_contact_list_item.xml b/res/layout/favorite_contact_list_item.xml
index 82002fe1..032a1535 100644
--- a/res/layout/favorite_contact_list_item.xml
+++ b/res/layout/favorite_contact_list_item.xml
@@ -13,13 +13,12 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<LinearLayout
+<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/text_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:orientation="vertical"
- android:gravity="center_horizontal"
android:background="?android:attr/selectableItemBackground">
<ImageView
@@ -27,19 +26,32 @@
android:layout_width="@dimen/large_avatar_icon_size"
android:layout_height="@dimen/large_avatar_icon_size"
android:layout_marginBottom="@dimen/favorites_avatar_margin_bottom"
- android:scaleType="centerCrop"/>
+ android:scaleType="centerCrop"
+ app:layout_constraintVertical_chainStyle="packed"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toTopOf="@+id/title"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
<TextView
android:id="@+id/title"
android:textAppearance="?android:attr/textAppearanceLarge"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:singleLine="true"/>
+ android:singleLine="true"
+ app:layout_constraintTop_toBottomOf="@id/icon"
+ app:layout_constraintBottom_toTopOf="@+id/text"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
<TextView
android:id="@+id/text"
android:textAppearance="?android:attr/textAppearanceSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:singleLine="true"/>
-</LinearLayout>
+ android:singleLine="true"
+ app:layout_constraintTop_toBottomOf="@id/title"
+ app:layout_constraintBottom_toTopOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/res/layout/keypad.xml b/res/layout/keypad.xml
index a63b5ae3..7d8d47ca 100644
--- a/res/layout/keypad.xml
+++ b/res/layout/keypad.xml
@@ -30,8 +30,8 @@ limitations under the License.
app:layout_constraintVertical_chainStyle="packed"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@+id/four"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toStartOf="@+id/two"/>
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintRight_toLeftOf="@+id/two"/>
<com.android.car.dialer.ui.dialpad.KeypadButton
android:id="@+id/two"
@@ -41,8 +41,8 @@ limitations under the License.
app:layout_constraintVertical_chainStyle="packed"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@+id/five"
- app:layout_constraintStart_toEndOf="@id/one"
- app:layout_constraintEnd_toStartOf="@+id/three"/>
+ app:layout_constraintLeft_toRightOf="@id/one"
+ app:layout_constraintRight_toLeftOf="@+id/three"/>
<com.android.car.dialer.ui.dialpad.KeypadButton
android:id="@+id/three"
@@ -52,8 +52,8 @@ limitations under the License.
app:layout_constraintVertical_chainStyle="packed"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@+id/six"
- app:layout_constraintStart_toEndOf="@id/two"
- app:layout_constraintEnd_toEndOf="parent"/>
+ app:layout_constraintLeft_toRightOf="@id/two"
+ app:layout_constraintRight_toRightOf="parent"/>
<!-- Row 2 -->
<com.android.car.dialer.ui.dialpad.KeypadButton
@@ -64,8 +64,8 @@ limitations under the License.
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintTop_toBottomOf="@id/one"
app:layout_constraintBottom_toTopOf="@+id/seven"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toStartOf="@+id/five"/>
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintRight_toLeftOf="@+id/five"/>
<com.android.car.dialer.ui.dialpad.KeypadButton
android:id="@+id/five"
@@ -74,8 +74,8 @@ limitations under the License.
style="@style/KeypadButtonStyle"
app:layout_constraintTop_toBottomOf="@id/two"
app:layout_constraintBottom_toTopOf="@+id/eight"
- app:layout_constraintStart_toEndOf="@id/four"
- app:layout_constraintEnd_toStartOf="@+id/six"/>
+ app:layout_constraintLeft_toRightOf="@id/four"
+ app:layout_constraintRight_toLeftOf="@+id/six"/>
<com.android.car.dialer.ui.dialpad.KeypadButton
android:id="@+id/six"
@@ -84,8 +84,8 @@ limitations under the License.
style="@style/KeypadButtonStyle"
app:layout_constraintTop_toBottomOf="@id/three"
app:layout_constraintBottom_toTopOf="@+id/nine"
- app:layout_constraintStart_toEndOf="@id/five"
- app:layout_constraintEnd_toEndOf="parent"/>
+ app:layout_constraintLeft_toRightOf="@id/five"
+ app:layout_constraintRight_toRightOf="parent"/>
<!-- Row 3 -->
@@ -97,8 +97,8 @@ limitations under the License.
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintTop_toBottomOf="@id/four"
app:layout_constraintBottom_toTopOf="@+id/star"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toStartOf="@+id/eight"/>
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintRight_toLeftOf="@+id/eight"/>
<com.android.car.dialer.ui.dialpad.KeypadButton
android:id="@+id/eight"
@@ -107,8 +107,8 @@ limitations under the License.
style="@style/KeypadButtonStyle"
app:layout_constraintTop_toBottomOf="@id/five"
app:layout_constraintBottom_toTopOf="@+id/zero"
- app:layout_constraintStart_toEndOf="@id/seven"
- app:layout_constraintEnd_toStartOf="@+id/nine"/>
+ app:layout_constraintLeft_toRightOf="@id/seven"
+ app:layout_constraintRight_toLeftOf="@+id/nine"/>
<com.android.car.dialer.ui.dialpad.KeypadButton
android:id="@+id/nine"
@@ -117,8 +117,8 @@ limitations under the License.
style="@style/KeypadButtonStyle"
app:layout_constraintTop_toBottomOf="@id/six"
app:layout_constraintBottom_toTopOf="@+id/pound"
- app:layout_constraintStart_toEndOf="@id/eight"
- app:layout_constraintEnd_toEndOf="parent"/>
+ app:layout_constraintLeft_toRightOf="@id/eight"
+ app:layout_constraintRight_toRightOf="parent"/>
<!-- Row 4 -->
<com.android.car.dialer.ui.dialpad.KeypadButton
@@ -129,8 +129,8 @@ limitations under the License.
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintTop_toBottomOf="@id/seven"
app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintEnd_toStartOf="@+id/zero"/>
+ app:layout_constraintLeft_toLeftOf="parent"
+ app:layout_constraintRight_toLeftOf="@+id/zero"/>
<com.android.car.dialer.ui.dialpad.KeypadButton
android:id="@+id/zero"
@@ -139,8 +139,8 @@ limitations under the License.
style="@style/KeypadButtonStyle"
app:layout_constraintTop_toBottomOf="@id/eight"
app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintStart_toEndOf="@id/star"
- app:layout_constraintEnd_toStartOf="@+id/pound"/>
+ app:layout_constraintLeft_toRightOf="@id/star"
+ app:layout_constraintRight_toLeftOf="@+id/pound"/>
<com.android.car.dialer.ui.dialpad.KeypadButton
android:id="@+id/pound"
@@ -149,8 +149,8 @@ limitations under the License.
style="@style/KeypadButtonStyle"
app:layout_constraintTop_toBottomOf="@id/nine"
app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintStart_toEndOf="@id/zero"
- app:layout_constraintEnd_toEndOf="parent"/>
+ app:layout_constraintLeft_toRightOf="@id/zero"
+ app:layout_constraintRight_toRightOf="parent"/>
<include layout="@layout/keypad_dividers"/>
diff --git a/res/layout/phone_number_list_item.xml b/res/layout/phone_number_list_item.xml
deleted file mode 100644
index 04e1b61b..00000000
--- a/res/layout/phone_number_list_item.xml
+++ /dev/null
@@ -1,43 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2018 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.car.dialer.widget.CheckableRelativeLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:paddingStart="?android:listPreferredItemPaddingStart"
- android:paddingEnd="?android:listPreferredItemPaddingEnd">
-
- <RadioButton
- android:id="@+id/phone_number_checkbox"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_centerVertical="true"
- android:layout_marginEnd="@dimen/phone_number_radio_list_padding"/>
- <TextView
- android:id="@+id/phone_number"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_toEndOf="@id/phone_number_checkbox"
- android:textAppearance="?android:attr/textAppearanceMedium"/>
- <TextView
- android:id="@+id/phone_number_description"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_below="@id/phone_number"
- android:layout_toEndOf="@id/phone_number_checkbox"
- android:textAppearance="?android:attr/textAppearanceSmall"/>
-
-</com.android.car.dialer.widget.CheckableRelativeLayout>
diff --git a/res/layout/type_down_list_item.xml b/res/layout/type_down_list_item.xml
new file mode 100644
index 00000000..a0476f60
--- /dev/null
+++ b/res/layout/type_down_list_item.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2020 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
+ -->
+
+<androidx.constraintlayout.widget.ConstraintLayout
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ android:id="@+id/contact_result"
+ android:foreground="?android:attr/selectableItemBackground"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/type_down_list_item_height">
+
+ <TextView
+ android:id="@+id/contact_name"
+ android:layout_width="0dp"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ android:textAppearance="@style/TextAppearance.ContactResultTitle"
+ android:duplicateParentState="true"
+ app:layout_constraintTop_toTopOf="parent"
+ app:layout_constraintBottom_toTopOf="@+id/phone_number"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+ <TextView
+ android:id="@+id/phone_number"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:singleLine="true"
+ app:layout_constraintTop_toBottomOf="@id/contact_name"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintStart_toStartOf="@id/contact_name"/>
+</androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 1ffe0594..27ae21e2 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Kies \'n foonnommer"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Net een keer"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Altyd"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – Verstek"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – gunsteling"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , verstek"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Gunsteling – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Plaaslike gunsteling – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Gunstelinge"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Plaaslike gunstelinge"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Geen foonnommers nie"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Kennisgewing van inkomende oproep"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Inkomende oproep"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Gemiste Oproep-kennisgewing"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Kontakvolgorde"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Voornaam"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Van"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Voer oproepoudio uit na:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 9ed2cd57..372ac9fb 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"ስልክ ቁጥር ይምረጡ"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"አንዴ ብቻ"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"ሁልጊዜ"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - ነባሪ"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - ተወዳጅ"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> ፣ ነባሪ"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"ተወዳጅ - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"አካባቢያዊ ተወዳጅ - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"ተወዳጆች"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"አካባቢያዊ ተወዳጆች"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"ስልክ ቁጥሮች የሉም"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"የገቢ ጥሪ ማሳወቂያ"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"ገቢ ጥሪ"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"ያመለጠ ጥሪ ማሳወቂያ"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"የእውቂያ ቅደም ተከተል"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"የመጀመርያ ስም"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"የአያት ስም"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"የጥሪ ኦዲዮን በዚህ ያሰሙ፦"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 80ad65d0..e051fac4 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"اختيار رقم هاتف"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"مرّة واحدة فقط"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"دومًا"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - تلقائي"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - وضع في المفضَّلة"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>، تلقائي"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"المفضّلة، <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"النشاط التجاري المحلي المفضّل - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"أرقام الهواتف المفضّلة"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"الأنشطة التجارية المحلية المفضّلة"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"ليس هناك أرقام هواتف."</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"إشعار مكالمة واردة"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"مكالمة واردة"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"إشعار المكالمة الفائتة"</string>
@@ -72,4 +76,6 @@
<string name="sort_order_title" msgid="975104366728292702">"ترتيب جهات الاتصال"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"الاسم الأول"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"اسم العائلة"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"الاستماع إلى صوت المكالمة لـ:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index 99dc0f8c..f07f18a1 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"এটা ফ’ন নম্বৰ বাছনি কৰক"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"মাত্ৰ এবাৰ"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"সদায়"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - ডিফ’ল্ট"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - প্ৰিয়"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , ডিফ’ল্ট"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"প্ৰিয় - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"স্থানীয় প্ৰিয় - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"প্ৰিয়সমূহ"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"স্থানীয় প্ৰিয়সমূহ"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"কোনো ফ\'ন নম্বৰ নাই"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"অন্তৰ্গামী কলৰ জাননী"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"অন্তৰ্গামী কল"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"মিছড কলৰ জাননী"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"সম্পৰ্কৰ ক্ৰম"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"প্ৰথম নাম"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"উপাধি"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"কল অডিঅ\'ৰ বাবে এয়া ব্যৱহাৰ কৰক:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index 04089fa8..f437a5a5 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Telefon nömrəsi seçin"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Sadəcə bir dəfə"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Həmişə"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - Defolt"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - Sevimli"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , defolt"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Sevimli - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Yerli sevimli - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Sevimlilər"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Yerli sevimlilər"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Telefon nömrəsi yoxdur"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Gələn zəng bildirişi"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Gələn zəng"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Buraxılmış zəng bildirişi"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Kontakt sırası"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Ad"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Soyad"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Zəng audiosunu buraya göndərin:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index ea9af7ef..1dc46bdb 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Odaberite broj telefona"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Samo jednom"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Uvek"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – podrazumevano"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – Omiljeno"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>, podrazumevano"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Favorit – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Lokalni favorit – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Favoriti"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Lokalni favoriti"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Nema brojeva telefona"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Obaveštenje o dolaznom pozivu"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Dolazni poziv"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Obaveštenje o propuštenom pozivu"</string>
@@ -69,4 +73,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Redosled kontakata"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Ime"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Prezime"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Izaberite izlaz za zvuk poziva:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index 879f7adb..b68f696b 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Выберыце нумар тэлефона"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Толькі адзін раз"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Заўсёды"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – Стандартна"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – дадаць у абраныя"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"Стандартна: <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Абраны кантакт: <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Абранае на гэтай прыладзе: <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Абраныя кантакты"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Абранае на гэтай прыладзе"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Няма нумароў тэлефонаў"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Апавяшчэнне аб уваходным выкліку"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Уваходны выклік"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Апавяшчэнне аб прапушчаным выкліку"</string>
@@ -70,4 +74,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Парадак кантактаў"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Імя"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Прозвішча"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Вывадзіць гук выкліку на:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index dc888505..bde92788 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Избиране на телефонен номер"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Само веднъж"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Винаги"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – по подразбиране"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – Означаване като любимо"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> – по подразбиране"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Любим – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Любим в локалните – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Любими"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Любими в локалните"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Няма телефонни номера"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Известие за входящо обаждане"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Входящо обаждане"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Известие за пропуснато обаждане"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Подредба на контактите"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Собствено име"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Фамилно име"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Извеждане на аудиото на обаждането до:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index bc25dec5..cc2a5844 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"কোনও একটি ফোন নম্বর বেছে নিন"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"শুধু একবার"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"সবসময়"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - ডিফল্ট"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - পছন্দ"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , ডিফল্ট"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"পছন্দসই - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"স্থানীয় পছন্দসই - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"পছন্দসই"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"স্থানীয় পছন্দসই"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"কোনও ফোন নম্বর নেই"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"ইনকামিং কলের বিজ্ঞপ্তি"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"ইনকামিং কল"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"মিসড কলের বিজ্ঞপ্তি"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"পরিচিতির ক্রম"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"নাম"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"পদবি"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"কলের অডিও এখানে শুনুন:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 3fa1d2d7..c5743fca 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Odaberite broj telefona"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Samo ovaj put"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Uvijek"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – zadano"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - Dodati u omiljeno"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , zadano"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Omiljeni - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Lokalni omiljeni - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Omiljeni"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Lokalni omiljeni"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Nema brojeva telefona"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Obavještenja tokom dolaznog poziva"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Dolazni poziv"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Obavještenje za propušten poziv"</string>
@@ -69,4 +73,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Redoslijed kontakata"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Ime"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Prezime"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Odaberite izlaz za zvuk poziva:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 20c579d4..2f54f1bb 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Tria un número de telèfon"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Només una vegada"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Sempre"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g>: predeterminat"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g>: preferit"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>, predeterminat"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Preferit: <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Preferit del lloc: <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Preferits"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Preferits del lloc"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"No hi ha cap número de telèfon"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Notificació de trucada entrant"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Trucada entrant"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Notificació de trucada perduda"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Ordre dels contactes"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Nom"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Cognoms"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Sortida d\'àudio per a trucades:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 968a2de3..987739ee 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Vyberte telefonní číslo"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Pouze jednou"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Vždy"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – výchozí"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – přidat mezi oblíbené"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>, výchozí"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Přidat číslo <xliff:g id="LABEL">%1$s</xliff:g> mezi oblíbené"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Místní oblíbené číslo – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Oblíbené"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Místní oblíbená čísla"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Žádná telefonní čísla"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Oznámení o příchozím hovoru"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Příchozí hovor"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Zmeškané oznámení o hovoru"</string>
@@ -70,4 +74,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Pořadí kontaktů"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Jméno"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Příjmení"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Směrování zvuku odchozího hovoru:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index ec30735a..685c78bf 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Vælg et telefonnummer"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Kun én gang"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Altid"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – standard"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – favoritnummer"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , standard"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Favorit – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Lokal favorit – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Favoritter"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Lokale favoritter"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Der er ingen telefonnumre"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Notifikation om indgående opkald"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Indgående opkald"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Notifikation om ubesvaret opkald"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Kontaktrækkefølge"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Fornavn"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Efternavn"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Send opkaldslyd til:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index e18e9a90..3a5ab751 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Telefonnummer auswählen"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Nur diesmal"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Immer"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – Standardeinstellung"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – Favorit"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>, Standard"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Favorit – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Lokaler Favorit – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Favoriten"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Lokale Favoriten"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Keine Telefonnummern"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Benachrichtigung zu eingehendem Anruf"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Eingehender Anruf"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Benachrichtigung für verpassten Anruf"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Reihenfolge der Kontakte"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Vorname"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Nachname"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Audio des Anrufs ausgeben an:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index ca4739cf..c926fc2a 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Επιλέξτε αριθμό τηλεφώνου"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Μόνο μία φορά"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Πάντα"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - Προεπιλογή"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - Αγαπημένο"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , προεπιλογή"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Αγαπημένο - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Τοπικό αγαπημένο - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Αγαπημένα"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Τοπικά αγαπημένα"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Δεν υπάρχουν αριθμοί τηλεφώνου."</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Ειδοποίηση εισερχόμενης κλήσης"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Εισερχόμενη κλήση"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Ειδοποίηση αναπάντητης κλήσης"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Παραγγελία επαφής"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Όνομα"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Επώνυμο"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Έξοδος ήχου κλήσης σε:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 1a4de3a5..b88763a0 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Choose a phone number"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Just once"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Always"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – Default"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – Favourite"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , default"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Favourite – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Local favourite – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Favourites"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Local favourites"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"No phone numbers"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Incoming call notification"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Incoming call"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Missed call notification"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Contact order"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"First name"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Surname"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Output call audio to:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index 1a4de3a5..b88763a0 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Choose a phone number"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Just once"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Always"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – Default"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – Favourite"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , default"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Favourite – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Local favourite – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Favourites"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Local favourites"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"No phone numbers"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Incoming call notification"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Incoming call"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Missed call notification"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Contact order"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"First name"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Surname"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Output call audio to:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 1a4de3a5..b88763a0 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Choose a phone number"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Just once"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Always"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – Default"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – Favourite"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , default"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Favourite – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Local favourite – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Favourites"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Local favourites"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"No phone numbers"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Incoming call notification"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Incoming call"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Missed call notification"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Contact order"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"First name"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Surname"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Output call audio to:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 1a4de3a5..b88763a0 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Choose a phone number"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Just once"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Always"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – Default"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – Favourite"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , default"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Favourite – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Local favourite – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Favourites"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Local favourites"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"No phone numbers"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Incoming call notification"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Incoming call"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Missed call notification"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Contact order"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"First name"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Surname"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Output call audio to:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 942fabe0..d5d3f9f8 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‏‎‏‎‏‏‎‏‎‎‏‎‏‏‎‏‎‎‏‎‏‎‎‎‏‎‏‏‎‏‎‏‎‏‏‎‏‎‎‎‎‎‎‎‎‏‎‏‏‏‏‎‏‎Choose a phone number‎‏‎‎‏‎"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‎‏‎‎‏‎‏‏‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‎‏‎‏‎‎‏‎‎‏‏‏‎‏‏‎‏‎‏‏‎‎‎‏‏‏‏‏‏‎‎‎‏‎‎‎Just once‎‏‎‎‏‎"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‏‏‏‎‏‏‏‏‏‎‏‏‎‎‏‎‏‎‏‏‎‎‏‎‏‎‏‏‏‎‏‎‎‎‏‎‎‏‏‎‎‏‎‎‎‎‏‏‎‏‎‏‎‎‎Always‎‏‎‎‏‎"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‏‎‎‎‏‏‎‎‎‏‏‏‎‏‏‏‏‎‏‎‎‎‎‏‏‏‎‏‎‏‏‎‏‏‎‏‏‏‎‏‏‎‏‏‎‎‎‏‏‏‏‎‎‏‎‎‎‎‎‏‎‎‏‏‎<xliff:g id="LABEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎ - Default‎‏‎‎‏‎"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‏‎‎‎‎‏‎‎‎‏‎‎‏‎‏‎‏‎‎‎‎‎‎‎‏‎‏‎‎‏‎‏‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‎‎‏‏‎‎‎‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="LABEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎ - Favorite‎‏‎‎‏‎"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‎‎‎‎‏‏‎‎‏‏‏‏‎‎‎‎‏‎‏‎‎‏‎‎‏‏‎‎‏‎‎‏‏‎‏‎‏‏‏‎‎‎‏‏‎‏‎‎‎‎‎‎‏‎‏‎‎‏‎‏‎‎‏‎‎‏‏‎<xliff:g id="LABEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎ , default‎‏‎‎‏‎"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‏‏‏‎‏‎‎‏‎‏‏‏‎‎‎‏‎‏‎‏‎‎‏‎‎‎‏‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‏‏‏‏‎‎‎‏‏‎‎‏‎Favorite - ‎‏‎‎‏‏‎<xliff:g id="LABEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‏‎‏‏‎‏‏‎‏‎‏‏‏‎‎‎‎‏‎‏‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‎‏‎‎‏‎‎‎‏‏‎‎‏‎‏‏‎‏‏‎Local favorite - ‎‏‎‎‏‏‎<xliff:g id="LABEL">%1$s</xliff:g>‎‏‎‎‏‏‏‎‎‏‎‎‏‎"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎‏‎‎‎‎‏‎‎‏‎‏‏‎‏‏‎‏‎‏‏‎‏‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‎‏‏‏‏‏‎Favorites‎‏‎‎‏‎"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‎‎‏‎‎‏‏‎‎‎‎‏‏‎‎‏‎‏‏‎‎‎‏‏‎‎‎‎‏‏‎‏‏‎‎‎‎‏‏‎‎‎‏‎‏‏‏‎‏‎‏‎‎‎‏‏‎‏‏‎‎‎Local favorites‎‏‎‎‏‎"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‏‎‎‎‎‏‎‎‎‏‎‏‎‎‎‏‎‏‎‎‏‏‎‏‏‎‎‏‎‏‎‏‏‏‏‎‎‎‏‎‏‎‎‎‎‏‏‏‎‏‎No phone numbers‎‏‎‎‏‎"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‏‎‏‏‎‏‏‏‎‎‏‏‏‎‎‏‏‎‎‏‏‎‏‎‏‏‎‏‎‎‏‏‎‎‏‏‎‎‏‎‎‏‏‏‏‎‎‎‏‏‎‏‎‏‏‏‎‎‏‎‎Incoming call notification‎‏‎‎‏‎"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‎‏‏‎‏‏‏‏‏‏‎‏‎‎‎‏‏‏‏‏‏‎‎‏‎‏‎‎‎‏‎‎‏‏‎‎‎‎‎‏‎‎‏‎‏‎‎‎‎‎‏‎‎‎‎‎‎‎‎‎‏‎‏‎Incoming call‎‏‎‎‏‎"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‎‎‏‏‏‏‏‏‎‎‎‎‏‎‏‏‎‎‎‏‎‏‎‏‎‎‎‏‏‎‏‎‏‎‏‏‏‎‎‎‎‏‎‎‏‏‏‎‏‎‎‏‎‎‎‏‏‏‏‏‎‎‎Missed call notification‎‏‎‎‏‎"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‎‎‏‏‎‏‏‎‎‎‏‎‎‎‎‏‎‎‎‏‎‎‎‏‎‎‎‎‎‏‎‏‎‏‎‏‎‏‏‏‎‎‎‏‎‏‏‎‏‎‏‎‎‏‎‏‎‏‏‏‏‎‎Contact order‎‏‎‎‏‎"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‎‎‎‎‎‏‏‎‎‎‏‎‏‏‎‎‎‎‎‏‎‎‏‎‏‎‏‏‏‎‏‎‎‏‏‎‎‎‎‎‎‏‏‎‎‎‏‎‎‎‎‎‏‎‎‎‎First name‎‏‎‎‏‎"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‏‏‎‎‏‎‏‎‎‏‏‏‏‏‏‎‎‏‎‎‎‎‎‎‏‎‏‎‏‏‏‏‏‎‎‏‎‏‏‏‎‎‏‏‎‎‎‏‏‎‎‏‎‏‎‎‏‏‎Last name‎‏‎‎‏‎"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‏‎‎‎‎‎‏‏‎‏‏‏‏‏‏‏‏‎‏‎‏‎‎‎‎‏‎‎‏‏‏‏‎‎‎‎‏‏‎‎‎‏‎‏‎‏‎‏‏‎‏‏‎‏‏‏‏‎‏‎‎‏‏‎‏‎‏‏‏‏‏‎‏‎‏‎‏‏‏‎‎Output call audio to:‎‏‎‎‏‎"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 3079dfbf..7203fb76 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Elige un número de teléfono"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Solo una vez"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Siempre"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - predeterminado"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - Favorito"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> (predeterminado)"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Marcar como favorito: <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Favorito local: <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Favoritos"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Favoritos locales"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"No hay números de teléfono"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Notificación de llamada entrante"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Llamada entrante"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Notificación de llamada perdida"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Orden de los contactos"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Nombre"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Apellido"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Llamada de audio saliente a:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 73ffc128..81a1c116 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -41,9 +41,9 @@
<string name="call_log_header_today" msgid="2069013936632793214">"Hoy"</string>
<string name="call_log_header_yesterday" msgid="4613686845163357847">"Ayer"</string>
<string name="call_log_header_older" msgid="3971634717537073179">"Más antiguas"</string>
- <string name="call_logs_empty" msgid="3084720078894119049">"No hay elementos recientes"</string>
+ <string name="call_logs_empty" msgid="3084720078894119049">"No hay nada reciente"</string>
<string name="contact_list_empty" msgid="4225504548491888138">"No hay ningún contacto"</string>
- <string name="available_after_sync" msgid="33765918799197782">"Estará disponible después de la sincronización. Comprueba que permites compartir contactos en tu teléfono."</string>
+ <string name="available_after_sync" msgid="33765918799197782">"Esta página estará disponible después de la sincronización. Comprueba que permites compartir contactos en tu teléfono."</string>
<string name="favorites_empty" msgid="5794510741132758130">"No hay favoritos"</string>
<string name="no_favorites_added" msgid="2359050103464783907">"Aún no has añadido favoritos"</string>
<string name="add_favorite_button" msgid="7914955940249767808">"Añadir un favorito"</string>
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Elige un número de teléfono"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Solo una vez"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Siempre"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> ‑ Predeterminado"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - Favorito"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> (predeterminado)"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Favorito - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Favorito del lugar - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Favoritos"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Favoritos del lugar"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"No hay ningún número de teléfono"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Notificación de llamada entrante"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Llamada entrante"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Notificación de llamada perdida"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Orden de los contactos"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Nombre"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Apellido"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Salida de audio de las llamadas en:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 818c36f5..831bb37e 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Telefoninumbri valimine"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Ainult üks kord"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Alati"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – vaikeseade"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – lemmik"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>, vaikenumber"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Lisa lemmikutesse – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Kohalik lemmik – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Lemmikud"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Kohalikud lemmikud"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Telefoninumbreid pole"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Sissetuleva kõne märguanne"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Sissetulev kõne"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Vastamata kõne märguanne"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Kontaktide järjestus"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Eesnimi"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Perekonnanimi"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Kõne heliväljund:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index d0e89dee..964b3a97 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Aukeratu telefono-zenbaki bat"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Behin soilik"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Beti"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - Lehenetsia"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - Gogokoa"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>, lehenetsia"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Gogokoa - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Tokiko gogokoak - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Gogokoak"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Tokiko gogokoak"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Ez dago telefono-zenbakirik"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Jasotako dei bati buruzko jakinarazpena"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Jasotako deia"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Dei galduaren jakinarazpena"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Kontaktuak bistaratzeko ordena"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Izena"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Abizena"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Deien audioaren irteera:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 899bab97..dcd88b6b 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"انتخاب شماره تلفن"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"فقط یک‌بار"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"همیشه"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - پیش‌فرض"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - مورد دلخواه"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> ، پیش‌فرض"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"دلخواه - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"کسب‌وکار محبوب محلی - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"موارد دلخواه"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"کسب‌وکارهای محبوب محلی"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"شماره تلفنی وجود ندارد"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"اعلان تماس ورودی"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"تماس ورودی"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"اعلان تماس بی‌پاسخ"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"ترتیب مخاطبین"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"نام"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"نام خانوادگی"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"خروجی صدای تماس به:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index bcd478d8..4793c5c4 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -43,7 +43,7 @@
<string name="call_log_header_older" msgid="3971634717537073179">"Vanhemmat"</string>
<string name="call_logs_empty" msgid="3084720078894119049">"Ei viimeaikaisia"</string>
<string name="contact_list_empty" msgid="4225504548491888138">"Ei yhteystietoja"</string>
- <string name="available_after_sync" msgid="33765918799197782">"Saatavilla synkronoinnin jälkeen. Varmista, että olet sallinut yhteystietojen jakamisen puhelimella."</string>
+ <string name="available_after_sync" msgid="33765918799197782">"Saatavilla synkronoinnin jälkeen. Varmista, että olet sallinut puhelimen yhteystietojen jakamisen."</string>
<string name="favorites_empty" msgid="5794510741132758130">"Ei suosikkeja"</string>
<string name="no_favorites_added" msgid="2359050103464783907">"Et ole vielä lisännyt suosikkeja"</string>
<string name="add_favorite_button" msgid="7914955940249767808">"Lisää suosikki"</string>
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Valitse puhelinnumero"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Vain kerran"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Aina"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – Oletus"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – Suosikki"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>, oletus"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Suosikki – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Paikallinen suosikki – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Suosikit"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Paikalliset suosikit"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Ei puhelinnumeroita"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Ilmoitus saapuvasta puhelusta"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Saapuva puhelu"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Ilmoitus vastaamattomasta puhelusta"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Yhteystietojen järjestys"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Etunimi"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Sukunimi"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Toista puhelun ääni täällä:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 35a46747..9f939963 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Choisir un numéro de téléphone"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Une seule fois"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Toujours"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – Par défaut"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – Favoris"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , par défaut"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Favoris – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Favoris locaux – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Favoris"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Favoris locaux"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Aucun numéro de téléphone"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Notification d\'appel entrant"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Appel entrant"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Notification d\'appel manqué"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Ordre des contacts"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Prénom"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Nom de famille"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Sortie de l\'appel audio sur :"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index bf70bf95..02b06a39 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Sélectionner un numéro de téléphone"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Une seule fois"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Toujours"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – Par défaut"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - Favori"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>, par défaut"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Favori - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Favori local - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Favoris"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Favoris locaux"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Aucun numéro de téléphone"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Notification d\'appel entrant"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Appel entrant"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Notification d\'appel manqué"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Ordre des contacts"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Prénom"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Nom"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Sortie de l\'appel audio sur :"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 5ed1adc5..fd399e61 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Escoller un número de teléfono"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Só unha vez"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Sempre"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> (número predeterminado)"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> (favorito)"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>, predeterminado"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Favorito (<xliff:g id="LABEL">%1$s</xliff:g>)"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Favorito do lugar (<xliff:g id="LABEL">%1$s</xliff:g>)"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Favoritos"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Favoritos do lugar"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Non hai ningún número de teléfono"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Notificación de chamada entrante"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Chamada entrante"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Notificación de chamada perdida"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Orde dos contactos"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Nome"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Apelidos"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Enviar o audio das chamadas a:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 8c83fd92..9e650668 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"કોઈ ફોન નંબર પસંદ કરો"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"માત્ર એક વાર"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"હંમેશાં"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - ડિફૉલ્ટ"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - મનપસંદ"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , ડિફૉલ્ટ"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"મનપસંદ- <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"મનપસંદ સ્થાનિક નંબર - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"મનપસંદ"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"મનપસંદ સ્થાનિક નંબર"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"કોઈ ફોન નંબર નથી"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"ઇનકમિંગ કૉલના નોટિફિકેશન"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"ઇનકમિંગ કૉલ"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"ચૂકી ગયેલ કૉલનું નોટિફિકેશન"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"સંપર્કનો ક્રમ સૉર્ટ કરો"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"નામ"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"અટક"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"કૉલ ઑડિયોનું આઉટપુટ અહીં આપો:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-h610dp/dimens.xml b/res/values-h610dp/dimens.xml
index 23a95482..7e70374d 100644
--- a/res/values-h610dp/dimens.xml
+++ b/res/values-h610dp/dimens.xml
@@ -24,6 +24,8 @@
<!-- Control bar bottom padding -->
<dimen name="in_call_controller_bar_margin_bottom">@*android:dimen/car_padding_2</dimen>
+ <dimen name="type_down_list_item_height">@dimen/list_item_height</dimen>
+
<dimen name="fab_outline_size">104dp</dimen>
<dimen name="fab_ripple_radius">52dp</dimen>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 0f442230..f0beea64 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -43,7 +43,7 @@
<string name="call_log_header_older" msgid="3971634717537073179">"पहले के"</string>
<string name="call_logs_empty" msgid="3084720078894119049">"हाल का कॉल लॉग उपलब्ध नहीं है"</string>
<string name="contact_list_empty" msgid="4225504548491888138">"कोई संपर्क नहीं"</string>
- <string name="available_after_sync" msgid="33765918799197782">"जानकारी सिंक करने के बाद उपलब्ध हाेगी. पक्का कर लें कि आपने फ़ोन पर संपर्काें काे शेयर करने की अनुमति दी है."</string>
+ <string name="available_after_sync" msgid="33765918799197782">"सिंक करने के बाद जानकारी उपलब्ध हाेगी. पक्का कर लें कि आपने फ़ोन पर संपर्काें काे शेयर करने की अनुमति दी है."</string>
<string name="favorites_empty" msgid="5794510741132758130">"कोई पसंदीदा संपर्क नहीं"</string>
<string name="no_favorites_added" msgid="2359050103464783907">"आपने अब तक पसंदीदा संपर्क के तौर पर किसी को नहीं जोड़ा है"</string>
<string name="add_favorite_button" msgid="7914955940249767808">"पसंदीदा संपर्क जोड़ें"</string>
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"फ़ोन नंबर चुनें"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"सिर्फ़ एक बार"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"हमेशा"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - डिफ़ॉल्ट"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - पसंदीदा"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , डिफ़ॉल्ट"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"पसंदीदा नंबर - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"पसंदीदा स्थानीय नंबर - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"पसंदीदा नंबर"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"पसंदीदा स्थानीय नंबर"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"कोई फ़ोन नंबर उपलब्ध नहीं है"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"आने वाले कॉल (इनकमिंग) की सूचना"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"आने वाला कॉल (इनकमिंग)"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"मिस्ड कॉल (छूटी हुई कॉल) की सूचना"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"संपर्कों का क्रम"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"नाम"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"उपनाम"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"आउटपुट कॉल यहां से सुनाई देगी:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 1f183903..e293c964 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Odaberite telefonski broj"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Samo jednom"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Uvijek"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – zadano"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – favorit"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , zadano"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Favorit – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Lokalni favorit – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Favoriti"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Lokalni favoriti"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Nema telefonskih brojeva"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Obavijest o dolaznom pozivu"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Dolazni poziv"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Obavijest o propuštenom pozivu"</string>
@@ -69,4 +73,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Redoslijed kontakata"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Ime"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Prezime"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Odaberite izlaz za zvuk poziva:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 09574e70..5da0ff3b 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Telefonszám kiválasztása"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Csak egyszer"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Mindig"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – Alapértelmezett"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – Kedvenc"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , alapértelmezett"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Kedvenc – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Helyi kedvenc – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Kedvencek"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Helyi kedvencek"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Nincsenek telefonszámok"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Bejövő hívásról szóló értesítés"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Bejövő hívás"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Nem fogadott hívásról szóló értesítés"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Névjegyek rendezése"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Utónév"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Családnév"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Hívás hangjának kimenete:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index bad23607..ed81245f 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Ընտրեք հեռախոսահամար"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Միայն այս անգամ"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Միշտ"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – կանխադրված"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – Ընտրանի"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>, կանխադրված"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Նախընտրած – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Նախընտրած տեղական – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Նախընտրած համարներ"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Նախընտրած տեղական համարներ"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Հեռախոսահամարներ չկան"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Մուտքային զանգի ծանուցում"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Մուտքային զանգ"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Ծանուցում բաց թողնված զանգի մասին"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Կոնտակտների հերթականություն"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Անուն"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Ազգանուն"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Զանգի աուդիոելք՝"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 48aeb365..5f3762f2 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Pilih nomor telepon"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Sekali ini saja"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Selalu"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - Default"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - Favorit"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , default"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Favorit - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Favorit lokal - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Favorit"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Favorit lokal"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Nomor telepon tidak ada"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Notifikasi panggilan masuk"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Panggilan masuk"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Notifikasi panggilan tak terjawab"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Urutan kontak"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Nama depan"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Nama belakang"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Bunyikan audio panggilan telepon ke:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index d50717db..8cbf98b0 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Veldu símanúmer"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Bara einu sinni"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Alltaf"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – sjálfgefinn"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - Eftirlæti"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , sjálfgefið"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Eftirlæti - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Eftirlæti heimamanna - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Eftirlæti"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Eftirlæti heimamanna"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Engin símanúmer"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Tilkynning um móttekið símtal"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Móttekið símtal"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Tilkynning um ósvarað símtal"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Röðun tengiliða"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Fornafn"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Eftirnafn"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Senda símtalshljóð í:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 0b840fd0..ffd9e2a0 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Scegli un numero di telefono"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Solo una volta"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Sempre"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g>: predefinito"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - Preferito"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>, predefinito"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Preferito - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Preferito locale - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Preferiti"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Preferiti locali"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Nessun numero di telefono"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Notifica di chiamata in arrivo"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Chiamata in arrivo"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Notifica di chiamata senza risposta"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Ordine dei contatti"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Nome"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Cognome"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Uscita audio chiamate su:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index bb840194..e737371c 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"בחירת מספר טלפון"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"פעם אחת בלבד"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"תמיד"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - ברירת מחדל"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – מועדף"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , ברירת מחדל"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"מועדף - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"פופולרי בסביבה - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"מועדפים"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"פופולריים בסביבה"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"אין אף מספר טלפון"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"התראה על שיחה נכנסת"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"שיחה נכנסת"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"התראה על שיחה שלא נענתה"</string>
@@ -70,4 +74,6 @@
<string name="sort_order_title" msgid="975104366728292702">"סדר אנשי הקשר"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"שם פרטי"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"שם משפחה"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"פלט של שיחות אודיו אל:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 13cc40c3..244e7896 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -35,7 +35,7 @@
<string name="audio_route_handset" msgid="9133081623895172144">"スマートフォン"</string>
<string name="dial_a_number" msgid="7432322177412387160">"電話番号をダイヤル"</string>
<string name="favorites_title" msgid="4767723901530488145">"お気に入り"</string>
- <string name="call_history_title" msgid="7997887846276371553">"最近"</string>
+ <string name="call_history_title" msgid="7997887846276371553">"履歴"</string>
<string name="contacts_title" msgid="9201954388634537346">"連絡先"</string>
<string name="dialpad_title" msgid="3746259645005208554">"ダイヤルパッド"</string>
<string name="call_log_header_today" msgid="2069013936632793214">"今日"</string>
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"電話番号の選択"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"1 回のみ"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"常時"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - デフォルト"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - お気に入り"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>、デフォルト"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"お気に入り - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"地元で人気 - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"お気に入り"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"地元で人気"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"電話番号がありません"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"着信通知"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"着信"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"不在着信の通知"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"連絡先の順序"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"名"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"姓"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"通話音声の出力先:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index b7f8f713..f6bc944e 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"აირჩიეთ ტელეფონის ნომერი"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"მხოლოდ ერთხელ"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"ყოველთვის"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - ნაგულისხმევი"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> — რჩეული"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>, ნაგულისხმევი"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"ფავორიტი — <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"ადგილობრივი ფავორიტი — <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"ფავორიტები"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"ადგილობრივი ფავორიტები"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"ტელეფონის ნომრები არ არის"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"შემომავალი ზარის შეტყობინება"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"შემომავალი ზარი"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"გამოტოვებული ზარის შეტყობინება"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"კონტაქტების თანმიმდევრობა"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"სახელი"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"გვარი"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"ზარის აუდიოს გამოტანა:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index d4baccad..3188629a 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Телефон нөмірін таңдаңыз."</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Бір рет қана"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Әрқашан"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - Әдепкі"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> — таңдаулы"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , әдепкі нөмір"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Таңдаулы нөмір - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Жергілікті таңдаулы нөмір - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Таңдаулы нөмірлер"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Жергілікті таңдаулы нөмірлер"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Телефон нөмірлері жоқ"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Келген қоңырау туралы хабарландыру"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Кіріс қоңырау"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Өткізіп алған қоңырау туралы хабарландыру"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Контактілер реті"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Аты"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Тегі"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Қоңырау дыбысын қабылдайтын құрылғы:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index 3d183b33..2c387d6c 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"ជ្រើសរើស​លេខទូរសព្ទ"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"តែ​ម្ដង"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"ជានិច្ច"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - លំនាំដើម"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - សំណព្វ"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> លំនាំដើម"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"សំណព្វ - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"លេខ​សំណព្វ​ក្នុងតំបន់ - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"សំណព្វ"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"លេខ​សំណព្វ​ក្នុងតំបន់"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"មិនមាន​លេខ​ទូរសព្ទ​ទេ"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"ការជូនដំណឹង​អំពីការហៅចូល"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"ការ​ហៅ​ចូល"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"ការជូនដំណឹង​អំពីការខកខាន​ទទួល"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"លំដាប់​ទំនាក់ទំនង"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"នាម​ខ្លួន"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"នាមត្រកូល"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"បញ្ចេញសំឡេង​ហៅទូរសព្ទទៅ៖"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index 263b3b3c..01775f2d 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"ಫೋನ್ ಸಂಖ್ಯೆಯನ್ನು ಆಯ್ಕೆಮಾಡಿ"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"ಒಮ್ಮೆ ಮಾತ್ರ"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"ಯಾವಾಗಲೂ"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - ಡೀಫಾಲ್ಟ್"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - ಮೆಚ್ಚಿನದು"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , ಡಿಫಾಲ್ಟ್‌‌"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"ಮೆಚ್ಚಿನದು - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"ಸ್ಥಳೀಯ ಮೆಚ್ಚಿನದು - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"ಮೆಚ್ಚಿನವುಗಳು"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"ಸ್ಥಳೀಯ ಮೆಚ್ಚಿನವುಗಳು"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"ಯಾವುದೇ ಫೋನ್ ಸಂಖ್ಯೆಗಳಿಲ್ಲ"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"ಒಳಬರುವ ಕರೆ ಅಧಿಸೂಚನೆ"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"ಒಳಬರುವ ಕರೆ"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"ಮಿಸ್ಡ್ ಕಾಲ್ ಅಧಿಸೂಚನೆ"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"ಸಂಪರ್ಕದ ಕ್ರಮ"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"ಮೊದಲ ಹೆಸರು"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"ಕೊನೆಯ ಹೆಸರು"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"ಇದಕ್ಕೆ ಕರೆಯ ಆಡಿಯೊ ಔಟ್‌ಪುಟ್:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index 4bedbb55..432df79b 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"전화번호 선택"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"한 번만"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"항상"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - 기본값"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - 즐겨찾기"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>, 기본값"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"즐겨찾는 연락처 - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"즐겨찾는 근처 장소 - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"즐겨찾는 연락처"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"즐겨찾는 근처 장소"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"전화번호가 없습니다."</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"수신 전화 알림"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"수신 전화"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"부재중 전화 알림림"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"연락처 순서"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"이름"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"성"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"다음으로 통화 오디오 출력:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index 6221745f..440d30f4 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -25,8 +25,8 @@
<string name="emergency_button_text" msgid="3467659545392931727">"Тез жардам"</string>
<string name="emergency_call_description" msgid="6700161437750325693">"Шашылыш чалуу"</string>
<string name="error_contact_deleted" msgid="6356539067659368396">"Бул байланыш өчүрүлгөн болушу керек."</string>
- <string name="error_invalid_phone_number" msgid="5349049631580646136">"Бул телефон номери терилбей жатат. Аны текшерип, кайра аракет кылыңыз."</string>
- <string name="error_telephony_not_available" msgid="8715829862083386178">"Телефонго чалуу мүмкүн эмес. Кийинчерээк кайталаңыз."</string>
+ <string name="error_invalid_phone_number" msgid="5349049631580646136">"Бул телефон номери терилбей жатат. Аны текшерип, кайталап көрүңүз."</string>
+ <string name="error_telephony_not_available" msgid="8715829862083386178">"Телефонго чалуу мүмкүн эмес. Бир аздан кийин кайталап көрүңүз."</string>
<string name="decline_call" msgid="2505987200485272226">"Баш тартуу"</string>
<string name="answer_call" msgid="3272474440561548115">"Жооп берүү"</string>
<string name="call_back" msgid="5745638356098600872">"Кайра чалуу"</string>
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Телефон номерин тандоо"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Бир жолу гана"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Ар дайым"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - Демейки"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - Сүйүктүүлөргө кошуу"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , демейки"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Сүйүктүү - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Жергиликтүү сүйүктүү номер - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Сүйүктүүлөр"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Жергиликтүү сүйүктүү номер"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Телефон номерлери жок"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Кириш чалуу билдирмеси"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Кирүүчү чалуу"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Жооп берилбеген чалуу жөнүндө билдирүү"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Байланыштын ирети"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Аты"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Фамилиясы"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Төмөнкүгө телефон чалуу:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 64691e9f..f5cf23ec 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"ເລືອກເບີໂທລະສັບ"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"ຄັ້ງດຽວ"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"ທຸກເທື່ອ"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - ຄ່າເລີ່ມຕົ້ນ"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - ລາຍການທີ່ມັກ"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , ຄ່າເລີ່ມຕົ້ນ"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"ເບີຍອດນິຍົມ - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"ເບີຍອດນິຍົມໃນທ້ອງຖິ່ນ - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"ເບີຍອດນິຍົມ"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"ເບີຍອດນິຍົມໃນທ້ອງຖິ່ນ"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"ບໍ່ມີເບີໂທລະສັບ"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"ການແຈ້ງເຕືອນສາຍໂທເຂົ້າ"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"ສາຍໂທເຂົ້າ"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"ການແຈ້ງເຕືອນສາຍບໍ່ໄດ້ຮັບ"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"ລຳດັບລາຍຊື່ຜູ້ຕິດຕໍ່"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"ຊື່"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"ນາມສະກຸນ"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"ປັບສຽງໂທອອກໄປທີ່:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 73d2fa6f..3fba4666 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Pasirinkite telefono numerį"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Tik kartą"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Visada"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – numatytasis"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"„<xliff:g id="LABEL">%1$s</xliff:g>“ – įtraukti į mėgstamiausius"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>, numatytasis"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Mėgstamiausias – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Vietinis mėgstamiausias – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Mėgstamiausi"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Vietiniai mėgstamiausi"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Nėra jokių telefono numerių"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Pranešimas apie gaunamąjį skambutį"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Gaunamasis skambutis"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Praleisto skambučio pranešimas"</string>
@@ -70,4 +74,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Kontaktų rūšiavimo tvarka"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Vardas"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Pavardė"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Skambučio garso išvestis į:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index fdbafef7..3c7e3338 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Tālruņa numura izvēle"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Tikai vienreiz"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Vienmēr"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> — noklusējums"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> — izlase"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> (noklusējums)"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Izlase — <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Izlase (vietējais) — <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Izlase"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Izlase (vietējie)"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Nav neviena tālruņa numura"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Paziņojums par ienākošu zvanu"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Ienākošais zvans"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Paziņojums par neatbildētu zvanu"</string>
@@ -69,4 +73,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Kontaktpersonu secība"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Vārds"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Uzvārds"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Zvana audio izeja:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index d1cb2dd4..7a0e0918 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Изберете телефонски број"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Само еднаш"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Секогаш"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - Стандарден"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - омилен"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>, стандарден"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Омилен - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Локални фаворити - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Омилени"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Локални фаворити"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Нема телефонски броеви"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Известување за дојдовен време"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Дојдовен повик"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Известување за пропуштен повик"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Подредување контакти"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Име"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Презиме"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Аудиото на повикот да се слуша на:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index e5812c29..7243f903 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"ഫോൺ നമ്പർ തിരഞ്ഞെടുക്കുക"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"ഒരിക്കൽ മാത്രം"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"എപ്പോഴും"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - ഡിഫോൾട്ട്"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - പ്രിയപ്പെട്ടത്"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , ഡിഫോൾട്ട്"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"പ്രിയപ്പെട്ടത് - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"പ്രാദേശികമായി പ്രിയപ്പെട്ടത് - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"പ്രിയപ്പെട്ടവ"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"പ്രാദേശികമായി പ്രിയപ്പെട്ടവ"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"ഫോൺ നമ്പറുകളൊന്നുമില്ല"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"ഇൻകമിംഗ് കോൾ അറിയിപ്പ്"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"ഇന്‍‌കമിംഗ് കോള്‍"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"മിസ്‌ഡ് കോൾ അറിയിപ്പ്"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"കോൺടാക്റ്റ് ഓർഡർ"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"ഫസ്റ്റ് നെയിം"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"ലാസ്റ്റ് നെയിം"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"ഇനിപ്പറയുന്നതിലേക്ക് കോൾ ഓഡിയോ ഔട്ട്പുട്ട് ചെയ്യുക:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index c05b6e50..c22eef92 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Утасны дугаар сонгоно уу"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Нэг удаа"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Байнга"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - Өгөгдмөл"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - Дуртай"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , өгөгдмөл"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Дуртай - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Дотоодын дуртай - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Дуртай"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Дотоодын дуртай дугаарууд"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Утасны дугаарууд алга"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Ирсэн дуудлагын мэдэгдэл"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Ирсэн дуудлага"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Аваагүй дуудлагын мэдэгдэл"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Харилцагчийн захиалга"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Нэр"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Овог"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Дуудлагын аудио гаралтын чиглэл:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index 80d225ed..a86ebf99 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"फोन नंबर निवडा"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"फक्त एकदा"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"नेहमी"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - डीफॉल्ट"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - आवडते"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , डीफॉल्ट"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"आवडते - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"स्थानिक आवडते - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"आवडते"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"स्थानिक आवडी"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"कोणतेही फोन नंबर नाहीत"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"येणाऱ्या कॉलची सूचना"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"येणारा कॉल"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"मिस्ड कॉलची सूचना"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"संपर्क क्रम"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"नाव"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"आडनाव"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"आउटपुट कॉल ऑडिओ यावर पाठवा:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 8c5bea5b..e2945639 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Pilih nombor telefon"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Hanya sekali"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Sentiasa"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - Lalai"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - Kegemaran"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , lalai"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Kegemaran - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Kegemaran tempatan - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Kegemaran"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Kegemaran tempatan"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Tiada nombor telefon"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Pemberitahuan panggilan masuk"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Panggilan masuk"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Pemberitahuan panggilan terlepas"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Tertib kenalan"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Nama pertama"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Nama keluarga"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Outputkan audio panggilan ke:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index 31adf1d5..5edde917 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"ဖုန်းနံပါတ် ရွေးချယ်ပါ"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"တစ်ကြိမ်သာ"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"အမြဲတမ်း"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - မူရင်း"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - အနှစ်သက်ဆုံး"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> ၊ မူရင်း"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"အကြိုက်ဆုံး - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"ဒေသတွင်း အကြိုက်ဆုံး - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"အကြိုက်ဆုံးများ"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"ဒေသတွင်း အကြိုက်ဆုံး"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"ဖုန်းနံပါတ် မရှိပါ"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"အဝင်ခေါ်ဆိုမှု အကြောင်းကြားချက်"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"အဝင်ခေါ်ဆိုမှု"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"လွတ်သွားသော ခေါ်ဆိုမှု အကြောင်းကြားချက်"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"အဆက်အသွယ် အစီအစဉ်"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"ရှေ့အမည်"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"နောက်အမည်"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"ဖုန်းခေါ်ဆိုမှု အသံ ထုတ်ရန်နေရာ-"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 16a5b696..92992f2d 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Velg et telefonnummer"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Bare én gang"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Alltid"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – Standard"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – Favoritt"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>, standard"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Favoritt – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Lokal favoritt – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Favoritter"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Lokale favoritter"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Ingen telefonnumre"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Varsel om innkommende anrop"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Innkommende anrop"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Varsel om tapt anrop"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Kontaktrekkefølge"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Fornavn"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Etternavn"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Send samtalelyd til:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 0a38f0aa..e65611c6 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"फोन नम्बर छनौट गर्नुहोस्"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"एक पटक मात्र"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"सधैँ"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - पूर्वनिर्धारित"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - मन पर्ने कुराको सूचीमा सार्नु…"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , पूर्वनिर्धारित फोन नम्बर"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"मन पर्ने नम्बर - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"स्थानीय मन पर्ने नम्बर - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"मन पर्ने नम्बरहरू"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"स्थानीय मन पर्ने नम्बरहरू"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"कुनै पनि फोन नम्बर छैन"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"आगमन कलसम्बन्धी सूचना"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"आगमन कल"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"छुटेको कलसम्बन्धी सूचना"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"सम्पर्क ठेगानाको क्रम"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"नाम"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"थर"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"निम्न यन्त्रबाट कलको अडियो सुन्नुहोस्:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 53f20a6c..d773675d 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Een telefoonnummer kiezen"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Eén keer"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Altijd"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - Standaard"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - favoriet"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>, standaard"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Favoriet - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Lokale favoriet - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Favorieten"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Lokale favorieten"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Geen telefoonnummers"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Melding over inkomend gesprek"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Inkomend gesprek"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Melding voor gemist gesprek"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Contactvolgorde"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Voornaam"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Achternaam"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Gespreksaudio uitvoeren naar:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 159d4942..f4e3b0c1 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"ଏକ ଫୋନ୍ ନମ୍ବର ବାଛନ୍ତୁ"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"ଥରେ ମାତ୍ର"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"ସର୍ବଦା"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - ଡିଫଲ୍ଟ"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - ପସନ୍ଦ"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , ଡିଫଲ୍ଟ"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"ପସନ୍ଦ - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"ସ୍ଥାନୀୟ ପସନ୍ଦ - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"ପସନ୍ଦଗୁଡ଼ିକ"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"ସ୍ଥାନୀୟ ପସନ୍ଦଗୁଡ଼ିକ"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"କୌଣସି ଫୋନ୍ ନମ୍ବର ନାହିଁ"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"ଇନ୍‌କମିଙ୍ଗ୍ କଲ୍ ବିଜ୍ଞପ୍ତି"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"ଇନ୍‌କମିଂ କଲ୍"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"ମିସ୍ଡ କଲ୍ ବିଜ୍ଞପ୍ତି"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"ଯୋଗାଯୋଗ କ୍ରମରେ ସଜାନ୍ତୁ"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"ପ୍ରଥମ ନାମ"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"ଶେଷ ନାମ"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"ଆଉଟପୁଟ୍ କଲ୍‌ ଏଠାରୁ ଶୁଣାଯିବ:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index 9513e6ca..7f174782 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"ਇੱਕ ਫ਼ੋਨ ਨੰਬਰ ਚੁਣੋ"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"ਬੱਸ ਇੱਕ ਵਾਰ"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"ਹਮੇਸ਼ਾਂ"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - ਪੂਰਵ-ਨਿਰਧਾਰਤ"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - ਮਨਪਸੰਦ"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , ਪੂਰਵ-ਨਿਰਧਾਰਤ"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"ਮਨਪਸੰਦ - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"ਸਥਾਨਕ ਮਨਪਸੰਦ - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"ਮਨਪਸੰਦ"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"ਸਥਾਨਕ ਮਨਪਸੰਦ"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"ਕੋਈ ਫ਼ੋਨ ਨੰਬਰ ਨਹੀਂ"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"ਇਨਕਮਿੰਗ ਕਾਲ ਦੀ ਸੂਚਨਾ"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"ਇਨਕਮਿੰਗ ਕਾਲ"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"ਮਿਸ ਕਾਲ ਦੀ ਸੂਚਨਾ"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"ਸੰਪਰਕ ਕ੍ਰਮ"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"ਨਾਮ ਦਾ ਪਹਿਲਾ ਭਾਗ"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"ਨਾਮ ਦਾ ਆਖਰੀ ਭਾਗ"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"ਇਸ \'ਤੇ ਆਊਟਪੁੱਟ ਕਾਲ ਆਡੀਓ:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index a3165692..14096de0 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Wybierz numer telefonu"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Tylko raz"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Zawsze"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – numer domyślny"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – dodaj do ulubionych"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>, domyślny"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Ulubiony – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Ulubione miejsce – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Ulubione"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Ulubione miejsca"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Brak numerów telefonu"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Powiadomienie o połączeniu przychodzącym"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Połączenie przychodzące"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Powiadomienie o nieodebranym połączeniu"</string>
@@ -70,4 +74,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Kolejność kontaktów"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Imię"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Nazwisko"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Odtwórz dźwięk połączenia na:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-port/dimens.xml b/res/values-port/dimens.xml
index cdb70cfc..5318d568 100644
--- a/res/values-port/dimens.xml
+++ b/res/values-port/dimens.xml
@@ -22,4 +22,5 @@
<dimen name="keypad_margin">@*android:dimen/car_padding_4</dimen>
<dimen name="dialpad_info_title_text_size_max">36sp</dimen>
+ <dimen name="dialpad_info_margin_start">154dp</dimen>
</resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index d780ac10..326bb10e 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -41,9 +41,9 @@
<string name="call_log_header_today" msgid="2069013936632793214">"Hoje"</string>
<string name="call_log_header_yesterday" msgid="4613686845163357847">"Ontem"</string>
<string name="call_log_header_older" msgid="3971634717537073179">"Mais antigas"</string>
- <string name="call_logs_empty" msgid="3084720078894119049">"Não existem recentes."</string>
+ <string name="call_logs_empty" msgid="3084720078894119049">"Não existem contactos recentes."</string>
<string name="contact_list_empty" msgid="4225504548491888138">"Não existem contactos."</string>
- <string name="available_after_sync" msgid="33765918799197782">"Disponível após a sincronização. Certifique-se de que permitiu a partilha de contactos no seu telemóvel."</string>
+ <string name="available_after_sync" msgid="33765918799197782">"Disponíveis após a sincronização. Certifique-se de que permitiu a partilha de contactos no seu telemóvel."</string>
<string name="favorites_empty" msgid="5794510741132758130">"Não existem favoritos."</string>
<string name="no_favorites_added" msgid="2359050103464783907">"Ainda não adicionou nenhum favorito."</string>
<string name="add_favorite_button" msgid="7914955940249767808">"Adicionar um favorito"</string>
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Escolha um número de telefone"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Apenas uma vez"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Sempre"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – Predefinição"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – favorito"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>, predefinição"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Adicionar aos favoritos – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Favorito local – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Favoritos"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Favoritos locais"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Nenhum número de telefone."</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Notificação de chamada recebida"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Chamada recebida"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Notificação de chamada não atendida"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Ordem dos contactos"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Nome próprio"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Apelido"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Áudio da chamada de saída para:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index f41543ab..bef5673a 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Escolha um número de telefone"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Só uma vez"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Sempre"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - Padrão"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> (favorito)"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>, padrão"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Favorito: <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Favorito local: <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Favoritos"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Favoritos locais"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Nenhum número de telefone disponível"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Notificação de chamada recebida"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Chamada recebida"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Notificação de chamada perdida"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Ordem dos contatos"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Nome"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Sobrenome"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Saída de áudio da chamada:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 064a721f..0140dcab 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Alegeți un număr de telefon"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Numai o dată"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Mereu"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – prestabilit"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – Preferat"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>, prestabilit"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Preferat – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Preferat local – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Preferate"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Preferat local"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Niciun număr de telefon"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Notificare de apel primit"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Apel primit"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Notificare privind apelul nepreluat"</string>
@@ -69,4 +73,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Ordinea persoanelor de contact"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Prenume"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Nume"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Transmiteți conținutul audio al apelurilor către:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index ca2763d8..301bd9b8 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -43,7 +43,7 @@
<string name="call_log_header_older" msgid="3971634717537073179">"Раньше"</string>
<string name="call_logs_empty" msgid="3084720078894119049">"Нет недавних"</string>
<string name="contact_list_empty" msgid="4225504548491888138">"Нет контактов"</string>
- <string name="available_after_sync" msgid="33765918799197782">"Будет доступно после синхронизации. Убедитесь, что вы разрешили доступ к списку контактов на телефоне."</string>
+ <string name="available_after_sync" msgid="33765918799197782">"Данные будут доступны после синхронизации. Убедитесь, что вы разрешили доступ к списку контактов на телефоне."</string>
<string name="favorites_empty" msgid="5794510741132758130">"Здесь пока ничего нет"</string>
<string name="no_favorites_added" msgid="2359050103464783907">"У вас пока нет избранных контактов"</string>
<string name="add_favorite_button" msgid="7914955940249767808">"Настроить быстрый набор"</string>
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Выберите номер телефона"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Только сейчас"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Всегда"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – по умолчанию"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> (в избранном)"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"По умолчанию: <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Избранный контакт: <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Избранное на этом устройстве: <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Избранные контакты"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Избранные на этом устройстве"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Номера телефонов не указаны."</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Уведомление при входящем вызове"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Входящий вызов"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Уведомление о пропущенном вызове"</string>
@@ -70,4 +74,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Порядок контактов"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Имя"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"По фамилии"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Вывод звука для вызова:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index 211f1fe2..1a245545 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"දුරකථන අංකයක් තෝරා ගන්න"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"එක් වරක්"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"සැමවිටම"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - පෙරනිමි"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - ප්‍රියතමය"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , පෙරනිමි"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"ප්‍රියතම - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"ප්‍රදේශයේ ජනප්‍රිය - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"ප්‍රියතම"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"ප්‍රදේශයේ ජනප්‍රියතම ඒවා"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"දුරකථන අංක නැත"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"එන ඇමතුම් දැනුම්දීම"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"එන ඇමතුම"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"මඟ හැරුණු ඇමතුම් දැනුම්දීම"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"සම්බන්ධතා අනුපිළිවෙළ"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"පළමු නම"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"අග නම"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"ඇමතුම් ශ්‍රව්‍ය ප්‍රතිදානය කරන්නේ:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index d9375de2..78e9edd3 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Vyberte telefónne číslo"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Len raz"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Vždy"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – predvolené"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – zaradiť medzi obľúbené"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>, predvolené"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Favorit – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Miestni favorit – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Favoriti"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Miestni favoriti"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Žiadne telefónne čísla"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Upozornenie na prichádzajúci hovor"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Prichádzajúci hovor"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Upozornenie na zmeškaný hovor"</string>
@@ -70,4 +74,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Poradie kontaktov"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Krstné meno"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Priezvisko"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Smerovanie zvuku odchádzajúceho hovoru:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 76945bef..d50b936c 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Izberite telefonsko številko"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Samo enkrat"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Vedno"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – privzeto"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – Priljubljena"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>, privzeta"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Priljubljena – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Lokalna priljubljena – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Priljubljene"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Lokalne priljubljene"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Ni telefonskih številk"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Obvestilo o dohodnem klicu"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Dohodni klic"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Obvestilo o neodgovorjenem klicu"</string>
@@ -70,4 +74,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Vrstni red stikov"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Ime"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Priimek"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Izberite izhod za zvok klica:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index acebdfdf..b86b25fb 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Zgjidh një numër telefoni"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Vetëm një herë"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Gjithmonë"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - parazgjedhja"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - E preferuar"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , i parazgjedhur"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"I preferuar - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"I preferuar lokal - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Të preferuarit"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Të preferuarit lokalë"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Nuk ka numër telefoni"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Njoftimi i telefonatës hyrëse"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Telefonatë hyrëse"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Njoftimi i telefonatës së humbur"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Renditja e kontakteve"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Emri"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Mbiemri"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Dërgoje audion e telefonatës te:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index cb5f26c1..ab6be72e 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Одаберите број телефона"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Само једном"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Увек"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – подразумевано"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – Омиљено"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>, подразумевано"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Фаворит – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Локални фаворит – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Фаворити"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Локални фаворити"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Нема бројева телефона"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Обавештење о долазном позиву"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Долазни позив"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Обавештење о пропуштеном позиву"</string>
@@ -69,4 +73,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Редослед контаката"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Име"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Презиме"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Изаберите излаз за звук позива:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 2960fe1d..98867368 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Välj ett telefonnummer"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Bara en gång"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Alltid"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – standard"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – markera som favorit"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>, standardinställning"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Favorit – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Lokal favorit – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Favoriter"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Lokala favoriter"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Inga telefonnummer"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Avisering om inkommande samtal"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Inkommande samtal"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Avisering om missat samtal"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Kontaktordning"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Förnamn"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Efternamn"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Använd följande utgång för samtalsljud:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index ebf8dcc9..e7e6a7f9 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Chagua nambari ya simu"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Mara moja tu"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Kila wakati"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - Chaguomsingi"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - Kipendwa"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>, chaguomsingi"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Kipendwa - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Kivutio kilicho karibu - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Vipendwa"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Vivutio vilivyo karibu"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Hakuna nambari za simu"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Arifa ya simu inayoingia"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Simu inayoingia"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Arifa ya simu ambayo hukujibu"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Mpangilio wa anwani"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Jina la kwanza"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Jina la mwisho"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Toa sauti ya simu kwenye:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index a8e122eb..21766a94 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"மொபைல் எண்ணைத் தேர்ந்தெடுக்கவும்"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"இப்போது மட்டும்"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"எப்போதும்"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - இயல்பு"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - பிடித்தது"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , இயல்பு"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"பிடித்த எண் - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"அறிமுகமானவரில் பிடித்த எண் - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"பிடித்த எண்கள்"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"அறிமுகமானவரில் பிடித்த எண்கள்"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"மொபைல் எண்கள் இல்லை"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"உள்வரும் அழைப்புக்கான அறிவிப்பு"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"உள்வரும் அழைப்பு"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"தவறிய அழைப்புக்கான அறிவிப்பு"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"தொடர்புகளின் வரிசை"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"பெயரின் முற்பகுதி"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"பெயரின் பிற்பகுதி"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"அழைப்பின் ஆடியோவை இதில் வெளியீடு செய்:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 022e4165..5a432b35 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"ఒక ఫోన్ నంబర్‌ను ఎంచుకోండి"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"కేవలం ఒకసారి"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"ఎల్లప్పుడూ"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - డిఫాల్ట్"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - ఇష్టమైనది"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , డిఫాల్ట్"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"ఇష్టమైనది - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"స్థానికుల ఆదరణ పొందింది - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"ఇష్టమైనవి"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"స్థానికంగా ఇష్టమైనవి"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"ఫోన్ నంబర్‌లు లేవు"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"ఇన్‌కమింగ్ కాల్ నోటిఫికేషన్"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"ఇన్‌కమింగ్ కాల్"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"సమాధానమివ్వని కాల్ నోటిఫికేషన్"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"పరిచయాల క్రమం"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"మొదటి పేరు"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"చివరి పేరు"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"దీనికి అవుట్‌పుట్ కాల్ ఆడియో:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 0bf0674b..52905df9 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"เลือกหมายเลขโทรศัพท์"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"เฉพาะครั้งนี้"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"ทุกครั้ง"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - ค่าเริ่มต้น"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - รายการโปรด"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> ค่าเริ่มต้น"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"หมายเลขโปรด - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"ยอดนิยมในท้องถิ่น - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"หมายเลขโปรด"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"ยอดนิยมในท้องถิ่น"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"ไม่มีหมายเลขโทรศัพท์"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"การแจ้งเตือนสายเรียกเข้า"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"สายเรียกเข้า"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"การแจ้งเตือนสายที่ไม่ได้รับ"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"ลำดับรายชื่อติดต่อ"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"ชื่อ"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"นามสกุล"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"เอาต์พุตเสียงโทรศัพท์ไปที่:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index a3c3f0f4..a293a9bc 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Pumili ng numero ng telepono"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Isang beses lang"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Palagi"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - Default"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - Paborito"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , default"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Paborito - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Lokal na paborito - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Mga Paborito"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Mga lokal na paborito"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Walang numero ng telepono"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Notification ng papasok na tawag"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Papasok na tawag"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Notification ng hindi nasagot na tawag"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Pagkakasunud-sunod ng contact"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Pangalan"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Apelyido"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Gamiting output ng audio ng tawag ang:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 898af43d..a341b67b 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Telefon numarası seçin"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Yalnızca bir defa"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Her zaman"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - Varsayılan"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - Favori"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , varsayılan"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Favori - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Yerel favori - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Favoriler"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Yerel favoriler"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Telefon numarası yok"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Gelen arama bildirimi"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Gelen arama"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Cevapsız arama bildirimi"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Kişi sırası"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Ad"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Soyadı"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Çağrı sesini şuraya ver:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index aa45451b..5ca58c17 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Виберіть номер телефону"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Лише цього разу"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Завжди"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> (за умовчанням)"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – вибране"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> (за умовчанням)"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Вибраний номер: <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Вибраний місцевий номер: <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Вибрані номери"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Вибрані місцеві номери"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Немає номерів телефонів"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Сповіщення про вхідні виклики"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Вхідний виклик"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Сповіщення про пропущений виклик"</string>
@@ -70,4 +74,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Порядок відображення"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Ім\'я"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Прізвище"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Куди виводити звук виклику:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index 71b12133..c7fd8611 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"کوئی فون نمبر منتخب کریں"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"بس ایک بار"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"ہمیشہ"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - ڈیفالٹ"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - پسندیدہ"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> ، ڈیفالٹ"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"پسندیدہ - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"مقامی پسندیدہ - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"پسندیدگیاں"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"مقامی پسندیدگیاں"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"کوئی فون نمبر نہیں ہے"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"موصول ہونے والی کال کی اطلاع"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"موصول ہونے والی کال"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"چھوٹی ہوئی کال کی اطلاع"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"رابطہ کی ترتیب"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"پہلا نام"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"آخری نام"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"آؤٹ پٹ کال آڈیو کے ليے:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index 8d1cec3e..2cddce75 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Raqam tanlang"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Bir marta"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Har doim"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> – Standart"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - Saralangan"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , asosiy"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Saralangan – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Qurilmada saralangan – <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Saralanganlar"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Qurilmada saralanganlar"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Hech qanday telefon raqami topilmadi"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Kiruvchi chaqiruvlar uchun bildirishnoma"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Kiruvchi chaqiruv"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Javobsiz chaqiruv bildirishnomasi"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Kontaktlar tartibi"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Ismi"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Familiyalar asosida"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Chaqiruv audiosi chiqishi:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 80153699..3aafd77d 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Chọn một số điện thoại"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Chỉ một lần"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Luôn bật"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - Mặc định"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> – Số điện thoại yêu thích"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , mặc định"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Số điện thoại yêu thích - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Số của điểm đến ưa thích - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Các số điện thoại yêu thích"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Số của các điểm đến ưa thích"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Không có số điện thoại"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Thông báo khi có cuộc gọi đến"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Cuộc gọi đến"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Thông báo cuộc gọi nhỡ"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"Thứ tự danh bạ"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Tên"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Họ"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Chuyển âm thanh cuộc gọi sang:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index d497a6a6..facd8621 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"选择电话号码"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"仅此一次"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"一律允许"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - 默认"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - 收藏"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>,默认号码"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"常用号码 — <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"本地常用号码 — <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"常用号码"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"本地常用号码"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"无电话号码"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"来电通知"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"来电"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"未接电话通知"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"联系人顺序"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"名字"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"姓氏"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"将通话音频输出到:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 6b4f72dd..a46e6eb1 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"請選擇電話號碼"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"只此一次"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"一律"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - 預設"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - 加入收藏"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>,預設"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"常用號碼 - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"本地常用號碼 - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"常用號碼"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"本地常用號碼"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"沒有電話號碼"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"來電通知"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"來電"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"未接來電通知"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"聯絡人排序"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"名字"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"姓氏"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"將通話音訊輸出至:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 3f8c2282..52ecb307 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -35,7 +35,7 @@
<string name="audio_route_handset" msgid="9133081623895172144">"手機聽筒"</string>
<string name="dial_a_number" msgid="7432322177412387160">"撥號"</string>
<string name="favorites_title" msgid="4767723901530488145">"常用聯絡人"</string>
- <string name="call_history_title" msgid="7997887846276371553">"近期通話記錄"</string>
+ <string name="call_history_title" msgid="7997887846276371553">"近期通話"</string>
<string name="contacts_title" msgid="9201954388634537346">"聯絡人"</string>
<string name="dialpad_title" msgid="3746259645005208554">"撥號鍵盤"</string>
<string name="call_log_header_today" msgid="2069013936632793214">"今天"</string>
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"選擇電話號碼"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"僅限一次"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"一律允許"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - 預設"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - 加入收藏"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g>,預設"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"常用聯絡人 - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"本機常用聯絡人 - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"常用聯絡人"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"本機常用聯絡人"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"沒有可用的電話號碼"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"來電通知"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"來電"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"未接來電通知"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"聯絡人順序"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"名字"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"姓氏"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"將通話音訊輸出至:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 29c4ad62..c1f09135 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -53,8 +53,12 @@
<string name="select_number_dialog_title" msgid="5770700626013782205">"Khetha inombolo yefoni"</string>
<string name="select_number_dialog_just_once_button" msgid="1814381354393374660">"Kanye nje"</string>
<string name="select_number_dialog_always_button" msgid="6862338683635863764">"Njalo"</string>
- <string name="primary_number_description" msgid="7428950659304219592">"<xliff:g id="LABEL">%1$s</xliff:g> - Okuzenzakalelayo"</string>
- <string name="favorite_number_description" msgid="6490014728613395653">"<xliff:g id="LABEL">%1$s</xliff:g> - Intandokazi"</string>
+ <string name="primary_number_description" msgid="1211198148918329509">"<xliff:g id="LABEL">%1$s</xliff:g> , okuzenzakalelayo"</string>
+ <string name="favorite_number_description" msgid="8175362259853807385">"Intandokazi - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="local_favorite_number_description" msgid="3723823871011997275">"Intandokazi yasendaweni - <xliff:g id="LABEL">%1$s</xliff:g>"</string>
+ <string name="phone_favorites" msgid="2257447553252980575">"Izintandokazi"</string>
+ <string name="local_favorites" msgid="4954852813126882412">"Izintandokazi zasendaweni"</string>
+ <string name="no_phone_numbers" msgid="8738691115921148445">"Azikho izinombolo zefoni"</string>
<string name="in_call_notification_channel_name" msgid="1978093630512401778">"Isaziso sekholi engenayo"</string>
<string name="notification_incoming_call" msgid="1722904631804432389">"Ikholi engenayo"</string>
<string name="missed_call_notification_channel_name" msgid="1135686963409691772">"Isaziso sekholi ephuthiwe"</string>
@@ -68,4 +72,6 @@
<string name="sort_order_title" msgid="975104366728292702">"I-oda loxhumana naye"</string>
<string name="given_name_first_title" msgid="8072187841056104968">"Igama"</string>
<string name="family_name_first_title" msgid="7721976826282427987">"Isibongo"</string>
+ <string name="audio_route_dialog_title" msgid="2904553846970171054">"Khiphela umsindo wekholi kulokhu:"</string>
+ <string name="audio_route_dialog_subtitle" msgid="8780526104805330121"></string>
</resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index f1aa7b0f..49d2e522 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -18,13 +18,11 @@
<color name="phone_call">@*android:color/car_green_700</color>
<color name="phone_end_call">@*android:color/car_red_500a</color>
<color name="onhold_call_background">@*android:color/car_grey_868</color>
+ <color name="audio_output_accent">@*android:color/car_accent</color>
<!-- Dialpad page -->
<color name="call_button_outline">@*android:color/car_green_500</color>
- <!--Contact details-->
- <color name="contact_details_icon_tint">@color/primary_icon_color</color>
-
<color name="car_key2">@color/car_key2_dark</color>
<color name="car_key2_light">@*android:color/car_grey_400</color>
<color name="car_key2_dark">@*android:color/car_grey_700</color>
diff --git a/res/values/configs.xml b/res/values/configs.xml
index 03bb96ed..03e7a89f 100644
--- a/res/values/configs.xml
+++ b/res/values/configs.xml
@@ -24,8 +24,6 @@
<item name="config_background_image_alpha" format="float" type="dimen">1.0</item>
<item name="config_background_image_error_alpha" format="float" type="dimen">1.0</item>
- <bool name="config_show_detailed_user_profile_on_dialpad">false</bool>
-
<!-- A config determines whether to show divider and callog_action_button for callog items
that are not stored as contacts. "true" will show divider and button as disable state and
"false" will make divider and button invisible for non contacts. -->
@@ -48,4 +46,12 @@
<!-- Config gate the full screen incall ui -->
<bool name="config_show_fullscreen_incall_ui">true</bool>
+
+ <!-- A config determines whether to show type down list on Dialpad -->
+ <bool name="config_show_type_down_list_on_dialpad">true</bool>
+ <!-- A config determines whether to show user profile for input number only when type down is
+ not showing. This config works only when config_show_type_down_list_on_dialpad is false. -->
+ <bool name="config_show_detailed_user_profile_on_dialpad">false</bool>
+ <!-- A percent determines the size of the area for type down list on Dialpad in portrait mode. -->
+ <item name="config_type_down_guideline_percent" format="float" type="dimen">0.3</item>
</resources>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 010fca41..16d2ce11 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -17,13 +17,10 @@
<!-- Dialer -->
<dimen name="dialer_card_elevation">2dp</dimen>
- <!-- Audio route dimentions -->
- <dimen name="audio_route_height">@dimen/control_bar_height</dimen>
- <dimen name="audio_route_content_padding">@dimen/list_item_padding</dimen>
- <dimen name="audio_route_icon_size">@dimen/primary_icon_size</dimen>
+ <!-- TODO: UNUSED! REMOVE THIS. b/149125789-->
<dimen name="audio_route_constraint_guide_begin">@dimen/list_item_guideline</dimen>
- <!-- Call list dimentions -->
+ <!-- Call list dimensions -->
<dimen name="call_history_item_height">@dimen/list_item_height</dimen>
<dimen name="call_history_item_padding">@dimen/list_item_padding</dimen>
<dimen name="call_history_guideline_begin">@dimen/list_item_guideline_begin</dimen>
@@ -88,6 +85,9 @@
<dimen name="dialpad_info_title_text_size_min">24sp</dimen>
<dimen name="dialpad_contact_avatar_size">64dp</dimen>
<dimen name="dialpad_contact_label_margin">12dp</dimen>
+ <dimen name="dialpad_info_margin_end">112dp</dimen>
+ <dimen name="dialpad_info_margin_start">154dp</dimen>
+ <dimen name="type_down_list_item_height">@dimen/control_bar_height</dimen>
<!-- Keypad dimensions -->
<dimen name="keypad_minimum_size">@dimen/touch_target_size</dimen>
@@ -99,10 +99,6 @@
<dimen name="favorite_card_space_vertical">@*android:dimen/car_padding_2</dimen>
<dimen name="favorites_avatar_margin_bottom">@*android:dimen/car_padding_3</dimen>
- <!-- Add faovirte flow dimensions -->
- <dimen name="add_favorite_number_list_height">@dimen/list_item_height</dimen>
- <dimen name="add_favorite_number_list_padding">@dimen/list_item_padding</dimen>
-
<dimen name="call_fab_elevation">8dp</dimen>
<dimen name="bksp_button_width">@dimen/touch_target_size</dimen>
@@ -134,6 +130,7 @@
<dimen name="list_item_padding">@*android:dimen/car_keyline_1</dimen>
<dimen name="list_divider_inset">@*android:dimen/car_keyline_1</dimen>
<dimen name="list_divider_height">@*android:dimen/car_list_divider_height</dimen>
+ <dimen name="horizontal_divider_inset">@*android:dimen/car_padding_2</dimen>
<dimen name="vertical_divider_inset">@*android:dimen/car_padding_2</dimen>
<dimen name="vertical_divider_width">2dp</dimen>
<dimen name="primary_icon_size">@*android:dimen/car_primary_icon_size</dimen>
@@ -145,7 +142,6 @@
<dimen name="touch_target_width">156dp</dimen>
<dimen name="subheader_list_height">76dp</dimen>
<dimen name="control_bar_height">96dp</dimen>
- <dimen name="phone_number_radio_list_padding">@*android:dimen/car_padding_2</dimen>
<!-- Loading status view dimensions -->
<dimen name="loading_info_icon_size">56dp</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 0418d13f..a890cd17 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -141,14 +141,27 @@
<!-- Description for the default phone number of the contact [CHAR LIMIT=30] -->
<string name="primary_number_description">
<xliff:g id="label" example="Mobile">%1$s</xliff:g>
- " - Default"
+ ", default"
</string>
- <!-- Description for the favorite phone number in add to favorite flow [CHAR LIMIT=30] -->
+ <!-- Description for the phone favorite number in the add-to-favorite flow [CHAR LIMIT=30] -->
<string name="favorite_number_description">
+ "Favorite - "
<xliff:g id="label" example="Mobile">%1$s</xliff:g>
- " - Favorite"
</string>
+ <!-- Description for the local favorite number in the add-to-favorite flow and the contact details page [CHAR LIMIT=30] -->
+ <string name="local_favorite_number_description">
+ "Local favorite - "
+ <xliff:g id="label" example="Mobile">%1$s</xliff:g>
+ </string>
+
+ <!-- Header for phone favorite numbers [CHAR LIMIT=30] -->
+ <string name="phone_favorites">Favorites</string>
+ <!-- Header for local favorite numbers [CHAR LIMIT=30] -->
+ <string name="local_favorites">Local favorites</string>
+
+ <!-- Message in the add-to-favorite flow that no phone number available for this contact [CHAR_LIMIT=50] -->
+ <string name="no_phone_numbers">No phone numbers</string>
<!-- Heads Up Notification -->
<!-- Name of incoming call notification channel in app info [CHAR LIMIT=50] -->
@@ -192,4 +205,8 @@
<string name="given_name_first_title">First name</string>
<!-- Title of family name [CHAR LIMIT=40]-->
<string name="family_name_first_title">Last name</string>
+
+ <!-- Audio route selection dialog. Placeholder resources for overriding -->
+ <string name="audio_route_dialog_title">Output call audio to:</string>
+ <string name="audio_route_dialog_subtitle"></string>
</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index af016275..a7c24a36 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -106,7 +106,9 @@
</style>
<!-- Contact results -->
- <style name="TextAppearance.ContactResultTitle" parent="TextAppearance.Body1"/>
+ <style name="TextAppearance.ContactResultTitle" parent="TextAppearance.Body1">
+ <item name="android:textColor">@color/primary_text_selector</item>
+ </style>
<!-- Add to favorite flow dialog -->
<style name="TextAppearance.AddFavoriteNumberTitle" parent="TextAppearance.Body1">
diff --git a/res/values/themes.xml b/res/values/themes.xml
index bae1bc3d..11152f4b 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -18,6 +18,7 @@ limitations under the License.
<style name="Theme.Dialer" parent="Theme.CarUi">
<item name="android:listDivider">@drawable/list_divider</item>
<item name="android:buttonStyle">@style/Widget.Dialer.Button</item>
+ <item name="android:textDirection">locale</item>
</style>
<style name="Theme.Dialer.Telecom">
diff --git a/src/com/android/car/dialer/Constants.java b/src/com/android/car/dialer/Constants.java
index fc86af8f..1011f285 100644
--- a/src/com/android/car/dialer/Constants.java
+++ b/src/com/android/car/dialer/Constants.java
@@ -34,6 +34,8 @@ public final class Constants {
"com.android.car.dialer.EXTRA_ACTION_READ_MISSED";
/** Intent extra flag to show incoming call. */
public static final String EXTRA_SHOW_INCOMING_CALL = "show_incoming_call";
+
+ public static final String EXTRA_SHOW_DIALPAD = "show_dialpad";
}
/** Constants used by {@link androidx.core.app.JobIntentService}s. */
@@ -41,6 +43,6 @@ public final class Constants {
public static final int NOTIFICATION_SERVICE = 2019;
}
- /**See {@link android.content.res.Resources#getIdentifier(String, String, String)}*/
+ /** See {@link android.content.res.Resources#getIdentifier(String, String, String)} */
public static int INVALID_RES_ID = 0;
}
diff --git a/src/com/android/car/dialer/notification/InCallNotificationController.java b/src/com/android/car/dialer/notification/InCallNotificationController.java
index e68b35b7..624f104e 100644
--- a/src/com/android/car/dialer/notification/InCallNotificationController.java
+++ b/src/com/android/car/dialer/notification/InCallNotificationController.java
@@ -171,13 +171,13 @@ public final class InCallNotificationController {
private PendingIntent getFullscreenIntent(Call call) {
Intent intent = getIntent(NotificationService.ACTION_SHOW_FULLSCREEN_UI, call);
- return PendingIntent.getBroadcast(mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
+ return PendingIntent.getService(mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
}
private Notification.Action getAction(Call call, @StringRes int actionText,
String intentAction) {
CharSequence text = mContext.getString(actionText);
- PendingIntent intent = PendingIntent.getBroadcast(
+ PendingIntent intent = PendingIntent.getService(
mContext,
0,
getIntent(intentAction, call),
@@ -186,7 +186,7 @@ public final class InCallNotificationController {
}
private Intent getIntent(String action, Call call) {
- Intent intent = new Intent(action, null, mContext, NotificationReceiver.class);
+ Intent intent = new Intent(action, null, mContext, NotificationService.class);
intent.putExtra(NotificationService.EXTRA_CALL_ID, call.getDetails().getTelecomCallId());
return intent;
}
diff --git a/src/com/android/car/dialer/notification/MissedCallNotificationController.java b/src/com/android/car/dialer/notification/MissedCallNotificationController.java
index 5b0fd864..3de1e600 100644
--- a/src/com/android/car/dialer/notification/MissedCallNotificationController.java
+++ b/src/com/android/car/dialer/notification/MissedCallNotificationController.java
@@ -195,8 +195,8 @@ public final class MissedCallNotificationController {
private PendingIntent getDeleteIntent() {
Intent intent = new Intent(NotificationService.ACTION_READ_ALL_MISSED, null, mContext,
- NotificationReceiver.class);
- PendingIntent pendingIntent = PendingIntent.getBroadcast(
+ NotificationService.class);
+ PendingIntent pendingIntent = PendingIntent.getService(
mContext,
0,
intent,
@@ -207,7 +207,7 @@ public final class MissedCallNotificationController {
private Notification.Action getAction(String phoneNumberString, @StringRes int actionText,
String intentAction) {
CharSequence text = mContext.getString(actionText);
- PendingIntent intent = PendingIntent.getBroadcast(
+ PendingIntent intent = PendingIntent.getService(
mContext,
0,
getIntent(intentAction, phoneNumberString),
@@ -216,7 +216,7 @@ public final class MissedCallNotificationController {
}
private Intent getIntent(String action, String phoneNumberString) {
- Intent intent = new Intent(action, null, mContext, NotificationReceiver.class);
+ Intent intent = new Intent(action, null, mContext, NotificationService.class);
intent.putExtra(NotificationService.EXTRA_CALL_ID, phoneNumberString);
return intent;
}
diff --git a/src/com/android/car/dialer/notification/NotificationService.java b/src/com/android/car/dialer/notification/NotificationService.java
index f7b8a01c..54abe158 100644
--- a/src/com/android/car/dialer/notification/NotificationService.java
+++ b/src/com/android/car/dialer/notification/NotificationService.java
@@ -16,13 +16,13 @@
package com.android.car.dialer.notification;
+import android.app.Service;
import android.content.Context;
import android.content.Intent;
+import android.os.IBinder;
import android.telecom.Call;
import android.text.TextUtils;
-import androidx.core.app.JobIntentService;
-
import com.android.car.dialer.Constants;
import com.android.car.dialer.telecom.UiCallManager;
import com.android.car.dialer.ui.activecall.InCallActivity;
@@ -31,11 +31,11 @@ import com.android.car.telephony.common.TelecomUtils;
import java.util.List;
/**
- * A {@link JobIntentService} that is used to handle actions from notifications to:
+ * A {@link Service} that is used to handle actions from notifications to:
* <ul><li>answer or inject an incoming call.
* <li>call back or message to a missed call.
*/
-public class NotificationService extends JobIntentService {
+public class NotificationService extends Service {
static final String ACTION_ANSWER_CALL = "CD.ACTION_ANSWER_CALL";
static final String ACTION_DECLINE_CALL = "CD.ACTION_DECLINE_CALL";
static final String ACTION_SHOW_FULLSCREEN_UI = "CD.ACTION_SHOW_FULLSCREEN_UI";
@@ -44,21 +44,20 @@ public class NotificationService extends JobIntentService {
static final String ACTION_READ_ALL_MISSED = "CD.ACTION_READ_ALL_MISSED";
static final String EXTRA_CALL_ID = "CD.EXTRA_CALL_ID";
+ @Override
+ public IBinder onBind(Intent intent) {
+ return null;
+ }
+
/** Create an intent to handle reading all missed call action and schedule for executing. */
public static void readAllMissedCall(Context context) {
- Intent readAllMissedCallIntent = new Intent(context, NotificationReceiver.class);
+ Intent readAllMissedCallIntent = new Intent(context, NotificationService.class);
readAllMissedCallIntent.setAction(ACTION_READ_ALL_MISSED);
- enqueueWork(context, readAllMissedCallIntent);
- }
-
- /** Enqueue the intent. */
- static void enqueueWork(Context context, Intent intent) {
- enqueueWork(
- context, NotificationService.class, Constants.JobIds.NOTIFICATION_SERVICE, intent);
+ context.startService(readAllMissedCallIntent);
}
@Override
- protected void onHandleWork(Intent intent) {
+ public int onStartCommand(Intent intent, int flags, int startId) {
String action = intent.getAction();
String callId = intent.getStringExtra(EXTRA_CALL_ID);
switch (action) {
@@ -92,6 +91,8 @@ public class NotificationService extends JobIntentService {
default:
break;
}
+
+ return START_NOT_STICKY;
}
private void answerCall(String callId) {
diff --git a/src/com/android/car/dialer/telecom/InCallRouter.java b/src/com/android/car/dialer/telecom/InCallRouter.java
index 5e0376d5..4ba91e4b 100644
--- a/src/com/android/car/dialer/telecom/InCallRouter.java
+++ b/src/com/android/car/dialer/telecom/InCallRouter.java
@@ -22,6 +22,7 @@ import android.telecom.Call;
import androidx.annotation.MainThread;
+import com.android.car.dialer.Constants;
import com.android.car.dialer.R;
import com.android.car.dialer.log.L;
import com.android.car.dialer.notification.InCallNotificationController;
@@ -83,8 +84,10 @@ class InCallRouter {
int state = call.getState();
if (state == Call.STATE_RINGING) {
routeToNotification(call);
- } else {
- routeToInCallPage(call);
+ } else if (state != Call.STATE_DISCONNECTED) {
+ // Don't launch the in call page if state is disconnected.
+ // Otherwise, the InCallActivity finishes right after onCreate() and flashes.
+ routeToInCallPage(false);
}
}
@@ -134,7 +137,11 @@ class InCallRouter {
@Override
public void onStateChanged(Call call, int state) {
L.d(TAG, "Ringing call state changed to %d", state);
- routeToInCallPage(call);
+ if (call.getState() != Call.STATE_DISCONNECTED) {
+ // Don't launch the in call page if state is disconnected. Otherwise, the
+ // InCallActivity finishes right after onCreate() and flashes.
+ routeToInCallPage(false);
+ }
mInCallNotificationController.cancelInCallNotification(call);
call.unregisterCallback(this);
}
@@ -144,16 +151,14 @@ class InCallRouter {
/**
* Launches {@link InCallActivity} and presents the on going call in the in call page.
*/
- private void routeToInCallPage(Call call) {
+ void routeToInCallPage(boolean showDialpad) {
// It has been configured not to show the fullscreen incall ui.
if (!mShowFullscreenIncallUi) {
return;
}
- // Don't launch the in call page if state is disconnected. Otherwise, the InCallActivity
- // finishes right after onCreate() and flashes.
- if (call.getState() != Call.STATE_DISCONNECTED) {
- Intent launchIntent = new Intent(mContext, InCallActivity.class);
- mContext.startActivity(launchIntent);
- }
+
+ Intent launchIntent = new Intent(mContext, InCallActivity.class);
+ launchIntent.putExtra(Constants.Intents.EXTRA_SHOW_INCOMING_CALL, showDialpad);
+ mContext.startActivity(launchIntent);
}
}
diff --git a/src/com/android/car/dialer/telecom/InCallServiceImpl.java b/src/com/android/car/dialer/telecom/InCallServiceImpl.java
index a5faaf6a..d60c9d19 100644
--- a/src/com/android/car/dialer/telecom/InCallServiceImpl.java
+++ b/src/com/android/car/dialer/telecom/InCallServiceImpl.java
@@ -37,7 +37,8 @@ public class InCallServiceImpl extends InCallService {
/** An action which indicates a bind is from local component. */
public static final String ACTION_LOCAL_BIND = "local_bind";
- private CopyOnWriteArrayList<Callback> mCallbacks = new CopyOnWriteArrayList<>();
+ private CopyOnWriteArrayList<CallAudioStateCallback> mCallAudioStateCallbacks =
+ new CopyOnWriteArrayList<>();
private InCallRouter mInCallRouter;
@@ -59,6 +60,14 @@ public class InCallServiceImpl extends InCallService {
boolean onTelecomCallRemoved(Call telecomCall);
}
+ /** Listens to call audio state changes. Callbacks will be called on the main thread. */
+ public interface CallAudioStateCallback {
+ /**
+ * Called when the call audio state has changed.
+ */
+ void onCallAudioStateChanged(CallAudioState callAudioState);
+ }
+
@Override
public void onCreate() {
super.onCreate();
@@ -76,21 +85,12 @@ public class InCallServiceImpl extends InCallService {
@Override
public void onCallAdded(Call telecomCall) {
L.d(TAG, "onCallAdded: %s", telecomCall);
-
- for (Callback callback : mCallbacks) {
- callback.onTelecomCallAdded(telecomCall);
- }
-
mInCallRouter.onCallAdded(telecomCall);
}
@Override
public void onCallRemoved(Call telecomCall) {
L.d(TAG, "onCallRemoved: %s", telecomCall);
- for (Callback callback : mCallbacks) {
- callback.onTelecomCallRemoved(telecomCall);
- }
-
mInCallRouter.onCallRemoved(telecomCall);
}
@@ -113,17 +113,23 @@ public class InCallServiceImpl extends InCallService {
@Override
public void onCallAudioStateChanged(CallAudioState audioState) {
- for (Callback callback : mCallbacks) {
+ for (CallAudioStateCallback callback : mCallAudioStateCallbacks) {
callback.onCallAudioStateChanged(audioState);
}
}
- public void registerCallback(Callback callback) {
- mCallbacks.add(callback);
+ @Override
+ public void onBringToForeground(boolean showDialpad) {
+ L.d(TAG, "onBringToForeground: %s", showDialpad);
+ mInCallRouter.routeToInCallPage(showDialpad);
+ }
+
+ public void addCallAudioStateChangedCallback(CallAudioStateCallback callback) {
+ mCallAudioStateCallbacks.add(callback);
}
- public void unregisterCallback(Callback callback) {
- mCallbacks.remove(callback);
+ public void removeCallAudioStateChangedCallback(CallAudioStateCallback callback) {
+ mCallAudioStateCallbacks.remove(callback);
}
public void addActiveCallListChangedCallback(ActiveCallListChangedCallback callback) {
@@ -134,15 +140,6 @@ public class InCallServiceImpl extends InCallService {
mInCallRouter.unregisterActiveCallHandler(callback);
}
- @Deprecated
- interface Callback {
- void onTelecomCallAdded(Call telecomCall);
-
- void onTelecomCallRemoved(Call telecomCall);
-
- void onCallAudioStateChanged(CallAudioState audioState);
- }
-
/**
* Local binder only available for Car Dialer package.
*/
diff --git a/src/com/android/car/dialer/telecom/UiCallManager.java b/src/com/android/car/dialer/telecom/UiCallManager.java
index 956121cd..6822c2d5 100644
--- a/src/com/android/car/dialer/telecom/UiCallManager.java
+++ b/src/com/android/car/dialer/telecom/UiCallManager.java
@@ -42,11 +42,6 @@ import com.android.car.telephony.common.TelecomUtils;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.telephony.ITelephony;
-import com.google.i18n.phonenumbers.PhoneNumberUtil;
-import com.google.i18n.phonenumbers.PhoneNumberUtil.PhoneNumberType;
-import com.google.i18n.phonenumbers.PhoneNumberUtil.ValidationResult;
-import com.google.i18n.phonenumbers.Phonenumber;
-
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
@@ -307,24 +302,13 @@ public class UiCallManager {
}
/**
- * Runs basic validation check of a phone number, to verify it is the correct length
- * in an internationalized way. Further validation on whether the number actually exists
- * is left for the phone carrier.
+ * Runs basic validation check of a phone number, to verify it is not empty.
*/
private boolean isValidNumber(String number) {
- Phonenumber.PhoneNumber phoneNumber = TelecomUtils.createI18nPhoneNumber(mContext,
- number);
- if (phoneNumber != null) {
- for (PhoneNumberType type : PhoneNumberType.values()) {
- ValidationResult result =
- PhoneNumberUtil.getInstance().isPossibleNumberForTypeWithReason(phoneNumber,
- type);
- if (result != ValidationResult.TOO_SHORT && result != ValidationResult.TOO_LONG) {
- return true;
- }
- }
+ if (TextUtils.isEmpty(number)) {
+ return false;
}
- return false;
+ return true;
}
public void callVoicemail() {
diff --git a/src/com/android/car/dialer/ui/TelecomActivity.java b/src/com/android/car/dialer/ui/TelecomActivity.java
index 121aeb2b..50924500 100644
--- a/src/com/android/car/dialer/ui/TelecomActivity.java
+++ b/src/com/android/car/dialer/ui/TelecomActivity.java
@@ -17,6 +17,7 @@
package com.android.car.dialer.ui;
import android.app.SearchManager;
+import android.bluetooth.BluetoothDevice;
import android.content.Intent;
import android.content.SharedPreferences;
import android.graphics.drawable.Drawable;
@@ -30,7 +31,6 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
-import androidx.fragment.app.FragmentManager;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModelProviders;
@@ -69,8 +69,7 @@ import java.util.List;
* <p>Based on call and connectivity status, it will choose the right page to display.
*/
public class TelecomActivity extends FragmentActivity implements
- DialerBaseFragment.DialerFragmentParent, FragmentManager.OnBackStackChangedListener,
- Toolbar.OnHeightChangedListener {
+ DialerBaseFragment.DialerFragmentParent {
private static final String TAG = "CD.TelecomActivity";
private LiveData<String> mBluetoothErrorMsgLiveData;
private LiveData<Integer> mDialerAppStateLiveData;
@@ -78,6 +77,7 @@ public class TelecomActivity extends FragmentActivity implements
// View objects for this activity.
private TelecomPageTab.Factory mTabFactory;
private Toolbar mCarUiToolbar;
+ private BluetoothDevice mBluetoothDevice;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -87,7 +87,6 @@ public class TelecomActivity extends FragmentActivity implements
setContentView(R.layout.telecom_activity);
mCarUiToolbar = findViewById(R.id.car_ui_toolbar);
- mCarUiToolbar.registerToolbarHeightChangeListener(this);
setupTabLayout();
@@ -99,6 +98,7 @@ public class TelecomActivity extends FragmentActivity implements
dialerAppState -> updateCurrentFragment(dialerAppState));
MutableLiveData<Integer> toolbarTitleMode = viewModel.getToolbarTitleMode();
toolbarTitleMode.setValue(Themes.getAttrInteger(this, R.attr.toolbarTitleMode));
+ viewModel.getRefreshTabsLiveData().observe(this, this::refreshTabs);
InCallViewModel inCallViewModel = ViewModelProviders.of(this).get(InCallViewModel.class);
mOngoingCallListLiveData = inCallViewModel.getOngoingCallList();
@@ -108,25 +108,11 @@ public class TelecomActivity extends FragmentActivity implements
handleIntent();
}
- @Override
- public void onStart() {
- getSupportFragmentManager().addOnBackStackChangedListener(this);
- onBackStackChanged();
- super.onStart();
- L.d(TAG, "onStart");
- }
-
- @Override
- public void onStop() {
- super.onStop();
- L.d(TAG, "onStop");
- getSupportFragmentManager().removeOnBackStackChangedListener(this);
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- mCarUiToolbar.unregisterToolbarHeightChangeListener(this);
+ private void refreshTabs(boolean refreshTabs) {
+ L.v(TAG, "hfp connected device list Changes.");
+ if (refreshTabs) {
+ setupTabLayout();
+ }
}
@Override
@@ -269,6 +255,7 @@ public class TelecomActivity extends FragmentActivity implements
private void setupTabLayout() {
boolean wasContentFragmentRestored = false;
mTabFactory = new TelecomPageTab.Factory(this, getSupportFragmentManager());
+ mCarUiToolbar.clearAllTabs();
for (int i = 0; i < mTabFactory.getTabCount(); i++) {
TelecomPageTab tab = mTabFactory.createTab(getBaseContext(), i);
mCarUiToolbar.addTab(tab);
@@ -356,25 +343,6 @@ public class TelecomActivity extends FragmentActivity implements
}
@Override
- public void onBackStackChanged() {
- L.d(TAG, "onBackStackChanged");
- Fragment topFragment = getSupportFragmentManager().findFragmentById(
- R.id.content_fragment_container);
- if (topFragment instanceof DialerBaseFragment) {
- ((DialerBaseFragment) topFragment).setupToolbar(mCarUiToolbar);
- }
- }
-
- @Override
- public void onHeightChanged(int height) {
- Fragment topFragment = getSupportFragmentManager().findFragmentById(
- R.id.content_fragment_container);
- if (topFragment instanceof DialerBaseFragment) {
- ((DialerBaseFragment) topFragment).setToolbarHeight(height);
- }
- }
-
- @Override
public boolean onNavigateUp() {
if (isBackNavigationAvailable()) {
onBackPressed();
diff --git a/src/com/android/car/dialer/ui/TelecomActivityViewModel.java b/src/com/android/car/dialer/ui/TelecomActivityViewModel.java
index e28c4ce0..cd16402b 100644
--- a/src/com/android/car/dialer/ui/TelecomActivityViewModel.java
+++ b/src/com/android/car/dialer/ui/TelecomActivityViewModel.java
@@ -27,11 +27,13 @@ import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MediatorLiveData;
import androidx.lifecycle.MutableLiveData;
+import androidx.lifecycle.Transformations;
import com.android.car.dialer.R;
import com.android.car.dialer.livedata.BluetoothHfpStateLiveData;
import com.android.car.dialer.livedata.BluetoothPairListLiveData;
import com.android.car.dialer.livedata.BluetoothStateLiveData;
+import com.android.car.dialer.livedata.HfpDeviceListLiveData;
import com.android.car.dialer.log.L;
import com.android.car.dialer.telecom.UiBluetoothMonitor;
@@ -52,10 +54,13 @@ public class TelecomActivityViewModel extends AndroidViewModel {
private final Context mApplicationContext;
private final LiveData<String> mErrorStringLiveData;
private final MutableLiveData<Integer> mDialerAppStateLiveData;
+ private final LiveData<Boolean> mRefreshTabsLiveData;
private final ToolbarTitleLiveData mToolbarTitleLiveData;
private final MutableLiveData<Integer> mToolbarTitleMode;
+ private BluetoothDevice mBluetoothDevice;
+
/**
* App state indicates if bluetooth is connected or it should just show the content fragments.
*/
@@ -90,6 +95,22 @@ public class TelecomActivityViewModel extends AndroidViewModel {
}
mDialerAppStateLiveData = new DialerAppStateLiveData(mErrorStringLiveData);
+
+ HfpDeviceListLiveData hfpDeviceListLiveData = new HfpDeviceListLiveData(getApplication());
+ mRefreshTabsLiveData = Transformations.map(hfpDeviceListLiveData, (hfpDeviceList) -> {
+ if (hfpDeviceList != null && !hfpDeviceList.isEmpty()) {
+ if (!hfpDeviceList.contains(mBluetoothDevice)) {
+ mBluetoothDevice = hfpDeviceList.get(0);
+ return true;
+ }
+ } else {
+ if (mBluetoothDevice != null) {
+ mBluetoothDevice = null;
+ return true;
+ }
+ }
+ return false;
+ });
}
/**
@@ -108,6 +129,9 @@ public class TelecomActivityViewModel extends AndroidViewModel {
return mToolbarTitleMode;
}
+ /**
+ * Returns the state of Dialer App.
+ */
public MutableLiveData<Integer> getDialerAppState() {
return mDialerAppStateLiveData;
}
@@ -120,6 +144,13 @@ public class TelecomActivityViewModel extends AndroidViewModel {
return mErrorStringLiveData;
}
+ /**
+ * Returns the live data which monitors whether to refresh Dialer.
+ */
+ public LiveData<Boolean> getRefreshTabsLiveData() {
+ return mRefreshTabsLiveData;
+ }
+
private static class DialerAppStateLiveData extends MediatorLiveData<Integer> {
private final LiveData<String> mErrorStringLiveData;
@@ -203,16 +234,16 @@ public class TelecomActivityViewModel extends AndroidViewModel {
isBluetoothEnabled,
hasPairedDevices,
isHfpConnected);
- if (!isBluetoothEnabled) {
+ if (isHfpConnected) {
+ if (!NO_BT_ERROR.equals(getValue())) {
+ setValue(NO_BT_ERROR);
+ }
+ } else if (!isBluetoothEnabled) {
setValue(mContext.getString(R.string.bluetooth_disabled));
} else if (!hasPairedDevices) {
setValue(mContext.getString(R.string.bluetooth_unpaired));
- } else if (!isHfpConnected) {
- setValue(mContext.getString(R.string.no_hfp));
} else {
- if (!NO_BT_ERROR.equals(getValue())) {
- setValue(NO_BT_ERROR);
- }
+ setValue(mContext.getString(R.string.no_hfp));
}
}
diff --git a/src/com/android/car/dialer/ui/activecall/InCallActivity.java b/src/com/android/car/dialer/ui/activecall/InCallActivity.java
index 015dc085..af438a18 100644
--- a/src/com/android/car/dialer/ui/activecall/InCallActivity.java
+++ b/src/com/android/car/dialer/ui/activecall/InCallActivity.java
@@ -41,6 +41,7 @@ public class InCallActivity extends FragmentActivity {
private Fragment mOngoingCallFragment;
private Fragment mIncomingCallFragment;
+ private InCallViewModel mInCallViewModel;
private MutableLiveData<Boolean> mShowIncomingCall;
private LiveData<Call> mIncomingCallLiveData;
@@ -56,12 +57,12 @@ public class InCallActivity extends FragmentActivity {
mIncomingCallFragment = getSupportFragmentManager().findFragmentById(
R.id.incoming_call_fragment);
- mShowIncomingCall = new MutableLiveData();
- InCallViewModel inCallViewModel = ViewModelProviders.of(this).get(InCallViewModel.class);
+ mShowIncomingCall = new MutableLiveData<>();
+ mInCallViewModel = ViewModelProviders.of(this).get(InCallViewModel.class);
mIncomingCallLiveData = LiveDataFunctions.iff(mShowIncomingCall,
- inCallViewModel.getIncomingCall());
- LiveDataFunctions.pair(inCallViewModel.getOngoingCallList(), mIncomingCallLiveData).observe(
- this, this::updateVisibility);
+ mInCallViewModel.getIncomingCall());
+ LiveDataFunctions.pair(mInCallViewModel.getOngoingCallList(),
+ mIncomingCallLiveData).observe(this, this::updateVisibility);
handleIntent();
}
@@ -97,9 +98,11 @@ public class InCallActivity extends FragmentActivity {
private void handleIntent() {
Intent intent = getIntent();
- if (intent != null && getIntent().getBooleanExtra(
- Constants.Intents.EXTRA_SHOW_INCOMING_CALL, false)) {
- mShowIncomingCall.setValue(true);
+ if (intent != null) {
+ mShowIncomingCall.setValue(
+ getIntent().getBooleanExtra(Constants.Intents.EXTRA_SHOW_INCOMING_CALL, false));
+ mInCallViewModel.getDialpadOpenState().setValue(
+ getIntent().getBooleanExtra(Constants.Intents.EXTRA_SHOW_DIALPAD, false));
} else {
mShowIncomingCall.setValue(false);
}
diff --git a/src/com/android/car/dialer/ui/activecall/InCallViewModel.java b/src/com/android/car/dialer/ui/activecall/InCallViewModel.java
index 328695b5..39210fa2 100644
--- a/src/com/android/car/dialer/ui/activecall/InCallViewModel.java
+++ b/src/com/android/car/dialer/ui/activecall/InCallViewModel.java
@@ -23,6 +23,7 @@ import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
import android.telecom.Call;
+import android.telecom.CallAudioState;
import androidx.annotation.NonNull;
import androidx.core.util.Pair;
@@ -53,7 +54,7 @@ import java.util.List;
* in call page should use a different ViewModel.
*/
public class InCallViewModel extends AndroidViewModel implements
- InCallServiceImpl.ActiveCallListChangedCallback {
+ InCallServiceImpl.ActiveCallListChangedCallback, InCallServiceImpl.CallAudioStateCallback {
private static final String TAG = "CD.InCallViewModel";
private final MutableLiveData<List<Call>> mCallListLiveData;
@@ -68,6 +69,7 @@ public class InCallViewModel extends AndroidViewModel implements
private final LiveData<Call> mSecondaryCallLiveData;
private final LiveData<CallDetail> mSecondaryCallDetailLiveData;
private final LiveData<Integer> mAudioRouteLiveData;
+ private MutableLiveData<CallAudioState> mCallAudioStateLiveData;
private final MutableLiveData<Boolean> mDialpadIsOpen;
private final ShowOnholdCallLiveData mShowOnholdCall;
private LiveData<Long> mCallConnectTimeLiveData;
@@ -86,6 +88,7 @@ public class InCallViewModel extends AndroidViewModel implements
}
updateCallList();
mInCallService.addActiveCallListChangedCallback(InCallViewModel.this);
+ mInCallService.addCallAudioStateChangedCallback(InCallViewModel.this);
}
@Override
@@ -114,6 +117,7 @@ public class InCallViewModel extends AndroidViewModel implements
mIncomingCallLiveData = new MutableLiveData<>();
mOngoingCallListLiveData = new MutableLiveData<>();
+ mCallAudioStateLiveData = new MutableLiveData<>();
mCallComparator = new CallComparator();
mCallListLiveData = new MutableLiveData<List<Call>>() {
@Override
@@ -231,6 +235,13 @@ public class InCallViewModel extends AndroidViewModel implements
return mAudioRouteLiveData;
}
+ /**
+ * Returns current call audio state.
+ */
+ public MutableLiveData<CallAudioState> getCallAudioState() {
+ return mCallAudioStateLiveData;
+ }
+
/** Return the {@link MutableLiveData} for dialpad open state. */
public MutableLiveData<Boolean> getDialpadOpenState() {
return mDialpadIsOpen;
@@ -257,6 +268,12 @@ public class InCallViewModel extends AndroidViewModel implements
return false;
}
+ @Override
+ public void onCallAudioStateChanged(CallAudioState callAudioState) {
+ L.i(TAG, "onCallAudioStateChanged %s %s", callAudioState, this);
+ mCallAudioStateLiveData.setValue(callAudioState);
+ }
+
private void updateCallList() {
List<Call> callList = new ArrayList<>();
callList.addAll(mInCallService.getCalls());
@@ -271,6 +288,7 @@ public class InCallViewModel extends AndroidViewModel implements
call.unregisterCallback(mCallStateChangedCallback);
}
mInCallService.removeActiveCallListChangedCallback(this);
+ mInCallService.removeCallAudioStateChangedCallback(this);
}
mInCallService = null;
}
diff --git a/src/com/android/car/dialer/ui/activecall/OnGoingCallControllerBarFragment.java b/src/com/android/car/dialer/ui/activecall/OnGoingCallControllerBarFragment.java
index 8a822db5..cda13a45 100644
--- a/src/com/android/car/dialer/ui/activecall/OnGoingCallControllerBarFragment.java
+++ b/src/com/android/car/dialer/ui/activecall/OnGoingCallControllerBarFragment.java
@@ -17,11 +17,13 @@
package com.android.car.dialer.ui.activecall;
import android.app.AlertDialog;
-import android.content.Context;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.telecom.Call;
import android.telecom.CallAudioState;
import android.telecom.CallAudioState.CallAudioRoute;
+import android.text.SpannableString;
+import android.text.style.ForegroundColorSpan;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -36,16 +38,19 @@ import androidx.fragment.app.Fragment;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModelProviders;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
import com.android.car.apps.common.util.ViewUtils;
import com.android.car.dialer.R;
import com.android.car.dialer.log.L;
import com.android.car.dialer.telecom.UiCallManager;
+import com.android.car.ui.AlertDialogBuilder;
+import com.android.car.ui.recyclerview.CarUiContentListItem;
+import com.android.car.ui.recyclerview.CarUiListItem;
+import com.android.car.ui.recyclerview.CarUiListItemAdapter;
import com.google.common.collect.ImmutableMap;
+import java.util.ArrayList;
import java.util.List;
/** A Fragment of the bar which controls on going call. */
@@ -73,7 +78,9 @@ public class OnGoingCallControllerBarFragment extends Fragment {
.build();
private AlertDialog mAudioRouteSelectionDialog;
- private AudioRouteListAdapter mAudioRouteAdapter;
+ private List<CarUiListItem> mAudioRouteListItems;
+ private List<Integer> mAvailableRoutes;
+ private CarUiListItemAdapter mAudioRouteAdapter;
private View mMuteButton;
private View mAudioRouteView;
private ImageView mAudioRouteButton;
@@ -83,24 +90,51 @@ public class OnGoingCallControllerBarFragment extends Fragment {
private MutableLiveData<Boolean> mDialpadState;
private LiveData<List<Call>> mCallListLiveData;
private int mPrimaryCallState;
+ private int mActiveRoute;
+ private MutableLiveData<CallAudioState> mCallAudioState;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
- View dialogView = LayoutInflater.from(getContext()).inflate(
- R.layout.audio_route_switch_dialog, null, false);
- RecyclerView list = dialogView.findViewById(R.id.list);
- list.setLayoutManager(new LinearLayoutManager(getContext()));
+ mAvailableRoutes = UiCallManager.get().getSupportedAudioRoute();
+ mActiveRoute = UiCallManager.get().getAudioRoute();
- mAudioRouteSelectionDialog = new AlertDialog.Builder(getContext())
- .setView(dialogView)
- .create();
+ if (mAvailableRoutes.contains(CallAudioState.ROUTE_EARPIECE)
+ && mAvailableRoutes.contains(CallAudioState.ROUTE_WIRED_HEADSET)) {
+ // Keep either ROUTE_EARPIECE or ROUTE_WIRED_HEADSET, but not both of them.
+ mAvailableRoutes.remove(CallAudioState.ROUTE_WIRED_HEADSET);
+ }
+
+ mAudioRouteListItems = new ArrayList<>();
+ mAudioRouteAdapter = new CarUiListItemAdapter(mAudioRouteListItems);
+
+ for (Integer audioRoute : mAvailableRoutes) {
+ CarUiContentListItem item = new CarUiContentListItem(CarUiContentListItem.Action.NONE);
+ AudioRouteInfo routeInfo = getAudioRouteInfo(audioRoute);
+ Drawable drawable = getResources().getDrawable(routeInfo.mIcon, null);
+ drawable.setTintList(
+ getResources().getColorStateList(R.color.icon_accent_activatable, null));
+ item.setIcon(drawable);
+ item.setOnItemClickedListener((i) -> {
+ onSetAudioRoute(audioRoute);
+ });
+ String routeTitle = getString(routeInfo.mLabel);
+ item.setTitle(mActiveRoute == audioRoute ? withAccentColor(routeTitle) : routeTitle);
+ item.setActivated(mActiveRoute == audioRoute);
+ mAudioRouteListItems.add(item);
+ }
+
+ AlertDialogBuilder audioRouteSelectionDialogBuilder = new AlertDialogBuilder(getContext())
+ .setAdapter(mAudioRouteAdapter)
+ .setTitle(getString(R.string.audio_route_dialog_title));
+
+ String subtitle = getString(R.string.audio_route_dialog_subtitle);
+ if (!subtitle.isEmpty()) {
+ audioRouteSelectionDialogBuilder.setSubtitle(subtitle);
+ }
- List<Integer> availableRoutes = UiCallManager.get().getSupportedAudioRoute();
- int activeRoute = UiCallManager.get().getAudioRoute();
- mAudioRouteAdapter = new AudioRouteListAdapter(getContext(), availableRoutes, activeRoute);
- list.setAdapter(mAudioRouteAdapter);
+ mAudioRouteSelectionDialog = audioRouteSelectionDialogBuilder.create();
InCallViewModel inCallViewModel = ViewModelProviders.of(getActivity()).get(
InCallViewModel.class);
@@ -110,6 +144,7 @@ public class OnGoingCallControllerBarFragment extends Fragment {
inCallViewModel.getAudioRoute().observe(this, this::updateViewBasedOnAudioRoute);
mDialpadState = inCallViewModel.getDialpadOpenState();
+ mCallAudioState = inCallViewModel.getCallAudioState();
mCallListLiveData = inCallViewModel.getAllCallList();
mCallListLiveData.observe(this, v -> updatePauseButtonEnabledState());
@@ -133,6 +168,8 @@ public class OnGoingCallControllerBarFragment extends Fragment {
}
});
+ mCallAudioState.observe(this, state -> mMuteButton.setActivated(state.isMuted()));
+
View dialPadButton = fragmentView.findViewById(R.id.toggle_dialpad_button);
dialPadButton.setOnClickListener(v -> mDialpadState.setValue(!mDialpadState.getValue()));
mDialpadState.observe(this, activated -> dialPadButton.setActivated(activated));
@@ -147,7 +184,6 @@ public class OnGoingCallControllerBarFragment extends Fragment {
if (audioRoutes.size() > 1) {
mAudioRouteView.setOnClickListener((v) -> {
mAudioRouteView.setActivated(true);
- mAudioRouteAdapter.setActiveAudioRoute(UiCallManager.get().getAudioRoute());
mAudioRouteSelectionDialog.show();
});
}
@@ -179,6 +215,26 @@ public class OnGoingCallControllerBarFragment extends Fragment {
}
}
+ private void updateAudioRouteListItems() {
+ for (int i = 0; i < mAvailableRoutes.size(); i++) {
+ int audioRoute = mAvailableRoutes.get(i);
+ CarUiContentListItem item = (CarUiContentListItem) mAudioRouteListItems.get(i);
+ boolean isActiveRoute = audioRoute == mActiveRoute;
+ String routeTitle = item.getTitle().toString();
+ item.setActivated(isActiveRoute);
+ item.setTitle(isActiveRoute ? withAccentColor(routeTitle) : routeTitle);
+ }
+ mAudioRouteAdapter.notifyDataSetChanged();
+ }
+
+ private CharSequence withAccentColor(String routeTitle) {
+ ForegroundColorSpan activeRouteSpan = new ForegroundColorSpan(
+ getResources().getColor(R.color.audio_output_accent, null));
+ SpannableString spannableTitle = new SpannableString(routeTitle);
+ spannableTitle.setSpan(activeRouteSpan, 0, routeTitle.length(), 0);
+ return spannableTitle;
+ }
+
/** Set the call state and change the view for the pause button accordingly */
private void setCallState(int callState) {
L.d(TAG, "Call State: %s", callState);
@@ -224,6 +280,8 @@ public class OnGoingCallControllerBarFragment extends Fragment {
private void onSetAudioRoute(@CallAudioRoute int audioRoute) {
UiCallManager.get().setAudioRoute(audioRoute);
+ mActiveRoute = audioRoute;
+ updateAudioRouteListItems();
mAudioRouteSelectionDialog.dismiss();
}
@@ -233,6 +291,8 @@ public class OnGoingCallControllerBarFragment extends Fragment {
}
L.i(TAG, "Audio Route State: " + audioRoute);
+ mActiveRoute = audioRoute;
+ updateAudioRouteListItems();
AudioRouteInfo audioRouteInfo = getAudioRouteInfo(audioRoute);
if (mAudioRouteButton != null) {
mAudioRouteButton.setImageResource(audioRouteInfo.mIconActivatable);
@@ -274,64 +334,4 @@ public class OnGoingCallControllerBarFragment extends Fragment {
mIconActivatable = iconActivatable;
}
}
-
- private class AudioRouteListAdapter extends
- RecyclerView.Adapter<AudioRouteItemViewHolder> {
- private List<Integer> mSupportedRoutes;
- private Context mContext;
- private int mActiveAudioRoute;
-
- AudioRouteListAdapter(Context context,
- List<Integer> supportedRoutes,
- int activeAudioRoute) {
- mSupportedRoutes = supportedRoutes;
- mActiveAudioRoute = activeAudioRoute;
- mContext = context;
- if (mSupportedRoutes.contains(CallAudioState.ROUTE_EARPIECE)
- && mSupportedRoutes.contains(CallAudioState.ROUTE_WIRED_HEADSET)) {
- // Keep either ROUTE_EARPIECE or ROUTE_WIRED_HEADSET, but not both of them.
- mSupportedRoutes.remove(CallAudioState.ROUTE_WIRED_HEADSET);
- }
- }
-
- public void setActiveAudioRoute(int route) {
- if (mActiveAudioRoute != route) {
- mActiveAudioRoute = route;
- notifyDataSetChanged();
- }
- }
-
- @Override
- public AudioRouteItemViewHolder onCreateViewHolder(ViewGroup container, int position) {
- View listItemView = LayoutInflater.from(mContext).inflate(
- R.layout.audio_route_list_item, container, false);
- return new AudioRouteItemViewHolder(listItemView);
- }
-
- @Override
- public void onBindViewHolder(AudioRouteItemViewHolder viewHolder, int position) {
- int audioRoute = mSupportedRoutes.get(position);
- AudioRouteInfo routeInfo = getAudioRouteInfo(audioRoute);
- viewHolder.mBody.setText(routeInfo.mLabel);
- viewHolder.mIcon.setImageResource(routeInfo.mIcon);
- viewHolder.itemView.setActivated(audioRoute == mActiveAudioRoute);
- viewHolder.itemView.setOnClickListener((v) -> onSetAudioRoute(audioRoute));
- }
-
- @Override
- public int getItemCount() {
- return mSupportedRoutes.size();
- }
- }
-
- private static class AudioRouteItemViewHolder extends RecyclerView.ViewHolder {
- public final ImageView mIcon;
- public final TextView mBody;
-
- public AudioRouteItemViewHolder(View itemView) {
- super(itemView);
- mIcon = itemView.findViewById(R.id.icon);
- mBody = itemView.findViewById(R.id.body);
- }
- }
}
diff --git a/src/com/android/car/dialer/ui/calllog/CallHistoryFragment.java b/src/com/android/car/dialer/ui/calllog/CallHistoryFragment.java
index 26588854..6595a06d 100644
--- a/src/com/android/car/dialer/ui/calllog/CallHistoryFragment.java
+++ b/src/com/android/car/dialer/ui/calllog/CallHistoryFragment.java
@@ -42,6 +42,7 @@ public class CallHistoryFragment extends DialerListBaseFragment implements
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
// Don't recreate the adapter if we already have one, so that the list items
// will display immediately upon the view being recreated. If they're not displayed
// immediately, we won't remember our scroll position.
diff --git a/src/com/android/car/dialer/ui/calllog/CallLogViewHolder.java b/src/com/android/car/dialer/ui/calllog/CallLogViewHolder.java
index bef477b4..9ffde69a 100644
--- a/src/com/android/car/dialer/ui/calllog/CallLogViewHolder.java
+++ b/src/com/android/car/dialer/ui/calllog/CallLogViewHolder.java
@@ -31,7 +31,6 @@ import com.android.car.dialer.ui.common.entity.UiCallLog;
import com.android.car.dialer.ui.view.ContactAvatarOutputlineProvider;
import com.android.car.dialer.widget.CallTypeIconsView;
import com.android.car.telephony.common.Contact;
-import com.android.car.telephony.common.InMemoryPhoneBook;
import com.android.car.telephony.common.PhoneCallLog;
import com.android.car.telephony.common.TelecomUtils;
@@ -70,12 +69,13 @@ public class CallLogViewHolder extends RecyclerView.ViewHolder {
* Binds the view holder with relevant data.
*/
public void bind(UiCallLog uiCallLog) {
+ Contact contact = uiCallLog.getContact();
+
TelecomUtils.setContactBitmapAsync(
mAvatarView.getContext(),
mAvatarView,
- uiCallLog.getAvatarUri(),
- uiCallLog.getInitials(),
- uiCallLog.getTitle());
+ contact,
+ uiCallLog.getNumber());
mTitleView.setText(uiCallLog.getTitle());
for (PhoneCallLog.Record record : uiCallLog.getCallRecords()) {
@@ -99,7 +99,7 @@ public class CallLogViewHolder extends RecyclerView.ViewHolder {
ViewUtils.setOnClickListener(mPlaceCallView,
view -> UiCallManager.get().placeCall(uiCallLog.getNumber()));
- setUpActionButton(uiCallLog);
+ setUpActionButton(contact);
}
/**
@@ -110,12 +110,11 @@ public class CallLogViewHolder extends RecyclerView.ViewHolder {
ViewUtils.setOnClickListener(mPlaceCallView, null);
}
- private void setUpActionButton(UiCallLog uiCallLog) {
+ private void setUpActionButton(Contact contact) {
if (mActionButton == null) {
return;
}
- Contact contact = InMemoryPhoneBook.get().lookupContactEntry(uiCallLog.getNumber());
boolean forceShowActionButton = itemView.getResources().getBoolean(
R.bool.config_show_calllog_action_button_for_non_contact);
diff --git a/src/com/android/car/dialer/ui/common/ContactResultsLiveData.java b/src/com/android/car/dialer/ui/common/ContactResultsLiveData.java
new file mode 100644
index 00000000..4f82d7fe
--- /dev/null
+++ b/src/com/android/car/dialer/ui/common/ContactResultsLiveData.java
@@ -0,0 +1,208 @@
+/*
+ * Copyright (C) 2020 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.car.dialer.ui.common;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.ContactsContract;
+import android.text.TextUtils;
+
+import androidx.annotation.Nullable;
+import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MediatorLiveData;
+
+import com.android.car.dialer.livedata.SharedPreferencesLiveData;
+import com.android.car.dialer.ui.common.entity.ContactSortingInfo;
+import com.android.car.telephony.common.Contact;
+import com.android.car.telephony.common.InMemoryPhoneBook;
+import com.android.car.telephony.common.ObservableAsyncQuery;
+import com.android.car.telephony.common.QueryParam;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * Represents a list of {@link Contact} based on the search query
+ */
+public class ContactResultsLiveData extends
+ MediatorLiveData<List<ContactResultsLiveData.ContactResultListItem>> {
+ private static final String[] CONTACT_DETAILS_PROJECTION = {
+ ContactsContract.CommonDataKinds.Phone._ID,
+ ContactsContract.CommonDataKinds.Phone.LOOKUP_KEY,
+ ContactsContract.CommonDataKinds.Phone.NUMBER,
+ };
+ private final Context mContext;
+ private final SearchQueryParamProvider mSearchQueryParamProvider;
+ private final ObservableAsyncQuery mObservableAsyncQuery;
+ private final LiveData<String> mSearchQueryLiveData;
+ private final LiveData<List<Contact>> mContactListLiveData;
+ private final SharedPreferencesLiveData mSortOrderPreferenceLiveData;
+ private boolean mShowOnlyOneEntry;
+
+ /**
+ * @param searchQueryLiveData represents a list of strings that are used to query the data
+ * @param sortOrderPreferenceLiveData has the information on how to order the acquired contacts.
+ * @param showOnlyOneEntry determines whether to show only entry per contact.
+ */
+ public ContactResultsLiveData(Context context,
+ LiveData<String> searchQueryLiveData,
+ SharedPreferencesLiveData sortOrderPreferenceLiveData,
+ boolean showOnlyOneEntry) {
+ mContext = context;
+ mShowOnlyOneEntry = showOnlyOneEntry;
+ mSearchQueryParamProvider = new SearchQueryParamProvider(searchQueryLiveData);
+ mObservableAsyncQuery = new ObservableAsyncQuery(mSearchQueryParamProvider,
+ context.getContentResolver(), this::onQueryFinished);
+
+ mContactListLiveData = InMemoryPhoneBook.get().getContactsLiveData();
+ addSource(mContactListLiveData, this::onContactsChange);
+ mSearchQueryLiveData = searchQueryLiveData;
+ addSource(mSearchQueryLiveData, this::onSearchQueryChanged);
+
+ mSortOrderPreferenceLiveData = sortOrderPreferenceLiveData;
+ addSource(mSortOrderPreferenceLiveData, this::onSortOrderChanged);
+ }
+
+ /**
+ * This constructor only allows one entry per contact.
+ *
+ * @param searchQueryLiveData represents a list of strings that are used to query the data
+ * @param sortOrderPreferenceLiveData has the information on how to order the acquired contacts.
+ */
+ public ContactResultsLiveData(Context context,
+ LiveData<String> searchQueryLiveData,
+ SharedPreferencesLiveData sortOrderPreferenceLiveData) {
+ this(context, searchQueryLiveData, sortOrderPreferenceLiveData, true);
+ }
+
+ private void onContactsChange(List<Contact> contactList) {
+ if (contactList == null || contactList.isEmpty()) {
+ mObservableAsyncQuery.stopQuery();
+ setValue(Collections.emptyList());
+ } else {
+ onSearchQueryChanged(mSearchQueryLiveData.getValue());
+ }
+ }
+
+ private void onSearchQueryChanged(String searchQuery) {
+ if (TextUtils.isEmpty(searchQuery)) {
+ mObservableAsyncQuery.stopQuery();
+ setValue(Collections.emptyList());
+ } else {
+ mObservableAsyncQuery.startQuery();
+ }
+ }
+
+ private void onSortOrderChanged(SharedPreferences unusedSharedPreferences) {
+ setValue(getValue());
+ }
+
+ private void onQueryFinished(@Nullable Cursor cursor) {
+ if (cursor == null) {
+ setValue(Collections.emptyList());
+ return;
+ }
+
+ List<ContactResultListItem> contactResults = new ArrayList<>();
+ while (cursor.moveToNext()) {
+ int lookupKeyColIdx = cursor.getColumnIndex(
+ ContactsContract.CommonDataKinds.Phone.LOOKUP_KEY);
+ int numberIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
+ String lookupKey = cursor.getString(lookupKeyColIdx);
+ String number = cursor.getString(numberIdx);
+ List<Contact> lookupResults = InMemoryPhoneBook.get().lookupContactByKey(lookupKey);
+ for (Contact contact : lookupResults) {
+ contactResults.add(new ContactResultListItem(contact, number));
+ }
+ }
+
+ if (mShowOnlyOneEntry) {
+ Set<Contact> set = new HashSet<>();
+ contactResults = contactResults.stream()
+ .filter(o -> set.add(o.getContact()))
+ .collect(Collectors.toList());
+ }
+
+ setValue(contactResults);
+ cursor.close();
+ }
+
+ /**
+ * Sort and replace null list with empty list.
+ */
+ @Override
+ public void setValue(List<ContactResultListItem> contactResults) {
+ if (contactResults != null && !contactResults.isEmpty()) {
+ Collections.sort(contactResults, (o1, o2) -> ContactSortingInfo.getSortingInfo(
+ mContext, mSortOrderPreferenceLiveData).first.compare(o1.mContact,
+ o2.mContact));
+ }
+ super.setValue(contactResults == null ? Collections.EMPTY_LIST : contactResults);
+ }
+
+ private static class SearchQueryParamProvider implements QueryParam.Provider {
+ private final LiveData<String> mSearchQueryLiveData;
+
+ private SearchQueryParamProvider(LiveData<String> searchQueryLiveData) {
+ mSearchQueryLiveData = searchQueryLiveData;
+ }
+
+ @Nullable
+ @Override
+ public QueryParam getQueryParam() {
+ Uri lookupUri = Uri.withAppendedPath(
+ ContactsContract.CommonDataKinds.Phone.CONTENT_FILTER_URI,
+ Uri.encode(mSearchQueryLiveData.getValue()));
+ return new QueryParam(lookupUri, CONTACT_DETAILS_PROJECTION, null,
+ /* selectionArgs= */null, /* orderBy= */null);
+ }
+ }
+
+ /**
+ * Represent a contact search result.
+ */
+ public static class ContactResultListItem {
+ private final Contact mContact;
+ private final String mNumber;
+
+ public ContactResultListItem(Contact contact, String number) {
+ mContact = contact;
+ mNumber = number;
+ }
+
+ /**
+ * Returns the contact.
+ */
+ public Contact getContact() {
+ return mContact;
+ }
+
+ /**
+ * Returns the number. It is a string read from column
+ * {@link ContactsContract.CommonDataKinds.Phone#NUMBER}.
+ */
+ public String getNumber() {
+ return mNumber;
+ }
+ }
+}
diff --git a/src/com/android/car/dialer/ui/common/DialerBaseFragment.java b/src/com/android/car/dialer/ui/common/DialerBaseFragment.java
index 9e7aa7ac..04afb884 100644
--- a/src/com/android/car/dialer/ui/common/DialerBaseFragment.java
+++ b/src/com/android/car/dialer/ui/common/DialerBaseFragment.java
@@ -18,7 +18,9 @@ package com.android.car.dialer.ui.common;
import android.app.Activity;
import android.os.Bundle;
+import android.view.View;
+import androidx.annotation.CallSuper;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
@@ -55,6 +57,17 @@ public abstract class DialerBaseFragment extends Fragment {
mToolbarHeight = new MutableLiveData<>();
}
+ @CallSuper
+ @Override
+ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
+ Toolbar toolbar = getActivity().findViewById(R.id.car_ui_toolbar);
+ // Null check for unit tests to pass
+ if (toolbar != null) {
+ setupToolbar(toolbar);
+ }
+ }
+
@Override
public void onStart() {
super.onStart();
@@ -64,7 +77,7 @@ public abstract class DialerBaseFragment extends Fragment {
/**
* Customizes the tool bar. Can be overridden in subclasses.
*/
- public void setupToolbar(@NonNull Toolbar toolbar) {
+ protected void setupToolbar(@NonNull Toolbar toolbar) {
TelecomActivityViewModel viewModel = ViewModelProviders.of(getActivity()).get(
TelecomActivityViewModel.class);
LiveData<String> toolbarTitleLiveData = viewModel.getToolbarTitle();
@@ -79,7 +92,7 @@ public abstract class DialerBaseFragment extends Fragment {
setShowToolbarBackground(true);
- setToolbarHeight(toolbar.getHeight());
+ setToolbarHeight(toolbar);
}
/**
@@ -106,7 +119,13 @@ public abstract class DialerBaseFragment extends Fragment {
/**
* Sets the toolbar height.
*/
- public final void setToolbarHeight(int toolbarHeight) {
+ protected final void setToolbarHeight(Toolbar toolbar) {
+ int toolbarFirstRowHeight = getResources().getDimensionPixelSize(
+ R.dimen.car_ui_toolbar_first_row_height);
+ int toolbarHeight = toolbar.isTabsInSecondRow() && getToolbarState() == Toolbar.State.HOME
+ ? toolbarFirstRowHeight + getResources().getDimensionPixelSize(
+ R.dimen.car_ui_toolbar_second_row_height)
+ : toolbarFirstRowHeight;
mToolbarHeight.setValue(toolbarHeight);
}
diff --git a/src/com/android/car/dialer/ui/common/DialerUtils.java b/src/com/android/car/dialer/ui/common/DialerUtils.java
index 3bcca380..5826e42e 100644
--- a/src/com/android/car/dialer/ui/common/DialerUtils.java
+++ b/src/com/android/car/dialer/ui/common/DialerUtils.java
@@ -17,6 +17,10 @@
package com.android.car.dialer.ui.common;
import android.content.Context;
+import android.content.res.Resources;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import com.android.car.dialer.R;
import com.android.car.dialer.log.L;
@@ -24,6 +28,8 @@ import com.android.car.telephony.common.Contact;
import com.android.car.telephony.common.PhoneNumber;
import com.android.car.telephony.common.TelecomUtils;
import com.android.car.ui.AlertDialogBuilder;
+import com.android.car.ui.recyclerview.CarUiRadioButtonListItem;
+import com.android.car.ui.recyclerview.CarUiRadioButtonListItemAdapter;
import java.util.ArrayList;
import java.util.List;
@@ -41,8 +47,9 @@ public class DialerUtils {
public interface PhoneNumberSelectionCallback {
/**
* Called when a phone number is chosen.
+ *
* @param phoneNumber The phone number
- * @param always Whether the user pressed "aways" or "just once"
+ * @param always Whether the user pressed "aways" or "just once"
*/
void onPhoneNumberSelected(PhoneNumber phoneNumber, boolean always);
}
@@ -54,16 +61,28 @@ public class DialerUtils {
public static void showPhoneNumberSelector(Context context,
List<PhoneNumber> numbers,
PhoneNumberSelectionCallback callback) {
+
final List<PhoneNumber> selectedPhoneNumber = new ArrayList<>();
+ List<CarUiRadioButtonListItem> items = new ArrayList<>();
+ CarUiRadioButtonListItemAdapter adapter = new CarUiRadioButtonListItemAdapter(items);
+
+ for (PhoneNumber number : numbers) {
+ CharSequence readableLabel = number.getReadableLabel(context.getResources());
+ CarUiRadioButtonListItem item = new CarUiRadioButtonListItem();
+ item.setTitle(number.isPrimary()
+ ? context.getString(R.string.primary_number_description, readableLabel)
+ : readableLabel);
+ item.setBody(number.getNumber());
+ item.setOnCheckedChangeListener((i, isChecked) -> {
+ selectedPhoneNumber.clear();
+ selectedPhoneNumber.add(number);
+ });
+ items.add(item);
+ }
+
new AlertDialogBuilder(context)
.setTitle(R.string.select_number_dialog_title)
- .setSingleChoiceItems(
- new PhoneNumberListAdapter(context, numbers),
- -1,
- ((dialog, which) -> {
- selectedPhoneNumber.clear();
- selectedPhoneNumber.add(numbers.get(which));
- }))
+ .setSingleChoiceItems(adapter, null)
.setNeutralButton(R.string.select_number_dialog_just_once_button,
(dialog, which) -> {
if (!selectedPhoneNumber.isEmpty()) {
@@ -106,4 +125,23 @@ public class DialerUtils {
L.w(TAG, "contact %s doesn't have any phone number", contact.getDisplayName());
}
}
+
+ /**
+ * Returns true if the contact has postal address and show postal address config is true.
+ */
+ private static boolean hasPostalAddress(Resources resources, @NonNull Contact contact) {
+ boolean showPostalAddress = resources.getBoolean(
+ R.bool.config_show_postal_address);
+ return showPostalAddress && (!contact.getPostalAddresses().isEmpty());
+ }
+
+ /**
+ * Returns true if the contact has either phone number or postal address to show.
+ */
+ public static boolean hasContactDetail(Resources resources, @Nullable Contact contact) {
+ boolean hasContactDetail = contact != null
+ && (!contact.getNumbers().isEmpty() || DialerUtils.hasPostalAddress(
+ resources, contact));
+ return hasContactDetail;
+ }
}
diff --git a/src/com/android/car/dialer/ui/common/FavoritePhoneNumberListAdapter.java b/src/com/android/car/dialer/ui/common/FavoritePhoneNumberListAdapter.java
deleted file mode 100644
index 4f93fd04..00000000
--- a/src/com/android/car/dialer/ui/common/FavoritePhoneNumberListAdapter.java
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright (C) 2019 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.car.dialer.ui.common;
-
-import android.content.Context;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.BaseAdapter;
-import android.widget.TextView;
-
-import com.android.car.dialer.R;
-import com.android.car.telephony.common.Contact;
-import com.android.car.telephony.common.PhoneNumber;
-
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * {@link BaseAdapter} that presents the {@link PhoneNumber} and its type as two line list
- * item with stars to indicate favorite state or user selection to add to favorite. Currently
- * favorite phone number is set to disabled so user can not take any action for an existing favorite
- * phone number.
- */
-public class FavoritePhoneNumberListAdapter extends BaseAdapter {
- private final Context mContext;
- private final FavoritePhoneNumberPresenter mFavoritePhoneNumberPresenter;
- private final List<PhoneNumber> mPhoneNumbers;
- private Contact mContact;
-
- /**
- * A presenter that presents the favorite state for phone number and provides the click
- * listener.
- */
- public interface FavoritePhoneNumberPresenter {
- /**
- * Provides the click listener for the given phone number and its present view.
- */
- void onItemClicked(PhoneNumber phoneNumber, View itemView);
- }
-
- public FavoritePhoneNumberListAdapter(Context context,
- FavoritePhoneNumberPresenter favoritePhoneNumberPresenter) {
- mContext = context;
- mFavoritePhoneNumberPresenter = favoritePhoneNumberPresenter;
- mPhoneNumbers = new ArrayList<>();
- }
-
- /**
- * Sets the phone numbers to display
- */
- public void setPhoneNumbers(Contact contact, List<PhoneNumber> phoneNumbers) {
- mPhoneNumbers.clear();
- mContact = contact;
- mPhoneNumbers.addAll(phoneNumbers);
-
- notifyDataSetChanged();
- }
-
- public Contact getContact() {
- return mContact;
- }
-
- @Override
- public int getCount() {
- return mPhoneNumbers.size();
- }
-
- @Override
- public PhoneNumber getItem(int position) {
- return mPhoneNumbers.get(position);
- }
-
- @Override
- public long getItemId(int position) {
- return position;
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- View itemView;
- if (convertView == null) {
- itemView = LayoutInflater.from(mContext).inflate(
- R.layout.add_favorite_number_list_item, parent, false);
- } else {
- itemView = convertView;
- }
- PhoneNumber phoneNumber = getItem(position);
- bind(phoneNumber, itemView);
- return itemView;
- }
-
- void bind(PhoneNumber phoneNumber, View itemView) {
- TextView phoneNumberView = itemView.findViewById(R.id.phone_number);
- TextView phoneNumberDescriptionView = itemView.findViewById(R.id.phone_number_description);
- phoneNumberView.setText(phoneNumber.getRawNumber());
- CharSequence readableLabel = phoneNumber.getReadableLabel(itemView.getResources());
-
- if (phoneNumber.isFavorite()) {
- phoneNumberDescriptionView.setText(
- itemView.getResources().getString(R.string.favorite_number_description,
- readableLabel));
- itemView.setActivated(true);
- itemView.setEnabled(false);
- } else {
- phoneNumberDescriptionView.setText(readableLabel);
- itemView.setActivated(false);
- itemView.setEnabled(true);
- itemView.setOnClickListener(
- view -> mFavoritePhoneNumberPresenter.onItemClicked(phoneNumber, itemView));
- }
- }
-}
diff --git a/src/com/android/car/dialer/ui/common/PhoneNumberListAdapter.java b/src/com/android/car/dialer/ui/common/PhoneNumberListAdapter.java
deleted file mode 100644
index 923fb51e..00000000
--- a/src/com/android/car/dialer/ui/common/PhoneNumberListAdapter.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
- * Copyright (C) 2019 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.car.dialer.ui.common;
-
-import android.content.Context;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-import android.widget.TextView;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-
-import com.android.car.dialer.R;
-import com.android.car.telephony.common.PhoneNumber;
-
-import java.util.List;
-
-/**
- * {@link ArrayAdapter} that simply presents the {@link PhoneNumber} and its type as two line list
- * item.
- */
-public class PhoneNumberListAdapter extends ArrayAdapter<PhoneNumber> {
- private final Context mContext;
-
- public PhoneNumberListAdapter(Context context, List<PhoneNumber> phoneNumbers) {
- super(context, R.layout.phone_number_list_item, R.id.phone_number, phoneNumbers);
- mContext = context;
- }
-
- @Override
- public View getView(int position, @Nullable View convertView,
- @NonNull ViewGroup parent) {
- View view = super.getView(position, convertView, parent);
- PhoneNumber phoneNumber = getItem(position);
- if (phoneNumber == null) {
- return view;
- }
- TextView phoneNumberView = view.findViewById(R.id.phone_number);
- phoneNumberView.setText(phoneNumber.getRawNumber());
- TextView phoneNumberDescriptionView = view.findViewById(R.id.phone_number_description);
- CharSequence readableLabel = phoneNumber.getReadableLabel(mContext.getResources());
- if (phoneNumber.isPrimary()) {
- phoneNumberDescriptionView.setText(
- mContext.getString(R.string.primary_number_description, readableLabel));
- } else {
- phoneNumberDescriptionView.setText(readableLabel);
- }
- return view;
- }
-}
diff --git a/src/com/android/car/dialer/ui/common/UiCallLogLiveData.java b/src/com/android/car/dialer/ui/common/UiCallLogLiveData.java
index 5b6d06a7..1c48f1ae 100644
--- a/src/com/android/car/dialer/ui/common/UiCallLogLiveData.java
+++ b/src/com/android/car/dialer/ui/common/UiCallLogLiveData.java
@@ -16,7 +16,12 @@
package com.android.car.dialer.ui.common;
+import android.content.ContentResolver;
import android.content.Context;
+import android.database.Cursor;
+import android.net.Uri;
+import android.provider.ContactsContract;
+import android.provider.ContactsContract.PhoneLookup;
import android.text.TextUtils;
import android.text.format.DateUtils;
@@ -43,16 +48,21 @@ import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.Future;
/**
- * Represents a list of {@link UiCallLog}s and label {@link String}s for UI representation.
- * This live data gets data source from both call log and contact list. It also refresh
- * itself on the relative time in the body text.
+ * Represents a list of {@link UiCallLog}s and label {@link String}s for UI representation. This
+ * live data gets data source from both call log and contact list. It also refresh itself on the
+ * relative time in the body text.
*/
public class UiCallLogLiveData extends MediatorLiveData<List<Object>> {
private static final String TAG = "CD.UiCallLogLiveData";
private static final String TYPE_AND_RELATIVE_TIME_JOINER = ", ";
+ private final ExecutorService mExecutorService;
+ private Future<?> mRunnableFuture;
private Context mContext;
public UiCallLogLiveData(Context context,
@@ -60,6 +70,8 @@ public class UiCallLogLiveData extends MediatorLiveData<List<Object>> {
CallHistoryLiveData callHistoryLiveData,
LiveData<List<Contact>> contactListLiveData) {
mContext = context;
+ mExecutorService = Executors.newSingleThreadExecutor();
+
addSource(callHistoryLiveData, this::onCallHistoryChanged);
addSource(contactListLiveData,
(contacts) -> onCallHistoryChanged(callHistoryLiveData.getValue()));
@@ -71,7 +83,14 @@ public class UiCallLogLiveData extends MediatorLiveData<List<Object>> {
if (callLogs == null && getValue() == null) {
return;
}
- setValue(convert(callLogs));
+
+ if (mRunnableFuture != null) {
+ mRunnableFuture.cancel(true);
+ }
+ Runnable runnable = () -> {
+ postValue(convert(callLogs));
+ };
+ mRunnableFuture = mExecutorService.submit(runnable);
}
private void updateRelativeTime() {
@@ -133,14 +152,51 @@ public class UiCallLogLiveData extends MediatorLiveData<List<Object>> {
String relativeTime = getRelativeTime(phoneCallLog.getLastCallEndTimestamp());
if (TelecomUtils.isVoicemailNumber(mContext, number)) {
String title = mContext.getString(R.string.voicemail);
- UiCallLog uiCallLog = new UiCallLog(title, relativeTime, number, null, null,
+ UiCallLog uiCallLog = new UiCallLog(title, relativeTime, number, null,
phoneCallLog.getAllCallRecords());
uiCallLogs.add(uiCallLog);
continue;
}
- Contact contact = inMemoryPhoneBook.lookupContactEntry(number);
String title;
+ CharSequence typeLabel = "";
+ Contact contact = null;
+
+ // If InMemoryPhoneBook hasn't finished loading, there is still a chance that this
+ // number can be found there later. So query will not be proceeded now.
+ // TODO: will move to utils later.
+ if (inMemoryPhoneBook.isLoaded()) {
+ contact = inMemoryPhoneBook.lookupContactEntry(number);
+ if (contact == null && !TextUtils.isEmpty(number)) {
+ ContentResolver cr = mContext.getContentResolver();
+ try (Cursor cursor = cr.query(
+ Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI,
+ Uri.encode(number)),
+ new String[]{
+ PhoneLookup.LOOKUP_KEY,
+ PhoneLookup.TYPE,
+ PhoneLookup.LABEL,
+ },
+ null, null, null)) {
+
+ if (cursor != null && cursor.moveToFirst()) {
+ int lookupKeyColIdx = cursor.getColumnIndex(PhoneLookup.LOOKUP_KEY);
+ int typeColumn = cursor.getColumnIndex(PhoneLookup.TYPE);
+ int labelColumn = cursor.getColumnIndex(PhoneLookup.LABEL);
+
+ List<Contact> lookupResults =
+ InMemoryPhoneBook.get().lookupContactByKey(
+ cursor.getString(lookupKeyColIdx));
+ contact = lookupResults.size() > 0 ? lookupResults.get(0) : null;
+ int type = cursor.getInt(typeColumn);
+ String label = cursor.getString(labelColumn);
+ typeLabel = ContactsContract.CommonDataKinds.Phone.getTypeLabel(
+ mContext.getResources(), type, label);
+ }
+ }
+ }
+ }
+
if (contact != null && contact.getDisplayName() != null) {
title = contact.getDisplayName();
} else if (!TextUtils.isEmpty(number)) {
@@ -153,10 +209,11 @@ public class UiCallLogLiveData extends MediatorLiveData<List<Object>> {
UiCallLog uiCallLog = new UiCallLog(
title,
- getSecondaryText(getType(phoneNumber), relativeTime),
+ getSecondaryText(
+ TextUtils.isEmpty(typeLabel) ? getType(phoneNumber) : typeLabel,
+ relativeTime),
number,
- contact != null ? contact.getInitials() : null,
- contact != null ? contact.getAvatarUri() : null,
+ contact,
phoneCallLog.getAllCallRecords());
uiCallLogs.add(uiCallLog);
diff --git a/src/com/android/car/dialer/ui/common/entity/ActionButton.java b/src/com/android/car/dialer/ui/common/entity/ActionButton.java
new file mode 100644
index 00000000..46dafe9c
--- /dev/null
+++ b/src/com/android/car/dialer/ui/common/entity/ActionButton.java
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2020 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.car.dialer.ui.common.entity;
+
+/**Objects stand for buttons.*/
+public final class ActionButton {
+}
diff --git a/src/com/android/car/dialer/notification/NotificationReceiver.java b/src/com/android/car/dialer/ui/common/entity/Header.java
index 8c7d8d73..c184dfe0 100644
--- a/src/com/android/car/dialer/notification/NotificationReceiver.java
+++ b/src/com/android/car/dialer/ui/common/entity/Header.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2019 The Android Open Source Project
+ * Copyright (C) 2020 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,17 +14,22 @@
* limitations under the License.
*/
-package com.android.car.dialer.notification;
+package com.android.car.dialer.ui.common.entity;
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
+/**
+ * Objects stand for headers.
+ */
+public final class Header {
+ private final String mHeader;
-/** This class is responsible for offloading notification broadcasts to the notification service. */
-public class NotificationReceiver extends BroadcastReceiver {
+ public Header(String header) {
+ mHeader = header;
+ }
- @Override
- public void onReceive(Context context, Intent intent) {
- NotificationService.enqueueWork(context, intent);
+ /**
+ * Getter to return the header string.
+ */
+ public String getHeader() {
+ return mHeader;
}
}
diff --git a/src/com/android/car/dialer/ui/common/entity/UiCallLog.java b/src/com/android/car/dialer/ui/common/entity/UiCallLog.java
index 9de97309..35ae2395 100644
--- a/src/com/android/car/dialer/ui/common/entity/UiCallLog.java
+++ b/src/com/android/car/dialer/ui/common/entity/UiCallLog.java
@@ -16,11 +16,10 @@
package com.android.car.dialer.ui.common.entity;
-import android.net.Uri;
-
import androidx.annotation.Nullable;
import com.android.car.dialer.livedata.CallHistoryLiveData;
+import com.android.car.telephony.common.Contact;
import com.android.car.telephony.common.PhoneCallLog;
import java.util.ArrayList;
@@ -32,29 +31,26 @@ import java.util.List;
*/
public class UiCallLog {
private final String mTitle;
+ private String mText;
private final String mNumber;
@Nullable
- private final String mInitials;
- private final Uri mAvatarUri;
+ private final Contact mContact;
private final List<PhoneCallLog.Record> mCallRecords;
- private String mText;
- public UiCallLog(String title, String text, String number, @Nullable String initials,
- Uri avatarUri, List<PhoneCallLog.Record> callRecords) {
+ public UiCallLog(String title, String text, String number, @Nullable Contact contact,
+ List<PhoneCallLog.Record> callRecords) {
mTitle = title;
mText = text;
mNumber = number;
- mInitials = initials;
- mAvatarUri = avatarUri;
+ mContact = contact;
mCallRecords = new ArrayList<>(callRecords);
}
/**
- * Returns the initials of a call log item. Returns null if this item is not a contact.
+ * Updates the body text.
*/
- @Nullable
- public String getInitials() {
- return mInitials;
+ public void setText(String text) {
+ mText = text;
}
/**
@@ -72,23 +68,18 @@ public class UiCallLog {
}
/**
- * Updates the body text.
- */
- public void setText(String text) {
- mText = text;
- }
-
- /**
* Returns the number of this call log.
*/
public String getNumber() {
return mNumber;
}
- /** Returns the avatar of the contact associated with the number. */
+ /**
+ * Returns the related contact of a call log item. Returns null if this item is not a contact.
+ */
@Nullable
- public Uri getAvatarUri() {
- return mAvatarUri;
+ public Contact getContact() {
+ return mContact;
}
/**
diff --git a/src/com/android/car/dialer/ui/contact/ContactDetailsFragment.java b/src/com/android/car/dialer/ui/contact/ContactDetailsFragment.java
index a3013931..7f33f462 100644
--- a/src/com/android/car/dialer/ui/contact/ContactDetailsFragment.java
+++ b/src/com/android/car/dialer/ui/contact/ContactDetailsFragment.java
@@ -94,6 +94,7 @@ public class ContactDetailsFragment extends DialerListBaseFragment implements
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
ContactDetailsAdapter contactDetailsAdapter = new ContactDetailsAdapter(getContext(),
mContact, this);
getRecyclerView().setAdapter(contactDetailsAdapter);
@@ -111,6 +112,10 @@ public class ContactDetailsFragment extends DialerListBaseFragment implements
private void onContactChanged(Contact contact) {
getArguments().clear();
Toolbar toolbar = getActivity().findViewById(R.id.car_ui_toolbar);
+ // Null check to have unit tests to pass.
+ if (toolbar == null) {
+ return;
+ }
toolbar.setTitle(null);
toolbar.setLogo(null);
if (mShowActionBarView) {
@@ -148,7 +153,7 @@ public class ContactDetailsFragment extends DialerListBaseFragment implements
}
@Override
- public void setupToolbar(@NonNull Toolbar toolbar) {
+ protected void setupToolbar(@NonNull Toolbar toolbar) {
toolbar.setState(getToolbarState());
toolbar.setMenuItems(null);
@@ -156,6 +161,8 @@ public class ContactDetailsFragment extends DialerListBaseFragment implements
if (!mShowActionBarView) {
setShowToolbarBackground(false);
}
+
+ setToolbarHeight(toolbar);
}
@Override
diff --git a/src/com/android/car/dialer/ui/contact/ContactDetailsViewHolder.java b/src/com/android/car/dialer/ui/contact/ContactDetailsViewHolder.java
index 0ffe3f9a..eec3013e 100644
--- a/src/com/android/car/dialer/ui/contact/ContactDetailsViewHolder.java
+++ b/src/com/android/car/dialer/ui/contact/ContactDetailsViewHolder.java
@@ -67,7 +67,7 @@ class ContactDetailsViewHolder extends RecyclerView.ViewHolder {
@Nullable
private final View mCallActionView;
@Nullable
- private final View mFavoriteActionView;
+ private final ImageView mFavoriteActionView;
// Applies to address items
@Nullable
@@ -152,26 +152,42 @@ class ContactDetailsViewHolder extends RecyclerView.ViewHolder {
}
public void bind(Context context, Contact contact, PhoneNumber phoneNumber) {
-
mTitle.setText(phoneNumber.getRawNumber());
- // Present the phone number type.
+ // Present the phone number type and local favorite state.
CharSequence readableLabel = phoneNumber.getReadableLabel(context.getResources());
+ CharSequence favoriteLabel = phoneNumber.isFavorite() ? context.getString(
+ R.string.local_favorite_number_description, readableLabel) : readableLabel;
if (phoneNumber.isPrimary()) {
- mText.setText(context.getString(R.string.primary_number_description, readableLabel));
+ mText.setText(context.getString(R.string.primary_number_description, favoriteLabel));
mText.setTextAppearance(R.style.TextAppearance_DefaultNumberLabel);
} else {
- mText.setText(readableLabel);
+ mText.setText(favoriteLabel);
mText.setTextAppearance(R.style.TextAppearance_ContactDetailsListSubtitle);
}
mCallActionView.setOnClickListener(
v -> UiCallManager.get().placeCall(phoneNumber.getRawNumber()));
- mFavoriteActionView.setActivated(phoneNumber.isFavorite());
- mFavoriteActionView.setOnClickListener(v -> {
- mPhoneNumberPresenter.onClick(contact, phoneNumber);
- mFavoriteActionView.setActivated(!mFavoriteActionView.isActivated());
- });
+
+ if (phoneNumber.isFavorite() || !contact.isStarred()) {
+ // If the phone number is marked as favorite locally, enable the action button to
+ // allow users to remove from local favorites.
+ // If the phone number is not a local favorite or a favorite from phone, allow users
+ // to mark it as favorite locally.
+ ViewUtils.setActivated(mFavoriteActionView, phoneNumber.isFavorite());
+ ViewUtils.setEnabled(mFavoriteActionView, true);
+ ViewUtils.setOnClickListener(mFavoriteActionView, v -> {
+ mPhoneNumberPresenter.onClick(contact, phoneNumber);
+ mFavoriteActionView.setActivated(!mFavoriteActionView.isActivated());
+ });
+ } else {
+ // The contact is favorite contact downloaded from phone. Disable the favorite action
+ // button so the phone numbers can not be marked as favorite locally as it is not
+ // necessary.
+ ViewUtils.setActivated(mFavoriteActionView, false);
+ ViewUtils.setEnabled(mFavoriteActionView, false);
+ ViewUtils.setOnClickListener(mFavoriteActionView, null);
+ }
}
public void bind(Context context, @NonNull PostalAddress postalAddress) {
diff --git a/src/com/android/car/dialer/ui/contact/ContactListFragment.java b/src/com/android/car/dialer/ui/contact/ContactListFragment.java
index d638b6c8..954806a5 100644
--- a/src/com/android/car/dialer/ui/contact/ContactListFragment.java
+++ b/src/com/android/car/dialer/ui/contact/ContactListFragment.java
@@ -42,6 +42,7 @@ public class ContactListFragment extends DialerListBaseFragment implements
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
// Don't recreate the adapter if we already have one, so that the list items
// will display immediately upon the view being recreated. If they're not displayed
// immediately, we won't remember our scroll position.
diff --git a/src/com/android/car/dialer/ui/contact/ContactListViewHolder.java b/src/com/android/car/dialer/ui/contact/ContactListViewHolder.java
index 8a35f873..96191516 100644
--- a/src/com/android/car/dialer/ui/contact/ContactListViewHolder.java
+++ b/src/com/android/car/dialer/ui/contact/ContactListViewHolder.java
@@ -126,8 +126,7 @@ public class ContactListViewHolder extends RecyclerView.ViewHolder {
return;
}
- boolean hasContactDetail = contact != null
- && (!contact.getNumbers().isEmpty() || hasPostalAddress(contact));
+ boolean hasContactDetail = DialerUtils.hasContactDetail(itemView.getResources(), contact);
ViewUtils.setEnabled(mShowContactDetailView, hasContactDetail);
ViewUtils.setVisible(mShowContactDetailView, hasContactDetail || forceShowButton);
@@ -140,12 +139,6 @@ public class ContactListViewHolder extends RecyclerView.ViewHolder {
}
}
- private boolean hasPostalAddress(@NonNull Contact contact) {
- boolean showPostalAddress = itemView.getResources().getBoolean(
- R.bool.config_show_postal_address);
- return showPostalAddress && (!contact.getPostalAddresses().isEmpty());
- }
-
/**
* Recycles views.
*/
diff --git a/src/com/android/car/dialer/ui/dialpad/AbstractDialpadFragment.java b/src/com/android/car/dialer/ui/dialpad/AbstractDialpadFragment.java
index 2333414b..93cc34bf 100644
--- a/src/com/android/car/dialer/ui/dialpad/AbstractDialpadFragment.java
+++ b/src/com/android/car/dialer/ui/dialpad/AbstractDialpadFragment.java
@@ -89,6 +89,7 @@ public abstract class AbstractDialpadFragment extends DialerBaseFragment impleme
@CallSuper
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
mTitleView = view.findViewById(R.id.title);
if (mTitleView != null && getResources().getBoolean(R.bool.config_enable_dial_motion)) {
mInputMotionAnimator = (ValueAnimator) AnimatorInflater.loadAnimator(getContext(),
diff --git a/src/com/android/car/dialer/ui/dialpad/DialpadFragment.java b/src/com/android/car/dialer/ui/dialpad/DialpadFragment.java
index 44389809..3368a81f 100644
--- a/src/com/android/car/dialer/ui/dialpad/DialpadFragment.java
+++ b/src/com/android/car/dialer/ui/dialpad/DialpadFragment.java
@@ -32,6 +32,7 @@ import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.lifecycle.ViewModelProviders;
import com.android.car.apps.common.util.ViewUtils;
import com.android.car.dialer.R;
@@ -42,6 +43,7 @@ import com.android.car.telephony.common.Contact;
import com.android.car.telephony.common.InMemoryPhoneBook;
import com.android.car.telephony.common.PhoneNumber;
import com.android.car.telephony.common.TelecomUtils;
+import com.android.car.ui.recyclerview.CarUiRecyclerView;
import com.android.car.ui.toolbar.Toolbar;
import com.google.common.annotations.VisibleForTesting;
@@ -77,11 +79,15 @@ public class DialpadFragment extends AbstractDialpadFragment {
.put(KeyEvent.KEYCODE_STAR, ToneGenerator.TONE_DTMF_S)
.put(KeyEvent.KEYCODE_POUND, ToneGenerator.TONE_DTMF_P)
.build();
+ private final TypeDownResultsAdapter mAdapter = new TypeDownResultsAdapter();
+ private TypeDownResultsViewModel mTypeDownResultsViewModel;
private TextView mTitleView;
@Nullable
private TextView mDisplayName;
@Nullable
+ private CarUiRecyclerView mRecyclerView;
+ @Nullable
private TextView mLabel;
@Nullable
private ImageView mAvatar;
@@ -120,6 +126,11 @@ public class DialpadFragment extends AbstractDialpadFragment {
mMode = getArguments().getInt(DIALPAD_MODE_KEY);
L.d(TAG, "onCreate mode: %s", mMode);
mToneGenerator = new ToneGenerator(AudioManager.STREAM_MUSIC, TONE_RELATIVE_VOLUME);
+
+ mTypeDownResultsViewModel = ViewModelProviders.of(this).get(
+ TypeDownResultsViewModel.class);
+ mTypeDownResultsViewModel.getContactSearchResults().observe(this,
+ contactResults -> mAdapter.setData(contactResults));
}
@Override
@@ -132,6 +143,8 @@ public class DialpadFragment extends AbstractDialpadFragment {
mMode == MODE_EMERGENCY ? R.style.TextAppearance_EmergencyDialNumber
: R.style.TextAppearance_DialNumber);
mDisplayName = rootView.findViewById(R.id.display_name);
+ mRecyclerView = rootView.findViewById(R.id.list_view);
+ mRecyclerView.setAdapter(mAdapter);
mLabel = rootView.findViewById(R.id.label);
mAvatar = rootView.findViewById(R.id.dialpad_contact_avatar);
if (mAvatar != null) {
@@ -174,7 +187,7 @@ public class DialpadFragment extends AbstractDialpadFragment {
}
@Override
- public void setupToolbar(Toolbar toolbar) {
+ protected void setupToolbar(Toolbar toolbar) {
// Only setup the actionbar if we're in dial mode.
// In all the other modes, there will be another fragment in the activity
// at the same time, and we don't want to mess up it's action bar.
@@ -238,7 +251,13 @@ public class DialpadFragment extends AbstractDialpadFragment {
ViewUtils.setVisible(mDeleteButton, true);
}
- presentContactInfo(number.toString());
+ if (getResources().getBoolean(R.bool.config_show_type_down_list_on_dialpad)) {
+ resetContactInfo();
+ ViewUtils.setVisible(mRecyclerView, true);
+ mTypeDownResultsViewModel.setSearchQuery(number.toString());
+ } else {
+ presentContactInfo(number.toString());
+ }
}
@Override
diff --git a/src/com/android/car/dialer/ui/dialpad/InCallDialpadFragment.java b/src/com/android/car/dialer/ui/dialpad/InCallDialpadFragment.java
index 22079c93..8d8e5aa6 100644
--- a/src/com/android/car/dialer/ui/dialpad/InCallDialpadFragment.java
+++ b/src/com/android/car/dialer/ui/dialpad/InCallDialpadFragment.java
@@ -114,7 +114,7 @@ public class InCallDialpadFragment extends AbstractDialpadFragment {
}
@Override
- public void setupToolbar(Toolbar toolbar) {
+ protected void setupToolbar(Toolbar toolbar) {
// No-op
}
diff --git a/src/com/android/car/dialer/ui/dialpad/TypeDownResultsAdapter.java b/src/com/android/car/dialer/ui/dialpad/TypeDownResultsAdapter.java
new file mode 100644
index 00000000..30ac4f33
--- /dev/null
+++ b/src/com/android/car/dialer/ui/dialpad/TypeDownResultsAdapter.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2020 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.car.dialer.ui.dialpad;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.car.dialer.R;
+import com.android.car.dialer.ui.search.ContactResultViewHolder;
+import com.android.car.dialer.ui.search.ContactResultsAdapter;
+
+/**
+ * An adapter used for type down functionality.
+ */
+public class TypeDownResultsAdapter extends ContactResultsAdapter {
+
+ public TypeDownResultsAdapter() {
+ super(null);
+ }
+
+ @Override
+ public ContactResultViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ View view = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.type_down_list_item, parent, false);
+ return new ContactResultViewHolder(view, null);
+ }
+
+ @Override
+ public void onBindViewHolder(ContactResultViewHolder holder, int position) {
+ holder.bindTypeDownResult(getContactResults().get(position));
+ }
+}
diff --git a/src/com/android/car/dialer/ui/dialpad/TypeDownResultsViewModel.java b/src/com/android/car/dialer/ui/dialpad/TypeDownResultsViewModel.java
new file mode 100644
index 00000000..8696fab4
--- /dev/null
+++ b/src/com/android/car/dialer/ui/dialpad/TypeDownResultsViewModel.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2020 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.car.dialer.ui.dialpad;
+
+import android.app.Application;
+
+import androidx.annotation.NonNull;
+import androidx.lifecycle.LiveData;
+
+import com.android.car.dialer.ui.common.ContactResultsLiveData;
+import com.android.car.dialer.ui.search.ContactResultsViewModel;
+
+import java.util.List;
+
+/**
+ * {link AndroidViewModel} used for type down functionality.
+ */
+public class TypeDownResultsViewModel extends ContactResultsViewModel {
+
+ private final ContactResultsLiveData mContactSearchResultsLiveData;
+
+ public TypeDownResultsViewModel(@NonNull Application application) {
+ super(application);
+ mContactSearchResultsLiveData = new ContactResultsLiveData(application,
+ getSearchQueryLiveData(), getSharedPreferencesLiveData(),
+ /* showOnlyOneEntry */ false);
+ }
+
+ @Override
+ public LiveData<List<ContactResultsLiveData.ContactResultListItem>> getContactSearchResults() {
+ return mContactSearchResultsLiveData;
+ }
+}
diff --git a/src/com/android/car/dialer/ui/favorite/AddFavoriteFragment.java b/src/com/android/car/dialer/ui/favorite/AddFavoriteFragment.java
index 574cee0c..a45d5bc7 100644
--- a/src/com/android/car/dialer/ui/favorite/AddFavoriteFragment.java
+++ b/src/com/android/car/dialer/ui/favorite/AddFavoriteFragment.java
@@ -17,18 +17,24 @@
package com.android.car.dialer.ui.favorite;
import android.app.AlertDialog;
+import android.graphics.drawable.Drawable;
import android.os.Bundle;
+import android.widget.Toast;
import androidx.lifecycle.ViewModelProviders;
import com.android.car.dialer.R;
-import com.android.car.dialer.ui.common.FavoritePhoneNumberListAdapter;
import com.android.car.dialer.ui.search.ContactResultsFragment;
import com.android.car.telephony.common.Contact;
import com.android.car.telephony.common.PhoneNumber;
import com.android.car.ui.AlertDialogBuilder;
+import com.android.car.ui.recyclerview.CarUiContentListItem;
+import com.android.car.ui.recyclerview.CarUiListItem;
+import com.android.car.ui.recyclerview.CarUiListItemAdapter;
+import java.util.ArrayList;
import java.util.HashSet;
+import java.util.List;
import java.util.Set;
/**
@@ -44,7 +50,12 @@ public class AddFavoriteFragment extends ContactResultsFragment {
}
private AlertDialog mCurrentDialog;
- private FavoritePhoneNumberListAdapter mDialogAdapter;
+ private CarUiListItemAdapter mDialogAdapter;
+ private List<CarUiListItem> mFavoritePhoneNumberList;
+ private Set<PhoneNumber> mSelectedNumbers;
+ private Contact mSelectedContact;
+ private Drawable mFavoriteIcon;
+ private Drawable mFavoriteIconEmpty;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -52,36 +63,77 @@ public class AddFavoriteFragment extends ContactResultsFragment {
FavoriteViewModel favoriteViewModel = ViewModelProviders.of(getActivity()).get(
FavoriteViewModel.class);
- Set<PhoneNumber> selectedNumbers = new HashSet<>();
-
- mDialogAdapter = new FavoritePhoneNumberListAdapter(getContext(),
- (phoneNumber, itemView) -> {
- boolean isActivated = itemView.isActivated();
- itemView.setActivated(!isActivated);
- if (isActivated) {
- selectedNumbers.remove(phoneNumber);
- } else {
- selectedNumbers.add(phoneNumber);
- }
- }
- );
+ mSelectedNumbers = new HashSet<>();
+
+ mFavoriteIcon = getResources().getDrawable(R.drawable.ic_favorite_activatable, null);
+ mFavoriteIcon.setTintList(
+ getResources().getColorStateList(R.color.primary_icon_selector, null));
+
+ mFavoritePhoneNumberList = new ArrayList<>();
+ mDialogAdapter = new CarUiListItemAdapter(mFavoritePhoneNumberList);
mCurrentDialog = new AlertDialogBuilder(getContext())
.setTitle(R.string.select_number_dialog_title)
- .setAdapter(mDialogAdapter, null)
+ .setAdapter(mDialogAdapter)
.setNegativeButton(R.string.cancel_add_favorites_dialog, null)
.setPositiveButton(R.string.confirm_add_favorites_dialog,
(d, which) -> {
- for (PhoneNumber number : selectedNumbers) {
- favoriteViewModel.addToFavorite(mDialogAdapter.getContact(),
+ for (PhoneNumber number : mSelectedNumbers) {
+ favoriteViewModel.addToFavorite(mSelectedContact,
number);
}
- selectedNumbers.clear();
+ mSelectedNumbers.clear();
getFragmentManager().popBackStackImmediate();
})
.create();
}
+ private void setPhoneNumbers(List<PhoneNumber> phoneNumbers) {
+ mFavoritePhoneNumberList.clear();
+ for (PhoneNumber number : phoneNumbers) {
+ CarUiContentListItem item = new CarUiContentListItem(CarUiContentListItem.Action.ICON);
+ item.setTitle(number.getNumber());
+ item.setSupplementalIcon(mFavoriteIcon.getConstantState().newDrawable());
+ setFavoriteItemState(item, number);
+
+ item.setOnItemClickedListener((listItem) -> {
+ if (mSelectedNumbers.contains(number)) {
+ mSelectedNumbers.remove(number);
+ listItem.setActivated(false);
+ } else {
+ mSelectedNumbers.add(number);
+ listItem.setActivated(true);
+ }
+ mDialogAdapter.notifyItemChanged(mFavoritePhoneNumberList.indexOf(listItem));
+ });
+ mFavoritePhoneNumberList.add(item);
+ }
+ mDialogAdapter.notifyDataSetChanged();
+ }
+
+ private void setFavoriteItemState(CarUiContentListItem item, PhoneNumber number) {
+ CharSequence readableLabel = number.getReadableLabel(getResources());
+
+ if (number.isFavorite()) {
+ // This phone number is marked as favorite locally. Disable the favorite action button.
+ item.setEnabled(false);
+ item.setActivated(true);
+ item.setBody(getResources().getString(R.string.favorite_number_description,
+ readableLabel));
+ } else if (mSelectedContact.isStarred()) {
+ // This contact is downloaded from phone, all phone numbers under this contact will show
+ // under the favorite tab. Disable the favorite action button.
+ item.setActivated(false);
+ item.setEnabled(false);
+ item.setBody(getResources().getString(R.string.favorite_number_description,
+ readableLabel));
+ } else {
+ item.setEnabled(true);
+ item.setActivated(false);
+ item.setBody(readableLabel);
+ }
+ }
+
@Override
public void onShowContactDetail(Contact contact) {
if (contact == null) {
@@ -89,7 +141,13 @@ public class AddFavoriteFragment extends ContactResultsFragment {
return;
}
- mDialogAdapter.setPhoneNumbers(contact, contact.getNumbers());
- mCurrentDialog.show();
+ mSelectedContact = contact;
+ if (contact.getNumbers().isEmpty()) {
+ Toast.makeText(getContext(), R.string.no_phone_numbers, Toast.LENGTH_SHORT).show();
+ mCurrentDialog.dismiss();
+ } else {
+ setPhoneNumbers(contact.getNumbers());
+ mCurrentDialog.show();
+ }
}
}
diff --git a/src/com/android/car/dialer/ui/favorite/BluetoothFavoriteContactsLiveData.java b/src/com/android/car/dialer/ui/favorite/BluetoothFavoriteContactsLiveData.java
new file mode 100644
index 00000000..a030b3bd
--- /dev/null
+++ b/src/com/android/car/dialer/ui/favorite/BluetoothFavoriteContactsLiveData.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2019 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.car.dialer.ui.favorite;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.provider.ContactsContract;
+
+import androidx.annotation.NonNull;
+
+import com.android.car.telephony.common.AsyncQueryLiveData;
+import com.android.car.telephony.common.Contact;
+import com.android.car.telephony.common.QueryParam;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/** Presents the favorite contacts downloaded from phone. It reads the contacts provider. */
+class BluetoothFavoriteContactsLiveData extends AsyncQueryLiveData<List<Contact>> {
+ private final Context mContext;
+
+ BluetoothFavoriteContactsLiveData(Context context) {
+ super(context, QueryParam.of(new FavoriteQueryParam()));
+ mContext = context;
+ }
+
+ @Override
+ protected List<Contact> convertToEntity(@NonNull Cursor cursor) {
+ List<Contact> resultList = new ArrayList<>();
+
+ while (cursor.moveToNext()) {
+ Contact favoriteEntry = Contact.fromCursor(mContext, cursor);
+ // If there is already a contact with the same phone number, don't add duplicate
+ // entries.
+ boolean alreadyExists = false;
+ for (Contact contact : resultList) {
+ if (favoriteEntry.equals(contact) && favoriteEntry.getNumbers().containsAll(
+ contact.getNumbers())) {
+ alreadyExists = true;
+ break;
+ }
+ }
+ if (!alreadyExists) {
+ resultList.add(favoriteEntry);
+ }
+ }
+ return resultList;
+ }
+
+ private static class FavoriteQueryParam extends QueryParam {
+ FavoriteQueryParam() {
+ super(ContactsContract.Data.CONTENT_URI,
+ null,
+ ContactsContract.Data.MIMETYPE + " = ? AND "
+ + ContactsContract.CommonDataKinds.Phone.STARRED + " = ? ",
+ new String[]{
+ ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE,
+ String.valueOf(1)},
+ ContactsContract.Contacts.DISPLAY_NAME + " ASC ");
+ }
+ }
+}
diff --git a/src/com/android/car/dialer/ui/favorite/FavoriteAdapter.java b/src/com/android/car/dialer/ui/favorite/FavoriteAdapter.java
index da7ebe51..a140c0d3 100644
--- a/src/com/android/car/dialer/ui/favorite/FavoriteAdapter.java
+++ b/src/com/android/car/dialer/ui/favorite/FavoriteAdapter.java
@@ -25,6 +25,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.android.car.dialer.R;
import com.android.car.dialer.log.L;
import com.android.car.dialer.ui.common.OnItemClickedListener;
+import com.android.car.dialer.ui.common.entity.Header;
import com.android.car.telephony.common.Contact;
import java.util.Collections;
@@ -35,21 +36,28 @@ import java.util.List;
*/
public class FavoriteAdapter extends RecyclerView.Adapter<FavoriteContactViewHolder> {
private static final String TAG = "CD.FavoriteAdapter";
- private static final int TYPE_CONTACT = 0;
- private static final int TYPE_ADD_FAVORITE = 1;
+ static final int TYPE_CONTACT = 0;
+ static final int TYPE_HEADER = 1;
+ static final int TYPE_ADD_FAVORITE = 2;
- /** Listener interface for when the add favorite button is clicked */
+ /**
+ * Listener interface for when the add favorite button is clicked
+ */
public interface OnAddFavoriteClickedListener {
- /** Called when the add favorite button is clicked */
+ /**
+ * Called when the add favorite button is clicked
+ */
void onAddFavoriteClicked();
}
- private List<Contact> mFavoriteContacts = Collections.emptyList();
+ private List<Object> mFavoriteContacts = Collections.emptyList();
private OnItemClickedListener<Contact> mListener;
private OnAddFavoriteClickedListener mAddFavoriteListener;
- /** Sets the favorite contact list. */
- public void setFavoriteContacts(List<Contact> favoriteContacts) {
+ /**
+ * Sets the favorite contact list.
+ */
+ public void setFavoriteContacts(List<Object> favoriteContacts) {
L.d(TAG, "setFavoriteContacts %s", favoriteContacts);
mFavoriteContacts = (favoriteContacts != null) ? favoriteContacts : Collections.emptyList();
notifyDataSetChanged();
@@ -57,42 +65,57 @@ public class FavoriteAdapter extends RecyclerView.Adapter<FavoriteContactViewHol
@Override
public int getItemCount() {
- return mFavoriteContacts.size() + 1; // +1 for the "Add a favorite" button
+ return mFavoriteContacts.size();
}
@Override
public int getItemViewType(int position) {
- return position < mFavoriteContacts.size()
- ? TYPE_CONTACT
- : TYPE_ADD_FAVORITE;
+ Object item = mFavoriteContacts.get(position);
+ if (item instanceof Contact) {
+ return TYPE_CONTACT;
+ } else if (item instanceof Header) {
+ return TYPE_HEADER;
+ } else {
+ return TYPE_ADD_FAVORITE;
+ }
}
@Override
public FavoriteContactViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- View view;
+ int layoutId;
if (viewType == TYPE_CONTACT) {
- view = LayoutInflater.from(parent.getContext())
- .inflate(R.layout.favorite_contact_list_item, parent, false);
+ layoutId = R.layout.favorite_contact_list_item;
+ } else if (viewType == TYPE_HEADER) {
+ layoutId = R.layout.header_item;
} else {
- view = LayoutInflater.from(parent.getContext())
- .inflate(R.layout.add_favorite_list_item, parent, false);
+ layoutId = R.layout.add_favorite_list_item;
}
+ View view = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false);
return new FavoriteContactViewHolder(view);
}
@Override
public void onBindViewHolder(FavoriteContactViewHolder viewHolder, int position) {
- if (getItemViewType(position) == TYPE_CONTACT) {
- Contact contact = mFavoriteContacts.get(position);
- viewHolder.onBind(contact);
- viewHolder.itemView.setOnClickListener((v) -> onItemViewClicked(contact));
- } else {
- viewHolder.itemView.setOnClickListener((v) -> {
- if (mAddFavoriteListener != null) {
- mAddFavoriteListener.onAddFavoriteClicked();
- }
- });
+ int itemViewType = getItemViewType(position);
+ switch (itemViewType) {
+ case TYPE_CONTACT:
+ Contact contact = (Contact) mFavoriteContacts.get(position);
+ viewHolder.onBind(contact);
+ viewHolder.itemView.setOnClickListener(v -> onItemViewClicked(contact));
+ break;
+ case TYPE_HEADER:
+ Header header = (Header) mFavoriteContacts.get(position);
+ viewHolder.onBind(header);
+ viewHolder.itemView.setOnClickListener(null);
+ break;
+ case TYPE_ADD_FAVORITE:
+ viewHolder.itemView.setOnClickListener(v -> {
+ if (mAddFavoriteListener != null) {
+ mAddFavoriteListener.onAddFavoriteClicked();
+ }
+ });
+ break;
}
}
@@ -110,8 +133,8 @@ public class FavoriteAdapter extends RecyclerView.Adapter<FavoriteContactViewHol
}
/**
- * Sets a {@link OnAddFavoriteClickedListener listener} which will be called when the
- * "Add favorite" button is clicked.
+ * Sets a {@link OnAddFavoriteClickedListener listener} which will be called when the "Add
+ * favorite" button is clicked.
*/
public void setOnAddFavoriteClickedListener(OnAddFavoriteClickedListener listener) {
mAddFavoriteListener = listener;
diff --git a/src/com/android/car/dialer/ui/favorite/FavoriteContactViewHolder.java b/src/com/android/car/dialer/ui/favorite/FavoriteContactViewHolder.java
index 137a150f..f9c17e24 100644
--- a/src/com/android/car/dialer/ui/favorite/FavoriteContactViewHolder.java
+++ b/src/com/android/car/dialer/ui/favorite/FavoriteContactViewHolder.java
@@ -21,10 +21,13 @@ import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
+import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
+import com.android.car.apps.common.util.ViewUtils;
import com.android.car.dialer.R;
import com.android.car.dialer.log.L;
+import com.android.car.dialer.ui.common.entity.Header;
import com.android.car.dialer.ui.view.ContactAvatarOutputlineProvider;
import com.android.car.telephony.common.Contact;
import com.android.car.telephony.common.PhoneNumber;
@@ -32,8 +35,6 @@ import com.android.car.telephony.common.TelecomUtils;
import java.util.List;
-import javax.annotation.Nonnull;
-
/**
* A {@link RecyclerView.ViewHolder ViewHolder} that will hold layouts for favorite contacts list
* items.
@@ -58,7 +59,7 @@ class FavoriteContactViewHolder extends RecyclerView.ViewHolder {
/**
* Binds view with favorite contact.
*/
- public void onBind(@Nonnull Contact contact) {
+ public void onBind(@NonNull Contact contact) {
Context context = itemView.getContext();
String displayName = contact.getDisplayName();
mTitle.setText(displayName);
@@ -85,4 +86,8 @@ class FavoriteContactViewHolder extends RecyclerView.ViewHolder {
TelecomUtils.setContactBitmapAsync(context, mIcon, contact);
}
+
+ public void onBind(@NonNull Header header) {
+ ViewUtils.setText(mTitle, header.getHeader());
+ }
}
diff --git a/src/com/android/car/dialer/ui/favorite/FavoriteFragment.java b/src/com/android/car/dialer/ui/favorite/FavoriteFragment.java
index 7e76f32e..c870dcf4 100644
--- a/src/com/android/car/dialer/ui/favorite/FavoriteFragment.java
+++ b/src/com/android/car/dialer/ui/favorite/FavoriteFragment.java
@@ -16,6 +16,7 @@
package com.android.car.dialer.ui.favorite;
+import android.content.Context;
import android.content.res.Resources;
import android.graphics.Rect;
import android.os.Bundle;
@@ -38,6 +39,7 @@ import com.android.car.telephony.common.Contact;
* Contains a list of favorite contacts.
*/
public class FavoriteFragment extends DialerListBaseFragment {
+ private FavoriteAdapter mFavoriteAdapter;
/**
* Constructs a new {@link FavoriteFragment}
@@ -48,15 +50,16 @@ public class FavoriteFragment extends DialerListBaseFragment {
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
getRecyclerView().addItemDecoration(new ItemSpacingDecoration());
getRecyclerView().setItemAnimator(null);
- FavoriteAdapter adapter = new FavoriteAdapter();
- adapter.setOnAddFavoriteClickedListener(this::onAddFavoriteClicked);
+ mFavoriteAdapter = new FavoriteAdapter();
+ mFavoriteAdapter.setOnAddFavoriteClickedListener(this::onAddFavoriteClicked);
FavoriteViewModel favoriteViewModel = ViewModelProviders.of(getActivity()).get(
FavoriteViewModel.class);
- adapter.setOnListItemClickedListener(this::onItemClicked);
+ mFavoriteAdapter.setOnListItemClickedListener(this::onItemClicked);
favoriteViewModel.getFavoriteContacts().observe(this, contacts -> {
if (contacts.isLoading()) {
showLoading();
@@ -65,20 +68,18 @@ public class FavoriteFragment extends DialerListBaseFragment {
R.string.no_favorites_added, R.string.add_favorite_button,
v -> onAddFavoriteClicked(), true);
} else {
- adapter.setFavoriteContacts(contacts.getData());
+ mFavoriteAdapter.setFavoriteContacts(contacts.getData());
showContent();
}
});
- getRecyclerView().setAdapter(adapter);
+ getRecyclerView().setAdapter(mFavoriteAdapter);
}
@NonNull
@Override
protected RecyclerView.LayoutManager createLayoutManager() {
- int numOfColumn = getContext().getResources().getInteger(
- R.integer.favorite_fragment_grid_column);
- return new GridLayoutManager(getContext(), numOfColumn);
+ return new FavoriteLayoutManager(getContext());
}
private void onItemClicked(Contact contact) {
@@ -110,4 +111,21 @@ public class FavoriteFragment extends DialerListBaseFragment {
outRect.set(leftPadding, verticalPadding, 0, verticalPadding);
}
}
+
+ private class FavoriteLayoutManager extends GridLayoutManager {
+ private FavoriteLayoutManager(Context context) {
+ super(context,
+ context.getResources().getInteger(R.integer.favorite_fragment_grid_column));
+ SpanSizeLookup spanSizeLookup = new SpanSizeLookup() {
+ @Override
+ public int getSpanSize(int position) {
+ if (mFavoriteAdapter.getItemViewType(position) == FavoriteAdapter.TYPE_HEADER) {
+ return getSpanCount();
+ }
+ return 1;
+ }
+ };
+ setSpanSizeLookup(spanSizeLookup);
+ }
+ }
}
diff --git a/src/com/android/car/dialer/ui/favorite/FavoriteViewModel.java b/src/com/android/car/dialer/ui/favorite/FavoriteViewModel.java
index 3f55d424..6e938caa 100644
--- a/src/com/android/car/dialer/ui/favorite/FavoriteViewModel.java
+++ b/src/com/android/car/dialer/ui/favorite/FavoriteViewModel.java
@@ -20,13 +20,18 @@ import android.app.Application;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
+import androidx.lifecycle.MediatorLiveData;
import com.android.car.arch.common.FutureData;
import com.android.car.arch.common.LiveDataFunctions;
+import com.android.car.dialer.R;
import com.android.car.dialer.storage.FavoriteNumberRepository;
+import com.android.car.dialer.ui.common.entity.ActionButton;
+import com.android.car.dialer.ui.common.entity.Header;
import com.android.car.telephony.common.Contact;
import com.android.car.telephony.common.PhoneNumber;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -34,18 +39,52 @@ import java.util.List;
*/
public class FavoriteViewModel extends AndroidViewModel {
private final FavoriteNumberRepository mFavoriteNumberRepository;
- private final LiveData<FutureData<List<Contact>>> mFavoriteContacts;
+ private final LiveData<FutureData<List<Object>>> mFavoriteContacts;
+ private final LiveData<List<Contact>> mBluetoothFavoriteContacts;
public FavoriteViewModel(Application application) {
super(application);
mFavoriteNumberRepository = FavoriteNumberRepository.getRepository(application);
+ mBluetoothFavoriteContacts = new BluetoothFavoriteContactsLiveData(application);
+
+ MediatorLiveData<List<Object>> favoriteContacts = new MediatorLiveData<>();
+ favoriteContacts.addSource(mFavoriteNumberRepository.getFavoriteContacts(), contacts -> {
+ List<Object> contactList = new ArrayList<>();
+ if (mBluetoothFavoriteContacts.getValue() != null
+ && !mBluetoothFavoriteContacts.getValue().isEmpty()) {
+ contactList.add(new Header(application.getString(R.string.phone_favorites)));
+ contactList.addAll(mBluetoothFavoriteContacts.getValue());
+ }
+ contactList.add(new Header(application.getString(R.string.local_favorites)));
+ if (contacts != null) {
+ contactList.addAll(contacts);
+ }
+ contactList.add(new ActionButton());
+ favoriteContacts.setValue(contactList);
+ });
+ favoriteContacts.addSource(mBluetoothFavoriteContacts, contacts -> {
+ List<Object> contactList = new ArrayList<>();
+ if (contacts != null && !contacts.isEmpty()) {
+ contactList.add(new Header(application.getString(R.string.phone_favorites)));
+ contactList.addAll(contacts);
+ }
+ contactList.add(new Header(application.getString(R.string.local_favorites)));
+ if (mFavoriteNumberRepository.getFavoriteContacts().getValue() != null) {
+ contactList.addAll(mFavoriteNumberRepository.getFavoriteContacts().getValue());
+ }
+ contactList.add(new ActionButton());
+ favoriteContacts.setValue(contactList);
+ });
mFavoriteContacts = LiveDataFunctions.loadingSwitchMap(
- mFavoriteNumberRepository.getFavoriteContacts(),
+ favoriteContacts,
input -> LiveDataFunctions.dataOf(input == null || input.isEmpty() ? null : input));
+
}
- /** Returns favorite contact list live data. */
- public LiveData<FutureData<List<Contact>>> getFavoriteContacts() {
+ /**
+ * Returns favorite contact list live data.
+ */
+ public LiveData<FutureData<List<Object>>> getFavoriteContacts() {
return mFavoriteContacts;
}
diff --git a/src/com/android/car/dialer/ui/search/ContactResultViewHolder.java b/src/com/android/car/dialer/ui/search/ContactResultViewHolder.java
index ad1d1391..19127e9e 100644
--- a/src/com/android/car/dialer/ui/search/ContactResultViewHolder.java
+++ b/src/com/android/car/dialer/ui/search/ContactResultViewHolder.java
@@ -21,32 +21,46 @@ import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
+import androidx.annotation.Nullable;
import androidx.recyclerview.widget.RecyclerView;
+import com.android.car.apps.common.util.ViewUtils;
import com.android.car.dialer.R;
+import com.android.car.dialer.telecom.UiCallManager;
+import com.android.car.dialer.ui.common.ContactResultsLiveData;
+import com.android.car.dialer.ui.common.DialerUtils;
import com.android.car.dialer.ui.view.ContactAvatarOutputlineProvider;
import com.android.car.telephony.common.Contact;
import com.android.car.telephony.common.TelecomUtils;
+import com.bumptech.glide.Glide;
+
/**
- * A {@link androidx.recyclerview.widget.RecyclerView.ViewHolder} that will parse relevant
- * views out of a {@code contact_result} layout.
+ * A {@link androidx.recyclerview.widget.RecyclerView.ViewHolder} that will parse relevant views out
+ * of a {@code contact_result} layout.
*/
public class ContactResultViewHolder extends RecyclerView.ViewHolder {
+ private static final String TAG = "CD.ContactResultVH";
+
private final Context mContext;
private final View mContactCard;
private final TextView mContactName;
+ private final TextView mContactNumber;
private final ImageView mContactPicture;
private final ContactResultsAdapter.OnShowContactDetailListener mOnShowContactDetailListener;
public ContactResultViewHolder(View view,
- ContactResultsAdapter.OnShowContactDetailListener onShowContactDetailListener) {
+ @Nullable ContactResultsAdapter.OnShowContactDetailListener
+ onShowContactDetailListener) {
super(view);
mContext = view.getContext();
mContactCard = view.findViewById(R.id.contact_result);
mContactName = view.findViewById(R.id.contact_name);
+ mContactNumber = view.findViewById(R.id.phone_number);
mContactPicture = view.findViewById(R.id.contact_picture);
- mContactPicture.setOutlineProvider(ContactAvatarOutputlineProvider.get());
+ if (mContactPicture != null) {
+ mContactPicture.setOutlineProvider(ContactAvatarOutputlineProvider.get());
+ }
mOnShowContactDetailListener = onShowContactDetailListener;
}
@@ -54,11 +68,40 @@ public class ContactResultViewHolder extends RecyclerView.ViewHolder {
* Populates the view that is represented by this ViewHolder with the information in the
* provided {@link Contact}.
*/
- public void bind(Contact contact) {
- mContactCard.setOnClickListener(
- v -> mOnShowContactDetailListener.onShowContactDetail(contact));
+ public void bindSearchResult(ContactResultsLiveData.ContactResultListItem contactResult) {
+ Contact contact = contactResult.getContact();
- mContactName.setText(contact.getDisplayName());
+ ViewUtils.setText(mContactName, contact.getDisplayName());
TelecomUtils.setContactBitmapAsync(mContext, mContactPicture, contact);
+
+ if (DialerUtils.hasContactDetail(itemView.getResources(), contact)) {
+ mContactCard.setOnClickListener(
+ v -> mOnShowContactDetailListener.onShowContactDetail(contact));
+ } else {
+ itemView.setEnabled(false);
+ }
+ }
+
+ /**
+ * Populates the view that is represented by this ViewHolder with the information in the
+ * provided {@link Contact}.
+ */
+ public void bindTypeDownResult(ContactResultsLiveData.ContactResultListItem contactResult) {
+ Contact contact = contactResult.getContact();
+ String number = contactResult.getNumber();
+
+ ViewUtils.setText(mContactNumber, number);
+ ViewUtils.setText(mContactName, contact.getDisplayName());
+ mContactCard.setOnClickListener(
+ v -> UiCallManager.get().placeCall(mContactNumber.getText().toString()));
+ TelecomUtils.setContactBitmapAsync(mContext, mContactPicture, contact);
+ }
+
+ void recycle() {
+ itemView.setEnabled(true);
+ mContactCard.setOnClickListener(null);
+ if (mContactPicture != null) {
+ Glide.with(mContext).clear(mContactPicture);
+ }
}
}
diff --git a/src/com/android/car/dialer/ui/search/ContactResultsAdapter.java b/src/com/android/car/dialer/ui/search/ContactResultsAdapter.java
index 7b1ac1f0..cb35f2b9 100644
--- a/src/com/android/car/dialer/ui/search/ContactResultsAdapter.java
+++ b/src/com/android/car/dialer/ui/search/ContactResultsAdapter.java
@@ -24,6 +24,7 @@ import android.view.ViewGroup;
import androidx.recyclerview.widget.RecyclerView;
import com.android.car.dialer.R;
+import com.android.car.dialer.ui.common.ContactResultsLiveData;
import com.android.car.telephony.common.Contact;
import java.util.ArrayList;
@@ -39,7 +40,8 @@ public class ContactResultsAdapter extends RecyclerView.Adapter<ContactResultVie
void onShowContactDetail(Contact contact);
}
- private final List<Contact> mContacts = new ArrayList<>();
+ private final List<ContactResultsLiveData.ContactResultListItem> mContactResults =
+ new ArrayList<>();
private final OnShowContactDetailListener mOnShowContactDetailListener;
public ContactResultsAdapter(OnShowContactDetailListener onShowContactDetailListener) {
@@ -50,7 +52,7 @@ public class ContactResultsAdapter extends RecyclerView.Adapter<ContactResultVie
* Clears all contact results from this adapter.
*/
public void clear() {
- mContacts.clear();
+ mContactResults.clear();
notifyDataSetChanged();
}
@@ -58,9 +60,9 @@ public class ContactResultsAdapter extends RecyclerView.Adapter<ContactResultVie
* Sets the list of contacts that should be displayed. The given {@link Cursor} can be safely
* closed after this call.
*/
- public void setData(List<Contact> data) {
- mContacts.clear();
- mContacts.addAll(data);
+ public void setData(List<ContactResultsLiveData.ContactResultListItem> data) {
+ mContactResults.clear();
+ mContactResults.addAll(data);
notifyDataSetChanged();
}
@@ -73,7 +75,12 @@ public class ContactResultsAdapter extends RecyclerView.Adapter<ContactResultVie
@Override
public void onBindViewHolder(ContactResultViewHolder holder, int position) {
- holder.bind(mContacts.get(position));
+ holder.bindSearchResult(mContactResults.get(position));
+ }
+
+ @Override
+ public void onViewRecycled(ContactResultViewHolder holder) {
+ holder.recycle();
}
@Override
@@ -84,6 +91,13 @@ public class ContactResultsAdapter extends RecyclerView.Adapter<ContactResultVie
@Override
public int getItemCount() {
- return mContacts.size();
+ return mContactResults.size();
+ }
+
+ /**
+ * Returns contact results.
+ */
+ public List<ContactResultsLiveData.ContactResultListItem> getContactResults() {
+ return mContactResults;
}
}
diff --git a/src/com/android/car/dialer/ui/search/ContactResultsFragment.java b/src/com/android/car/dialer/ui/search/ContactResultsFragment.java
index b35378e9..3603e944 100644
--- a/src/com/android/car/dialer/ui/search/ContactResultsFragment.java
+++ b/src/com/android/car/dialer/ui/search/ContactResultsFragment.java
@@ -89,6 +89,7 @@ public class ContactResultsFragment extends DialerListBaseFragment implements
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
+ super.onViewCreated(view, savedInstanceState);
getRecyclerView().setAdapter(mAdapter);
mOnScrollChangeListener = new RecyclerView.OnScrollListener() {
@@ -114,7 +115,7 @@ public class ContactResultsFragment extends DialerListBaseFragment implements
}
@Override
- public void setupToolbar(@NonNull Toolbar toolbar) {
+ protected void setupToolbar(@NonNull Toolbar toolbar) {
super.setupToolbar(toolbar);
mToolbar = toolbar;
mToolbar.registerOnSearchListener(this);
diff --git a/src/com/android/car/dialer/ui/search/ContactResultsViewModel.java b/src/com/android/car/dialer/ui/search/ContactResultsViewModel.java
index 43969afe..7678da48 100644
--- a/src/com/android/car/dialer/ui/search/ContactResultsViewModel.java
+++ b/src/com/android/car/dialer/ui/search/ContactResultsViewModel.java
@@ -17,40 +17,23 @@
package com.android.car.dialer.ui.search;
import android.app.Application;
-import android.content.Context;
-import android.content.SharedPreferences;
-import android.database.Cursor;
-import android.net.Uri;
-import android.provider.ContactsContract;
import android.text.TextUtils;
import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
-import androidx.lifecycle.MediatorLiveData;
import androidx.lifecycle.MutableLiveData;
import com.android.car.dialer.R;
import com.android.car.dialer.livedata.SharedPreferencesLiveData;
-import com.android.car.dialer.ui.common.entity.ContactSortingInfo;
-import com.android.car.telephony.common.Contact;
-import com.android.car.telephony.common.InMemoryPhoneBook;
-import com.android.car.telephony.common.ObservableAsyncQuery;
-import com.android.car.telephony.common.QueryParam;
+import com.android.car.dialer.ui.common.ContactResultsLiveData;
-import java.util.ArrayList;
-import java.util.Collections;
import java.util.List;
/**
* {link AndroidViewModel} used for search functionality.
*/
public class ContactResultsViewModel extends AndroidViewModel {
- private static final String[] CONTACT_DETAILS_PROJECTION = {
- ContactsContract.Contacts._ID,
- ContactsContract.Contacts.LOOKUP_KEY
- };
private final ContactResultsLiveData mContactSearchResultsLiveData;
private final MutableLiveData<String> mSearchQueryLiveData;
@@ -65,7 +48,10 @@ public class ContactResultsViewModel extends AndroidViewModel {
mSearchQueryLiveData, mSharedPreferencesLiveData);
}
- void setSearchQuery(String searchQuery) {
+ /**
+ * Sets search query.
+ */
+ public void setSearchQuery(String searchQuery) {
if (TextUtils.equals(mSearchQueryLiveData.getValue(), searchQuery)) {
return;
}
@@ -73,105 +59,31 @@ public class ContactResultsViewModel extends AndroidViewModel {
mSearchQueryLiveData.setValue(searchQuery);
}
- LiveData<List<Contact>> getContactSearchResults() {
+ /**
+ * Returns live data of search results.
+ */
+ public LiveData<List<ContactResultsLiveData.ContactResultListItem>> getContactSearchResults() {
return mContactSearchResultsLiveData;
}
- String getSearchQuery() {
+ /**
+ * Returns search query.
+ */
+ public String getSearchQuery() {
return mSearchQueryLiveData.getValue();
}
- private static class ContactResultsLiveData extends MediatorLiveData<List<Contact>> {
- private final Context mContext;
- private final SearchQueryParamProvider mSearchQueryParamProvider;
- private final ObservableAsyncQuery mObservableAsyncQuery;
- private final LiveData<String> mSearchQueryLiveData;
- private final LiveData<List<Contact>> mContactListLiveData;
- private final SharedPreferencesLiveData mSharedPreferencesLiveData;
-
- ContactResultsLiveData(Context context,
- LiveData<String> searchQueryLiveData,
- SharedPreferencesLiveData sharedPreferencesLiveData) {
- mContext = context;
- mSearchQueryParamProvider = new SearchQueryParamProvider(searchQueryLiveData);
- mObservableAsyncQuery = new ObservableAsyncQuery(mSearchQueryParamProvider,
- context.getContentResolver(), this::onQueryFinished);
-
- mContactListLiveData = InMemoryPhoneBook.get().getContactsLiveData();
- addSource(mContactListLiveData, this::onContactsChange);
- mSearchQueryLiveData = searchQueryLiveData;
- addSource(mSearchQueryLiveData, this::onSearchQueryChanged);
-
- mSharedPreferencesLiveData = sharedPreferencesLiveData;
- addSource(mSharedPreferencesLiveData, this::onSortOrderChanged);
- }
-
- private void onContactsChange(List<Contact> contactList) {
- if (contactList == null || contactList.isEmpty()) {
- mObservableAsyncQuery.stopQuery();
- setValue(Collections.emptyList());
- } else {
- onSearchQueryChanged(mSearchQueryLiveData.getValue());
- }
- }
-
- private void onSearchQueryChanged(String searchQuery) {
- if (TextUtils.isEmpty(searchQuery)) {
- mObservableAsyncQuery.stopQuery();
- List<Contact> contacts = mContactListLiveData.getValue();
- setValue(contacts == null ? Collections.emptyList() : contacts);
- } else {
- mObservableAsyncQuery.startQuery();
- }
- }
-
- private void onSortOrderChanged(SharedPreferences unusedSharedPreferences) {
- setValue(getValue());
- }
-
- private void onQueryFinished(@Nullable Cursor cursor) {
- if (cursor == null) {
- setValue(Collections.emptyList());
- return;
- }
-
- List<Contact> contacts = new ArrayList<>();
- while (cursor.moveToNext()) {
- int lookupKeyColIdx = cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY);
- List<Contact> lookupResults = InMemoryPhoneBook.get().lookupContactByKey(
- cursor.getString(lookupKeyColIdx));
- contacts.addAll(lookupResults);
- }
- setValue(contacts);
- cursor.close();
- }
-
- @Override
- public void setValue(List<Contact> contacts) {
- if (contacts != null && !contacts.isEmpty()) {
- Collections.sort(contacts,
- ContactSortingInfo.getSortingInfo(mContext,
- mSharedPreferencesLiveData).first);
- }
- super.setValue(contacts);
- }
+ /**
+ * Returns Search Query LiveData.
+ */
+ public MutableLiveData<String> getSearchQueryLiveData() {
+ return mSearchQueryLiveData;
}
- private static class SearchQueryParamProvider implements QueryParam.Provider {
- private final LiveData<String> mSearchQueryLiveData;
-
- private SearchQueryParamProvider(LiveData<String> searchQueryLiveData) {
- mSearchQueryLiveData = searchQueryLiveData;
- }
-
- @Nullable
- @Override
- public QueryParam getQueryParam() {
- Uri lookupUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_FILTER_URI,
- Uri.encode(mSearchQueryLiveData.getValue()));
- return new QueryParam(lookupUri, CONTACT_DETAILS_PROJECTION,
- ContactsContract.Contacts.HAS_PHONE_NUMBER + "!=0",
- /* selectionArgs= */null, /* orderBy= */null);
- }
+ /**
+ * Returns Shared Preferences LiveData.
+ */
+ public SharedPreferencesLiveData getSharedPreferencesLiveData() {
+ return mSharedPreferencesLiveData;
}
}
diff --git a/src/com/android/car/dialer/widget/LoadingFrameLayout.java b/src/com/android/car/dialer/widget/LoadingFrameLayout.java
index 1011bed2..0f21a478 100644
--- a/src/com/android/car/dialer/widget/LoadingFrameLayout.java
+++ b/src/com/android/car/dialer/widget/LoadingFrameLayout.java
@@ -228,7 +228,7 @@ public class LoadingFrameLayout extends FrameLayout {
if (mState != state) {
L.d(TAG, "Switch to state: %d", state);
// Hides, or shows, all the children, including the loading and error views.
- setChildVisibility(state == State.CONTENT ? View.VISIBLE : View.GONE);
+ ViewUtils.setVisible((View) findViewById(R.id.list_view), state == State.CONTENT);
// Corrects the visibility setting for error and loading views since they are
// shown independently of the views content.
@@ -240,13 +240,6 @@ public class LoadingFrameLayout extends FrameLayout {
}
}
- private void setChildVisibility(int visibility) {
- int childCount = getChildCount();
- for (int i = 0; i < childCount; i++) {
- getChildAt(i).setVisibility(visibility);
- }
- }
-
/**
* Container for views held by this LoadingFrameLayout. Used for deferring view inflation until
* the view is about to be shown.
diff --git a/tests/robotests/res/layout/test_activity.xml b/tests/robotests/res/layout/test_activity.xml
index e7e82916..0bc280cd 100644
--- a/tests/robotests/res/layout/test_activity.xml
+++ b/tests/robotests/res/layout/test_activity.xml
@@ -19,7 +19,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.android.car.ui.toolbar.Toolbar
- android:id="@+id/car_ui_toolbar"
+ android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</FrameLayout>
diff --git a/tests/robotests/src/com/android/car/dialer/telecom/InCallServiceImplTest.java b/tests/robotests/src/com/android/car/dialer/telecom/InCallServiceImplTest.java
index e0d8a489..f4f54b94 100644
--- a/tests/robotests/src/com/android/car/dialer/telecom/InCallServiceImplTest.java
+++ b/tests/robotests/src/com/android/car/dialer/telecom/InCallServiceImplTest.java
@@ -33,9 +33,11 @@ import android.car.CarProjectionManager;
import android.content.Context;
import android.content.Intent;
import android.telecom.Call;
+import android.telecom.CallAudioState;
import com.android.car.dialer.CarDialerRobolectricTestRunner;
import com.android.car.dialer.testutils.ShadowCar;
+import com.android.car.dialer.ui.activecall.InCallActivity;
import org.junit.Before;
import org.junit.Test;
@@ -47,7 +49,9 @@ import org.robolectric.Robolectric;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.android.controller.ServiceController;
import org.robolectric.annotation.Config;
+import org.robolectric.shadows.ShadowApplication;
import org.robolectric.shadows.ShadowContextWrapper;
+import org.robolectric.shadows.ShadowIntent;
import org.robolectric.shadows.ShadowLooper;
/**
@@ -70,7 +74,9 @@ public class InCallServiceImplTest {
@Mock
private Call.Details mMockCallDetails;
@Mock
- private InCallServiceImpl.Callback mCallback;
+ private CallAudioState mMockCallAudioState;
+ @Mock
+ private InCallServiceImpl.CallAudioStateCallback mCallAudioStateCallback;
@Mock
private InCallServiceImpl.ActiveCallListChangedCallback mActiveCallListChangedCallback;
@@ -88,7 +94,6 @@ public class InCallServiceImplTest {
inCallServiceController.create().bind();
mInCallServiceImpl = inCallServiceController.get();
- mInCallServiceImpl.registerCallback(mCallback);
mInCallServiceImpl.addActiveCallListChangedCallback(mActiveCallListChangedCallback);
ShadowLooper.runUiThreadTasksIncludingDelayedTasks();
@@ -102,8 +107,6 @@ public class InCallServiceImplTest {
mInCallServiceImpl.onCallAdded(mMockTelecomCall);
ArgumentCaptor<Call> callCaptor = ArgumentCaptor.forClass(Call.class);
- verify(mCallback).onTelecomCallAdded(callCaptor.capture());
- assertThat(callCaptor.getValue()).isEqualTo(mMockTelecomCall);
verify(mActiveCallListChangedCallback).onTelecomCallAdded(callCaptor.capture());
assertThat(callCaptor.getValue()).isEqualTo(mMockTelecomCall);
@@ -119,8 +122,6 @@ public class InCallServiceImplTest {
mInCallServiceImpl.onCallRemoved(mMockTelecomCall);
ArgumentCaptor<Call> callCaptor = ArgumentCaptor.forClass(Call.class);
- verify(mCallback).onTelecomCallRemoved(callCaptor.capture());
- assertThat(callCaptor.getValue()).isEqualTo(mMockTelecomCall);
verify(mActiveCallListChangedCallback).onTelecomCallRemoved(callCaptor.capture());
assertThat(callCaptor.getValue()).isEqualTo(mMockTelecomCall);
@@ -132,8 +133,6 @@ public class InCallServiceImplTest {
mInCallServiceImpl.onCallAdded(mMockTelecomCall);
ArgumentCaptor<Call> callCaptor = ArgumentCaptor.forClass(Call.class);
- verify(mCallback).onTelecomCallAdded(callCaptor.capture());
- assertThat(callCaptor.getValue()).isEqualTo(mMockTelecomCall);
verify(mActiveCallListChangedCallback).onTelecomCallAdded(callCaptor.capture());
assertThat(callCaptor.getValue()).isEqualTo(mMockTelecomCall);
@@ -148,24 +147,33 @@ public class InCallServiceImplTest {
}
@Test
- public void testUnregisterCallback() {
- mInCallServiceImpl.unregisterCallback(mCallback);
+ public void testRemoveActiveCallListChangedCallback() {
+ mInCallServiceImpl.removeActiveCallListChangedCallback(mActiveCallListChangedCallback);
mInCallServiceImpl.onCallAdded(mMockTelecomCall);
- verify(mCallback, never()).onTelecomCallAdded(any());
+ verify(mActiveCallListChangedCallback, never()).onTelecomCallAdded(any());
mInCallServiceImpl.onCallRemoved(mMockTelecomCall);
- verify(mCallback, never()).onTelecomCallRemoved(any());
+ verify(mActiveCallListChangedCallback, never()).onTelecomCallRemoved(any());
}
@Test
- public void testRemoveActiveCallListChangedCallback() {
- mInCallServiceImpl.removeActiveCallListChangedCallback(mActiveCallListChangedCallback);
+ public void testAddCallAudioStateChangedCallback() {
+ mInCallServiceImpl.addCallAudioStateChangedCallback(mCallAudioStateCallback);
+
+ mInCallServiceImpl.onCallAudioStateChanged(mMockCallAudioState);
+ verify(mCallAudioStateCallback).onCallAudioStateChanged(any());
+ }
+
+ @Test
+ public void testOnBringToForeground() {
+ ShadowApplication shadow = shadowOf(mInCallServiceImpl.getApplication());
mInCallServiceImpl.onCallAdded(mMockTelecomCall);
- verify(mActiveCallListChangedCallback, never()).onTelecomCallAdded(any());
+ mInCallServiceImpl.onBringToForeground(false);
- mInCallServiceImpl.onCallRemoved(mMockTelecomCall);
- verify(mActiveCallListChangedCallback, never()).onTelecomCallRemoved(any());
+ Intent intent = shadow.getNextStartedActivity();
+ ShadowIntent shadowIntent = shadowOf(intent);
+ assertThat(InCallActivity.class).isEqualTo(shadowIntent.getIntentClass());
}
}
diff --git a/tests/robotests/src/com/android/car/dialer/ui/activecall/OnGoingCallControllerBarFragmentTest.java b/tests/robotests/src/com/android/car/dialer/ui/activecall/OnGoingCallControllerBarFragmentTest.java
index 0af882bd..4eaafa7e 100644
--- a/tests/robotests/src/com/android/car/dialer/ui/activecall/OnGoingCallControllerBarFragmentTest.java
+++ b/tests/robotests/src/com/android/car/dialer/ui/activecall/OnGoingCallControllerBarFragmentTest.java
@@ -66,6 +66,7 @@ public class OnGoingCallControllerBarFragmentTest {
private MutableLiveData<CallDetail> mCallDetailLiveData;
private MutableLiveData<Boolean> mDialpadStateLiveData;
private MutableLiveData<List<Call>> mCallListLiveData;
+ private MutableLiveData<CallAudioState> mCallAudioStateLiveData;
private List<Call> mCallList;
@Mock
private Call mMockCall;
@@ -89,6 +90,7 @@ public class OnGoingCallControllerBarFragmentTest {
mCallDetailLiveData = new MutableLiveData<>();
mDialpadStateLiveData = new MutableLiveData<>();
mCallListLiveData = new MutableLiveData<>();
+ mCallAudioStateLiveData = new MutableLiveData<>();
mCallList = new ArrayList<>();
mCallList.add(mMockCall);
mCallListLiveData.setValue(mCallList);
@@ -238,6 +240,7 @@ public class OnGoingCallControllerBarFragmentTest {
when(mMockInCallViewModel.getPrimaryCallState()).thenReturn(mCallStateLiveData);
when(mMockInCallViewModel.getDialpadOpenState()).thenReturn(mDialpadStateLiveData);
when(mMockInCallViewModel.getAllCallList()).thenReturn(mCallListLiveData);
+ when(mMockInCallViewModel.getCallAudioState()).thenReturn(mCallAudioStateLiveData);
MutableLiveData<Integer> audioRouteLiveData = new MutableLiveData<>();
audioRouteLiveData.setValue(CallAudioState.ROUTE_BLUETOOTH);
diff --git a/tests/robotests/src/com/android/car/dialer/ui/calllog/CallHistoryFragmentTest.java b/tests/robotests/src/com/android/car/dialer/ui/calllog/CallHistoryFragmentTest.java
index fa7a8f16..8ada4412 100644
--- a/tests/robotests/src/com/android/car/dialer/ui/calllog/CallHistoryFragmentTest.java
+++ b/tests/robotests/src/com/android/car/dialer/ui/calllog/CallHistoryFragmentTest.java
@@ -21,7 +21,6 @@ import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
-import android.net.Uri;
import android.view.View;
import android.widget.TextView;
@@ -38,6 +37,7 @@ import com.android.car.dialer.testutils.ShadowAndroidViewModelFactory;
import com.android.car.dialer.ui.common.entity.HeaderViewHolder;
import com.android.car.dialer.ui.common.entity.UiCallLog;
import com.android.car.dialer.widget.CallTypeIconsView;
+import com.android.car.telephony.common.Contact;
import com.android.car.telephony.common.InMemoryPhoneBook;
import com.android.car.telephony.common.PhoneCallLog;
import com.android.car.ui.recyclerview.CarUiRecyclerView;
@@ -72,9 +72,9 @@ public class CallHistoryFragmentTest {
@Mock
private UiCallManager mMockUiCallManager;
@Mock
- private Uri mMockUri;
- @Mock
private CallHistoryViewModel mMockCallHistoryViewModel;
+ @Mock
+ private Contact mMockContact;
@Before
public void setup() {
@@ -87,8 +87,8 @@ public class CallHistoryFragmentTest {
CallHistoryLiveData.CallType.INCOMING_TYPE);
PhoneCallLog.Record record2 = new PhoneCallLog.Record(TIME_STAMP_2,
CallHistoryLiveData.CallType.OUTGOING_TYPE);
- UiCallLog uiCallLog = new UiCallLog(UI_CALLOG_TITLE, UI_CALLOG_TEXT, PHONE_NUMBER, null,
- mMockUri, Arrays.asList(record1, record2));
+ UiCallLog uiCallLog = new UiCallLog(UI_CALLOG_TITLE, UI_CALLOG_TEXT, PHONE_NUMBER,
+ mMockContact, Arrays.asList(record1, record2));
MutableLiveData<FutureData<List<Object>>> callLog = new MutableLiveData<>();
callLog.setValue(new FutureData<>(false, Arrays.asList(HEADER, uiCallLog)));
@@ -103,7 +103,7 @@ public class CallHistoryFragmentTest {
CarUiRecyclerView recyclerView = mCallHistoryFragment.getView()
.findViewById(R.id.list_view);
// set up layout for recyclerView
- recyclerView.layoutBothForTesting(0, 0, 100, 1000);
+ recyclerView.layout(0, 0, 100, 1000);
mHeaderViewHolder = recyclerView.findViewHolderForLayoutPosition(0);
mCalllogViewHolder = recyclerView.findViewHolderForLayoutPosition(1);
}
diff --git a/tests/robotests/src/com/android/car/dialer/ui/contact/ContactDetailsFragmentTest.java b/tests/robotests/src/com/android/car/dialer/ui/contact/ContactDetailsFragmentTest.java
index 65f00a7c..40af9a4e 100644
--- a/tests/robotests/src/com/android/car/dialer/ui/contact/ContactDetailsFragmentTest.java
+++ b/tests/robotests/src/com/android/car/dialer/ui/contact/ContactDetailsFragmentTest.java
@@ -116,7 +116,7 @@ public class ContactDetailsFragmentTest {
mListView = mContactDetailsFragment.getView().findViewById(R.id.list_view);
// Set up layout for recyclerView
- mListView.layoutBothForTesting(0, 0, 100, 1000);
+ mListView.layout(0, 0, 100, 1000);
}
/**
diff --git a/tests/robotests/src/com/android/car/dialer/ui/contact/ContactListFragmentTest.java b/tests/robotests/src/com/android/car/dialer/ui/contact/ContactListFragmentTest.java
index 1ae465bd..c5cb8f46 100644
--- a/tests/robotests/src/com/android/car/dialer/ui/contact/ContactListFragmentTest.java
+++ b/tests/robotests/src/com/android/car/dialer/ui/contact/ContactListFragmentTest.java
@@ -216,7 +216,7 @@ public class ContactListFragmentTest {
CarUiRecyclerView recyclerView = mContactListFragment.getView()
.findViewById(R.id.list_view);
//Force RecyclerView to layout to ensure findViewHolderForLayoutPosition works.
- recyclerView.layoutBothForTesting(0, 0, 100, 1000);
+ recyclerView.layout(0, 0, 100, 1000);
mViewHolder = (ContactListViewHolder) recyclerView.findViewHolderForLayoutPosition(0);
}
diff --git a/tests/robotests/src/com/android/car/dialer/ui/dialpad/DialpadFragmentTest.java b/tests/robotests/src/com/android/car/dialer/ui/dialpad/DialpadFragmentTest.java
index 5f7df33d..ae3fb087 100644
--- a/tests/robotests/src/com/android/car/dialer/ui/dialpad/DialpadFragmentTest.java
+++ b/tests/robotests/src/com/android/car/dialer/ui/dialpad/DialpadFragmentTest.java
@@ -28,13 +28,18 @@ import android.view.View;
import android.widget.ImageButton;
import android.widget.TextView;
+import androidx.lifecycle.MutableLiveData;
+
import com.android.car.dialer.CarDialerRobolectricTestRunner;
import com.android.car.dialer.FragmentTestActivity;
import com.android.car.dialer.R;
import com.android.car.dialer.TestDialerApplication;
import com.android.car.dialer.telecom.UiCallManager;
+import com.android.car.dialer.testutils.ShadowAndroidViewModelFactory;
import com.android.car.dialer.testutils.ShadowCallLogCalls;
import com.android.car.dialer.testutils.ShadowInMemoryPhoneBook;
+import com.android.car.dialer.ui.common.ContactResultsLiveData;
+import com.android.car.dialer.ui.search.ContactResultsViewModel;
import com.android.car.telephony.common.Contact;
import com.android.car.telephony.common.InMemoryPhoneBook;
import com.android.car.telephony.common.PhoneNumber;
@@ -51,8 +56,11 @@ import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.shadow.api.Shadow;
+import java.util.List;
+
@RunWith(CarDialerRobolectricTestRunner.class)
-@Config(shadows = {ShadowCallLogCalls.class, ShadowInMemoryPhoneBook.class})
+@Config(shadows = {ShadowCallLogCalls.class, ShadowInMemoryPhoneBook.class,
+ ShadowAndroidViewModelFactory.class})
public class DialpadFragmentTest {
private static final String DIAL_NUMBER = "6505551234";
private static final String DIAL_NUMBER_LONG = "650555123465055512346505551234";
@@ -60,7 +68,12 @@ public class DialpadFragmentTest {
private static final String SPEC_CHAR = "123=_=%^&";
private static final String DISPALY_NAME = "Display Name";
+ private Context mContext;
private DialpadFragment mDialpadFragment;
+ private MutableLiveData<List<ContactResultsLiveData.ContactResultListItem>>
+ mContactResultsLiveData;
+ @Mock
+ private ContactResultsViewModel mMockContactResultsViewModel;
@Mock
private Contact mMockContact;
@@ -68,10 +81,16 @@ public class DialpadFragmentTest {
public void setup() {
MockitoAnnotations.initMocks(this);
- Context context = RuntimeEnvironment.application;
- ((TestDialerApplication) context).setupInCallServiceImpl();
- ((TestDialerApplication) context).initUiCallManager();
- InMemoryPhoneBook.init(context);
+ mContext = RuntimeEnvironment.application;
+ ((TestDialerApplication) mContext).setupInCallServiceImpl();
+ ((TestDialerApplication) mContext).initUiCallManager();
+ InMemoryPhoneBook.init(mContext);
+
+ mContactResultsLiveData = new MutableLiveData<>();
+ when(mMockContactResultsViewModel.getContactSearchResults())
+ .thenReturn(mContactResultsLiveData);
+ ShadowAndroidViewModelFactory.add(
+ ContactResultsViewModel.class, mMockContactResultsViewModel);
}
@After
@@ -212,7 +231,13 @@ public class DialpadFragmentTest {
mDialpadFragment.setDialedNumber(DIAL_NUMBER);
TextView displayName = mDialpadFragment.getView().findViewById(R.id.display_name);
- assertThat(displayName.getText()).isEqualTo(DISPALY_NAME);
+ if (!mContext.getResources().getBoolean(R.bool.config_show_type_down_list_on_dialpad)
+ && mContext.getResources()
+ .getBoolean(R.bool.config_show_type_down_list_on_dialpad)) {
+ assertThat(displayName.getText()).isEqualTo(DISPALY_NAME);
+ } else {
+ assertThat(displayName.getText()).isEqualTo("");
+ }
}
private void startPlaceCallActivity() {
diff --git a/tests/robotests/src/com/android/car/dialer/ui/favorite/FavoriteFragmentTest.java b/tests/robotests/src/com/android/car/dialer/ui/favorite/FavoriteFragmentTest.java
index 5fcb0064..e6c326ee 100644
--- a/tests/robotests/src/com/android/car/dialer/ui/favorite/FavoriteFragmentTest.java
+++ b/tests/robotests/src/com/android/car/dialer/ui/favorite/FavoriteFragmentTest.java
@@ -71,7 +71,7 @@ public class FavoriteFragmentTest {
UiCallManager.set(mMockUiCallManager);
when(mMockPhoneNumber.getRawNumber()).thenReturn(RAW_NUMBER);
- MutableLiveData<FutureData<List<Contact>>> favoriteContacts = new MutableLiveData<>();
+ MutableLiveData<FutureData<List<Object>>> favoriteContacts = new MutableLiveData<>();
favoriteContacts.setValue(new FutureData<>(false, Arrays.asList(mMockContact)));
ShadowAndroidViewModelFactory.add(FavoriteViewModel.class, mMockFavoriteViewModel);
when(mMockFavoriteViewModel.getFavoriteContacts()).thenReturn(favoriteContacts);
@@ -83,7 +83,7 @@ public class FavoriteFragmentTest {
CarUiRecyclerView recyclerView = mFavoriteFragment.getView().findViewById(R.id.list_view);
// set up layout for recyclerView
- recyclerView.layoutBothForTesting(0, 0, 100, 1000);
+ recyclerView.layout(0, 0, 100, 1000);
mViewHolder = (FavoriteContactViewHolder) recyclerView.findViewHolderForLayoutPosition(0);
}
diff --git a/tests/robotests/src/com/android/car/dialer/ui/search/ContactResultsFragmentTest.java b/tests/robotests/src/com/android/car/dialer/ui/search/ContactResultsFragmentTest.java
index 83c8e797..c6f4d1c4 100644
--- a/tests/robotests/src/com/android/car/dialer/ui/search/ContactResultsFragmentTest.java
+++ b/tests/robotests/src/com/android/car/dialer/ui/search/ContactResultsFragmentTest.java
@@ -33,10 +33,12 @@ import com.android.car.dialer.CarDialerRobolectricTestRunner;
import com.android.car.dialer.FragmentTestActivity;
import com.android.car.dialer.R;
import com.android.car.dialer.testutils.ShadowAndroidViewModelFactory;
+import com.android.car.dialer.ui.common.ContactResultsLiveData;
import com.android.car.dialer.ui.contact.ContactDetailsFragment;
import com.android.car.dialer.ui.contact.ContactDetailsViewModel;
import com.android.car.telephony.common.Contact;
import com.android.car.telephony.common.InMemoryPhoneBook;
+import com.android.car.telephony.common.PhoneNumber;
import com.android.car.ui.recyclerview.CarUiRecyclerView;
import org.junit.After;
@@ -50,6 +52,7 @@ import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
@Config(shadows = {ShadowAndroidViewModelFactory.class})
@@ -62,15 +65,19 @@ public class ContactResultsFragmentTest {
private ContactResultsFragment mContactResultsFragment;
private FragmentTestActivity mFragmentTestActivity;
private CarUiRecyclerView mListView;
- private MutableLiveData<List<Contact>> mContactSearchResultsLiveData;
+ private MutableLiveData<List<ContactResultsLiveData.ContactResultListItem>>
+ mContactSearchResultsLiveData;
@Mock
private ContactResultsViewModel mMockContactResultsViewModel;
@Mock
private ContactDetailsViewModel mMockContactDetailsViewModel;
@Mock
- private Contact mMockContact;
+ private Contact mMockContact, mContact1, mContact2, mContact3;
@Mock
- private Contact mContact1, mContact2, mContact3;
+ private ContactResultsLiveData.ContactResultListItem mContactResult1, mContactResult2,
+ mContactResult3;
+ @Mock
+ private PhoneNumber mPhoneNumber;
@Before
public void setUp() {
@@ -83,9 +90,15 @@ public class ContactResultsFragmentTest {
ShadowAndroidViewModelFactory.add(
ContactResultsViewModel.class, mMockContactResultsViewModel);
+ when(mContactResult1.getContact()).thenReturn(mContact1);
when(mContact1.getDisplayName()).thenReturn(DISPLAY_NAMES[0]);
+ when(mContact1.getNumbers()).thenReturn(Collections.singletonList(mPhoneNumber));
+ when(mContactResult2.getContact()).thenReturn(mContact2);
when(mContact2.getDisplayName()).thenReturn(DISPLAY_NAMES[1]);
+ when(mContact2.getNumbers()).thenReturn(Collections.singletonList(mPhoneNumber));
+ when(mContactResult3.getContact()).thenReturn(mContact3);
when(mContact3.getDisplayName()).thenReturn(DISPLAY_NAMES[2]);
+ when(mContact3.getNumbers()).thenReturn(Collections.singletonList(mPhoneNumber));
}
@After
@@ -104,7 +117,7 @@ public class ContactResultsFragmentTest {
@Test
public void testDisplaySearchResults_multipleResults() {
mContactSearchResultsLiveData.setValue(
- Arrays.asList(mContact1, mContact2, mContact3));
+ Arrays.asList(mContactResult1, mContactResult2, mContactResult3));
mContactResultsFragment = ContactResultsFragment.newInstance(INITIAL_SEARCH_QUERY);
setUpFragment();
@@ -117,7 +130,7 @@ public class ContactResultsFragmentTest {
@Test
public void testClickSearchResult_showContactDetailPage() {
mContactSearchResultsLiveData.setValue(
- Arrays.asList(mContact1, mContact2, mContact3));
+ Arrays.asList(mContactResult1, mContactResult2, mContactResult3));
MutableLiveData<FutureData<Contact>> contactDetailLiveData = new MutableLiveData<>();
contactDetailLiveData.setValue(new FutureData<>(false, mMockContact));
@@ -143,7 +156,7 @@ public class ContactResultsFragmentTest {
mListView = mContactResultsFragment.getView().findViewById(R.id.list_view);
// Set up layout for recyclerView
- mListView.layoutBothForTesting(0, 0, 100, 1000);
+ mListView.layout(0, 0, 100, 1000);
}
private void verifyChildAt(int position) {