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">"&lt;Не заданы&gt;"</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">"&lt;Nije podešeno&gt;"</string>
+    <string name="default_preference_summary_username" msgid="8404717434312826082">"&lt;Nije podešeno&gt;"</string>
+    <string name="default_preference_summary_password" msgid="4464464672997027904">"&lt;Nije podešena&gt;"</string>
+    <string name="default_preference_summary_domain_address" msgid="4871971710197441673">"&lt;Nije podešena&gt;"</string>
     <string name="display_name_summary" msgid="7155076491675565407">"&lt;Isto kao korisničko ime&gt;"</string>
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Opcionalno&gt;"</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">"&lt;Не зададзены&gt;"</string>
+    <string name="default_preference_summary_username" msgid="8404717434312826082">"&lt;Не зададзены&gt;"</string>
+    <string name="default_preference_summary_password" msgid="4464464672997027904">"&lt;Не зададзены&gt;"</string>
+    <string name="default_preference_summary_domain_address" msgid="4871971710197441673">"&lt;Не зададзены&gt;"</string>
     <string name="display_name_summary" msgid="7155076491675565407">"&lt;Такі ж, як імя карыстальніка&gt;"</string>
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Неабавязкова&gt;"</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">"&lt;Nije postavljeno&gt;"</string>
+    <string name="default_preference_summary_username" msgid="8404717434312826082">"&lt;Nije postavljeno&gt;"</string>
+    <string name="default_preference_summary_password" msgid="4464464672997027904">"&lt;Nije postavljeno&gt;"</string>
+    <string name="default_preference_summary_domain_address" msgid="4871971710197441673">"&lt;Nije postavljeno&gt;"</string>
     <string name="display_name_summary" msgid="7155076491675565407">"&lt;Isto kao korisničko ime&gt;"</string>
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Opcionalno&gt;"</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.