diff options
99 files changed, 575 insertions, 14 deletions
diff --git a/Android.bp b/Android.bp index de9041260..36923ab74 100644 --- a/Android.bp +++ b/Android.bp @@ -25,6 +25,7 @@ android_app { srcs: [ "src/**/*.java", + "src/**/*.kt", "src-bind/**/*.java", ], diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 0bd96cda7..66d5767f1 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -20,14 +20,15 @@ android:versionName="1.7.34"> <uses-sdk - android:minSdkVersion="33" - android:targetSdkVersion="33"/> + android:minSdkVersion="34" + android:targetSdkVersion="34"/> <original-package android:name="com.android.contacts"/> <!-- Contacts permission listed first because order determines order that permissions are requested with some OEMs --> <uses-permission android:name="android.permission.READ_CONTACTS"/> + <uses-permission android:name="android.permission.READ_CALL_LOG"/> <uses-permission android:name="android.permission.WRITE_CONTACTS"/> <uses-permission android:name="android.permission.GET_ACCOUNTS"/> <uses-permission android:name="android.permission.GET_ACCOUNTS_PRIVILEGED"/> @@ -56,6 +57,8 @@ <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/> <uses-permission android:name="android.permission.HIDE_OVERLAY_WINDOWS" /> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> + <!-- Required in U to run Service.startForeground() under DATA_SYNC type --> + <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC"/> <uses-feature android:name="android.hardware.telephony" @@ -630,6 +633,17 @@ android:name="android.nfc.disable_beam_default" android:value="true"/> + <provider + android:name="com.android.contacts.sdn.SdnProvider" + android:authorities="@string/contacts_sdn_provider_authority" + android:enabled="true" + android:exported="true" + android:readPermission="android.permission.BIND_DIRECTORY_SEARCH"> + <meta-data + android:name="android.content.ContactDirectory" + android:value="true" /> + </provider> + </application> <!-- Allows the contacts app to see the activities and services needed diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml index 1642b8214..ae0b78907 100644 --- a/res/values-af/strings.xml +++ b/res/values-af/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Kennisgewings"</string> <string name="yes_button" msgid="1120514817091581293">"Ja"</string> <string name="no_button" msgid="8965841385742548947">"Nee"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Diensverskafferdiensnommers"</string> </resources> diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml index 03a8fab4a..ddf5208fa 100644 --- a/res/values-am/strings.xml +++ b/res/values-am/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"ማሳወቂያዎች"</string> <string name="yes_button" msgid="1120514817091581293">"አዎ"</string> <string name="no_button" msgid="8965841385742548947">"አይ"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"የአገልግሎት አቅራቢ አገልግሎት ቁጥሮች"</string> </resources> diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml index 0e830e9d6..c5d57d42a 100644 --- a/res/values-ar/strings.xml +++ b/res/values-ar/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"الإشعارات"</string> <string name="yes_button" msgid="1120514817091581293">"نعم"</string> <string name="no_button" msgid="8965841385742548947">"لا"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"أرقام خدمات مشغّلي شبكة الجوّال"</string> </resources> diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml index 18c168466..0c5ccfe01 100644 --- a/res/values-as/strings.xml +++ b/res/values-as/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"জাননীসমূহ"</string> <string name="yes_button" msgid="1120514817091581293">"হয়"</string> <string name="no_button" msgid="8965841385742548947">"নহয়"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"বাহকৰ সেৱাৰ নম্বৰ"</string> </resources> diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml index fc47eb1ec..f56c54a19 100644 --- a/res/values-az/strings.xml +++ b/res/values-az/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Bildirişlər"</string> <string name="yes_button" msgid="1120514817091581293">"Hə"</string> <string name="no_button" msgid="8965841385742548947">"Yox"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Operatorun xidmət nömrələri"</string> </resources> diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml index a976a43cc..bb238654a 100644 --- a/res/values-b+sr+Latn/strings.xml +++ b/res/values-b+sr+Latn/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Obaveštenja"</string> <string name="yes_button" msgid="1120514817091581293">"Da"</string> <string name="no_button" msgid="8965841385742548947">"Ne"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Uslužni brojevi mobilnog operatera"</string> </resources> diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml index fdf507840..5aaf75118 100644 --- a/res/values-be/strings.xml +++ b/res/values-be/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Апавяшчэнні"</string> <string name="yes_button" msgid="1120514817091581293">"Так"</string> <string name="no_button" msgid="8965841385742548947">"Не"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Сэрвісныя нумары аператара"</string> </resources> diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml index 157236ebb..1ca635bb8 100644 --- a/res/values-bg/strings.xml +++ b/res/values-bg/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Известия"</string> <string name="yes_button" msgid="1120514817091581293">"Да"</string> <string name="no_button" msgid="8965841385742548947">"Не"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Номера за обслужване от оператора"</string> </resources> diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml index 9e2c69644..e974eae06 100644 --- a/res/values-bn/strings.xml +++ b/res/values-bn/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"বিজ্ঞপ্তি"</string> <string name="yes_button" msgid="1120514817091581293">"হ্যাঁ"</string> <string name="no_button" msgid="8965841385742548947">"না"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"পরিষেবা প্রদানকারীর অপারেটরের নম্বর"</string> </resources> diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml index 937dac036..f9f4af660 100644 --- a/res/values-bs/strings.xml +++ b/res/values-bs/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Obavještenja"</string> <string name="yes_button" msgid="1120514817091581293">"Da"</string> <string name="no_button" msgid="8965841385742548947">"Ne"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Uslužni brojevi mobilnog operatera"</string> </resources> diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index a301de061..853646095 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Notificacions"</string> <string name="yes_button" msgid="1120514817091581293">"Sí"</string> <string name="no_button" msgid="8965841385742548947">"No"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Números de servei de l\'operador"</string> </resources> diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml index f59107fef..6d2480e2e 100644 --- a/res/values-cs/strings.xml +++ b/res/values-cs/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Oznámení"</string> <string name="yes_button" msgid="1120514817091581293">"Ano"</string> <string name="no_button" msgid="8965841385742548947">"Ne"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Čísla služeb operátorů"</string> </resources> diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml index 32c126eca..730dcf50e 100644 --- a/res/values-da/strings.xml +++ b/res/values-da/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Notifikationer"</string> <string name="yes_button" msgid="1120514817091581293">"Ja"</string> <string name="no_button" msgid="8965841385742548947">"Nej"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Mobilselskabs servicenumre"</string> </resources> diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 99820d17c..f65caada5 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Benachrichtigungen"</string> <string name="yes_button" msgid="1120514817091581293">"Ja"</string> <string name="no_button" msgid="8965841385742548947">"Nein"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Servicenummern des Mobilfunkanbieters"</string> </resources> diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml index bc1826cd8..f4c70d936 100644 --- a/res/values-el/strings.xml +++ b/res/values-el/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Ειδοποιήσεις"</string> <string name="yes_button" msgid="1120514817091581293">"Ναι"</string> <string name="no_button" msgid="8965841385742548947">"Όχι"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Αριθμοί εταιρείας κινητής τηλεφωνίας"</string> </resources> diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml index 26c26f44c..53ba4969d 100644 --- a/res/values-en-rAU/strings.xml +++ b/res/values-en-rAU/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Notifications"</string> <string name="yes_button" msgid="1120514817091581293">"Yes"</string> <string name="no_button" msgid="8965841385742548947">"No"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Operator service numbers"</string> </resources> diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml index 7a2e95e65..579ad6111 100644 --- a/res/values-en-rCA/strings.xml +++ b/res/values-en-rCA/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Notifications"</string> <string name="yes_button" msgid="1120514817091581293">"Yes"</string> <string name="no_button" msgid="8965841385742548947">"No"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Carrier service numbers"</string> </resources> diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml index 26c26f44c..53ba4969d 100644 --- a/res/values-en-rGB/strings.xml +++ b/res/values-en-rGB/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Notifications"</string> <string name="yes_button" msgid="1120514817091581293">"Yes"</string> <string name="no_button" msgid="8965841385742548947">"No"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Operator service numbers"</string> </resources> diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml index 26c26f44c..53ba4969d 100644 --- a/res/values-en-rIN/strings.xml +++ b/res/values-en-rIN/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Notifications"</string> <string name="yes_button" msgid="1120514817091581293">"Yes"</string> <string name="no_button" msgid="8965841385742548947">"No"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Operator service numbers"</string> </resources> diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml index b5dc95201..b87d76827 100644 --- a/res/values-en-rXC/strings.xml +++ b/res/values-en-rXC/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Notifications"</string> <string name="yes_button" msgid="1120514817091581293">"Yes"</string> <string name="no_button" msgid="8965841385742548947">"No"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Carrier service numbers"</string> </resources> diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index 5135ef492..11bbacd78 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Notificaciones."</string> <string name="yes_button" msgid="1120514817091581293">"Sí"</string> <string name="no_button" msgid="8965841385742548947">"No"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Números de servicio del operador"</string> </resources> diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 8f316e831..b79c8485e 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Notificaciones"</string> <string name="yes_button" msgid="1120514817091581293">"Sí"</string> <string name="no_button" msgid="8965841385742548947">"No"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Números de servicios del operador"</string> </resources> diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml index 0f52a2360..e770e490d 100644 --- a/res/values-et/strings.xml +++ b/res/values-et/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Märguanded"</string> <string name="yes_button" msgid="1120514817091581293">"Jah"</string> <string name="no_button" msgid="8965841385742548947">"Ei"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Operaatori klienditeeninduse numbrid"</string> </resources> diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml index 85aadbfbe..df7f2f5be 100644 --- a/res/values-eu/strings.xml +++ b/res/values-eu/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Jakinarazpenak"</string> <string name="yes_button" msgid="1120514817091581293">"Bai"</string> <string name="no_button" msgid="8965841385742548947">"Ez"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Operadorearen zerbitzu-zenbakiak"</string> </resources> diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index 0dd668d0e..55fd8a8bf 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"اعلانها"</string> <string name="yes_button" msgid="1120514817091581293">"بله"</string> <string name="no_button" msgid="8965841385742548947">"نه"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"شمارههای سرویس شرکت مخابراتی"</string> </resources> diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml index 7f24eb3bf..d3176e6af 100644 --- a/res/values-fi/strings.xml +++ b/res/values-fi/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Ilmoitukset"</string> <string name="yes_button" msgid="1120514817091581293">"Kyllä"</string> <string name="no_button" msgid="8965841385742548947">"Ei"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Operaattorin palvelunumerot"</string> </resources> diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml index 021f981de..e051d638b 100644 --- a/res/values-fr-rCA/strings.xml +++ b/res/values-fr-rCA/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Avis"</string> <string name="yes_button" msgid="1120514817091581293">"Oui"</string> <string name="no_button" msgid="8965841385742548947">"Non"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Numéros de service du fournisseur"</string> </resources> diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml index 83cd25668..b89339951 100644 --- a/res/values-fr/strings.xml +++ b/res/values-fr/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Notifications"</string> <string name="yes_button" msgid="1120514817091581293">"Oui"</string> <string name="no_button" msgid="8965841385742548947">"Non"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Numéros de service de l\'opérateur"</string> </resources> diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml index f1d8c95a3..2188631da 100644 --- a/res/values-gl/strings.xml +++ b/res/values-gl/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Notificacións"</string> <string name="yes_button" msgid="1120514817091581293">"Si"</string> <string name="no_button" msgid="8965841385742548947">"Non"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Números de servizo do operador"</string> </resources> diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml index 47fce4d19..b95886fe7 100644 --- a/res/values-gu/strings.xml +++ b/res/values-gu/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"સૂચનાઓ"</string> <string name="yes_button" msgid="1120514817091581293">"હા"</string> <string name="no_button" msgid="8965841385742548947">"ના"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"મોબાઇલ ઑપરેટરના ફોન નંબર"</string> </resources> diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index 268493f73..e705659b3 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"सूचनाएं"</string> <string name="yes_button" msgid="1120514817091581293">"हां"</string> <string name="no_button" msgid="8965841385742548947">"नहीं"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"मोबाइल और इंटरनेट सेवा वाली कंपनी के नंबर"</string> </resources> diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml index 65578125c..aa85f37e7 100644 --- a/res/values-hr/strings.xml +++ b/res/values-hr/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Obavijesti"</string> <string name="yes_button" msgid="1120514817091581293">"Da"</string> <string name="no_button" msgid="8965841385742548947">"Ne"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Servisni brojevi operatera"</string> </resources> diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml index 3d562b765..75d0cc7c9 100644 --- a/res/values-hu/strings.xml +++ b/res/values-hu/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Értesítések"</string> <string name="yes_button" msgid="1120514817091581293">"Igen"</string> <string name="no_button" msgid="8965841385742548947">"Nem"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Szolgáltatói számok"</string> </resources> diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml index 9762b8c1d..2c8097080 100644 --- a/res/values-hy/strings.xml +++ b/res/values-hy/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Ծանուցումներ"</string> <string name="yes_button" msgid="1120514817091581293">"Այո"</string> <string name="no_button" msgid="8965841385742548947">"Ոչ"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Օպերատորի ծառայության հեռախոսահամարներ"</string> </resources> diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index 731f79a44..aeaa7a147 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Notifikasi"</string> <string name="yes_button" msgid="1120514817091581293">"Ya"</string> <string name="no_button" msgid="8965841385742548947">"Tidak"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Nomor layanan operator"</string> </resources> diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml index 87cb54eac..73a167c23 100644 --- a/res/values-is/strings.xml +++ b/res/values-is/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Tilkynningar"</string> <string name="yes_button" msgid="1120514817091581293">"Já"</string> <string name="no_button" msgid="8965841385742548947">"Nei"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Þjónustunúmer símafyrirtækis"</string> </resources> diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index 7517bda24..d6a94a4b8 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Notifiche"</string> <string name="yes_button" msgid="1120514817091581293">"Sì"</string> <string name="no_button" msgid="8965841385742548947">"No"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Numeri di servizio degli operatori"</string> </resources> diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml index cdefb2e4b..b1d0300fe 100644 --- a/res/values-iw/strings.xml +++ b/res/values-iw/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"הודעות"</string> <string name="yes_button" msgid="1120514817091581293">"כן"</string> <string name="no_button" msgid="8965841385742548947">"לא"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"מספרי השירות של ספק הסלולר"</string> </resources> diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml index 7d7cac5e7..a5d50d24c 100644 --- a/res/values-ja/strings.xml +++ b/res/values-ja/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"通知"</string> <string name="yes_button" msgid="1120514817091581293">"はい"</string> <string name="no_button" msgid="8965841385742548947">"いいえ"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"携帯通信会社のサービス番号"</string> </resources> diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml index 2a2152ec0..d6a3fcb8f 100644 --- a/res/values-ka/strings.xml +++ b/res/values-ka/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"შეტყობინებები"</string> <string name="yes_button" msgid="1120514817091581293">"დიახ"</string> <string name="no_button" msgid="8965841385742548947">"არა"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"ოპერატორის სერვისის ნომრები"</string> </resources> diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml index 4563946e3..4ef74c7ca 100644 --- a/res/values-kk/strings.xml +++ b/res/values-kk/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Хабарландырулар"</string> <string name="yes_button" msgid="1120514817091581293">"Иә"</string> <string name="no_button" msgid="8965841385742548947">"Жоқ"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Оператордың қызмет көрсету нөмірлері"</string> </resources> diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml index b788464ca..9543cdbf5 100644 --- a/res/values-km/strings.xml +++ b/res/values-km/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"ការជូនដំណឹង"</string> <string name="yes_button" msgid="1120514817091581293">"បាទ/ចាស"</string> <string name="no_button" msgid="8965841385742548947">"ទេ"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"លេខក្រុមហ៊ុនសេវាទូរសព្ទ"</string> </resources> diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml index dd5390f3f..d47421c63 100644 --- a/res/values-kn/strings.xml +++ b/res/values-kn/strings.xml @@ -84,8 +84,8 @@ <string name="deleteConfirmation" msgid="3727809366015979585">"ಈ ಸಂಪರ್ಕವನ್ನು ಅಳಿಸುವುದೇ?"</string> <string name="deleteConfirmation_positive_button" msgid="1604511403421785160">"ಅಳಿಸಿ"</string> <string name="invalidContactMessage" msgid="6204402264821083362">"ಸಂಪರ್ಕವು ಅಸ್ತಿತ್ವದಲ್ಲಿಲ್ಲ."</string> - <string name="createContactShortcutSuccessful_NoName" msgid="532242135930208299">"ಸಂಪರ್ಕವನ್ನು ಹೋಮ್ ಸ್ಕ್ರೀನ್ಗೆ ಸೇರಿಸಲಾಗಿದೆ."</string> - <string name="createContactShortcutSuccessful" msgid="6980032407920515698">"<xliff:g id="NAME">%s</xliff:g> ಅನ್ನು ಹೋಮ್ ಸ್ಕ್ರೀನ್ಗೆ ಸೇರಿಸಲಾಗಿದೆ."</string> + <string name="createContactShortcutSuccessful_NoName" msgid="532242135930208299">"ಸಂಪರ್ಕವನ್ನು ಮುಖಪುಟ ಪರದೆಗೆ ಸೇರಿಸಲಾಗಿದೆ."</string> + <string name="createContactShortcutSuccessful" msgid="6980032407920515698">"<xliff:g id="NAME">%s</xliff:g> ಅನ್ನು ಮುಖಪುಟ ಪರದೆಗೆ ಸೇರಿಸಲಾಗಿದೆ."</string> <string name="photoPickerNotFoundText" msgid="6535222297923110991">"ಸಾಧನದಲ್ಲಿ ಯಾವುದೇ ಚಿತ್ರಗಳು ಲಭ್ಯವಿಲ್ಲ."</string> <string name="attach_photo_dialog_title" msgid="7948754072673745235">"ಸಂಪರ್ಕ ಫೋಟೋ"</string> <string name="customLabelPickerTitle" msgid="816694850254307154">"ಕಸ್ಟಮ್ ಲೇಬಲ್ ಹೆಸರು"</string> @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"ಅಧಿಸೂಚನೆಗಳು"</string> <string name="yes_button" msgid="1120514817091581293">"ಹೌದು"</string> <string name="no_button" msgid="8965841385742548947">"ಇಲ್ಲ"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"ವಾಹಕ ಸೇವೆಗಳ ಸಂಖ್ಯೆಗಳು"</string> </resources> diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml index 5554707a2..0cc708fae 100644 --- a/res/values-ko/strings.xml +++ b/res/values-ko/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"알림"</string> <string name="yes_button" msgid="1120514817091581293">"예"</string> <string name="no_button" msgid="8965841385742548947">"아니요"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"이동통신사 서비스 전화번호"</string> </resources> diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml index 990f24e2e..bb9aacf14 100644 --- a/res/values-ky/strings.xml +++ b/res/values-ky/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Билдирмелер"</string> <string name="yes_button" msgid="1120514817091581293">"Ооба"</string> <string name="no_button" msgid="8965841385742548947">"Жок"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Оператордун кызмат номерлери"</string> </resources> diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml index 3af69d83d..4e67e81d1 100644 --- a/res/values-lo/strings.xml +++ b/res/values-lo/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"ການແຈ້ງເຕືອນ"</string> <string name="yes_button" msgid="1120514817091581293">"ແມ່ນ"</string> <string name="no_button" msgid="8965841385742548947">"ບໍ່"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"ໝາຍເລກບໍລິການຂອງຜູ້ໃຫ້ບໍລິການ"</string> </resources> diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml index ab8972ec4..2913fbcdc 100644 --- a/res/values-lt/strings.xml +++ b/res/values-lt/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Pranešimai"</string> <string name="yes_button" msgid="1120514817091581293">"Taip"</string> <string name="no_button" msgid="8965841385742548947">"Ne"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Operatoriaus paslaugų numeriai"</string> </resources> diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml index f7406b4f9..dcad525e7 100644 --- a/res/values-lv/strings.xml +++ b/res/values-lv/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Paziņojumi"</string> <string name="yes_button" msgid="1120514817091581293">"Jā"</string> <string name="no_button" msgid="8965841385742548947">"Nē"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Operatora dienesta tālruņa numuri"</string> </resources> diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml index 1124e116c..ee154db78 100644 --- a/res/values-mk/strings.xml +++ b/res/values-mk/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Известувања"</string> <string name="yes_button" msgid="1120514817091581293">"Да"</string> <string name="no_button" msgid="8965841385742548947">"Не"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Броеви за услуги на операторот"</string> </resources> diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml index 02e4bc6ca..dff410a65 100644 --- a/res/values-ml/strings.xml +++ b/res/values-ml/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"അറിയിപ്പുകൾ"</string> <string name="yes_button" msgid="1120514817091581293">"അതെ"</string> <string name="no_button" msgid="8965841385742548947">"ഇല്ല"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Carrier Service നമ്പറുകൾ"</string> </resources> diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml index 6de8f8a4b..d8b5f4735 100644 --- a/res/values-mn/strings.xml +++ b/res/values-mn/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Мэдэгдэл"</string> <string name="yes_button" msgid="1120514817091581293">"Тийм"</string> <string name="no_button" msgid="8965841385742548947">"Үгүй"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Оператор компанийн үйлчилгээний дугаар"</string> </resources> diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml index ac6594150..3f34d9271 100644 --- a/res/values-mr/strings.xml +++ b/res/values-mr/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"सूचना"</string> <string name="yes_button" msgid="1120514817091581293">"होय"</string> <string name="no_button" msgid="8965841385742548947">"नाही"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"वाहक सेवा नंबर"</string> </resources> diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml index 4941c4c17..6b0163785 100644 --- a/res/values-ms/strings.xml +++ b/res/values-ms/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Pemberitahuan"</string> <string name="yes_button" msgid="1120514817091581293">"Ya"</string> <string name="no_button" msgid="8965841385742548947">"Tidak"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Nombor perkhidmatan operator"</string> </resources> diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml index b8dfd3a45..cfee3665c 100644 --- a/res/values-my/strings.xml +++ b/res/values-my/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"အကြောင်းကြားချက်များ"</string> <string name="yes_button" msgid="1120514817091581293">"Yes"</string> <string name="no_button" msgid="8965841385742548947">"No"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"မိုဘိုင်းဖုန်းကုမ္ပဏီနံပါတ်များ"</string> </resources> diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index 017fbf6d2..6ea2fea20 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Varsler"</string> <string name="yes_button" msgid="1120514817091581293">"Ja"</string> <string name="no_button" msgid="8965841385742548947">"Nei"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Operatørtjenestenumre"</string> </resources> diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml index ba033aa24..caed805d7 100644 --- a/res/values-ne/strings.xml +++ b/res/values-ne/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"सूचनाहरू"</string> <string name="yes_button" msgid="1120514817091581293">"हुन्छ"</string> <string name="no_button" msgid="8965841385742548947">"हुँदैन"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"मोबाइल सेवा प्रदायकका सर्भिस नम्बरहरू"</string> </resources> diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index d19567af8..c703deb41 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Meldingen"</string> <string name="yes_button" msgid="1120514817091581293">"Ja"</string> <string name="no_button" msgid="8965841385742548947">"Nee"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Providerservicenummers"</string> </resources> diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml index 90da0468d..127af0bb4 100644 --- a/res/values-or/strings.xml +++ b/res/values-or/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"ବିଜ୍ଞପ୍ତି"</string> <string name="yes_button" msgid="1120514817091581293">"ହଁ"</string> <string name="no_button" msgid="8965841385742548947">"ନାହିଁ"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"କ୍ୟାରିଅର୍ ସେବା ନମ୍ବର"</string> </resources> diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml index 790bec692..7a73e5ef6 100644 --- a/res/values-pa/strings.xml +++ b/res/values-pa/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"ਸੂਚਨਾਵਾਂ"</string> <string name="yes_button" msgid="1120514817091581293">"ਹਾਂ"</string> <string name="no_button" msgid="8965841385742548947">"ਨਹੀਂ"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"ਕੈਰੀਅਰ ਸੇਵਾ ਨੰਬਰ"</string> </resources> diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index b179715ad..92e3c110d 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Powiadomienia"</string> <string name="yes_button" msgid="1120514817091581293">"Tak"</string> <string name="no_button" msgid="8965841385742548947">"Nie"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Numery obsługi klienta u operatora"</string> </resources> diff --git a/res/values-pt-rBR/strings.xml b/res/values-pt-rBR/strings.xml index a39207b19..046d2389b 100644 --- a/res/values-pt-rBR/strings.xml +++ b/res/values-pt-rBR/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Notificações"</string> <string name="yes_button" msgid="1120514817091581293">"Sim"</string> <string name="no_button" msgid="8965841385742548947">"Não"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Números de serviço da operadora"</string> </resources> diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index 2fb9814e0..5d52e4b14 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Notificações"</string> <string name="yes_button" msgid="1120514817091581293">"Sim"</string> <string name="no_button" msgid="8965841385742548947">"Não"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Números de serviço do operador"</string> </resources> diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml index a39207b19..046d2389b 100644 --- a/res/values-pt/strings.xml +++ b/res/values-pt/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Notificações"</string> <string name="yes_button" msgid="1120514817091581293">"Sim"</string> <string name="no_button" msgid="8965841385742548947">"Não"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Números de serviço da operadora"</string> </resources> diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml index 3f29e11d1..5f80c46de 100644 --- a/res/values-ro/strings.xml +++ b/res/values-ro/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Notificări"</string> <string name="yes_button" msgid="1120514817091581293">"Da"</string> <string name="no_button" msgid="8965841385742548947">"Nu"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Numere pentru servicii ale operatorului"</string> </resources> diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml index ccfdcd340..ddd7c72e8 100644 --- a/res/values-ru/strings.xml +++ b/res/values-ru/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Уведомления"</string> <string name="yes_button" msgid="1120514817091581293">"Да"</string> <string name="no_button" msgid="8965841385742548947">"Нет"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Сервисные номера оператора"</string> </resources> diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml index af04fa20b..c578fd482 100644 --- a/res/values-si/strings.xml +++ b/res/values-si/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"දැනුම් දීම්"</string> <string name="yes_button" msgid="1120514817091581293">"ඔව්"</string> <string name="no_button" msgid="8965841385742548947">"නැත"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"වාහක සේවා අංක"</string> </resources> diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml index 8ec536940..be5af84b4 100644 --- a/res/values-sk/strings.xml +++ b/res/values-sk/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Upozornenia"</string> <string name="yes_button" msgid="1120514817091581293">"Áno"</string> <string name="no_button" msgid="8965841385742548947">"Nie"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Služobné čísla operátorov"</string> </resources> diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml index 1c5c3d3eb..399bce5f8 100644 --- a/res/values-sl/strings.xml +++ b/res/values-sl/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Obvestila"</string> <string name="yes_button" msgid="1120514817091581293">"Da"</string> <string name="no_button" msgid="8965841385742548947">"Ne"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Operaterjeve številke za storitve"</string> </resources> diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml index c92cd3753..08432280f 100644 --- a/res/values-sq/strings.xml +++ b/res/values-sq/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Njoftime"</string> <string name="yes_button" msgid="1120514817091581293">"Po"</string> <string name="no_button" msgid="8965841385742548947">"Jo"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Numrat e shërbimit të operatorit celular"</string> </resources> diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml index f1558accf..7b1e0c70c 100644 --- a/res/values-sr/strings.xml +++ b/res/values-sr/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Обавештења"</string> <string name="yes_button" msgid="1120514817091581293">"Да"</string> <string name="no_button" msgid="8965841385742548947">"Не"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Услужни бројеви мобилног оператера"</string> </resources> diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 057492cfc..9499a957e 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Meddelanden"</string> <string name="yes_button" msgid="1120514817091581293">"Ja"</string> <string name="no_button" msgid="8965841385742548947">"Nej"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Operatörens tjänstenummer"</string> </resources> diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml index ba2b71a4e..8e4a1582b 100644 --- a/res/values-sw/strings.xml +++ b/res/values-sw/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Arifa"</string> <string name="yes_button" msgid="1120514817091581293">"Ndiyo"</string> <string name="no_button" msgid="8965841385742548947">"La"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Nambari za mtoa huduma"</string> </resources> diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml index ae2829ab7..0f81b401b 100644 --- a/res/values-ta/strings.xml +++ b/res/values-ta/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"அறிவிப்புகள்"</string> <string name="yes_button" msgid="1120514817091581293">"ஆம்"</string> <string name="no_button" msgid="8965841385742548947">"இல்லை"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"மொபைல் நிறுவனத்தின் சேவை எண்கள்"</string> </resources> diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml index a65218de7..057f809ef 100644 --- a/res/values-te/strings.xml +++ b/res/values-te/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"నోటిఫికేషన్లు"</string> <string name="yes_button" msgid="1120514817091581293">"అవును"</string> <string name="no_button" msgid="8965841385742548947">"కాదు"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"క్యారియర్ సర్వీస్ నంబర్లు"</string> </resources> diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml index 4b6dbfa41..455831d3c 100644 --- a/res/values-th/strings.xml +++ b/res/values-th/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"การแจ้งเตือน"</string> <string name="yes_button" msgid="1120514817091581293">"ใช่"</string> <string name="no_button" msgid="8965841385742548947">"ไม่"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"หมายเลขบริการของผู้ให้บริการ"</string> </resources> diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml index d2e453150..9b67c947d 100644 --- a/res/values-tl/strings.xml +++ b/res/values-tl/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Mga Notification"</string> <string name="yes_button" msgid="1120514817091581293">"Oo"</string> <string name="no_button" msgid="8965841385742548947">"Hindi"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Mga numero ng serbisyo ng carrier"</string> </resources> diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml index 3f74c8944..98a87be83 100644 --- a/res/values-tr/strings.xml +++ b/res/values-tr/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Bildirimler"</string> <string name="yes_button" msgid="1120514817091581293">"Evet"</string> <string name="no_button" msgid="8965841385742548947">"Hayır"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Operatör hizmet numaraları"</string> </resources> diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml index 43a099a6e..38aa8b7ef 100644 --- a/res/values-uk/strings.xml +++ b/res/values-uk/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Сповіщення"</string> <string name="yes_button" msgid="1120514817091581293">"Так"</string> <string name="no_button" msgid="8965841385742548947">"Ні"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Сервісні номери оператора"</string> </resources> diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml index 3ba641b61..3262dc441 100644 --- a/res/values-ur/strings.xml +++ b/res/values-ur/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"اطلاعات"</string> <string name="yes_button" msgid="1120514817091581293">"ہاں"</string> <string name="no_button" msgid="8965841385742548947">"نہیں"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"کیرئیر سروس نمبرز"</string> </resources> diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml index 4cfcc204a..9ebea9419 100644 --- a/res/values-uz/strings.xml +++ b/res/values-uz/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Bildirishnomalar"</string> <string name="yes_button" msgid="1120514817091581293">"Ha"</string> <string name="no_button" msgid="8965841385742548947">"Yo‘q"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Operator xizmat raqamlari"</string> </resources> diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml index 7c1c724cf..3ffa0d88d 100644 --- a/res/values-vi/strings.xml +++ b/res/values-vi/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Thông báo"</string> <string name="yes_button" msgid="1120514817091581293">"Có"</string> <string name="no_button" msgid="8965841385742548947">"Không"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Số dịch vụ của nhà mạng"</string> </resources> diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index 55c18bed4..cd687b9c5 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"通知"</string> <string name="yes_button" msgid="1120514817091581293">"是"</string> <string name="no_button" msgid="8965841385742548947">"否"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"运营商服务号码"</string> </resources> diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml index b0d1a2043..bdb619c24 100644 --- a/res/values-zh-rHK/strings.xml +++ b/res/values-zh-rHK/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"通知"</string> <string name="yes_button" msgid="1120514817091581293">"是"</string> <string name="no_button" msgid="8965841385742548947">"否"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"流動網絡供應商服務電話號碼"</string> </resources> diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml index 80b894136..7ce4c8590 100644 --- a/res/values-zh-rTW/strings.xml +++ b/res/values-zh-rTW/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"通知"</string> <string name="yes_button" msgid="1120514817091581293">"是"</string> <string name="no_button" msgid="8965841385742548947">"否"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"電信業者服務電話號碼"</string> </resources> diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml index e578e4b1d..fa5d2ed03 100644 --- a/res/values-zu/strings.xml +++ b/res/values-zu/strings.xml @@ -492,4 +492,5 @@ <string name="contacts_default_notification_channel" msgid="5116916969874075866">"Izaziso"</string> <string name="yes_button" msgid="1120514817091581293">"Yebo"</string> <string name="no_button" msgid="8965841385742548947">"Cha"</string> + <string name="sdn_contacts_directory_search_label" msgid="9146122809408008443">"Izinombolo zesevisi zenkampani yenethiwekhi"</string> </resources> diff --git a/res/values/donottranslate_config.xml b/res/values/donottranslate_config.xml index 2dd0e7381..c4c01529d 100644 --- a/res/values/donottranslate_config.xml +++ b/res/values/donottranslate_config.xml @@ -28,6 +28,10 @@ <!-- File Authority for AOSP Contacts files --> <string name="contacts_file_provider_authority">com.android.contacts.files</string> + + <!-- SDN Authority for carrier SDN --> + <string name="contacts_sdn_provider_authority">com.android.contacts.sdn</string> + <!-- Flag indicating whether Contacts app is allowed to import contacts --> <bool name="config_allow_import_from_vcf_file">true</bool> diff --git a/res/values/strings.xml b/res/values/strings.xml index d87be0ba3..b608e1200 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -1549,4 +1549,7 @@ <!-- Text of Negative Button in dialog --> <string name="no_button">No</string> + <!-- The label to display as a section header in the contact list for an SDN directory [CHAR LIMIT=40] --> + <string name="sdn_contacts_directory_search_label">Carrier service numbers</string> + </resources>
\ No newline at end of file diff --git a/src/com/android/contacts/activities/RequestPermissionsActivity.java b/src/com/android/contacts/activities/RequestPermissionsActivity.java index ebcd9b308..7994e98d7 100644 --- a/src/com/android/contacts/activities/RequestPermissionsActivity.java +++ b/src/com/android/contacts/activities/RequestPermissionsActivity.java @@ -70,6 +70,7 @@ public class RequestPermissionsActivity extends RequestPermissionsActivityBase { permissions.add(permission.CALL_PHONE); permissions.add(permission.READ_PHONE_NUMBERS); permissions.add(permission.READ_PHONE_STATE); + permissions.add(permission.READ_CALL_LOG); } sRequiredPermissions = permissions.toArray(new String[0]); } diff --git a/src/com/android/contacts/sdn/SdnProvider.kt b/src/com/android/contacts/sdn/SdnProvider.kt new file mode 100644 index 000000000..4dd3578b1 --- /dev/null +++ b/src/com/android/contacts/sdn/SdnProvider.kt @@ -0,0 +1,296 @@ +/* + * Copyright 2023 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.contacts.sdn + +import android.content.ContentProvider +import android.content.ContentValues +import android.content.Context.TELECOM_SERVICE +import android.content.UriMatcher +import android.database.Cursor +import android.database.MatrixCursor +import android.net.Uri +import android.provider.ContactsContract +import android.provider.ContactsContract.CommonDataKinds.Phone +import android.provider.ContactsContract.CommonDataKinds.StructuredName +import android.provider.ContactsContract.Contacts +import android.provider.ContactsContract.Data +import android.provider.ContactsContract.Directory +import android.provider.ContactsContract.RawContacts +import android.telecom.TelecomManager +import android.util.Log +import com.android.contacts.R + +/** Provides a way to show SDN data in search suggestions and caller id lookup. */ +class SdnProvider : ContentProvider() { + + private lateinit var sdnRepository: SdnRepository + private lateinit var uriMatcher: UriMatcher + + override fun onCreate(): Boolean { + Log.i(TAG, "onCreate") + val sdnProviderAuthority = requireContext().getString(R.string.contacts_sdn_provider_authority) + + uriMatcher = + UriMatcher(UriMatcher.NO_MATCH).apply { + addURI(sdnProviderAuthority, "directories", DIRECTORIES) + addURI(sdnProviderAuthority, "contacts/filter/*", FILTER) + addURI(sdnProviderAuthority, "data/phones/filter/*", FILTER) + addURI(sdnProviderAuthority, "contacts/lookup/*/entities", CONTACT_LOOKUP) + addURI( + sdnProviderAuthority, + "contacts/lookup/*/#/entities", + CONTACT_LOOKUP_WITH_CONTACT_ID, + ) + addURI(sdnProviderAuthority, "phone_lookup/*", PHONE_LOOKUP) + } + sdnRepository = SdnRepository(requireContext()) + return true + } + + override fun query( + uri: Uri, + projection: Array<out String>?, + selection: String?, + selectionArgs: Array<out String>?, + sortOrder: String?, + ): Cursor? { + if (projection == null) return null + + val match = uriMatcher.match(uri) + + if (match == DIRECTORIES) { + return handleDirectories(projection) + } + + if ( + !isCallerAllowed(uri.getQueryParameter(Directory.CALLER_PACKAGE_PARAM_KEY)) || + !sdnRepository.isSdnPresent() + ) { + return null + } + + val accountName = uri.getQueryParameter(RawContacts.ACCOUNT_NAME) + val accountType = uri.getQueryParameter(RawContacts.ACCOUNT_TYPE) + if (ACCOUNT_NAME != accountName || ACCOUNT_TYPE != accountType) { + Log.e(TAG, "Received an invalid account") + return null + } + + return when (match) { + FILTER -> handleFilter(projection, uri) + CONTACT_LOOKUP -> handleLookup(projection, uri.pathSegments[2]) + CONTACT_LOOKUP_WITH_CONTACT_ID -> + handleLookup(projection, uri.pathSegments[2], uri.pathSegments[3]) + PHONE_LOOKUP -> handlePhoneLookup(projection, uri.pathSegments[1]) + else -> null + } + } + + override fun getType(uri: Uri) = Contacts.CONTENT_ITEM_TYPE + + override fun insert(uri: Uri, values: ContentValues?): Uri? { + throw UnsupportedOperationException("Insert is not supported.") + } + + override fun delete(uri: Uri, selection: String?, selectionArgs: Array<out String>?): Int { + throw UnsupportedOperationException("Delete is not supported.") + } + + override fun update( + uri: Uri, + values: ContentValues?, + selection: String?, + selectionArgs: Array<out String>?, + ): Int { + throw UnsupportedOperationException("Update is not supported.") + } + + private fun handleDirectories(projection: Array<out String>): Cursor { + // logger.atInfo().log("Creating directory cursor") + + return MatrixCursor(projection).apply { + addRow( + projection.map { column -> + when (column) { + Directory.ACCOUNT_NAME -> ACCOUNT_NAME + Directory.ACCOUNT_TYPE -> ACCOUNT_TYPE + Directory.DISPLAY_NAME -> ACCOUNT_NAME + Directory.TYPE_RESOURCE_ID -> R.string.sdn_contacts_directory_search_label + Directory.EXPORT_SUPPORT -> Directory.EXPORT_SUPPORT_NONE + Directory.SHORTCUT_SUPPORT -> Directory.SHORTCUT_SUPPORT_NONE + Directory.PHOTO_SUPPORT -> Directory.PHOTO_SUPPORT_THUMBNAIL_ONLY + else -> null + } + }, + ) + } + } + + private fun handleFilter(projection: Array<out String>, uri: Uri): Cursor? { + val filter = uri.lastPathSegment ?: return null + val cursor = MatrixCursor(projection) + + val results = + sdnRepository.fetchSdn().filter { + it.serviceName.contains(filter, ignoreCase = true) || it.serviceNumber.contains(filter) + } + + if (results.isEmpty()) return cursor + + val maxResult = getQueryLimit(uri) + + results.take(maxResult).forEachIndexed { index, data -> + cursor.addRow( + projection.map { column -> + when (column) { + Contacts._ID -> index + Contacts.DISPLAY_NAME -> data.serviceName + Data.DATA1 -> data.serviceNumber + Contacts.LOOKUP_KEY -> data.lookupKey() + else -> null + } + }, + ) + } + + return cursor + } + + private fun handleLookup( + projection: Array<out String>, + lookupKey: String?, + contactIdFromUri: String? = "1", + ): Cursor? { + if (lookupKey.isNullOrEmpty()) { + Log.i(TAG, "handleLookup did not receive a lookup key") + return null + } + + val cursor = MatrixCursor(projection) + val contactId = + try { + contactIdFromUri?.toLong() ?: 1L + } catch (_: NumberFormatException) { + 1L + } + + val result = sdnRepository.fetchSdn().find { it.lookupKey() == lookupKey } ?: return cursor + + // Adding first row for name + cursor.addRow( + projection.map { column -> + when (column) { + Contacts.Entity.CONTACT_ID -> contactId + Contacts.Entity.RAW_CONTACT_ID -> contactId + Contacts.Entity.DATA_ID -> 1 + Data.MIMETYPE -> StructuredName.CONTENT_ITEM_TYPE + StructuredName.DISPLAY_NAME -> result.serviceName + StructuredName.GIVEN_NAME -> result.serviceName + Contacts.DISPLAY_NAME -> result.serviceName + Contacts.DISPLAY_NAME_ALTERNATIVE -> result.serviceName + RawContacts.ACCOUNT_NAME -> ACCOUNT_NAME + RawContacts.ACCOUNT_TYPE -> ACCOUNT_TYPE + RawContacts.RAW_CONTACT_IS_READ_ONLY -> 1 + Contacts.LOOKUP_KEY -> result.lookupKey() + else -> null + } + } + ) + + // Adding second row for number + cursor.addRow( + projection.map { column -> + when (column) { + Contacts.Entity.CONTACT_ID -> contactId + Contacts.Entity.RAW_CONTACT_ID -> contactId + Contacts.Entity.DATA_ID -> 2 + Data.MIMETYPE -> Phone.CONTENT_ITEM_TYPE + Phone.NUMBER -> result.serviceNumber + Data.IS_PRIMARY -> 1 + Phone.TYPE -> Phone.TYPE_MAIN + else -> null + } + } + ) + + return cursor + } + + private fun handlePhoneLookup( + projection: Array<out String>, + phoneNumber: String?, + ): Cursor? { + if (phoneNumber.isNullOrEmpty()) { + Log.i(TAG, "handlePhoneLookup did not receive a phoneNumber") + return null + } + + val cursor = MatrixCursor(projection) + + val result = sdnRepository.fetchSdn().find { it.serviceNumber == phoneNumber } ?: return cursor + + cursor.addRow( + projection.map { column -> + when (column) { + Contacts.DISPLAY_NAME -> result.serviceName + Phone.NUMBER -> result.serviceNumber + else -> null + } + }, + ) + + return cursor + } + + private fun isCallerAllowed(callingPackage: String?): Boolean { + if (callingPackage.isNullOrEmpty()) { + Log.i(TAG, "Calling package is null or empty.") + return false + } + + if (callingPackage == requireContext().packageName) { + return true + } + + // Check if the calling package is default dialer app or not + val context = context ?: return false + val tm = context.getSystemService(TELECOM_SERVICE) as TelecomManager + return tm.defaultDialerPackage == callingPackage + } + + private fun getQueryLimit(uri: Uri): Int { + return try { + uri.getQueryParameter(ContactsContract.LIMIT_PARAM_KEY)?.toInt() ?: DEFAULT_MAX_RESULTS + } catch (e: NumberFormatException) { + DEFAULT_MAX_RESULTS + } + } + + companion object { + private val TAG = SdnProvider::class.java.simpleName + + private const val DIRECTORIES = 0 + private const val FILTER = 1 + private const val CONTACT_LOOKUP = 2 + private const val CONTACT_LOOKUP_WITH_CONTACT_ID = 3 + private const val PHONE_LOOKUP = 4 + + private const val ACCOUNT_NAME = "Carrier service numbers" + private const val ACCOUNT_TYPE = "com.android.contacts.sdn" + + private const val DEFAULT_MAX_RESULTS = 20 + } +} diff --git a/src/com/android/contacts/sdn/SdnRepository.kt b/src/com/android/contacts/sdn/SdnRepository.kt new file mode 100644 index 000000000..082adebf5 --- /dev/null +++ b/src/com/android/contacts/sdn/SdnRepository.kt @@ -0,0 +1,121 @@ +/* + * Copyright 2023 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.contacts.sdn + +import android.Manifest.permission +import android.annotation.SuppressLint +import android.content.Context +import android.content.pm.PackageManager +import android.telephony.CarrierConfigManager +import android.telephony.SubscriptionManager +import android.util.Log +import com.android.contacts.model.SimCard +import com.android.contacts.util.PermissionsUtil +import com.android.contacts.util.PhoneNumberHelper + +/** Repository to fetch Sdn data from [CarrierConfigManager]. */ +class SdnRepository constructor(private val context: Context) { + + fun isSdnPresent(): Boolean { + if ( + !hasTelephony() || + !PermissionsUtil.hasPermission(context, permission.READ_PHONE_STATE) || + !PermissionsUtil.hasPermission(context, permission.READ_PHONE_NUMBERS) || + !PermissionsUtil.hasPermission(context, permission.READ_CALL_LOG) + ) { + return false + } + + val simCardList = getSimCardInformation() + + for (simCard in simCardList) { + if (fetchSdnFromCarrierConfig(simCard).isNotEmpty()) { + Log.i(TAG, "Found SDN list from CarrierConfig") + return true + } + } + return false + } + + fun fetchSdn(): List<Sdn> { + val simCardList = getSimCardInformation() + + return simCardList + .flatMap { fetchSdnFromCarrierConfig(it) } + .distinct() + .sortedBy { it.serviceName } + } + + // Permission check isn't recognized by the linter. + @SuppressLint("MissingPermission") + fun getSimCardInformation(): List<SimCard> { + val subscriptionManager = context.getSystemService(SubscriptionManager::class.java) + return subscriptionManager.activeSubscriptionInfoList?.filterNotNull()?.mapNotNull { + if (it.subscriptionId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) { + null + } else { + SimCard.create(it) + } + } + ?: emptyList() + } + + @Suppress("Deprecation", "MissingPermission") + private fun fetchSdnFromCarrierConfig(simCard: SimCard): List<Sdn> { + val carrierConfigManager = context.getSystemService(CarrierConfigManager::class.java) + val carrierConfig = + carrierConfigManager.getConfigForSubId(simCard.subscriptionId) ?: return emptyList() + val nameList: List<String> = + carrierConfig + .getStringArray(CarrierConfigManager.KEY_CARRIER_SERVICE_NAME_STRING_ARRAY) + ?.map { it?.trim() ?: "" } + ?: return emptyList() + val numberList: List<String> = + carrierConfig + .getStringArray(CarrierConfigManager.KEY_CARRIER_SERVICE_NUMBER_STRING_ARRAY) + ?.map { it?.trim() ?: "" } + ?: return emptyList() + if (nameList.isEmpty() || nameList.size != numberList.size) return emptyList() + + val sdnList = mutableListOf<Sdn>() + nameList.zip(numberList).forEach { (sdnServiceName, sdnNumber) -> + if (sdnServiceName.isNotBlank() && PhoneNumberHelper.isDialablePhoneNumber(sdnNumber)) { + sdnList.add(Sdn(sdnServiceName, sdnNumber)) + } + } + return sdnList + } + + private fun hasTelephony(): Boolean { + return context.packageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY) + } + + companion object { + private val TAG = SdnRepository::class.java.simpleName + } +} + +/** Hold the Service dialing number information to be displayed in SdnActivity. */ +data class Sdn( + val serviceName: String, + val serviceNumber: String, +) { + + /** Generate lookup key that will help identify SDN when Opening QuickContact. */ + fun lookupKey(): String { + return "non-sim-sdn-" + hashCode() + } +} diff --git a/src/com/android/contacts/util/PhoneNumberHelper.java b/src/com/android/contacts/util/PhoneNumberHelper.java index eb070b217..2f1a5b0a0 100644 --- a/src/com/android/contacts/util/PhoneNumberHelper.java +++ b/src/com/android/contacts/util/PhoneNumberHelper.java @@ -16,6 +16,7 @@ package com.android.contacts.util; import android.telephony.PhoneNumberUtils; +import android.text.TextUtils; import android.util.Log; /** @@ -95,4 +96,24 @@ public class PhoneNumberHelper { } return number.substring(0, delimiterIndex); } + + /** Returns true if the given string is dialable by the user from Phone/Dialer app. */ + public static boolean isDialablePhoneNumber(String str) { + if (TextUtils.isEmpty(str)) { + return false; + } + + for (int i = 0, count = str.length(); i < count; i++) { + if (!(PhoneNumberUtils.isDialable(str.charAt(i)) + || str.charAt(i) == ' ' + || str.charAt(i) == '-' + || str.charAt(i) == '(' + || str.charAt(i) == ')' + || str.charAt(i) == '.' + || str.charAt(i) == '/')) { + return false; + } + } + return true; + } } diff --git a/src/com/android/contacts/vcard/ExportProcessor.java b/src/com/android/contacts/vcard/ExportProcessor.java index 0b96ea195..fd5134c38 100755 --- a/src/com/android/contacts/vcard/ExportProcessor.java +++ b/src/com/android/contacts/vcard/ExportProcessor.java @@ -81,6 +81,12 @@ public class ExportProcessor extends ProcessorBase { mExportRequest = exportRequest; mJobId = jobId; mCallingActivity = callingActivity; + try { + mResolver.takePersistableUriPermission(exportRequest.destUri, + Intent.FLAG_GRANT_WRITE_URI_PERMISSION); + } catch (SecurityException e) { + Log.w(LOG_TAG, "SecurityException error", e); + } } @Override diff --git a/src/com/android/contacts/vcard/NotificationImportExportListener.java b/src/com/android/contacts/vcard/NotificationImportExportListener.java index 3b4dc5e57..cc60668a9 100755 --- a/src/com/android/contacts/vcard/NotificationImportExportListener.java +++ b/src/com/android/contacts/vcard/NotificationImportExportListener.java @@ -112,6 +112,7 @@ public class NotificationImportExportListener implements VCardImportExportListen final String description = mContext.getString(R.string.importing_vcard_description, entry.getDisplayName()); + ContactsNotificationChannelsUtil.createDefaultChannel(mContext); return constructProgressNotification(mContext.getApplicationContext(), VCardService.TYPE_IMPORT, description, tickerText, jobId, request.displayName, totalCount, currentCount); diff --git a/tests/Android.bp b/tests/Android.bp index 647fee7ab..2912673ba 100644 --- a/tests/Android.bp +++ b/tests/Android.bp @@ -29,7 +29,7 @@ android_test { "androidx.test.ext.junit", "hamcrest-library", "mockito-target-minus-junit4", - "ub-uiautomator", + "androidx.test.uiautomator_uiautomator", ], libs: [ diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml index f22f92c5a..9ccfa3f89 100644 --- a/tests/AndroidManifest.xml +++ b/tests/AndroidManifest.xml @@ -20,6 +20,7 @@ <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="29" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> + <uses-permission android:name="android.permission.READ_CALL_LOG"/> <uses-permission android:name="android.permission.WRITE_CONTACTS" /> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> diff --git a/tests/src/com/android/contacts/NoPermissionsLaunchSmokeTest.java b/tests/src/com/android/contacts/NoPermissionsLaunchSmokeTest.java index fac9c858f..59f81478d 100644 --- a/tests/src/com/android/contacts/NoPermissionsLaunchSmokeTest.java +++ b/tests/src/com/android/contacts/NoPermissionsLaunchSmokeTest.java @@ -8,15 +8,15 @@ import android.Manifest; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; -import android.support.test.uiautomator.By; -import android.support.test.uiautomator.UiDevice; -import android.support.test.uiautomator.UiObject2; -import android.support.test.uiautomator.Until; import androidx.test.InstrumentationRegistry; import androidx.test.filters.MediumTest; import androidx.test.filters.Suppress; import androidx.test.runner.AndroidJUnit4; +import androidx.test.uiautomator.By; +import androidx.test.uiautomator.UiDevice; +import androidx.test.uiautomator.UiObject2; +import androidx.test.uiautomator.Until; import org.junit.Before; import org.junit.Test; @@ -54,6 +54,7 @@ public class NoPermissionsLaunchSmokeTest { assumeTrue(!hasPermission(mTargetContext, Manifest.permission.GET_ACCOUNTS)); assumeTrue(!hasPermission(mTargetContext, Manifest.permission.READ_PHONE_STATE)); assumeTrue(!hasPermission(mTargetContext, Manifest.permission.CALL_PHONE)); + assumeTrue(!hasPermission(mTargetContext, Manifest.permission.READ_CALL_LOG)); // remove state that might exist outside of the app // (e.g. launcher shortcuts and scheduled jobs) @@ -72,14 +73,20 @@ public class NoPermissionsLaunchSmokeTest { device.waitForIdle(); - device.wait(Until.hasObject(By.textStartsWith("Allow Contacts")), TIMEOUT); + final PackageManager packageManager = mTargetContext.getPackageManager(); + if (packageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) { + device.wait(Until.hasObject(By.textEndsWith("your phone call logs?")), TIMEOUT); + final UiObject2 grantCallLogPermissionButton = device.findObject(By.text("ALLOW")); + grantCallLogPermissionButton.click(); + } + + device.wait(Until.hasObject(By.textEndsWith("access your contacts?")), TIMEOUT); final UiObject2 grantContactsPermissionButton = device.findObject(By.text("ALLOW")); grantContactsPermissionButton.click(); device.wait(Until.hasObject(By.textEndsWith("make and manage phone calls?")), TIMEOUT); - final PackageManager packageManager = mTargetContext.getPackageManager(); if (!packageManager.hasSystemFeature(PackageManager.FEATURE_TELEPHONY)) { device.waitForIdle(); return; diff --git a/tests/src/com/android/contacts/activities/SimImportActivityTest.java b/tests/src/com/android/contacts/activities/SimImportActivityTest.java index 250ce4b6c..9e2f73b0f 100644 --- a/tests/src/com/android/contacts/activities/SimImportActivityTest.java +++ b/tests/src/com/android/contacts/activities/SimImportActivityTest.java @@ -42,9 +42,6 @@ import android.provider.ContactsContract.CommonDataKinds.Phone; import android.provider.ContactsContract.Data; import android.provider.SimPhonebookContract; import android.provider.SimPhonebookContract.SimRecords; -import android.support.test.uiautomator.By; -import android.support.test.uiautomator.UiDevice; -import android.support.test.uiautomator.Until; import android.telephony.TelephonyManager; import android.test.mock.MockContentResolver; @@ -53,6 +50,9 @@ import androidx.test.InstrumentationRegistry; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.LargeTest; import androidx.test.filters.SdkSuppress; +import androidx.test.uiautomator.By; +import androidx.test.uiautomator.UiDevice; +import androidx.test.uiautomator.Until; import com.android.contacts.SimImportService; import com.android.contacts.database.SimContactDao; |