diff options
author | Eric Arseneau <earseneau@google.com> | 2022-03-23 05:05:57 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2022-03-23 05:05:57 +0000 |
commit | 6ff40a71559dce750533ce934a8a5eb22f2682c5 (patch) | |
tree | 5376ca4f9dfeb904036628e9f319bb1415f67274 | |
parent | 82fbc3e0e7c7c12c1c6a1339b95235c84ddcf05e (diff) | |
parent | f8eb69636cf74ad840dbbe1dfdec32ce558f52fd (diff) |
Merge "Merge SP2A.220305.013" into s-keystone-qcom-dev
39 files changed, 640 insertions, 170 deletions
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml index 2033d5e518..607be68ccb 100644 --- a/res/values-as/strings.xml +++ b/res/values-as/strings.xml @@ -534,7 +534,7 @@ <string name="notification_voicemail_no_vm_number" msgid="3423686009815186750">"ভইচমেইলৰ নম্বৰ অজ্ঞাত"</string> <string name="notification_network_selection_title" msgid="255595526707809121">"কোনো সেৱা নাই"</string> <string name="notification_network_selection_text" msgid="553288408722427659">"বাছনি কৰা (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) নেটৱৰ্কটো উপলব্ধ নহয়"</string> - <string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"কল কৰিবৰ কাৰণে ম’বাইল নেটৱৰ্ক অন কৰক, এয়াৰপ্লেইন ম\'ড অফ কৰক বা বেটাৰি সঞ্চয়কাৰী ম\'ড অফ কৰক।"</string> + <string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"কল কৰিবৰ কাৰণে ম’বাইল নেটৱৰ্ক অন কৰক, এয়াৰপ্লেইন ম’ড অফ কৰক বা বেটাৰী সঞ্চয়কাৰী ম’ড অফ কৰক।"</string> <string name="incall_error_power_off" product="default" msgid="8131672264311208673">"কল কৰিবৰ কাৰণে এয়াৰপ্লেইন ম\'ড অফ কৰক।"</string> <string name="incall_error_power_off_wfc" msgid="9125661184694727052">"কল কৰিবৰ কাৰণে এয়াৰপ্লেইন ম\'ড অফ কৰক বা কোনো বেতাঁৰ নেটৱৰ্কৰ সৈতে সংযোগ কৰক।"</string> <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"ফ’নটো বেছি গৰম হৈছে"</b>\n\n"এই কলটো সম্পূৰ্ণ কৰিব নোৱাৰি। আপোনাৰ ফ’নটো ঠাণ্ডা হোৱাৰ পাছত পুনৰ চেষ্টা কৰক।\n\nআপুনি তথাপি জৰুৰীকালীন কল কৰিব পাৰিব।"</string> @@ -689,8 +689,8 @@ <string name="callFailed_cdma_call_limit" msgid="1074219746093031412">"কেইবাটাও কল ইতিমধ্যে সক্ৰিয় হৈ আছে। নতুন কল এটা কৰাৰ আগেয়ে অনুগ্ৰহ কৰি সেইবোৰ একেলগ কৰক বা সমাপ্ত কৰক।"</string> <string name="callFailed_imei_not_accepted" msgid="7257903653685147251">"সংযোগ কৰিব পৰা নাই, অনুগ্ৰহ কৰি এখন মান্য ছিম কাৰ্ড ভৰাওক।"</string> <string name="callFailed_wifi_lost" msgid="1788036730589163141">"ৱাই-ফাইৰ সৈতে সংযোগ বিচ্ছিন্ন হৈছে। কলৰ অন্ত পৰিছে।"</string> - <string name="dialFailed_low_battery" msgid="6857904237423407056">"বেটাৰি কম থকাৰ বাবে ভিডিঅ\' কল কৰিব নোৱাৰি।"</string> - <string name="callFailed_low_battery" msgid="4056828320214416182">"বেটাৰি কম থকাৰ বাবে ভিডিঅ\' কলৰ অন্ত পৰিছে।"</string> + <string name="dialFailed_low_battery" msgid="6857904237423407056">"বেটাৰী কম থকাৰ বাবে ভিডিঅ’ কল কৰিব নোৱাৰি।"</string> + <string name="callFailed_low_battery" msgid="4056828320214416182">"বেটাৰী কম থকাৰ বাবে ভিডিঅ’ কল সমাপ্ত হৈছে।"</string> <string name="callFailed_emergency_call_over_wfc_not_available" msgid="5944309590693432042">"এই অৱস্থানটোত ৱাই-ফাই কলিঙৰ জৰিয়তে জৰুৰীকালীন কল কৰাৰ সুবিধা উপলব্ধ নহয়।"</string> <string name="callFailed_wfc_service_not_available_in_this_location" msgid="3624536608369524988">"এই অৱস্থানটোত ৱাই-ফাই কলিং উপলব্ধ নহয়।"</string> <string name="change_pin_title" msgid="3564254326626797321">"ভইচমেইলৰ পিন সলনি কৰক"</string> diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml index 5c1e68120b..261506d0f7 100644 --- a/res/values-bs/strings.xml +++ b/res/values-bs/strings.xml @@ -196,7 +196,7 @@ <string name="network_connecting" msgid="160901383582774987">"Povezivanje…"</string> <string name="network_could_not_connect" msgid="6547460848093727998">"Povezivanje nije uspjelo"</string> <string-array name="preferred_network_mode_choices"> - <item msgid="4531933377509551889">"Preferiraj GSM/WCDMA"</item> + <item msgid="4531933377509551889">"Preferira se GSM/WCDMA"</item> <item msgid="5120532750027435355">"Samo GSM"</item> <item msgid="8973311380798000102">"Samo WCDMA"</item> <item msgid="4139961027147085705">"Automatski GSM/WCDMA"</item> @@ -310,7 +310,7 @@ <string name="sim_change_data_title" msgid="9142726786345906606">"Promijeniti SIM za prijenos podataka?"</string> <string name="sim_change_data_message" msgid="3567358694255933280">"Koristiti SIM karticu <xliff:g id="NEW_SIM">%1$s</xliff:g> umjesto SIM kartice <xliff:g id="OLD_SIM">%2$s</xliff:g> za prijenos podataka na mobilnoj mreži?"</string> <string name="wifi_calling_settings_title" msgid="5800018845662016507">"Pozivanje putem WiFi-ja"</string> - <string name="video_calling_settings_title" msgid="342829454913266078">"Operater video pozivanja"</string> + <string name="video_calling_settings_title" msgid="342829454913266078">"Video pozivi putem operatera"</string> <string name="gsm_umts_options" msgid="4968446771519376808">"GSM/UMTS opcije"</string> <string name="cdma_options" msgid="3669592472226145665">"CDMA opcije"</string> <string name="throttle_data_usage" msgid="1944145350660420711">"Korištenje podataka"</string> @@ -839,7 +839,7 @@ <string name="radio_info_data_connection_enable" msgid="6183729739783252840">"Omogućite vezu za prijenos podataka"</string> <string name="radio_info_data_connection_disable" msgid="6404751291511368706">"Onemogući vezu za prijenos podataka"</string> <string name="volte_provisioned_switch_string" msgid="4812874990480336178">"VoLTE omogućen"</string> - <string name="vt_provisioned_switch_string" msgid="8295542122512195979">"Video poziv obezbijeđen"</string> + <string name="vt_provisioned_switch_string" msgid="8295542122512195979">"Video pozivi su omogućeni"</string> <string name="wfc_provisioned_switch_string" msgid="3835004640321078988">"WiFi poziv obezbijeđen"</string> <string name="eab_provisioned_switch_string" msgid="4449676720736033035">"EAB/Omogućeno prisustvo"</string> <string name="cbrs_data_switch_string" msgid="6060356430838077653">"Cbrs podaci"</string> @@ -858,7 +858,7 @@ <string name="radio_info_ims_reg_status_not_registered" msgid="8045821447288876085">"Nije registrirano"</string> <string name="radio_info_ims_feature_status_available" msgid="6493200914756969292">"Dostupno"</string> <string name="radio_info_ims_feature_status_unavailable" msgid="8930391136839759778">"Nedostupno"</string> - <string name="radio_info_ims_reg_status" msgid="25582845222446390">"IMS registracija: <xliff:g id="STATUS">%1$s</xliff:g>\nGovor putem LTE mreže: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nGovor putem WiFi mreže: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nVideo pozivanje: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT interfejs: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string> + <string name="radio_info_ims_reg_status" msgid="25582845222446390">"IMS registracija: <xliff:g id="STATUS">%1$s</xliff:g>\nGovor putem LTE mreže: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nGovor putem WiFi mreže: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nVideo pozivi: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT interfejs: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string> <string name="radioInfo_service_in" msgid="45753418231446400">"Aktivno"</string> <string name="radioInfo_service_out" msgid="287972405416142312">"Ne radi"</string> <string name="radioInfo_service_emergency" msgid="4763879891415016848">"Samo hitni pozivi"</string> diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml index 5350ab0d6a..fd1a8cb015 100644 --- a/res/values-ca/strings.xml +++ b/res/values-ca/strings.xml @@ -857,7 +857,7 @@ <string name="radio_info_ims_feature_status_unavailable" msgid="8930391136839759778">"No disponible"</string> <string name="radio_info_ims_reg_status" msgid="25582845222446390">"Registre de MI: <xliff:g id="STATUS">%1$s</xliff:g>\nVeu per LTE: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nVeu per Wi-Fi: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nVideotrucades: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nInterfície d\'UT: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string> <string name="radioInfo_service_in" msgid="45753418231446400">"En servei"</string> - <string name="radioInfo_service_out" msgid="287972405416142312">"Sense servei"</string> + <string name="radioInfo_service_out" msgid="287972405416142312">"Fora de servei"</string> <string name="radioInfo_service_emergency" msgid="4763879891415016848">"Només trucades d\'emergència"</string> <string name="radioInfo_service_off" msgid="3456583511226783064">"Senyal mòbil desactivat"</string> <string name="radioInfo_roaming_in" msgid="3156335577793145965">"Itinerància"</string> diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml index c0135c0c2c..c4c0ea25d4 100644 --- a/res/values-es-rUS/strings.xml +++ b/res/values-es-rUS/strings.xml @@ -518,7 +518,7 @@ <string name="puk2_locked" msgid="6497760825455461057">"SIM bloqueada con PUK2. Comunícate con el proveedor para desbloquearla."</string> <string name="pin2_unblocked" msgid="4481107908727789303">"El PIN2 ya no está bloqueado."</string> <string name="pin2_error_exception" msgid="8116103864600823641">"Error en la red o en la tarjeta SIM"</string> - <string name="doneButton" msgid="7371209609238460207">"Finalizado"</string> + <string name="doneButton" msgid="7371209609238460207">"Listo"</string> <string name="voicemail_settings_number_label" msgid="1265118640154688162">"Número de buzón de voz"</string> <string name="card_title_dialing" msgid="8742182654254431781">"Marcando"</string> <string name="card_title_redialing" msgid="18130232613559964">"Volviendo a marcar"</string> diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml index 4d5b23dee9..85f4776498 100644 --- a/res/values-eu/strings.xml +++ b/res/values-eu/strings.xml @@ -621,7 +621,7 @@ <string name="ota_skip_activation_dialog_skip_label" msgid="5908029466817825633">"Saltatu"</string> <string name="ota_activate" msgid="7939695753665438357">"Aktibatu"</string> <string name="ota_title_activate_success" msgid="1272135024761004889">"Telefonoa aktibatuta dago."</string> - <string name="ota_title_problem_with_activation" msgid="7019745985413368726">"Arazo bat gertatu da aktibazioarekin"</string> + <string name="ota_title_problem_with_activation" msgid="7019745985413368726">"Arazo bat izan da aktibazioarekin"</string> <string name="ota_listen" msgid="2772252405488894280">"Jarraitu hitzezko argibideei aktibazioa osatu dela entzun arte."</string> <string name="ota_speaker" msgid="1086766980329820528">"Bozgorailua"</string> <string name="ota_progress" msgid="8837259285255700132">"Telefonoa programatzen…"</string> diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml index eb9086e2ea..221aa63097 100644 --- a/res/values-fa/strings.xml +++ b/res/values-fa/strings.xml @@ -317,7 +317,7 @@ <string name="throttle_current_usage" msgid="7483859109708658613">"دادههای مورد استفاده در دوره زمانی فعلی"</string> <string name="throttle_time_frame" msgid="1813452485948918791">"مدت زمان مصرف داده"</string> <string name="throttle_rate" msgid="7641913901133634905">"قانون نرخ داده"</string> - <string name="throttle_help" msgid="2624535757028809735">"بیشتر بیاموزید"</string> + <string name="throttle_help" msgid="2624535757028809735">"بیشتر بدانید"</string> <string name="throttle_status_subtext" msgid="1110276415078236687">"<xliff:g id="USED_0">%1$s</xliff:g> (<xliff:g id="USED_1">%2$d</xliff:g>٪) از <xliff:g id="USED_2">%3$s</xliff:g> حداکثر مدت زمان\nمدت زمان بعدی در فاصله <xliff:g id="USED_3">%4$d</xliff:g> روز (<xliff:g id="USED_4">%5$s</xliff:g>) شروع میشود."</string> <string name="throttle_data_usage_subtext" msgid="3185429653996709840">"<xliff:g id="USED_0">%1$s</xliff:g> (<xliff:g id="USED_1">%2$d</xliff:g>٪) از حداکثر مدت زمان <xliff:g id="USED_2">%3$s</xliff:g>"</string> <string name="throttle_data_rate_reduced_subtext" msgid="8369839346277847725">"<xliff:g id="USED_0">%1$s</xliff:g> بیش از حداکثر مجاز\nنرخ داده به <xliff:g id="USED_1">%2$d</xliff:g> کیلو بیت در ثانیه کاهش یافت"</string> diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml index f604fddcd8..24399f28bf 100644 --- a/res/values-hi/strings.xml +++ b/res/values-hi/strings.xml @@ -890,14 +890,14 @@ <string name="radio_info_ppp_resets_label" msgid="9131901102339077661">"चालू करने के बाद से पीपीपी रीसेट की संख्या:"</string> <string name="radio_info_current_network_label" msgid="3052098695239642450">"मौजूदा नेटवर्क:"</string> <string name="radio_info_ppp_received_label" msgid="5753592451640644889">"मिलने वाला डेटा :"</string> - <string name="radio_info_gsm_service_label" msgid="6443348321714241328">"Voice की सेवा:"</string> + <string name="radio_info_gsm_service_label" msgid="6443348321714241328">"वॉइस सेवा:"</string> <string name="radio_info_signal_strength_label" msgid="5545444702102543260">"सिग्नल कितना अच्छा है:"</string> - <string name="radio_info_call_status_label" msgid="7693575431923095487">"Voice कॉल की स्थिति:"</string> + <string name="radio_info_call_status_label" msgid="7693575431923095487">"वॉइस कॉल की स्थिति:"</string> <string name="radio_info_ppp_sent_label" msgid="6542208429356199695">"भेजा गया डेटा :"</string> <string name="radio_info_message_waiting_label" msgid="1886549432566952078">"मैसेज वेटिंग:"</string> <string name="radio_info_phone_number_label" msgid="2533852539562512203">"फ़ोन नंबर:"</string> <string name="radio_info_band_mode_label" msgid="23480556225515290">"रेडियो का बैंड चुनें"</string> - <string name="radio_info_voice_network_type_label" msgid="2395347336419593265">"Voice के नेटवर्क प्रकार:"</string> + <string name="radio_info_voice_network_type_label" msgid="2395347336419593265">"वॉइस नेटवर्क टाइप:"</string> <string name="radio_info_data_network_type_label" msgid="8886597029237501929">"डेटा नेटवर्क प्रकार:"</string> <string name="phone_index_label" msgid="6222406512768964268">"फ़ोन इंडेक्स चुनें"</string> <string name="radio_info_set_perferred_label" msgid="7408131389363136210">"पसंदीदा नेटवर्क प्रकार सेट करें:"</string> diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml index eb1106b4bd..b36e02f151 100644 --- a/res/values-in/strings.xml +++ b/res/values-in/strings.xml @@ -313,7 +313,7 @@ <string name="video_calling_settings_title" msgid="342829454913266078">"Panggilan video operator"</string> <string name="gsm_umts_options" msgid="4968446771519376808">"Opsi GSM//UMTS"</string> <string name="cdma_options" msgid="3669592472226145665">"Opsi CDMA"</string> - <string name="throttle_data_usage" msgid="1944145350660420711">"Penggunaan kuota"</string> + <string name="throttle_data_usage" msgid="1944145350660420711">"Penggunaan data"</string> <string name="throttle_current_usage" msgid="7483859109708658613">"Data yang digunakan dalam periode saat ini"</string> <string name="throttle_time_frame" msgid="1813452485948918791">"Periode penggunaan data"</string> <string name="throttle_rate" msgid="7641913901133634905">"Kebijakan kecepatan data"</string> diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml index d38c50f97e..f7ff030356 100644 --- a/res/values-it/strings.xml +++ b/res/values-it/strings.xml @@ -297,7 +297,7 @@ <string name="sip_accounts_removed_notification_title" msgid="3528076957535736095">"Account SIP deprecati trovati e rimossi"</string> <string name="sip_accounts_removed_notification_message" msgid="1916856744869791592">"Le chiamate SIP non sono più supportate dalla piattaforma Android.\nI tuoi account SIP esistenti (<xliff:g id="REMOVED_SIP_ACCOUNTS">%s</xliff:g>) sono stati rimossi.\nConferma l\'impostazione del tuo account predefinito per le chiamate."</string> <string name="sip_accounts_removed_notification_action" msgid="3772778402370555562">"Vai alle impostazioni"</string> - <string name="data_usage_title" msgid="8438592133893837464">"Utilizzo dei dati delle app"</string> + <string name="data_usage_title" msgid="8438592133893837464">"Utilizzo dati delle app"</string> <string name="data_usage_template" msgid="6287906680674061783">"Dati mobili usati: <xliff:g id="ID_1">%1$s</xliff:g> nel periodo <xliff:g id="ID_2">%2$s</xliff:g>"</string> <string name="advanced_options_title" msgid="9208195294513520934">"Avanzate"</string> <string name="carrier_settings_euicc" msgid="1190237227261337749">"Operatore"</string> @@ -638,12 +638,12 @@ <string name="phone_in_ecm_call_notification_text" msgid="653972232922670335">"Connessione dati disabilitata"</string> <string name="phone_in_ecm_notification_complete_time" msgid="7341624337163082759">"Nessuna connessione dati fino alle ore <xliff:g id="COMPLETETIME">%s</xliff:g>"</string> <plurals name="alert_dialog_exit_ecm" formatted="false" msgid="5425906903766466743"> + <item quantity="one">The phone will be in Emergency Callback mode for <xliff:g id="COUNT_1">%s</xliff:g> minutes. While in this mode no applications using a data connection can be used. Do you want to exit now?</item> <item quantity="other">Il telefono sarà in modalità Richiamata di emergenza per <xliff:g id="COUNT_1">%s</xliff:g> minuti. In questa modalità non è possibile utilizzare applicazioni che impiegano una connessione dati. Vuoi uscire ora?</item> - <item quantity="one">Il telefono sarà in modalità Richiamata di emergenza per <xliff:g id="COUNT_0">%s</xliff:g> minuto. In questa modalità non è possibile utilizzare app che impiegano una connessione dati. Vuoi uscire ora?</item> </plurals> <plurals name="alert_dialog_not_avaialble_in_ecm" formatted="false" msgid="1152682528741457004"> + <item quantity="one">The selected action isn\'t available while in the Emergency Callback mode. The phone will be in this mode for <xliff:g id="COUNT_1">%s</xliff:g> minutes. Do you want to exit now?</item> <item quantity="other">L\'azione selezionata non è disponibile in modalità Richiamata di emergenza. Il telefono sarà in questa modalità per <xliff:g id="COUNT_1">%s</xliff:g> minuti. Vuoi uscire ora?</item> - <item quantity="one">L\'azione selezionata non è disponibile in modalità Richiamata di emergenza. Il telefono sarà in questa modalità per <xliff:g id="COUNT_0">%s</xliff:g> minuto. Vuoi uscire ora?</item> </plurals> <string name="alert_dialog_in_ecm_call" msgid="1207545603149771978">"L\'azione selezionata non è disponibile in modalità di chiamata di emergenza."</string> <string name="progress_dialog_exiting_ecm" msgid="9159080081676927217">"Uscita dalla modalità di richiamata di emergenza"</string> @@ -653,8 +653,8 @@ <string name="phone_in_ecm_call_notification_text_without_data_restriction_hint" msgid="3747860785153531225">"Il telefono è in modalità di richiamata di emergenza"</string> <string name="phone_in_ecm_notification_complete_time_without_data_restriction_hint" msgid="3690292264812050858">"Fino alle ore <xliff:g id="COMPLETETIME">%s</xliff:g>"</string> <plurals name="alert_dialog_exit_ecm_without_data_restriction_hint" formatted="false" msgid="6477733043040328640"> + <item quantity="one">Il telefono sarà in modalità di richiamata di emergenza per <xliff:g id="COUNT_1">%s</xliff:g> minuti.\nVuoi uscire ora?</item> <item quantity="other">Il telefono sarà in modalità di richiamata di emergenza per <xliff:g id="COUNT_1">%s</xliff:g> minuti.\nVuoi uscire ora?</item> - <item quantity="one">Il telefono sarà in modalità di richiamata di emergenza per <xliff:g id="COUNT_0">%s</xliff:g> minuto.\nVuoi uscire ora?</item> </plurals> <string name="voicemail_provider" msgid="4158806657253745294">"Servizio"</string> <string name="voicemail_settings" msgid="4451045613238972776">"Configurazione"</string> diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml index c94e6c7a61..e1b6827f8b 100644 --- a/res/values-kn/strings.xml +++ b/res/values-kn/strings.xml @@ -619,7 +619,7 @@ <string name="ota_skip_activation_dialog_title" msgid="7666611236789203797">"ಸಕ್ರಿಯಗೊಳಿಸುವುದನ್ನು ಸ್ಕಿಪ್ ಮಾಡುವುದೇ?"</string> <string name="ota_skip_activation_dialog_message" msgid="6691722887019708713">"ನೀವು ಸಕ್ರಿಯಗೊಳಿಸುವುದನ್ನು ಸ್ಕಿಪ್ ಮಾಡಿದರೆ, ನೀವು ಕರೆಗಳನ್ನು ಮಾಡಲು ಅಥವಾ ಮೊಬೈಲ್ ಡೇಟಾ ನೆಟ್ವರ್ಕ್ಗಳಿಗೆ ಸಂಪರ್ಕಗೊಳಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ (ಆದರೂ ನೀವು ವೈ-ಫೈ ನೆಟ್ವರ್ಕ್ಗಳಿಗೆ ಸಂಪರ್ಕಗೊಳಿಸಬಹುದು). ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ನೀವು ಸಕ್ರಿಯಗೊಳಿಸುವವರೆಗೂ, ನೀವು ಅದನ್ನು ಪ್ರತಿಬಾರಿ ಆನ್ ಮಾಡಿದಾಗಲೆಲ್ಲಾ ಅದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ನಿಮಗೆ ತಿಳಿಸಲಾಗುತ್ತದೆ."</string> <string name="ota_skip_activation_dialog_skip_label" msgid="5908029466817825633">"ಸ್ಕಿಪ್"</string> - <string name="ota_activate" msgid="7939695753665438357">"ಸಕ್ರಿಯಗೊಳಿಸು"</string> + <string name="ota_activate" msgid="7939695753665438357">"ಸಕ್ರಿಯಗೊಳಿಸಿ"</string> <string name="ota_title_activate_success" msgid="1272135024761004889">"ಫೋನ್ ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ."</string> <string name="ota_title_problem_with_activation" msgid="7019745985413368726">"ಸಕ್ರಿಯಗೊಳಿಸುವಲ್ಲಿ ಸಮಸ್ಯೆ"</string> <string name="ota_listen" msgid="2772252405488894280">"ಸಕ್ರಿಯಗೊಳಿಸುವಿಕೆ ಪೂರ್ಣಗೊಂಡಿದೆ ಎಂಬುದು ನಿಮ್ಮ ಕಿವಿಗೆ ಬೀಳುವ ತನಕ ಧ್ವನಿ ಸೂಚನೆಗಳನ್ನು ಅನುಸರಿಸಿ."</string> diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml index f34f564f91..03aea11dfb 100644 --- a/res/values-my/strings.xml +++ b/res/values-my/strings.xml @@ -674,7 +674,7 @@ <string name="preference_category_ringtone" msgid="8787281191375434976">"ဖုန်းမြည်သံ & တုန်ခါသံ"</string> <string name="pstn_connection_service_label" msgid="9200102709997537069">"တပ်ဆင်ပြီး ဆင်းမ် ကဒ်များ"</string> <string name="enable_video_calling_title" msgid="7246600931634161830">"ဗီဒီယို ခေါ်ဆိုမှုများကို ဖွင့်ထားရန်"</string> - <string name="enable_video_calling_dialog_msg" msgid="7141478720386203540">"ဗွီဒီယို ခေါ်ဆိုမှု ဖွင့်ရန်၊ မြှင့်ထားသည့် 4G LTE မုဒ်ကို ကွန်ရက် ချိိန်ညှိချက်များတွင် ဖွင့်ပေးရပါမည်။"</string> + <string name="enable_video_calling_dialog_msg" msgid="7141478720386203540">"ဗီဒီယိုခေါ်ဆိုမှု ဖွင့်လိုပါက အဆင့်မြှင့်ထားသည့် 4G LTE မုဒ်ကို ကွန်ရက်ဆက်တင်များတွင် ဖွင့်ရပါမည်။"</string> <string name="enable_video_calling_dialog_settings" msgid="8697890611305307110">"ကွန်ရက် ဆက်တင်များ"</string> <string name="enable_video_calling_dialog_close" msgid="4298929725917045270">"ပိတ်ရန်"</string> <string name="sim_label_emergency_calls" msgid="9078241989421522310">"အရေးပေါ်ခေါ်ဆိုမှုများ"</string> diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml index a16f582c6b..b956af6d98 100644 --- a/res/values-nb/strings.xml +++ b/res/values-nb/strings.xml @@ -596,7 +596,7 @@ <string name="hac_mode_summary" msgid="7774989500136009881">"Slå på kompatibilitet med høreapparater"</string> <string name="rtt_mode_title" msgid="3075948111362818043">"Sanntidstekst-anrop (STT)"</string> <string name="rtt_mode_summary" msgid="8631541375609989562">"Tillat meldingsutveksling i talesamtaler"</string> - <string name="rtt_mode_more_information" msgid="587500128658756318">"STT er til hjelp for brukere som er døve, tunghørte, har talefunksjonshemning eller trenger mer enn bare tale.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Finn ut mer</a>\n <br><br> – STT-anrop lagres som meldingstranskripsjoner\n <br> – STT er ikke tilgjengelig for videoanrop"</string> + <string name="rtt_mode_more_information" msgid="587500128658756318">"STT er til hjelp for brukere som er døve, hørselshemmede, har taleproblemer eller trenger mer enn bare tale.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Finn ut mer</a>\n <br><br> – STT-anrop lagres som meldingstranskripsjoner\n <br> – STT er ikke tilgjengelig for videoanrop"</string> <string name="no_rtt_when_roaming" msgid="5268008247378355389">"Merk: RTT er ikke tilgjengelig ved roaming"</string> <string-array name="tty_mode_entries"> <item msgid="3238070884803849303">"TTY av"</item> diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 49e6828c9d..b13d9c866b 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -113,21 +113,21 @@ <string name="messageCFB" msgid="1958017270393563388">"Nummer indien in gesprek"</string> <string name="sum_cfb_enabled" msgid="332037613072049492">"Doorschakelen naar <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string> <string name="sum_cfb_disabled" msgid="3589913334164866035">"Uit"</string> - <string name="disable_cfb_forbidden" msgid="4831494744351633961">"Je provider biedt geen ondersteuning voor het uitschakelen van oproepdoorschakelingen wanneer je telefoon bezet is."</string> + <string name="disable_cfb_forbidden" msgid="4831494744351633961">"Je provider biedt geen ondersteuning voor het uitzetten van oproepdoorschakelingen wanneer je telefoon bezet is."</string> <string name="labelCFNRy" msgid="3403533792248457946">"Indien niet opgenomen"</string> <string name="messageCFNRy" msgid="7644434155765359009">"Nummer indien onbeantwoord"</string> <string name="sum_cfnry_enabled" msgid="3000500837493854799">"Doorschakelen naar <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string> <string name="sum_cfnry_disabled" msgid="1990563512406017880">"Uit"</string> - <string name="disable_cfnry_forbidden" msgid="3174731413216550689">"Je provider biedt geen ondersteuning voor het uitschakelen van oproepdoorschakelingen wanneer je telefoon niet wordt opgenomen."</string> + <string name="disable_cfnry_forbidden" msgid="3174731413216550689">"Je provider biedt geen ondersteuning voor het uitzetten van oproepdoorschakelingen wanneer je telefoon niet wordt opgenomen."</string> <string name="labelCFNRc" msgid="4163399350778066013">"Indien geen bereik"</string> <string name="messageCFNRc" msgid="6980340731313007250">"Nummer indien onbereikbaar"</string> <string name="sum_cfnrc_enabled" msgid="1799069234006073477">"Doorschakelen naar <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string> <string name="sum_cfnrc_disabled" msgid="739289696796917683">"Uit"</string> - <string name="disable_cfnrc_forbidden" msgid="775348748084726890">"Je provider biedt geen ondersteuning voor het uitschakelen van oproepdoorschakelingen wanneer je telefoon niet bereikbaar is."</string> + <string name="disable_cfnrc_forbidden" msgid="775348748084726890">"Je provider biedt geen ondersteuning voor het uitzetten van oproepdoorschakelingen wanneer je telefoon niet bereikbaar is."</string> <string name="registration_cf_forbidden" msgid="4386482610771190420">"Je provider ondersteunt het doorschakelen van gesprekken niet."</string> - <string name="cdma_call_waiting" msgid="4565070960879673216">"Wisselgesprek inschakelen?"</string> + <string name="cdma_call_waiting" msgid="4565070960879673216">"Wisselgesprek aanzetten?"</string> <string name="enable_cdma_call_waiting_setting" msgid="5906811747921744307">"Tijdens een gesprek krijg je een melding over inkomende gesprekken"</string> - <string name="enable_cdma_cw" msgid="811047045863422232">"Inschakelen"</string> + <string name="enable_cdma_cw" msgid="811047045863422232">"Aanzetten"</string> <string name="disable_cdma_cw" msgid="7119290446496301734">"Annuleren"</string> <string name="cdma_call_waiting_in_ims_on" msgid="6390979414188659218">"CDMA-wisselgesprek onder IMS aan"</string> <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA-wisselgesprek onder IMS uit"</string> @@ -144,16 +144,16 @@ <string name="stk_cc_ss_to_ussd_error" msgid="8330749347425752192">"SS-verzoek gewijzigd in USSD-verzoek"</string> <string name="stk_cc_ss_to_ss_error" msgid="8297155544652134278">"Gewijzigd in nieuw SS-verzoek"</string> <string name="stk_cc_ss_to_dial_video_error" msgid="4255261231466032505">"SS-verzoek gewijzigd in videogesprek"</string> - <string name="fdn_check_failure" msgid="1833769746374185247">"De instelling \'Vaste nummers\' in je app Telefoon is ingeschakeld. Hierdoor werken sommige oproepgerelateerde functies niet."</string> + <string name="fdn_check_failure" msgid="1833769746374185247">"De instelling \'Vaste nummers\' in je app Telefoon staat aan. Hierdoor werken sommige oproepgerelateerde functies niet."</string> <string name="radio_off_error" msgid="8321564164914232181">"Schakel de radio in voordat je deze instellingen bekijkt."</string> <string name="close_dialog" msgid="1074977476136119408">"OK"</string> - <string name="enable" msgid="2636552299455477603">"Inschakelen"</string> + <string name="enable" msgid="2636552299455477603">"Aanzetten"</string> <string name="disable" msgid="1122698860799462116">"Uit"</string> <string name="change_num" msgid="6982164494063109334">"Updaten"</string> <string-array name="clir_display_values"> <item msgid="8477364191403806960">"Netwerkstandaard"</item> <item msgid="6813323051965618926">"Nummer verbergen"</item> - <item msgid="9150034130629852635">"Nummer weergeven"</item> + <item msgid="9150034130629852635">"Nummer tonen"</item> </string-array> <string name="vm_changed" msgid="4739599044379692505">"Voicemailnummer gewijzigd."</string> <string name="vm_change_failed" msgid="7877733929455763566">"Kan het voicemailnummer niet wijzigen.\nNeem contact op met je provider als dit probleem zich blijft voordoen."</string> @@ -284,10 +284,10 @@ <string name="roaming" msgid="1576180772877858949">"Roaming"</string> <string name="roaming_enable" msgid="6853685214521494819">"Verbinding maken met dataservices tijdens roaming"</string> <string name="roaming_disable" msgid="8856224638624592681">"Verbinding maken met dataservices tijdens roaming"</string> - <string name="roaming_reenable_message" msgid="1951802463885727915">"Dataroaming is uitgeschakeld. Tik om in te schakelen."</string> + <string name="roaming_reenable_message" msgid="1951802463885727915">"Dataroaming staat uit. Tik om aan te zetten."</string> <string name="roaming_enabled_message" msgid="9022249120750897">"Er kunnen kosten voor roaming in rekening worden gebracht. Tik om te wijzigen."</string> <string name="roaming_notification_title" msgid="3590348480688047320">"Mobiele internetverbinding is verbroken"</string> - <string name="roaming_on_notification_title" msgid="7451473196411559173">"Dataroaming is ingeschakeld"</string> + <string name="roaming_on_notification_title" msgid="7451473196411559173">"Dataroaming staat aan"</string> <string name="roaming_warning" msgid="7855681468067171971">"Er kunnen hoge roamingkosten in rekening worden gebracht."</string> <string name="roaming_check_price_warning" msgid="8212484083990570215">"Neem contact op met je netwerkprovider over de prijzen."</string> <string name="roaming_alert_title" msgid="5689615818220960940">"Dataroaming toestaan?"</string> @@ -305,7 +305,7 @@ <string name="carrier_settings_euicc_summary" msgid="2027941166597330117">"<xliff:g id="CARRIER_NAME">%1$s</xliff:g> — <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>"</string> <string name="mobile_data_settings_title" msgid="7228249980933944101">"Mobiele data"</string> <string name="mobile_data_settings_summary" msgid="5012570152029118471">"Datatoegang via mobiel netwerk"</string> - <string name="data_usage_disable_mobile" msgid="5669109209055988308">"Mobiele data uitschakelen?"</string> + <string name="data_usage_disable_mobile" msgid="5669109209055988308">"Mobiele data uitzetten?"</string> <string name="sim_selection_required_pref" msgid="6985901872978341314">"Selectie vereist"</string> <string name="sim_change_data_title" msgid="9142726786345906606">"Sim voor gegevens wijzigen?"</string> <string name="sim_change_data_message" msgid="3567358694255933280">"<xliff:g id="NEW_SIM">%1$s</xliff:g> in plaats van <xliff:g id="OLD_SIM">%2$s</xliff:g> gebruiken voor mobiele data?"</string> @@ -327,33 +327,33 @@ <string name="cell_broadcast_sms" msgid="4053449797289031063">"Infodienstbericht"</string> <string name="enable_disable_cell_bc_sms" msgid="4759958924031721350">"SMS Infodienstbericht"</string> <string name="cell_bc_sms_enable" msgid="2019708772024632073">"SMS Infodienstbericht ingeschakeld"</string> - <string name="cell_bc_sms_disable" msgid="1214238639910875347">"Infodienstbericht uitgeschakeld"</string> + <string name="cell_bc_sms_disable" msgid="1214238639910875347">"Infodienstbericht staat uit"</string> <string name="cb_sms_settings" msgid="6858093721831312036">"Instellingen voor SMS infodienstberichten"</string> <string name="enable_disable_emergency_broadcast" msgid="6325655044472196496">"Bericht bij noodsituatie"</string> <string name="emergency_broadcast_enable" msgid="5759610647771102442">"Bericht bij noodsituatie ingeschakeld"</string> - <string name="emergency_broadcast_disable" msgid="2844904734469323266">"Bericht bij noodsituatie uitgeschakeld"</string> + <string name="emergency_broadcast_disable" msgid="2844904734469323266">"Bericht bij noodsituatie staat uit"</string> <string name="enable_disable_administrative" msgid="7825925366822117961">"Beheer"</string> <string name="administrative_enable" msgid="5717963431079532028">"Beheer ingeschakeld"</string> - <string name="administrative_disable" msgid="156796633660118691">"Beheer uitgeschakeld"</string> + <string name="administrative_disable" msgid="156796633660118691">"Beheer staat uit"</string> <string name="enable_disable_maintenance" msgid="3824817751053035017">"Onderhoud"</string> <string name="maintenance_enable" msgid="2646784483222342290">"Onderhoud ingeschakeld"</string> - <string name="maintenance_disable" msgid="2121032601497725602">"Onderhoud uitgeschakeld"</string> + <string name="maintenance_disable" msgid="2121032601497725602">"Onderhoud staat uit"</string> <string name="general_news_settings" msgid="2670499575962080411">"Algemeen nieuws"</string> <string name="bf_news_settings" msgid="8571709425370794221">"Zakelijk en financieel nieuws"</string> <string name="sports_news_settings" msgid="2684364556989168438">"Sportnieuws"</string> <string name="entertainment_news_settings" msgid="4228527702346305543">"Amusementsnieuws"</string> <string name="enable_disable_local" msgid="7654175079979415572">"Lokaal"</string> <string name="local_enable" msgid="790606890868710629">"Lokaal nieuws ingeschakeld"</string> - <string name="local_disable" msgid="7649945293198602877">"Lokaal nieuws uitgeschakeld"</string> + <string name="local_disable" msgid="7649945293198602877">"Lokaal nieuws staat uit"</string> <string name="enable_disable_regional" msgid="5783403191376564638">"Regionaal"</string> <string name="regional_enable" msgid="7730109417536296079">"Regionaal nieuws ingeschakeld"</string> - <string name="regional_disable" msgid="3781951818157772545">"Regionaal nieuws uitgeschakeld"</string> + <string name="regional_disable" msgid="3781951818157772545">"Regionaal nieuws staat uit"</string> <string name="enable_disable_national" msgid="6198481711934897632">"Binnenlands"</string> <string name="national_enable" msgid="5159683504138239304">"Binnenlands nieuws ingeschakeld"</string> - <string name="national_disable" msgid="8484356368757118987">"Binnenlands nieuws uitgeschakeld"</string> + <string name="national_disable" msgid="8484356368757118987">"Binnenlands nieuws staat uit"</string> <string name="enable_disable_international" msgid="4204334217211198792">"Buitenlands"</string> <string name="international_enable" msgid="8943466745792690340">"Buitenlands nieuws ingeschakeld"</string> - <string name="international_disable" msgid="4803498658100318265">"Buitenlands nieuws uitgeschakeld"</string> + <string name="international_disable" msgid="4803498658100318265">"Buitenlands nieuws staat uit"</string> <string name="list_language_title" msgid="1850167908665485738">"Taal"</string> <string name="list_language_summary" msgid="7921756070782277559">"De taal voor het nieuws selecteren"</string> <string-array name="list_language_entries"> @@ -377,7 +377,7 @@ <string name="list_language_dtitle" msgid="7457017255633587047">"Talen"</string> <string name="enable_disable_local_weather" msgid="7734933941872511543">"Lokaal weerbericht"</string> <string name="local_weather_enable" msgid="2143929735295254729">"Lokaal weerbericht ingeschakeld"</string> - <string name="local_weather_disable" msgid="4209936355998349647">"Lokaal weerbericht uitgeschakeld"</string> + <string name="local_weather_disable" msgid="4209936355998349647">"Lokaal weerbericht staat uit"</string> <string name="enable_disable_atr" msgid="821714821057385390">"Verkeersberichten"</string> <string name="atr_enable" msgid="1799097759998768186">"Verkeersberichten ingeschakeld"</string> <string name="atr_disable" msgid="6456758173289065766">"Verkeersberichten uitgeschakeld"</string> @@ -392,7 +392,7 @@ <string name="lodgings_disable" msgid="5145649659459722661">"Overnachtingen uitgeschakeld"</string> <string name="enable_disable_retail_directory" msgid="9095153426757081972">"Winkeloverzicht"</string> <string name="retail_directory_enable" msgid="2532176568755452171">"Winkeloverzicht ingeschakeld"</string> - <string name="retail_directory_disable" msgid="7242451210736299193">"Winkeloverzicht uitgeschakeld"</string> + <string name="retail_directory_disable" msgid="7242451210736299193">"Winkeloverzicht staat uit"</string> <string name="enable_disable_advertisements" msgid="8704125663718797151">"Advertenties"</string> <string name="advertisements_enable" msgid="8651409664217899145">"Advertenties ingeschakeld"</string> <string name="advertisements_disable" msgid="2999957360508271492">"Advertenties uitgeschakeld"</string> @@ -404,10 +404,10 @@ <string name="eo_disable" msgid="3955421278929647485">"Vacatures uitgeschakeld"</string> <string name="enable_disable_mhh" msgid="715930476289202466">"Medisch, gezondheid en ziekenhuis"</string> <string name="mhh_enable" msgid="7224396815285147008">"Medisch, gezondheid en ziekenhuis ingeschakeld"</string> - <string name="mhh_disable" msgid="5503643028885686265">"Medisch, gezondheid en ziekenhuis uitgeschakeld"</string> + <string name="mhh_disable" msgid="5503643028885686265">"Medisch, gezondheid en ziekenhuis staat uit"</string> <string name="enable_disable_technology_news" msgid="2794845609698078400">"Technologienieuws"</string> <string name="technology_news_enable" msgid="1908991199492598311">"Technologienieuws ingeschakeld"</string> - <string name="technology_news_disable" msgid="8388582607149800889">"Technologienieuws uitgeschakeld"</string> + <string name="technology_news_disable" msgid="8388582607149800889">"Technologienieuws staat uit"</string> <string name="enable_disable_multi_category" msgid="5958248155437940625">"Meerdere categorieën"</string> <string name="multi_category_enable" msgid="4531915767817483960">"Meerdere categorieën ingeschakeld"</string> <string name="multi_category_disable" msgid="6325934413701238104">"Meerdere categorieën uitgeschakeld"</string> @@ -441,22 +441,22 @@ <string name="manage_fdn_list" msgid="3341716430375195441">"FDN-lijst"</string> <string name="fdn_list_with_label" msgid="1409655283510382556">"FDN-lijst (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string> <string name="fdn_activation" msgid="2178637004710435895">"FDN-activering"</string> - <string name="fdn_enabled" msgid="7017355494808056447">"Vaste nummers zijn ingeschakeld"</string> - <string name="fdn_disabled" msgid="6696468878037736600">"Vaste nummers zijn uitgeschakeld"</string> - <string name="enable_fdn" msgid="4830555730418033723">"FDN inschakelen"</string> - <string name="disable_fdn" msgid="3918794950264647541">"FDN uitschakelen"</string> + <string name="fdn_enabled" msgid="7017355494808056447">"Vaste nummers staan aan"</string> + <string name="fdn_disabled" msgid="6696468878037736600">"Vaste nummers staan uit"</string> + <string name="enable_fdn" msgid="4830555730418033723">"FDN aanzetten"</string> + <string name="disable_fdn" msgid="3918794950264647541">"FDN uitzetten"</string> <string name="change_pin2" msgid="3110844547237754871">"PIN2-code wijzigen"</string> - <string name="enable_fdn_ok" msgid="5080925177369329827">"FDN uitschakelen"</string> - <string name="disable_fdn_ok" msgid="3745475926874838676">"FDN inschakelen"</string> + <string name="enable_fdn_ok" msgid="5080925177369329827">"FDN uitzetten"</string> + <string name="disable_fdn_ok" msgid="3745475926874838676">"FDN aanzetten"</string> <string name="sum_fdn" msgid="6152246141642323582">"Vaste nummers beheren"</string> <string name="sum_fdn_change_pin" msgid="3510994280557335727">"Pincode voor FDN-toegang wijzigen"</string> <string name="sum_fdn_manage_list" msgid="3311397063233992907">"Lijst met telefoonnummers beheren"</string> <string name="voice_privacy" msgid="7346935172372181951">"Spraakprivacy"</string> - <string name="voice_privacy_summary" msgid="3556460926168473346">"Geavanceerde privacymodus inschakelen"</string> + <string name="voice_privacy_summary" msgid="3556460926168473346">"Geavanceerde privacymodus aanzetten"</string> <string name="tty_mode_option_title" msgid="3843817710032641703">"TTY-modus"</string> <string name="tty_mode_option_summary" msgid="4770510287236494371">"TTY-modus instellen"</string> <string name="auto_retry_mode_title" msgid="2985801935424422340">"Automatisch opnieuw proberen"</string> - <string name="auto_retry_mode_summary" msgid="2863919925349511402">"Modus voor automatisch opnieuw proberen inschakelen"</string> + <string name="auto_retry_mode_summary" msgid="2863919925349511402">"Modus voor automatisch opnieuw proberen aanzetten"</string> <string name="tty_mode_not_allowed_video_call" msgid="6551976083652752815">"De TTY-modus mag niet worden gewijzigd tijdens een videogesprek"</string> <string name="menu_add" msgid="5616487894975773141">"Contact toevoegen"</string> <string name="menu_edit" msgid="3593856941552460706">"Contact bewerken"</string> @@ -483,7 +483,7 @@ <string name="simContacts_empty" msgid="1135632055473689521">"Geen contacten op je simkaart."</string> <string name="simContacts_title" msgid="2714029230160136647">"Contacten selecteren om te importeren"</string> <string name="simContacts_airplaneMode" msgid="4654884030631503808">"Schakel de vliegtuigmodus uit om contacten van de simkaart te importeren."</string> - <string name="enable_pin" msgid="967674051730845376">"SIM pincode in-/uitschakelen"</string> + <string name="enable_pin" msgid="967674051730845376">"SIM pincode aan-/uitzetten"</string> <string name="change_pin" msgid="3657869530942905790">"Pincode simkaart wijzigen"</string> <string name="enter_pin_text" msgid="3182311451978663356">"Pincode simkaart:"</string> <string name="oldPinLabel" msgid="8618515202411987721">"Oude pincode"</string> @@ -593,7 +593,7 @@ <string name="singleContactImportedMsg" msgid="3619804066300998934">"Contact geïmporteerd"</string> <string name="failedToImportSingleContactMsg" msgid="228095510489830266">"Kan contact niet importeren"</string> <string name="hac_mode_title" msgid="4127986689621125468">"Hoortoestellen"</string> - <string name="hac_mode_summary" msgid="7774989500136009881">"Compatibiliteit voor hoortoestel inschakelen"</string> + <string name="hac_mode_summary" msgid="7774989500136009881">"Compatibiliteit voor hoortoestel aanzetten"</string> <string name="rtt_mode_title" msgid="3075948111362818043">"Realtime tekstoproep (RTT)"</string> <string name="rtt_mode_summary" msgid="8631541375609989562">"Berichten in een audiogesprek toestaan"</string> <string name="rtt_mode_more_information" msgid="587500128658756318">"RTT helpt bellers die doof of slechthorend zijn, een spraakbeperking hebben of meer dan alleen een stem nodig hebben.<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>Meer informatie</a>\n <br><br> - RTT-gesprekken worden opgeslagen als berichttranscript.\n <br> - RTT is niet beschikbaar voor videogesprekken"</string> @@ -617,7 +617,7 @@ <string name="ota_hfa_activation_title" msgid="3300556778212729671">"Activeren..."</string> <string name="ota_hfa_activation_dialog_message" msgid="7921718445773342996">"De telefoon activeert je mobiele-dataservice.\n\nDit kan tot vijf minuten duren."</string> <string name="ota_skip_activation_dialog_title" msgid="7666611236789203797">"Activering overslaan?"</string> - <string name="ota_skip_activation_dialog_message" msgid="6691722887019708713">"Als je de activering overslaat, kun je niet bellen of verbinding maken met mobiele-datanetwerken (je kunt wel verbinding maken met wifi-netwerken). Tot je de telefoon activeert, wordt je gevraagd deze te activeren telkens wanneer je de telefoon inschakelt."</string> + <string name="ota_skip_activation_dialog_message" msgid="6691722887019708713">"Als je de activering overslaat, kun je niet bellen of verbinding maken met mobiele-datanetwerken (je kunt wel verbinding maken met wifi-netwerken). Tot je de telefoon activeert, wordt je gevraagd deze te activeren telkens wanneer je de telefoon aanzet."</string> <string name="ota_skip_activation_dialog_skip_label" msgid="5908029466817825633">"Overslaan"</string> <string name="ota_activate" msgid="7939695753665438357">"Activeren"</string> <string name="ota_title_activate_success" msgid="1272135024761004889">"De telefoon is geactiveerd."</string> @@ -635,7 +635,7 @@ <string name="ecm_exit_dialog" msgid="4200691880721429078">"EcmExitDialog"</string> <string name="phone_entered_ecm_text" msgid="8431238297843035842">"Modus voor noodoproepen ingeschakeld"</string> <string name="phone_in_ecm_notification_title" msgid="6825016389926367946">"Modus voor noodoproepen"</string> - <string name="phone_in_ecm_call_notification_text" msgid="653972232922670335">"Gegevensverbinding uitgeschakeld"</string> + <string name="phone_in_ecm_call_notification_text" msgid="653972232922670335">"Gegevensverbinding staat uit"</string> <string name="phone_in_ecm_notification_complete_time" msgid="7341624337163082759">"Geen dataverbinding tot <xliff:g id="COMPLETETIME">%s</xliff:g>"</string> <plurals name="alert_dialog_exit_ecm" formatted="false" msgid="5425906903766466743"> <item quantity="other">De telefoon bevindt zich <xliff:g id="COUNT_1">%s</xliff:g> minuten in de modus voor noodoproepen. In deze modus kunnen geen apps worden gebruikt waarvoor een gegevensverbinding nodig is. Wil je nu afsluiten?</item> @@ -666,15 +666,15 @@ <string name="selectContact" msgid="1527612842599767382">"contact selecteren"</string> <string name="not_voice_capable" msgid="2819996734252084253">"Audiogesprekken worden niet ondersteund"</string> <string name="description_dial_button" msgid="8614631902795087259">"bellen"</string> - <string name="description_dialpad_button" msgid="7395114120463883623">"toetsenblok weergeven"</string> + <string name="description_dialpad_button" msgid="7395114120463883623">"toetsenblok tonen"</string> <string name="pane_title_emergency_dialpad" msgid="3627372514638694401">"Noodtoetsenblok"</string> <string name="voicemail_visual_voicemail_switch_title" msgid="6610414098912832120">"Visuele voicemail"</string> <string name="voicemail_set_pin_dialog_title" msgid="7005128605986960003">"Pincode instellen"</string> <string name="voicemail_change_pin_dialog_title" msgid="4633077715231764435">"Pincode wijzigen"</string> <string name="preference_category_ringtone" msgid="8787281191375434976">"Ringtone en trillen"</string> <string name="pstn_connection_service_label" msgid="9200102709997537069">"Ingebouwde simkaarten"</string> - <string name="enable_video_calling_title" msgid="7246600931634161830">"Videogesprekken inschakelen"</string> - <string name="enable_video_calling_dialog_msg" msgid="7141478720386203540">"Als je videogesprekken wilt inschakelen, moet je de geoptimaliseerde 4G LTE-modus inschakelen in de netwerkinstellingen."</string> + <string name="enable_video_calling_title" msgid="7246600931634161830">"Videogesprekken aanzetten"</string> + <string name="enable_video_calling_dialog_msg" msgid="7141478720386203540">"Als je videogesprekken wilt aanzetten, moet je de geoptimaliseerde 4G LTE-modus aanzetten in de netwerkinstellingen."</string> <string name="enable_video_calling_dialog_settings" msgid="8697890611305307110">"Netwerkinstellingen"</string> <string name="enable_video_calling_dialog_close" msgid="4298929725917045270">"Sluiten"</string> <string name="sim_label_emergency_calls" msgid="9078241989421522310">"Noodoproepen"</string> @@ -705,8 +705,8 @@ <string name="change_pin_confirm_pins_dont_match" msgid="305164501222587215">"Pincodes komen niet overeen"</string> <string name="change_pin_succeeded" msgid="2504705600693014403">"Voicemailpincode geüpdatet"</string> <string name="change_pin_system_error" msgid="7772788809875146873">"Kan pincode niet instellen"</string> - <string name="mobile_data_status_roaming_turned_off_subtext" msgid="6840673347416227054">"Dataroaming is uitgeschakeld"</string> - <string name="mobile_data_status_roaming_turned_on_subtext" msgid="5615757897768777865">"Dataroaming is ingeschakeld"</string> + <string name="mobile_data_status_roaming_turned_off_subtext" msgid="6840673347416227054">"Dataroaming staat uit"</string> + <string name="mobile_data_status_roaming_turned_on_subtext" msgid="5615757897768777865">"Dataroaming staat aan"</string> <string name="mobile_data_status_roaming_without_plan_subtext" msgid="6536671968072284677">"Momenteel aan het roamen, data-abonnement nodig"</string> <string name="mobile_data_status_roaming_with_plan_subtext" msgid="2576177169108123095">"Momenteel aan het roamen, data-abonnement is actief"</string> <string name="mobile_data_status_no_plan_subtext" msgid="170331026419263657">"Geen mobiele data meer"</string> @@ -826,29 +826,29 @@ <string name="callFailed_otasp_provisioning_in_process" msgid="3345666183602879326">"Kan geen gesprek plaatsen omdat het apparaat momenteel wordt geregistreerd."</string> <string name="callFailed_already_dialing" msgid="7250591188960691086">"Kan gesprek niet plaatsen omdat er al een uitgaand gesprek is gestart."</string> <string name="callFailed_already_ringing" msgid="2376603543544289303">"Kan gesprek niet plaatsen omdat er een niet-beantwoord inkomend gesprek is. Beantwoord of weiger het inkomende gesprek voordat je een nieuw gesprek plaatst."</string> - <string name="callFailed_calling_disabled" msgid="5010992739401206283">"Kan gesprek niet plaatsen omdat bellen is uitgeschakeld via de systeemeigenschap ro.telephony.disable-call."</string> + <string name="callFailed_calling_disabled" msgid="5010992739401206283">"Kan gesprek niet plaatsen omdat bellen is uitgezet via de systeemeigenschap ro.telephony.disable-call."</string> <string name="callFailed_too_many_calls" msgid="5379426826618582180">"Kan gesprek niet plaatsen omdat er al twee actieve gesprekken zijn. Verbreek de verbinding in een van de gesprekken of voeg ze samen tot een conferencecall voordat je een nieuw gesprek plaatst."</string> - <string name="supp_service_over_ut_precautions" msgid="2145018231396701311">"Als je <xliff:g id="SUPP_SERVICE">%s</xliff:g> wilt gebruiken, zorg je dat je mobiele data hebt ingeschakeld. Je kunt dit wijzigen via de mobiele netwerkinstellingen."</string> - <string name="supp_service_over_ut_precautions_roaming" msgid="670342104569972327">"Als je <xliff:g id="SUPP_SERVICE">%s</xliff:g> wilt gebruiken, zorg je dat je mobiele data en dataroaming hebt ingeschakeld. Je kunt dit wijzigen via de mobiele netwerkinstellingen."</string> - <string name="supp_service_over_ut_precautions_dual_sim" msgid="5166866975550910474">"Als je <xliff:g id="SUPP_SERVICE">%1$s</xliff:g> wilt gebruiken, zorg je dat je mobiele data hebt ingeschakeld voor sim <xliff:g id="SIM_NUMBER">%2$d</xliff:g>. Je kunt dit wijzigen via de mobiele netwerkinstellingen."</string> - <string name="supp_service_over_ut_precautions_roaming_dual_sim" msgid="6627654855191817965">"Als je <xliff:g id="SUPP_SERVICE">%1$s</xliff:g> wilt gebruiken, zorg je dat je mobiele data en dataroaming hebt ingeschakeld voor sim <xliff:g id="SIM_NUMBER">%2$d</xliff:g>. Je kunt dit wijzigen via de mobiele netwerkinstellingen."</string> + <string name="supp_service_over_ut_precautions" msgid="2145018231396701311">"Als je <xliff:g id="SUPP_SERVICE">%s</xliff:g> wilt gebruiken, zorg je dat je mobiele data hebt aangezet. Je kunt dit wijzigen via de mobiele netwerkinstellingen."</string> + <string name="supp_service_over_ut_precautions_roaming" msgid="670342104569972327">"Als je <xliff:g id="SUPP_SERVICE">%s</xliff:g> wilt gebruiken, zorg je dat je mobiele data en dataroaming hebt aangezet. Je kunt dit wijzigen via de mobiele netwerkinstellingen."</string> + <string name="supp_service_over_ut_precautions_dual_sim" msgid="5166866975550910474">"Als je <xliff:g id="SUPP_SERVICE">%1$s</xliff:g> wilt gebruiken, zorg je dat je mobiele data hebt aangezet voor sim <xliff:g id="SIM_NUMBER">%2$d</xliff:g>. Je kunt dit wijzigen via de mobiele netwerkinstellingen."</string> + <string name="supp_service_over_ut_precautions_roaming_dual_sim" msgid="6627654855191817965">"Als je <xliff:g id="SUPP_SERVICE">%1$s</xliff:g> wilt gebruiken, zorg je dat je mobiele data en dataroaming hebt aangezet voor sim <xliff:g id="SIM_NUMBER">%2$d</xliff:g>. Je kunt dit wijzigen via de mobiele netwerkinstellingen."</string> <string name="supp_service_over_ut_precautions_dialog_dismiss" msgid="5934541487903081652">"Sluiten"</string> - <string name="radio_info_data_connection_enable" msgid="6183729739783252840">"Dataverbinding inschakelen"</string> - <string name="radio_info_data_connection_disable" msgid="6404751291511368706">"Dataverbinding uitschakelen"</string> + <string name="radio_info_data_connection_enable" msgid="6183729739783252840">"Dataverbinding aanzetten"</string> + <string name="radio_info_data_connection_disable" msgid="6404751291511368706">"Dataverbinding uitzetten"</string> <string name="volte_provisioned_switch_string" msgid="4812874990480336178">"VoLTE-registratie"</string> <string name="vt_provisioned_switch_string" msgid="8295542122512195979">"Videogesprekken geregistreerd"</string> <string name="wfc_provisioned_switch_string" msgid="3835004640321078988">"Wifi-gesprekken geregistreerd"</string> <string name="eab_provisioned_switch_string" msgid="4449676720736033035">"EAB/aanwezigheid geregistreerd"</string> <string name="cbrs_data_switch_string" msgid="6060356430838077653">"CBRS-gegevens"</string> - <string name="dsds_switch_string" msgid="7564769822086764796">"DSDS inschakelen"</string> + <string name="dsds_switch_string" msgid="7564769822086764796">"DSDS aanzetten"</string> <string name="dsds_dialog_title" msgid="8494569893941847575">"Apparaat opnieuw opstarten?"</string> <string name="dsds_dialog_message" msgid="4047480385678538850">"Start het apparaat opnieuw op om de instelling te wijzigen."</string> <string name="dsds_dialog_confirm" msgid="9032004888134129885">"Opnieuw opstarten"</string> <string name="dsds_dialog_cancel" msgid="3245958947099586655">"Annuleren"</string> <string name="radio_info_radio_power" msgid="8805595022160471587">"Mobiel radiovermogen"</string> - <string name="radioInfo_menu_viewADN" msgid="4533179730908559846">"Adresboek op simkaart weergeven"</string> - <string name="radioInfo_menu_viewFDN" msgid="1847236480527032061">"Vaste nummers weergeven"</string> - <string name="radioInfo_menu_viewSDN" msgid="2613431584522392842">"Servicenummers weergeven"</string> + <string name="radioInfo_menu_viewADN" msgid="4533179730908559846">"Adresboek op simkaart bekijken"</string> + <string name="radioInfo_menu_viewFDN" msgid="1847236480527032061">"Vaste nummers bekijken"</string> + <string name="radioInfo_menu_viewSDN" msgid="2613431584522392842">"Servicenummers bekijken"</string> <string name="radioInfo_menu_getIMS" msgid="1950869267853198232">"IMS-servicestatus"</string> <string name="radio_info_ims_reg_status_title" msgid="6875885401313992007">"IMS-status"</string> <string name="radio_info_ims_reg_status_registered" msgid="7095182114078864326">"Geregistreerd"</string> @@ -908,7 +908,7 @@ <string name="radio_info_smsc_label" msgid="3749927072726033763">"SMSC:"</string> <string name="radio_info_smsc_update_label" msgid="5141996256097115753">"Updaten"</string> <string name="radio_info_smsc_refresh_label" msgid="8409923721451604560">"Vernieuwen"</string> - <string name="radio_info_toggle_dns_check_label" msgid="1394078554927787350">"DNS-controle in-/uitschakelen"</string> + <string name="radio_info_toggle_dns_check_label" msgid="1394078554927787350">"DNS-controle aan-/uitzetten"</string> <string name="oem_radio_info_label" msgid="2914167475119997456">"OEM-specifieke gegevens/instellingen"</string> <string name="radio_info_endc_available" msgid="4410653375290113436">"EN-DC beschikbaar:"</string> <string name="radio_info_dcnr_restricted" msgid="2469125498066960807">"DCNR beperkt:"</string> diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml index 1ee792c241..e4883efdb1 100644 --- a/res/values-pa/strings.xml +++ b/res/values-pa/strings.xml @@ -273,7 +273,7 @@ <string name="network_operator_category" msgid="4992217193732304680">"ਨੈੱਟਵਰਕ"</string> <string name="enhanced_4g_lte_mode_title" msgid="4213420368777080540">"ਵਿਸਤ੍ਰਿਤ 4G LTE ਮੋਡ"</string> <!-- no translation found for enhanced_4g_lte_mode_title_variant:0 (7240155150166394308) --> - <string name="enhanced_4g_lte_mode_summary" msgid="7725708511804143638">"ਵੌਇਸ ਅਤੇ ਹੋਰ ਸੰਚਾਰ ਬਿਹਤਰ ਬਣਾਉਣ ਲਈ LTE ਸੇਵਾਵਾਂ ਵਰਤੋ ( ਸਿਫ਼ਾਰਸ਼ ਕੀਤਾ)"</string> + <string name="enhanced_4g_lte_mode_summary" msgid="7725708511804143638">"ਅਵਾਜ਼ੀ ਕਾਲਾਂ ਅਤੇ ਹੋਰ ਸੰਚਾਰ ਬਿਹਤਰ ਬਣਾਉਣ ਲਈ LTE ਸੇਵਾਵਾਂ ਵਰਤੋ (ਸਿਫ਼ਾਰਸ਼ੀ)"</string> <string name="enhanced_4g_lte_mode_summary_o2" msgid="2521108446409016542">"ਅਵਾਜ਼ ਅਤੇ ਹੋਰ ਸੰਚਾਰਾਂ (ਸਿਫ਼ਾਰਸ਼ ਕੀਤੇ) ਨੂੰ ਬਿਹਤਰ ਬਣਾਉਣ ਲਈ 4G ਸੇਵਾਵਾਂ ਵਰਤੋ"</string> <!-- no translation found for enhanced_4g_lte_mode_sumary_variant:0 (2943982616649705147) --> <!-- no translation found for enhanced_4g_lte_mode_sumary_variant:1 (5262249464504131443) --> @@ -338,24 +338,24 @@ <string name="enable_disable_maintenance" msgid="3824817751053035017">"ਪ੍ਰਬੰਧਨ"</string> <string name="maintenance_enable" msgid="2646784483222342290">"ਪ੍ਰਬੰਧਨ ਸਮਰਥਿਤ"</string> <string name="maintenance_disable" msgid="2121032601497725602">"ਪ੍ਰਬੰਧਨ ਅਸਮਰਥਿਤ"</string> - <string name="general_news_settings" msgid="2670499575962080411">"ਸਧਾਰਨ ਖ਼ਬਰਾਂ"</string> - <string name="bf_news_settings" msgid="8571709425370794221">"ਵਪਾਰਕ ਅਤੇ ਵਿੱਤੀ ਖ਼ਬਰਾਂ"</string> - <string name="sports_news_settings" msgid="2684364556989168438">"ਖੇਡ ਦੀਆਂ ਖ਼ਬਰਾਂ"</string> - <string name="entertainment_news_settings" msgid="4228527702346305543">"ਮਨੋਰੰਜਕ ਖ਼ਬਰਾਂ"</string> + <string name="general_news_settings" msgid="2670499575962080411">"ਸਧਾਰਨ ਖਬਰਾਂ"</string> + <string name="bf_news_settings" msgid="8571709425370794221">"ਕਾਰੋਬਾਰੀ ਅਤੇ ਵਿੱਤੀ ਖਬਰਾਂ"</string> + <string name="sports_news_settings" msgid="2684364556989168438">"ਖੇਡਾਂ ਨਾਲ ਸੰਬੰਧਿਤ ਖਬਰਾਂ"</string> + <string name="entertainment_news_settings" msgid="4228527702346305543">"ਮਨੋਰੰਜਨ ਸੰਬੰਧੀ ਖਬਰਾਂ"</string> <string name="enable_disable_local" msgid="7654175079979415572">"ਸਥਾਨਕ"</string> - <string name="local_enable" msgid="790606890868710629">"ਸਥਾਨਕ ਖ਼ਬਰਾਂ ਸਮਰਥਿਤ"</string> - <string name="local_disable" msgid="7649945293198602877">"ਸਥਾਨਕ ਖ਼ਬਰਾਂ ਅਸਮਰਥਿਤ"</string> + <string name="local_enable" msgid="790606890868710629">"ਸਥਾਨਕ ਖਬਰਾਂ ਚਾਲੂ ਕੀਤੀਆਂ ਗਈਆਂ"</string> + <string name="local_disable" msgid="7649945293198602877">"ਸਥਾਨਕ ਖਬਰਾਂ ਬੰਦ ਕੀਤੀਆਂ ਗਈਆਂ"</string> <string name="enable_disable_regional" msgid="5783403191376564638">"ਖੇਤਰੀ"</string> - <string name="regional_enable" msgid="7730109417536296079">"ਖੇਤਰੀ ਖ਼ਬਰਾਂ ਸਮਰਥਿਤ"</string> - <string name="regional_disable" msgid="3781951818157772545">"ਖੇਤਰੀ ਖ਼ਬਰਾਂ ਅਸਮਰਥਿਤ"</string> + <string name="regional_enable" msgid="7730109417536296079">"ਖੇਤਰੀ ਖਬਰਾਂ ਚਾਲੂ ਕੀਤੀਆਂ ਗਈਆਂ"</string> + <string name="regional_disable" msgid="3781951818157772545">"ਖੇਤਰੀ ਖਬਰਾਂ ਬੰਦ ਕੀਤੀਆਂ ਗਈਆਂ"</string> <string name="enable_disable_national" msgid="6198481711934897632">"ਰਾਸ਼ਟਰੀ"</string> - <string name="national_enable" msgid="5159683504138239304">"ਰਾਸ਼ਟਰੀ ਖ਼ਬਰਾਂ ਸਮਰਥਿਤ"</string> - <string name="national_disable" msgid="8484356368757118987">"ਰਾਸ਼ਟਰੀ ਖ਼ਬਰਾਂ ਅਸਮਰਥਿਤ"</string> + <string name="national_enable" msgid="5159683504138239304">"ਰਾਸ਼ਟਰੀ ਖਬਰਾਂ ਚਾਲੂ ਕੀਤੀਆਂ ਗਈਆਂ"</string> + <string name="national_disable" msgid="8484356368757118987">"ਰਾਸ਼ਟਰੀ ਖਬਰਾਂ ਬੰਦ ਕੀਤੀਆਂ ਗਈਆਂ"</string> <string name="enable_disable_international" msgid="4204334217211198792">"ਅੰਤਰਰਾਸ਼ਟਰੀ"</string> - <string name="international_enable" msgid="8943466745792690340">"ਅੰਤਰਰਾਸ਼ਟਰੀ ਖ਼ਬਰਾਂ ਸਮਰਥਿਤ"</string> - <string name="international_disable" msgid="4803498658100318265">"ਅੰਤਰਰਾਸ਼ਟਰੀ ਖ਼ਬਰਾਂ ਅਸਮਰਥਿਤ"</string> + <string name="international_enable" msgid="8943466745792690340">"ਅੰਤਰਰਾਸ਼ਟਰੀ ਖਬਰਾਂ ਚਾਲੂ ਕੀਤੀਆਂ ਗਈਆਂ"</string> + <string name="international_disable" msgid="4803498658100318265">"ਅੰਤਰਰਾਸ਼ਟਰੀ ਖਬਰਾਂ ਬੰਦ ਕੀਤੀਆਂ ਗਈਆਂ"</string> <string name="list_language_title" msgid="1850167908665485738">"ਭਾਸ਼ਾ"</string> - <string name="list_language_summary" msgid="7921756070782277559">"ਖ਼ਬਰਾਂ ਦੀ ਭਾਸ਼ਾ ਚੁਣੋ"</string> + <string name="list_language_summary" msgid="7921756070782277559">"ਖਬਰਾਂ ਦੀ ਭਾਸ਼ਾ ਚੁਣੋ"</string> <string-array name="list_language_entries"> <item msgid="2347238508726934281">"ਅੰਗ੍ਰੇਜ਼ੀ"</item> <item msgid="5172468397620875174">"ਫਰਾਂਸੀਸੀ"</item> @@ -405,9 +405,9 @@ <string name="enable_disable_mhh" msgid="715930476289202466">"ਚਿਕਿਤਸਾ, ਸਿਹਤ ਅਤੇ ਹਸਪਤਾਲ"</string> <string name="mhh_enable" msgid="7224396815285147008">"ਚਿਕਿਤਸਾ, ਸਿਹਤ ਅਤੇ ਹਸਪਤਾਲ ਸਮਰਥਿਤ"</string> <string name="mhh_disable" msgid="5503643028885686265">"ਚਿਕਿਤਸਾ, ਸਿਹਤ ਅਤੇ ਹਸਪਤਾਲ ਅਸਮਰਥਿਤ"</string> - <string name="enable_disable_technology_news" msgid="2794845609698078400">"ਟੈਕਨਾਲੋਜੀ ਖ਼ਬਰਾਂ"</string> - <string name="technology_news_enable" msgid="1908991199492598311">"ਟੈਕਨਾਲੋਜੀ ਖ਼ਬਰਾਂ ਸਮਰਥਿਤ"</string> - <string name="technology_news_disable" msgid="8388582607149800889">"ਟੈਕਨਾਲੋਜੀ ਖ਼ਬਰਾਂ ਅਸਮਰਥਿਤ"</string> + <string name="enable_disable_technology_news" msgid="2794845609698078400">"ਤਕਨਾਲੋਜੀ ਖਬਰਾਂ"</string> + <string name="technology_news_enable" msgid="1908991199492598311">"ਤਕਨਾਲੋਜੀ ਖਬਰਾਂ ਚਾਲੂ ਕੀਤੀਆਂ ਗਈਆਂ"</string> + <string name="technology_news_disable" msgid="8388582607149800889">"ਤਕਨਾਲੋਜੀ ਖਬਰਾਂ ਬੰਦ ਕੀਤੀਆਂ ਗਈਆਂ"</string> <string name="enable_disable_multi_category" msgid="5958248155437940625">"ਮਲਟੀ-ਸ਼੍ਰੇਣੀ"</string> <string name="multi_category_enable" msgid="4531915767817483960">"ਮਲਟੀ-ਸ਼੍ਰੇਣੀ ਸਮਰਥਿਤ"</string> <string name="multi_category_disable" msgid="6325934413701238104">"ਮਲਟੀ-ਸ਼੍ਰੇਣੀ ਅਸਮਰਥਿਤ"</string> @@ -595,7 +595,7 @@ <string name="hac_mode_title" msgid="4127986689621125468">"ਸੁਣਨ ਲਈ ਸਹਾਇਕ ਸਾਧਨ"</string> <string name="hac_mode_summary" msgid="7774989500136009881">"ਸੁਣਨ ਲਈ ਸਹਾਇਕ ਸਾਧਨ ਅਨੁਕੂਲਤਾ ਚਾਲੂ ਕਰੋ"</string> <string name="rtt_mode_title" msgid="3075948111362818043">"ਨਾਲ-ਦੀ-ਨਾਲ ਦਿਸਦੀ ਲਿਖਤ (RTT) ਵਾਲੀ ਕਾਲ"</string> - <string name="rtt_mode_summary" msgid="8631541375609989562">"ਕਿਸੇ ਵੌਇਸ ਕਾਲ ਦੌਰਾਨ ਸੁਨੇਹਾ ਭੇਜਣ ਦਿਓ"</string> + <string name="rtt_mode_summary" msgid="8631541375609989562">"ਕਿਸੇ ਅਵਾਜ਼ੀ ਕਾਲ ਦੌਰਾਨ ਸੁਨੇਹਾ ਭੇਜਣ ਦਿਓ"</string> <string name="rtt_mode_more_information" msgid="587500128658756318">"RTT ਅਜਿਹੇ ਕਾਲ ਕਰਨ ਵਾਲੇ ਲੋਕਾਂ ਦੀ ਸਹਾਇਤਾ ਕਰਦਾ ਹੈ ਜੋ ਬੋਲੇ, ਘੱਟ ਸੁਣਨ ਵਾਲੇ, ਬੋਲਣ ਵਿੱਚ ਅਸਮਰਥ ਜਾਂ ਜਿਨ੍ਹਾਂ ਲਈ ਸਿਰਫ਼ ਅਵਾਜ਼ ਕਾਫ਼ੀ ਨਹੀਂ ਹੁੰਦੀ।<br> <a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>>ਹੋਰ ਜਾਣੋ</a>\n <br><br> - RTT ਕਾਲਾਂ ਨੂੰ ਇੱਕ ਪ੍ਰਤਿਲਿਪੀ ਸੁਨੇਹੇ ਵਜੋਂ ਰੱਖਿਅਤ ਕੀਤਾ ਜਾਂਦਾ ਹੈ\n <br> - RTT ਵੀਡੀਓ ਕਾਲਾਂ ਲਈ ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string> <string name="no_rtt_when_roaming" msgid="5268008247378355389">"ਨੋਟ ਕਥਨ:ਵੇਲੇ RTT ਉਪਲਬਧ ਨਹੀਂ ਹੈ"</string> <string-array name="tty_mode_entries"> @@ -664,7 +664,7 @@ <string name="contactPhoto" msgid="7885089213135154834">"ਸੰਪਰਕ ਫ਼ੋਟੋ"</string> <string name="goPrivate" msgid="4645108311382209551">"ਨਿੱਜੀ ਜਾਓ"</string> <string name="selectContact" msgid="1527612842599767382">"ਸੰਪਰਕ ਚੁਣੋ"</string> - <string name="not_voice_capable" msgid="2819996734252084253">"ਵੌਇਸ ਕਾਲਿੰਗ ਸਮਰਥਿਤ ਨਹੀਂ"</string> + <string name="not_voice_capable" msgid="2819996734252084253">"ਅਵਾਜ਼ੀ ਕਾਲਿੰਗ ਸਮਰਥਿਤ ਨਹੀਂ"</string> <string name="description_dial_button" msgid="8614631902795087259">"ਡਾਇਲ ਕਰੋ"</string> <string name="description_dialpad_button" msgid="7395114120463883623">"ਡਾਇਲਪੈਡ ਦਿਖਾਓ"</string> <string name="pane_title_emergency_dialpad" msgid="3627372514638694401">"ਸੰਕਟਕਾਲੀਨ ਡਾਇਲਪੈਡ"</string> @@ -855,7 +855,7 @@ <string name="radio_info_ims_reg_status_not_registered" msgid="8045821447288876085">"ਰਜਿਸਟਰ ਨਹੀਂ ਕੀਤੀ ਗਈ"</string> <string name="radio_info_ims_feature_status_available" msgid="6493200914756969292">"ਉਪਲਬਧ"</string> <string name="radio_info_ims_feature_status_unavailable" msgid="8930391136839759778">"ਅਣਉਪਲਬਧ"</string> - <string name="radio_info_ims_reg_status" msgid="25582845222446390">"IMS ਰਜਿਸਟਰੇਸ਼ਨ: <xliff:g id="STATUS">%1$s</xliff:g>\nLTE \'ਤੇ ਵੌਇਸ: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nਵਾਈ-ਫਾਈ \'ਤੇ ਵੌਇਸ: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nਵੀਡੀਓ ਕਾਲਿੰਗ: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT ਇੰਟਰਫੇਸ: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string> + <string name="radio_info_ims_reg_status" msgid="25582845222446390">"IMS ਰਜਿਸਟਰੇਸ਼ਨ: <xliff:g id="STATUS">%1$s</xliff:g>\nLTE \'ਤੇ ਅਵਾਜ਼: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nਵਾਈ-ਫਾਈ \'ਤੇ ਅਵਾਜ਼ੀ ਕਾਲ: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nਵੀਡੀਓ ਕਾਲਿੰਗ: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT ਇੰਟਰਫੇਸ: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string> <string name="radioInfo_service_in" msgid="45753418231446400">"ਸੇਵਾ ਵਿੱਚ"</string> <string name="radioInfo_service_out" msgid="287972405416142312">"ਸੇਵਾ ਵਿੱਚ ਨਹੀਂ"</string> <string name="radioInfo_service_emergency" msgid="4763879891415016848">"ਸਿਰਫ਼ ਸੰਕਟਕਾਲੀਨ ਕਾਲਾਂ"</string> @@ -892,12 +892,12 @@ <string name="radio_info_ppp_received_label" msgid="5753592451640644889">"ਡਾਟਾ ਪ੍ਰਾਪਤ ਹੋਇਆ:"</string> <string name="radio_info_gsm_service_label" msgid="6443348321714241328">"ਵੌਇਸ ਸੇਵਾ:"</string> <string name="radio_info_signal_strength_label" msgid="5545444702102543260">"ਸਿਗਨਲ ਦੀ ਤੀਬਰਤਾ:"</string> - <string name="radio_info_call_status_label" msgid="7693575431923095487">"ਵੌਇਸ ਕਾਲ ਸਥਿਤੀ:"</string> + <string name="radio_info_call_status_label" msgid="7693575431923095487">"ਅਵਾਜ਼ੀ ਕਾਲ ਸਥਿਤੀ:"</string> <string name="radio_info_ppp_sent_label" msgid="6542208429356199695">"ਡਾਟਾ ਭੇਜਿਆ ਗਿਆ:"</string> <string name="radio_info_message_waiting_label" msgid="1886549432566952078">"ਸੁਨੇਹੇ ਦੀ ਉਡੀਕ:"</string> <string name="radio_info_phone_number_label" msgid="2533852539562512203">"ਫ਼ੋਨ ਨੰਬਰ:"</string> <string name="radio_info_band_mode_label" msgid="23480556225515290">"ਰੇਡੀਓ ਬੈਂਡ ਚੁਣੋ"</string> - <string name="radio_info_voice_network_type_label" msgid="2395347336419593265">"ਵੌਇਸ ਨੈੱਟਵਰਕ ਕਿਸਮ:"</string> + <string name="radio_info_voice_network_type_label" msgid="2395347336419593265">"ਅਵਾਜ਼ੀ ਨੈੱਟਵਰਕ ਦੀ ਕਿਸਮ:"</string> <string name="radio_info_data_network_type_label" msgid="8886597029237501929">"ਡਾਟਾ ਨੈੱਟਵਰਕ ਕਿਸਮ:"</string> <string name="phone_index_label" msgid="6222406512768964268">"ਫ਼ੋਨ ਕ੍ਰਮ-ਸੂਚੀ ਚੁਣੋ"</string> <string name="radio_info_set_perferred_label" msgid="7408131389363136210">"ਤਰਜੀਹੀ ਨੈੱਟਵਰਕ ਕਿਸਮ ਸੈੱਟ ਕਰੋ:"</string> diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml index ceb9082475..006693bc6f 100644 --- a/res/values-pl/strings.xml +++ b/res/values-pl/strings.xml @@ -278,7 +278,7 @@ <!-- no translation found for enhanced_4g_lte_mode_sumary_variant:0 (2943982616649705147) --> <!-- no translation found for enhanced_4g_lte_mode_sumary_variant:1 (5262249464504131443) --> <!-- no translation found for enhanced_4g_lte_mode_sumary_variant:2 (6356974241850241718) --> - <string name="data_enabled" msgid="22525832097434368">"Włączone przesyłanie danych"</string> + <string name="data_enabled" msgid="22525832097434368">"Przesyłanie danych włączone"</string> <string name="data_enable_summary" msgid="696860063456536557">"Zezwalaj na użycie danych"</string> <string name="dialog_alert_title" msgid="5260471806940268478">"Uwaga"</string> <string name="roaming" msgid="1576180772877858949">"Roaming"</string> diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml index db0799daf9..89d22790ea 100644 --- a/res/values-pt-rPT/strings.xml +++ b/res/values-pt-rPT/strings.xml @@ -638,12 +638,12 @@ <string name="phone_in_ecm_call_notification_text" msgid="653972232922670335">"Ligação de dados desativada"</string> <string name="phone_in_ecm_notification_complete_time" msgid="7341624337163082759">"Sem ligação de dados até à(s) <xliff:g id="COMPLETETIME">%s</xliff:g>"</string> <plurals name="alert_dialog_exit_ecm" formatted="false" msgid="5425906903766466743"> - <item quantity="other">O telemóvel fica no modo de Chamada de emergência durante <xliff:g id="COUNT_1">%s</xliff:g> minutos. Neste modo, não é possível utilizar aplicações com uma ligação de dados. Pretende sair agora?</item> <item quantity="one">O telemóvel fica no modo de Chamada de emergência durante <xliff:g id="COUNT_0">%s</xliff:g> minuto. Neste modo, não é possível utilizar aplicações com uma ligação de dados. Pretende sair agora?</item> + <item quantity="other">O telemóvel fica no modo de Chamada de emergência durante <xliff:g id="COUNT_1">%s</xliff:g> minutos. Neste modo, não é possível utilizar aplicações com uma ligação de dados. Pretende sair agora?</item> </plurals> <plurals name="alert_dialog_not_avaialble_in_ecm" formatted="false" msgid="1152682528741457004"> - <item quantity="other">A ação selecionada não está disponível no modo de Chamada de emergência. O telemóvel fica neste modo durante <xliff:g id="COUNT_1">%s</xliff:g> minutos. Pretende sair agora?</item> <item quantity="one">A ação selecionada não está disponível no modo de Chamada de emergência. O telemóvel fica neste modo durante <xliff:g id="COUNT_0">%s</xliff:g> minuto. Pretende sair agora?</item> + <item quantity="other">A ação selecionada não está disponível no modo de Chamada de emergência. O telemóvel fica neste modo durante <xliff:g id="COUNT_1">%s</xliff:g> minutos. Pretende sair agora?</item> </plurals> <string name="alert_dialog_in_ecm_call" msgid="1207545603149771978">"A ação selecionada não está disponível durante uma chamada de emergência."</string> <string name="progress_dialog_exiting_ecm" msgid="9159080081676927217">"A sair do modo de chamada de retorno de emergência"</string> @@ -653,8 +653,8 @@ <string name="phone_in_ecm_call_notification_text_without_data_restriction_hint" msgid="3747860785153531225">"O telemóvel está no modo de chamada de retorno de emergência."</string> <string name="phone_in_ecm_notification_complete_time_without_data_restriction_hint" msgid="3690292264812050858">"Até à(s) <xliff:g id="COMPLETETIME">%s</xliff:g>."</string> <plurals name="alert_dialog_exit_ecm_without_data_restriction_hint" formatted="false" msgid="6477733043040328640"> - <item quantity="other">O telemóvel ficará no modo de chamada de retorno de emergência durante <xliff:g id="COUNT_1">%s</xliff:g> minutos.\nPretende sair agora?</item> <item quantity="one">O telemóvel ficará no modo de chamada de retorno de emergência durante <xliff:g id="COUNT_0">%s</xliff:g> minuto.\nPretende sair agora?</item> + <item quantity="other">O telemóvel ficará no modo de chamada de retorno de emergência durante <xliff:g id="COUNT_1">%s</xliff:g> minutos.\nPretende sair agora?</item> </plurals> <string name="voicemail_provider" msgid="4158806657253745294">"Serviço"</string> <string name="voicemail_settings" msgid="4451045613238972776">"Configuração"</string> diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml index 4c0570d0e7..4b112c4fec 100644 --- a/res/values-sv/strings.xml +++ b/res/values-sv/strings.xml @@ -451,8 +451,8 @@ <string name="sum_fdn" msgid="6152246141642323582">"Hantera fasta nummer"</string> <string name="sum_fdn_change_pin" msgid="3510994280557335727">"Ändra PIN-kod för FDN-åtkomst"</string> <string name="sum_fdn_manage_list" msgid="3311397063233992907">"Hantera nummerlistan"</string> - <string name="voice_privacy" msgid="7346935172372181951">"Sekretess för Voice"</string> - <string name="voice_privacy_summary" msgid="3556460926168473346">"Aktivera avancerat sekretessläge"</string> + <string name="voice_privacy" msgid="7346935172372181951">"Integritet för Voice"</string> + <string name="voice_privacy_summary" msgid="3556460926168473346">"Aktivera avancerat integritetsläge"</string> <string name="tty_mode_option_title" msgid="3843817710032641703">"TTY-läge"</string> <string name="tty_mode_option_summary" msgid="4770510287236494371">"Ange TTY-läge"</string> <string name="auto_retry_mode_title" msgid="2985801935424422340">"Försök igen automatiskt"</string> diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml index 59b3503c19..9db350e64b 100644 --- a/res/values-te/strings.xml +++ b/res/values-te/strings.xml @@ -393,9 +393,9 @@ <string name="enable_disable_retail_directory" msgid="9095153426757081972">"రీటైల్ డైరెక్టరీ"</string> <string name="retail_directory_enable" msgid="2532176568755452171">"రీటైల్ డైరెక్టరీ ప్రారంభించబడింది"</string> <string name="retail_directory_disable" msgid="7242451210736299193">"రీటైల్ డైరెక్టరీ నిలిపివేయబడింది"</string> - <string name="enable_disable_advertisements" msgid="8704125663718797151">"బిజినెస్ ప్రకటనలు"</string> - <string name="advertisements_enable" msgid="8651409664217899145">"బిజినెస్ ప్రకటనలు ప్రారంభించబడ్డాయి"</string> - <string name="advertisements_disable" msgid="2999957360508271492">"బిజినెస్ ప్రకటనలు నిలిపివేయబడ్డాయి"</string> + <string name="enable_disable_advertisements" msgid="8704125663718797151">"అడ్వర్టయిజ్మెంట్లు"</string> + <string name="advertisements_enable" msgid="8651409664217899145">"అడ్వర్టయిజ్మెంట్లు ఎనేబుల్ చేయబడ్డాయి"</string> + <string name="advertisements_disable" msgid="2999957360508271492">"అడ్వర్టయిజ్మెంట్లు డిజేబుల్ చేయబడ్డాయి"</string> <string name="enable_disable_stock_quotes" msgid="631498357725951825">"స్టాక్ కోట్లు"</string> <string name="stock_quotes_enable" msgid="5104318195579771947">"స్టాక్ కోట్లు ప్రారంభించబడ్డాయి"</string> <string name="stock_quotes_disable" msgid="3126423481704498278">"స్టాక్ కోట్లు నిలిపివేయబడ్డాయి"</string> @@ -619,7 +619,7 @@ <string name="ota_skip_activation_dialog_title" msgid="7666611236789203797">"సక్రియం చేయడాన్ని దాటవేయాలా?"</string> <string name="ota_skip_activation_dialog_message" msgid="6691722887019708713">"మీరు సక్రియం చేయడాన్ని దాటవేస్తే, కాల్స్ చేయలేరు లేదా మొబైల్ డేటా నెట్వర్క్లకు కనెక్ట్ చేయలేరు (మీరు Wi-Fi నెట్వర్క్లకు కనెక్ట్ చేయగలిగినప్పటికీ). మీరు మీ ఫోన్ను సక్రియం చేసేవరకు, దాన్ని ప్రారంభించే ప్రతిసారీ సక్రియం చేయమని మిమ్మల్ని అడుగుతుంది."</string> <string name="ota_skip_activation_dialog_skip_label" msgid="5908029466817825633">"దాటవేయి"</string> - <string name="ota_activate" msgid="7939695753665438357">"సక్రియం చేయి"</string> + <string name="ota_activate" msgid="7939695753665438357">"యాక్టివేట్ చేయండి"</string> <string name="ota_title_activate_success" msgid="1272135024761004889">"ఫోన్ సక్రియం చేయబడింది."</string> <string name="ota_title_problem_with_activation" msgid="7019745985413368726">"సక్రియం చేయడంలో సమస్య"</string> <string name="ota_listen" msgid="2772252405488894280">"సక్రియం చేయడం పూర్తయిందని మీకు వినిపించేవరకు చదివి వినిపించే సూచనలను అనుసరించండి."</string> @@ -849,8 +849,8 @@ <string name="radioInfo_menu_viewADN" msgid="4533179730908559846">"SIM అడ్రస్ పుస్తకాన్ని చూడండి"</string> <string name="radioInfo_menu_viewFDN" msgid="1847236480527032061">"ఫిక్స్డ్ డయలింగ్ నంబర్లను చూడండి"</string> <string name="radioInfo_menu_viewSDN" msgid="2613431584522392842">"సర్వీస్ డయలింగ్ నంబర్లను చూడండి"</string> - <string name="radioInfo_menu_getIMS" msgid="1950869267853198232">"IMS సేవ స్థితి"</string> - <string name="radio_info_ims_reg_status_title" msgid="6875885401313992007">"IMS స్థితి"</string> + <string name="radioInfo_menu_getIMS" msgid="1950869267853198232">"IMS సేవ స్టేటస్"</string> + <string name="radio_info_ims_reg_status_title" msgid="6875885401313992007">"IMS స్టేటస్"</string> <string name="radio_info_ims_reg_status_registered" msgid="7095182114078864326">"నమోదు చేయబడింది"</string> <string name="radio_info_ims_reg_status_not_registered" msgid="8045821447288876085">"నమోదు కాలేదు"</string> <string name="radio_info_ims_feature_status_available" msgid="6493200914756969292">"అందుబాటులో ఉన్నారు"</string> diff --git a/sip/res/values-as/strings.xml b/sip/res/values-as/strings.xml index 76a0b5f973..13043e3194 100644 --- a/sip/res/values-as/strings.xml +++ b/sip/res/values-as/strings.xml @@ -20,7 +20,7 @@ <string name="sip_accounts" msgid="7297896885665783239">"SIP একাউণ্টসমূহ"</string> <string name="sip_accounts_title" msgid="3061686404598143943">"একাউণ্টসমূহ"</string> <string name="sip_receive_calls" msgid="3403644006618369349">"অন্তৰ্গামী কল লাভ কৰি থকা হৈছে"</string> - <string name="sip_receive_calls_summary" msgid="5306603671778761443">"বেটাৰি অধিক ব্যৱহাৰ কৰে"</string> + <string name="sip_receive_calls_summary" msgid="5306603671778761443">"বেটাৰী অধিক ব্যৱহাৰ কৰে"</string> <string name="sip_call_options_title" msgid="5027066677561068192">"SIP কলিং ব্যৱহাৰ কৰক"</string> <string name="sip_call_options_wifi_only_title" msgid="6663105297927456484">"SIP কলিং ব্যৱহাৰ কৰক (কেৱল ৱাই-ফাই)"</string> <string name="sip_call_options_entry_1" msgid="4722647332760934261">"ডেটা নেটৱৰ্ক উপলব্ধ থাকোঁতে সকলো কলৰ বাবে"</string> diff --git a/sip/res/values-te/strings.xml b/sip/res/values-te/strings.xml index b646f9d19c..b821a6000e 100644 --- a/sip/res/values-te/strings.xml +++ b/sip/res/values-te/strings.xml @@ -36,7 +36,7 @@ <string name="alert_dialog_close" msgid="1734746505531110706">"ప్రొఫైల్ను మూసివేయండి"</string> <string name="alert_dialog_ok" msgid="7806760618798687406">"సరే"</string> <string name="close_profile" msgid="3756064641769751774">"మూసివేయి"</string> - <string name="registration_status_checking_status" msgid="884179594507591180">"స్థితిని తనిఖీ చేస్తోంది..."</string> + <string name="registration_status_checking_status" msgid="884179594507591180">"స్టేటస్ని తనిఖీ చేస్తోంది..."</string> <string name="registration_status_registering" msgid="7986331597809521791">"నమోదు చేస్తోంది…"</string> <string name="registration_status_still_trying" msgid="7178623685868766282">"ఇప్పటికీ ప్రయత్నిస్తోంది..."</string> <string name="registration_status_not_receiving" msgid="3873074208531938401">"కాల్స్ను స్వీకరించడం లేదు."</string> diff --git a/sip/src/com/android/services/telephony/sip/SipAccountRegistry.java b/sip/src/com/android/services/telephony/sip/SipAccountRegistry.java index 2845dacfcb..6b34f00ed5 100644 --- a/sip/src/com/android/services/telephony/sip/SipAccountRegistry.java +++ b/sip/src/com/android/services/telephony/sip/SipAccountRegistry.java @@ -236,7 +236,8 @@ public final class SipAccountRegistry { Intent intent = new Intent(TelecomManager.ACTION_CHANGE_PHONE_ACCOUNTS); intent.setFlags(Intent.FLAG_RECEIVER_INCLUDE_BACKGROUND); - PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0); + PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, + PendingIntent.FLAG_IMMUTABLE); Notification.Action action = new Notification.Action.Builder(R.drawable.ic_sim_card, context.getString(R.string.sip_accounts_removed_notification_action), diff --git a/src/com/android/phone/CallForwardEditPreference.java b/src/com/android/phone/CallForwardEditPreference.java index 17f7cbd173..7fd4df098a 100644 --- a/src/com/android/phone/CallForwardEditPreference.java +++ b/src/com/android/phone/CallForwardEditPreference.java @@ -85,6 +85,7 @@ public class CallForwardEditPreference extends EditPhoneNumberPreference { CarrierXmlParser.SsEntry.SSAction.UNKNOWN; private int mAction; private HashMap<String, String> mCfInfo; + private long mDelayMillisAfterUssdSet = 1000; private boolean mExpectMore; private boolean mIsTimerEnabled; @@ -947,8 +948,9 @@ public class CallForwardEditPreference extends EditPhoneNumberPreference { mPhone.getCallForwardingOption(reason, mServiceClass, obtainMessage(MESSAGE_GET_CF, msg.arg1, MESSAGE_SET_CF, ar.exception)); } else { - mHandler.sendMessage(mHandler.obtainMessage(mHandler.MESSAGE_GET_CF_USSD, - msg.arg1, MyHandler.MESSAGE_SET_CF, ar.exception)); + mHandler.sendMessageDelayed(mHandler.obtainMessage(mHandler.MESSAGE_GET_CF_USSD, + msg.arg1, MyHandler.MESSAGE_SET_CF, ar.exception), + mDelayMillisAfterUssdSet); } } diff --git a/src/com/android/phone/CallWaitingSwitchPreference.java b/src/com/android/phone/CallWaitingSwitchPreference.java index a6c990cc4e..21b0c338c8 100644 --- a/src/com/android/phone/CallWaitingSwitchPreference.java +++ b/src/com/android/phone/CallWaitingSwitchPreference.java @@ -6,6 +6,7 @@ import static com.android.phone.TimeConsumingPreferenceActivity.RESPONSE_ERROR; import android.content.Context; import android.os.Handler; import android.os.Message; +import android.os.PersistableBundle; import android.preference.SwitchPreference; import android.telephony.CarrierConfigManager; import android.telephony.TelephonyManager; @@ -16,22 +17,26 @@ import com.android.internal.telephony.CommandException; import com.android.internal.telephony.Phone; import com.android.internal.telephony.PhoneConstants; -import java.util.concurrent.Executor; import java.util.concurrent.Executors; +import java.util.concurrent.ScheduledExecutorService; +import java.util.concurrent.TimeUnit; +import java.util.function.Consumer; public class CallWaitingSwitchPreference extends SwitchPreference { private static final String LOG_TAG = "CallWaitingSwitchPreference"; + private static final int DELAY_MILLIS_FOR_USSD = 1000; private final boolean DBG = (PhoneGlobals.DBG_LEVEL >= 2); private final MyHandler mHandler = new MyHandler(); private Phone mPhone; private TimeConsumingPreferenceListener mTcpListener; - private Executor mExecutor; + private ScheduledExecutorService mExecutor; private TelephonyManager mTelephonyManager; private boolean mIsDuringUpdateProcess = false; private int mUpdateStatus = TelephonyManager.CALL_WAITING_STATUS_UNKNOWN_ERROR; private int mQueryStatus = TelephonyManager.CALL_WAITING_STATUS_UNKNOWN_ERROR; private boolean mUtEnabled = false; + private boolean mUssdMode = false; public CallWaitingSwitchPreference(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); @@ -49,10 +54,15 @@ public class CallWaitingSwitchPreference extends SwitchPreference { TimeConsumingPreferenceListener listener, boolean skipReading, Phone phone) { mPhone = phone; mTcpListener = listener; - mExecutor = Executors.newSingleThreadExecutor(); + mExecutor = Executors.newSingleThreadScheduledExecutor(); mTelephonyManager = getContext().getSystemService( TelephonyManager.class).createForSubscriptionId(phone.getSubId()); mUtEnabled = mPhone.isUtEnabled(); + CarrierConfigManager configManager = getContext().getSystemService( + CarrierConfigManager.class); + PersistableBundle bundle = configManager.getConfigForSubId(phone.getSubId()); + mUssdMode = (bundle != null) ? bundle.getBoolean( + CarrierConfigManager.KEY_USE_CALL_WAITING_USSD_BOOL, false) : false; if (!skipReading) { Log.d(LOG_TAG, "init getCallWaitingStatus"); @@ -72,7 +82,23 @@ public class CallWaitingSwitchPreference extends SwitchPreference { private void updateStatusCallBack(int result) { Log.d(LOG_TAG, "updateStatusCallBack: CW state " + result + ", and re get"); mUpdateStatus = result; - mTelephonyManager.getCallWaitingStatus(mExecutor, this::queryStatusCallBack); + if (mUssdMode) { + Log.d(LOG_TAG, "updateStatusCallBack: USSD mode needs to wait 1s since Framework" + + " has the limitation"); + Consumer<Integer> resultListener = this::queryStatusCallBack; + try { + mExecutor.schedule(new Runnable() { + @Override + public void run() { + mTelephonyManager.getCallWaitingStatus(mExecutor, resultListener); + } + }, DELAY_MILLIS_FOR_USSD, TimeUnit.MILLISECONDS); + } catch (Exception e) { + Log.d(LOG_TAG, "Exception while waiting: " + e); + } + } else { + mTelephonyManager.getCallWaitingStatus(mExecutor, this::queryStatusCallBack); + } } @Override diff --git a/src/com/android/phone/CarrierConfigLoader.java b/src/com/android/phone/CarrierConfigLoader.java index dd1c1d1622..62353d061f 100644 --- a/src/com/android/phone/CarrierConfigLoader.java +++ b/src/com/android/phone/CarrierConfigLoader.java @@ -65,6 +65,7 @@ import com.android.internal.telephony.SubscriptionInfoUpdater; import com.android.internal.telephony.TelephonyPermissions; import com.android.internal.telephony.util.ArrayUtils; import com.android.internal.util.IndentingPrintWriter; +import com.android.telephony.Rlog; import com.qti.extphone.ExtTelephonyManager; @@ -1076,6 +1077,7 @@ public class CarrierConfigLoader extends ICarrierConfigLoader.Stub { } String fileName; + String iccid = null; if (isNoSimConfig) { fileName = getFilenameForNoSimConfig(packageName); } else { @@ -1086,7 +1088,7 @@ public class CarrierConfigLoader extends ICarrierConfigLoader.Stub { return null; } - final String iccid = getIccIdForPhoneId(phoneId); + iccid = getIccIdForPhoneId(phoneId); final int cid = getSpecificCarrierIdForPhoneId(phoneId); if (iccid == null) { loge("Cannot restore config with null iccid."); @@ -1115,7 +1117,15 @@ public class CarrierConfigLoader extends ICarrierConfigLoader.Stub { } catch (FileNotFoundException e) { // Missing file is normal occurrence that might occur with a new sim or when restoring // an override file during boot and should not be treated as an error. - if (file != null) logd("File not found: " + file.getPath()); + if (file != null) { + if (isNoSimConfig) { + logd("File not found: " + file.getPath()); + } else { + String filePath = file.getPath(); + filePath = getFilePathForLogging(filePath, iccid); + logd("File not found : " + filePath); + } + } } catch (IOException e) { loge(e.toString()); } @@ -1123,6 +1133,22 @@ public class CarrierConfigLoader extends ICarrierConfigLoader.Stub { return restoredBundle; } + /** + * This method will mask most part of iccid in the filepath for logging on userbuild + */ + private String getFilePathForLogging(String filePath, String iccid) { + // If loggable then return with actual file path + if (Rlog.isLoggable(LOG_TAG, Log.VERBOSE)) { + return filePath; + } + String path = filePath; + int length = (iccid != null) ? iccid.length() : 0; + if (length > 5 && filePath != null) { + path = filePath.replace(iccid.substring(5), "***************"); + } + return path; + } + private PersistableBundle restoreConfigFromXml(String packageName, @NonNull String extraString, int phoneId) { return restoreConfigFromXml(packageName, extraString, phoneId, false); diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java index ba046b67ad..705d5a62a0 100755 --- a/src/com/android/phone/PhoneInterfaceManager.java +++ b/src/com/android/phone/PhoneInterfaceManager.java @@ -22,6 +22,7 @@ import static com.android.internal.telephony.PhoneConstants.PHONE_TYPE_CDMA; import static com.android.internal.telephony.PhoneConstants.PHONE_TYPE_GSM; import static com.android.internal.telephony.PhoneConstants.PHONE_TYPE_IMS; import static com.android.internal.telephony.PhoneConstants.SUBSCRIPTION_KEY; +import static com.android.internal.telephony.TelephonyStatsLog.RCS_CLIENT_PROVISIONING_STATS__EVENT__CLIENT_PARAMS_SENT; import android.Manifest; import android.Manifest.permission; @@ -180,6 +181,7 @@ import com.android.internal.telephony.euicc.EuiccConnector; import com.android.internal.telephony.ims.ImsResolver; import com.android.internal.telephony.imsphone.ImsPhone; import com.android.internal.telephony.imsphone.ImsPhoneCallTracker; +import com.android.internal.telephony.metrics.RcsStats; import com.android.internal.telephony.metrics.TelephonyMetrics; import com.android.internal.telephony.uicc.IccCardApplicationStatus.AppType; import com.android.internal.telephony.uicc.IccIoResult; @@ -2055,7 +2057,8 @@ public class PhoneInterfaceManager extends ITelephony.Stub { case CMD_PREPARE_UNATTENDED_REBOOT: request = (MainThreadRequest) msg.obj; request.result = - UiccController.getInstance().getPinStorage().prepareUnattendedReboot(); + UiccController.getInstance().getPinStorage() + .prepareUnattendedReboot(request.workSource); notifyRequester(request); break; @@ -5522,11 +5525,9 @@ public class PhoneInterfaceManager extends ITelephony.Stub { */ public int setForbiddenPlmns(int subId, int appType, List<String> fplmns, String callingPackage, String callingFeatureId) { - if (!TelephonyPermissions.checkCallingOrSelfReadPhoneState(mApp, subId, callingPackage, - callingFeatureId, "setForbiddenPlmns")) { - if (DBG) logv("no permissions for setForbiddenplmns"); - throw new IllegalStateException("No Permissions for setForbiddenPlmns"); - } + TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege( + mApp, subId, "setForbiddenPlmns"); + if (appType != TelephonyManager.APPTYPE_USIM && appType != TelephonyManager.APPTYPE_SIM) { loge("setForbiddenPlmnList(): App Type must be USIM or SIM"); throw new IllegalArgumentException("Invalid appType: App Type must be USIM or SIM"); @@ -6932,7 +6933,9 @@ public class PhoneInterfaceManager extends ITelephony.Stub { for (int p = packages.size() - 1; p >= 0; p--) { PackageInfo pkgInfo = packages.get(p); if (pkgInfo != null && pkgInfo.packageName != null - && card.getCarrierPrivilegeStatus(pkgInfo) + && getCarrierPrivilegeStatusFromCarrierConfigRules( + card.getCarrierPrivilegeStatus(pkgInfo), + getPhone(phoneId), pkgInfo.packageName) == TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS) { privilegedPackages.add(pkgInfo.packageName); } @@ -8346,6 +8349,16 @@ public class PhoneInterfaceManager extends ITelephony.Stub { int result = (int) sendRequest(CMD_ENABLE_VONR, enabled, subId, workSource); if (DBG) log("setVoNrEnabled result: " + result); + + if (result == TelephonyManager.ENABLE_VONR_SUCCESS) { + if (DBG) { + log("Set VoNR settings in siminfo db; subId=" + subId + ", value:" + enabled); + } + SubscriptionManager.setSubscriptionProperty( + subId, SubscriptionManager.NR_ADVANCED_CALLING_ENABLED, + (enabled ? "1" : "0")); + } + return result; } finally { Binder.restoreCallingIdentity(identity); @@ -10414,6 +10427,9 @@ public class PhoneInterfaceManager extends ITelephony.Stub { } else { configBinder.setRcsClientConfiguration(rcc); } + + RcsStats.getInstance().onRcsClientProvisioningStats(subId, + RCS_CLIENT_PROVISIONING_STATS__EVENT__CLIENT_PARAMS_SENT); } catch (RemoteException e) { Rlog.e(LOG_TAG, "fail to setRcsClientConfiguration " + e.getMessage()); throw new ServiceSpecificException(ImsException.CODE_ERROR_SERVICE_UNAVAILABLE, @@ -10919,11 +10935,12 @@ public class PhoneInterfaceManager extends ITelephony.Stub { @Override @TelephonyManager.PrepareUnattendedRebootResult public int prepareForUnattendedReboot() { + WorkSource workSource = getWorkSource(Binder.getCallingUid()); enforceRebootPermission(); final long identity = Binder.clearCallingIdentity(); try { - return (int) sendRequest(CMD_PREPARE_UNATTENDED_REBOOT, null); + return (int) sendRequest(CMD_PREPARE_UNATTENDED_REBOOT, null, workSource); } finally { Binder.restoreCallingIdentity(identity); } diff --git a/src/com/android/phone/RcsProvisioningMonitor.java b/src/com/android/phone/RcsProvisioningMonitor.java index 6d2bd6f848..e819afcb8c 100644 --- a/src/com/android/phone/RcsProvisioningMonitor.java +++ b/src/com/android/phone/RcsProvisioningMonitor.java @@ -16,6 +16,10 @@ package com.android.phone; +import static com.android.internal.telephony.TelephonyStatsLog.RCS_ACS_PROVISIONING_STATS__RESPONSE_TYPE__PROVISIONING_XML; +import static com.android.internal.telephony.TelephonyStatsLog.RCS_CLIENT_PROVISIONING_STATS__EVENT__DMA_CHANGED; +import static com.android.internal.telephony.TelephonyStatsLog.RCS_CLIENT_PROVISIONING_STATS__EVENT__TRIGGER_RCS_RECONFIGURATION; + import android.Manifest; import android.app.role.OnRoleHoldersChangedListener; import android.app.role.RoleManager; @@ -47,6 +51,8 @@ import com.android.ims.FeatureConnector; import com.android.ims.FeatureUpdates; import com.android.ims.RcsFeatureManager; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.telephony.metrics.RcsStats; +import com.android.internal.telephony.metrics.RcsStats.RcsProvisioningCallback; import com.android.internal.telephony.util.HandlerExecutor; import com.android.internal.util.CollectionUtils; import com.android.telephony.Rlog; @@ -100,6 +106,8 @@ public class RcsProvisioningMonitor { private final RoleManagerAdapter mRoleManager; private FeatureConnectorFactory<RcsFeatureManager> mFeatureFactory; + private RcsStats mRcsStats; + private static RcsProvisioningMonitor sInstance; private final SubscriptionManager.OnSubscriptionsChangedListener mSubChangedListener = @@ -227,6 +235,10 @@ public class RcsProvisioningMonitor { if (mSingleRegistrationCapability != singleRegistrationCapability) { mSingleRegistrationCapability = singleRegistrationCapability; notifyDma(); + + // update whether single registration supported. + mRcsStats.setEnableSingleRegistration(mSubId, + mSingleRegistrationCapability == ProvisioningManager.STATUS_CAPABLE); } } @@ -338,6 +350,9 @@ public class RcsProvisioningMonitor { } else { notifyRcsAutoConfigurationReceived(); } + + // check callback for metrics if not registered, register callback + registerMetricsCallback(); } else { // clear callbacks if rcs disconnected clearCallbacks(); @@ -397,6 +412,18 @@ public class RcsProvisioningMonitor { } } } + + private void registerMetricsCallback() { + RcsProvisioningCallback rcsProvisioningCallback = mRcsStats.getRcsProvisioningCallback( + mSubId, mSingleRegistrationCapability == ProvisioningManager.STATUS_CAPABLE); + + // if not yet registered, register callback and set registered value + if (rcsProvisioningCallback != null && !rcsProvisioningCallback.getRegistered()) { + if (addRcsConfigCallback(rcsProvisioningCallback)) { + rcsProvisioningCallback.setRegistered(true); + } + } + } } @VisibleForTesting @@ -454,7 +481,7 @@ public class RcsProvisioningMonitor { @VisibleForTesting public RcsProvisioningMonitor(PhoneGlobals app, Looper looper, RoleManagerAdapter roleManager, - FeatureConnectorFactory<RcsFeatureManager> factory) { + FeatureConnectorFactory<RcsFeatureManager> factory, RcsStats rcsStats) { mPhone = app; mHandler = new MyHandler(looper); mCarrierConfigManager = mPhone.getSystemService(CarrierConfigManager.class); @@ -465,6 +492,7 @@ public class RcsProvisioningMonitor { logv("DMA is " + mDmaPackageName); mDmaChangedListener = new DmaChangedListener(); mFeatureFactory = factory; + mRcsStats = rcsStats; init(); } @@ -477,7 +505,8 @@ public class RcsProvisioningMonitor { HandlerThread handlerThread = new HandlerThread(TAG); handlerThread.start(); sInstance = new RcsProvisioningMonitor(app, handlerThread.getLooper(), - new RoleManagerAdapterImpl(app), RcsFeatureManager::getConnector); + new RoleManagerAdapterImpl(app), RcsFeatureManager::getConnector, + RcsStats.getInstance()); } return sInstance; } @@ -704,6 +733,10 @@ public class RcsProvisioningMonitor { logv("acs not used, set cached config and notify."); v.setConfig(cachedConfig); } + + // store RCS metrics - DMA changed event + mRcsStats.onRcsClientProvisioningStats(k, + RCS_CLIENT_PROVISIONING_STATS__EVENT__DMA_CHANGED); }); } } @@ -803,6 +836,14 @@ public class RcsProvisioningMonitor { } info.setConfig(isCompressed ? RcsConfig.decompressGzip(config) : config); updateConfigForSub(subId, config, isCompressed); + + // Supporting ACS means config data comes from ACS + // store RCS metrics - received provisioning event + if (isAcsUsed(subId)) { + mRcsStats.onRcsAcsProvisioningStats(subId, 200, + RCS_ACS_PROVISIONING_STATS__RESPONSE_TYPE__PROVISIONING_XML, + isRcsVolteSingleRegistrationEnabled(subId)); + } } private void onReconfigRequest(int subId) { @@ -814,6 +855,10 @@ public class RcsProvisioningMonitor { updateConfigForSub(subId, null, true); info.triggerRcsReconfiguration(); } + + // store RCS metrics - reconfig event + mRcsStats.onRcsClientProvisioningStats(subId, + RCS_CLIENT_PROVISIONING_STATS__EVENT__TRIGGER_RCS_RECONFIGURATION); } private void notifyDmaForSub(int subId, int capability) { diff --git a/src/com/android/services/telephony/ImsConference.java b/src/com/android/services/telephony/ImsConference.java index 1e39fb0335..3b0de2ae8b 100755..100644 --- a/src/com/android/services/telephony/ImsConference.java +++ b/src/com/android/services/telephony/ImsConference.java @@ -596,6 +596,10 @@ public class ImsConference extends TelephonyConferenceBase implements Holdable { (properties & Connection.PROPERTY_IS_ADHOC_CONFERENCE) != 0); Log.i(this, "applyHostProperties: confProp=%s", conferenceProperties); + conferenceProperties = changeBitmask(conferenceProperties, + Connection.PROPERTY_CROSS_SIM, + (properties & Connection.PROPERTY_CROSS_SIM) != 0); + return conferenceProperties; } diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java index 6757b4a9bc..9655b7e052 100644 --- a/src/com/android/services/telephony/TelephonyConnectionService.java +++ b/src/com/android/services/telephony/TelephonyConnectionService.java @@ -605,7 +605,8 @@ public class TelephonyConnectionService extends ConnectionService { IntentFilter intentFilter = new IntentFilter( TelecomManager.ACTION_TTY_PREFERRED_MODE_CHANGED); - registerReceiver(mTtyBroadcastReceiver, intentFilter); + registerReceiver(mTtyBroadcastReceiver, intentFilter, + android.Manifest.permission.MODIFY_PHONE_STATE, null); } @Override diff --git a/src/com/android/services/telephony/rcs/DelegateStateTracker.java b/src/com/android/services/telephony/rcs/DelegateStateTracker.java index 321c7ba847..18aab88a66 100644 --- a/src/com/android/services/telephony/rcs/DelegateStateTracker.java +++ b/src/com/android/services/telephony/rcs/DelegateStateTracker.java @@ -24,9 +24,12 @@ import android.telephony.ims.SipDelegateImsConfiguration; import android.telephony.ims.aidl.ISipDelegate; import android.telephony.ims.aidl.ISipDelegateConnectionStateCallback; import android.telephony.ims.stub.DelegateConnectionStateCallback; +import android.util.ArraySet; import android.util.LocalLog; import android.util.Log; +import com.android.internal.telephony.metrics.RcsStats; + import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; @@ -50,11 +53,15 @@ public class DelegateStateTracker implements DelegateBinderStateManager.StateCal private boolean mCreatedCalled = false; private int mRegistrationStateOverride = -1; + private Set<String> mDelegateSupportedTags; + private final RcsStats mRcsStats; + public DelegateStateTracker(int subId, ISipDelegateConnectionStateCallback appStateCallback, - ISipDelegate localDelegateImpl) { + ISipDelegate localDelegateImpl, RcsStats rcsStats) { mSubId = subId; mAppStateCallback = appStateCallback; mLocalDelegateImpl = localDelegateImpl; + mRcsStats = rcsStats; } /** @@ -63,10 +70,13 @@ public class DelegateStateTracker implements DelegateBinderStateManager.StateCal * Registration and state updates will be send via the * {@link SipDelegateBinderConnection.StateCallback} callback implemented by this class as they * arrive. + * @param supportedTags the tags supported by the SipTransportController and ImsService creating + * the SipDelegate. These tags will be used as a key for SipDelegate + * metrics. * @param deniedTags The tags denied by the SipTransportController and ImsService creating the * SipDelegate. These tags will need to be notified back to the IMS application. */ - public void sipDelegateConnected(Set<FeatureTagState> deniedTags) { + public void sipDelegateConnected(Set<String> supportedTags, Set<FeatureTagState> deniedTags) { logi("SipDelegate connected with denied tags:" + deniedTags); // From the IMS application perspective, we only call onCreated/onDestroyed once and // provide the local implementation of ISipDelegate, which doesn't change, even though @@ -74,6 +84,8 @@ public class DelegateStateTracker implements DelegateBinderStateManager.StateCal if (!mCreatedCalled) { mCreatedCalled = true; notifySipDelegateCreated(); + mDelegateSupportedTags = supportedTags; + mRcsStats.createSipDelegateStats(mSubId, mDelegateSupportedTags); } mRegistrationStateOverride = -1; mDelegateDeniedTags = new ArrayList<>(deniedTags); @@ -84,8 +96,8 @@ public class DelegateStateTracker implements DelegateBinderStateManager.StateCal * * This will trigger an override of the IMS application's registration state. All feature tags * in the REGISTERED state will be overridden to move to the deregistering state specified until - * a new SipDelegate was successfully created and {@link #sipDelegateConnected(Set)} was called - * or it was destroyed and {@link #sipDelegateDestroyed(int)} was called. + * a new SipDelegate was successfully created and {@link #sipDelegateConnected(Set, Set)} was + * called or it was destroyed and {@link #sipDelegateDestroyed(int)} was called. * @param deregisteringReason The new deregistering reason that all feature tags in the * registered state should now report. */ @@ -115,6 +127,7 @@ public class DelegateStateTracker implements DelegateBinderStateManager.StateCal mRegistrationStateOverride = -1; try { mAppStateCallback.onDestroyed(reason); + mRcsStats.onSipDelegateStats(mSubId, mDelegateSupportedTags, reason); } catch (RemoteException e) { logw("sipDelegateDestroyed: IMS application is dead: " + e); } @@ -141,6 +154,11 @@ public class DelegateStateTracker implements DelegateBinderStateManager.StateCal logi("onRegistrationStateChanged: sending reg state " + registrationState); try { mAppStateCallback.onFeatureTagStatusChanged(registrationState, mDelegateDeniedTags); + Set<String> registeredFeatureTags = registrationState.getRegisteredFeatureTags(); + mRcsStats.onSipTransportFeatureTagStats(mSubId, + new ArraySet<FeatureTagState>(mDelegateDeniedTags), + registrationState.getDeregisteredFeatureTags(), + registeredFeatureTags); } catch (RemoteException e) { logw("onRegistrationStateChanged: IMS application is dead: " + e); } diff --git a/src/com/android/services/telephony/rcs/SipDelegateController.java b/src/com/android/services/telephony/rcs/SipDelegateController.java index 8cc70a403a..c7281417d2 100644 --- a/src/com/android/services/telephony/rcs/SipDelegateController.java +++ b/src/com/android/services/telephony/rcs/SipDelegateController.java @@ -34,6 +34,7 @@ import android.util.Log; import android.util.Pair; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.telephony.metrics.RcsStats; import com.android.internal.util.IndentingPrintWriter; import java.io.PrintWriter; @@ -102,7 +103,7 @@ public class SipDelegateController { mMessageTransportWrapper = new MessageTransportWrapper(mSubId, executorService, messageCallback); mDelegateStateTracker = new DelegateStateTracker(mSubId, stateCallback, - mMessageTransportWrapper.getDelegateConnection()); + mMessageTransportWrapper.getDelegateConnection(), RcsStats.getInstance()); } /** @@ -191,7 +192,7 @@ public class SipDelegateController { .collect(Collectors.toSet())); mMessageTransportWrapper.openTransport(resultPair.first, allowedTags, resultPair.second); - mDelegateStateTracker.sipDelegateConnected(resultPair.second); + mDelegateStateTracker.sipDelegateConnected(allowedTags, resultPair.second); return true; }); } diff --git a/src/com/android/services/telephony/rcs/SipSessionTracker.java b/src/com/android/services/telephony/rcs/SipSessionTracker.java index 5ab482fef7..68e30656ba 100644 --- a/src/com/android/services/telephony/rcs/SipSessionTracker.java +++ b/src/com/android/services/telephony/rcs/SipSessionTracker.java @@ -24,6 +24,7 @@ import android.util.Log; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.SipMessageParsingUtils; +import com.android.internal.telephony.metrics.RcsStats; import com.android.internal.util.IndentingPrintWriter; import java.io.PrintWriter; @@ -66,6 +67,14 @@ public class SipSessionTracker { // associated pending operation. private final ArrayMap<String, Runnable> mPendingAck = new ArrayMap<>(); + private final RcsStats mRcsStats; + int mSubId; + + public SipSessionTracker(int subId, RcsStats rcsStats) { + mSubId = subId; + mRcsStats = rcsStats; + } + /** * Filter a SIP message to determine if it will result in a new SIP dialog. This will need to be * successfully acknowledged by the remote IMS stack using @@ -73,10 +82,10 @@ public class SipSessionTracker { * * @param message The Incoming SIP message. */ - public void filterSipMessage(SipMessage message) { + public void filterSipMessage(int direction, SipMessage message) { final Runnable r; if (startsEarlyDialog(message)) { - r = getCreateDialogRunnable(message); + r = getCreateDialogRunnable(direction, message); } else if (closesDialog(message)) { r = getCloseDialogRunnable(message); } else if (SipMessageParsingUtils.isSipResponse(message.getStartLine())) { @@ -137,6 +146,8 @@ public class SipSessionTracker { if (dialogsToCleanup.isEmpty()) return; logi("Cleanup dialogs associated with call id: " + callId); for (SipDialog d : dialogsToCleanup) { + mRcsStats.onSipTransportSessionClosed(mSubId, callId, 0, + d.getState() == d.STATE_CLOSED); d.close(); logi("Dialog closed: " + d); } @@ -197,6 +208,9 @@ public class SipSessionTracker { * Clears all tracked sessions. */ public void clearAllSessions() { + for (SipDialog d : mTrackedDialogs) { + mRcsStats.onSipTransportSessionClosed(mSubId, d.getCallId(), 0, false); + } mTrackedDialogs.clear(); mPendingAck.clear(); } @@ -262,7 +276,7 @@ public class SipSessionTracker { return SIP_CLOSE_DIALOG_REQUEST_METHOD.equalsIgnoreCase(startLineSegments[0]); } - private Runnable getCreateDialogRunnable(SipMessage m) { + private Runnable getCreateDialogRunnable(int direction, SipMessage m) { return () -> { List<SipDialog> duplicateDialogs = mTrackedDialogs.stream() .filter(d -> d.getCallId().equals(m.getCallIdParameter())) @@ -273,6 +287,10 @@ public class SipSessionTracker { return; } SipDialog dialog = SipDialog.fromSipMessage(m); + String[] startLineSegments = + SipMessageParsingUtils.splitStartLineAndVerify(m.getStartLine()); + mRcsStats.earlySipTransportSession(startLineSegments[0], dialog.getCallId(), + direction); logi("Starting new SipDialog: " + dialog); mTrackedDialogs.add(dialog); }; @@ -285,6 +303,7 @@ public class SipSessionTracker { .collect(Collectors.toList()); if (dialogsToClose.isEmpty()) return; logi("Closing dialogs associated with: " + m); + mRcsStats.onSipTransportSessionClosed(mSubId, m.getCallIdParameter(), 0, true); for (SipDialog d : dialogsToClose) { d.close(); logi("Dialog closed: " + d); @@ -344,11 +363,13 @@ public class SipSessionTracker { if (statusCode <= 100) return; // If 300+, then this dialog has received an error response and should move to closed state. if (statusCode >= 300) { + mRcsStats.onSipTransportSessionClosed(mSubId, m.getCallIdParameter(), statusCode, true); d.close(); return; } if (toTag == null) logw("updateSipDialogState: No to tag for message: " + m); if (statusCode >= 200) { + mRcsStats.confirmedSipTransportSession(m.getCallIdParameter(), statusCode); d.confirm(toTag); return; } diff --git a/src/com/android/services/telephony/rcs/TelephonyRcsService.java b/src/com/android/services/telephony/rcs/TelephonyRcsService.java index 034382c1c2..046910cb2b 100644 --- a/src/com/android/services/telephony/rcs/TelephonyRcsService.java +++ b/src/com/android/services/telephony/rcs/TelephonyRcsService.java @@ -32,6 +32,7 @@ import android.util.SparseArray; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.PhoneConfigurationManager; +import com.android.internal.telephony.metrics.RcsStats; import com.android.internal.util.IndentingPrintWriter; import com.android.phone.R; @@ -163,6 +164,7 @@ public class TelephonyRcsService { mFeatureControllers = new SparseArray<>(numSlots); mSlotToAssociatedSubIds = new SparseArray<>(numSlots); mRcsUceEnabled = sResourceProxy.getDeviceUceEnabled(mContext); + RcsStats.getInstance().registerUceCallback(); } @VisibleForTesting @@ -173,6 +175,7 @@ public class TelephonyRcsService { mSlotToAssociatedSubIds = new SparseArray<>(numSlots); sResourceProxy = resourceProxy; mRcsUceEnabled = sResourceProxy.getDeviceUceEnabled(mContext); + RcsStats.getInstance().registerUceCallback(); } /** diff --git a/src/com/android/services/telephony/rcs/TransportSipMessageValidator.java b/src/com/android/services/telephony/rcs/TransportSipMessageValidator.java index 777026cc99..3b1b26dd3d 100644 --- a/src/com/android/services/telephony/rcs/TransportSipMessageValidator.java +++ b/src/com/android/services/telephony/rcs/TransportSipMessageValidator.java @@ -16,6 +16,9 @@ package com.android.services.telephony.rcs; +import static com.android.internal.telephony.TelephonyStatsLog.SIP_TRANSPORT_SESSION__SIP_MESSAGE_DIRECTION__INCOMING; +import static com.android.internal.telephony.TelephonyStatsLog.SIP_TRANSPORT_SESSION__SIP_MESSAGE_DIRECTION__OUTGOING; + import android.telephony.ims.DelegateRegistrationState; import android.telephony.ims.FeatureTagState; import android.telephony.ims.SipDelegateConfiguration; @@ -26,6 +29,8 @@ import android.util.LocalLog; import android.util.Log; import com.android.internal.annotations.VisibleForTesting; +import com.android.internal.telephony.SipMessageParsingUtils; +import com.android.internal.telephony.metrics.RcsStats; import com.android.internal.util.IndentingPrintWriter; import com.android.services.telephony.rcs.validator.IncomingTransportStateValidator; import com.android.services.telephony.rcs.validator.MalformedSipMessageValidator; @@ -145,11 +150,13 @@ public class TransportSipMessageValidator { private PendingTask mPendingClose; private PendingRegCleanupTask mPendingRegCleanup; private Consumer<Set<String>> mRegistrationAppliedConsumer; + private final RcsStats mRcsStats; public TransportSipMessageValidator(int subId, ScheduledExecutorService executor) { mSubId = subId; mExecutor = executor; - mSipSessionTracker = new SipSessionTracker(); + mRcsStats = RcsStats.getInstance(); + mSipSessionTracker = new SipSessionTracker(subId, mRcsStats); mOutgoingTransportStateValidator = new OutgoingTransportStateValidator(mSipSessionTracker); mIncomingTransportStateValidator = new IncomingTransportStateValidator(); mOutgoingMessageValidator = new MalformedSipMessageValidator().andThen( @@ -163,7 +170,7 @@ public class TransportSipMessageValidator { public TransportSipMessageValidator(int subId, ScheduledExecutorService executor, SipSessionTracker sipSessionTracker, OutgoingTransportStateValidator outgoingStateValidator, - IncomingTransportStateValidator incomingStateValidator) { + IncomingTransportStateValidator incomingStateValidator, RcsStats rcsStats) { mSubId = subId; mExecutor = executor; mSipSessionTracker = sipSessionTracker; @@ -171,6 +178,7 @@ public class TransportSipMessageValidator { mIncomingTransportStateValidator = incomingStateValidator; mOutgoingMessageValidator = mOutgoingTransportStateValidator; mIncomingMessageValidator = mIncomingTransportStateValidator; + mRcsStats = rcsStats; } /** @@ -365,7 +373,11 @@ public class TransportSipMessageValidator { } ValidationResult result = mOutgoingMessageValidator.validate(message); logi("verifyOutgoingMessage: " + result + ", message=" + message); - if (result.isValidated) mSipSessionTracker.filterSipMessage(message); + if (result.isValidated) { + mSipSessionTracker.filterSipMessage( + SIP_TRANSPORT_SESSION__SIP_MESSAGE_DIRECTION__OUTGOING, message); + } + updateForMetrics(SIP_TRANSPORT_SESSION__SIP_MESSAGE_DIRECTION__OUTGOING, message, result); return result; } @@ -378,7 +390,11 @@ public class TransportSipMessageValidator { public ValidationResult verifyIncomingMessage(SipMessage message) { ValidationResult result = mIncomingMessageValidator.validate(message); logi("verifyIncomingMessage: " + result + ", message=" + message); - if (result.isValidated) mSipSessionTracker.filterSipMessage(message); + if (result.isValidated) { + mSipSessionTracker.filterSipMessage( + SIP_TRANSPORT_SESSION__SIP_MESSAGE_DIRECTION__INCOMING, message); + } + updateForMetrics(SIP_TRANSPORT_SESSION__SIP_MESSAGE_DIRECTION__INCOMING, message, result); return result; } @@ -539,6 +555,28 @@ public class TransportSipMessageValidator { .collect(Collectors.toSet()); } + private void updateForMetrics(int direction, SipMessage m, ValidationResult result) { + String[] startLineSegments = SipMessageParsingUtils + .splitStartLineAndVerify(m.getStartLine()); + if (SipMessageParsingUtils.isSipRequest(m.getStartLine())) { + if (result.isValidated) { + // SipMessage add to list for Metrics stats + mRcsStats.onSipMessageRequest(m.getCallIdParameter(), startLineSegments[0], + direction); + } else { + //Message sending fail and there is no response. + mRcsStats.invalidatedMessageResult(mSubId, startLineSegments[0], direction, + result.restrictedReason); + } + } else if (SipMessageParsingUtils.isSipResponse(m.getStartLine())) { + int statusCode = Integer.parseInt(startLineSegments[1]); + mRcsStats.onSipMessageResponse(mSubId, m.getCallIdParameter(), statusCode, + result.restrictedReason); + } else { + logw("Message is Restricted"); + } + } + private void logi(String log) { Log.i(SipTransportController.LOG_TAG, LOG_TAG + "[" + mSubId + "] " + log); mLocalLog.log("[I] " + log); diff --git a/testapps/GbaTestApp/res/values-it/strings.xml b/testapps/GbaTestApp/res/values-it/strings.xml index 00409d3083..f290a5ba74 100644 --- a/testapps/GbaTestApp/res/values-it/strings.xml +++ b/testapps/GbaTestApp/res/values-it/strings.xml @@ -21,7 +21,7 @@ <string name="request_force_bootstrapping" msgid="206043602616214325">"Forzare il bootstrapping?"</string> <string name="request_org" msgid="8416693445448308975">"Codice organizzazione"</string> <string name="request_security_protocol" msgid="1444164827561010482">"ID protocollo sicurezza UA"</string> - <string name="request_tls_cipher_suite" msgid="6659854717595308404">"ID pacchetto crittografia TLS"</string> + <string name="request_tls_cipher_suite" msgid="6659854717595308404">"ID suite di crittografia TLS"</string> <string name="response_success" msgid="2469204471244527663">"Autenticazione GBA riuscita?"</string> <string name="response_fail_reason" msgid="3401426967253202496">"ID motivo errore"</string> <string name="response_key" msgid="8839847772051686309">"Chiave GBA (CK + IK)"</string> diff --git a/tests/src/com/android/phone/RcsProvisioningMonitorTest.java b/tests/src/com/android/phone/RcsProvisioningMonitorTest.java index 8e5e0735ac..8873402c8e 100644 --- a/tests/src/com/android/phone/RcsProvisioningMonitorTest.java +++ b/tests/src/com/android/phone/RcsProvisioningMonitorTest.java @@ -16,6 +16,10 @@ package com.android.phone; +import static com.android.internal.telephony.TelephonyStatsLog.RCS_ACS_PROVISIONING_STATS__RESPONSE_TYPE__PROVISIONING_XML; +import static com.android.internal.telephony.TelephonyStatsLog.RCS_CLIENT_PROVISIONING_STATS__EVENT__DMA_CHANGED; +import static com.android.internal.telephony.TelephonyStatsLog.RCS_CLIENT_PROVISIONING_STATS__EVENT__TRIGGER_RCS_RECONFIGURATION; + import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertNull; @@ -64,6 +68,7 @@ import android.util.Log; import com.android.ims.FeatureConnector; import com.android.ims.RcsFeatureManager; import com.android.internal.telephony.ITelephony; +import com.android.internal.telephony.metrics.RcsStats; import org.junit.After; import org.junit.Before; @@ -179,6 +184,10 @@ public class RcsProvisioningMonitorTest { private IRcsConfigCallback mCallback; @Mock private PackageManager mPackageManager; + @Mock + private RcsStats mRcsStats; + @Mock + private RcsStats.RcsProvisioningCallback mRcsProvisioningCallback; private Executor mExecutor = new Executor() { @Override @@ -768,6 +777,66 @@ public class RcsProvisioningMonitorTest { assertNull(mRcsProvisioningMonitor.getImsFeatureValidationOverride(FAKE_SUB_ID_BASE)); } + @Test + @SmallTest + public void testMetricsAcsNotUsed() throws Exception { + createMonitor(1); + + // Not used ACS + mBundle.putBoolean(CarrierConfigManager.KEY_USE_ACS_FOR_RCS_BOOL, false); + broadcastCarrierConfigChange(FAKE_SUB_ID_BASE); + processAllMessages(); + mRcsProvisioningMonitor.updateConfig(FAKE_SUB_ID_BASE, CONFIG_DEFAULT.getBytes(), false); + processAllMessages(); + verify(mRcsStats, never()).onRcsAcsProvisioningStats(anyInt(), anyInt(), + anyInt(), anyBoolean()); + } + + @Test + @SmallTest + public void testMetricsAcsUsed() throws Exception { + when(mRcsStats.getRcsProvisioningCallback(anyInt(), anyBoolean())) + .thenReturn(mRcsProvisioningCallback); + createMonitor(1); + + verify(mIImsConfig, times(1)) + .notifyRcsAutoConfigurationReceived(any(), anyBoolean()); + // verify RcsStats.getRcsProvisioningCallback() is called + verify(mRcsStats, times(1)).getRcsProvisioningCallback( + eq(FAKE_SUB_ID_BASE), anyBoolean()); + // verify registered callback obj which comes from RcsStats.getRcsProvisioningCallback() + verify(mIImsConfig, times(1)) + .addRcsConfigCallback(eq(mRcsProvisioningCallback)); + + // Config data received and ACS used + int errorCode = 200; + mBundle.putBoolean(CarrierConfigManager.KEY_USE_ACS_FOR_RCS_BOOL, true); + broadcastCarrierConfigChange(FAKE_SUB_ID_BASE); + processAllMessages(); + mRcsProvisioningMonitor.updateConfig(FAKE_SUB_ID_BASE, CONFIG_DEFAULT.getBytes(), false); + processAllMessages(); + verify(mRcsStats, times(1)).onRcsAcsProvisioningStats(eq(FAKE_SUB_ID_BASE), eq(errorCode), + eq(RCS_ACS_PROVISIONING_STATS__RESPONSE_TYPE__PROVISIONING_XML), anyBoolean()); + } + + @Test + @SmallTest + public void testMetricsClientProvisioningStats() throws Exception { + createMonitor(1); + + // reconfig trigger + mRcsProvisioningMonitor.requestReconfig(FAKE_SUB_ID_BASE); + processAllMessages(); + verify(mRcsStats, times(1)).onRcsClientProvisioningStats(eq(FAKE_SUB_ID_BASE), + eq(RCS_CLIENT_PROVISIONING_STATS__EVENT__TRIGGER_RCS_RECONFIGURATION)); + + // DMA changed + updateDefaultMessageApplication(DEFAULT_MESSAGING_APP2); + processAllMessages(); + verify(mRcsStats, times(1)).onRcsClientProvisioningStats(eq(FAKE_SUB_ID_BASE), + eq(RCS_CLIENT_PROVISIONING_STATS__EVENT__DMA_CHANGED)); + } + private void createMonitor(int subCount) throws Exception { if (Looper.myLooper() == null) { Looper.prepare(); @@ -777,7 +846,7 @@ public class RcsProvisioningMonitorTest { .thenReturn(mFeatureConnector); when(mFeatureManager.getConfig()).thenReturn(mIImsConfig); mRcsProvisioningMonitor = new RcsProvisioningMonitor(mPhone, mHandlerThread.getLooper(), - mRoleManager, mFeatureFactory); + mRoleManager, mFeatureFactory, mRcsStats); mHandler = mRcsProvisioningMonitor.getHandler(); try { mLooper = new TestableLooper(mHandler.getLooper()); diff --git a/tests/src/com/android/services/telephony/rcs/DelegateStateTrackerTest.java b/tests/src/com/android/services/telephony/rcs/DelegateStateTrackerTest.java index 8236f44ce6..25b533922f 100644 --- a/tests/src/com/android/services/telephony/rcs/DelegateStateTrackerTest.java +++ b/tests/src/com/android/services/telephony/rcs/DelegateStateTrackerTest.java @@ -37,6 +37,7 @@ import androidx.test.filters.SmallTest; import androidx.test.runner.AndroidJUnit4; import com.android.TelephonyTestBase; +import com.android.internal.telephony.metrics.RcsStats; import org.junit.After; import org.junit.Before; @@ -56,6 +57,7 @@ public class DelegateStateTrackerTest extends TelephonyTestBase { @Mock private ISipDelegate mSipDelegate; @Mock private ISipDelegateConnectionStateCallback mAppCallback; + @Mock private RcsStats mRcsStats; @Before public void setUp() throws Exception { @@ -76,12 +78,14 @@ public class DelegateStateTrackerTest extends TelephonyTestBase { @Test public void testDelegateCreated() throws Exception { DelegateStateTracker stateTracker = new DelegateStateTracker(TEST_SUB_ID, mAppCallback, - mSipDelegate); + mSipDelegate, mRcsStats); Set<FeatureTagState> deniedTags = getMmTelDeniedTag(); - stateTracker.sipDelegateConnected(deniedTags); + Set<String> supportedTags = getSupportedTags(); + stateTracker.sipDelegateConnected(supportedTags, deniedTags); // Calling connected multiple times should not generate multiple onCreated events. - stateTracker.sipDelegateConnected(deniedTags); + stateTracker.sipDelegateConnected(supportedTags, deniedTags); verify(mAppCallback).onCreated(mSipDelegate); + verify(mRcsStats).createSipDelegateStats(TEST_SUB_ID, supportedTags); // Ensure status updates are sent to app as expected. DelegateRegistrationState regState = new DelegateRegistrationState.Builder() @@ -97,8 +101,10 @@ public class DelegateStateTrackerTest extends TelephonyTestBase { stateTracker.onConfigurationChanged(c); verify(mAppCallback).onFeatureTagStatusChanged(eq(regState), eq(new ArrayList<>(deniedTags))); + verify(mRcsStats).onSipTransportFeatureTagStats(TEST_SUB_ID, deniedTags, + regState.getDeregisteredFeatureTags(), + regState.getRegisteredFeatureTags()); verify(mAppCallback).onConfigurationChanged(c); - verify(mAppCallback, never()).onDestroyed(anyInt()); } @@ -109,14 +115,18 @@ public class DelegateStateTrackerTest extends TelephonyTestBase { @Test public void testDelegateDestroyed() throws Exception { DelegateStateTracker stateTracker = new DelegateStateTracker(TEST_SUB_ID, mAppCallback, - mSipDelegate); + mSipDelegate, mRcsStats); Set<FeatureTagState> deniedTags = getMmTelDeniedTag(); - stateTracker.sipDelegateConnected(deniedTags); + Set<String> supportedTags = getSupportedTags(); + stateTracker.sipDelegateConnected(supportedTags, deniedTags); + verify(mRcsStats).createSipDelegateStats(eq(TEST_SUB_ID), eq(supportedTags)); stateTracker.sipDelegateDestroyed( SipDelegateManager.SIP_DELEGATE_DESTROY_REASON_REQUESTED_BY_APP); verify(mAppCallback).onDestroyed( SipDelegateManager.SIP_DELEGATE_DESTROY_REASON_REQUESTED_BY_APP); + verify(mRcsStats).onSipDelegateStats(eq(TEST_SUB_ID), eq(supportedTags), + eq(SipDelegateManager.SIP_DELEGATE_DESTROY_REASON_REQUESTED_BY_APP)); } /** @@ -130,9 +140,10 @@ public class DelegateStateTrackerTest extends TelephonyTestBase { @Test public void testDelegateChangingRegisteredTagsOverride() throws Exception { DelegateStateTracker stateTracker = new DelegateStateTracker(TEST_SUB_ID, mAppCallback, - mSipDelegate); + mSipDelegate, mRcsStats); Set<FeatureTagState> deniedTags = getMmTelDeniedTag(); - stateTracker.sipDelegateConnected(deniedTags); + Set<String> supportedTags = getSupportedTags(); + stateTracker.sipDelegateConnected(supportedTags, deniedTags); // SipDelegate created verify(mAppCallback).onCreated(mSipDelegate); DelegateRegistrationState regState = new DelegateRegistrationState.Builder() @@ -158,7 +169,7 @@ public class DelegateStateTrackerTest extends TelephonyTestBase { DelegateRegistrationState.DEREGISTERED_REASON_NOT_PROVISIONED) .build(); // new underlying SipDelegate created - stateTracker.sipDelegateConnected(deniedTags); + stateTracker.sipDelegateConnected(supportedTags, deniedTags); stateTracker.onRegistrationStateChanged(regState); // Verify registration state through the process: @@ -187,9 +198,10 @@ public class DelegateStateTrackerTest extends TelephonyTestBase { @Test public void testDelegateChangingDeniedTagsChanged() throws Exception { DelegateStateTracker stateTracker = new DelegateStateTracker(TEST_SUB_ID, mAppCallback, - mSipDelegate); + mSipDelegate, mRcsStats); Set<FeatureTagState> deniedTags = getMmTelDeniedTag(); - stateTracker.sipDelegateConnected(deniedTags); + Set<String> supportedTags = getSupportedTags(); + stateTracker.sipDelegateConnected(supportedTags, deniedTags); // SipDelegate created verify(mAppCallback).onCreated(mSipDelegate); DelegateRegistrationState regState = new DelegateRegistrationState.Builder() @@ -220,7 +232,7 @@ public class DelegateStateTrackerTest extends TelephonyTestBase { // new underlying SipDelegate created, but SipDelegate denied one to one chat deniedTags.add(new FeatureTagState(ImsSignallingUtils.ONE_TO_ONE_CHAT_TAG, SipDelegateManager.DENIED_REASON_NOT_ALLOWED)); - stateTracker.sipDelegateConnected(deniedTags); + stateTracker.sipDelegateConnected(supportedTags, deniedTags); DelegateRegistrationState fullyDeniedRegState = new DelegateRegistrationState.Builder() .build(); // In this special case, it will be the SipDelegateConnectionBase that will trigger @@ -244,9 +256,10 @@ public class DelegateStateTrackerTest extends TelephonyTestBase { @Test public void testDelegateChangingDeniedTagsChangingToDestroy() throws Exception { DelegateStateTracker stateTracker = new DelegateStateTracker(TEST_SUB_ID, mAppCallback, - mSipDelegate); + mSipDelegate, mRcsStats); Set<FeatureTagState> deniedTags = getMmTelDeniedTag(); - stateTracker.sipDelegateConnected(deniedTags); + Set<String> supportedTags = getSupportedTags(); + stateTracker.sipDelegateConnected(supportedTags, deniedTags); // SipDelegate created verify(mAppCallback).onCreated(mSipDelegate); DelegateRegistrationState regState = new DelegateRegistrationState.Builder() @@ -296,4 +309,11 @@ public class DelegateStateTrackerTest extends TelephonyTestBase { SipDelegateManager.DENIED_REASON_NOT_ALLOWED)); return deniedTags; } + + private Set<String> getSupportedTags() { + Set<String> supportedTags = new ArraySet<>(); + supportedTags.add(ImsSignallingUtils.ONE_TO_ONE_CHAT_TAG); + supportedTags.add(ImsSignallingUtils.GROUP_CHAT_TAG); + return supportedTags; + } } diff --git a/tests/src/com/android/services/telephony/rcs/SipDelegateControllerTest.java b/tests/src/com/android/services/telephony/rcs/SipDelegateControllerTest.java index 5b0e7c50de..78f68948ce 100644 --- a/tests/src/com/android/services/telephony/rcs/SipDelegateControllerTest.java +++ b/tests/src/com/android/services/telephony/rcs/SipDelegateControllerTest.java @@ -107,7 +107,8 @@ public class SipDelegateControllerTest extends TelephonyTestBase { assertTrue(future.get()); verify(mMockMessageTracker).openTransport(mMockSipDelegate, request.getFeatureTags(), Collections.emptySet()); - verify(mMockDelegateStateTracker).sipDelegateConnected(Collections.emptySet()); + verify(mMockDelegateStateTracker).sipDelegateConnected(request.getFeatureTags(), + Collections.emptySet()); } @SmallTest @@ -138,7 +139,7 @@ public class SipDelegateControllerTest extends TelephonyTestBase { allowedTags.removeAll(deniedTags.stream().map(FeatureTagState::getFeatureTag) .collect(Collectors.toSet())); verify(mMockMessageTracker).openTransport(mMockSipDelegate, allowedTags, deniedTags); - verify(mMockDelegateStateTracker).sipDelegateConnected(deniedTags); + verify(mMockDelegateStateTracker).sipDelegateConnected(allowedTags, deniedTags); } @SmallTest @@ -249,7 +250,9 @@ public class SipDelegateControllerTest extends TelephonyTestBase { Collections.emptySet()); verify(mMockMessageTracker).openTransport(mMockSipDelegate, newFts, Collections.emptySet()); - verify(mMockDelegateStateTracker, times(2)).sipDelegateConnected(Collections.emptySet()); + verify(mMockDelegateStateTracker).sipDelegateConnected( + request.getFeatureTags(), Collections.emptySet()); + verify(mMockDelegateStateTracker).sipDelegateConnected(newFts, Collections.emptySet()); } private void createSipDelegate(DelegateRequest request, SipDelegateController controller) diff --git a/tests/src/com/android/services/telephony/rcs/SipSessionTrackerTest.java b/tests/src/com/android/services/telephony/rcs/SipSessionTrackerTest.java index 823a8be0f4..37abb83ceb 100644 --- a/tests/src/com/android/services/telephony/rcs/SipSessionTrackerTest.java +++ b/tests/src/com/android/services/telephony/rcs/SipSessionTrackerTest.java @@ -16,19 +16,28 @@ package com.android.services.telephony.rcs; +import static com.android.internal.telephony.TelephonyStatsLog.SIP_TRANSPORT_SESSION__SIP_MESSAGE_DIRECTION__OUTGOING; + import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertNotNull; import static junit.framework.Assert.assertTrue; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.verify; + import android.net.Uri; import android.telephony.ims.SipMessage; import android.util.Base64; import androidx.test.ext.junit.runners.AndroidJUnit4; +import com.android.internal.telephony.metrics.RcsStats; + import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import java.nio.ByteBuffer; import java.util.Arrays; @@ -90,11 +99,104 @@ public class SipSessionTrackerTest { // Keep track of the string entry so we can generate unique strings. private int mStringEntryCounter = 0; private SipSessionTracker mTrackerUT; + private static final int TEST_SUB_ID = 1; + private static final String TEST_INVITE_SIP_METHOD = "INVITE"; + private static final int TEST_SIP_RESPONSE_CODE = 200; + private static final int TEST_SIP_CLOSE_RESPONSE_CODE = 0; + @Mock + private RcsStats mRcsStats; @Before public void setUp() { mStringEntryCounter = 0; - mTrackerUT = new SipSessionTracker(); + MockitoAnnotations.initMocks(this); + mTrackerUT = new SipSessionTracker(TEST_SUB_ID, mRcsStats); + } + + @Test + public void testMetricsEndedGracefullyBye() { + DialogAttributes attr = new DialogAttributes(); + // INVITE + SipMessage inviteRequest = generateSipRequest(SipMessageUtils.INVITE_SIP_METHOD, attr); + filterMessage(inviteRequest, attr); + assertTrue(mTrackerUT.getConfirmedDialogs().isEmpty()); + verifyContainsCallIds(mTrackerUT.getEarlyDialogs(), attr); + + // confirmed dialog + attr.setToTag(); + SipMessage inviteConfirm = generateSipResponse("200", "OK", attr); + filterMessage(inviteConfirm, attr); + assertTrue(mTrackerUT.getEarlyDialogs().isEmpty()); + verifyContainsCallIds(mTrackerUT.getConfirmedDialogs(), attr); + + // Gracefully Ended + SipMessage inviteClose = generateSipRequest(SipMessageUtils.BYE_SIP_METHOD, attr); + filterMessage(inviteClose, attr); + + assertTrue(mTrackerUT.getEarlyDialogs().isEmpty()); + assertTrue(mTrackerUT.getConfirmedDialogs().isEmpty()); + verifyContainsCallIds(mTrackerUT.getClosedDialogs(), attr); + + // verify Metrics information + verify(mRcsStats).onSipTransportSessionClosed(eq(TEST_SUB_ID), eq(attr.callId), + eq(TEST_SIP_CLOSE_RESPONSE_CODE), eq(true)); + } + + @Test + public void testMetricsCloseCleanupSession() { + //mTrackerUT.setRcsStats(mRcsStats); + DialogAttributes attr = new DialogAttributes(); + // INVITE A -> B + SipMessage inviteRequest = generateSipRequest(SipMessageUtils.INVITE_SIP_METHOD, attr); + filterMessage(inviteRequest, attr); + assertTrue(mTrackerUT.getConfirmedDialogs().isEmpty()); + verifyContainsCallIds(mTrackerUT.getEarlyDialogs(), attr); + + // confirmed dialog + attr.setToTag(); + SipMessage inviteConfirm = generateSipResponse("200", "OK", attr); + filterMessage(inviteConfirm, attr); + assertTrue(mTrackerUT.getEarlyDialogs().isEmpty()); + verifyContainsCallIds(mTrackerUT.getConfirmedDialogs(), attr); + + //forcefully close session + mTrackerUT.cleanupSession(attr.callId); + assertTrue(mTrackerUT.getEarlyDialogs().isEmpty()); + assertTrue(mTrackerUT.getConfirmedDialogs().isEmpty()); + assertTrue(mTrackerUT.getClosedDialogs().isEmpty()); + + // verify Metrics information + verify(mRcsStats).onSipTransportSessionClosed(eq(TEST_SUB_ID), eq(attr.callId), + eq(TEST_SIP_CLOSE_RESPONSE_CODE), eq(false)); + } + + @Test + public void testMetricsCloseClearAllSessions() { + //mTrackerUT.setRcsStats(mRcsStats); + DialogAttributes attr = new DialogAttributes(); + + // INVITE + SipMessage inviteRequest = generateSipRequest(SipMessageUtils.INVITE_SIP_METHOD, attr); + filterMessage(inviteRequest, attr); + assertTrue(mTrackerUT.getConfirmedDialogs().isEmpty()); + verifyContainsCallIds(mTrackerUT.getEarlyDialogs(), attr); + + // confirmed dialog + attr.setToTag(); + SipMessage inviteConfirm = generateSipResponse("200", "OK", attr); + filterMessage(inviteConfirm, attr); + assertTrue(mTrackerUT.getEarlyDialogs().isEmpty()); + verifyContainsCallIds(mTrackerUT.getConfirmedDialogs(), attr); + + //forcefully close session + mTrackerUT.clearAllSessions(); + assertTrue(mTrackerUT.getEarlyDialogs().isEmpty()); + assertTrue(mTrackerUT.getConfirmedDialogs().isEmpty()); + assertTrue(mTrackerUT.getClosedDialogs().isEmpty()); + + // verify Metrics information + verify(mRcsStats).onSipTransportSessionClosed(eq(TEST_SUB_ID), eq(attr.callId), + eq(TEST_SIP_CLOSE_RESPONSE_CODE), eq(false)); } @Test @@ -291,7 +393,8 @@ public class SipSessionTrackerTest { public void testAcknowledgeMessageFailed() { DialogAttributes attr = new DialogAttributes(); SipMessage inviteRequest = generateSipRequest(SipMessageUtils.INVITE_SIP_METHOD, attr); - mTrackerUT.filterSipMessage(inviteRequest); + mTrackerUT.filterSipMessage( + SIP_TRANSPORT_SESSION__SIP_MESSAGE_DIRECTION__OUTGOING, inviteRequest); // Do not acknowledge the request and ensure that the operation has not been applied yet. assertTrue(mTrackerUT.getConfirmedDialogs().isEmpty()); assertTrue(mTrackerUT.getEarlyDialogs().isEmpty()); @@ -310,8 +413,10 @@ public class SipSessionTrackerTest { // We unexpectedly received two filter requests for the same branchId without // acknowledgePendingMessage being called in between. Ensure that when it is called, it // applies both operations. - mTrackerUT.filterSipMessage(inviteRequest); - mTrackerUT.filterSipMessage(inviteConfirm); + mTrackerUT.filterSipMessage( + SIP_TRANSPORT_SESSION__SIP_MESSAGE_DIRECTION__OUTGOING, inviteRequest); + mTrackerUT.filterSipMessage( + SIP_TRANSPORT_SESSION__SIP_MESSAGE_DIRECTION__OUTGOING, inviteConfirm); assertTrue(mTrackerUT.getEarlyDialogs().isEmpty()); assertTrue(mTrackerUT.getConfirmedDialogs().isEmpty()); // we should skip right to confirmed as both operations run back-to-back @@ -321,7 +426,8 @@ public class SipSessionTrackerTest { } private void filterMessage(SipMessage m, DialogAttributes attr) { - mTrackerUT.filterSipMessage(m); + mTrackerUT.filterSipMessage( + SIP_TRANSPORT_SESSION__SIP_MESSAGE_DIRECTION__OUTGOING, m); mTrackerUT.acknowledgePendingMessage(attr.branchId); } private void verifyContainsCallIds(Set<SipDialog> callIdSet, DialogAttributes... attrs) { diff --git a/tests/src/com/android/services/telephony/rcs/TransportSipMessageValidatorTest.java b/tests/src/com/android/services/telephony/rcs/TransportSipMessageValidatorTest.java index 4d222e360b..0fe897fdb8 100644 --- a/tests/src/com/android/services/telephony/rcs/TransportSipMessageValidatorTest.java +++ b/tests/src/com/android/services/telephony/rcs/TransportSipMessageValidatorTest.java @@ -16,6 +16,9 @@ package com.android.services.telephony.rcs; +import static com.android.internal.telephony.TelephonyStatsLog.SIP_TRANSPORT_SESSION__SIP_MESSAGE_DIRECTION__INCOMING; +import static com.android.internal.telephony.TelephonyStatsLog.SIP_TRANSPORT_SESSION__SIP_MESSAGE_DIRECTION__OUTGOING; + import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertTrue; @@ -23,6 +26,7 @@ import static junit.framework.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.eq; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; @@ -37,6 +41,7 @@ import androidx.test.runner.AndroidJUnit4; import com.android.TelephonyTestBase; import com.android.TestExecutorService; +import com.android.internal.telephony.metrics.RcsStats; import com.android.services.telephony.rcs.validator.IncomingTransportStateValidator; import com.android.services.telephony.rcs.validator.OutgoingTransportStateValidator; import com.android.services.telephony.rcs.validator.ValidationResult; @@ -76,6 +81,8 @@ public class TransportSipMessageValidatorTest extends TelephonyTestBase { private IncomingTransportStateValidator mIncomingStateValidator; @Mock private OutgoingTransportStateValidator mOutgoingStateValidator; + @Mock + private RcsStats mRcsStats; @Before public void setUp() throws Exception { @@ -117,12 +124,50 @@ public class TransportSipMessageValidatorTest extends TelephonyTestBase { } @Test + public void testMetricsResponse() { + String testSipInviteMethod = "INVITE"; + String testSipMessageMethod = "MESSAGE"; + int testSipResponseCode = 200; + int testMessageError = 0; + + TestExecutorService executor = new TestExecutorService(); + TransportSipMessageValidator tracker = openTransport(executor); + // Since the incoming/outgoing messages were verified, there should have been two calls + // to filter the message. + verify(mSipSessionTracker).filterSipMessage( + SIP_TRANSPORT_SESSION__SIP_MESSAGE_DIRECTION__OUTGOING, TEST_MESSAGE); + verify(mSipSessionTracker).filterSipMessage( + SIP_TRANSPORT_SESSION__SIP_MESSAGE_DIRECTION__INCOMING, TEST_MESSAGE); + + assertTrue(tracker.verifyOutgoingMessage(generateSipRequest("INVITE", + "testId1"), TEST_CONFIG_VERSION).isValidated); + verify(mRcsStats).onSipMessageRequest(eq("testId1"), + eq(testSipInviteMethod), + eq(SIP_TRANSPORT_SESSION__SIP_MESSAGE_DIRECTION__OUTGOING)); + + assertTrue(tracker.verifyOutgoingMessage(generateSipRequest("MESSAGE", + "testId2"), TEST_CONFIG_VERSION).isValidated); + verify(mRcsStats).onSipMessageRequest(eq("testId2"), + eq(testSipMessageMethod), + eq(SIP_TRANSPORT_SESSION__SIP_MESSAGE_DIRECTION__OUTGOING)); + + assertTrue(tracker.verifyIncomingMessage( + generateSipResponse("200", "OK", "testId2")) + .isValidated); + verify(mRcsStats).onSipMessageResponse(eq(TEST_SUB_ID), eq("testId2"), + eq(testSipResponseCode), eq(testMessageError)); + } + + @Test public void testSessionTrackerFiltering() { TestExecutorService executor = new TestExecutorService(); TransportSipMessageValidator tracker = openTransport(executor); // Since the incoming/outgoing messages were verified, there should have been two calls // to filter the message. - verify(mSipSessionTracker, times(2)).filterSipMessage(TEST_MESSAGE); + verify(mSipSessionTracker).filterSipMessage( + SIP_TRANSPORT_SESSION__SIP_MESSAGE_DIRECTION__OUTGOING, TEST_MESSAGE); + verify(mSipSessionTracker).filterSipMessage( + SIP_TRANSPORT_SESSION__SIP_MESSAGE_DIRECTION__INCOMING, TEST_MESSAGE); // ensure pass through methods are working tracker.acknowledgePendingMessage("abc"); verify(mSipSessionTracker).acknowledgePendingMessage("abc"); @@ -140,7 +185,10 @@ public class TransportSipMessageValidatorTest extends TelephonyTestBase { assertFalse(tracker.verifyOutgoingMessage(TEST_MESSAGE, TEST_CONFIG_VERSION).isValidated); // The number of times the filter method was called should still only be two after these // messages were not validated. - verify(mSipSessionTracker, times(2)).filterSipMessage(TEST_MESSAGE); + verify(mSipSessionTracker).filterSipMessage( + SIP_TRANSPORT_SESSION__SIP_MESSAGE_DIRECTION__OUTGOING, TEST_MESSAGE); + verify(mSipSessionTracker).filterSipMessage( + SIP_TRANSPORT_SESSION__SIP_MESSAGE_DIRECTION__INCOMING, TEST_MESSAGE); } @@ -482,6 +530,27 @@ public class TransportSipMessageValidatorTest extends TelephonyTestBase { doReturn(ValidationResult.SUCCESS).when(mIncomingStateValidator).validate(any()); doReturn(mIncomingStateValidator).when(mIncomingStateValidator).andThen(any()); return new TransportSipMessageValidator(TEST_SUB_ID, executor, mSipSessionTracker, - mOutgoingStateValidator, mIncomingStateValidator); + mOutgoingStateValidator, mIncomingStateValidator, mRcsStats); + } + + private SipMessage generateSipResponse(String statusCode, String statusString, String callId) { + String fromHeader = "Alice <sip:alice@atlanta.com>;tag=1928301774"; + String toHeader = "Bob <sip:bob@biloxi.com>"; + String branchId = "AAAA"; + String fromTag = "tag=1928301774"; + String toTag = ""; + return SipMessageUtils.generateSipResponse(statusCode, statusString, fromHeader, + toHeader, branchId, callId, fromTag, toTag); + } + + private SipMessage generateSipRequest(String requestMethod, String callId) { + String fromHeader = "Alice <sip:alice@atlanta.com>;tag=1928301774"; + String toHeader = "Bob <sip:bob@biloxi.com>"; + String branchId = "AAAA"; + String fromTag = "tag=1928301774"; + String toTag = ""; + String toUri = "sip:bob@biloxi.com"; + return SipMessageUtils.generateSipRequest(requestMethod, fromHeader, toHeader, + toUri, branchId, callId, fromTag, toTag); } } |