Merge commit '1071dd7523cbacbf6c8c1306f958435465ca8084' from
oc-mr1-dev-plus-aosp-without-vendor into stage-aosp-master

Change-Id: I5604336aef76a427ad34fa4541497b0549bc0d66
Merged-In: Ib8021d308781d8c941c10d231d5bad8896bdb370
diff --git a/res/drawable-hdpi/ic_sim_sub1.png b/res/drawable-hdpi/ic_sim_sub1.png
new file mode 100644
index 0000000..dc24b06
--- /dev/null
+++ b/res/drawable-hdpi/ic_sim_sub1.png
Binary files differ
diff --git a/res/drawable-hdpi/ic_sim_sub2.png b/res/drawable-hdpi/ic_sim_sub2.png
new file mode 100644
index 0000000..297bc72
--- /dev/null
+++ b/res/drawable-hdpi/ic_sim_sub2.png
Binary files differ
diff --git a/res/drawable-hdpi/stat_sys_phone_call_forward.png b/res/drawable-hdpi/stat_sys_phone_call_forward.png
index 4b7c236..e8d3149 100644
--- a/res/drawable-hdpi/stat_sys_phone_call_forward.png
+++ b/res/drawable-hdpi/stat_sys_phone_call_forward.png
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_sim_sub1.png b/res/drawable-ldrtl-hdpi/ic_sim_sub1.png
new file mode 100644
index 0000000..9ec62ca
--- /dev/null
+++ b/res/drawable-ldrtl-hdpi/ic_sim_sub1.png
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/ic_sim_sub2.png b/res/drawable-ldrtl-hdpi/ic_sim_sub2.png
new file mode 100644
index 0000000..23559bf
--- /dev/null
+++ b/res/drawable-ldrtl-hdpi/ic_sim_sub2.png
Binary files differ
diff --git a/res/drawable-ldrtl-hdpi/stat_sys_phone_call_forward.png b/res/drawable-ldrtl-hdpi/stat_sys_phone_call_forward.png
index 132b0e5..ff5451c 100644
--- a/res/drawable-ldrtl-hdpi/stat_sys_phone_call_forward.png
+++ b/res/drawable-ldrtl-hdpi/stat_sys_phone_call_forward.png
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_sim_sub1.png b/res/drawable-ldrtl-mdpi/ic_sim_sub1.png
new file mode 100644
index 0000000..64ab4c6
--- /dev/null
+++ b/res/drawable-ldrtl-mdpi/ic_sim_sub1.png
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/ic_sim_sub2.png b/res/drawable-ldrtl-mdpi/ic_sim_sub2.png
new file mode 100644
index 0000000..c0aebdd
--- /dev/null
+++ b/res/drawable-ldrtl-mdpi/ic_sim_sub2.png
Binary files differ
diff --git a/res/drawable-ldrtl-mdpi/stat_sys_phone_call_forward.png b/res/drawable-ldrtl-mdpi/stat_sys_phone_call_forward.png
index d49745f..a42b5bb 100644
--- a/res/drawable-ldrtl-mdpi/stat_sys_phone_call_forward.png
+++ b/res/drawable-ldrtl-mdpi/stat_sys_phone_call_forward.png
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_sim_sub1.png b/res/drawable-ldrtl-xhdpi/ic_sim_sub1.png
new file mode 100644
index 0000000..2513c24
--- /dev/null
+++ b/res/drawable-ldrtl-xhdpi/ic_sim_sub1.png
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/ic_sim_sub2.png b/res/drawable-ldrtl-xhdpi/ic_sim_sub2.png
new file mode 100644
index 0000000..1d50b29
--- /dev/null
+++ b/res/drawable-ldrtl-xhdpi/ic_sim_sub2.png
Binary files differ
diff --git a/res/drawable-ldrtl-xhdpi/stat_sys_phone_call_forward.png b/res/drawable-ldrtl-xhdpi/stat_sys_phone_call_forward.png
index 4cce562..81791a8 100644
--- a/res/drawable-ldrtl-xhdpi/stat_sys_phone_call_forward.png
+++ b/res/drawable-ldrtl-xhdpi/stat_sys_phone_call_forward.png
Binary files differ
diff --git a/res/drawable-ldrtl-xxhdpi/ic_sim_sub1.png b/res/drawable-ldrtl-xxhdpi/ic_sim_sub1.png
new file mode 100644
index 0000000..4355c12
--- /dev/null
+++ b/res/drawable-ldrtl-xxhdpi/ic_sim_sub1.png
Binary files differ
diff --git a/res/drawable-ldrtl-xxhdpi/ic_sim_sub2.png b/res/drawable-ldrtl-xxhdpi/ic_sim_sub2.png
new file mode 100644
index 0000000..2bbc1ef
--- /dev/null
+++ b/res/drawable-ldrtl-xxhdpi/ic_sim_sub2.png
Binary files differ
diff --git a/res/drawable-ldrtl-xxhdpi/stat_sys_phone_call_forward.png b/res/drawable-ldrtl-xxhdpi/stat_sys_phone_call_forward.png
new file mode 100644
index 0000000..8c68bf8
--- /dev/null
+++ b/res/drawable-ldrtl-xxhdpi/stat_sys_phone_call_forward.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_sim_sub1.png b/res/drawable-mdpi/ic_sim_sub1.png
new file mode 100644
index 0000000..8d04637
--- /dev/null
+++ b/res/drawable-mdpi/ic_sim_sub1.png
Binary files differ
diff --git a/res/drawable-mdpi/ic_sim_sub2.png b/res/drawable-mdpi/ic_sim_sub2.png
new file mode 100644
index 0000000..f3201d6
--- /dev/null
+++ b/res/drawable-mdpi/ic_sim_sub2.png
Binary files differ
diff --git a/res/drawable-mdpi/stat_sys_phone_call_forward.png b/res/drawable-mdpi/stat_sys_phone_call_forward.png
index a21718c..5975172 100644
--- a/res/drawable-mdpi/stat_sys_phone_call_forward.png
+++ b/res/drawable-mdpi/stat_sys_phone_call_forward.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_sim_sub1.png b/res/drawable-xhdpi/ic_sim_sub1.png
new file mode 100644
index 0000000..2f512ee
--- /dev/null
+++ b/res/drawable-xhdpi/ic_sim_sub1.png
Binary files differ
diff --git a/res/drawable-xhdpi/ic_sim_sub2.png b/res/drawable-xhdpi/ic_sim_sub2.png
new file mode 100644
index 0000000..777a7a6
--- /dev/null
+++ b/res/drawable-xhdpi/ic_sim_sub2.png
Binary files differ
diff --git a/res/drawable-xhdpi/stat_sys_phone_call_forward.png b/res/drawable-xhdpi/stat_sys_phone_call_forward.png
index 578a42a..76ffc5c 100644
--- a/res/drawable-xhdpi/stat_sys_phone_call_forward.png
+++ b/res/drawable-xhdpi/stat_sys_phone_call_forward.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_sim_sub1.png b/res/drawable-xxhdpi/ic_sim_sub1.png
new file mode 100644
index 0000000..720c326
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_sim_sub1.png
Binary files differ
diff --git a/res/drawable-xxhdpi/ic_sim_sub2.png b/res/drawable-xxhdpi/ic_sim_sub2.png
new file mode 100644
index 0000000..992aff6
--- /dev/null
+++ b/res/drawable-xxhdpi/ic_sim_sub2.png
Binary files differ
diff --git a/res/drawable-xxhdpi/stat_sys_phone_call_forward.png b/res/drawable-xxhdpi/stat_sys_phone_call_forward.png
new file mode 100644
index 0000000..9bc3435
--- /dev/null
+++ b/res/drawable-xxhdpi/stat_sys_phone_call_forward.png
Binary files differ
diff --git a/res/drawable/stat_notify_voicemail_sub1.xml b/res/drawable/stat_notify_voicemail_sub1.xml
new file mode 100644
index 0000000..0884557
--- /dev/null
+++ b/res/drawable/stat_notify_voicemail_sub1.xml
@@ -0,0 +1,25 @@
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:drawable="@android:drawable/stat_notify_voicemail"
+        android:gravity="center">
+    </item>
+    <item
+        android:drawable="@drawable/ic_sim_sub1"
+        android:gravity="center|top">
+    </item>
+</layer-list>
diff --git a/res/drawable/stat_notify_voicemail_sub2.xml b/res/drawable/stat_notify_voicemail_sub2.xml
new file mode 100644
index 0000000..3b63649
--- /dev/null
+++ b/res/drawable/stat_notify_voicemail_sub2.xml
@@ -0,0 +1,25 @@
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:drawable="@android:drawable/stat_notify_voicemail"
+        android:gravity="center">
+    </item>
+    <item
+        android:drawable="@drawable/ic_sim_sub2"
+        android:gravity="center|top">
+    </item>
+</layer-list>
diff --git a/res/drawable/stat_sys_phone_call_forward_sub1.xml b/res/drawable/stat_sys_phone_call_forward_sub1.xml
new file mode 100644
index 0000000..93f4ff6
--- /dev/null
+++ b/res/drawable/stat_sys_phone_call_forward_sub1.xml
@@ -0,0 +1,26 @@
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:drawable="@drawable/stat_sys_phone_call_forward"
+        android:gravity="center">
+    </item>
+    <item
+        android:drawable="@drawable/ic_sim_sub1"
+        android:autoMirrored="true"
+        android:gravity="start|bottom">
+    </item>
+</layer-list>
diff --git a/res/drawable/stat_sys_phone_call_forward_sub2.xml b/res/drawable/stat_sys_phone_call_forward_sub2.xml
new file mode 100644
index 0000000..fa91222
--- /dev/null
+++ b/res/drawable/stat_sys_phone_call_forward_sub2.xml
@@ -0,0 +1,26 @@
+<!-- Copyright (C) 2017 The Android Open Source Project
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+
+<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
+    <item
+        android:drawable="@drawable/stat_sys_phone_call_forward"
+        android:gravity="center">
+    </item>
+    <item
+        android:drawable="@drawable/ic_sim_sub2"
+        android:autoMirrored="true"
+        android:gravity="start|bottom">
+    </item>
+</layer-list>
diff --git a/res/layout/edit_fdn_contact_screen.xml b/res/layout/edit_fdn_contact_screen.xml
index 24e0c6b..c7ba0d4 100644
--- a/res/layout/edit_fdn_contact_screen.xml
+++ b/res/layout/edit_fdn_contact_screen.xml
@@ -31,7 +31,8 @@
         android:singleLine="true"
         android:scrollHorizontally="true"
         android:autoText="false"
-        android:capitalize="words" />
+        android:capitalize="words"
+        android:textAlignment="viewStart" />
 
     <EditText android:id="@+id/fdn_number"
         android:hint="@string/number"
@@ -42,7 +43,8 @@
         android:singleLine="true"
         android:scrollHorizontally="true"
         android:autoText="false"
-        android:capitalize="none" />
+        android:capitalize="none"
+        android:textAlignment="viewStart" />
 
     <Button android:id="@+id/button"
         android:layout_width="wrap_content"
diff --git a/sip/res/values-bn/strings.xml b/sip/res/values-bn/strings.xml
index fc238ea..17c698d 100644
--- a/sip/res/values-bn/strings.xml
+++ b/sip/res/values-bn/strings.xml
@@ -20,7 +20,7 @@
     <string name="sip_accounts" msgid="85559497282185405">"SIP অ্যাকাউন্টগুলি"</string>
     <string name="sip_accounts_title" msgid="2082527045326874519">"অ্যাকাউন্টগুলি"</string>
     <string name="sip_receive_calls" msgid="426678617137462173">"আগত কলগুলি গ্রহণ করুন"</string>
-    <string name="sip_receive_calls_summary" msgid="946161517528227523">"আরো বেশি ব্যাটারি লাইফ ব্যবহার করে"</string>
+    <string name="sip_receive_calls_summary" msgid="946161517528227523">"আরও বেশি ব্যাটারি লাইফ ব্যবহার করে"</string>
     <string name="sip_call_options_title" msgid="8421210494703869806">"SIP কলিং ব্যবহার করুন"</string>
     <string name="sip_call_options_wifi_only_title" msgid="5112579243580893890">"SIP কলিং ব্যবহার করুন (শুধুমাত্র ওয়াই-ফাই)"</string>
     <string name="sip_call_options_entry_1" msgid="7217659161237099900">"যখন ডেটা নেটওয়ার্ক উপলব্ধ তখন সব কলের জন্য"</string>
@@ -31,7 +31,7 @@
     <string name="sip_account_list" msgid="5610858485304821480">"SIP অ্যাকাউন্টগুলি"</string>
     <string name="saving_account" msgid="5336529880235177448">"অ্যাকাউন্টটি সংরক্ষণ করা হচ্ছে ..."</string>
     <string name="removing_account" msgid="5537351356808985756">"অ্যাকাউন্টটি সরানো হচ্ছে…"</string>
-    <string name="sip_menu_save" msgid="7882219814563869225">"সংরক্ষণ করুন"</string>
+    <string name="sip_menu_save" msgid="7882219814563869225">"সেভ করুন"</string>
     <string name="sip_menu_discard" msgid="2350421645423888438">"খারিজ করুন"</string>
     <string name="alert_dialog_close" msgid="1326011828713435134">"প্রোফাইলটি বন্ধ করুন"</string>
     <string name="alert_dialog_ok" msgid="4752048404605388940">"ঠিক আছে"</string>
@@ -45,13 +45,13 @@
     <string name="registration_status_not_running" msgid="514205414303796800">"অ্যাকাউন্টের নিবন্ধন অসফল হয়েছে৷"</string>
     <string name="registration_status_done" msgid="3264961069247314253">"কলগুলি গ্রহণ করা হচ্ছে৷"</string>
     <string name="registration_status_failed_try_later" msgid="2199970021756384317">"অ্যাকাউন্টের নিবন্ধন অসফল হয়েছে: (<xliff:g id="REGISTRATION_ERROR_MESSAGE">%s</xliff:g>); পরে আবার চেষ্টা করা হবে"</string>
-    <string name="registration_status_invalid_credentials" msgid="8406872554323334182">"অ্যাকাউন্টের নিবন্ধন অসফল হয়েছে: ভুল ব্যবহারকারী নাম বা পাসওয়ার্ড৷"</string>
+    <string name="registration_status_invalid_credentials" msgid="8406872554323334182">"অ্যাকাউন্টের নিবন্ধন অসফল হয়েছে: ভুল ইউজারনেম বা পাসওয়ার্ড৷"</string>
     <string name="registration_status_server_unreachable" msgid="7710275557045148634">"অ্যাকাউন্টের নিবন্ধন অসফল হয়েছে: সার্ভারের নাম পরীক্ষা করুন৷"</string>
     <string name="third_party_account_summary" msgid="9041060473615403041">"এই অ্যাকাউন্টটি বর্তমানে <xliff:g id="ACCOUNT_OWNER">%s</xliff:g> অ্যাপ্লিকেশানের দ্বারা ব্যবহৃত হচ্ছে৷"</string>
     <string name="sip_edit_title" msgid="1967247832635750410">"SIP অ্যাকাউন্টের বিবরণ"</string>
     <string name="sip_edit_new_title" msgid="266414118302574305">"SIP অ্যাকাউন্টের বিবরণ"</string>
     <string name="domain_address_title" msgid="1968479941328225423">"সার্ভার"</string>
-    <string name="username_title" msgid="6770064611005663470">"ব্যবহারকারীর নাম"</string>
+    <string name="username_title" msgid="6770064611005663470">"ইউজারনেম"</string>
     <string name="password_title" msgid="5289013731515564295">"পাসওয়ার্ড"</string>
     <string name="display_name_title" msgid="579241787583079773">"প্রদর্শন নাম"</string>
     <string name="proxy_address_title" msgid="6890163365640631841">"বহির্গামী প্রক্সি ঠিকানা"</string>
@@ -59,8 +59,8 @@
     <string name="transport_title" msgid="889155457465372527">"পরিবহনের ধরন"</string>
     <string name="send_keepalive_title" msgid="599627072150501159">"সক্রিয়-রাখুন অনুরোধ পাঠান"</string>
     <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="auth_username_title" msgid="8262491689004708265">"প্রমাণীকরণের ইউজারনেম"</string>
+    <string name="auth_username_summary" msgid="941160241371436473">"প্রমাণীকরণের জন্য ব্যবহৃত ইউজারনেম"</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>
diff --git a/sip/res/values-in/strings.xml b/sip/res/values-in/strings.xml
index c2f40b7..1c59a30 100644
--- a/sip/res/values-in/strings.xml
+++ b/sip/res/values-in/strings.xml
@@ -76,5 +76,5 @@
     <string name="no_voip" msgid="3038021971231952704">"Panggilan SIP tidak didukung"</string>
     <string name="sip_system_decide" msgid="5577696249416700671">"Otomatis"</string>
     <string name="sip_always_send_keepalive" msgid="4773022409239823318">"Selalu kirim"</string>
-    <string name="sip_connection_service_label" msgid="6935325004265884453">"Panggilan SIP bawaan"</string>
+    <string name="sip_connection_service_label" msgid="6935325004265884453">"Panggilan SIP built-in"</string>
 </resources>
diff --git a/sip/res/values-sk/strings.xml b/sip/res/values-sk/strings.xml
index 872edcb..a410294 100644
--- a/sip/res/values-sk/strings.xml
+++ b/sip/res/values-sk/strings.xml
@@ -22,7 +22,7 @@
     <string name="sip_receive_calls" msgid="426678617137462173">"Prijímať prichádzajúce hovory"</string>
     <string name="sip_receive_calls_summary" msgid="946161517528227523">"Viac vybíja batériu"</string>
     <string name="sip_call_options_title" msgid="8421210494703869806">"Používanie volania SIP"</string>
-    <string name="sip_call_options_wifi_only_title" msgid="5112579243580893890">"Používanie volania SIP (iba Wi-Fi)"</string>
+    <string name="sip_call_options_wifi_only_title" msgid="5112579243580893890">"Používanie volania SIP (iba Wi‑Fi)"</string>
     <string name="sip_call_options_entry_1" msgid="7217659161237099900">"Pre všetky hovory, pokiaľ je k dispozícii dátová sieť"</string>
     <string name="sip_call_options_entry_2" msgid="1815335903940609729">"Iba pre hovory SIP"</string>
     <string name="sip_call_options_wifi_only_entry_1" msgid="1358513095551847314">"Pre všetky hovory"</string>
@@ -41,7 +41,7 @@
     <string name="registration_status_still_trying" msgid="7648151061205513458">"Prebiehajú ďalšie pokusy..."</string>
     <string name="registration_status_not_receiving" msgid="7620333886153361090">"Hovory sa neprijímajú."</string>
     <string name="registration_status_no_data" msgid="2541999976218192413">"Registrácia účtu bola zastavená, pretože pripojenie k internetu nie je k dispozícii."</string>
-    <string name="registration_status_no_wifi_data" msgid="9154717387473039546">"Registrácia účtu bola zastavená, pretože pripojenie Wi-Fi nie je k dispozícii."</string>
+    <string name="registration_status_no_wifi_data" msgid="9154717387473039546">"Registrácia účtu bola zastavená, pretože pripojenie Wi‑Fi nie je k dispozícii."</string>
     <string name="registration_status_not_running" msgid="514205414303796800">"Registrácia účtu nebola úspešná."</string>
     <string name="registration_status_done" msgid="3264961069247314253">"Príjem hovorov."</string>
     <string name="registration_status_failed_try_later" msgid="2199970021756384317">"Registrácia účtu nebola úspešná: (<xliff:g id="REGISTRATION_ERROR_MESSAGE">%s</xliff:g>); skúsime to neskôr"</string>
@@ -72,7 +72,7 @@
     <string name="empty_alert" msgid="6659484914371384024">"Pole <xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> je povinné a nemôže zostať prázdne."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Číslo portu by malo byť od 1 000 do 65 534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Ak chcete uskutočniť hovor SIP, najprv skontrolujte svoje internetové pripojenie."</string>
-    <string name="no_wifi_available" msgid="1955023904229673488">"Uskutočnenie hovorov SIP vyžaduje pripojenie k sieti Wi-Fi (použite nastavenia bezdrôtovej siete)."</string>
+    <string name="no_wifi_available" msgid="1955023904229673488">"Uskutočnenie hovorov SIP vyžaduje pripojenie k sieti Wi‑Fi (použite nastavenia bezdrôtovej siete)."</string>
     <string name="no_voip" msgid="3038021971231952704">"Volanie SIP nie je podporované"</string>
     <string name="sip_system_decide" msgid="5577696249416700671">"Automaticky"</string>
     <string name="sip_always_send_keepalive" msgid="4773022409239823318">"Vždy odoslať"</string>
diff --git a/src/com/android/phone/CallFeaturesSetting.java b/src/com/android/phone/CallFeaturesSetting.java
index 1d264fb..e5527bc 100644
--- a/src/com/android/phone/CallFeaturesSetting.java
+++ b/src/com/android/phone/CallFeaturesSetting.java
@@ -42,6 +42,7 @@
 import android.telecom.PhoneAccountHandle;
 import android.telecom.TelecomManager;
 import android.telephony.CarrierConfigManager;
+import android.telephony.ims.feature.ImsFeature;
 import android.telephony.PhoneStateListener;
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
@@ -50,6 +51,7 @@
 import android.widget.Toast;
 
 import com.android.ims.ImsConfig;
+import com.android.ims.ImsException;
 import com.android.ims.ImsManager;
 import com.android.internal.telephony.CallForwardInfo;
 import com.android.internal.telephony.Phone;
@@ -105,6 +107,7 @@
     private static final String ENABLE_VIDEO_CALLING_KEY = "button_enable_video_calling";
 
     private Phone mPhone;
+    private ImsManager mImsMgr;
     private SubscriptionInfoHelper mSubscriptionInfoHelper;
     private TelecomManager mTelecomManager;
 
@@ -188,6 +191,17 @@
         mTelecomManager = TelecomManager.from(this);
     }
 
+    private void updateImsManager(Phone phone) {
+        log("updateImsManager :: phone.getContext()=" + phone.getContext()
+                + " phone.getPhoneId()=" + phone.getPhoneId());
+        mImsMgr = ImsManager.getInstance(phone.getContext(), phone.getPhoneId());
+        if (mImsMgr == null) {
+            log("updateImsManager :: Could not get ImsManager instance!");
+        } else {
+            log("updateImsManager :: mImsMgr=" + mImsMgr);
+        }
+    }
+
     private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() {
         @Override
         public void onCallStateChanged(int state, String incomingNumber) {
@@ -210,6 +224,7 @@
     protected void onResume() {
         super.onResume();
 
+        updateImsManager(mPhone);
         PreferenceScreen preferenceScreen = getPreferenceScreen();
         if (preferenceScreen != null) {
             preferenceScreen.removeAll();
@@ -347,6 +362,19 @@
             }
             wifiCallingSettings.setSummary(resId);
         }
+
+        try {
+            if (mImsMgr.getImsServiceStatus() != ImsFeature.STATE_READY) {
+                log("Feature state not ready so remove vt and wfc settings for "
+                        + " phone =" + mPhone.getPhoneId());
+                prefSet.removePreference(wifiCallingSettings);
+                prefSet.removePreference(mEnableVideoCalling);
+            }
+        } catch (ImsException ex) {
+            log("Exception when trying to get ImsServiceStatus: " + ex);
+            prefSet.removePreference(wifiCallingSettings);
+            prefSet.removePreference(mEnableVideoCalling);
+        }
     }
 
     /**
diff --git a/src/com/android/phone/CallForwardEditPreference.java b/src/com/android/phone/CallForwardEditPreference.java
index 32e91d0..8a82e05 100644
--- a/src/com/android/phone/CallForwardEditPreference.java
+++ b/src/com/android/phone/CallForwardEditPreference.java
@@ -162,7 +162,18 @@
         }
 
         setToggled(callForwardInfo.status == 1);
-        setPhoneNumber(callForwardInfo.number);
+        boolean displayVoicemailNumber = false;
+        if (TextUtils.isEmpty(callForwardInfo.number)) {
+            PersistableBundle carrierConfig =
+                    PhoneGlobals.getInstance().getCarrierConfigForSubId(mPhone.getSubId());
+            if (carrierConfig != null) {
+                displayVoicemailNumber = carrierConfig.getBoolean(CarrierConfigManager
+                        .KEY_DISPLAY_VOICEMAIL_NUMBER_AS_DEFAULT_CALL_FORWARDING_NUMBER_BOOL);
+                Log.d(LOG_TAG, "display voicemail number as default");
+            }
+        }
+        String voicemailNumber = mPhone.getVoiceMailNumber();
+        setPhoneNumber(displayVoicemailNumber ? voicemailNumber : callForwardInfo.number);
     }
 
     private void updateSummaryText() {
diff --git a/src/com/android/phone/CallNotifier.java b/src/com/android/phone/CallNotifier.java
index 3f44130..d084e92 100644
--- a/src/com/android/phone/CallNotifier.java
+++ b/src/com/android/phone/CallNotifier.java
@@ -44,10 +44,15 @@
 import android.util.ArrayMap;
 import android.util.Log;
 
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Comparator;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 
+import com.android.internal.telephony.SubscriptionController;
+
 /**
  * Phone app module that listens for phone state changes and various other
  * events from the telephony layer, and triggers any resulting UI behavior
@@ -68,7 +73,8 @@
 
     private Map<Integer, CallNotifierPhoneStateListener> mPhoneStateListeners =
             new ArrayMap<Integer, CallNotifierPhoneStateListener>();
-
+    private Map<Integer, Boolean> mCFIStatus = new ArrayMap<Integer, Boolean>();
+    private Map<Integer, Boolean> mMWIStatus = new ArrayMap<Integer, Boolean>();
     private PhoneGlobals mApplication;
     private CallManager mCM;
     private BluetoothHeadset mBluetoothHeadset;
@@ -140,7 +146,7 @@
                 new OnSubscriptionsChangedListener() {
                     @Override
                     public void onSubscriptionsChanged() {
-                        updatePhoneStateListeners();
+                        updatePhoneStateListeners(true);
                     }
                 });
     }
@@ -571,14 +577,26 @@
                 SHOW_MESSAGE_NOTIFICATION_TIME);
     }
 
-    public void updatePhoneStateListeners() {
+    public void updatePhoneStateListeners(boolean isRefresh) {
         List<SubscriptionInfo> subInfos = mSubscriptionManager.getActiveSubscriptionInfoList();
 
-        // Unregister phone listeners for inactive subscriptions.
-        Iterator<Integer> itr = mPhoneStateListeners.keySet().iterator();
-        while (itr.hasNext()) {
-            int subId = itr.next();
+        // Sort sub id list based on slot id, so that CFI/MWI notifications will be updated for
+        // slot 0 first then slot 1. This is needed to ensure that when CFI or MWI is enabled for
+        // both slots, user always sees icon related to slot 0 on left side followed by that of
+        // slot 1.
+        List<Integer> subIdList = new ArrayList<Integer>(mPhoneStateListeners.keySet());
+        Collections.sort(subIdList, new Comparator<Integer>() {
+            public int compare(Integer sub1, Integer sub2) {
+                int slotId1 = SubscriptionController.getInstance().getSlotIndex(sub1);
+                int slotId2 = SubscriptionController.getInstance().getSlotIndex(sub2);
+                return slotId1 > slotId2 ? 0 : -1;
+            }
+        });
+
+        for (int subIdCounter = (subIdList.size() - 1); subIdCounter >= 0; subIdCounter--) {
+            int subId = subIdList.get(subIdCounter);
             if (subInfos == null || !containsSubId(subInfos, subId)) {
+                Log.d(LOG_TAG, "updatePhoneStateListeners: Hide the outstanding notifications.");
                 // Hide the outstanding notifications.
                 mApplication.notificationMgr.updateMwi(subId, false);
                 mApplication.notificationMgr.updateCfi(subId, false);
@@ -586,7 +604,16 @@
                 // Listening to LISTEN_NONE removes the listener.
                 mTelephonyManager.listen(
                         mPhoneStateListeners.get(subId), PhoneStateListener.LISTEN_NONE);
-                itr.remove();
+                mPhoneStateListeners.remove(subId);
+            } else {
+                Log.d(LOG_TAG, "updatePhoneStateListeners: update CF notifications.");
+
+                if (mCFIStatus.containsKey(subId)) {
+                    mApplication.notificationMgr.updateCfi(subId, mCFIStatus.get(subId));
+                }
+                if (mMWIStatus.containsKey(subId)) {
+                    mApplication.notificationMgr.updateMwi(subId, mMWIStatus.get(subId), isRefresh);
+                }
             }
         }
 
@@ -757,14 +784,16 @@
         @Override
         public void onMessageWaitingIndicatorChanged(boolean visible) {
             if (VDBG) log("onMessageWaitingIndicatorChanged(): " + this.mSubId + " " + visible);
-            mApplication.notificationMgr.updateMwi(this.mSubId, visible);
+            mMWIStatus.put(this.mSubId, visible);
+            updatePhoneStateListeners(false);
         }
 
         @Override
         public void onCallForwardingIndicatorChanged(boolean visible) {
             Log.i(LOG_TAG, "onCallForwardingIndicatorChanged(): subId=" + this.mSubId
                     + ", visible=" + (visible ? "Y" : "N"));
-            mApplication.notificationMgr.updateCfi(this.mSubId, visible);
+            mCFIStatus.put(this.mSubId, visible);
+            updatePhoneStateListeners(false);
         }
     };
 
diff --git a/src/com/android/phone/EditPhoneNumberPreference.java b/src/com/android/phone/EditPhoneNumberPreference.java
index 98d9ce9..74b8a45 100644
--- a/src/com/android/phone/EditPhoneNumberPreference.java
+++ b/src/com/android/phone/EditPhoneNumberPreference.java
@@ -123,8 +123,8 @@
         setDialogLayoutResource(R.layout.pref_dialog_editphonenumber);
 
         //create intent to bring up contact list
-        mContactListIntent = new Intent(Intent.ACTION_GET_CONTENT);
-        mContactListIntent.setType(Phone.CONTENT_ITEM_TYPE);
+        mContactListIntent = new Intent(Intent.ACTION_PICK);
+        mContactListIntent.setType(Phone.CONTENT_TYPE);
 
         //get the edit phone number default settings
         TypedArray a = context.obtainStyledAttributes(attrs,
diff --git a/src/com/android/phone/EmergencyCallbackModeExitDialog.java b/src/com/android/phone/EmergencyCallbackModeExitDialog.java
index f5509b9..765c52d 100644
--- a/src/com/android/phone/EmergencyCallbackModeExitDialog.java
+++ b/src/com/android/phone/EmergencyCallbackModeExitDialog.java
@@ -24,7 +24,7 @@
 import android.content.ComponentName;
 import android.content.Context;
 import android.content.DialogInterface;
-import android.content.DialogInterface.OnDismissListener;
+import android.content.DialogInterface.OnCancelListener;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.ServiceConnection;
@@ -48,7 +48,7 @@
  *
  * @see EmergencyCallbackModeService
  */
-public class EmergencyCallbackModeExitDialog extends Activity implements OnDismissListener {
+public class EmergencyCallbackModeExitDialog extends Activity implements OnCancelListener {
 
     private static final String TAG = "EmergencyCallbackMode";
 
@@ -246,7 +246,7 @@
                                     finish();
                                 }
                             }).create();
-            mAlertDialog.setOnDismissListener(this);
+            mAlertDialog.setOnCancelListener(this);
             return mAlertDialog;
 
         case EXIT_ECM_IN_EMERGENCY_CALL_DIALOG:
@@ -263,7 +263,7 @@
                                     finish();
                                 }
                             }).create();
-            mAlertDialog.setOnDismissListener(this);
+            mAlertDialog.setOnCancelListener(this);
             return mAlertDialog;
 
         case EXIT_ECM_PROGRESS_DIALOG:
@@ -299,10 +299,10 @@
     }
 
     /**
-     * Closes activity when dialog is dismissed
+     * Closes activity when dialog is canceled
      */
     @Override
-    public void onDismiss(DialogInterface dialog) {
+    public void onCancel(DialogInterface dialog) {
         EmergencyCallbackModeExitDialog.this.setResult(RESULT_OK, (new Intent())
                 .putExtra(EXTRA_EXIT_ECM_RESULT, false));
         finish();
diff --git a/src/com/android/phone/GsmUmtsOptions.java b/src/com/android/phone/GsmUmtsOptions.java
index f08aa06..a68b1cb 100644
--- a/src/com/android/phone/GsmUmtsOptions.java
+++ b/src/com/android/phone/GsmUmtsOptions.java
@@ -21,6 +21,7 @@
 import android.preference.Preference;
 import android.preference.PreferenceFragment;
 import android.preference.PreferenceScreen;
+import android.preference.TwoStatePreference;
 import android.provider.Settings;
 import android.telephony.CarrierConfigManager;
 
diff --git a/src/com/android/phone/MobileNetworkSettings.java b/src/com/android/phone/MobileNetworkSettings.java
index bc84525..0cd3c05 100644
--- a/src/com/android/phone/MobileNetworkSettings.java
+++ b/src/com/android/phone/MobileNetworkSettings.java
@@ -49,6 +49,7 @@
 import android.telecom.PhoneAccountHandle;
 import android.telecom.TelecomManager;
 import android.telephony.CarrierConfigManager;
+import android.telephony.ims.feature.ImsFeature;
 import android.telephony.PhoneStateListener;
 import android.telephony.ServiceState;
 import android.telephony.SubscriptionInfo;
@@ -64,6 +65,7 @@
 import android.widget.TabHost;
 
 import com.android.ims.ImsConfig;
+import com.android.ims.ImsException;
 import com.android.ims.ImsManager;
 import com.android.internal.logging.MetricsLogger;
 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
@@ -230,6 +232,7 @@
 
         private UserManager mUm;
         private Phone mPhone;
+        private ImsManager mImsMgr;
         private MyHandler mHandler;
         private boolean mOkClicked;
         private boolean mExpandAdvancedFields;
@@ -566,6 +569,13 @@
                 mPhone = PhoneGlobals.getPhone();
             }
             Log.i(LOG_TAG, "updatePhone:- slotId=" + slotId + " sir=" + sir);
+
+            mImsMgr = ImsManager.getInstance(mPhone.getContext(), mPhone.getPhoneId());
+            if (mImsMgr == null) {
+                log("updatePhone :: Could not get ImsManager instance!");
+            } else if (DBG) {
+                log("updatePhone :: mImsMgr=" + mImsMgr);
+            }
         }
 
         private TabHost.TabContentFactory mEmptyTabContent = new TabHost.TabContentFactory() {
@@ -983,8 +993,16 @@
                 android.util.Log.d(LOG_TAG, "keep ltePref");
             }
 
-            if (hideEnhanced4gLteSettings(getActivity(), carrierConfig)) {
-                Preference pref = prefSet.findPreference(BUTTON_4G_LTE_KEY);
+            Preference pref = prefSet.findPreference(BUTTON_4G_LTE_KEY);
+            try {
+                if ((mImsMgr.getImsServiceStatus() != ImsFeature.STATE_READY)
+                        || hideEnhanced4gLteSettings(getActivity(), carrierConfig)) {
+                    if (pref != null) {
+                        prefSet.removePreference(pref);
+                    }
+                }
+            } catch (ImsException ex) {
+                log("Exception when trying to get ImsServiceStatus: " + ex);
                 if (pref != null) {
                     prefSet.removePreference(pref);
                 }
diff --git a/src/com/android/phone/NotificationMgr.java b/src/com/android/phone/NotificationMgr.java
index 3d20545..dd8bc23 100644
--- a/src/com/android/phone/NotificationMgr.java
+++ b/src/com/android/phone/NotificationMgr.java
@@ -124,27 +124,6 @@
         mSubscriptionManager = SubscriptionManager.from(mContext);
         mTelecomManager = TelecomManager.from(mContext);
         mTelephonyManager = (TelephonyManager) app.getSystemService(Context.TELEPHONY_SERVICE);
-
-        mSubscriptionManager.addOnSubscriptionsChangedListener(
-                new OnSubscriptionsChangedListener() {
-                    @Override
-                    public void onSubscriptionsChanged() {
-                        updateActivePhonesMwi();
-                    }
-                });
-    }
-
-    public void updateActivePhonesMwi() {
-        List<SubscriptionInfo> subInfos = mSubscriptionManager.getActiveSubscriptionInfoList();
-
-        if (subInfos == null) {
-            return;
-        }
-
-        for (int i = 0; i < subInfos.size(); i++) {
-            int subId = subInfos.get(i).getSubscriptionId();
-            refreshMwi(subId);
-        }
     }
 
     /**
@@ -196,7 +175,7 @@
         if (mMwiVisible.containsKey(subId)) {
             boolean mwiVisible = mMwiVisible.get(subId);
             if (mwiVisible) {
-                updateMwi(subId, mwiVisible, true /* isRefresh */);
+                mApp.notifier.updatePhoneStateListeners(true);
             }
         }
     }
@@ -264,6 +243,10 @@
             }
 
             int resId = android.R.drawable.stat_notify_voicemail;
+            if (mTelephonyManager.getPhoneCount() > 1) {
+                resId = (phone.getPhoneId() == 0) ? R.drawable.stat_notify_voicemail_sub1
+                        : R.drawable.stat_notify_voicemail_sub2;
+            }
 
             // This Notification can get a lot fancier once we have more
             // information about the current voicemail messages.
@@ -484,14 +467,18 @@
             }
 
             String notificationTitle;
+            int resId = R.drawable.stat_sys_phone_call_forward;
             if (mTelephonyManager.getPhoneCount() > 1) {
+                int slotId = SubscriptionManager.getSlotIndex(subId);
+                resId = (slotId == 0) ? R.drawable.stat_sys_phone_call_forward_sub1
+                        : R.drawable.stat_sys_phone_call_forward_sub2;
                 notificationTitle = subInfo.getDisplayName().toString();
             } else {
                 notificationTitle = mContext.getString(R.string.labelCF);
             }
 
             Notification.Builder builder = new Notification.Builder(mContext)
-                    .setSmallIcon(R.drawable.stat_sys_phone_call_forward)
+                    .setSmallIcon(resId)
                     .setColor(subInfo.getIconTint())
                     .setContentTitle(notificationTitle)
                     .setContentText(mContext.getString(R.string.sum_cfu_enabled_indicator))
@@ -512,10 +499,17 @@
                     builder.build(),
                     UserHandle.ALL);
         } else {
-            mNotificationManager.cancelAsUser(
-                    Integer.toString(subId) /* tag */,
-                    CALL_FORWARD_NOTIFICATION,
-                    UserHandle.ALL);
+            List<UserInfo> users = mUserManager.getUsers(true);
+            for (UserInfo user : users) {
+                if (user.isManagedProfile()) {
+                    continue;
+                }
+                UserHandle userHandle = user.getUserHandle();
+                mNotificationManager.cancelAsUser(
+                        Integer.toString(subId) /* tag */,
+                        CALL_FORWARD_NOTIFICATION,
+                        userHandle);
+            }
         }
     }
 
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index e1044c6..ef1065f 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -155,8 +155,6 @@
     private static final int EVENT_SET_PREFERRED_NETWORK_TYPE_DONE = 24;
     private static final int CMD_SEND_ENVELOPE = 25;
     private static final int EVENT_SEND_ENVELOPE_DONE = 26;
-    private static final int CMD_INVOKE_OEM_RIL_REQUEST_RAW = 27;
-    private static final int EVENT_INVOKE_OEM_RIL_REQUEST_RAW_DONE = 28;
     private static final int CMD_TRANSMIT_APDU_BASIC_CHANNEL = 29;
     private static final int EVENT_TRANSMIT_APDU_BASIC_CHANNEL_DONE = 30;
     private static final int CMD_EXCHANGE_SIM_IO = 31;
@@ -722,21 +720,6 @@
                     handleNullReturnEvent(msg, "setPreferredNetworkType");
                     break;
 
-                case CMD_INVOKE_OEM_RIL_REQUEST_RAW:
-                    request = (MainThreadRequest)msg.obj;
-                    onCompleted = obtainMessage(EVENT_INVOKE_OEM_RIL_REQUEST_RAW_DONE, request);
-                    mPhone.invokeOemRilRequestRaw((byte[])request.argument, onCompleted);
-                    break;
-
-                case EVENT_INVOKE_OEM_RIL_REQUEST_RAW_DONE:
-                    ar = (AsyncResult)msg.obj;
-                    request = (MainThreadRequest)ar.userObj;
-                    request.result = ar;
-                    synchronized (request) {
-                        request.notifyAll();
-                    }
-                    break;
-
                 case CMD_SET_VOICEMAIL_NUMBER:
                     request = (MainThreadRequest) msg.obj;
                     onCompleted = obtainMessage(EVENT_SET_VOICEMAIL_NUMBER_DONE, request);
@@ -3068,39 +3051,6 @@
     }
 
     @Override
-    @Deprecated
-    public int invokeOemRilRequestRaw(byte[] oemReq, byte[] oemResp) {
-        enforceModifyPermission();
-
-        int returnValue = 0;
-        try {
-            AsyncResult result = (AsyncResult)sendRequest(CMD_INVOKE_OEM_RIL_REQUEST_RAW, oemReq);
-            if(result.exception == null) {
-                if (result.result != null) {
-                    byte[] responseData = (byte[])(result.result);
-                    if(responseData.length > oemResp.length) {
-                        Log.w(LOG_TAG, "Buffer to copy response too small: Response length is " +
-                                responseData.length +  "bytes. Buffer Size is " +
-                                oemResp.length + "bytes.");
-                    }
-                    System.arraycopy(responseData, 0, oemResp, 0, responseData.length);
-                    returnValue = responseData.length;
-                }
-            } else {
-                CommandException ex = (CommandException) result.exception;
-                returnValue = ex.getCommandError().ordinal();
-                if(returnValue > 0) returnValue *= -1;
-            }
-        } catch (RuntimeException e) {
-            Log.w(LOG_TAG, "sendOemRilRequestRaw: Runtime Exception");
-            returnValue = (CommandException.Error.GENERIC_FAILURE.ordinal());
-            if(returnValue > 0) returnValue *= -1;
-        }
-
-        return returnValue;
-    }
-
-    @Override
     public void setRadioCapability(RadioAccessFamily[] rafs) {
         try {
             ProxyController.getInstance().setRadioCapability(rafs);
diff --git a/src/com/android/phone/PhoneSearchIndexablesProvider.java b/src/com/android/phone/PhoneSearchIndexablesProvider.java
index 1cee227..ed3c7df 100644
--- a/src/com/android/phone/PhoneSearchIndexablesProvider.java
+++ b/src/com/android/phone/PhoneSearchIndexablesProvider.java
@@ -102,7 +102,7 @@
         if (!mUserManager.isAdminUser()) {
             final String[] values = new String[]{"preferred_network_mode_key", "button_roaming_key",
                     "cdma_lte_data_service_key", "enabled_networks_key", "enhanced_4g_lte",
-                    "button_apn_key", "button_carrier_sel_key", "carrier_settings_key",
+                    "button_apn_key", "button_network_select_key", "carrier_settings_key",
                     "cdma_system_select_key", "esim_list_profile"};
             for (String nik : values) {
                 cursor.addRow(createNonIndexableRow(nik));
diff --git a/src/com/android/phone/settings/VoicemailSettingsActivity.java b/src/com/android/phone/settings/VoicemailSettingsActivity.java
index 04e8bf5..4d55421 100644
--- a/src/com/android/phone/settings/VoicemailSettingsActivity.java
+++ b/src/com/android/phone/settings/VoicemailSettingsActivity.java
@@ -24,6 +24,7 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
+import android.os.PersistableBundle;
 import android.os.UserManager;
 import android.preference.Preference;
 import android.preference.PreferenceActivity;
@@ -31,6 +32,7 @@
 import android.preference.SwitchPreference;
 import android.provider.ContactsContract.CommonDataKinds;
 import android.provider.Settings;
+import android.telephony.CarrierConfigManager;
 import android.telephony.TelephonyManager;
 import android.text.BidiFormatter;
 import android.text.TextDirectionHeuristics;
@@ -250,6 +252,10 @@
             mSubMenuVoicemailSettings.setParentActivity(this, VOICEMAIL_PREF_ID, this);
             mSubMenuVoicemailSettings.setDialogOnClosedListener(this);
             mSubMenuVoicemailSettings.setDialogTitle(R.string.voicemail_settings_number_label);
+            if (!getBooleanCarrierConfig(
+                    CarrierConfigManager.KEY_EDITABLE_VOICEMAIL_NUMBER_SETTING_BOOL)) {
+                mSubMenuVoicemailSettings.setEnabled(false);
+            }
         }
 
         mVoicemailProviders = (VoicemailProviderListPreference) findPreference(
@@ -545,6 +551,23 @@
         }
     }
 
+    /**
+     * Get the boolean config from carrier config manager.
+     *
+     * @param key config key defined in CarrierConfigManager
+     * @return boolean value of corresponding key.
+     */
+    private boolean getBooleanCarrierConfig(String key) {
+        PersistableBundle b = PhoneGlobals.getInstance()
+                .getCarrierConfigForSubId(mPhone.getSubId());
+        if (b != null) {
+            return b.getBoolean(key);
+        } else {
+            // Return static default defined in CarrierConfigManager.
+            return CarrierConfigManager.getDefaultConfig().getBoolean(key);
+        }
+    }
+
 
     //*********************************************************************************************
     // Activity Dialog Methods
diff --git a/src/com/android/services/telephony/DisconnectCauseUtil.java b/src/com/android/services/telephony/DisconnectCauseUtil.java
index a420100..48a283a 100644
--- a/src/com/android/services/telephony/DisconnectCauseUtil.java
+++ b/src/com/android/services/telephony/DisconnectCauseUtil.java
@@ -67,6 +67,7 @@
                 return DisconnectCause.LOCAL;
 
             case android.telephony.DisconnectCause.NORMAL:
+            case android.telephony.DisconnectCause.NORMAL_UNSPECIFIED:
                 return DisconnectCause.REMOTE;
 
             case android.telephony.DisconnectCause.OUTGOING_CANCELED: