Merge "Add CarrierConfig option for removing Hold during Ims Calls" into nyc-mr1-dev
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index 5911044..deead96 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -107,12 +107,12 @@
<string name="sum_cfb_enabled" msgid="5984198104833116690">"Prosleđuje se na <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
<string name="sum_cfb_disabled" msgid="4913145177320506827">"Isključeno"</string>
<string name="disable_cfb_forbidden" msgid="3506984333877998061">"Operater ne podržava onemogućavanje preusmeravanja poziva kada je telefon zauzet."</string>
- <string name="labelCFNRy" msgid="1736067178393744351">"Kad se ne javite"</string>
- <string name="messageCFNRy" msgid="672317899884380374">"Broj kad se ne javite"</string>
+ <string name="labelCFNRy" msgid="1736067178393744351">"Kad se ne javim"</string>
+ <string name="messageCFNRy" msgid="672317899884380374">"Broj kad se ne javim"</string>
<string name="sum_cfnry_enabled" msgid="6955775691317662910">"Prosleđuje se na <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
<string name="sum_cfnry_disabled" msgid="3884684060443538097">"Isključeno"</string>
<string name="disable_cfnry_forbidden" msgid="4308233959150658058">"Operater ne podržava onemogućavanje preusmeravanja poziva kada se na poziv ne odgovori."</string>
- <string name="labelCFNRc" msgid="2614827454402079766">"Kada je nedostupno"</string>
+ <string name="labelCFNRc" msgid="2614827454402079766">"Kad sam nedostupan/a"</string>
<string name="messageCFNRc" msgid="6380695421020295119">"Broj kad je nedostupno"</string>
<string name="sum_cfnrc_enabled" msgid="7010898346095497421">"Prosleđuje se na <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
<string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Onemogućeno"</string>
@@ -147,6 +147,15 @@
<string name="no_change" msgid="3186040086622435212">"Nisu izvršene nikakve promene."</string>
<string name="sum_voicemail_choose_provider" msgid="59911196126278922">"Odaberite uslugu govorne pošte"</string>
<string name="voicemail_default" msgid="2001233554889016880">"Mobilni operater"</string>
+ <string name="vm_change_pin_old_pin" msgid="7295220109886682573">"Stari PIN"</string>
+ <string name="vm_change_pin_new_pin" msgid="5412922262839438097">"Novi PIN"</string>
+ <string name="vm_change_pin_progress_message" msgid="3977357361934350336">"Sačekajte."</string>
+ <string name="vm_change_pin_error_too_short" msgid="5974971097302710497">"Novi PIN je prekratak."</string>
+ <string name="vm_change_pin_error_too_long" msgid="8476870806115051865">"Novi PIN je predugačak."</string>
+ <string name="vm_change_pin_error_too_weak" msgid="7883744811891784882">"Novi PIN je preslab. Jaka lozinka ne treba da sadrži uzastopni niz ni ponovljene cifre."</string>
+ <string name="vm_change_pin_error_mismatch" msgid="2754685537970757317">"Stari PIN se ne podudara."</string>
+ <string name="vm_change_pin_error_invalid" msgid="3972205462701668653">"Novi PIN sadrži nevažeće znakove."</string>
+ <string name="vm_change_pin_error_system_error" msgid="6610603326230000207">"Promena PIN-a nije uspela"</string>
<string name="mobile_networks" msgid="2843854043339307375">"Podešavanja mobilne mreže"</string>
<string name="label_available" msgid="1181658289009300430">"Dostupne mreže"</string>
<string name="load_networks_progress" msgid="5230707536168902952">"Pretražuje se…"</string>
@@ -332,19 +341,19 @@
<string name="cdma_activate_device" msgid="3793805892364814518">"Aktiviranje uređaja"</string>
<string name="cdma_lte_data_service" msgid="4255018217292548962">"Podesite usl. prenosa podataka"</string>
<string name="carrier_settings_title" msgid="9028166176523012300">"Podešavanja operatera"</string>
- <string name="fdn" msgid="7878832555095183202">"Fiksni birani brojevi"</string>
+ <string name="fdn" msgid="7878832555095183202">"Brojevi za fiksno biranje"</string>
<string name="fdn_with_label" msgid="187084204115493366">"Brojevi za fiksno biranje (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="manage_fdn_list" msgid="8777755791892122369">"Lista brojeva za fiksno biranje"</string>
<string name="fdn_list_with_label" msgid="7437232552210469217">"Lista brojeva za fiksno biranje (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
<string name="fdn_activation" msgid="2156479741307463576">"FDN aktivacija"</string>
- <string name="fdn_enabled" msgid="5238109009915521240">"Omogućeni su fiksni birani brojevi"</string>
- <string name="fdn_disabled" msgid="4700049736675368279">"Onemogućeni su fiksni birani brojevi"</string>
+ <string name="fdn_enabled" msgid="5238109009915521240">"Omogućeni su brojevi za fiksno biranje"</string>
+ <string name="fdn_disabled" msgid="4700049736675368279">"Onemogućeni su brojevi za fiksno biranje"</string>
<string name="enable_fdn" msgid="3740191529180493851">"Omogući broj za fiksno biranje"</string>
<string name="disable_fdn" msgid="7944020890722540616">"Onemogući broj za fiksno biranje"</string>
<string name="change_pin2" msgid="2153563695382176676">"Promeni PIN2"</string>
<string name="enable_fdn_ok" msgid="7215588870329688132">"Onemogući broj za fiksno biranje"</string>
<string name="disable_fdn_ok" msgid="5727046928930740173">"Omogući broj za fiksno biranje"</string>
- <string name="sum_fdn" msgid="1959399454900272878">"Upravljanje fiksnim biranim brojevima"</string>
+ <string name="sum_fdn" msgid="1959399454900272878">"Upravljanje brojevima za fiksno biranje"</string>
<string name="sum_fdn_change_pin" msgid="6666549734792827932">"Promeni PIN za pristup broju za fiksno biranje"</string>
<string name="sum_fdn_manage_list" msgid="8431088265332628316">"Upravljanje listom telefonskih brojeva"</string>
<string name="voice_privacy" msgid="3776841382844614716">"Privatnost glasa"</string>
@@ -446,6 +455,7 @@
<string name="incall_error_supp_service_hangup" msgid="7434513517153834426">"Uspostavljanje poziva nije uspelo."</string>
<string name="incall_error_supp_service_hold" msgid="7967020511232222078">"Nije moguće stavljati pozive na čekanje."</string>
<string name="incall_error_wfc_only_no_wireless_network" msgid="1782466780452640089">"Povežite se na bežičnu mrežu da biste uputili poziv."</string>
+ <string name="incall_error_promote_wfc" msgid="106510757624022064">"Omogućite pozivanje preko Wi-Fi-ja da biste uputili poziv."</string>
<string name="emergency_enable_radio_dialog_title" msgid="4627849966634578257">"Hitan poziv"</string>
<string name="emergency_enable_radio_dialog_message" msgid="207613549344420291">"Uključivanje radija…"</string>
<string name="emergency_enable_radio_dialog_retry" msgid="5960061579996526883">"Nema mreže. Ponovni pokušaj…"</string>
@@ -473,7 +483,7 @@
<string name="hac_mode_title" msgid="8740268574688743289">"Slušni aparat"</string>
<string name="hac_mode_summary" msgid="6833851160514929341">"Uključi kompatibilnost sa slušnim aparatom"</string>
<string-array name="tty_mode_entries">
- <item msgid="512950011423868021">"TTY isključeno"</item>
+ <item msgid="512950011423868021">"TTY je isključen"</item>
<item msgid="3971695875449640648">"TTY je pun"</item>
<item msgid="1937509904407445684">"TTY HCO"</item>
<item msgid="5644925873488772224">"TTY VCO"</item>
@@ -543,6 +553,8 @@
<string name="voicemail_notification_vibrate_when_title" msgid="8361970092063604886">"Vibracija"</string>
<string name="voicemail_notification_vibarte_when_dialog_title" msgid="5739583146522136440">"Vibracija"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="5012622186976275457">"Vizuelna govorna pošta"</string>
+ <string name="voicemail_set_pin_dialog_title" msgid="2797924461029093837">"Podesite PIN"</string>
+ <string name="voicemail_change_pin_dialog_title" msgid="6035421908626121564">"Promenite PIN"</string>
<string name="voicemail_notification_ringtone_title" msgid="2609519527849101590">"Zvuk"</string>
<string name="preference_category_ringtone" msgid="5197960752529332721">"Melodija zvona i vibracija"</string>
<string name="pstn_connection_service_label" msgid="1743245930577325900">"Ugrađene SIM kartice"</string>
@@ -560,4 +572,16 @@
<string name="message_decode_error" msgid="3456481534066924855">"Došlo je do greške pri dekodiranju poruke."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM kartica je aktivirala uslugu i ažurirala funkcije rominga na telefonu."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Ima previše aktivnih poziva. Završite ili objedinite postojeće pozive pre nego što uputite novi."</string>
+ <string name="change_pin_title" msgid="7790232089699034029">"Promenite PIN kôd govorne pošte"</string>
+ <string name="change_pin_continue_label" msgid="2135088662420163447">"Nastavi"</string>
+ <string name="change_pin_cancel_label" msgid="353535488390948596">"Otkaži"</string>
+ <string name="change_pin_ok_label" msgid="6204308560844889926">"Potvrdi"</string>
+ <string name="change_pin_enter_old_pin_header" msgid="419179847657548887">"Potvrdite stari PIN"</string>
+ <string name="change_pin_enter_old_pin_hint" msgid="8579171678763615453">"kôd govorne pošte da biste nastavili."</string>
+ <string name="change_pin_enter_new_pin_header" msgid="2611191814590251532">"Podesite novi PIN"</string>
+ <string name="change_pin_enter_new_pin_hint" msgid="2322940054329689309">"Broj cifara koje PIN mora da sadrži: <xliff:g id="MIN">%1$d</xliff:g>–<xliff:g id="MAX">%2$d</xliff:g>."</string>
+ <string name="change_pin_confirm_pin_header" msgid="8113764019347322170">"Potvrdite PIN"</string>
+ <string name="change_pin_confirm_pins_dont_match" msgid="4795052654904027909">"PIN-ovi se ne podudaraju"</string>
+ <string name="change_pin_succeeded" msgid="2022852286442211151">"PIN kôd govorne pošte je ažuriran"</string>
+ <string name="change_pin_system_error" msgid="8308462387154257840">"Podešavanje PIN-a nije uspelo"</string>
</resources>
diff --git a/res/values-be-rBY/arrays.xml b/res/values-be-rBY/arrays.xml
index 640fba1..773739b 100644
--- a/res/values-be-rBY/arrays.xml
+++ b/res/values-be-rBY/arrays.xml
@@ -18,7 +18,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string-array name="preferred_network_mode_choices_world_mode">
- <item msgid="3391522821603584785">"Глабальныя"</item>
+ <item msgid="3391522821603584785">"Global"</item>
<item msgid="6753774959494729275">"LTE / CDMA"</item>
<item msgid="8658695584186942227">"LTE / GSM / UMTS"</item>
</string-array>
diff --git a/res/values-be-rBY/strings.xml b/res/values-be-rBY/strings.xml
index 45fbc9a..a907e2d 100644
--- a/res/values-be-rBY/strings.xml
+++ b/res/values-be-rBY/strings.xml
@@ -101,16 +101,16 @@
<string name="sum_cfu_enabled_indicator" msgid="4014187342724130197">"Пераадрасацыя ўсіх выклікаў"</string>
<string name="sum_cfu_enabled" msgid="2450052502198827927">"Пераадрасацыя ўсіх тэлефанаванняў на <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
<string name="sum_cfu_enabled_no_number" msgid="6591985777096823616">"Нумар недаступны"</string>
- <string name="sum_cfu_disabled" msgid="8384177689501334080">"Адкл."</string>
+ <string name="sum_cfu_disabled" msgid="8384177689501334080">"Выкл."</string>
<string name="labelCFB" msgid="6139853033106283172">"Калі заняты"</string>
<string name="messageCFB" msgid="3711089705936187129">"Нумар, калі занята"</string>
<string name="sum_cfb_enabled" msgid="5984198104833116690">"Пераадрасацыя на <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
- <string name="sum_cfb_disabled" msgid="4913145177320506827">"Адкл."</string>
+ <string name="sum_cfb_disabled" msgid="4913145177320506827">"Выкл."</string>
<string name="disable_cfb_forbidden" msgid="3506984333877998061">"Ваш аператар не падтрымлівае адключэнне перанакіравання выклікаў, калі тэлефон заняты."</string>
<string name="labelCFNRy" msgid="1736067178393744351">"Калі няма адказу"</string>
<string name="messageCFNRy" msgid="672317899884380374">"Нумар, калі няма адказу"</string>
<string name="sum_cfnry_enabled" msgid="6955775691317662910">"Пераадрасацыя на <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
- <string name="sum_cfnry_disabled" msgid="3884684060443538097">"Адкл."</string>
+ <string name="sum_cfnry_disabled" msgid="3884684060443538097">"Выкл."</string>
<string name="disable_cfnry_forbidden" msgid="4308233959150658058">"Ваш аператар не падтрымлівае адключэнне перанакіравання выклікаў, калі тэлефон не адказвае."</string>
<string name="labelCFNRc" msgid="2614827454402079766">"Калі недасягальны"</string>
<string name="messageCFNRc" msgid="6380695421020295119">"Нумар, калі недаступны"</string>
@@ -147,7 +147,16 @@
<string name="no_change" msgid="3186040086622435212">"Змены не выкананы."</string>
<string name="sum_voicemail_choose_provider" msgid="59911196126278922">"Выберыце службу галасавой пошты"</string>
<string name="voicemail_default" msgid="2001233554889016880">"Ваш аператар"</string>
- <string name="mobile_networks" msgid="2843854043339307375">"Налады мабільнай сеткі"</string>
+ <string name="vm_change_pin_old_pin" msgid="7295220109886682573">"Стары PIN-код"</string>
+ <string name="vm_change_pin_new_pin" msgid="5412922262839438097">"Новы PIN-код"</string>
+ <string name="vm_change_pin_progress_message" msgid="3977357361934350336">"Пачакайце."</string>
+ <string name="vm_change_pin_error_too_short" msgid="5974971097302710497">"Новы PIN-код занадта кароткі."</string>
+ <string name="vm_change_pin_error_too_long" msgid="8476870806115051865">"Новы PIN-код занадта доўгі."</string>
+ <string name="vm_change_pin_error_too_weak" msgid="7883744811891784882">"Новы PIN-код занадта слабы. Моцны пароль не павінен змяшчаць знакаў, што ідуць па чарзе, або лічбы, якія паўтараюцца."</string>
+ <string name="vm_change_pin_error_mismatch" msgid="2754685537970757317">"Стары PIN-код не падыходзіць."</string>
+ <string name="vm_change_pin_error_invalid" msgid="3972205462701668653">"Новы PIN-код змяшчае несапраўдныя сімвалы."</string>
+ <string name="vm_change_pin_error_system_error" msgid="6610603326230000207">"Немагчыма змяніць PIN-код"</string>
+ <string name="mobile_networks" msgid="2843854043339307375">"Налады сотавай сеткі"</string>
<string name="label_available" msgid="1181658289009300430">"Даступныя сеткі"</string>
<string name="load_networks_progress" msgid="5230707536168902952">"Пошук..."</string>
<string name="empty_networks_list" msgid="4249426905018815316">"Сеткі не знойдзены."</string>
@@ -162,9 +171,9 @@
<string name="select_automatically" msgid="5628402124471810174">"Выбраць аўтаматычна"</string>
<string name="sum_select_automatically" msgid="5614890115123292400">"Аўтаматычна выбраць прыярытэтную сетку"</string>
<string name="register_automatically" msgid="6017849844573519637">"Аўтаматычная рэгістрацыя..."</string>
- <string name="preferred_network_mode_title" msgid="2336624679902659306">"Пажаданы тып сеткі"</string>
+ <string name="preferred_network_mode_title" msgid="2336624679902659306">"Прыярытэтны тып сеткі"</string>
<string name="preferred_network_mode_summary" msgid="1434820673166126609">"Змяніць рэжым работы сеткі"</string>
- <string name="preferred_network_mode_dialogtitle" msgid="4048082093347807230">"Пажаданы тып сеткі"</string>
+ <string name="preferred_network_mode_dialogtitle" msgid="4048082093347807230">"Прыярытэтны тып сеткі"</string>
<string name="preferred_network_mode_wcdma_perf_summary" msgid="8521677230113533809">"Пераважны рэжым сеткі: пераважна WCDMA"</string>
<string name="preferred_network_mode_gsm_only_summary" msgid="3352445413437453511">"Пераважны рэжым сеткі: толькі GSM"</string>
<string name="preferred_network_mode_wcdma_only_summary" msgid="2836897236221063413">"Пераважны рэжым сеткі: толькі WCDMA"</string>
@@ -202,16 +211,16 @@
<string name="data_enabled" msgid="5972538663568715366">"Дадзеныя ўключаныя"</string>
<string name="data_enable_summary" msgid="2382798156640007971">"Дазволіць выкарыстанне даных"</string>
<string name="dialog_alert_title" msgid="6751344986194435476">"Увага"</string>
- <string name="roaming" msgid="8871412572928323707">"Перадача дадзеных у роўмінгу"</string>
- <string name="roaming_enable" msgid="7331106985174381987">"Злучацца з паслугамі перадачы дадзеных ў роўмінгу"</string>
- <string name="roaming_disable" msgid="1843417228755568110">"Злучацца з паслугамі перадачы дадзеных у роўмінгу"</string>
+ <string name="roaming" msgid="8871412572928323707">"Перадача даных у роўмінгу"</string>
+ <string name="roaming_enable" msgid="7331106985174381987">"Падключацца да сэрвісаў перадачы даных у роўмінгу"</string>
+ <string name="roaming_disable" msgid="1843417228755568110">"Падключацца да сэрвісаў перадачы даных у роўмінгу"</string>
<string name="roaming_reenable_message" msgid="8913735676127858115">"Падлучэнне для перадачы дадзеных страчана, таму што вы выйшлі з зоны пакрыцця сваёй сеткі, а перадача дадзеных у роўмінгу адключана."</string>
<string name="roaming_warning" msgid="1603164667540144353">"Гэта можа прывесці да значных выдаткаў."</string>
<string name="roaming_alert_title" msgid="3654815360303826008">"Дазволіць перадачу даных у роўмінгу?"</string>
<string name="gsm_umts_options" msgid="6538311689850981686">"Параметры GSM/UMTS"</string>
<string name="cdma_options" msgid="4016822858172249884">"Параметры CDMA"</string>
- <string name="throttle_data_usage" msgid="3715677828160555808">"Выкарыстанне дадзеных"</string>
- <string name="throttle_current_usage" msgid="8762280193043815361">"Выкарыстанне дадзеных у бягучы перыяд"</string>
+ <string name="throttle_data_usage" msgid="3715677828160555808">"Выкарыстанне трафіку"</string>
+ <string name="throttle_current_usage" msgid="8762280193043815361">"Выкарыстанне даных у бягучы перыяд"</string>
<string name="throttle_time_frame" msgid="1915198770363734685">"Перыяд выкарыстання дадзеных"</string>
<string name="throttle_rate" msgid="4710388992676803508">"Палітыка хуткасці перадачы дадзеных"</string>
<string name="throttle_help" msgid="243651091785169900">"Дадатковая iнфармацыя"</string>
@@ -349,7 +358,7 @@
<string name="sum_fdn_manage_list" msgid="8431088265332628316">"Кіраванне спісам тэлефонных нумароў"</string>
<string name="voice_privacy" msgid="3776841382844614716">"Палiтыка прыватнасцi Voice"</string>
<string name="voice_privacy_summary" msgid="3159383389833516214">"Уключыць пашыраны рэжым прыватнасці"</string>
- <string name="tty_mode_option_title" msgid="9033098925144434669">"TTY рэжым"</string>
+ <string name="tty_mode_option_title" msgid="9033098925144434669">"Рэжым TTY"</string>
<string name="tty_mode_option_summary" msgid="1073835131534808732">"Задаць рэжым TTY"</string>
<string name="auto_retry_mode_title" msgid="4073265511427813322">"Аўтаматычны паўтор"</string>
<string name="auto_retry_mode_summary" msgid="4973886004067532288">"Уключыць рэжым аўтаматычнага паўтору"</string>
@@ -446,6 +455,7 @@
<string name="incall_error_supp_service_hangup" msgid="7434513517153834426">"Немагчыма скончыць выклік(і)."</string>
<string name="incall_error_supp_service_hold" msgid="7967020511232222078">"Немагчыма ўтрымліваць выклікі."</string>
<string name="incall_error_wfc_only_no_wireless_network" msgid="1782466780452640089">"Падлучыцеся да бесправадной сеткі, каб зрабіць выклік."</string>
+ <string name="incall_error_promote_wfc" msgid="106510757624022064">"Дазволіць выклік па Wi-Fi-тэлефаніі."</string>
<string name="emergency_enable_radio_dialog_title" msgid="4627849966634578257">"Экстраны выклік"</string>
<string name="emergency_enable_radio_dialog_message" msgid="207613549344420291">"Уключэнне радыё..."</string>
<string name="emergency_enable_radio_dialog_retry" msgid="5960061579996526883">"Не абслугоўваецца. Паўтор спробы..."</string>
@@ -533,8 +543,8 @@
<string name="alert_dialog_yes" msgid="6674268047820703974">"Так"</string>
<string name="alert_dialog_no" msgid="1476091437797628703">"Не"</string>
<string name="alert_dialog_dismiss" msgid="2491494287075907171">"Скасаваць"</string>
- <string name="voicemail_provider" msgid="5135942703327136909">"Служба"</string>
- <string name="voicemail_settings" msgid="72448049107749316">"Налады"</string>
+ <string name="voicemail_provider" msgid="5135942703327136909">"Сэрвіс"</string>
+ <string name="voicemail_settings" msgid="72448049107749316">"Наладка"</string>
<string name="voicemail_number_not_set" msgid="6724904736891087856">"<Не заданы>"</string>
<string name="other_settings" msgid="3672912580359716394">"Іншыя налады выкліку"</string>
<string name="calling_via_template" msgid="4839419581866928142">"Званкі праз правайдара <xliff:g id="PROVIDER_NAME">%s</xliff:g>"</string>
@@ -546,6 +556,8 @@
<string name="voicemail_notification_vibrate_when_title" msgid="8361970092063604886">"Вібрацыя"</string>
<string name="voicemail_notification_vibarte_when_dialog_title" msgid="5739583146522136440">"Вібрацыя"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="5012622186976275457">"Візуальная галасавая пошта"</string>
+ <string name="voicemail_set_pin_dialog_title" msgid="2797924461029093837">"Задаць PIN-код"</string>
+ <string name="voicemail_change_pin_dialog_title" msgid="6035421908626121564">"Змяніць PIN-код"</string>
<string name="voicemail_notification_ringtone_title" msgid="2609519527849101590">"Гук"</string>
<string name="preference_category_ringtone" msgid="5197960752529332721">"Рынгтон і вiбрацыя"</string>
<string name="pstn_connection_service_label" msgid="1743245930577325900">"Убудаваныя SIM-карты"</string>
@@ -563,4 +575,16 @@
<string name="message_decode_error" msgid="3456481534066924855">"Памылка расшыфравання паведамлення."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM-карта актывавала вашу службу і абнавіла функцыі роўмінгу вашага тэлефона."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Занадта шмат актыўных выклікаў. Скончыце ці аб\'яднайце існуючыя выклікі, перш чым рабіць новы выклік."</string>
+ <string name="change_pin_title" msgid="7790232089699034029">"Змяніць PIN-код галасавой пошты"</string>
+ <string name="change_pin_continue_label" msgid="2135088662420163447">"Працягнуць"</string>
+ <string name="change_pin_cancel_label" msgid="353535488390948596">"Скасаваць"</string>
+ <string name="change_pin_ok_label" msgid="6204308560844889926">"ОК"</string>
+ <string name="change_pin_enter_old_pin_header" msgid="419179847657548887">"Пацвердзіце свой стары PIN-код"</string>
+ <string name="change_pin_enter_old_pin_hint" msgid="8579171678763615453">"Каб працягнуць, увядзіце PIN-код галасавой пошты."</string>
+ <string name="change_pin_enter_new_pin_header" msgid="2611191814590251532">"Задайце новы PIN-код"</string>
+ <string name="change_pin_enter_new_pin_hint" msgid="2322940054329689309">"PIN-код павінен утрымліваць <xliff:g id="MIN">%1$d</xliff:g>-<xliff:g id="MAX">%2$d</xliff:g> лічбаў."</string>
+ <string name="change_pin_confirm_pin_header" msgid="8113764019347322170">"Пацвердзіце PIN-код"</string>
+ <string name="change_pin_confirm_pins_dont_match" msgid="4795052654904027909">"PIN-код не супадае"</string>
+ <string name="change_pin_succeeded" msgid="2022852286442211151">"PIN-код галасавой пошты абноўлены"</string>
+ <string name="change_pin_system_error" msgid="8308462387154257840">"Немагчыма прызначыць PIN-код"</string>
</resources>
diff --git a/res/values-bs-rBA/strings.xml b/res/values-bs-rBA/strings.xml
index 6191ca8..8cb1fc7 100644
--- a/res/values-bs-rBA/strings.xml
+++ b/res/values-bs-rBA/strings.xml
@@ -147,6 +147,15 @@
<string name="no_change" msgid="3186040086622435212">"Nisu izvršene promjene."</string>
<string name="sum_voicemail_choose_provider" msgid="59911196126278922">"Izaberite uslugu govorne pošte"</string>
<string name="voicemail_default" msgid="2001233554889016880">"Vaš operater"</string>
+ <string name="vm_change_pin_old_pin" msgid="7295220109886682573">"Stari PIN"</string>
+ <string name="vm_change_pin_new_pin" msgid="5412922262839438097">"Novi PIN"</string>
+ <string name="vm_change_pin_progress_message" msgid="3977357361934350336">"Pričekajte."</string>
+ <string name="vm_change_pin_error_too_short" msgid="5974971097302710497">"Novi PIN je prekratak."</string>
+ <string name="vm_change_pin_error_too_long" msgid="8476870806115051865">"Novi PIN je predug."</string>
+ <string name="vm_change_pin_error_too_weak" msgid="7883744811891784882">"Novi PIN je preslab. Jaka lozinka ne smije sadržavati uzastopni niz ili ponovljene cifre."</string>
+ <string name="vm_change_pin_error_mismatch" msgid="2754685537970757317">"Stari PIN se ne podudara."</string>
+ <string name="vm_change_pin_error_invalid" msgid="3972205462701668653">"Novi PIN sadrži nevažeće znakove."</string>
+ <string name="vm_change_pin_error_system_error" msgid="6610603326230000207">"Nije moguće promijeniti PIN"</string>
<string name="mobile_networks" msgid="2843854043339307375">"Postavke mobilne mreže"</string>
<string name="label_available" msgid="1181658289009300430">"Dostupne mreže"</string>
<string name="load_networks_progress" msgid="5230707536168902952">"Pretraživanje…"</string>
@@ -446,6 +455,7 @@
<string name="incall_error_supp_service_hangup" msgid="7434513517153834426">"Nije moguće uputiti poziv(e)."</string>
<string name="incall_error_supp_service_hold" msgid="7967020511232222078">"Nije moguće staviti pozive na čekanje."</string>
<string name="incall_error_wfc_only_no_wireless_network" msgid="1782466780452640089">"Povežite se na bežičnu mrežu da uputite poziv."</string>
+ <string name="incall_error_promote_wfc" msgid="106510757624022064">"Omogućite Wi-Fi pozivanje da uputite poziv."</string>
<string name="emergency_enable_radio_dialog_title" msgid="4627849966634578257">"Hitni poziv"</string>
<string name="emergency_enable_radio_dialog_message" msgid="207613549344420291">"Uključivanje radija u toku…"</string>
<string name="emergency_enable_radio_dialog_retry" msgid="5960061579996526883">"Nema mreže. Novi pokušaj u toku…"</string>
@@ -543,6 +553,8 @@
<string name="voicemail_notification_vibrate_when_title" msgid="8361970092063604886">"Vibriranje"</string>
<string name="voicemail_notification_vibarte_when_dialog_title" msgid="5739583146522136440">"Vibriranje"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="5012622186976275457">"Vizuelna govorna pošta"</string>
+ <string name="voicemail_set_pin_dialog_title" msgid="2797924461029093837">"Postavljanje PIN-a"</string>
+ <string name="voicemail_change_pin_dialog_title" msgid="6035421908626121564">"Promijeni PIN"</string>
<string name="voicemail_notification_ringtone_title" msgid="2609519527849101590">"Zvuk"</string>
<string name="preference_category_ringtone" msgid="5197960752529332721">"Melodija zvona i vibracija"</string>
<string name="pstn_connection_service_label" msgid="1743245930577325900">"Ugrađene SIM kartice"</string>
@@ -560,4 +572,16 @@
<string name="message_decode_error" msgid="3456481534066924855">"Došlo je do greške prilikom dekodiranja poruke."</string>
<string name="callFailed_cdma_activation" msgid="2307989779233262164">"SIM kartica je aktivirala vašu uslugu i ažurirala mogućnosti rominga za telefon."</string>
<string name="callFailed_cdma_call_limit" msgid="1556916577171457086">"Previše aktivnih poziva. Prekinite ili spojite postojeće pozive prije upućivanja novog poziva."</string>
+ <string name="change_pin_title" msgid="7790232089699034029">"Promijeni PIN govorne pošte"</string>
+ <string name="change_pin_continue_label" msgid="2135088662420163447">"Nastavi"</string>
+ <string name="change_pin_cancel_label" msgid="353535488390948596">"Otkaži"</string>
+ <string name="change_pin_ok_label" msgid="6204308560844889926">"Uredu"</string>
+ <string name="change_pin_enter_old_pin_header" msgid="419179847657548887">"Potvrdite stari PIN"</string>
+ <string name="change_pin_enter_old_pin_hint" msgid="8579171678763615453">"Za nastavak unesite PIN govorne pošte."</string>
+ <string name="change_pin_enter_new_pin_header" msgid="2611191814590251532">"Postavite novi PIN"</string>
+ <string name="change_pin_enter_new_pin_hint" msgid="2322940054329689309">"PIN mora imati između <xliff:g id="MIN">%1$d</xliff:g> i <xliff:g id="MAX">%2$d</xliff:g> cifri."</string>
+ <string name="change_pin_confirm_pin_header" msgid="8113764019347322170">"Potvrdite PIN"</string>
+ <string name="change_pin_confirm_pins_dont_match" msgid="4795052654904027909">"PIN-ovi se ne podudaraju"</string>
+ <string name="change_pin_succeeded" msgid="2022852286442211151">"PIN govorne pošte je ažuriran"</string>
+ <string name="change_pin_system_error" msgid="8308462387154257840">"Nije moguće postaviti PIN"</string>
</resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 1622266..18b6f1d 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -580,7 +580,7 @@
<string name="change_pin_enter_old_pin_header" msgid="419179847657548887">"Confirmez votre ancien NIP"</string>
<string name="change_pin_enter_old_pin_hint" msgid="8579171678763615453">"Entrez votre NIP de messagerie vocale pour continuer."</string>
<string name="change_pin_enter_new_pin_header" msgid="2611191814590251532">"Choisissez un nouveau NIP"</string>
- <string name="change_pin_enter_new_pin_hint" msgid="2322940054329689309">"Le NIP doit comporter <xliff:g id="MIN">%1$d</xliff:g> à <xliff:g id="MAX">%2$d</xliff:g> chiffres."</string>
+ <string name="change_pin_enter_new_pin_hint" msgid="2322940054329689309">"Le NIP doit comporter de <xliff:g id="MIN">%1$d</xliff:g> à <xliff:g id="MAX">%2$d</xliff:g> chiffres."</string>
<string name="change_pin_confirm_pin_header" msgid="8113764019347322170">"Confirmez votre NIP"</string>
<string name="change_pin_confirm_pins_dont_match" msgid="4795052654904027909">"Les NIP ne correspondent pas"</string>
<string name="change_pin_succeeded" msgid="2022852286442211151">"NIP de messagerie vocale mis à jour"</string>
diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml
index e2d3b87..3e0a0e6 100644
--- a/res/values-kk-rKZ/strings.xml
+++ b/res/values-kk-rKZ/strings.xml
@@ -455,7 +455,7 @@
<string name="incall_error_supp_service_hangup" msgid="7434513517153834426">"Қоңырау(лар)ды босату мүмкін емес."</string>
<string name="incall_error_supp_service_hold" msgid="7967020511232222078">"Қоңырауларды ұстау мүмкін емес."</string>
<string name="incall_error_wfc_only_no_wireless_network" msgid="1782466780452640089">"Қоңырау шалу үшін сымсыз желіге қосылыңыз."</string>
- <string name="incall_error_promote_wfc" msgid="106510757624022064">"Қоңырау жасау үшін, Wi-Fi желісін қосыңыз."</string>
+ <string name="incall_error_promote_wfc" msgid="106510757624022064">"Қоңырау шалу үшін, Wi-Fi желісін қосыңыз."</string>
<string name="emergency_enable_radio_dialog_title" msgid="4627849966634578257">"Төтенше қоңырау"</string>
<string name="emergency_enable_radio_dialog_message" msgid="207613549344420291">"Радионы қосуда…"</string>
<string name="emergency_enable_radio_dialog_retry" msgid="5960061579996526883">"Қызмет жоқ. Әрекет қайталануда…"</string>
@@ -576,9 +576,9 @@
<string name="change_pin_enter_old_pin_header" msgid="419179847657548887">"Ескі PIN кодыңызды растаңыз"</string>
<string name="change_pin_enter_old_pin_hint" msgid="8579171678763615453">"Жалғастыру үшін, дауыстық поштаңыздың PIN кодын енгізіңіз."</string>
<string name="change_pin_enter_new_pin_header" msgid="2611191814590251532">"Жаңа PIN кодын орнатыңыз"</string>
- <string name="change_pin_enter_new_pin_hint" msgid="2322940054329689309">"PIN код <xliff:g id="MIN">%1$d</xliff:g>-<xliff:g id="MAX">%2$d</xliff:g> бірліктен тұруы тиіс."</string>
+ <string name="change_pin_enter_new_pin_hint" msgid="2322940054329689309">"PIN коды <xliff:g id="MIN">%1$d</xliff:g>-<xliff:g id="MAX">%2$d</xliff:g> бірліктен тұруы тиіс."</string>
<string name="change_pin_confirm_pin_header" msgid="8113764019347322170">"PIN кодын растаңыз"</string>
- <string name="change_pin_confirm_pins_dont_match" msgid="4795052654904027909">"PIN кодтар дұрыс емес"</string>
+ <string name="change_pin_confirm_pins_dont_match" msgid="4795052654904027909">"PIN кодтары сәйкес келмейді"</string>
<string name="change_pin_succeeded" msgid="2022852286442211151">"Дауыстық пошта PIN коды жаңартылды"</string>
<string name="change_pin_system_error" msgid="8308462387154257840">"PIN кодын орнату мүмкін болмады"</string>
</resources>
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml
index 5bc9531..5344457 100644
--- a/res/values-ky-rKG/strings.xml
+++ b/res/values-ky-rKG/strings.xml
@@ -455,7 +455,7 @@
<string name="incall_error_supp_service_hangup" msgid="7434513517153834426">"Чалуу(лар) бошотулбай жатат."</string>
<string name="incall_error_supp_service_hold" msgid="7967020511232222078">"Чалууну кармап туруу мүмкүн эмес."</string>
<string name="incall_error_wfc_only_no_wireless_network" msgid="1782466780452640089">"Чалуу үчүн зымсыз тармакка туташыңыз."</string>
- <string name="incall_error_promote_wfc" msgid="106510757624022064">"Телефон чалууга Wi-Fi чалууну иштетиңиз."</string>
+ <string name="incall_error_promote_wfc" msgid="106510757624022064">"Wi-Fi аркылуу чалыңыз."</string>
<string name="emergency_enable_radio_dialog_title" msgid="4627849966634578257">"Шашылыш чалуу"</string>
<string name="emergency_enable_radio_dialog_message" msgid="207613549344420291">"Радио күйгүзүлүүдө…"</string>
<string name="emergency_enable_radio_dialog_retry" msgid="5960061579996526883">"Кызмат жок. Кайра аракет кылууда…"</string>
@@ -550,7 +550,7 @@
<string name="voicemail_notification_vibrate_when_title" msgid="8361970092063604886">"Дирилдөө"</string>
<string name="voicemail_notification_vibarte_when_dialog_title" msgid="5739583146522136440">"Дирилдөө"</string>
<string name="voicemail_visual_voicemail_switch_title" msgid="5012622186976275457">"Визуалдык үн почтасы"</string>
- <string name="voicemail_set_pin_dialog_title" msgid="2797924461029093837">"PIN кодду койуу"</string>
+ <string name="voicemail_set_pin_dialog_title" msgid="2797924461029093837">"PIN код коюу"</string>
<string name="voicemail_change_pin_dialog_title" msgid="6035421908626121564">"PIN кодду өзгөртүү"</string>
<string name="voicemail_notification_ringtone_title" msgid="2609519527849101590">"Үнү"</string>
<string name="preference_category_ringtone" msgid="5197960752529332721">"Рингтон жана Титирөө"</string>
@@ -578,7 +578,7 @@
<string name="change_pin_enter_new_pin_header" msgid="2611191814590251532">"Жаңы PIN коюңуз"</string>
<string name="change_pin_enter_new_pin_hint" msgid="2322940054329689309">"PIN <xliff:g id="MIN">%1$d</xliff:g>-<xliff:g id="MAX">%2$d</xliff:g> сандан турушу керек."</string>
<string name="change_pin_confirm_pin_header" msgid="8113764019347322170">"PIN кодуңузду ырастаңыз"</string>
- <string name="change_pin_confirm_pins_dont_match" msgid="4795052654904027909">"PIN коддор туура келген жок"</string>
+ <string name="change_pin_confirm_pins_dont_match" msgid="4795052654904027909">"PIN коддор дал келген жок"</string>
<string name="change_pin_succeeded" msgid="2022852286442211151">"Үн почтасынын PIN коду жаңыртылды"</string>
<string name="change_pin_system_error" msgid="8308462387154257840">"PIN код коюлбайт"</string>
</resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 3cf8d43..42b8b27 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -584,7 +584,7 @@
<string name="change_pin_enter_new_pin_header" msgid="2611191814590251532">"Angi en ny PIN-kode"</string>
<string name="change_pin_enter_new_pin_hint" msgid="2322940054329689309">"PIN-koden må bestå av <xliff:g id="MIN">%1$d</xliff:g>-<xliff:g id="MAX">%2$d</xliff:g> sifre."</string>
<string name="change_pin_confirm_pin_header" msgid="8113764019347322170">"Bekreft PIN-koden"</string>
- <string name="change_pin_confirm_pins_dont_match" msgid="4795052654904027909">"PIN-kodene er forskjellige"</string>
+ <string name="change_pin_confirm_pins_dont_match" msgid="4795052654904027909">"PIN-kodene stemmer ikke overens"</string>
<string name="change_pin_succeeded" msgid="2022852286442211151">"PIN-koden for talemeldinger ble oppdatert"</string>
<string name="change_pin_system_error" msgid="8308462387154257840">"Kan ikke angi PIN-kode"</string>
</resources>
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml
index 1673d6a..21ef013 100644
--- a/res/values-sq-rAL/strings.xml
+++ b/res/values-sq-rAL/strings.xml
@@ -576,7 +576,7 @@
<string name="change_pin_enter_old_pin_header" msgid="419179847657548887">"Konfirmo kodin PIN të vjetër"</string>
<string name="change_pin_enter_old_pin_hint" msgid="8579171678763615453">"Shkruaj kodin PIN të postës zanore për të vazhduar."</string>
<string name="change_pin_enter_new_pin_header" msgid="2611191814590251532">"Cakto një kod të ri PIN."</string>
- <string name="change_pin_enter_new_pin_hint" msgid="2322940054329689309">"Kodi PIN duhet të ketë <xliff:g id="MIN">%1$d</xliff:g> - <xliff:g id="MAX">%2$d</xliff:g> shifra."</string>
+ <string name="change_pin_enter_new_pin_hint" msgid="2322940054329689309">"Kodi PIN duhet të ketë <xliff:g id="MIN">%1$d</xliff:g>-<xliff:g id="MAX">%2$d</xliff:g> shifra."</string>
<string name="change_pin_confirm_pin_header" msgid="8113764019347322170">"Konfirmo kodin tënd PIN"</string>
<string name="change_pin_confirm_pins_dont_match" msgid="4795052654904027909">"Kodet PIN nuk përputhen"</string>
<string name="change_pin_succeeded" msgid="2022852286442211151">"Kodi PIN i postës zanore u përditësua"</string>
diff --git a/sip/res/values-b+sr+Latn/strings.xml b/sip/res/values-b+sr+Latn/strings.xml
index d438a2b..740a3d7 100644
--- a/sip/res/values-b+sr+Latn/strings.xml
+++ b/sip/res/values-b+sr+Latn/strings.xml
@@ -61,7 +61,9 @@
<string name="advanced_settings" msgid="6622996380747040711">"Opcionalna podešavanja"</string>
<string name="auth_username_title" msgid="8262491689004708265">"Korisničko ime za potvrdu identiteta"</string>
<string name="auth_username_summary" msgid="941160241371436473">"Za potvrdu identiteta koristi se korisničko ime"</string>
- <string name="default_preference_summary" msgid="1979249643719483249">"<Nije podešeno>"</string>
+ <string name="default_preference_summary_username" msgid="8404717434312826082">"<Nije podešeno>"</string>
+ <string name="default_preference_summary_password" msgid="4464464672997027904">"<Nije podešena>"</string>
+ <string name="default_preference_summary_domain_address" msgid="4871971710197441673">"<Nije podešena>"</string>
<string name="display_name_summary" msgid="7155076491675565407">"<Isto kao korisničko ime>"</string>
<string name="optional_summary" msgid="2363105560396317624">"<Opcionalno>"</string>
<string name="advanced_settings_show" msgid="7838761602853998622">"▷ Dodirnite da biste prikazali sve"</string>
diff --git a/sip/res/values-be-rBY/strings.xml b/sip/res/values-be-rBY/strings.xml
index 87c3736..a848c52 100644
--- a/sip/res/values-be-rBY/strings.xml
+++ b/sip/res/values-be-rBY/strings.xml
@@ -61,7 +61,9 @@
<string name="advanced_settings" msgid="6622996380747040711">"Неабавязковыя налады"</string>
<string name="auth_username_title" msgid="8262491689004708265">"Імя карыстальніка для праверкі сапраўднасці"</string>
<string name="auth_username_summary" msgid="941160241371436473">"Імя карыстальніка, якое выкарыстоўваецца для праверкі сапраўднасці"</string>
- <string name="default_preference_summary" msgid="1979249643719483249">"<Не зададзены>"</string>
+ <string name="default_preference_summary_username" msgid="8404717434312826082">"<Не зададзены>"</string>
+ <string name="default_preference_summary_password" msgid="4464464672997027904">"<Не зададзены>"</string>
+ <string name="default_preference_summary_domain_address" msgid="4871971710197441673">"<Не зададзены>"</string>
<string name="display_name_summary" msgid="7155076491675565407">"<Такі ж, як імя карыстальніка>"</string>
<string name="optional_summary" msgid="2363105560396317624">"<Неабавязкова>"</string>
<string name="advanced_settings_show" msgid="7838761602853998622">"▷ Дакраніцеся, каб паказаць усё"</string>
diff --git a/sip/res/values-bs-rBA/strings.xml b/sip/res/values-bs-rBA/strings.xml
index a41b184..ea4374c 100644
--- a/sip/res/values-bs-rBA/strings.xml
+++ b/sip/res/values-bs-rBA/strings.xml
@@ -61,7 +61,9 @@
<string name="advanced_settings" msgid="6622996380747040711">"Opcionalne postavke"</string>
<string name="auth_username_title" msgid="8262491689004708265">"Korisničko ime za provjeru vjerodostojnosti"</string>
<string name="auth_username_summary" msgid="941160241371436473">"Korisničko ime upotrijebljeno za provjeru vjerodostojnosti"</string>
- <string name="default_preference_summary" msgid="1979249643719483249">"<Nije postavljeno>"</string>
+ <string name="default_preference_summary_username" msgid="8404717434312826082">"<Nije postavljeno>"</string>
+ <string name="default_preference_summary_password" msgid="4464464672997027904">"<Nije postavljeno>"</string>
+ <string name="default_preference_summary_domain_address" msgid="4871971710197441673">"<Nije postavljeno>"</string>
<string name="display_name_summary" msgid="7155076491675565407">"<Isto kao korisničko ime>"</string>
<string name="optional_summary" msgid="2363105560396317624">"<Opcionalno>"</string>
<string name="advanced_settings_show" msgid="7838761602853998622">"▷ Dodirnite da prikažete sve"</string>
diff --git a/src/com/android/phone/settings/VoicemailChangePinActivity.java b/src/com/android/phone/settings/VoicemailChangePinActivity.java
index fcf5bd3..a963af2 100644
--- a/src/com/android/phone/settings/VoicemailChangePinActivity.java
+++ b/src/com/android/phone/settings/VoicemailChangePinActivity.java
@@ -209,6 +209,10 @@
@Override
public void onInputChanged(VoicemailChangePinActivity activity) {
String password = activity.getCurrentPasswordInput();
+ if (password.length() == 0) {
+ activity.setNextEnabled(false);
+ return;
+ }
CharSequence error = activity.validatePassword(password);
if (error != null) {
activity.mErrorText.setText(error);
@@ -246,7 +250,10 @@
@Override
public void onInputChanged(VoicemailChangePinActivity activity) {
-
+ if (activity.getCurrentPasswordInput().length() == 0) {
+ activity.setNextEnabled(false);
+ return;
+ }
if (activity.getCurrentPasswordInput().equals(activity.mFirstPin)) {
activity.setNextEnabled(true);
activity.mErrorText.setText(null);
@@ -272,6 +279,7 @@
Toast.LENGTH_SHORT).show();
} else {
CharSequence message = activity.getChangePinResultMessage(result);
+ VvmLog.i(TAG, "Change PIN failed: " + message);
activity.showError(message);
if (result == OmtpConstants.CHANGE_PIN_MISMATCH) {
// Somehow the PIN has changed, prompt to enter the old PIN again.
@@ -595,6 +603,7 @@
helper.changePin(mOldPin, mNewPin);
sendResult(result);
} catch (InitializingException | MessagingException e) {
+ VvmLog.e(TAG, "ChangePinNetworkRequestCallback: onAvailable: ", e);
sendResult(OmtpConstants.CHANGE_PIN_SYSTEM_ERROR);
}
}
@@ -606,6 +615,7 @@
}
private void sendResult(@ChangePinResult int result) {
+ VvmLog.i(TAG, "Change PIN result: " + result);
mProgressDialog.dismiss();
mHandler.obtainMessage(MESSAGE_HANDLE_RESULT, result, 0).sendToTarget();
releaseNetwork();
diff --git a/src/com/android/phone/vvm/omtp/ActivationTask.java b/src/com/android/phone/vvm/omtp/ActivationTask.java
index 101a96f..b575b95 100644
--- a/src/com/android/phone/vvm/omtp/ActivationTask.java
+++ b/src/com/android/phone/vvm/omtp/ActivationTask.java
@@ -20,8 +20,13 @@
import android.annotation.WorkerThread;
import android.content.Context;
import android.content.Intent;
+import android.database.ContentObserver;
import android.os.Bundle;
+import android.provider.Settings;
+import android.provider.Settings.Global;
import android.telecom.PhoneAccountHandle;
+import android.telephony.ServiceState;
+import android.telephony.TelephonyManager;
import com.android.phone.Assert;
import com.android.phone.PhoneGlobals;
import com.android.phone.vvm.omtp.protocol.VisualVoicemailProtocol;
@@ -34,6 +39,8 @@
import com.android.phone.vvm.omtp.sync.SyncTask;
import com.android.phone.vvm.omtp.utils.PhoneAccountHandleConverter;
import java.io.IOException;
+import java.util.HashSet;
+import java.util.Set;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeoutException;
@@ -46,13 +53,16 @@
*/
public class ActivationTask extends BaseTask {
- private static final String TAG = "ActivationTask";
+ private static final String TAG = "VvmActivationTask";
private static final int RETRY_TIMES = 4;
private static final int RETRY_INTERVAL_MILLIS = 5_000;
private static final String EXTRA_MESSAGE_DATA_BUNDLE = "extra_message_data_bundle";
+ @Nullable
+ private static DeviceProvisionedObserver sDeviceProvisionedObserver;
+
private Bundle mData;
public ActivationTask() {
@@ -60,7 +70,33 @@
addPolicy(new RetryPolicy(RETRY_TIMES, RETRY_INTERVAL_MILLIS));
}
+ /**
+ * Has the user gone through the setup wizard yet.
+ */
+ private static boolean isDeviceProvisioned(Context context) {
+ return Settings.Global.getInt(
+ context.getContentResolver(), Settings.Global.DEVICE_PROVISIONED, 0) == 1;
+ }
+
public static void start(Context context, int subId, @Nullable Bundle data) {
+ if (!isDeviceProvisioned(context)) {
+ VvmLog.i(TAG, "Activation requested while device is not provisioned, postponing");
+ // Activation might need information such as system language to be set, so wait until
+ // the setup wizard is finished. The data bundle from the SMS will be re-requested upon
+ // activation.
+ queueActivationAfterProvisioned(context, subId);
+ return;
+ }
+
+ // Check for signal before activating. The event often happen while boot and the
+ // network is not connected yet. Launching activation will likely to cause the SMS
+ // sending to fail and waste unnecessary time waiting for time out.
+ if (context.getSystemService(TelephonyManager.class)
+ .getServiceStateForSubscriber(subId).getState()
+ != ServiceState.STATE_IN_SERVICE) {
+ VvmLog.i(TAG, "Activation requested while not in service, rejecting");
+ }
+
Intent intent = BaseTask.createIntent(context, ActivationTask.class, subId);
if (data != null) {
intent.putExtra(EXTRA_MESSAGE_DATA_BUNDLE, data);
@@ -130,11 +166,14 @@
VvmLog.i(TAG, "Subscriber not ready, start provisioning");
helper.startProvisioning(this, phoneAccountHandle, message, data);
- } else {
- VvmLog.i(TAG, "Subscriber not ready but provisioning is not supported");
+ } else if (message.getProvisioningStatus().equals(OmtpConstants.SUBSCRIBER_NEW)) {
+ VvmLog.i(TAG, "Subscriber new but provisioning is not supported");
// Ignore the non-ready state and attempt to use the provided info as is.
// This is probably caused by not completing the new user tutorial.
updateSource(getContext(), phoneAccountHandle, getSubId(), message);
+ } else {
+ VvmLog.i(TAG, "Subscriber not ready but provisioning is not supported");
+ helper.handleEvent(OmtpEvents.CONFIG_SERVICE_NOT_AVAILABLE);
}
}
}
@@ -163,4 +202,41 @@
VvmLog.e(TAG, "Visual voicemail not available for subscriber.");
}
}
+
+ private static void queueActivationAfterProvisioned(Context context, int subId) {
+ if (sDeviceProvisionedObserver == null) {
+ sDeviceProvisionedObserver = new DeviceProvisionedObserver(context);
+ context.getContentResolver()
+ .registerContentObserver(Settings.Global.getUriFor(Global.DEVICE_PROVISIONED),
+ false, sDeviceProvisionedObserver);
+ }
+ sDeviceProvisionedObserver.addSubId(subId);
+ }
+
+ private static class DeviceProvisionedObserver extends ContentObserver {
+
+ private final Context mContext;
+ private final Set<Integer> mSubIds = new HashSet<>();
+
+ private DeviceProvisionedObserver(Context context) {
+ super(null);
+ mContext = context;
+ }
+
+ public void addSubId(int subId) {
+ mSubIds.add(subId);
+ }
+
+ @Override
+ public void onChange(boolean selfChange) {
+ if (isDeviceProvisioned(mContext)) {
+ VvmLog.i(TAG, "device provisioned, resuming activation");
+ for (int subId : mSubIds) {
+ start(mContext, subId, null);
+ }
+ mContext.getContentResolver().unregisterContentObserver(sDeviceProvisionedObserver);
+ sDeviceProvisionedObserver = null;
+ }
+ }
+ }
}
diff --git a/src/com/android/phone/vvm/omtp/DefaultOmtpEventHandler.java b/src/com/android/phone/vvm/omtp/DefaultOmtpEventHandler.java
index 45ed406..353ba07 100644
--- a/src/com/android/phone/vvm/omtp/DefaultOmtpEventHandler.java
+++ b/src/com/android/phone/vvm/omtp/DefaultOmtpEventHandler.java
@@ -19,7 +19,6 @@
import android.content.Context;
import android.provider.VoicemailContract;
import android.provider.VoicemailContract.Status;
-
import com.android.phone.VoicemailStatus;
import com.android.phone.vvm.omtp.OmtpEvents.Type;
@@ -58,8 +57,17 @@
.apply();
break;
case CONFIG_ACTIVATING:
+ // Wipe all errors from the last activation. All errors shown should be new errors
+ // for this activation.
VoicemailStatus.edit(context, config.getSubId())
- .setConfigurationState(Status.CONFIGURATION_STATE_CONFIGURING).apply();
+ .setConfigurationState(Status.CONFIGURATION_STATE_CONFIGURING)
+ .setDataChannelState(Status.DATA_CHANNEL_STATE_OK)
+ .setNotificationChannelState(Status.NOTIFICATION_CHANNEL_STATE_OK).apply();
+ break;
+ case CONFIG_SERVICE_NOT_AVAILABLE:
+ VoicemailStatus.edit(context, config.getSubId())
+ .setConfigurationState(Status.CONFIGURATION_STATE_FAILED)
+ .apply();
break;
case CONFIG_STATUS_SMS_TIME_OUT:
VoicemailStatus.edit(context, config.getSubId())
@@ -74,6 +82,7 @@
private static void handleDataChannelEvent(Context context, OmtpVvmCarrierConfigHelper config,
OmtpEvents event) {
switch (event) {
+ case DATA_IMAP_OPERATION_STARTED:
case DATA_IMAP_OPERATION_COMPLETED:
VoicemailStatus.edit(context, config.getSubId())
.setDataChannelState(Status.DATA_CHANNEL_STATE_OK)
@@ -147,6 +156,9 @@
case NOTIFICATION_IN_SERVICE:
VoicemailStatus.edit(context, config.getSubId())
.setNotificationChannelState(Status.NOTIFICATION_CHANNEL_STATE_OK)
+ // Clear the error state. A sync should follow signal return so any error
+ // will be reposted.
+ .setDataChannelState(Status.DATA_CHANNEL_STATE_OK)
.apply();
break;
case NOTIFICATION_SERVICE_LOST:
diff --git a/src/com/android/phone/vvm/omtp/OmtpEvents.java b/src/com/android/phone/vvm/omtp/OmtpEvents.java
index 787cb35..648e0d0 100644
--- a/src/com/android/phone/vvm/omtp/OmtpEvents.java
+++ b/src/com/android/phone/vvm/omtp/OmtpEvents.java
@@ -17,7 +17,6 @@
package com.android.phone.vvm.omtp;
import android.annotation.IntDef;
-
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -36,9 +35,12 @@
CONFIG_DEFAULT_PIN_REPLACED(Type.CONFIGURATION, true),
CONFIG_ACTIVATING(Type.CONFIGURATION, true),
CONFIG_STATUS_SMS_TIME_OUT(Type.CONFIGURATION),
+ CONFIG_SERVICE_NOT_AVAILABLE(Type.CONFIGURATION),
// Data channel State
+ // A new sync has started, old errors in data channel should be cleared.
+ DATA_IMAP_OPERATION_STARTED(Type.DATA_CHANNEL, true),
// Successfully downloaded/uploaded data from the server, which means the data channel is clear.
DATA_IMAP_OPERATION_COMPLETED(Type.DATA_CHANNEL, true),
// The port provided in the STATUS SMS is invalid.
diff --git a/src/com/android/phone/vvm/omtp/SimChangeReceiver.java b/src/com/android/phone/vvm/omtp/SimChangeReceiver.java
index 24f7a2a..92bca53 100644
--- a/src/com/android/phone/vvm/omtp/SimChangeReceiver.java
+++ b/src/com/android/phone/vvm/omtp/SimChangeReceiver.java
@@ -24,10 +24,8 @@
import android.os.UserManager;
import android.telecom.PhoneAccountHandle;
import android.telephony.CarrierConfigManager;
-import android.telephony.ServiceState;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
-
import com.android.internal.telephony.IccCardConstants;
import com.android.internal.telephony.PhoneConstants;
import com.android.internal.telephony.TelephonyIntents;
@@ -95,17 +93,7 @@
// can be recorded.
OmtpVvmSourceManager.getInstance(context).addPhoneStateListener(
phoneAccount);
- // Check for signal before activating. The event often happen while boot and the
- // network is not connected yet. Launching activation will likely to cause the SMS
- // sending to fail and waste unnecessary time waiting for time out.
- if (context.getSystemService(TelephonyManager.class)
- .getServiceStateForSubscriber(subId).getState()
- == ServiceState.STATE_IN_SERVICE) {
- VvmLog.i(TAG, "Sim/config changed while in service, requesting activation");
- carrierConfigHelper.startActivation();
- } else {
- VvmLog.i(TAG, "Sim/config changed while not in service.");
- }
+ carrierConfigHelper.startActivation();
} else {
if (carrierConfigHelper.isLegacyModeEnabled()) {
// SMS still need to be filtered under legacy mode.
diff --git a/src/com/android/phone/vvm/omtp/imap/ImapHelper.java b/src/com/android/phone/vvm/omtp/imap/ImapHelper.java
index 532991f..ce13323 100644
--- a/src/com/android/phone/vvm/omtp/imap/ImapHelper.java
+++ b/src/com/android/phone/vvm/omtp/imap/ImapHelper.java
@@ -400,6 +400,7 @@
String.format(Locale.US, command, newPin, oldPin), true);
return getChangePinResultFromImapResponse(connection.readResponse());
} catch (IOException ioe) {
+ VvmLog.e(TAG, "changePin: ", ioe);
return OmtpConstants.CHANGE_PIN_SYSTEM_ERROR;
} finally {
connection.destroyResponses();
diff --git a/src/com/android/phone/vvm/omtp/protocol/Vvm3Protocol.java b/src/com/android/phone/vvm/omtp/protocol/Vvm3Protocol.java
index c6dd434..f5c65e2 100644
--- a/src/com/android/phone/vvm/omtp/protocol/Vvm3Protocol.java
+++ b/src/com/android/phone/vvm/omtp/protocol/Vvm3Protocol.java
@@ -23,7 +23,6 @@
import android.telecom.PhoneAccountHandle;
import android.telephony.SmsManager;
import android.text.TextUtils;
-
import com.android.phone.common.mail.MessagingException;
import com.android.phone.settings.VisualVoicemailSettingsUtil;
import com.android.phone.settings.VoicemailChangePinActivity;
@@ -40,7 +39,7 @@
import com.android.phone.vvm.omtp.sms.Vvm3MessageSender;
import com.android.phone.vvm.omtp.sync.VvmNetworkRequest;
import com.android.phone.vvm.omtp.sync.VvmNetworkRequest.NetworkWrapper;
-
+import com.android.phone.vvm.omtp.sync.VvmNetworkRequest.RequestFailedException;
import java.io.IOException;
import java.security.SecureRandom;
import java.util.Locale;
@@ -121,7 +120,7 @@
new VisualVoicemailPreferences(config.getContext(), phoneAccountHandle);
message.putStatus(prefs.edit()).apply();
- startProvisionNewUser(phoneAccountHandle, config, message);
+ startProvisionNewUser(task, phoneAccountHandle, config, message);
} else if (OmtpConstants.SUBSCRIBER_PROVISIONED.equals(message.getProvisioningStatus())) {
VvmLog.i(TAG, "User provisioned but not activated, disabling VVM");
VisualVoicemailSettingsUtil
@@ -183,7 +182,7 @@
return bundle;
}
- private void startProvisionNewUser(PhoneAccountHandle phoneAccountHandle,
+ private void startProvisionNewUser(ActivationTask task, PhoneAccountHandle phoneAccountHandle,
OmtpVvmCarrierConfigHelper config, StatusMessage message) {
try (NetworkWrapper wrapper = VvmNetworkRequest.getNetwork(config, phoneAccountHandle)) {
Network network = wrapper.get();
@@ -215,9 +214,12 @@
}
} catch (InitializingException | MessagingException | IOException e) {
config.handleEvent(OmtpEvents.VVM3_NEW_USER_SETUP_FAILED);
+ task.fail();
VvmLog.e(TAG, e.toString());
}
-
+ } catch (RequestFailedException e) {
+ config.handleEvent(OmtpEvents.DATA_NO_CONNECTION_CELLULAR_REQUIRED);
+ task.fail();
}
}
diff --git a/src/com/android/phone/vvm/omtp/protocol/Vvm3Subscriber.java b/src/com/android/phone/vvm/omtp/protocol/Vvm3Subscriber.java
index 7562275..08e9352 100644
--- a/src/com/android/phone/vvm/omtp/protocol/Vvm3Subscriber.java
+++ b/src/com/android/phone/vvm/omtp/protocol/Vvm3Subscriber.java
@@ -33,6 +33,7 @@
import com.android.phone.vvm.omtp.VvmLog;
import com.android.phone.vvm.omtp.sync.VvmNetworkRequest;
import com.android.phone.vvm.omtp.sync.VvmNetworkRequest.NetworkWrapper;
+import com.android.phone.vvm.omtp.sync.VvmNetworkRequest.RequestFailedException;
import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
@@ -162,6 +163,9 @@
mRequestQueue = Volley
.newRequestQueue(mHelper.getContext(), new NetworkSpecifiedHurlStack(network));
processSubscription();
+ } catch (RequestFailedException e) {
+ mHelper.handleEvent(OmtpEvents.VVM3_VMG_CONNECTION_FAILED);
+ mTask.fail();
}
}
diff --git a/src/com/android/phone/vvm/omtp/sync/OmtpVvmSyncService.java b/src/com/android/phone/vvm/omtp/sync/OmtpVvmSyncService.java
index 2140e02..157f51f 100644
--- a/src/com/android/phone/vvm/omtp/sync/OmtpVvmSyncService.java
+++ b/src/com/android/phone/vvm/omtp/sync/OmtpVvmSyncService.java
@@ -20,6 +20,7 @@
import android.net.Uri;
import android.provider.VoicemailContract;
import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
import android.telecom.Voicemail;
import android.text.TextUtils;
import com.android.phone.PhoneUtils;
@@ -33,6 +34,7 @@
import com.android.phone.vvm.omtp.imap.ImapHelper.InitializingException;
import com.android.phone.vvm.omtp.scheduling.BaseTask;
import com.android.phone.vvm.omtp.sync.VvmNetworkRequest.NetworkWrapper;
+import com.android.phone.vvm.omtp.sync.VvmNetworkRequest.RequestFailedException;
import com.android.phone.vvm.omtp.utils.PhoneAccountHandleConverter;
import java.util.HashMap;
import java.util.List;
@@ -93,6 +95,22 @@
for (PhoneAccountHandle source : sources) {
setupAndSendRequest(task, source, null, action);
}
+ activateUnactivatedAccounts();
+ }
+ }
+
+ private void activateUnactivatedAccounts() {
+ List<PhoneAccountHandle> accounts =
+ mContext.getSystemService(TelecomManager.class).getCallCapablePhoneAccounts();
+ for (PhoneAccountHandle phoneAccount : accounts) {
+ if (!VisualVoicemailSettingsUtil.isEnabled(mContext, phoneAccount)) {
+ continue;
+ }
+ int subId = PhoneAccountHandleConverter.toSubId(phoneAccount);
+ if (!OmtpVvmSourceManager.getInstance(mContext).isVvmSourceRegistered(phoneAccount)) {
+ VvmLog.i(TAG, "Unactivated account " + phoneAccount + " found, activating");
+ ActivationTask.start(mContext, subId, null);
+ }
}
}
@@ -109,6 +127,7 @@
}
OmtpVvmCarrierConfigHelper config = new OmtpVvmCarrierConfigHelper(mContext, subId);
+ config.handleEvent(OmtpEvents.DATA_IMAP_OPERATION_STARTED);
try (NetworkWrapper network = VvmNetworkRequest.getNetwork(config, phoneAccount)) {
if (network == null) {
VvmLog.e(TAG, "unable to acquire network");
@@ -116,6 +135,9 @@
return;
}
doSync(task, network.get(), phoneAccount, voicemail, action);
+ } catch (RequestFailedException e) {
+ config.handleEvent(OmtpEvents.DATA_NO_CONNECTION_CELLULAR_REQUIRED);
+ task.fail();
}
}
diff --git a/src/com/android/phone/vvm/omtp/sync/SyncTask.java b/src/com/android/phone/vvm/omtp/sync/SyncTask.java
index d4efc6e..0d91c5c 100644
--- a/src/com/android/phone/vvm/omtp/sync/SyncTask.java
+++ b/src/com/android/phone/vvm/omtp/sync/SyncTask.java
@@ -19,7 +19,6 @@
import android.content.Context;
import android.content.Intent;
import android.telecom.PhoneAccountHandle;
-
import com.android.phone.vvm.omtp.scheduling.BaseTask;
import com.android.phone.vvm.omtp.scheduling.MinimalIntervalPolicy;
import com.android.phone.vvm.omtp.scheduling.RetryPolicy;
@@ -30,7 +29,8 @@
*/
public class SyncTask extends BaseTask {
- private static final int RETRY_TIMES = 2;
+ // Try sync for a total of 5 times, should take around 5 minutes before finally giving up.
+ private static final int RETRY_TIMES = 4;
private static final int RETRY_INTERVAL_MILLIS = 5_000;
private static final int MINIMAL_INTERVAL_MILLIS = 60_000;
diff --git a/src/com/android/phone/vvm/omtp/sync/VvmNetworkRequest.java b/src/com/android/phone/vvm/omtp/sync/VvmNetworkRequest.java
index fba6a26..798950d 100644
--- a/src/com/android/phone/vvm/omtp/sync/VvmNetworkRequest.java
+++ b/src/com/android/phone/vvm/omtp/sync/VvmNetworkRequest.java
@@ -17,11 +17,10 @@
package com.android.phone.vvm.omtp.sync;
import android.net.Network;
+import android.support.annotation.NonNull;
import android.telecom.PhoneAccountHandle;
-
import com.android.phone.vvm.omtp.OmtpVvmCarrierConfigHelper;
import com.android.phone.vvm.omtp.VvmLog;
-
import java.io.Closeable;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
@@ -59,15 +58,24 @@
}
}
+ public static class RequestFailedException extends Exception {
+
+ private RequestFailedException(Throwable cause) {
+ super(cause);
+ }
+ }
+
+ @NonNull
public static NetworkWrapper getNetwork(OmtpVvmCarrierConfigHelper config,
- PhoneAccountHandle handle) {
+ PhoneAccountHandle handle) throws RequestFailedException {
FutureNetworkRequestCallback callback = new FutureNetworkRequestCallback(config, handle);
callback.requestNetwork();
try {
return callback.getFuture().get();
} catch (InterruptedException | ExecutionException e) {
+ callback.releaseNetwork();
VvmLog.e(TAG, "can't get future network", e);
- return null;
+ throw new RequestFailedException(e);
}
}
diff --git a/src/com/android/services/telephony/ImsConference.java b/src/com/android/services/telephony/ImsConference.java
index 58868d0..b911105 100644
--- a/src/com/android/services/telephony/ImsConference.java
+++ b/src/com/android/services/telephony/ImsConference.java
@@ -598,7 +598,8 @@
new ArrayList<>(Arrays.asList(imsPhone.getCurrentSubscriberUris())));
}
- mConferenceHostAddress = (Uri[])hostAddresses.toArray();
+ mConferenceHostAddress = new Uri[hostAddresses.size()];
+ mConferenceHostAddress = hostAddresses.toArray(mConferenceHostAddress);
}
mConferenceHost.addConnectionListener(mConferenceHostListener);
diff --git a/src/com/android/services/telephony/PstnPhoneCapabilitiesNotifier.java b/src/com/android/services/telephony/PstnPhoneCapabilitiesNotifier.java
index f5b8719..eb6f7f6 100644
--- a/src/com/android/services/telephony/PstnPhoneCapabilitiesNotifier.java
+++ b/src/com/android/services/telephony/PstnPhoneCapabilitiesNotifier.java
@@ -91,25 +91,6 @@
try {
boolean isVideoCapable = (Boolean) ar.result;
Log.d(this, "handleVideoCapabilitesChanged. Video capability - " + isVideoCapable);
- PhoneAccountHandle accountHandle =
- PhoneUtils.makePstnPhoneAccountHandle(mPhone);
-
- TelecomManager telecomMgr = TelecomManager.from(mPhone.getContext());
- PhoneAccount oldPhoneAccount = telecomMgr.getPhoneAccount(accountHandle);
- PhoneAccount.Builder builder = new PhoneAccount.Builder(oldPhoneAccount);
-
- int oldCapabilities = oldPhoneAccount.getCapabilities();
- boolean wasVideoPresenceSupported =
- (oldCapabilities & PhoneAccount.CAPABILITY_VIDEO_CALLING_RELIES_ON_PRESENCE)
- != 0;
- int capabilites = newCapabilities(oldPhoneAccount.getCapabilities(),
- PhoneAccount.CAPABILITY_VIDEO_CALLING, isVideoCapable);
- if (wasVideoPresenceSupported && isVideoCapable) {
- capabilites |= PhoneAccount.CAPABILITY_VIDEO_CALLING_RELIES_ON_PRESENCE;
- }
-
- builder.setCapabilities(capabilites);
- telecomMgr.registerPhoneAccount(builder.build());
mListener.onVideoCapabilitiesChanged(isVideoCapable);
} catch (Exception e) {
Log.d(this, "handleVideoCapabilitesChanged. Exception=" + e);
diff --git a/src/com/android/services/telephony/TelecomAccountRegistry.java b/src/com/android/services/telephony/TelecomAccountRegistry.java
index 3c8a5bf..b069902 100644
--- a/src/com/android/services/telephony/TelecomAccountRegistry.java
+++ b/src/com/android/services/telephony/TelecomAccountRegistry.java
@@ -64,9 +64,11 @@
final class AccountEntry implements PstnPhoneCapabilitiesNotifier.Listener {
private final Phone mPhone;
- private final PhoneAccount mAccount;
+ private PhoneAccount mAccount;
private final PstnIncomingCallNotifier mIncomingCallNotifier;
private final PstnPhoneCapabilitiesNotifier mPhoneCapabilitiesNotifier;
+ private boolean mIsEmergency;
+ private boolean mIsDummy;
private boolean mIsVideoCapable;
private boolean mIsVideoPresenceSupported;
private boolean mIsVideoPauseSupported;
@@ -76,6 +78,8 @@
AccountEntry(Phone phone, boolean isEmergency, boolean isDummy) {
mPhone = phone;
+ mIsEmergency = isEmergency;
+ mIsDummy = isDummy;
mAccount = registerPstnPhoneAccount(isEmergency, isDummy);
Log.i(this, "Registered phoneAccount: %s with handle: %s",
mAccount, mAccount.getAccountHandle());
@@ -376,6 +380,16 @@
@Override
public void onVideoCapabilitiesChanged(boolean isVideoCapable) {
mIsVideoCapable = isVideoCapable;
+ synchronized (mAccountsLock) {
+ if (!mAccounts.contains(this)) {
+ // Account has already been torn down, don't try to register it again.
+ // This handles the case where teardown has already happened, and we got a video
+ // update that lost the race for the mAccountsLock. In such a scenario by the
+ // time we get here, the original phone account could have been torn down.
+ return;
+ }
+ mAccount = registerPstnPhoneAccount(mIsEmergency, mIsDummy);
+ }
}
/**
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
index 1e4feca..71f52f4 100644
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -92,6 +92,8 @@
private static final int MSG_CDMA_VOICE_PRIVACY_ON = 15;
private static final int MSG_CDMA_VOICE_PRIVACY_OFF = 16;
+ private static final String CONF_CALL_SUBSTRING = "conf-factory";
+
private final Handler mHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
@@ -726,6 +728,9 @@
if (!Objects.equals(address, getAddress()) ||
presentation != getAddressPresentation()) {
Log.v(this, "updateAddress, address changed");
+ if (address != null && address.toString().contains(CONF_CALL_SUBSTRING)) {
+ address = null;
+ }
setAddress(address, presentation);
}
@@ -961,6 +966,19 @@
} catch (CallStateException e) {
Log.e(this, e, "Call to Connection.hangup failed with exception");
}
+ } else {
+ if (getState() == STATE_DISCONNECTED) {
+ Log.i(this, "hangup called on an already disconnected call!");
+ close();
+ } else {
+ // There are a few cases where mOriginalConnection has not been set yet. For
+ // example, when the radio has to be turned on to make an emergency call,
+ // mOriginalConnection could not be set for many seconds.
+ setDisconnected(DisconnectCauseUtil.toTelecomDisconnectCause(
+ android.telephony.DisconnectCause.LOCAL,
+ "Local Disconnect before connection established."));
+ close();
+ }
}
}
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index 31d0475..a9f2e14 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -190,6 +190,12 @@
mEmergencyCallHelper.enableEmergencyCalling(new EmergencyCallStateListener.Callback() {
@Override
public void onComplete(EmergencyCallStateListener listener, boolean isRadioReady) {
+ // Make sure the Call has not already been canceled by the user.
+ if (emergencyConnection.getState() == Connection.STATE_DISCONNECTED) {
+ Log.i(this, "Emergency call disconnected before the outgoing call was " +
+ "placed. Skipping emergency call placement.");
+ return;
+ }
if (isRadioReady) {
// Get the right phone object since the radio has been turned on
// successfully.