Merge "Fix voicemail SIM card name unknown after unlock PIN." am: aa50786189
am: 2ac03a08db

* commit '2ac03a08dbfe8965e7574b74fc90769f638d0c22':
  Fix voicemail SIM card name unknown after unlock PIN.

Change-Id: Iaeea3621323b067b71adbcf31827e3a218c3c23f
diff --git a/Android.mk b/Android.mk
index 586709f..f3fff79 100644
--- a/Android.mk
+++ b/Android.mk
@@ -11,8 +11,7 @@
 
 LOCAL_JAVA_LIBRARIES := telephony-common voip-common ims-common
 LOCAL_STATIC_JAVA_LIBRARIES := \
-        com.android.services.telephony.common \
-        guava \
+        guava
 
 LOCAL_SRC_FILES := $(call all-java-files-under, $(src_dirs))
 LOCAL_SRC_FILES += \
@@ -33,6 +32,8 @@
 
 LOCAL_PROGUARD_FLAG_FILES := proguard.flags sip/proguard.flags
 
+include frameworks/base/packages/SettingsLib/common.mk
+
 include $(BUILD_PACKAGE)
 
 # Build the test package
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 2d449ad..7ca673c 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -22,6 +22,10 @@
         android:sharedUserLabel="@string/phoneAppLabel"
 >
 
+    <uses-sdk
+        android:minSdkVersion="23"
+        android:targetSdkVersion="23" />
+
     <original-package android:name="com.android.phone" />
 
     <protected-broadcast android:name="android.intent.action.SERVICE_STATE" />
@@ -51,7 +55,8 @@
     <protected-broadcast android:name= "android.intent.action.stk.session_end" />
     <protected-broadcast android:name= "android.intent.action.stk.icc_status_change" />
     <protected-broadcast android:name= "android.intent.action.stk.alpha_notify" />
-
+    <protected-broadcast android:name= "android.intent.action.REDIRECTION_DETECTED" />
+    <protected-broadcast android:name= "android.intent.action.REQUEST_NETWORK_FAILED" />
 
     <uses-permission android:name="android.permission.BROADCAST_STICKY" />
     <uses-permission android:name="android.permission.CALL_PHONE" />
@@ -126,7 +131,10 @@
     <uses-permission android:name="android.permission.LOCAL_MAC_ADDRESS" />
     <uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE" />
     <uses-permission android:name="android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST" />
-
+    <!-- Needed to block messages. -->
+    <uses-permission android:name="android.permission.READ_BLOCKED_NUMBERS" />
+    <!-- Needed for emergency contact notification. -->
+    <uses-permission android:name="android.permission.WRITE_BLOCKED_NUMBERS" />
 
     <!-- This tells the activity manager to not delay any of our activity
          start requests, even if they happen immediately after the user
@@ -134,18 +142,21 @@
     <uses-permission android:name="android.permission.STOP_APP_SWITCHES" />
 
     <application android:name="PhoneApp"
-                 android:persistent="true"
-                 android:label="@string/phoneAppLabel"
-                 android:icon="@mipmap/ic_launcher_phone"
-                 android:allowBackup="false"
-                 android:supportsRtl="true"
-                 android:usesCleartextTraffic="true">
-            <provider android:name="IccProvider"
-                      android:authorities="icc"
-                      android:multiprocess="true"
-                      android:exported="true"
-                      android:readPermission="android.permission.READ_CONTACTS"
-                      android:writePermission="android.permission.WRITE_CONTACTS" />
+            android:persistent="true"
+            android:label="@string/phoneAppLabel"
+            android:icon="@mipmap/ic_launcher_phone"
+            android:allowBackup="false"
+            android:supportsRtl="true"
+            android:usesCleartextTraffic="true"
+            android:defaultToDeviceProtectedStorage="true"
+            android:directBootAware="true">
+
+        <provider android:name="IccProvider"
+                android:authorities="icc"
+                android:multiprocess="true"
+                android:exported="true"
+                android:readPermission="android.permission.READ_CONTACTS"
+                android:writePermission="android.permission.WRITE_CONTACTS" />
 
         <!-- Dialer UI that only allows emergency calls -->
         <activity android:name="EmergencyDialer"
@@ -444,8 +455,9 @@
                 android:label="@string/delete_fdn_contact">
         </activity>
 
-        <activity android:name="DataRoamingReenable" android:label="@string/android:dialog_alert_title"
-            android:theme="@android:style/Theme.Holo.Dialog">
+        <activity android:name="DataRoamingReenable"
+                android:label="@string/dialog_alert_title"
+                android:theme="@android:style/Theme.Holo.Dialog">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
             </intent-filter>
@@ -474,8 +486,9 @@
         </activity>
 
         <!-- Broadcast Receiver that will process BOOT Complete and launch OTA -->
+        <!-- TODO http://b/23526250 Handle OTASP under system user -->
         <receiver android:name="OtaStartupReceiver" android:exported="false"
-                androidprv:primaryUserOnly="true">
+                androidprv:systemUserOnly="true">
             <intent-filter android:priority="100">
                  <action android:name="android.intent.action.BOOT_COMPLETED"/>
             </intent-filter>
@@ -497,7 +510,12 @@
         </service>
 
         <!-- service to dump telephony information -->
-        <service android:name="TelephonyDebugService" />
+        <service android:name="com.android.phone.TelephonyDebugService"
+                 android:permission="android.permission.DUMP">
+            <intent-filter>
+                <action android:name="com.android.phone.TelephonyDebugService" />
+            </intent-filter>
+        </service>
 
         <activity android:name="EmergencyCallbackModeExitDialog"
             android:excludeFromRecents="true"
@@ -526,8 +544,10 @@
                 <action android:name="android.telecom.ConnectionService" />
             </intent-filter>
         </service>
+
         <receiver android:name="com.android.services.telephony.sip.SipBroadcastReceiver">
             <intent-filter>
+                <action android:name="android.intent.action.BOOT_COMPLETED" />
                 <action android:name="android.net.sip.SIP_SERVICE_UP" />
                 <action android:name="com.android.phone.SIP_INCOMING_CALL" />
                 <action android:name="com.android.phone.SIP_REMOVE_PHONE" />
@@ -608,15 +628,6 @@
             </intent-filter>
         </activity>
 
-        <!-- BroadcastReceiver for receiving Intents from Notification mechanism. -->
-        <receiver android:name="PhoneGlobals$NotificationBroadcastReceiver" android:exported="false">
-            <intent-filter>
-                <action android:name="com.android.phone.ACTION_HANG_UP_ONGOING_CALL" />
-                <action android:name="com.android.phone.ACTION_CALL_BACK_FROM_NOTIFICATION" />
-                <action android:name="com.android.phone.ACTION_SEND_SMS_FROM_NOTIFICATION" />
-            </intent-filter>
-        </receiver>
-
         <!-- service to dump telephony information -->
         <service android:name="HfaService" android:exported="false"/>
 
@@ -648,16 +659,26 @@
                 <data android:scheme="sms" />
             </intent-filter>
         </receiver>
-       <receiver android:name="com.android.phone.vvm.omtp.SimChangeReceiver"
+        <receiver
+            android:name="com.android.phone.vvm.omtp.SimChangeReceiver"
             android:exported="true">
             <intent-filter>
                 <action android:name="android.telephony.action.CARRIER_CONFIG_CHANGED" />
                 <action android:name="android.intent.action.SIM_STATE_CHANGED" />
             </intent-filter>
-       </receiver>
+        </receiver>
+        <receiver
+            android:name="com.android.phone.vvm.omtp.OmtpBootCompletedReceiver"
+            android:exported="true"
+            android:permission="android.permission.RECEIVE_BOOT_COMPLETED">
+            <intent-filter>
+                <action android:name="android.intent.action.BOOT_COMPLETED"/>
+            </intent-filter>
+        </receiver>
        <receiver
            android:name="com.android.phone.vvm.omtp.fetch.FetchVoicemailReceiver"
-           android:exported="true">
+           android:exported="true"
+           android:permission="com.android.voicemail.permission.READ_VOICEMAIL">
            <intent-filter>
               <action android:name="android.intent.action.FETCH_VOICEMAIL" />
                <data
@@ -666,6 +687,14 @@
                    android:mimeType="vnd.android.cursor.item/voicemail" />
           </intent-filter>
        </receiver>
+        <receiver
+            android:name="com.android.phone.vvm.omtp.sync.OmtpVvmSyncReceiver"
+            android:exported="true"
+            android:permission="com.android.voicemail.permission.READ_VOICEMAIL">
+            <intent-filter>
+                <action android:name="android.provider.action.SYNC_VOICEMAIL"/>
+            </intent-filter>
+        </receiver>
        <receiver
            android:name="com.android.phone.vvm.omtp.sync.VoicemailProviderChangeReceiver"
            android:exported="true">
diff --git a/assets/eri.xml b/assets/eri.xml
new file mode 100644
index 0000000..cd32349
--- /dev/null
+++ b/assets/eri.xml
@@ -0,0 +1,1265 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** 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.
+*/
+-->
+
+<!-- Note that IconMode can be only 0, ON or 1, FLASHING
+     The icon is turned OFF if then IconIndex = 1 -->
+
+<EriFile VersionNumber="1357"
+         NumberOfEriEntries="176"
+         EriFileType="1">
+
+         <CallPromptId Id="0"
+                       CallPromptText="CallPromptId0"/>
+
+         <CallPromptId Id="1"
+                       CallPromptText="CallPromptId1"/>
+
+         <CallPromptId Id="2"
+                       CallPromptText="CallPromptId2"/>
+
+         <EriInfo RoamingIndicator="64"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Preferred System"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="65"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Available System"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="66"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Alliance Partner"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="67"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Premium Partner"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="68"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Full Service Functionality"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="69"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Partial Service Functionality"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="70"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Analog A"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="71"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Analog B"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="72"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="CDMA 800 A"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="73"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="CDMA 800 B"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="74"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="International Roaming"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="75"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Network"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="76"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Campus"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="77"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="In Building"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="78"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Regional"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="79"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Community"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="80"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Business"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="81"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Zone 1"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="82"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Zone 2"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="83"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="National"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="84"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Local"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="85"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="City"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="86"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Government"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="87"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="USA"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="88"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="State"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="89"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Resort"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="90"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Headquarters"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="91"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Personal"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="92"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Home"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="93"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Residential"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="94"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="University"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="95"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="College"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="96"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Hotel Guest"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="97"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Rental"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="98"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Corporate"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="99"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Sprint"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="100"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Campus"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="101"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="In Building"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="102"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Regional"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="103"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Community"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="104"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Business"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="105"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Zone 1"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="106"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Zone 2"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="107"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="National"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="108"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Local"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="109"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="City"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="110"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Government"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="111"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="USA"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="112"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="State"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="113"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Resort"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="114"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Headquarters"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="115"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Personal"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="116"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Home"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="117"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Residential"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="118"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="University"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="119"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="College"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="120"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Hotel Guest"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="121"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Rental"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="122"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Corporate"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="123"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Sprint"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="124"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="International"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="125"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="International"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="126"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="International"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="127"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Premium Service"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="128"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Enhanced Service"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="129"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Enhanced Digital"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="130"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Enhanced Roaming"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="131"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Alliance Service"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="132"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Alliance Network"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="133"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Vision Roaming"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="134"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Service"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="135"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Expanded Services"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="136"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Expanded Network"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="137"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Premium Service"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="138"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Enhanced Service"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="139"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Enhanced Digital"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="140"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Enhanced Roaming"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="141"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Alliance Service"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="142"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Alliance Network"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="143"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Vision Roaming"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="144"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Service"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="145"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Expanded Services"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="146"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Expanded Network"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="147"
+                  IconIndex="0"
+                  IconMode="1"
+                  EriText="Premium Service"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="148"
+                  IconIndex="0"
+                  IconMode="1"
+                  EriText="Enhanced Service"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="149"
+                  IconIndex="0"
+                  IconMode="1"
+                  EriText="Enhanced Digital"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="150"
+                  IconIndex="0"
+                  IconMode="1"
+                  EriText="Enhanced Roaming"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="151"
+                  IconIndex="0"
+                  IconMode="1"
+                  EriText="Alliance Service"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="152"
+                  IconIndex="0"
+                  IconMode="1"
+                  EriText="Alliance Network"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="153"
+                  IconIndex="0"
+                  IconMode="1"
+                  EriText="Vision Roaming"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="154"
+                  IconIndex="0"
+                  IconMode="1"
+                  EriText="Extended Service"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="155"
+                  IconIndex="0"
+                  IconMode="1"
+                  EriText="Expanded Services"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="156"
+                  IconIndex="0"
+                  IconMode="1"
+                  EriText="Expanded Network"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="157"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Premium International"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="158"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Premium International"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="159"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Premium International"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="160"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText=" "
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="161"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText=" "
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="162"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText=" "
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="163"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText=" "
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="164"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Ext Voice/Data Ntwk"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="165"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Ext Voice/Data Ntwk"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="166"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Ext Voice/Data Ntwk"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="167"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Broadband"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="168"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Broadband"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="169"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Broadband"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="170"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Data"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="171"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Data"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="172"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Data"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="173"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Data Ntwk"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="174"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Data Ntwk"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="175"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Data Ntwk"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="176"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Network"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="177"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Network"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="178"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Network"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="179"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Service"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="180"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Service"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="181"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Voice"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="182"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Voice"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="183"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Voice"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="184"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Voice &amp; Data"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="185"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Voice &amp; Data"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="186"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Voice &amp; Data"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="187"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Voice Ntwk"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="188"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Voice Ntwk"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="189"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Voice Ntwk"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="190"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Voice/Data"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="191"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Voice/Data"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="192"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Voice/Data"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="193"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="International"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="194"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="International Services"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="195"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="International Voice"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="196"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Int'l Voice/Data"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="197"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Int'l Voice/Data"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="198"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Int'l Voice/Data"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="199"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Ext Voice/Data Ntwk"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="200"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Ext Voice/Data Ntwk"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="201"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Ext Voice/Data Ntwk"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="202"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Broadband"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="203"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Broadband"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="204"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Broadband"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="205"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Data"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="206"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Data"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="207"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Data"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="208"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Data Ntwk"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="209"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Data Ntwk"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="210"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Data Ntwk"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="211"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Network"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="212"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Network"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="213"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Service"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="214"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Service"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="215"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Service"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="216"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Voice"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="217"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Voice"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="218"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Voice"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="219"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Voice &amp; Data"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="220"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Voice &amp; Data"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="221"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Voice &amp; Data"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="222"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Voice Ntwk"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="223"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Voice Ntwk"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="224"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Voice Ntwk"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="225"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Voice/Data"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="226"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Voice/Data"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="227"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Voice/Data"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="228"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="International"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="229"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="International"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="230"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="International Services"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="231"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="International Voice"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="232"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Int'l Voice/Data"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="233"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Int'l Voice/Data"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="234"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Int'l Voice/Data"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="235"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Premium International"
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="236"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText=" "
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="237"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText=" "
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="238"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText=" "
+                  CallPromptId="0"
+                  AlertId="0"/>
+
+         <EriInfo RoamingIndicator="239"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText=" "
+                  CallPromptId="0"
+                  AlertId="0"/>
+</EriFile>
diff --git a/assets/eri_310120.xml b/assets/eri_310120.xml
new file mode 100644
index 0000000..246c326
--- /dev/null
+++ b/assets/eri_310120.xml
@@ -0,0 +1,1530 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** 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.
+*/
+-->
+
+<!-- Note that IconMode can be only 0, ON or 1, FLASHING
+     The icon is turned OFF if then IconIndex = 1 -->
+
+<EriFile VersionNumber="7"
+         NumberOfEriEntries="187"
+         EriFileType="2">
+
+         <CallPromptId Id="0"
+                       CallPromptText="CallPromptId0"/>
+
+         <CallPromptId Id="1"
+                       CallPromptText="CallPromptId1"/>
+
+         <CallPromptId Id="2"
+                       CallPromptText="CallPromptId2"/>
+
+<EriInfo RoamingIndicator="0"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Domestic Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="1"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Sprint"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="2"
+         IconIndex="2"
+         IconMode="1"
+         EriText="International Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="3"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Out of Neighbourhood"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="4"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Out of Building"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="5"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Roaming-Preferred System"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="6"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Roaming-Available System"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="7"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Roaming-Alliance Partner"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="8"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Roaming-Premium Partner"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="9"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Roaming-Full Service Functionality"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="10"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Roaming-Partial Service Functionality"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="64"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Preferred System"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="65"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Available System"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="66"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Alliance Partner"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="67"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Premium Partner"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="68"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Full Service Functionality"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="69"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Partial Service Functionality"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="70"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Analog A"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="71"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Analog B"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="72"
+         IconIndex="0"
+         IconMode="0"
+         EriText="CDMA 800 A"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="73"
+         IconIndex="0"
+         IconMode="0"
+         EriText="CDMA 800 B"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="74"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="75"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="76"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Campus"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="77"
+         IconIndex="1"
+         IconMode="0"
+         EriText="In Building"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="78"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Regional"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="79"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Community"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="80"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Business"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="81"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Zone1"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="82"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Zone2"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="83"
+         IconIndex="0"
+         IconMode="0"
+         EriText="National"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="84"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Local"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="85"
+         IconIndex="0"
+         IconMode="0"
+         EriText="City"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="86"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Government"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="87"
+         IconIndex="0"
+         IconMode="0"
+         EriText="USA"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="88"
+         IconIndex="0"
+         IconMode="0"
+         EriText="State"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="89"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Resort"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="90"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Headquarters"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="91"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Personal"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="92"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Home"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="93"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Residential"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="94"
+         IconIndex="0"
+         IconMode="0"
+         EriText="University"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="95"
+         IconIndex="0"
+         IconMode="0"
+         EriText="College"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="96"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Hotel Guest"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="97"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Rental"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="98"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Corporate"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="99"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Sprint"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="100"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Campus"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="101"
+         IconIndex="1"
+         IconMode="0"
+         EriText="In Building"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="102"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Regional"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="103"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Community"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="104"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Business"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="105"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Zone 1"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="106"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Zone 2"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="107"
+         IconIndex="0"
+         IconMode="0"
+         EriText="National"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="108"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Local"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="109"
+         IconIndex="0"
+         IconMode="0"
+         EriText="City"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="110"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Government"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="111"
+         IconIndex="0"
+         IconMode="0"
+         EriText="USA"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="112"
+         IconIndex="0"
+         IconMode="0"
+         EriText="State"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="113"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Resort"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="114"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Headquarters"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="115"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Personal"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="116"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Home"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="117"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Residential"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="118"
+         IconIndex="0"
+         IconMode="0"
+         EriText="University"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="119"
+         IconIndex="0"
+         IconMode="0"
+         EriText="College"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="120"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Hotel Guest"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="121"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Rental"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="122"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Corporate"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="123"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Sprint"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="124"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="125"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="126"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="127"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Premium Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="128"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Enhanced Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="129"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Enhanced Digital"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="130"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Enhanced Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="131"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Alliance Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="132"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Alliance Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="133"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Vision Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="134"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="135"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Expanded Services"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="136"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Expanded Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="137"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Premium Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="138"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Enhanced Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="139"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Enhanced Digital"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="140"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Enhanced Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="141"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Alliance Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="142"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Alliance Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="143"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Vision Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="144"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="145"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Expanded Services"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="146"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Expanded Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="147"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Premium Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="148"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Enhanced Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="149"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Enhanced Digital"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="150"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Enhanced Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="151"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Alliance Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="152"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Alliance Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="153"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Vision Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="154"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Extended Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="155"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Expanded Services"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="156"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Expanded Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="157"
+         IconIndex="2"
+         IconMode="0"
+         EriText="Premium International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="158"
+         IconIndex="2"
+         IconMode="0"
+         EriText="Premium International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="159"
+         IconIndex="2"
+         IconMode="0"
+         EriText="Premium International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="160"
+         IconIndex="0"
+         IconMode="0"
+         EriText=""
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="161"
+         IconIndex="0"
+         IconMode="0"
+         EriText=""
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="162"
+         IconIndex="1"
+         IconMode="0"
+         EriText=""
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="163"
+         IconIndex="1"
+         IconMode="0"
+         EriText=""
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="164"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Ext Voice/Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="165"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Ext Voice/Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="166"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Ext Voice/Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="167"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Broadband"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="168"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Broadband"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="169"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Broadband"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="170"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="171"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="172"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="173"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="174"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="175"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="176"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="177"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="178"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="179"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="180"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="181"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="182"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="183"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="184"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice and Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="185"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice and Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="186"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice and Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="187"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="188"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="189"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="190"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="191"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="192"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="193"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="194"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International Services"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="195"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International Voice"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="196"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="197"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="198"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="199"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Ext Voice/Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="200"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Ext Voice/Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="201"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Ext Voice/Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="202"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Broadband"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="203"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Broadband"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="204"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Broadband"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="205"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="206"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="207"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="208"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="209"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="210"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="211"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="212"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="213"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="214"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="215"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="216"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="217"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="218"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="219"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice and Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="220"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice and Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="221"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice and Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="222"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="223"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="224"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="225"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="226"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="227"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="228"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="229"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="230"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International Services"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="231"
+	  IconIndex="2"
+	  IconMode="1"
+	  EriText="International Voice"
+	  CallPromptId="0"
+	  AlertId="0"
+	  DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="232"
+	  IconIndex="2"
+	  IconMode="1"
+	  EriText="International Voice/Data"
+	  CallPromptId="0"
+	  AlertId="0"
+	  DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="233"
+	  IconIndex="2"
+	  IconMode="1"
+	  EriText="International Voice/Data"
+	  CallPromptId="0"
+	  AlertId="0"
+	  DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="234"
+	  IconIndex="2"
+	  IconMode="1"
+	  EriText="International Voice/Data"
+	  CallPromptId="0"
+	  AlertId="0"
+	  DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="235"
+	  IconIndex="2"
+	  IconMode="1"
+	  EriText="Premium International"
+	  CallPromptId="0"
+	  AlertId="0"
+	  DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="236"
+	  IconIndex="0"
+	  IconMode="0"
+	  EriText=""
+	  CallPromptId="0"
+	  AlertId="0"
+	  DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="237"
+	  IconIndex="0"
+	  IconMode="0"
+	  EriText=""
+	  CallPromptId="0"
+	  AlertId="0"
+	  DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="238"
+         IconIndex="1"
+         IconMode="0"
+         EriText=""
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="239"
+         IconIndex="1"
+         IconMode="0"
+         EriText=""
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+</EriFile>
diff --git a/assets/eri_311480.xml b/assets/eri_311480.xml
new file mode 100644
index 0000000..750b200
--- /dev/null
+++ b/assets/eri_311480.xml
@@ -0,0 +1,186 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** 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.
+*/
+-->
+
+<!-- Note that IconMode can be only 0, ON or 1, FLASHING
+     The icon is turned OFF if then IconIndex = 1 -->
+
+<EriFile VersionNumber="5"
+         NumberOfEriEntries="19"
+         EriFileType="2">
+
+         <CallPromptId Id="0"
+                       CallPromptText="CallPromptId0"/>
+
+         <CallPromptId Id="1"
+                       CallPromptText="CallPromptId1"/>
+
+         <CallPromptId Id="2"
+                       CallPromptText="CallPromptId2"/>
+
+         <EriInfo RoamingIndicator="0"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText=""
+                  CallPromptId="0"
+                  AlertId="0"
+                  DataServiceSupport="1"/>
+
+         <EriInfo RoamingIndicator="1"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText=""
+                  CallPromptId="0"
+                  AlertId="0"
+                  DataServiceSupport="1"/>
+
+         <EriInfo RoamingIndicator="2"
+                  IconIndex="2"
+                  IconMode="1"
+                  EriText=""
+                  CallPromptId="0"
+                  AlertId="0"
+                  DataServiceSupport="1"/>
+
+         <EriInfo RoamingIndicator="64"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Verizon Wireless"
+                  CallPromptId="0"
+                  AlertId="0"
+                  DataServiceSupport="1"/>
+
+         <EriInfo RoamingIndicator="65"
+                  IconIndex="3"
+                  IconMode="0"
+                  EriText="Network Extender"
+                  CallPromptId="0"
+                  AlertId="0"
+                  DataServiceSupport="1"/>
+
+         <EriInfo RoamingIndicator="66"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Network"
+                  CallPromptId="0"
+                  AlertId="4"
+                  DataServiceSupport="0"/>
+
+         <EriInfo RoamingIndicator="67"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Network"
+                  CallPromptId="0"
+                  AlertId="4"
+                  DataServiceSupport="0"/>
+
+         <EriInfo RoamingIndicator="68"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Roaming"
+                  CallPromptId="0"
+                  AlertId="5"
+                  DataServiceSupport="0"/>
+
+         <EriInfo RoamingIndicator="69"
+                  IconIndex="2"
+                  IconMode="0"
+                  EriText="Extended Network"
+                  CallPromptId="0"
+                  AlertId="4"
+                  DataServiceSupport="0"/>
+
+         <EriInfo RoamingIndicator="70"
+                  IconIndex="2"
+                  IconMode="0"
+                  EriText="Roaming"
+                  CallPromptId="0"
+                  AlertId="5"
+                  DataServiceSupport="0"/>
+
+         <EriInfo RoamingIndicator="71"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Extended Network"
+                  CallPromptId="0"
+                  AlertId="4"
+                  DataServiceSupport="1"/>
+
+         <EriInfo RoamingIndicator="72"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Extended Network"
+                  CallPromptId="0"
+                  AlertId="4"
+                  DataServiceSupport="1"/>
+
+         <EriInfo RoamingIndicator="73"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Roaming"
+                  CallPromptId="0"
+                  AlertId="5"
+                  DataServiceSupport="1"/>
+
+         <EriInfo RoamingIndicator="74"
+                  IconIndex="2"
+                  IconMode="0"
+                  EriText="Extended Network"
+                  CallPromptId="0"
+                  AlertId="4"
+                  DataServiceSupport="1"/>
+
+         <EriInfo RoamingIndicator="75"
+                  IconIndex="2"
+                  IconMode="0"
+                  EriText="Roaming"
+                  CallPromptId="0"
+                  AlertId="5"
+                  DataServiceSupport="1"/>
+
+         <EriInfo RoamingIndicator="76"
+                  IconIndex="0"
+                  IconMode="0"
+                  EriText="Verizon Wireless"
+                  CallPromptId="0"
+                  AlertId="0"
+                  DataServiceSupport="1"/>
+
+         <EriInfo RoamingIndicator="77"
+                  IconIndex="2"
+                  IconMode="0"
+                  EriText="Verizon Wireless"
+                  CallPromptId="0"
+                  AlertId="0"
+                  DataServiceSupport="1"/>
+
+         <EriInfo RoamingIndicator="78"
+                  IconIndex="1"
+                  IconMode="0"
+                  EriText="Network Extender"
+                  CallPromptId="0"
+                  AlertId="1"
+                  DataServiceSupport="1"/>
+
+         <EriInfo RoamingIndicator="79"
+                  IconIndex="3"
+                  IconMode="1"
+                  EriText="Network Extender"
+                  CallPromptId="0"
+                  AlertId="1"
+                  DataServiceSupport="1"/>
+
+</EriFile>
diff --git a/assets/eri_311490.xml b/assets/eri_311490.xml
new file mode 100644
index 0000000..a28208c
--- /dev/null
+++ b/assets/eri_311490.xml
@@ -0,0 +1,1530 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** 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.
+*/
+-->
+
+<!-- Note that IconMode can be only 0, ON or 1, FLASHING
+     The icon is turned OFF if then IconIndex = 1 -->
+
+<EriFile VersionNumber="7"
+         NumberOfEriEntries="187"
+         EriFileType="2">
+
+         <CallPromptId Id="0"
+                       CallPromptText="CallPromptId0"/>
+
+         <CallPromptId Id="1"
+                       CallPromptText="CallPromptId1"/>
+
+         <CallPromptId Id="2"
+                       CallPromptText="CallPromptId2"/>
+
+<EriInfo RoamingIndicator="0"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Domestic Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="1"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Virgin Mobile"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="2"
+         IconIndex="2"
+         IconMode="1"
+         EriText="International Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="3"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Out of Neighbourhood"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="4"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Out of Building"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="5"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Roaming-Preferred System"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="6"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Roaming-Available System"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="7"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Roaming-Alliance Partner"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="8"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Roaming-Premium Partner"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="9"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Roaming-Full Service Functionality"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="10"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Roaming-Partial Service Functionality"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="64"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Preferred System"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="65"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Available System"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="66"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Alliance Partner"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="67"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Premium Partner"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="68"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Full Service Functionality"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="69"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Partial Service Functionality"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="70"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Analog A"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="71"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Analog B"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="72"
+         IconIndex="0"
+         IconMode="0"
+         EriText="CDMA 800 A"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="73"
+         IconIndex="0"
+         IconMode="0"
+         EriText="CDMA 800 B"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="74"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="75"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="76"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Campus"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="77"
+         IconIndex="1"
+         IconMode="0"
+         EriText="In Building"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="78"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Regional"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="79"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Community"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="80"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Business"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="81"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Zone1"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="82"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Zone2"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="83"
+         IconIndex="0"
+         IconMode="0"
+         EriText="National"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="84"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Local"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="85"
+         IconIndex="0"
+         IconMode="0"
+         EriText="City"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="86"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Government"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="87"
+         IconIndex="0"
+         IconMode="0"
+         EriText="USA"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="88"
+         IconIndex="0"
+         IconMode="0"
+         EriText="State"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="89"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Resort"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="90"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Headquarters"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="91"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Personal"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="92"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Home"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="93"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Residential"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="94"
+         IconIndex="0"
+         IconMode="0"
+         EriText="University"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="95"
+         IconIndex="0"
+         IconMode="0"
+         EriText="College"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="96"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Hotel Guest"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="97"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Rental"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="98"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Corporate"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="99"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Sprint"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="100"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Campus"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="101"
+         IconIndex="1"
+         IconMode="0"
+         EriText="In Building"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="102"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Regional"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="103"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Community"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="104"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Business"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="105"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Zone 1"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="106"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Zone 2"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="107"
+         IconIndex="0"
+         IconMode="0"
+         EriText="National"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="108"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Local"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="109"
+         IconIndex="0"
+         IconMode="0"
+         EriText="City"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="110"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Government"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="111"
+         IconIndex="0"
+         IconMode="0"
+         EriText="USA"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="112"
+         IconIndex="0"
+         IconMode="0"
+         EriText="State"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="113"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Resort"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="114"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Headquarters"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="115"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Personal"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="116"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Home"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="117"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Residential"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="118"
+         IconIndex="0"
+         IconMode="0"
+         EriText="University"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="119"
+         IconIndex="0"
+         IconMode="0"
+         EriText="College"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="120"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Hotel Guest"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="121"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Rental"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="122"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Corporate"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="123"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Sprint"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="124"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="125"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="126"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="127"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Premium Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="128"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Enhanced Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="129"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Enhanced Digital"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="130"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Enhanced Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="131"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Alliance Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="132"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Alliance Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="133"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Vision Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="134"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="135"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Expanded Services"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="136"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Expanded Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="137"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Premium Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="138"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Enhanced Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="139"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Enhanced Digital"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="140"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Enhanced Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="141"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Alliance Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="142"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Alliance Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="143"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Vision Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="144"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="145"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Expanded Services"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="146"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Expanded Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="147"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Premium Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="148"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Enhanced Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="149"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Enhanced Digital"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="150"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Enhanced Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="151"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Alliance Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="152"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Alliance Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="153"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Vision Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="154"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Extended Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="155"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Expanded Services"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="156"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Expanded Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="157"
+         IconIndex="2"
+         IconMode="0"
+         EriText="Premium International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="158"
+         IconIndex="2"
+         IconMode="0"
+         EriText="Premium International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="159"
+         IconIndex="2"
+         IconMode="0"
+         EriText="Premium International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="160"
+         IconIndex="0"
+         IconMode="0"
+         EriText=""
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="161"
+         IconIndex="0"
+         IconMode="0"
+         EriText=""
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="162"
+         IconIndex="1"
+         IconMode="0"
+         EriText=""
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="163"
+         IconIndex="1"
+         IconMode="0"
+         EriText=""
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="164"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Ext Voice/Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="165"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Ext Voice/Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="166"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Ext Voice/Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="167"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Broadband"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="168"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Broadband"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="169"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Broadband"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="170"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="171"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="172"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="173"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="174"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="175"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="176"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="177"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="178"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="179"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="180"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="181"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="182"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="183"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="184"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice and Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="185"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice and Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="186"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice and Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="187"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="188"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="189"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="190"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="191"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="192"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="193"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="194"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International Services"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="195"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International Voice"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="196"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="197"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="198"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="199"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Ext Voice/Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="200"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Ext Voice/Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="201"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Ext Voice/Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="202"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Broadband"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="203"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Broadband"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="204"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Broadband"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="205"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="206"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="207"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="208"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="209"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="210"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="211"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="212"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="213"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="214"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="215"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="216"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="217"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="218"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="219"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice and Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="220"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice and Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="221"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice and Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="222"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="223"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="224"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="225"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="226"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="227"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="228"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="229"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="230"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International Services"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="231"
+	  IconIndex="2"
+	  IconMode="1"
+	  EriText="International Voice"
+	  CallPromptId="0"
+	  AlertId="0"
+	  DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="232"
+	  IconIndex="2"
+	  IconMode="1"
+	  EriText="International Voice/Data"
+	  CallPromptId="0"
+	  AlertId="0"
+	  DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="233"
+	  IconIndex="2"
+	  IconMode="1"
+	  EriText="International Voice/Data"
+	  CallPromptId="0"
+	  AlertId="0"
+	  DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="234"
+	  IconIndex="2"
+	  IconMode="1"
+	  EriText="International Voice/Data"
+	  CallPromptId="0"
+	  AlertId="0"
+	  DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="235"
+	  IconIndex="2"
+	  IconMode="1"
+	  EriText="Premium International"
+	  CallPromptId="0"
+	  AlertId="0"
+	  DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="236"
+	  IconIndex="0"
+	  IconMode="0"
+	  EriText=""
+	  CallPromptId="0"
+	  AlertId="0"
+	  DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="237"
+	  IconIndex="0"
+	  IconMode="0"
+	  EriText=""
+	  CallPromptId="0"
+	  AlertId="0"
+	  DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="238"
+         IconIndex="1"
+         IconMode="0"
+         EriText=""
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="239"
+         IconIndex="1"
+         IconMode="0"
+         EriText=""
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+</EriFile>
diff --git a/assets/eri_311870.xml b/assets/eri_311870.xml
new file mode 100644
index 0000000..ae12b73
--- /dev/null
+++ b/assets/eri_311870.xml
@@ -0,0 +1,1530 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** 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.
+*/
+-->
+
+<!-- Note that IconMode can be only 0, ON or 1, FLASHING
+     The icon is turned OFF if then IconIndex = 1 -->
+
+<EriFile VersionNumber="7"
+         NumberOfEriEntries="187"
+         EriFileType="2">
+
+         <CallPromptId Id="0"
+                       CallPromptText="CallPromptId0"/>
+
+         <CallPromptId Id="1"
+                       CallPromptText="CallPromptId1"/>
+
+         <CallPromptId Id="2"
+                       CallPromptText="CallPromptId2"/>
+
+<EriInfo RoamingIndicator="0"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Domestic Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="1"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Boost Mobile"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="2"
+         IconIndex="2"
+         IconMode="1"
+         EriText="International Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="3"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Out of Neighbourhood"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="4"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Out of Building"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="5"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Roaming-Preferred System"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="6"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Roaming-Available System"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="7"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Roaming-Alliance Partner"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="8"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Roaming-Premium Partner"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="9"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Roaming-Full Service Functionality"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="10"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Roaming-Partial Service Functionality"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="64"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Preferred System"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="65"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Available System"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="66"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Alliance Partner"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="67"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Premium Partner"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="68"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Full Service Functionality"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="69"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Partial Service Functionality"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="70"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Analog A"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="71"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Analog B"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="72"
+         IconIndex="0"
+         IconMode="0"
+         EriText="CDMA 800 A"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="73"
+         IconIndex="0"
+         IconMode="0"
+         EriText="CDMA 800 B"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="74"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="75"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="76"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Campus"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="77"
+         IconIndex="1"
+         IconMode="0"
+         EriText="In Building"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="78"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Regional"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="79"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Community"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="80"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Business"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="81"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Zone1"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="82"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Zone2"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="83"
+         IconIndex="0"
+         IconMode="0"
+         EriText="National"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="84"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Local"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="85"
+         IconIndex="0"
+         IconMode="0"
+         EriText="City"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="86"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Government"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="87"
+         IconIndex="0"
+         IconMode="0"
+         EriText="USA"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="88"
+         IconIndex="0"
+         IconMode="0"
+         EriText="State"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="89"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Resort"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="90"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Headquarters"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="91"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Personal"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="92"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Home"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="93"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Residential"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="94"
+         IconIndex="0"
+         IconMode="0"
+         EriText="University"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="95"
+         IconIndex="0"
+         IconMode="0"
+         EriText="College"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="96"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Hotel Guest"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="97"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Rental"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="98"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Corporate"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="99"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Sprint"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="100"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Campus"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="101"
+         IconIndex="1"
+         IconMode="0"
+         EriText="In Building"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="102"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Regional"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="103"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Community"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="104"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Business"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="105"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Zone 1"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="106"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Zone 2"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="107"
+         IconIndex="0"
+         IconMode="0"
+         EriText="National"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="108"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Local"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="109"
+         IconIndex="0"
+         IconMode="0"
+         EriText="City"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="110"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Government"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="111"
+         IconIndex="0"
+         IconMode="0"
+         EriText="USA"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="112"
+         IconIndex="0"
+         IconMode="0"
+         EriText="State"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="113"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Resort"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="114"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Headquarters"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="115"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Personal"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="116"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Home"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="117"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Residential"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="118"
+         IconIndex="0"
+         IconMode="0"
+         EriText="University"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="119"
+         IconIndex="0"
+         IconMode="0"
+         EriText="College"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="120"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Hotel Guest"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="121"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Rental"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="122"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Corporate"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="123"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Sprint"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="124"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="125"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="126"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="127"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Premium Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="128"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Enhanced Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="129"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Enhanced Digital"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="130"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Enhanced Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="131"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Alliance Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="132"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Alliance Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="133"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Vision Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="134"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="135"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Expanded Services"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="136"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Expanded Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="137"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Premium Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="138"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Enhanced Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="139"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Enhanced Digital"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="140"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Enhanced Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="141"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Alliance Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="142"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Alliance Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="143"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Vision Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="144"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="145"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Expanded Services"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="146"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Expanded Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="147"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Premium Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="148"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Enhanced Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="149"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Enhanced Digital"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="150"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Enhanced Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="151"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Alliance Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="152"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Alliance Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="153"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Vision Roaming"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="154"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Extended Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="155"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Expanded Services"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="156"
+         IconIndex="0"
+         IconMode="1"
+         EriText="Expanded Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="157"
+         IconIndex="2"
+         IconMode="0"
+         EriText="Premium International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="158"
+         IconIndex="2"
+         IconMode="0"
+         EriText="Premium International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="159"
+         IconIndex="2"
+         IconMode="0"
+         EriText="Premium International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="160"
+         IconIndex="0"
+         IconMode="0"
+         EriText=""
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="161"
+         IconIndex="0"
+         IconMode="0"
+         EriText=""
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="162"
+         IconIndex="1"
+         IconMode="0"
+         EriText=""
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="163"
+         IconIndex="1"
+         IconMode="0"
+         EriText=""
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="164"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Ext Voice/Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="165"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Ext Voice/Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="166"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Ext Voice/Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="167"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Broadband"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="168"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Broadband"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="169"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Broadband"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="170"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="171"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="172"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="173"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="174"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="175"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="176"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="177"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="178"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="179"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="180"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="181"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="182"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="183"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="184"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice and Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="185"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice and Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="186"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice and Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="187"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="188"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="189"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="190"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="191"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="192"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="193"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="194"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International Services"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="195"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International Voice"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="196"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="197"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="198"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="199"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Ext Voice/Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="200"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Ext Voice/Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="201"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Ext Voice/Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="202"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Broadband"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="203"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Broadband"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="204"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Broadband"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="205"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="206"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="207"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="208"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="209"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="210"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Data Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="211"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="212"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Network"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="213"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="214"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="215"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Service"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="216"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="217"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="218"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="219"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice and Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="220"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice and Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="221"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice and Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="222"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="223"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="224"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice Ntwk"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="225"
+         IconIndex="1"
+         IconMode="0"
+         EriText="Extended Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="226"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="227"
+         IconIndex="0"
+         IconMode="0"
+         EriText="Extended Voice/Data"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="228"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="229"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="230"
+         IconIndex="2"
+         IconMode="0"
+         EriText="International Services"
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="231"
+	  IconIndex="2"
+	  IconMode="1"
+	  EriText="International Voice"
+	  CallPromptId="0"
+	  AlertId="0"
+	  DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="232"
+	  IconIndex="2"
+	  IconMode="1"
+	  EriText="International Voice/Data"
+	  CallPromptId="0"
+	  AlertId="0"
+	  DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="233"
+	  IconIndex="2"
+	  IconMode="1"
+	  EriText="International Voice/Data"
+	  CallPromptId="0"
+	  AlertId="0"
+	  DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="234"
+	  IconIndex="2"
+	  IconMode="1"
+	  EriText="International Voice/Data"
+	  CallPromptId="0"
+	  AlertId="0"
+	  DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="235"
+	  IconIndex="2"
+	  IconMode="1"
+	  EriText="Premium International"
+	  CallPromptId="0"
+	  AlertId="0"
+	  DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="236"
+	  IconIndex="0"
+	  IconMode="0"
+	  EriText=""
+	  CallPromptId="0"
+	  AlertId="0"
+	  DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="237"
+	  IconIndex="0"
+	  IconMode="0"
+	  EriText=""
+	  CallPromptId="0"
+	  AlertId="0"
+	  DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="238"
+         IconIndex="1"
+         IconMode="0"
+         EriText=""
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+<EriInfo RoamingIndicator="239"
+         IconIndex="1"
+         IconMode="0"
+         EriText=""
+         CallPromptId="0"
+         AlertId="0"
+         DataServiceSupport="1"/>
+
+</EriFile>
diff --git a/common/Android.mk b/common/Android.mk
deleted file mode 100644
index 2667e45..0000000
--- a/common/Android.mk
+++ /dev/null
@@ -1,26 +0,0 @@
-# Copyright 2013, 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.
-
-LOCAL_PATH:= $(call my-dir)
-
-include $(CLEAR_VARS)
-
-LOCAL_STATIC_JAVA_LIBRARIES := guava
-
-LOCAL_SRC_FILES := $(call all-java-files-under, src) \
-        $(call all-Iaidl-files-under, src)
-
-LOCAL_MODULE := com.android.services.telephony.common
-
-include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/common/src/com/android/services/telephony/common/AudioMode.java b/common/src/com/android/services/telephony/common/AudioMode.java
deleted file mode 100644
index b0043ef..0000000
--- a/common/src/com/android/services/telephony/common/AudioMode.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.services.telephony.common;
-
-/**
- * Container class for audio modes.
- */
-public class AudioMode {
-    // These can be used as a bit mask
-    public static int EARPIECE      = 0x00000001;
-    public static int BLUETOOTH     = 0x00000002;
-    public static int WIRED_HEADSET = 0x00000004;
-    public static int SPEAKER       = 0x00000008;
-
-    public static int WIRED_OR_EARPIECE = EARPIECE | WIRED_HEADSET;
-    public static int ALL_MODES = EARPIECE | BLUETOOTH | WIRED_HEADSET | SPEAKER;
-
-    public static String toString(int mode) {
-        if ((mode & ~ALL_MODES) != 0x0) {
-            return "UNKNOWN";
-        }
-
-        StringBuffer buffer = new StringBuffer();
-        if ((mode & EARPIECE) == EARPIECE) {
-            listAppend(buffer, "EARPIECE");
-        }
-        if ((mode & BLUETOOTH) == BLUETOOTH) {
-            listAppend(buffer, "BLUETOOTH");
-        }
-        if ((mode & WIRED_HEADSET) == WIRED_HEADSET) {
-            listAppend(buffer, "WIRED_HEADSET");
-        }
-        if ((mode & SPEAKER) == SPEAKER) {
-            listAppend(buffer, "SPEAKER");
-        }
-
-        return buffer.toString();
-    }
-
-    private static void listAppend(StringBuffer buffer, String str) {
-        if (buffer.length() > 0) {
-            buffer.append(", ");
-        }
-        buffer.append(str);
-    }
-}
diff --git a/common/src/com/android/services/telephony/common/MoreStrings.java b/common/src/com/android/services/telephony/common/MoreStrings.java
deleted file mode 100644
index 5e6e4b4..0000000
--- a/common/src/com/android/services/telephony/common/MoreStrings.java
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.services.telephony.common;
-
-/**
- * Static utility methods for Strings.
- */
-public class MoreStrings {
-
-    public static String toSafeString(String value) {
-        if (value == null) {
-            return null;
-        }
-
-        // Do exactly same thing as Uri#toSafeString() does, which will enable us to compare
-        // sanitized phone numbers.
-        final StringBuilder builder = new StringBuilder();
-        for (int i = 0; i < value.length(); i++) {
-            final char c = value.charAt(i);
-            if (c == '-' || c == '@' || c == '.') {
-                builder.append(c);
-            } else {
-                builder.append('x');
-            }
-        }
-        return builder.toString();
-    }
-
-}
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 89eec25..16082ae 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Gedeaktiveer"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Jou diensverskaffer ondersteun nie die deaktivering van oproepaanstuur wanneer jou foon onbereikbaar is nie."</string>
     <string name="updating_title" msgid="6146755386174019046">"Belinstellings"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Oproepinstellings kan net deur die primêre gebruiker verander word."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Oproepinstellings kan net deur die administrateur verander word."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Instellings (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Oproepinstellingsfout"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Lees tans instellings…"</string>
@@ -468,6 +468,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Voer alles in"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Voer SIM-kontakte in"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Voer in uit kontakte"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Kontak is ingevoer"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Kon nie kontak invoer nie"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Gehoorapparate"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Skakel gehoorapparaat-versoenbaarheid aan"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index feee9fa..ef996a9 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"ቦዝኗል"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"ስልክህ በማይደረስበት ጊዜ የድምጽ ተያያዥ ሞደምህ  የጥሪ-ማስተላለፍን አይደግፍም።"</string>
     <string name="updating_title" msgid="6146755386174019046">"የጥሪ ቅንብሮች"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"የጥሪ ቅንብሮች በተቀዳሚው ተጠቃሚ ብቻ ሊለወጡ ይችላሉ።"</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"የጥሪ ቅንብሮች በአስተዳዳሪ ተጠቃሚው ብቻ ነው ሊለወጡ የሚችሉት።"</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"ቅንብሮች (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"የጥሪ ቅንብሮች ስህተት"</string>
     <string name="reading_settings" msgid="1920291699287055284">"ቅንብሮች በማንበብ ላይ..."</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"ሁሉንም አስመጣ"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"የSIM ዕውቂያዎች አስመጣ"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"ከዕውቂያዎች አስገባ"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"የመጣ እውቂያ"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"እውቂያን ማስመጣት አልተቻለም"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"ማዳመጫ መርጃዎች"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"የመስሚያ መርጃ ተጓዳኝአብራ"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 7dbe686..32e1e25 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"معطّل"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"لا يتيح مشغل شبكة الجوال تعطيل اعادة توجيه المكالمة عند عدم التمكن من الوصول إلى هاتفك."</string>
     <string name="updating_title" msgid="6146755386174019046">"إعدادات الاتصال"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"لا يمكن تغيير إعدادات المكالمات إلا بواسطة المستخدم الأساسي."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"لا يمكن تغيير إعدادات المكالمات إلا بواسطة المستخدم الإداري."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"الإعدادات (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"خطأ في إعدادات الاتصال"</string>
     <string name="reading_settings" msgid="1920291699287055284">"جارٍ قراءة الإعدادات..."</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"استيراد الكل"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"‏استيراد جهات اتصال شريحة SIM"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"استيراد من جهات الاتصال"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"تم استيراد جهة اتصال"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"أخفق استيراد جهة اتصال"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"أدوات السمع المساعدة"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"تشغيل التوافق مع أداة السمع"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-az-rAZ/strings.xml b/res/values-az-rAZ/strings.xml
index 2c84552..3f6c894 100644
--- a/res/values-az-rAZ/strings.xml
+++ b/res/values-az-rAZ/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Deaktiv"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Sizin mobil daşıyıcı telefon əlçatmaz olduğu zaman zəng yönləndirməni deaktiv etməyi dəstəkləmir."</string>
     <string name="updating_title" msgid="6146755386174019046">"Zəng parametrləri"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Zəng parametrləri yalnız əsas istifadəçi tərəfindən dəyişdirilə bilər."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Zəng parametrləri yalnız admin olan istifadəçi tərəfindən dəyişdirilə bilər."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Ayarlar ( <xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g> )"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Zəng parametrləri xətası"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Oxuma parametrləri ..."</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Hamısını import edin"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"SIM kontaktlar import edilir"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Kontaktlardan import edin"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Idxal olunmuş kontakt"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Kontakt idxalı uğursuz oldu"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Eşitmə yardımı"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Eşitmə yardımı uyğunluğunu aktivləşdirin"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-b+sr+Latn/arrays.xml b/res/values-b+sr+Latn/arrays.xml
new file mode 100644
index 0000000..ff6cd57
--- /dev/null
+++ b/res/values-b+sr+Latn/arrays.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- 
+     Copyright (C) 2014 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.
+ -->
+
+<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">"Globalno"</item>
+    <item msgid="6753774959494729275">"LTE/CDMA"</item>
+    <item msgid="8658695584186942227">"LTE/GSM/UMTS"</item>
+  </string-array>
+  <string-array name="preferred_network_mode_values_world_mode">
+    <item msgid="8390941159766263625">"10"</item>
+    <item msgid="6103348346295810336">"8"</item>
+    <item msgid="3494519853214024879">"9"</item>
+  </string-array>
+</resources>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..bef9186
--- /dev/null
+++ b/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,558 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2007 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="phoneAppLabel" product="tablet" msgid="1107073389495104784">"Podaci za mobilne uređaje"</string>
+    <string name="phoneAppLabel" product="default" msgid="6790717591729922998">"Telefonske usluge"</string>
+    <string name="emergencyDialerIconLabel" msgid="7812140032168171053">"Hitni pozivi"</string>
+    <string name="phoneIconLabel" msgid="2331230813161304895">"Telefon"</string>
+    <string name="fdnListLabel" msgid="8630418672279521003">"Lista brojeva za fiksno biranje"</string>
+    <string name="unknown" msgid="6878797917991465859">"Nepoznato"</string>
+    <string name="private_num" msgid="6713286113000232309">"Privatan broj"</string>
+    <string name="payphone" msgid="4793877574636445118">"Telefonska govornica"</string>
+    <string name="onHold" msgid="9035493194749959955">"Na čekanju"</string>
+    <string name="mmiStarted" msgid="6347869857061147003">"Pokrenut je MMI kôd."</string>
+    <string name="ussdRunning" msgid="485588686340541690">"USSD kôd je pokrenut…"</string>
+    <string name="mmiCancelled" msgid="2771923949751842276">"MMI kôd je otkazan"</string>
+    <string name="cancel" msgid="5044513931633602634">"Otkaži"</string>
+    <string name="enter_input" msgid="1810529547726803893">"USSD poruka mora da ima između <xliff:g id="MIN_LEN">%d</xliff:g> i <xliff:g id="MAX_LEN">%d</xliff:g> znakova. Pokušajte ponovo."</string>
+    <string name="manageConferenceLabel" msgid="4691922394301969053">"Upravljanje konferencijskim pozivom"</string>
+    <string name="ok" msgid="3811371167865772377">"Potvrdi"</string>
+    <string name="audio_mode_speaker" msgid="27649582100085266">"Zvučnik"</string>
+    <string name="audio_mode_earpiece" msgid="4156527186373869107">"Slušalica telefona"</string>
+    <string name="audio_mode_wired_headset" msgid="1465350758489175975">"Žičane slušalice"</string>
+    <string name="audio_mode_bluetooth" msgid="3047641300848211128">"Bluetooth"</string>
+    <string name="wait_prompt_str" msgid="7601815427707856238">"Želite li da pošaljete sledeće tonove?\n"</string>
+    <string name="pause_prompt_str" msgid="1789964702154314806">"Tonovi slanja\n"</string>
+    <string name="send_button" msgid="4106860097497818751">"Pošalji"</string>
+    <string name="pause_prompt_yes" msgid="3564467212025151797">"Da"</string>
+    <string name="pause_prompt_no" msgid="6686238803236884877">"Ne"</string>
+    <string name="wild_prompt_str" msgid="5543521676355533577">"Zamenite džoker znak sa"</string>
+    <string name="no_vm_number" msgid="4164780423805688336">"Nedostaje broj za govornu poštu"</string>
+    <string name="no_vm_number_msg" msgid="1300729501030053828">"Nije uskladišten nijedan broj govorne pošte na SIM kartici."</string>
+    <string name="add_vm_number_str" msgid="4676479471644687453">"Dodaj broj"</string>
+    <string name="puk_unlocked" msgid="2284912838477558454">"Vaša SIM kartica je odblokirana. Telefon se otključava..."</string>
+    <string name="label_ndp" msgid="780479633159517250">"PIN za otključavanje mreže na SIM kartici"</string>
+    <string name="sim_ndp_unlock_text" msgid="683628237760543009">"Otključaj"</string>
+    <string name="sim_ndp_dismiss_text" msgid="1604823375752456947">"Odbaci"</string>
+    <string name="requesting_unlock" msgid="6412629401033249351">"Traženje otključavanja mreže"</string>
+    <string name="unlock_failed" msgid="6490531697031504225">"Neuspešan zahtev za zaključavanje mreže."</string>
+    <string name="unlock_success" msgid="6770085622238180152">"Uspešno otključavanje mreže"</string>
+    <string name="mobile_network_settings_not_available" msgid="3831911315358856062">"Podešavanja mobilne mreže nisu dostupna za ovog korisnika"</string>
+    <string name="labelGSMMore" msgid="5930842194056092106">"Podešavanja GSM poziva"</string>
+    <string name="labelGsmMore_with_label" msgid="2674012918829238901">"Podešavanja GSM poziva (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
+    <string name="labelCDMAMore" msgid="1630676740428229339">"CDMA podešavanja poziva"</string>
+    <string name="labelCdmaMore_with_label" msgid="6333588719319970399">"Podešavanja CDMA poziva (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
+    <string name="apn_settings" msgid="9043423184895642077">"Nazivi pristupnih tačaka"</string>
+    <string name="settings_label" msgid="3876743539816984008">"Mrežna podešavanja"</string>
+    <string name="phone_accounts" msgid="6376603393888116364">"Nalozi za pozivanje"</string>
+    <string name="phone_accounts_make_calls_with" msgid="1969188078933152231">"Upućujte pozive pomoću"</string>
+    <string name="phone_accounts_make_sip_calls_with" msgid="4677789312053828493">"Upućujte SIP pozive pomoću"</string>
+    <string name="phone_accounts_ask_every_time" msgid="4346499067149985702">"Prvo pitaj"</string>
+    <string name="phone_accounts_settings_header" msgid="4141710640883261094">"Podešavanja"</string>
+    <string name="phone_accounts_choose_accounts" msgid="5232948804226424002">"Izaberite naloge"</string>
+    <string name="phone_accounts_selection_header" msgid="1365215726106915865">"Nalozi na telefonu"</string>
+    <string name="phone_accounts_add_sip_account" msgid="2023821743341923271">"Dodaj SIP nalog"</string>
+    <string name="phone_accounts_configure_account_settings" msgid="1361715069911607109">"Konfigurisanje podešavanja naloga"</string>
+    <string name="phone_accounts_all_calling_accounts" msgid="207619531589278471">"Svi nalozi za pozivanje"</string>
+    <string name="phone_accounts_all_calling_accounts_summary" msgid="8594186415822657011">"Izaberite koji nalozi mogu da obavljaju pozive"</string>
+    <string name="wifi_calling" msgid="739018212480165598">"Pozivanje preko Wi-Fi-ja"</string>
+    <string name="connection_service_default_label" msgid="1498481943805913754">"Ugrađena usluga povezivanja"</string>
+    <string name="voicemail" msgid="8693759337917898954">"Govorna pošta"</string>
+    <string name="voicemail_settings_with_label" msgid="152724978380748296">"Glasovna pošta (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
+    <string name="voicemail_abbreviated" msgid="2215592488517217448">"VM:"</string>
+    <string name="networks" msgid="8873030692174541976">"Mrežni operateri"</string>
+    <string name="cell_broadcast_settings" msgid="8740238216690502563">"Hitni prenosi"</string>
+    <string name="call_settings" msgid="6112441768261754562">"Podešavanja poziva"</string>
+    <string name="additional_gsm_call_settings" msgid="1391795981938800617">"Dodatna podešavanja"</string>
+    <string name="additional_gsm_call_settings_with_label" msgid="1385241520708457376">"Dodatna podešavanja (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
+    <string name="sum_gsm_call_settings" msgid="4076647190996778012">"Dodatna podešavanja poziva samo za GSM"</string>
+    <string name="additional_cdma_call_settings" msgid="8628958775721886909">"Dodatna CDMA podešavanja poziva"</string>
+    <string name="sum_cdma_call_settings" msgid="284753265979035549">"Dodatna samo CDMA podešavanja poziva"</string>
+    <string name="labelNwService" msgid="4699970172021870983">"Podešavanja mrežne usluge"</string>
+    <string name="labelCallerId" msgid="3888899447379069198">"ID pozivaoca"</string>
+    <string name="sum_loading_settings" msgid="1826692909391168620">"Učitavaju se podešavanja…"</string>
+    <string name="sum_hide_caller_id" msgid="1071407020290873782">"Broj je skriven u odlaznim pozivima"</string>
+    <string name="sum_show_caller_id" msgid="6768534125447290401">"Broj prikazan u odlaznim pozivima"</string>
+    <string name="sum_default_caller_id" msgid="1954518825510901365">"Koristi podrazumevana podešavanja operatera za prikazivanje mog broja u odlaznim porukama"</string>
+    <string name="labelCW" msgid="6120513814915920200">"Poziv na čekanju"</string>
+    <string name="sum_cw_enabled" msgid="8083061901633671397">"Tokom poziva, obavesti me o dolaznim pozivima"</string>
+    <string name="sum_cw_disabled" msgid="3648693907300104575">"Tokom poziva, obavesti me o dolaznim pozivima"</string>
+    <string name="call_forwarding_settings" msgid="3378927671091537173">"Podešavanja preusmeravanja poziva"</string>
+    <string name="call_forwarding_settings_with_label" msgid="8569489414006897127">"Podešavanja preusmeravanja poziva (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
+    <string name="labelCF" msgid="2574386948026924737">"Preusmeravanje poziva"</string>
+    <string name="labelCFU" msgid="8147177368148660600">"Uvek prosledi"</string>
+    <string name="messageCFU" msgid="3560082430662923687">"Uvek koristi ovaj broj"</string>
+    <string name="sum_cfu_enabled_indicator" msgid="4014187342724130197">"Prosleđivanje svih poziva"</string>
+    <string name="sum_cfu_enabled" msgid="2450052502198827927">"Prosleđivanje svih poziva na <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
+    <string name="sum_cfu_enabled_no_number" msgid="6591985777096823616">"Broj nije dostupan"</string>
+    <string name="sum_cfu_disabled" msgid="8384177689501334080">"Isključeno"</string>
+    <string name="labelCFB" msgid="6139853033106283172">"Kad je zauzeto"</string>
+    <string name="messageCFB" msgid="3711089705936187129">"Broj kad je zauzeto"</string>
+    <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="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="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>
+    <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Mobilni operater ne podržava onemogućavanje preusmeravanja poziva kada je telefon nedostupan."</string>
+    <string name="updating_title" msgid="6146755386174019046">"Podešavanja poziva"</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Samo korisniku sa administratorskim pravima je dozvoljeno da menja podešavanja poziva."</string>
+    <string name="call_settings_with_label" msgid="3401177261468593519">"Podešavanja (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
+    <string name="error_updating_title" msgid="7970259216988931777">"Greška u podešavanjima poziva"</string>
+    <string name="reading_settings" msgid="1920291699287055284">"Podešavanja se učitavaju…"</string>
+    <string name="updating_settings" msgid="8171225533884883252">"Ažuriranje podešavanja…"</string>
+    <string name="reverting_settings" msgid="4752151682666912828">"Vraćanje podešavanja…"</string>
+    <string name="response_error" msgid="6674110501330139405">"Neočekivani odgovor mreže."</string>
+    <string name="exception_error" msgid="7027667130619518211">"Greška na mreži ili SIM kartici."</string>
+    <string name="stk_cc_ss_to_dial_error" msgid="2816779198916570502">"SS zahtev je promenjen u DIAL zahtev."</string>
+    <string name="stk_cc_ss_to_ussd_error" msgid="7490626178582654236">"SS zahtev je promenjen u USSD zahtev."</string>
+    <string name="stk_cc_ss_to_ss_error" msgid="5057846756489053759">"SS zahtev je promenjen u novi SS zahtev."</string>
+    <string name="fdn_check_failure" msgid="18200614306525434">"Podešavanje Brojeva za fiksno biranje aplikacije Telefon je uključeno. Zbog toga neke funkcije u vezi sa pozivima ne funkcionišu."</string>
+    <string name="radio_off_error" msgid="2304459933248513376">"Uključite radio pre pregledanja ovih podešavanja."</string>
+    <string name="close_dialog" msgid="2365884406356986917">"Potvrdi"</string>
+    <string name="enable" msgid="7248657275000173526">"Uključi"</string>
+    <string name="disable" msgid="4678348128118573672">"Isključi"</string>
+    <string name="change_num" msgid="239476305819844391">"Ažuriraj"</string>
+  <string-array name="clir_display_values">
+    <item msgid="5560134294467334594">"Podrazumevano za mrežu"</item>
+    <item msgid="7876195870037833661">"Sakrij broj"</item>
+    <item msgid="1108394741608734023">"Prikaži broj"</item>
+  </string-array>
+    <string name="vm_changed" msgid="380744030726254139">"Promenjen je broj govorne pošte."</string>
+    <string name="vm_change_failed" msgid="3352934863246208918">"Nije moguće promeniti broj govorne pošte.\nKontaktirajte mobilnog operatera ako se ovaj problem nastavi."</string>
+    <string name="fw_change_failed" msgid="5298103228470214665">"Nije moguće promeniti broj za preusmeravanje.\nKontaktirajte mobilnog operatera ako se ovaj problem nastavi."</string>
+    <string name="fw_get_in_vm_failed" msgid="8862896836093833973">"Nije moguće preuzeti i sačuvati trenutna podešavanja broja za prosleđivanje.\nŽelite li da ipak pređete na novog dobavljača?"</string>
+    <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="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>
+    <string name="empty_networks_list" msgid="4249426905018815316">"Nisu pronađene mreže."</string>
+    <string name="search_networks" msgid="1601136049300882441">"Pretraži mreže"</string>
+    <string name="network_query_error" msgid="6828516148953325006">"Greška tokom traženja mreža."</string>
+    <string name="register_on_network" msgid="9055203954040805084">"Registrovanje na <xliff:g id="NETWORK">%s</xliff:g>…"</string>
+    <string name="not_allowed" msgid="5613353860205691579">"SIM kartica ne dozvoljava vezu sa ovom mrežom."</string>
+    <string name="connect_later" msgid="2308119155752343975">"Trenutno nije moguće povezati se sa ovom mrežom. Pokušajte ponovo kasnije."</string>
+    <string name="registration_done" msgid="495135664535876612">"Registrovano na mreži."</string>
+    <string name="sum_carrier_select" msgid="3494252551249882718">"Izaberite mrežnog operatera"</string>
+    <string name="sum_search_networks" msgid="2921092249873272715">"Potraži sve dostupne mreže"</string>
+    <string name="select_automatically" msgid="5628402124471810174">"Izaberi automatski"</string>
+    <string name="sum_select_automatically" msgid="5614890115123292400">"Automatski izbor željene mreže"</string>
+    <string name="register_automatically" msgid="6017849844573519637">"Automatska registracija..."</string>
+    <string name="preferred_network_mode_title" msgid="2336624679902659306">"Željeni tip mreže"</string>
+    <string name="preferred_network_mode_summary" msgid="1434820673166126609">"Promena režima rada mreže"</string>
+    <string name="preferred_network_mode_dialogtitle" msgid="4048082093347807230">"Željeni tip mreže"</string>
+    <string name="preferred_network_mode_wcdma_perf_summary" msgid="8521677230113533809">"Željeni režim mreže: WCDMA"</string>
+    <string name="preferred_network_mode_gsm_only_summary" msgid="3352445413437453511">"Željeni režim mreže: samo GSM"</string>
+    <string name="preferred_network_mode_wcdma_only_summary" msgid="2836897236221063413">"Željeni režim mreže: samo WCDMA"</string>
+    <string name="preferred_network_mode_gsm_wcdma_summary" msgid="3161255745326408587">"Željeni režim mreže: GSM/WCDMA"</string>
+    <string name="preferred_network_mode_cdma_summary" msgid="3175690187294334241">"Željeni režim mreže: CDMA"</string>
+    <string name="preferred_network_mode_cdma_evdo_summary" msgid="8332063064712726618">"Željeni režim mreže: CDMA/EvDo"</string>
+    <string name="preferred_network_mode_cdma_only_summary" msgid="1309770926198634150">"Željeni režim mreže: samo CDMA"</string>
+    <string name="preferred_network_mode_evdo_only_summary" msgid="8472220691721269155">"Željeni režim mreže: samo EvDo"</string>
+    <string name="preferred_network_mode_cdma_evdo_gsm_wcdma_summary" msgid="4726682079415227330">"Željeni režim mreže: CDMA/EvDo/GSM/WCDMA"</string>
+    <string name="preferred_network_mode_lte_summary" msgid="574752287596469136">"Željeni režim mreže: LTE"</string>
+    <string name="preferred_network_mode_lte_gsm_wcdma_summary" msgid="8455358514068283935">"Željeni režim mreže: GSM/WCDMA/LTE"</string>
+    <string name="preferred_network_mode_lte_cdma_evdo_summary" msgid="228702246343742853">"Željeni režim mreže: CDMA+LTE/EVDO"</string>
+    <string name="preferred_network_mode_global_summary" msgid="1633134285545730364">"Željeni režim mreže: Globalno"</string>
+    <string name="preferred_network_mode_lte_wcdma_summary" msgid="9180775701594742750">"Željeni režim mreže: LTE/WCDMA"</string>
+    <string name="preferred_network_mode_lte_gsm_umts_summary" msgid="633315028976225026">"Željeni mrežni režim: LTE/GSM/UMTS"</string>
+    <string name="preferred_network_mode_lte_cdma_summary" msgid="3722647806454528426">"Željeni režim mreže: LTE/CDMA"</string>
+    <string name="preferred_network_mode_tdscdma_summary" msgid="8021016193718678775">"Željeni režim mreže: TDSCDMA"</string>
+  <string-array name="preferred_network_mode_choices">
+    <item msgid="7886739962255042385">"LTE/WCDMA"</item>
+    <item msgid="577652050447385699">"LTE"</item>
+    <item msgid="6813597571293773656">"Globalno"</item>
+    <item msgid="127064712132619032">"GSM/WCDMA/LTE"</item>
+    <item msgid="1126767511633425977">"CDMA + LTE/EvDo"</item>
+    <item msgid="6389676313771670660">"CDMA/EvDo/GSM/WCDMA"</item>
+    <item msgid="545430093607698090">"Samo EvDo"</item>
+    <item msgid="1508557726283094448">"CDMA bez EvDo-a"</item>
+    <item msgid="4341433122263841224">"CDMA/EvDo automatski"</item>
+    <item msgid="5958053792390386668">"GSM/WCDMA automatski"</item>
+    <item msgid="7913148405605373434">"Samo WCDMA"</item>
+    <item msgid="1524224863879435516">"Samo GSM"</item>
+    <item msgid="3817924849415716259">"GSM/WCDMA ima prednost"</item>
+  </string-array>
+    <string name="enhanced_4g_lte_mode_title" msgid="522191650223239171">"Poboljšani 4G LTE režim"</string>
+    <string name="enhanced_4g_lte_mode_summary" msgid="2332175070522125850">"Korišćenje LTE usluga za poboljšanje glasovnih i drugih komunikacija (preporučeno)"</string>
+    <string name="data_enabled" msgid="5972538663568715366">"Podaci su omogućeni"</string>
+    <string name="data_enable_summary" msgid="2382798156640007971">"Omogućavanje potrošnje podataka"</string>
+    <string name="roaming" msgid="8871412572928323707">"Prenos podataka u romingu"</string>
+    <string name="roaming_enable" msgid="7331106985174381987">"Povezivanje sa uslugom za podatke tokom rominga"</string>
+    <string name="roaming_disable" msgid="1843417228755568110">"Povezivanje sa uslugom za podatke tokom rominga"</string>
+    <string name="roaming_reenable_message" msgid="8913735676127858115">"Veza za prenos podataka je prekinuta zato što ste napustili kućnu mrežu sa isključenim prenosom podataka u romingu."</string>
+    <string name="roaming_warning" msgid="1603164667540144353">"Mogu da nastanu značajni troškovi."</string>
+    <string name="roaming_alert_title" msgid="3654815360303826008">"Dozvoljavate li prenos podataka u romingu?"</string>
+    <string name="gsm_umts_options" msgid="6538311689850981686">"Opcije za GSM/UMTS"</string>
+    <string name="cdma_options" msgid="4016822858172249884">"CDMA opcije"</string>
+    <string name="throttle_data_usage" msgid="3715677828160555808">"Korišćenje podataka"</string>
+    <string name="throttle_current_usage" msgid="8762280193043815361">"Podaci korišćeni u trenutnom periodu"</string>
+    <string name="throttle_time_frame" msgid="1915198770363734685">"Period korišćenja podataka"</string>
+    <string name="throttle_rate" msgid="4710388992676803508">"Smernice za ocenu podataka"</string>
+    <string name="throttle_help" msgid="243651091785169900">"Saznajte više"</string>
+    <string name="throttle_status_subtext" msgid="1657318943142085170">"<xliff:g id="USED_0">%1$s</xliff:g> (<xliff:g id="USED_1">%2$d</xliff:g>٪) od <xliff:g id="USED_2">%3$s</xliff:g> maksimalnog perioda\nSledeći period počinje za <xliff:g id="USED_3">%4$d</xliff:g> dana (<xliff:g id="USED_4">%5$s</xliff:g>)"</string>
+    <string name="throttle_data_usage_subtext" msgid="6029276011123694701">"Maksimalno <xliff:g id="USED_0">%1$s</xliff:g> (<xliff:g id="USED_1">%2$d</xliff:g>٪) od <xliff:g id="USED_2">%3$s</xliff:g> perioda"</string>
+    <string name="throttle_data_rate_reduced_subtext" msgid="7492763592720107737">"<xliff:g id="USED_0">%1$s</xliff:g> maksimum je premašen\nStopa prenosa podataka smanjena je na <xliff:g id="USED_1">%2$d</xliff:g> Kb/s"</string>
+    <string name="throttle_time_frame_subtext" msgid="7732763021560399960">"<xliff:g id="USED_0">%1$d</xliff:g>٪  je proteklo od ciklusa\nSledeći period počinje za <xliff:g id="USED_1">%2$d</xliff:g> dana (<xliff:g id="USED_2">%3$s</xliff:g>)"</string>
+    <string name="throttle_rate_subtext" msgid="2149102656120726855">"Brzina prenosa podataka smanjena je na <xliff:g id="USED">%1$d</xliff:g> Kb/s ako je premašeno ograničenje za korišćenje podataka"</string>
+    <string name="throttle_help_subtext" msgid="3633091498168446044">"Više informacija o smernicama za korišćenje podataka mobilne mreže operatera"</string>
+    <string name="cell_broadcast_sms" msgid="5584192824053625842">"SMS info servisa"</string>
+    <string name="enable_disable_cell_bc_sms" msgid="4851147873691392255">"SMS info servisa"</string>
+    <string name="cell_bc_sms_enable" msgid="6441688565738921084">"Omogućen je SMS info servisa"</string>
+    <string name="cell_bc_sms_disable" msgid="3398365088309408749">"Onemogućeno je slanje SMS-a info servisa"</string>
+    <string name="cb_sms_settings" msgid="651715019785107312">"Podešavanja za SMS info servisa"</string>
+    <string name="enable_disable_emergency_broadcast" msgid="2157014609041245335">"Hitan prenos"</string>
+    <string name="emergency_broadcast_enable" msgid="2645980025414010211">"Omogućen je hitan prenos"</string>
+    <string name="emergency_broadcast_disable" msgid="3665199821267569426">"Hitan prenos je onemogućen"</string>
+    <string name="enable_disable_administrative" msgid="6501582322182059412">"Administrativni"</string>
+    <string name="administrative_enable" msgid="1750086122962032235">"Administrativno je omogućeno"</string>
+    <string name="administrative_disable" msgid="8433273857248698539">"Administrativno je onemogućeno"</string>
+    <string name="enable_disable_maintenance" msgid="1819693083025106678">"Održavanje"</string>
+    <string name="maintenance_enable" msgid="8566636458770971189">"Održavanje je omogućeno"</string>
+    <string name="maintenance_disable" msgid="7340189100885066077">"Održavanje je onemogućeno"</string>
+    <string name="general_news_settings" msgid="4968779723948432978">"Opšte vesti"</string>
+    <string name="bf_news_settings" msgid="3935593091894685267">"Poslovne i finansijske vesti"</string>
+    <string name="sports_news_settings" msgid="7649399631270052835">"Sportske vesti"</string>
+    <string name="entertainment_news_settings" msgid="5051153952959405035">"Vesti iz šou-biznisa"</string>
+    <string name="enable_disable_local" msgid="7890281063123416120">"Lokalno"</string>
+    <string name="local_enable" msgid="6370463247609136359">"Lokalne vesti su omogućene"</string>
+    <string name="local_disable" msgid="4405691986943795798">"Onemogućene su lokalne vesti"</string>
+    <string name="enable_disable_regional" msgid="4905652414535565872">"Regionalno"</string>
+    <string name="regional_enable" msgid="4434680415437834759">"Regionalne vesti su omogućene"</string>
+    <string name="regional_disable" msgid="5359325527213850077">"Regionalne vesti su onemogućene"</string>
+    <string name="enable_disable_national" msgid="236278090206880734">"Nacionalno"</string>
+    <string name="national_enable" msgid="1172443648912246952">"Omogućene su nacionalne vesti"</string>
+    <string name="national_disable" msgid="326018148178601166">"Onemogućene su nacionalne vesti"</string>
+    <string name="enable_disable_international" msgid="7535348799604565592">"Međunarodno"</string>
+    <string name="international_enable" msgid="5855356769925044927">"Međunarodne vesti su omogućene"</string>
+    <string name="international_disable" msgid="2850648591041088931">"Međunarodne vesti su onemogućene"</string>
+    <string name="list_language_title" msgid="2841683501919760043">"Jezik"</string>
+    <string name="list_language_summary" msgid="8109546531071241601">"Izaberite jezik vesti"</string>
+  <string-array name="list_language_entries">
+    <item msgid="6137851079727305485">"engleski"</item>
+    <item msgid="1151988412809572526">"francuski"</item>
+    <item msgid="577840534704312665">"španski"</item>
+    <item msgid="8385712091143148180">"japanski"</item>
+    <item msgid="1858401628368130638">"korejski"</item>
+    <item msgid="1933212028684529632">"kineski"</item>
+    <item msgid="1908428006803639064">"hebrejski"</item>
+  </string-array>
+  <string-array name="list_language_values">
+    <item msgid="1804908636436467150">"1"</item>
+    <item msgid="289708030346890334">"2"</item>
+    <item msgid="1121469729692402684">"3"</item>
+    <item msgid="2614093115912897722">"4"</item>
+    <item msgid="2411164639857960614">"5"</item>
+    <item msgid="5884448729274543324">"6"</item>
+    <item msgid="5511864807618312598">"7"</item>
+  </string-array>
+    <string name="list_language_dtitle" msgid="5442908726538951934">"Jezici"</string>
+    <string name="enable_disable_local_weather" msgid="986967454867219114">"Lokalno vreme"</string>
+    <string name="local_weather_enable" msgid="6199315114382448922">"Lokalno vreme je omogućeno"</string>
+    <string name="local_weather_disable" msgid="2510158089142626480">"Lokalno vreme je onemogućeno"</string>
+    <string name="enable_disable_atr" msgid="8339572391278872343">"Izveštaji o lokalnom saobraćaju"</string>
+    <string name="atr_enable" msgid="5541757457789181799">"Omogućeni su izveštaji o lokalnom saobraćaju"</string>
+    <string name="atr_disable" msgid="7085558154727596455">"Onemogućeni su izveštaji o lokalnom saobraćaju"</string>
+    <string name="enable_disable_lafs" msgid="668189073721277199">"Red letenja lokalnog aerodroma"</string>
+    <string name="lafs_enable" msgid="2791978667205137052">"Omogućen je red letenja lokalnog aerodroma"</string>
+    <string name="lafs_disable" msgid="2391212397725495350">"Onemogućen je red letenja lokalnog aerodroma"</string>
+    <string name="enable_disable_restaurants" msgid="6240381945336814024">"Restorani"</string>
+    <string name="restaurants_enable" msgid="5137657479469118847">"Restorani su omogućeni"</string>
+    <string name="restaurants_disable" msgid="3678480270938424092">"Restorani su onemogućeni"</string>
+    <string name="enable_disable_lodgings" msgid="1822029172658551202">"Evidencije"</string>
+    <string name="lodgings_enable" msgid="3230042508992850322">"Dnevnici su omogućeni"</string>
+    <string name="lodgings_disable" msgid="3387879742320682391">"Evidencije su onemogućene"</string>
+    <string name="enable_disable_retail_directory" msgid="1357809784475660303">"Katalog maloprodaje"</string>
+    <string name="retail_directory_enable" msgid="3280626290436111496">"Omogućen je katalog maloprodaje"</string>
+    <string name="retail_directory_disable" msgid="6479739816662879027">"Onemogućen je katalog maloprodaje"</string>
+    <string name="enable_disable_advertisements" msgid="5999495926176182128">"Oglasi"</string>
+    <string name="advertisements_enable" msgid="2050305021264683786">"Oglasi su omogućeni"</string>
+    <string name="advertisements_disable" msgid="8350985908788707935">"Oglasi su onemogućeni"</string>
+    <string name="enable_disable_stock_quotes" msgid="6397810445293533603">"Cene akcija"</string>
+    <string name="stock_quotes_enable" msgid="4384802470887170543">"Omogućene su cene akcija"</string>
+    <string name="stock_quotes_disable" msgid="4781450084565594998">"Cene akcija su onemogućene"</string>
+    <string name="enable_disable_eo" msgid="4863043263443942494">"Mogućnosti za zapošljavanje"</string>
+    <string name="eo_enable" msgid="8623559062015685813">"Mogućnosti za zapošljavanje su omogućene"</string>
+    <string name="eo_disable" msgid="3863812478090907609">"Mogućnosti za zapošljavanje su onemogućene"</string>
+    <string name="enable_disable_mhh" msgid="908214593528968522">"Medicina, zdravlje i bolnica"</string>
+    <string name="mhh_enable" msgid="5544500632306446815">"Medicina, zdravlje i bolnica su omogućeni"</string>
+    <string name="mhh_disable" msgid="8998210550117117437">"Medicina, zdravlje i bolnica su onemogućeni"</string>
+    <string name="enable_disable_technology_news" msgid="3517184627114999149">"Vesti iz tehnologije"</string>
+    <string name="technology_news_enable" msgid="7995209394210455181">"Vesti iz tehnologije su omogućene"</string>
+    <string name="technology_news_disable" msgid="5483490380561851946">"Vesti iz tehnologije su onemogućene"</string>
+    <string name="enable_disable_multi_category" msgid="626771003122899280">"Više kategorija"</string>
+    <string name="multi_category_enable" msgid="1179299804641721768">"Omogućeno je više kategorija"</string>
+    <string name="multi_category_disable" msgid="880104702904139505">"Onemogućeno je više kategorija"</string>
+    <string name="network_lte" msgid="7702681952521375754">"LTE (preporučeno)"</string>
+    <string name="network_4G" msgid="2723512640529983138">"4G (preporučeno)"</string>
+    <string name="network_global" msgid="1323190488685355309">"Globalno"</string>
+    <string name="cdma_system_select_title" msgid="5757657769327732833">"Izbor sistema"</string>
+    <string name="cdma_system_select_summary" msgid="60460043745797517">"Promena režima CDMA rominga"</string>
+    <string name="cdma_system_select_dialogtitle" msgid="6083355415165359075">"Izbor sistema"</string>
+  <string-array name="cdma_system_select_choices">
+    <item msgid="176474317493999285">"Samo početna"</item>
+    <item msgid="1205664026446156265">"Automatski"</item>
+  </string-array>
+    <string name="cdma_subscription_title" msgid="1162564010076763284">"CDMA prijava"</string>
+    <string name="cdma_subscription_summary" msgid="2530890766115781140">"Promeni između RUIM/SIM i NV"</string>
+    <string name="cdma_subscription_dialogtitle" msgid="2699527950523333110">"prijava"</string>
+  <string-array name="cdma_subscription_choices">
+    <item msgid="2258014151300708431">"RUIM/SIM"</item>
+    <item msgid="5127722015571873880">"NV"</item>
+  </string-array>
+  <string-array name="cdma_subscription_values">
+    <item msgid="7494167883478914080">"0"</item>
+    <item msgid="6043847456049107742">"1"</item>
+  </string-array>
+    <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_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="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_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>
+    <string name="voice_privacy_summary" msgid="3159383389833516214">"Omogući poboljšan režim privatnosti"</string>
+    <string name="tty_mode_option_title" msgid="9033098925144434669">"TTY režim"</string>
+    <string name="tty_mode_option_summary" msgid="1073835131534808732">"Podesi TTY režim"</string>
+    <string name="auto_retry_mode_title" msgid="4073265511427813322">"Automatski ponovni pokušaj"</string>
+    <string name="auto_retry_mode_summary" msgid="4973886004067532288">"Omogućavanje režima automatskog ponovnog pokušaja"</string>
+    <string name="tty_mode_not_allowed_video_call" msgid="3795846787901909176">"Promena TTY režima nije dozvoljena tokom video poziva"</string>
+    <string name="menu_add" msgid="1882023737425114762">"Dodaj kontakt"</string>
+    <string name="menu_edit" msgid="7143003705504672374">"Izmeni kontakt"</string>
+    <string name="menu_delete" msgid="3977150783449642851">"Izbriši kontakt"</string>
+    <string name="get_pin2" msgid="8204677063922225311">"Unesite PIN2"</string>
+    <string name="name" msgid="7329028332786872378">"Ime"</string>
+    <string name="number" msgid="7905950798349903858">"Broj"</string>
+    <string name="save" msgid="4094274636321939086">"Sačuvaj"</string>
+    <string name="add_fdn_contact" msgid="2481915899633353976">"Dodaj broj za fiksno biranje"</string>
+    <string name="adding_fdn_contact" msgid="7627379633721940991">"Dodavanje broja za fiksno biranje…"</string>
+    <string name="fdn_contact_added" msgid="7458335758501736665">"Dodat je broj za fiksno biranje."</string>
+    <string name="edit_fdn_contact" msgid="7976936035587081480">"Izmeni broj za fiksno biranje"</string>
+    <string name="updating_fdn_contact" msgid="8370929876849803600">"Ažuriranje broja za fiksno biranje…"</string>
+    <string name="fdn_contact_updated" msgid="5497828782609005017">"Ažuriran je broj za fiksno biranje."</string>
+    <string name="delete_fdn_contact" msgid="6668958073074151717">"Izbriši broj za fiksno biranje"</string>
+    <string name="deleting_fdn_contact" msgid="5669163206349319969">"Brisanje broja za fiksno biranje…"</string>
+    <string name="fdn_contact_deleted" msgid="7154162327112259569">"Izbrisan je broj za fiksno biranje."</string>
+    <string name="pin2_invalid" msgid="5470854099230755944">"Broj za fiksno biranje nije ažuriran jer ste uneli netačan PIN kôd."</string>
+    <string name="fdn_invalid_number" msgid="1494755047900009147">"Broj za fiksno biranje nije ažuriran jer broj ne sme da premašuje 20 cifara."</string>
+    <string name="pin2_or_fdn_invalid" msgid="6025144083384701197">"FDN nije ažuriran. PIN2 je netačan ili je broj telefona odbačen."</string>
+    <string name="fdn_failed" msgid="540018079008319747">"Radnja sa brojem za fiksno biranje nije uspela."</string>
+    <string name="simContacts_emptyLoading" msgid="2203331234764498011">"Čita se sa SIM kartice…"</string>
+    <string name="simContacts_empty" msgid="5270660846489561932">"Nema kontakata na SIM kartici."</string>
+    <string name="simContacts_title" msgid="1861472842524839921">"Izbor kontakata za uvoz"</string>
+    <string name="simContacts_airplaneMode" msgid="5254946758982621072">"Isključite režim rada u avionu da biste uvezli kontakte sa SIM kartice."</string>
+    <string name="enable_pin" msgid="5422767284133234860">"Omogućavanje/onemogućavanje SIM PIN-a"</string>
+    <string name="change_pin" msgid="9174186126330785343">"Promena SIM PIN-a"</string>
+    <string name="enter_pin_text" msgid="8532615714751931951">"SIM PIN:"</string>
+    <string name="oldPinLabel" msgid="5287773661246368314">"Stari PIN"</string>
+    <string name="newPinLabel" msgid="207488227285336897">"Novi PIN"</string>
+    <string name="confirmPinLabel" msgid="257597715098070206">"Potvrdite novi PIN"</string>
+    <string name="badPin" msgid="8955102849303984935">"Stari PIN kôd koji ste uneli je netačan. Pokušajte ponovo."</string>
+    <string name="mismatchPin" msgid="5923253370683071889">"PIN kodovi koje ste uneli se ne podudaraju. Pokušajte ponovo."</string>
+    <string name="invalidPin" msgid="5981171102258684792">"Otkucajte PIN koji ima od 4 do 8 brojeva."</string>
+    <string name="disable_sim_pin" msgid="3419351358300716472">"Brisanje PIN-a za SIM"</string>
+    <string name="enable_sim_pin" msgid="4845145659651484248">"Podešavanje PIN-a za SIM"</string>
+    <string name="enable_in_progress" msgid="3417917024688497010">"PIN se podešava…"</string>
+    <string name="enable_pin_ok" msgid="2918545971413270063">"PIN je podešen"</string>
+    <string name="disable_pin_ok" msgid="2109571368635883688">"PIN je obrisan"</string>
+    <string name="pin_failed" msgid="5644377896213584760">"PIN nije tačan"</string>
+    <string name="pin_changed" msgid="4455736268023261662">"PIN je ažuriran"</string>
+    <string name="puk_requested" msgid="5921393215789090200">"Lozinka nije tačna. PIN je sada blokiran. Potreban je PUK."</string>
+    <string name="enter_pin2_text" msgid="8339444124477720345">"PIN2"</string>
+    <string name="oldPin2Label" msgid="8559146795026261502">"Stari PIN2"</string>
+    <string name="newPin2Label" msgid="4573956902204349054">"Novi PIN2"</string>
+    <string name="confirmPin2Label" msgid="8100319484454787708">"Potvrdite novi PIN2"</string>
+    <string name="badPuk2" msgid="7910064009531541708">"PUK2 nije tačan. Pokušajte ponovo."</string>
+    <string name="badPin2" msgid="6646896629970023109">"Stari PIN2 nije tačan. Pokušajte ponovo."</string>
+    <string name="mismatchPin2" msgid="4177967478551851117">"PIN2 kodovi se ne podudaraju. Pokušajte ponovo."</string>
+    <string name="invalidPin2" msgid="1757045131429105595">"Unesite PIN2 koji sadrži 4 do 8 cifara."</string>
+    <string name="invalidPuk2" msgid="7059081153334815973">"Unesite PUK2 koji sadrži 8 cifara."</string>
+    <string name="pin2_changed" msgid="3724522579945610956">"PIN2 je ažuriran"</string>
+    <string name="label_puk2_code" msgid="4688069961795341948">"Unesite kôd PUK2"</string>
+    <string name="fdn_enable_puk2_requested" msgid="4991074891459554705">"Lozinka nije tačna. PIN2 je sada blokiran. Da biste pokušali ponovo, promenite PIN 2."</string>
+    <string name="puk2_requested" msgid="5831015200030161434">"Lozinka nije tačna. SIM je sada blokiran. Unesite PUK2."</string>
+    <string name="puk2_blocked" msgid="3150263853077280049">"PUK2 je trajno blokiran."</string>
+    <string name="pin2_attempts" msgid="720736232885011507">\n"Imate još <xliff:g id="NUMBER">%d</xliff:g> pokušaja."</string>
+    <string name="pin2_unblocked" msgid="7791600368153469078">"PIN2 više nije blokiran"</string>
+    <string name="pin2_error_exception" msgid="1088689322248996699">"Greška na mreži ili SIM kartici"</string>
+    <string name="doneButton" msgid="2859593360997984240">"Gotovo"</string>
+    <string name="voicemail_settings_number_label" msgid="8524164258691887790">"Broj govorne pošte"</string>
+    <string name="card_title_dialing" msgid="5769417478498348054">"Poziva se"</string>
+    <string name="card_title_redialing" msgid="8253487008234167266">"Ponovno biranje"</string>
+    <string name="card_title_conf_call" msgid="1162980346189744501">"Konferencijski poziv"</string>
+    <string name="card_title_incoming_call" msgid="7364539451234646909">"Dolazni poziv"</string>
+    <string name="card_title_call_ended" msgid="5544730338889702298">"Poziv je završen"</string>
+    <string name="card_title_on_hold" msgid="821463117892339942">"Na čekanju"</string>
+    <string name="card_title_hanging_up" msgid="3999101620995182450">"Prekid veze"</string>
+    <string name="card_title_in_call" msgid="6346543933068225205">"U pozivu"</string>
+    <string name="notification_voicemail_title" msgid="8933468752045550523">"Nova govorna pošta"</string>
+    <string name="notification_voicemail_title_count" msgid="4366360747660929916">"Nova govorna pošta (<xliff:g id="COUNT">%d</xliff:g>)"</string>
+    <string name="notification_voicemail_text_format" msgid="4447323569453981685">"Pozovi <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
+    <string name="notification_voicemail_no_vm_number" msgid="760963466895609716">"Nepoznat broj govorne pošte"</string>
+    <string name="notification_network_selection_title" msgid="4224455487793492772">"Nema usluge"</string>
+    <string name="notification_network_selection_text" msgid="2607085729661923269">"Izabrana mreža (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) nije dostupna"</string>
+    <string name="incall_error_power_off" msgid="2947938060513306698">"Isključite režim rada u avionu da biste uputili poziv."</string>
+    <string name="incall_error_power_off_wfc" msgid="8711428920632416575">"Isključite režim rada u avionu ili se povežite na bežičnu mrežu da biste uputili poziv."</string>
+    <string name="incall_error_ecm_emergency_only" msgid="738708660612388692">"Izađite iz režima hitnog povratnog poziva da biste uputili poziv koji nije hitan."</string>
+    <string name="incall_error_emergency_only" msgid="4678640422710818317">"Nije registrovano na mreži."</string>
+    <string name="incall_error_out_of_service" msgid="4100065333878929223">"Mobilna mreža nije dostupna."</string>
+    <string name="incall_error_out_of_service_wfc" msgid="323851839058697057">"Mobilna mreža nije dostupna. Povežite se na bežičnu mrežu da biste uputili poziv."</string>
+    <string name="incall_error_no_phone_number_supplied" msgid="1150414018684246528">"Da biste uputili poziv, unesite važeći broj."</string>
+    <string name="incall_error_call_failed" msgid="6302746943230078197">"Poziv nije uspeo."</string>
+    <string name="incall_status_dialed_mmi" msgid="3672498861336189563">"Pokretanje MMI sekvence"</string>
+    <string name="incall_error_supp_service_unknown" msgid="655570339115407698">"Usluga nije podržana"</string>
+    <string name="incall_error_supp_service_switch" msgid="5237002176899962862">"Zamena poziva nije uspela."</string>
+    <string name="incall_error_supp_service_separate" msgid="7224393405134545246">"Razdvajanje poziva nije uspelo."</string>
+    <string name="incall_error_supp_service_transfer" msgid="7235952238189391438">"Prebacivanje nije uspelo."</string>
+    <string name="incall_error_supp_service_conference" msgid="2505727299596357312">"Konferencijski pozivi nisu mogući."</string>
+    <string name="incall_error_supp_service_reject" msgid="8998568661508655638">"Odbijanje poziva nije uspelo."</string>
+    <string name="incall_error_supp_service_hangup" msgid="7434513517153834426">"Uspostavljanje poziva nije uspelo."</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="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>
+    <string name="dial_emergency_error" msgid="1509085166367420355">"Poziv nije uspeo. <xliff:g id="NON_EMERGENCY_NUMBER">%s</xliff:g> nije broj za hitne slučajeve."</string>
+    <string name="dial_emergency_empty_error" msgid="9130194953830414638">"Poziv nije uspeo. Pozovite broj za hitne slučajeve."</string>
+    <string name="dialerKeyboardHintText" msgid="9192914825413747792">"Koristite tastaturu za pozivanje"</string>
+    <string name="onscreenHoldText" msgid="2285258239691145872">"Čekanje"</string>
+    <string name="onscreenEndCallText" msgid="4403855834875398585">"Završi"</string>
+    <string name="onscreenShowDialpadText" msgid="8561805492659639893">"Numerička tastatura"</string>
+    <string name="onscreenMuteText" msgid="5011369181754261374">"Isključi zvuk"</string>
+    <string name="onscreenAddCallText" msgid="5140385634712287403">"Dodaj poziv"</string>
+    <string name="onscreenMergeCallsText" msgid="6640195098064538950">"Objedini pozive"</string>
+    <string name="onscreenSwapCallsText" msgid="1602990689244030047">"Zameni"</string>
+    <string name="onscreenManageCallsText" msgid="5473231160123254154">"Upravljajte pozivima"</string>
+    <string name="onscreenManageConferenceText" msgid="6485935856534311346">"Upravljaj konferencijom"</string>
+    <string name="onscreenAudioText" msgid="1710087112800041743">"Audio"</string>
+    <string name="onscreenVideoCallText" msgid="4800924186056115442">"Video poz."</string>
+    <string name="importSimEntry" msgid="6614358325359736031">"Uvezi"</string>
+    <string name="importAllSimEntries" msgid="1503181169636198673">"Uvezi sve"</string>
+    <string name="importingSimContacts" msgid="7374056215462575769">"Uvoz SIM kontakata"</string>
+    <string name="importToFDNfromContacts" msgid="2130620207013368580">"Uvezi iz kontakata"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Kontakt je uvezen"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Uvoz kontakta nije uspeo"</string>
+    <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="3971695875449640648">"TTY je pun"</item>
+    <item msgid="1937509904407445684">"TTY HCO"</item>
+    <item msgid="5644925873488772224">"TTY VCO"</item>
+  </string-array>
+    <string name="dtmf_tones_title" msgid="5163153771291340803">"DTMF tonovi"</string>
+    <string name="dtmf_tones_summary" msgid="3351820372864020331">"Podesi jačinu DTMF tonova"</string>
+  <string-array name="dtmf_tone_entries">
+    <item msgid="899650777817315681">"Normalan"</item>
+    <item msgid="2883365539347850535">"Dugačak"</item>
+  </string-array>
+    <string name="network_info_message" msgid="7738596060242881930">"Mrežna poruka"</string>
+    <string name="network_error_message" msgid="3394780436230411413">"Poruka o grešci"</string>
+    <string name="ota_title_activate" msgid="8616918561356194398">"Aktivirajte telefon"</string>
+    <string name="ota_touch_activate" msgid="6553212803262586244">"Potrebno je da uputite poseban poziv da biste aktivirali uslugu svoj telefona. \n\nNakon što pritisnete dugme „Aktiviraj“, slušajte data uputstva da biste da biste aktivirali svoj telefon."</string>
+    <string name="ota_hfa_activation_title" msgid="2234246934160473981">"Aktiviranje..."</string>
+    <string name="ota_hfa_activation_dialog_message" msgid="8092479227918463415">"Telefon aktivira uslugu mobilnog prenosa podataka.\n\nTo može da potraje i do 5 minuta."</string>
+    <string name="ota_skip_activation_dialog_title" msgid="2943366608272261306">"Želite li da preskočite aktivaciju?"</string>
+    <string name="ota_skip_activation_dialog_message" msgid="2440770373498870550">"Ako preskočite aktivaciju, ne možete da upućujete pozive ili da se povezujete sa mrežama za mobilni prenos podataka (iako možete da se povežete sa Wi-Fi mrežama). Sve dok ne aktivirate svoj telefon, bićete upitani da to učinite svaki put kada ga uključite."</string>
+    <string name="ota_skip_activation_dialog_skip_label" msgid="3458532775091563208">"Preskoči"</string>
+    <string name="ota_activate" msgid="1368528132525626264">"Aktiviraj"</string>
+    <string name="ota_title_activate_success" msgid="6570240212263372046">"Telefon je aktiviran."</string>
+    <string name="ota_title_problem_with_activation" msgid="7095824491970084367">"Problem sa aktivacijom"</string>
+    <string name="ota_listen" msgid="162923839877584937">"Sledite izgovorena uputstva sve dok ne čujete da je aktivacija završena."</string>
+    <string name="ota_speaker" msgid="6904589278542719647">"Zvučnik"</string>
+    <string name="ota_progress" msgid="460876637828044519">"Telefon se programira…"</string>
+    <string name="ota_failure" msgid="7713756181204620397">"Programiranje telefona nije uspelo"</string>
+    <string name="ota_successful" msgid="1880780692887077407">"Telefon je sada aktiviran. Možda će biti potrebno najviše 15 minuta da bi se usluga pokrenula."</string>
+    <string name="ota_unsuccessful" msgid="8072141612635635357">"Telefon se nije aktivirao. \nMožda je potrebno da pronađete oblast sa boljom pokrivenošću (blizu prozora ili napolju). \n\nPokušajte ponovo ili pozovite korisničku podršku za još opcija."</string>
+    <string name="ota_spc_failure" msgid="3909983542575030796">"SLUČAJNA SPC GREŠKA"</string>
+    <string name="ota_call_end" msgid="4537279738134612388">"Nazad"</string>
+    <string name="ota_try_again" msgid="7685477206465902290">"Pokušaj ponovo"</string>
+    <string name="ota_next" msgid="3904945374358235910">"Sledeće"</string>
+    <string name="ecm_exit_dialog" msgid="4448531867763097533">"Dijalog za izlazak iz režima hitnog povratnog poziva"</string>
+    <string name="phone_entered_ecm_text" msgid="6266424252578731203">"Unet je režim za hitan povratni poziv"</string>
+    <string name="phone_in_ecm_notification_title" msgid="3226896828951687085">"Režim za hitan povratni poziv"</string>
+    <string name="phone_in_ecm_call_notification_text" msgid="4611608947314729773">"Veza za prenos podataka je onemogućena"</string>
+    <plurals name="phone_in_ecm_notification_time" formatted="false" msgid="8308381858502470919">
+      <item quantity="one">Nema veze za prenos podataka <xliff:g id="COUNT_1">%s</xliff:g> minuta</item>
+      <item quantity="few">Nema veze za prenos podataka <xliff:g id="COUNT_1">%s</xliff:g> minuta</item>
+      <item quantity="other">Nema veze za prenos podataka <xliff:g id="COUNT_1">%s</xliff:g> minuta</item>
+    </plurals>
+    <plurals name="alert_dialog_exit_ecm" formatted="false" msgid="7179911675595441201">
+      <item quantity="one">Telefon će biti u Režimu hitnog povratnog poziva <xliff:g id="COUNT_1">%s</xliff:g> minut. Dok je u ovom režimu ne možete da koristite aplikacije koje koriste vezu za prenos podataka. Želite li odmah da izađete iz ovog režima?</item>
+      <item quantity="few">Telefon će biti u Režimu hitnog povratnog poziva <xliff:g id="COUNT_1">%s</xliff:g> minuta. Dok je u ovom režimu ne možete da koristite aplikacije koje koriste vezu za prenos podataka. Želite li odmah da izađete iz ovog režima?</item>
+      <item quantity="other">Telefon će biti u Režimu hitnog povratnog poziva <xliff:g id="COUNT_1">%s</xliff:g> minuta. Dok je u ovom režimu ne možete da koristite aplikacije koje koriste vezu za prenos podataka. Želite li odmah da izađete iz ovog režima?</item>
+    </plurals>
+    <plurals name="alert_dialog_not_avaialble_in_ecm" formatted="false" msgid="8042973425225093895">
+      <item quantity="one">Izabrana radnja nije dostupna dok ste u Režimu hitnog povratnog poziva. Telefon će biti u ovom režimu <xliff:g id="COUNT_1">%s</xliff:g> minut. Želite li odmah da izađete iz ovog režima?</item>
+      <item quantity="few">Izabrana radnja nije dostupna dok ste u Režimu hitnog povratnog poziva. Telefon će biti u ovom režimu <xliff:g id="COUNT_1">%s</xliff:g> minuta. Želite li odmah da izađete iz ovog režima?</item>
+      <item quantity="other">Izabrana radnja nije dostupna dok ste u Režimu hitnog povratnog poziva. Telefon će biti u ovom režimu <xliff:g id="COUNT_1">%s</xliff:g> minuta. Želite li odmah da izađete iz ovog režima?</item>
+    </plurals>
+    <string name="alert_dialog_in_ecm_call" msgid="1886723687211887104">"Izabrana radnja nije dostupna kada je u toku hitan poziv"</string>
+    <string name="progress_dialog_exiting_ecm" msgid="4835734101617817074">"Izlazak iz Režima hitnog povratnog poziva"</string>
+    <string name="alert_dialog_yes" msgid="6674268047820703974">"Da"</string>
+    <string name="alert_dialog_no" msgid="1476091437797628703">"Ne"</string>
+    <string name="alert_dialog_dismiss" msgid="2491494287075907171">"Odbaci"</string>
+    <string name="voicemail_provider" msgid="5135942703327136909">"Usluga"</string>
+    <string name="voicemail_settings" msgid="72448049107749316">"Podešavanje"</string>
+    <string name="voicemail_number_not_set" msgid="6724904736891087856">"&lt;Nije podešeno&gt;"</string>
+    <string name="other_settings" msgid="3672912580359716394">"Druga podešavanja poziva"</string>
+    <string name="calling_via_template" msgid="4839419581866928142">"Pozivanje preko <xliff:g id="PROVIDER_NAME">%s</xliff:g>"</string>
+    <string name="contactPhoto" msgid="4713193418046639466">"fotografija kontakta"</string>
+    <string name="goPrivate" msgid="865837794424530980">"idi na privatno"</string>
+    <string name="selectContact" msgid="781975788478987237">"izaberite kontakt"</string>
+    <string name="not_voice_capable" msgid="2739898841461577811">"Audio pozivi nisu podržani"</string>
+    <string name="description_dial_button" msgid="7459705245418435351">"biranje"</string>
+    <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_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>
+    <string name="enable_video_calling_title" msgid="7237253660669000899">"Uključi video pozive"</string>
+    <string name="enable_video_calling_dialog_msg" msgid="8948186136957417948">"Da biste uključili video pozive, treba da omogućite Poboljšani 4G LTE režim u podešavanjima mreže."</string>
+    <string name="enable_video_calling_dialog_settings" msgid="576528473599603249">"Podešavanja mreže"</string>
+    <string name="enable_video_calling_dialog_close" msgid="7411471282167927991">"Zatvori"</string>
+    <string name="sim_label_emergency_calls" msgid="4847699229529306397">"Hitni pozivi"</string>
+    <string name="sim_description_emergency_calls" msgid="7535215397212301562">"Samo za hitne pozive"</string>
+    <string name="sim_description_default" msgid="4778679519938775515">"SIM kartica, otvor: <xliff:g id="SLOT_ID">%s</xliff:g>"</string>
+    <string name="accessibility_settings_activity_title" msgid="8562004288733103868">"Pristupačnost"</string>
+    <string name="status_hint_label_incoming_wifi_call" msgid="8772915926382037499">"Dolazni Wi-Fi poziv"</string>
+    <string name="status_hint_label_wifi_call" msgid="8900805254974653903">"Wi-Fi poziv"</string>
+    <string name="emergency_action_launch_hint" msgid="5841511849007540970">"Dodirnite ponovo da biste otvorili"</string>
+    <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>
+</resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 1e476f2..84bee9e 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Деактивирано"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Операторът ви не поддържа деактивиране на пренасочването на обаждания, когато няма връзка с телефона."</string>
     <string name="updating_title" msgid="6146755386174019046">"Настройки за обаждане"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Само основният потребител може да променя настройките за обаждане."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Само администраторът може да променя настройките за обаждане."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Настройки (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Грешка в настройките за обаждане"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Извършва се четене на настройки…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Импортиране на всички"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Импортиране на контактите от SIM картата"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Импортиране от контактите"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Контактът е импортиран"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Импортирането на контакта не бе успешно"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Слухови апарати"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Включване на съвместимостта за слухов апарат"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml
index 83886d9..fd3b8d7 100644
--- a/res/values-bn-rBD/strings.xml
+++ b/res/values-bn-rBD/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"অক্ষম করা হয়েছে"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"আপনার ক্যারিয়ার আপনার ফোনের সাথে যখন সংযোগ স্থাপন করা যাচ্ছে না সেই অবস্থায় কল ফরওয়ার্ডিংকে অক্ষম করা সমর্থন করে না৷"</string>
     <string name="updating_title" msgid="6146755386174019046">"কল সেটিংস"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"কেবলমাত্র প্রাথমিক ব্যবহারকারী কল সেটিংস পরিবর্তন করতে পারবেন৷"</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"কেবলমাত্র প্রশাসক ব্যবহারকারী কল সেটিংস পরিবর্তন করতে পারবেন৷"</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"সেটিংস (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"কল সেটিংসে ত্রুটি"</string>
     <string name="reading_settings" msgid="1920291699287055284">"সেটিংস পড়ছে…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"সবকিছু আমদানি করুন"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"সিম পরিচিতিগুলি আমদানি করা হচ্ছে"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"পরিচিতিগুলি থেকে আমদানি করুন"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"পরিচিতি আমদানি করা হয়েছে"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"পরিচিতি আমদানি করতে ব্যর্থ হয়েছে"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"শ্রবণ যন্ত্রগুলি"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"শ্রবণ যন্ত্র উপযুক্ততা চালু করুন"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index cd24482..c6ced01 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Desactivat"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"El teu operador de telefonia mòbil no permet desactivar la desviació de trucades quan el telèfon estigui il·localitzable."</string>
     <string name="updating_title" msgid="6146755386174019046">"Configuració de trucada"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Només l\'usuari principal pot canviar la configuració de trucades."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Només l\'administrador pot canviar la configuració de trucades."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Configuració (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Error de configuració de trucada"</string>
     <string name="reading_settings" msgid="1920291699287055284">"S\'està llegint la configuració…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Importa-ho tot"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"S\'estan important els contactes de la SIM"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Importa dels contactes"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"El contacte s\'ha importat"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Error en importar el contacte"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Audiòfons"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Activa la compatibilitat amb audiòfons"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 1c3e34a..6ebb4c1 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Vypnuto"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Váš operátor neumožňuje deaktivovat přesměrování hovorů, když je telefon nedostupný."</string>
     <string name="updating_title" msgid="6146755386174019046">"Nastavení hovorů"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Nastavení hovorů může změnit pouze primární uživatel."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Nastavení hovorů může změnit pouze uživatel s oprávněním administrátora."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Nastavení (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Chyba nastavení hovorů"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Načítání nastavení..."</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Importovat vše"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Importování kontaktů ze SIM karty"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Import z kontaktů"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Kontakt byl importován"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Kontakt se nepodařilo importovat"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Naslouchátka"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Zapnout režim kompatibility s naslouchátkem"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 7938179..85f4bf2 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Deaktiveret"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Dit mobilselskab understøtter ikke deaktivering af viderestilling af opkald, når telefonen ikke er tilgængelig."</string>
     <string name="updating_title" msgid="6146755386174019046">"Indstillinger for opkald"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Opkaldsindstillinger kan kun ændres af den primære bruger."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Opkaldsindstillingerne kan kun ændres af administratorbrugeren."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Indstillinger (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Fejl i indstillinger for opkald"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Læser indstillinger ..."</string>
@@ -470,6 +470,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Importer alle"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Importerer SIM-kontakter"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Importer fra kontakter"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Kontaktpersonen blev importeret"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Kontaktpersonen kunne ikke importeres"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Høreapparater"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Slå høreapparatskompatibilitet til"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 2a4c6fc..e895256 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Deaktiviert"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Dein Mobilfunkanbieter unterstützt die Deaktivierung der Anrufweiterleitung bei Nichterreichbarkeit nicht."</string>
     <string name="updating_title" msgid="6146755386174019046">"Anrufeinstellungen"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Anrufeinstellungen können nur vom primären Nutzer geändert werden."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Anrufeinstellungen können nur vom Administrator geändert werden."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Einstellungen (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Fehler bei Anrufeinstellungen"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Einstellungen werden gelesen…"</string>
@@ -468,6 +468,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Alle importieren"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"SIM-Kontakte werden importiert"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Aus Kontakten importieren"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Kontakt wird importiert."</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Fehler beim Importieren des Kontakts"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Hörhilfen"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Hörhilfekompatibilität aktivieren"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 78a1cac..cda79f4 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Απενεργοποιημένη"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Η εταιρεία κινητής τηλεφωνίας δεν υποστηρίζει την απενεργοποίηση της προώθησης κλήσεων όταν το τηλέφωνό σας δεν έχει σήμα."</string>
     <string name="updating_title" msgid="6146755386174019046">"Ρυθμίσεις κλήσης"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Οι ρυθμίσεις κλήσεων μπορούν να αλλάξουν μόνο από τον κύριο χρήστη."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Οι ρυθμίσεις κλήσεων μπορούν να αλλάξουν μόνο από τον χρήστη που έχει ρόλο διαχειριστή."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Ρυθμίσεις (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Σφάλμα ρυθμίσεων κλήσης"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Ανάγνωση ρυθμίσεων…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Εισαγωγή όλων"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Εισαγωγή επαφών από κάρτα SIM"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Εισαγωγή από επαφές"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Εισαγόμενη επαφή"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Αποτυχία εισαγωγής επαφής"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Βοηθήματα ακρόασης"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Ενεργοποίηση συμβατότητας βοηθήματος ακρόασης"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index a9eaf67..03d313a 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Disabled"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Your operator doesn\'t support disabling call forwarding when your phone is unreachable."</string>
     <string name="updating_title" msgid="6146755386174019046">"Call settings"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Call settings can only be changed by the primary user."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Call settings can only be changed by the admin user."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Settings (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Call settings error"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Reading settings…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Import all"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Importing SIM contacts"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Import from contacts"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Imported contact"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Failed to import contact"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Hearing aids"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Turn on hearing-aid compatibility"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index a9eaf67..03d313a 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Disabled"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Your operator doesn\'t support disabling call forwarding when your phone is unreachable."</string>
     <string name="updating_title" msgid="6146755386174019046">"Call settings"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Call settings can only be changed by the primary user."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Call settings can only be changed by the admin user."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Settings (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Call settings error"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Reading settings…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Import all"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Importing SIM contacts"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Import from contacts"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Imported contact"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Failed to import contact"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Hearing aids"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Turn on hearing-aid compatibility"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index a9eaf67..03d313a 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Disabled"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Your operator doesn\'t support disabling call forwarding when your phone is unreachable."</string>
     <string name="updating_title" msgid="6146755386174019046">"Call settings"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Call settings can only be changed by the primary user."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Call settings can only be changed by the admin user."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Settings (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Call settings error"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Reading settings…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Import all"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Importing SIM contacts"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Import from contacts"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Imported contact"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Failed to import contact"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Hearing aids"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Turn on hearing-aid compatibility"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 4ac0ae5..d504748 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Desactivado"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Tu proveedor no admite la inhabilitación del desvío de llamadas cuando no se puede acceder a tu teléfono."</string>
     <string name="updating_title" msgid="6146755386174019046">"Config. de llamada"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Solo el usuario principal puede cambiar la configuración de llamadas."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Solo el usuario administrador puede cambiar la configuración de llamadas."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Configuración (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Error en configuración de llamada"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Leyendo configuración..."</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Importar todo"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Importando contactos SIM"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Importar desde contactos"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Se importó el contacto"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"No se pudo importar el contacto"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Ayudas auditivas"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Activar compatibilidad de ayuda auditiva"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 194f0ab..61948d6 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Inhabilitado"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Tu operador no permite inhabilitar el desvío de llamadas si no se puede establecer la llamada."</string>
     <string name="updating_title" msgid="6146755386174019046">"Ajustes de llamadas"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"El usuario principal es el único que puede cambiar los ajustes de llamadas."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"El administrador es el único usuario que puede cambiar los ajustes de llamada."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Ajustes (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Error de configuración de llamada"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Leyendo ajustes..."</string>
@@ -468,6 +468,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Importar todos"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Importando contactos de tarjeta SIM..."</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Importar de contactos"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Contacto importado"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Error al importar contactos"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Audífonos"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Activar compatibilidad con audífono"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index 7ff4895..b4e75a5 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Keelatud"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Teie operaator ei toeta kõneedastuse keelamist, kui teie telefon on levist väljas."</string>
     <string name="updating_title" msgid="6146755386174019046">"Kõneseaded"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Kõne seadeid saab muuta ainult peamine kasutaja."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Kõne seadeid saab muuta ainult administraator."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Seaded (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Kõneseadete viga"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Seadete lugemine ..."</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Impordi kõik"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"SIM-kaardi kontaktide importimine"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Impordi kontaktidest"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Kontakt on imporditud"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Kontakti importimine ebaõnnestus"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Kuuldeaparaadid"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Lülita kuuldeaparaadi ühilduvus sisse"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml
index 33d0d5d..2ba20bd 100644
--- a/res/values-eu-rES/strings.xml
+++ b/res/values-eu-rES/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Desgaituta"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Operadoreak ez du dei-desbideratzeak desgaitzea onartzen telefonoa eskuragarri ez dagoen bitartean."</string>
     <string name="updating_title" msgid="6146755386174019046">"Deien ezarpenak"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Erabiltzaile nagusiak soilik alda ditzake deien ezarpenak."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Administratzaileak soilik alda ditzake deien ezarpenak."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Ezarpenak (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Deien ezarpenen errorea"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Ezarpenak irakurtzen…"</string>
@@ -470,6 +470,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Inportatu guztiak"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"SIM txarteleko kontaktuak inportatzen"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Inportatu kontaktuetatik"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Inportatu da kontaktua"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Ezin izan da inportatu kontaktua"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Audiofonoak"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Aktibatu audiofonoen bateragarritasuna"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 577099b..10a14e3 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"غیر فعال شد"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"شرکت مخابراتی شما از غیرفعال کردن هدایت تماس هنگامی که تلفن شما در دسترس نیست پشتیبانی نمی‌کند."</string>
     <string name="updating_title" msgid="6146755386174019046">"تنظیمات تماس"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"فقط کاربر اصلی می‌تواند تنظیمات تماس را تغییر دهد."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"فقط کاربر سرپرست می‌تواند تنظیمات تماس را تغییر دهد."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"تنظیمات (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"خطای تنظیمات تماس"</string>
     <string name="reading_settings" msgid="1920291699287055284">"در حال خواندن تنظیمات..."</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"وارد کردن همه"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"وارد کردن مخاطبین سیم"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"وارد کردن از مخاطبین"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"مخاطب واردشده"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"مخاطب وارد نشد"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"دستگاه‌های کمک شنوایی"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"روشن کردن سازگاری دستگاه کمک شنوایی"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index f17ed20..29cec4d 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Pois käytöstä"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Operaattorisi ei tue soitonsiirtojen poistamista käytöstä puhelimesi ollessa saavuttamattomissa."</string>
     <string name="updating_title" msgid="6146755386174019046">"Puheluasetukset"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Vain ensisijainen käyttäjä voi muuttaa puheluasetuksia."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Vain järjestelmänvalvoja voi muuttaa puheluasetuksia."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Asetukset (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Virhe puheluasetuksissa"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Luetaan asetuksia…"</string>
@@ -468,6 +468,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Tuo kaikki"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Tuodaan SIM-kortin yhteystietoja"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Tuo yhteystiedoista"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Tuotu kontakti"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Kontaktin tuominen epäonnistui"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Kuulolaitteet"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Ota kuulolaitteen yhteensopivuustoiminto käyttöön"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index 873ca61..0f53fca 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Désactivé"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Votre opérateur ne permet pas la désactivation du transfert d\'appel lorsque votre téléphone n\'est pas joignable."</string>
     <string name="updating_title" msgid="6146755386174019046">"Paramètres d\'appel"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Seul l\'utilisateur principal peut modifier les paramètres d\'appel."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Seul l\'administrateur peut modifier les paramètres d\'appel."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Paramètres (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Erreur des paramètres d\'appel"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Lecture des paramètres..."</string>
@@ -468,6 +468,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Tout importer"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Importation des contacts SIM"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Importer à partir des contacts"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Contacts importés"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Impossible d\'importer le contact"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Assistance auditive"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Activer la compatibilité du service d\'assistance auditive"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 8cd55d1..9b3a787 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Désactivé"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Votre opérateur ne permet pas la désactivation du transfert d\'appel lorsque votre téléphone n\'est pas joignable."</string>
     <string name="updating_title" msgid="6146755386174019046">"Paramètres d\'appel"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Seul l\'utilisateur principal peut modifier les paramètres d\'appel."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Seul l\'administrateur peut modifier les paramètres d\'appel."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Paramètres (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Erreur des paramètres d\'appel"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Lecture des paramètres..."</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Tout importer"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Importation des contacts SIM"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Importer à partir des contacts"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Contact importé"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Échec de l\'importation du contact."</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Assistance auditive"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Activer la compatibilité du service d\'assistance auditive"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml
index 843bdf6..7dfa755 100644
--- a/res/values-gl-rES/strings.xml
+++ b/res/values-gl-rES/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Desactivado"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"O teu operador non admite a desactivación do desvío de chamadas cando non se pode acceder ao teléfono."</string>
     <string name="updating_title" msgid="6146755386174019046">"Configuración de chamada"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Só o usuario principal pode cambiar a configuración de chamada."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Só o usuario administrador pode cambiar a configuración de chamada."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Configuración (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Erro de configuración das chamadas"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Lendo a configuración..."</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Importar todo"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Importando contactos da SIM"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Importar dos contactos"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Importouse o contacto"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Produciuse un erro ao importar o contacto"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Audiófonos"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Activar a compatibilidade con audiófonos"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu-rIN/strings.xml
index f2ed5da..e78079d 100644
--- a/res/values-gu-rIN/strings.xml
+++ b/res/values-gu-rIN/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"અક્ષમ કરેલું"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"જ્યારે તમારો ફોન પહોંચયોગ્ય ન હોય ત્યારે તમારા કેરિઅર કૉલ ફોરવર્ડિંગને અક્ષમ કરવાને સમર્થન આપતા નથી."</string>
     <string name="updating_title" msgid="6146755386174019046">"કૉલ સેટિંગ્સ"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"કૉલ સેટિંગ્સને ફક્ત પ્રાથમિક વપરાશકર્તા દ્વારા જ બદલી શકાય છે."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"કૉલ સેટિંગ્સને ફક્ત એડમિન વપરાશકર્તા દ્વારા જ બદલી શકાય છે."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"સેટિંગ્સ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"કૉલ સેટિંગ્સની ભૂલ"</string>
     <string name="reading_settings" msgid="1920291699287055284">"સેટિંગ્સ વાંચી રહ્યાં છે…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"બધુ આયાત કરો"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"SIM સંપર્કો આયાત કરી રહ્યાં છે"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"સંપર્કોમાંથી આયાત કરો"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"સંપર્ક આયાત કર્યો"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"સંપર્ક આયાત કરવામાં નિષ્ફળ થયાં"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"સાંભળવામાં સહાયો"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"સાંભળવું અને સુસંગતતા ચાલુ કરો"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index cb219b9..fe78eb4 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"अक्षम की गई"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"जब आपका फ़ोन पहुंच योग्य न हो, तो आपका कैरियर कॉल अग्रेषण अक्षम करने का समर्थन नहीं करता."</string>
     <string name="updating_title" msgid="6146755386174019046">"कॉल सेटिंग"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"कॉल सेटिंग केवल प्राथमिक उपयोगकर्ता द्वारा ही बदली जा सकती हैं."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"कॉल सेटिंग केवल व्यवस्थापक उपयोगकर्ता द्वारा ही बदली जा सकती हैं."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"सेटिंग (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"कॉल सेटिंग त्रुटि"</string>
     <string name="reading_settings" msgid="1920291699287055284">"सेटिंग पढ़ रहा है..."</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"सभी आयात करें"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"सिम संपर्क आयात कर रहा है"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"संपर्कों से आयात करें"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"संपर्क आयात किया गया"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"संपर्क आयात करने में विफल"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"श्रवण सहायक साधन"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"श्रवण सहायक साधन संगतता चालू करें"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 5dc9e91..0cf772a 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Onemogućeno"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Vaš mobilni operater ne podržava onemogućavanje preusmjeravanja poziva ako je vaš telefon nedostupan."</string>
     <string name="updating_title" msgid="6146755386174019046">"Postavke poziva"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Postavke može mijenjati samo primarni korisnik."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Postavke poziva može mijenjati samo korisnik koji je administrator."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Postavke (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Pogreška postavki poziva"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Čitanje postavki..."</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Uvezi sve"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Uvoz SIM kontakata"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Uvezi iz kontakata"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Uvezeni kontakt"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Uvoz kontakta nije uspio"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Pomoć za osobe oštećenog sluha"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Uključi kompatibilnost za pomoć osobama oštećenog sluha"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 44bbacd..7859970 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Kikapcsolva"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Szolgáltatója nem támogatja a hívásátirányítás letiltását, ha a telefon nem érhető el."</string>
     <string name="updating_title" msgid="6146755386174019046">"Hívásbeállítások"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"A hívásbeállításokat csak az elsődleges felhasználó módosíthatja."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"A hívásbeállításokat csak a rendszergazda módosíthatja."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Beállítások (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Hiba a hívásbeállításokban"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Beállítások olvasása..."</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Összes importálása"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"SIM kártya névjegyeinek importálása"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Importálás a Címtárból"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Importált névjegy"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Névjegy importálása sikertelen"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Hallókészülékek"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Hallókészülék-kompatibilitás bekapcsolása"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index dd6a302..f75d05a 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Անջատված է"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Ձեր սպասարկողը չի աջակցում զանգի վերահասցեավորման կասեցում, երբ ձեր հեռախոսն անհասանելի է:"</string>
     <string name="updating_title" msgid="6146755386174019046">"Զանգի կարգավորումներ"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Զանգի կարգավորումները կարող է փոխել միայն հիմնական օգտագործողը:"</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Զանգի կարգավորումները կարող է փոխել միայն ադմինիստրատոր հանդիսացող օգտվողը:"</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Կարգավորումներ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Զանգի կարգավորումների սխալ"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Ընթերցման կարգավորումներ..."</string>
@@ -470,6 +470,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Ներմուծել բոլորը"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Ներմուծվում է SIM-ի կոնտակտներից"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Ներմուծել կոնտակտներից"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Ներմուծված կոնտակտ"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Չհաջողվեց ներմուծել կոնտակտը"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Լսողական օգնական"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Միացնել լսողական օգնականի համատեղելիությունը"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 3c4808d..182a33f 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Dinonaktifkan"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Operator Anda tidak mendukung penonaktifan penerusan panggilan ketika ponsel tidak dapat dijangkau."</string>
     <string name="updating_title" msgid="6146755386174019046">"Setelan panggilan"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Setelan panggilan hanya dapat diubah oleh pengguna utama."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Setelan panggilan telepon hanya dapat diubah oleh pengguna admin."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Setelan (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Kesalahan setelan panggilan"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Membaca setelan…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Impor semua"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Mengimpor kontak dari SIM"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Impor dari kontak"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Kontak diimpor"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Gagal mengimpor kontak"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Alat bantu dengar"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Hidupkan kompatibilitas alat bantu dengar"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml
index 0f46e79..c79fab4 100644
--- a/res/values-is-rIS/strings.xml
+++ b/res/values-is-rIS/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Slökkt"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Símafyrirtækið leyfir ekki að slökkt sé á símtalsflutningi þegar ekki næst í símann."</string>
     <string name="updating_title" msgid="6146755386174019046">"Símtalsstillingar"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Aðeins aðalnotandinn má breyta símtalsstillingum."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Aðeins stjórnandinn má breyta símtalsstillingum."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Stillingar (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Villa í símtalsstillingum"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Les stillingar…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Flytja allt inn"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Flytur inn tengiliði af SIM-korti"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Flytja inn úr tengiliðum"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Tengiliður fluttur inn"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Mistókst að flytja inn tengilið"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Heyrnartæki"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Kveikja á samhæfi við heyrnartæki"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index a0d54c3..a10fe4a 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Disattivato"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Il tuo operatore non supporta la disattivazione dell\'inoltro chiamate quando il telefono non è raggiungibile."</string>
     <string name="updating_title" msgid="6146755386174019046">"Impostazioni chiamate"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Le impostazioni delle chiamate possono essere modificate solo dall\'utente principale."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Le impostazioni delle chiamate possono essere modificate solo dall\'utente amministratore."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Impostazioni (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Errore durante aggiornam. impostaz. chiamate"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Lettura impostazioni..."</string>
@@ -468,6 +468,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Importa tutti"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Importazione contatti SIM"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Importa da contatti"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Contatto importato"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Importazione contatto non riuscita"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Apparecchi acustici"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Attiva la compatibilità con apparecchi acustici"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 3d6329e..0cfc43e 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"מושבת"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"הספק שלך לא תומך בהשבתה של העברת שיחות כאשר הטלפון כבוי."</string>
     <string name="updating_title" msgid="6146755386174019046">"הגדרות שיחה"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"רק המשתמש הראשי יכול לשנות הגדרות שיחה."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"רק מנהל המערכת יכול לשנות הגדרות שיחה."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"הגדרות (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"שגיאה בהגדרות שיחה"</string>
     <string name="reading_settings" msgid="1920291699287055284">"קורא הגדרות…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"ייבא הכל"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"‏מייבא אנשי קשר מ-SIM"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"ייבא מאנשי קשר"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"איש הקשר יובא"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"ייבוא איש הקשר נכשל"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"מכשירי שמיעה"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"הפעל תאימות למכשיר שמיעה"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 72c2d08..56a5b9e 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"無効"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"ご利用の携帯通信会社は着信不能時の転送の無効化をサポートしていません。"</string>
     <string name="updating_title" msgid="6146755386174019046">"通話設定"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"通話設定はメインユーザーのみが変更できます。"</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"通話設定は管理者ユーザーのみが変更できます。"</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"設定(<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"通話設定エラー"</string>
     <string name="reading_settings" msgid="1920291699287055284">"設定を読み取り中..."</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"すべてインポート"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"SIMの連絡先をインポート中"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"連絡先からインポート"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"連絡先をインポートしました"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"連絡先をインポートできませんでした"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"補聴機能"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"補聴機能の互換をON"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index d5fc79c..0c86da2 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"გამორთულია"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"თქვენს ოპერატორს ტელეფონის მიუწვდომელობის დროს ზარის გადამისამართების გაუქმების მხარდაჭერა არ გააჩნია."</string>
     <string name="updating_title" msgid="6146755386174019046">"ზარის პარამეტრები"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"ზარის პარამეტრების ცვლილება შესაძლებელია მხოლოდ პირველადი მომხმარებლის მიერ."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"ზარის პარამეტრების შეცვლა მხოლოდ მომხმარებელ-ადმინისტრატორს შეუძლია."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"პარამეტრები (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"ზარის პარამეტრების შეცდომა"</string>
     <string name="reading_settings" msgid="1920291699287055284">"პარამეტრების წაკითხვა…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"ყველას იმპორტი"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"მიმდინარეობს SIM კონტაქტების იმპორტი"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"კონტაქტებიდან იმპორტი"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"კონტაქტი იმპორტირებულია"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"კონტაქტის იმპორტი ვერ მოხერხდა"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"სმენის დახმარებები"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"სმენის დახმარების თავსებადობის ჩართვა"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml
index cbd3e8c..c94d96b 100644
--- a/res/values-kk-rKZ/strings.xml
+++ b/res/values-kk-rKZ/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Өшірілген"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Телефоныңыз қол жетімсіз болғанда жабдықтаушы қоңырауды басқа нөмірге бағыттауды өшіруді қолдамайды."</string>
     <string name="updating_title" msgid="6146755386174019046">"Қоңырау параметрлері"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Қоңырау параметрлерін тек негізгі пайдаланушы өзгерте алады."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Қоңырау параметрлерін тек әкімші пайдаланушы өзгерте алады."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Параметрлер (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Қоңырау параметрлерінің қателігі"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Параметрлерді оқуда…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Барлығын импорттау"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"SIM контактілерін импортттау"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Контактілерден импорттау"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Контакт импортталды"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Контактіні импорттау сәтсіз аяқталды"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Есту көмектері"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Есту көмегінің үйлесімділігін қосу"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
index 04c3fd9..0ded42f 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km-rKH/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"បាន​បិទ"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"ក្រុមហ៊ុន​បញ្ជូន​របស់​អ្នក​​មិន​គាំទ្រ​ការ​បិទ​ការ​ហៅ​​បញ្ជូន​បន្ត នៅ​ពេល​ទូរស័ព្ទ​របស់​អ្នក​មិន​អាច​ហៅ​ចូល។"</string>
     <string name="updating_title" msgid="6146755386174019046">"កំណត់​ការ​ហៅ"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"ការកំណត់ការហៅអាចផ្លាស់ប្តូរបានដោយអ្នកប្រើបឋមតែប៉ុណ្ណោះ។"</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"ការកំណត់ការហៅអាចផ្លាស់ប្តូរបានដោយអ្នកប្រើដែលមានសិទ្ធិគ្រប់គ្រងតែប៉ុណ្ណោះ។"</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"ការកំណត់ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"កំហុស​ការ​កំណត់​ការ​ហៅ"</string>
     <string name="reading_settings" msgid="1920291699287055284">"កំពុង​អាន​ការ​កំណត់…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"នាំចូល​ទាំងអស់"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"នាំចូល​ទំនាក់ទំនង​ស៊ីមកាត"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"នាំចូល​ពី​ទំនាក់ទំនង"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"បាននាំចូលទំនាក់ទំនង"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"បានបរាជ័យក្នុងការនាំចូលទំនាក់ទំនង"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"ឧបករណ៍​ជំនួស​ការ​ស្ដាប់"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"បើក​ឧបករណ៍​ជំនួស​ការ​ស្ដាប់"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml
index 10449b6..0317062 100644
--- a/res/values-kn-rIN/strings.xml
+++ b/res/values-kn-rIN/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"ನಿಮ್ಮ ಫೋನ್‌ ಅನ್ನು ತಲುಪಲಾಗದಿದ್ದಾಗ ನಿಮ್ಮ ವಾಹಕ ಕರೆ ಫಾರ್ವರ್ಡ್‌ ಮಾಡುವಿಕೆ ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲು ಬೆಂಬಲಿಸುವುದಿಲ್ಲ."</string>
     <string name="updating_title" msgid="6146755386174019046">"ಕರೆ ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"ಕರೆ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಕೇವಲ ಪ್ರಾಥಮಿಕ ಬಳಕೆದಾರರು ಮಾತ್ರ ಬದಲಾಯಿಸಬಹುದು."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"ಕರೆ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಕೇವಲ ನಿರ್ವಾಹಕ ಬಳಕೆದಾರರು ಮಾತ್ರ ಬದಲಾಯಿಸಬಹುದು."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"ಕರೆ ಸೆಟ್ಟಿಂಗ್‌ಗಳ ದೋಷ"</string>
     <string name="reading_settings" msgid="1920291699287055284">"ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಓದಲಾಗುತ್ತಿದೆ…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"ಎಲ್ಲವನ್ನೂ ಆಮದು ಮಾಡು"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"ಸಿಮ್‌ ಸಂಪರ್ಕಗಳನ್ನು ಆಮದು ಮಾಡಲಾಗುತ್ತಿದೆ"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"ಸಂಪರ್ಕಗಳಿಂದ ಆಮದು ಮಾಡು"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"ಆಮದು ಮಾಡಿದ ಸಂಪರ್ಕ"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"ಸಂಪರ್ಕ ಆಮದು ಮಾಡುವಲ್ಲಿ ವಿಫಲವಾಗಿದೆ"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"ಶ್ರವಣ ಸಾಧನಗಳು"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"ಶ್ರವಣ ಸಾಧನ ಹೊಂದಾಣಿಕೆಯನ್ನು ಆನ್‌ ಮಾಡಿ"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index d4c9596..a4b6fb6 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"사용 중지됨"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"이동통신사에서 전화를 받을 수 없을 때 착신전환 사용 중지를 지원하지 않습니다."</string>
     <string name="updating_title" msgid="6146755386174019046">"통화 설정"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"기본 사용자만 통화 설정을 변경할 수 있습니다."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"관리자만 통화 설정을 변경할 수 있습니다."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"설정(<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"통화 설정 오류"</string>
     <string name="reading_settings" msgid="1920291699287055284">"설정을 읽는 중..."</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"모두 가져오기"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"SIM 주소록 가져오는 중"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"주소록에서 가져오기"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"연락처를 가져왔습니다."</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"연락처를 가져오지 못했습니다."</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"보청기"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"보청기 호환 사용"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml
index 337f84e..9dd9d7c 100644
--- a/res/values-ky-rKG/strings.xml
+++ b/res/values-ky-rKG/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Өчүрүлгөн"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Сиздин операторуңуз, телефон жеткиликсиз болгондо чалууну багыттоону токтотууну колдобойт."</string>
     <string name="updating_title" msgid="6146755386174019046">"Чалуу жөндөөлөрү"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Чалуу жөндөөлөрүн алгачкы колдонуучу гана өзгөртө алат."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Чалуу жөндөөлөрүн администратор гана өзгөртө алат."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Жөндөөлөр (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Чалуу жөндөөлөрүндөгү ката"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Жөндөөлөр окулууда…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Баарын импорттоо"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"SIM-картадагы байланыштардан импорттоо"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Байланыштардан импорттоо"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Байланыш импорттолду"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Байланыш импорттолбой калды"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Угуу аппараты"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Угуу аппаратына шайкештигин күйгүзүү"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
index 8963a1a..7130ff0 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"ປິດການນຳໃຊ້ແລ້ວ"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"ຜູ່ໃຫ້ບໍລິການຂອງທ່ານ ບໍ່ຮອງຮັບການປິດການໂອນສາຍ ເມື່ອໂທລະສັບຂອງທ່ານບໍ່ມີສັນຍານ."</string>
     <string name="updating_title" msgid="6146755386174019046">"ການຕັ້ງຄ່າການໂທ"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"ມີ​ແຕ່​ຜູ້​ໃຊ້​ຕົ້ນ​ຕໍ​ເທົ່າ​ນັ້ນ​ທີ່​ສາ​ມາດ​ປ່ຽນການ​ຕັ້ງ​ຄ່າ​ການ​ໂທ​ໄດ້."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"ມີ​ແຕ່​ຜູ້​ໃຊ້​ທີ່​ເປັນ​ຜູ້ດູແລລະບົບ​ເທົ່າ​ນັ້ນ​ທີ່​ສາ​ມາດ​ປ່ຽນການ​ຕັ້ງ​ຄ່າ​ການ​ໂທ​ໄດ້."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"ການ​ຕັ້ງ​ຄ່າ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"ການຕັ້ງຄ່າການໂທຜິດພາດ"</string>
     <string name="reading_settings" msgid="1920291699287055284">"ກຳລັງອ່ານການຕັ້ງຄ່າ..."</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"ນຳເຂົ້າທັງໝົດ"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"ກຳລັງນຳເຂົ້າລາຍຊື່ຜູ່ຕິດຕໍ່ຈາກ SIM"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"ນຳເຂົ້າຈາກລາຍຊື່ຜູ່ຕິດຕໍ່"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"ລາຍ​ຊື່​ຕິດ​ຕໍ່​ນຳ​ເຂົ້າ​ແລ້ວ"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"ນຳ​ລາຍ​ຊື່​ຕິດ​ຕໍ່​ເຂົ້າ​ບໍ່​ສຳ​ເລັດ"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"ການຊ່ວຍໄດ້ຍິນ"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"ເປີດໃຊ້ການຊ່ວຍໄດ້ຍິນ"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index da503ae..4399b42 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Išjungta"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Operatorius nepalaiko skambučių peradresavimo išjungimo, kai telefonas nepasiekiamas."</string>
     <string name="updating_title" msgid="6146755386174019046">"Skambinimo nustatymai"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Skambučių nustatymus gali keisti tik pagrindinis naudotojas."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Skambučių nustatymus gali keisti tik administruojantis naudotojas."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Nustatymai (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Skambinimo nustatymų klaida"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Skaitomi nustatymai..."</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Importuoti viską"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Importuojami SIM kortelės adresatai"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Importuoti iš adresatų"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Importuotas kontaktas"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Nepavyko importuoti kontakto"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Klausos aparatai"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Įjungti klausos aparato suderinamumą"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index ff61395..c7ade93 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Atspējots"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Jūsu mobilo sakaru operators neatbalsta zvanu pāradresācijas atspējošanu, ja tālrunis nav sasniedzams."</string>
     <string name="updating_title" msgid="6146755386174019046">"Zvanu iestatījumi"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Tikai galvenais lietotājs var mainīt zvanu iestatījumus."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Tikai lietotājs ar administratora tiesībām var mainīt zvanu iestatījumus."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Iestatījumi (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Zvanu iestatījumu kļūda"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Notiek iestatījumu lasīšana..."</string>
@@ -466,6 +466,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Importēt visu"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Notiek SIM kontaktpersonu importēšana"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Importēt no kontaktpersonām"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Kontaktpersona ir importēta."</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Neizdevās importēt kontaktpersonu."</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Dzirdes aparāti"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Ieslēgt saderību ar dzirdes aparātiem"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml
index 9eee415..de50ece 100644
--- a/res/values-mk-rMK/strings.xml
+++ b/res/values-mk-rMK/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Оневозможено"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Вашиот оператор не поддржува оневозможување проследување повик кога вашиот телефон е недостапен."</string>
     <string name="updating_title" msgid="6146755386174019046">"Поставки на повик"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Поставките за повик може да ги промени само главниот корисник."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Поставките за повик може да ги измени само администраторскиот корисник."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Поставки (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Грешка со подесување повици"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Подесувања за читање..."</string>
@@ -470,6 +470,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Увези ги сите"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Увезување контакти од СИМ"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Увези од контакти"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Увезен е контакт"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Не успеа да увезе контакт"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Слушни помагала"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Вклучи компатибилност на слушни помагала"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml
index e1cb94e..3c42121 100644
--- a/res/values-ml-rIN/strings.xml
+++ b/res/values-ml-rIN/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"പ്രവർത്തനരഹിതമാക്കി"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"നിങ്ങളുടെ ഫോൺ പരിധിയ്ക്ക് പുറത്തായിരിക്കുമ്പോൾ കോൾ കൈമാറൽ പ്രവർത്തനരഹിതമാക്കുന്നതിനെ നിങ്ങളുടെ ഓപ്പറേറ്റർ പിന്തുണയ്‌ക്കുന്നില്ല."</string>
     <string name="updating_title" msgid="6146755386174019046">"കോൾ ക്രമീകരണങ്ങൾ"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"കോൾ ക്രമീകരണങ്ങൾ, പ്രാഥമിക ഉപയോക്താവിന് മാത്രമെ മാറ്റാനാവൂ."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"അഡ്മിൻ ഉപയോക്താവിന് മാത്രമേ കോൾ ക്രമീകരണം മാറ്റാൻ കഴിയൂ."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"ക്രമീകരണം (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"കോൾ ക്രമീകരണ പിശക്"</string>
     <string name="reading_settings" msgid="1920291699287055284">"ക്രമീകരണങ്ങൾ റീഡുചെയ്യുന്നു.…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"എല്ലാം ഇമ്പോർട്ടുചെയ്യുക"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"സിം കോൺടാക്റ്റുകൾ ഇമ്പോർട്ടുചെയ്യുന്നു"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"കോൺടാക്റ്റുകളിൽ നിന്ന് ഇമ്പോർട്ടുചെയ്യുക"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"കോൺടാക്റ്റ് ഇമ്പോർട്ടുചെയ്തു"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"കോൺടാക്റ്റ് ഇമ്പോർട്ടുചെയ്യുന്നത് പരാജയപ്പെട്ടു"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"ശ്രവണ സഹായികൾ"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"ശ്രവണസഹായി അനുയോജ്യത ഓൺ ചെയ്യുക"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index 429ecc1..a046c5c 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Идэвхгүйжүүлсэн"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Таны үүрэн холбоо үзүүлэгчээс утас завгүй байхад дуудлагыг дамжуулахыг зогсоох үйлчилгээг дэмждэггүй."</string>
     <string name="updating_title" msgid="6146755386174019046">"Дуудлагын тохиргоо"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Дуудлагын тохиргоог зөвхөн үндсэн хэрэглэгч өөрчлөх боломжтой."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Дуудлагын тохиргоог зөвхөн админ хэрэглэгч солих боломжтой."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Тохиргоо (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Дуудлагын тохиргооны алдаа"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Тохиргоог уншиж байна…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Бүгдийг оруулах"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"SIM харилцагчдыг оруулж байна"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Харилцагчдаас оруулах"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Импортолсон харилцагчийн жагсаалт"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Харилцагчийн жагсаалтыг импортолж чадсангүй"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Сонсголын төхөөрөмж"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Сонсголын төхөөрөмж тааруулагчийг асаана уу"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml
index 3f94340..472d6ee 100644
--- a/res/values-mr-rIN/strings.xml
+++ b/res/values-mr-rIN/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"अक्षम केले"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"आपला फोन पोहचण्‍यायोग्‍य नसताना आपला वाहक कॉल अग्रेषण करणे अक्षम करण्‍यास समर्थन करीत नाही."</string>
     <string name="updating_title" msgid="6146755386174019046">"कॉल सेटिंग्ज"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"कॉल सेटिंग्ज केवळ प्राथमिक वापरकर्त्याद्वारे बदलल्‍या जाउ शकतात."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"कॉल सेटिंग्ज केवळ प्रशासक वापरकर्त्याद्वारे बदलल्‍या जाऊ शकतात."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"सेटिंग्ज (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"कॉल सेटिंग्ज त्रुटी"</string>
     <string name="reading_settings" msgid="1920291699287055284">"सेटिंग्‍ज वाचत आहे…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"सर्व आयात करा"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"सिम संपर्क आयात करीत आहे"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"संपर्कांमधून आयात करा"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"आयात केलेला संपर्क"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"संपर्क आयात करण्यात अयशस्वी"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"श्रवणयंत्रे"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"श्रवणयंत्र सुसंगतता चालू करा"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index 2f7cf5b..3e146b9 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Dilumpuhkan"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Pembawa anda tidak menyokong pelumpuhan pemajuan panggilan semasa telefon anda tidak boleh dihubungi."</string>
     <string name="updating_title" msgid="6146755386174019046">"Tetapan panggilan"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Tetapan panggilan hanya boleh diubah oleh pengguna utama."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Tetapan panggilan hanya boleh diubah oleh pengguna pentadbir."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Tetapan (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Ralat tetapan panggilan"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Membaca tetapan..."</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Import semua"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Mengimport Kenalan SIM"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Import daripada kenalan"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Kenalan yang diimport"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Gagal mengimport kenalan"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Alat pendengaran"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Hidupkan keserasian alat pendengaran"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml
index 5cac4d8..f6092aa 100644
--- a/res/values-my-rMM/strings.xml
+++ b/res/values-my-rMM/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"သုံးမရအောင် ပိတ်ထားခြင်း"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"သင့် ဖုန်း ဆက်သွယ်မှု လုပ်လို့မရစဉ် call forwarding ပြုလုပ်မှု ပယ်ဖျက်ရန် သင့် အော်ပရေတာမှ ခွင့်မပြုပါ"</string>
     <string name="updating_title" msgid="6146755386174019046">"ခေါ်ဆိုခြင်း အဆင်အပြင်များ"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"အဓိက အသုံးပြုသူသာလျှင် ခေါ်ဆိုမှု ချိန်ညှိချက်များကို ပြောင်းလဲနိုင်ပါသည်။"</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"ခေါ်ဆိုမှုကြိုတင်ပြင်ဆင်ချက်များကို ကြီးကြပ်သူသာလျှင် ပြောင်းလဲနိုင်သည်။"</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"ဆက်တင်များ ( <xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g> )"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"ခေါ်ဆိုမှု အပြင်အဆင်အမှား"</string>
     <string name="reading_settings" msgid="1920291699287055284">"အပြင်အဆင်များကို ဖတ်နေပါသည်…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"အားလုံးကို ထည့်သွင်းပါ"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"ဆင်းမ်ကဒ်မှ လိပ်စာများအား ထည့်ပါ"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"လိပ်စားများထဲမှ ထည့်ပါ"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"တင်သွင်းခဲ့သည့် အဆက်အသွယ်"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"အဆက်အသွယ်ကို တင်သွင်း မရခဲ့"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"နားကြပ်"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"အကြားအားရုံကိရိယာနှင့် ကိုက်ညီမှုကို ဖွင့်ပါ"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 3b7742e..9e101f8 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Slått av"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Operatøren støtter ikke deaktivering av viderekobling når telefonen er utenfor dekning."</string>
     <string name="updating_title" msgid="6146755386174019046">"Samtaleinnstillinger"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Anropsinnstillinger kan bare endres av hovedbrukeren."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Anropsinnstillinger kan bare endres av administratoren."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Innstillinger (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Feil ved samtaleinnstillinger"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Leser innstillingene …"</string>
@@ -470,6 +470,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Importer alle"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Importerer kontakter fra SIM-kortet"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Importer fra kontakter"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Kontakten er importert"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Kunne ikke importere kontakten"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Høreapparater"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Slå på kompatibilitet med høreapparat"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml
index d4ef050..c275b7c 100644
--- a/res/values-ne-rNP/strings.xml
+++ b/res/values-ne-rNP/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"असक्षम पारियो"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"तपाईंको फोन पहुँचयोग्य नहुँदा तपाईंको केरियरले कल-फर्वार्डिङ असक्षम बनाउँदा समर्थन गर्दैन।"</string>
     <string name="updating_title" msgid="6146755386174019046">"कल सेटिङहरू"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"कल सेटिङहरू केवल प्राथमिक प्रयोगकर्ताद्वारा मात्र परिवर्तन गर्न सकिन्छ।"</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"कल सेटिङहरू केवल प्रशासकीय प्रयोगकर्ताद्वारा परिवर्तन गर्न सकिन्छ।"</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"सेटिङहरू (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"कल सेटिङ त्रुटि"</string>
     <string name="reading_settings" msgid="1920291699287055284">"सेटिङहरू पढ्दै..."</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"सबै आयात गर्नुहोस्"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"SIM सम्पर्कहरू आयात गर्दै"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"सम्पर्कहरूबाट आयात गर्नुहोस्"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"आयातित सम्पर्क"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"सम्पर्क आयात गर्न असफल"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"श्रवण सहयोगी"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"श्रवण सहायता अनुकूलता खोल्नुहोस्"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 76f9be3..ded1651 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Uitgeschakeld"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Je provider biedt geen ondersteuning voor het uitschakelen van oproepdoorschakelingen wanneer je telefoon niet bereikbaar is."</string>
     <string name="updating_title" msgid="6146755386174019046">"Oproepinstellingen"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Oproepinstellingen kunnen alleen worden gewijzigd door de primaire gebruiker."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Oproepinstellingen kunnen alleen worden gewijzigd door de beheerder."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Instellingen (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Fout met oproepinstellingen"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Instellingen lezen..."</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Alles importeren"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"SIM-contacten importeren"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Importeren uit contacten"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Contact geïmporteerd"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Kan contact niet importeren"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Gehoorapparaten"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Compatibiliteit voor gehoorapparaat inschakelen"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa-rIN/strings.xml
index 74640be..874e4ed 100644
--- a/res/values-pa-rIN/strings.xml
+++ b/res/values-pa-rIN/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"ਅਸਮਰੱਥ ਬਣਾਇਆ"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"ਜਦੋਂ ਤੁਹਾਡਾ ਫੋਨ ਨਾਪਹੁੰਚਯੋਗ ਹੁੰਦਾ ਹੈ ਤਾਂ ਤੁਹਾਡਾ ਕੈਰੀਅਰ ਕਾਲ ਫੌਰਵਾਰਡਿੰਗ ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਉਣ ਦਾ ਸਮਰਥਨ ਨਹੀਂ ਕਰਦਾ।"</string>
     <string name="updating_title" msgid="6146755386174019046">"ਕਾਲ ਸੈਟਿੰਗਾਂ"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"ਕਾਲ ਸੈਟਿੰਗਾਂ ਕੇਵਲ ਮੁੱਖ ਉਪਭੋਗਤਾ ਵੱਲੋਂ ਬਦਲੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ।"</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"ਕਾਲ ਸੈਟਿੰਗਾਂ ਸਿਰਫ਼ ਪ੍ਰਸ਼ਾਸਕ ਵਰਤੋਂਕਾਰ ਵੱਲੋਂ ਹੀ ਬਦਲੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ।"</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"ਸੈਟਿੰਗਾਂ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"ਕਾਲ ਸੈਟਿੰਗਾਂ ਅਸ਼ੁੱਧੀ"</string>
     <string name="reading_settings" msgid="1920291699287055284">"ਸੈਟਿੰਗਾਂ ਪੜ੍ਹ ਰਿਹਾ ਹੈ…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"ਸਾਰੇ ਆਯਾਤ ਕਰੋ"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"SIM ਸੰਪਰਕ ਆਯਾਤ ਕਰ ਰਿਹਾ ਹੈ"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"ਸੰਪਰਕਾਂ ਤੋਂ ਆਯਾਤ ਕਰੋ"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"ਆਯਾਤ ਕੀਤਾ ਸੰਪਰਕ"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"ਸੰਪਰਕ ਆਯਾਤ ਕਰਨ ਵਿੱਚ ਅਸਫਲ"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"ਹੀਅਰਿੰਗ ਏਡਸ"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"ਹੀਅਰਿੰਗ ਏਡ ਅਨੁਕੂਲਤਾ ਚਾਲੂ ਕਰੋ"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 818fdd2..70f5148 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Wyłączone"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Twój operator nie umożliwia wyłączenia przekazywania połączeń, gdy numer jest nieosiągalny."</string>
     <string name="updating_title" msgid="6146755386174019046">"Ustawienia połączeń"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Ustawienia połączeń może zmienić tylko użytkownik główny."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Ustawienia połączeń może zmieniać tylko użytkownik będący administratorem."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Ustawienia (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Błąd w ustawieniach połączenia"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Czytanie ustawień..."</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Importuj wszystko"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Importowanie kontaktów z karty SIM"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Importuj z Kontaktów"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Kontakt został zaimportowany"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Nie udało się zaimportować kontaktu"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Aparaty słuchowe"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Włącz funkcje zgodności z aparatem słuchowym"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 3ba19aa..be37c07 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Desativado"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"O seu operador não suporta a desativação do reencaminhamento de chamadas quando o telemóvel não está acessível."</string>
     <string name="updating_title" msgid="6146755386174019046">"Definições de chamadas"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"As definições de chamadas só podem ser alteradas pelo utilizador principal."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"As definições de chamadas só podem ser alteradas pelo utilizador administrador."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Definições (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Erro nas definições de chamada"</string>
     <string name="reading_settings" msgid="1920291699287055284">"A ler as definições..."</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Importar todos"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"A importar contactos do cartão SIM"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Importar a partir dos contactos"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Contacto importado"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Falha ao importar o contacto"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Aparelhos auxiliares de audição"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Ativar compatibilidade com aparelho auxiliar de audição"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index bd35627..fba21c8 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Desativado"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Sua operadora não suporta a desativação do encaminhamento de chamada quando seu telefone não está acessível."</string>
     <string name="updating_title" msgid="6146755386174019046">"Configurações de chamadas"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"As configurações de chamada só podem ser alteradas pelo usuário principal."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"As configurações de chamada só podem ser alteradas pelo usuário administrador."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Configurações (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Erro de configuração da chamada"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Lendo as configurações…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Importar tudo"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Importando contatos do SIM"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Importar dos contatos"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Contato importado"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Falha ao importar contato"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Aparelhos auditivos"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Ativar compatibilidade com aparelhos auditivos"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 479a484..75bbeb9 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -18,7 +18,7 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="phoneAppLabel" product="tablet" msgid="1107073389495104784">"Date mobile"</string>
     <string name="phoneAppLabel" product="default" msgid="6790717591729922998">"Telefon – Servicii"</string>
-    <string name="emergencyDialerIconLabel" msgid="7812140032168171053">"Telefon de urgență"</string>
+    <string name="emergencyDialerIconLabel" msgid="7812140032168171053">"Telefon de urgenţă"</string>
     <string name="phoneIconLabel" msgid="2331230813161304895">"Telefon"</string>
     <string name="fdnListLabel" msgid="8630418672279521003">"Listă FDN"</string>
     <string name="unknown" msgid="6878797917991465859">"Necunoscut"</string>
@@ -30,7 +30,7 @@
     <string name="mmiCancelled" msgid="2771923949751842276">"Cod MMI anulat"</string>
     <string name="cancel" msgid="5044513931633602634">"Anulați"</string>
     <string name="enter_input" msgid="1810529547726803893">"Mesajul USSD trebuie să aibă între <xliff:g id="MIN_LEN">%d</xliff:g> și <xliff:g id="MAX_LEN">%d</xliff:g> caractere. Încercați din nou."</string>
-    <string name="manageConferenceLabel" msgid="4691922394301969053">"Gestionați teleconferința"</string>
+    <string name="manageConferenceLabel" msgid="4691922394301969053">"Gestionați teleconferinţa"</string>
     <string name="ok" msgid="3811371167865772377">"OK"</string>
     <string name="audio_mode_speaker" msgid="27649582100085266">"Difuzor"</string>
     <string name="audio_mode_earpiece" msgid="4156527186373869107">"Casca dispozitivului"</string>
@@ -41,16 +41,16 @@
     <string name="send_button" msgid="4106860097497818751">"Trimiteți"</string>
     <string name="pause_prompt_yes" msgid="3564467212025151797">"Da"</string>
     <string name="pause_prompt_no" msgid="6686238803236884877">"Nu"</string>
-    <string name="wild_prompt_str" msgid="5543521676355533577">"Înlocuiți metacaracterul cu"</string>
-    <string name="no_vm_number" msgid="4164780423805688336">"Lipsește numărul mesageriei vocale"</string>
+    <string name="wild_prompt_str" msgid="5543521676355533577">"Înlocuiţi metacaracterul cu"</string>
+    <string name="no_vm_number" msgid="4164780423805688336">"Lipseşte numărul mesageriei vocale"</string>
     <string name="no_vm_number_msg" msgid="1300729501030053828">"Niciun număr de mesagerie vocală nu este stocat pe cardul SIM."</string>
     <string name="add_vm_number_str" msgid="4676479471644687453">"Adăugați numărul"</string>
     <string name="puk_unlocked" msgid="2284912838477558454">"Cardul dvs. SIM a fost deblocat. Telefonul dvs. se deblochează..."</string>
-    <string name="label_ndp" msgid="780479633159517250">"Codul PIN de deblocare a rețelei SIM"</string>
-    <string name="sim_ndp_unlock_text" msgid="683628237760543009">"Deblocați"</string>
-    <string name="sim_ndp_dismiss_text" msgid="1604823375752456947">"Renunțați"</string>
-    <string name="requesting_unlock" msgid="6412629401033249351">"Se solicită deblocarea rețelei..."</string>
-    <string name="unlock_failed" msgid="6490531697031504225">"Cererea de deblocare a rețelei a eșuat."</string>
+    <string name="label_ndp" msgid="780479633159517250">"Codul PIN de deblocare a reţelei SIM"</string>
+    <string name="sim_ndp_unlock_text" msgid="683628237760543009">"Deblocaţi"</string>
+    <string name="sim_ndp_dismiss_text" msgid="1604823375752456947">"Renunţaţi"</string>
+    <string name="requesting_unlock" msgid="6412629401033249351">"Se solicită deblocarea reţelei..."</string>
+    <string name="unlock_failed" msgid="6490531697031504225">"Cererea de deblocare a reţelei a eșuat."</string>
     <string name="unlock_success" msgid="6770085622238180152">"Rețeaua a fost deblocată."</string>
     <string name="mobile_network_settings_not_available" msgid="3831911315358856062">"Setările pentru rețeaua mobilă nu sunt disponibile pentru acest utilizator"</string>
     <string name="labelGSMMore" msgid="5930842194056092106">"Setările apelului GSM"</string>
@@ -86,9 +86,9 @@
     <string name="labelNwService" msgid="4699970172021870983">"Setările serviciului de rețea"</string>
     <string name="labelCallerId" msgid="3888899447379069198">"ID apelant"</string>
     <string name="sum_loading_settings" msgid="1826692909391168620">"Se încarcă setările…"</string>
-    <string name="sum_hide_caller_id" msgid="1071407020290873782">"Număr ascuns în apelurile de ieșire"</string>
-    <string name="sum_show_caller_id" msgid="6768534125447290401">"Numărul afișat în apelurile de ieșire"</string>
-    <string name="sum_default_caller_id" msgid="1954518825510901365">"Utilizați setările prestabilite ale operatorului, pentru a vă afișa numărul în apelurile de ieșire"</string>
+    <string name="sum_hide_caller_id" msgid="1071407020290873782">"Număr ascuns în apelurile de ieşire"</string>
+    <string name="sum_show_caller_id" msgid="6768534125447290401">"Numărul afişat în apelurile de ieşire"</string>
+    <string name="sum_default_caller_id" msgid="1954518825510901365">"Utilizaţi setările prestabilite ale operatorului, pentru a vă afişa numărul în apelurile de ieşire"</string>
     <string name="labelCW" msgid="6120513814915920200">"Apel în așteptare"</string>
     <string name="sum_cw_enabled" msgid="8083061901633671397">"Anunță-mă când primesc un apel, inclusiv în timpul unei convorbiri"</string>
     <string name="sum_cw_disabled" msgid="3648693907300104575">"Anunță-mă când primesc un apel, inclusiv în timpul unei convorbiri"</string>
@@ -97,72 +97,72 @@
     <string name="labelCF" msgid="2574386948026924737">"Redirecționarea apelurilor"</string>
     <string name="labelCFU" msgid="8147177368148660600">"Redirecționează întotdeauna"</string>
     <string name="messageCFU" msgid="3560082430662923687">"Folosește mereu acest număr"</string>
-    <string name="sum_cfu_enabled_indicator" msgid="4014187342724130197">"Se redirecționează toate apelurile"</string>
-    <string name="sum_cfu_enabled" msgid="2450052502198827927">"Se redirecționează toate apelurile către <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
+    <string name="sum_cfu_enabled_indicator" msgid="4014187342724130197">"Se redirecţionează toate apelurile"</string>
+    <string name="sum_cfu_enabled" msgid="2450052502198827927">"Se redirecţionează toate apelurile către <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
     <string name="sum_cfu_enabled_no_number" msgid="6591985777096823616">"Numărul nu este disponibil"</string>
     <string name="sum_cfu_disabled" msgid="8384177689501334080">"Dezactivat"</string>
     <string name="labelCFB" msgid="6139853033106283172">"Când este ocupat"</string>
-    <string name="messageCFB" msgid="3711089705936187129">"Număr pentru redirecționare dacă este ocupat"</string>
+    <string name="messageCFB" msgid="3711089705936187129">"Număr pentru redirecţionare dacă este ocupat"</string>
     <string name="sum_cfb_enabled" msgid="5984198104833116690">"Se redirecționează la <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
     <string name="sum_cfb_disabled" msgid="4913145177320506827">"Dezactivat"</string>
     <string name="disable_cfb_forbidden" msgid="3506984333877998061">"Operatorul dvs. nu acceptă ca redirecționarea apelurilor să fie dezactivată atunci când telefonul dvs. este ocupat."</string>
     <string name="labelCFNRy" msgid="1736067178393744351">"Când nu se răspunde"</string>
-    <string name="messageCFNRy" msgid="672317899884380374">"Număr pentru redirecționare dacă nu se răspunde"</string>
+    <string name="messageCFNRy" msgid="672317899884380374">"Număr pentru redirecţionare dacă nu se răspunde"</string>
     <string name="sum_cfnry_enabled" msgid="6955775691317662910">"Se redirecționează la <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
     <string name="sum_cfnry_disabled" msgid="3884684060443538097">"Dezactivat"</string>
     <string name="disable_cfnry_forbidden" msgid="4308233959150658058">"Operatorul dvs. nu acceptă ca redirecționarea apelurilor să fie dezactivată atunci când telefonul dvs. nu răspunde."</string>
     <string name="labelCFNRc" msgid="2614827454402079766">"Când nu este accesibil"</string>
-    <string name="messageCFNRc" msgid="6380695421020295119">"Număr de redirecționare dacă telefonul nu este accesibil"</string>
+    <string name="messageCFNRc" msgid="6380695421020295119">"Număr de redirecţionare dacă telefonul nu este accesibil"</string>
     <string name="sum_cfnrc_enabled" msgid="7010898346095497421">"Se redirecționează la <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Dezactivat"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Operatorul dvs. nu acceptă ca redirecționarea apelurilor să fie dezactivată atunci când telefonul nu este accesibil."</string>
     <string name="updating_title" msgid="6146755386174019046">"Setări apel"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Numai utilizatorul principal poate să modifice setările pentru apeluri."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Numai administratorul poate să modifice setările pentru apeluri."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Setări (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Eroare în setările de apel"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Se citesc setările..."</string>
     <string name="updating_settings" msgid="8171225533884883252">"Se actualizează setările..."</string>
     <string name="reverting_settings" msgid="4752151682666912828">"Se revine la setări..."</string>
-    <string name="response_error" msgid="6674110501330139405">"Răspuns neașteptat de la rețea."</string>
+    <string name="response_error" msgid="6674110501330139405">"Răspuns neaşteptat de la rețea."</string>
     <string name="exception_error" msgid="7027667130619518211">"Eroare de rețea sau de card SIM."</string>
     <string name="stk_cc_ss_to_dial_error" msgid="2816779198916570502">"Solicitarea SS a fost transformată în solicitare DIAL."</string>
     <string name="stk_cc_ss_to_ussd_error" msgid="7490626178582654236">"Solicitarea SS a fost transformată în solicitare USSD."</string>
     <string name="stk_cc_ss_to_ss_error" msgid="5057846756489053759">"Solicitarea SS a fost transformată în solicitare SS nouă."</string>
-    <string name="fdn_check_failure" msgid="18200614306525434">"Setarea Numere cu apelări restricționate din aplicația Telefon este activată. Ca rezultat, unele funcții legate de apelare nu pot fi utilizate."</string>
+    <string name="fdn_check_failure" msgid="18200614306525434">"Setarea Numere cu apelări restricţionate din aplicația Telefon este activată. Ca rezultat, unele funcții legate de apelare nu pot fi utilizate."</string>
     <string name="radio_off_error" msgid="2304459933248513376">"Activați semnalul radio, înainte de a vizualiza aceste setări."</string>
     <string name="close_dialog" msgid="2365884406356986917">"OK"</string>
     <string name="enable" msgid="7248657275000173526">"Activați"</string>
     <string name="disable" msgid="4678348128118573672">"Dezactivați"</string>
     <string name="change_num" msgid="239476305819844391">"Actualizați"</string>
   <string-array name="clir_display_values">
-    <item msgid="5560134294467334594">"Rețea prestabilită"</item>
-    <item msgid="7876195870037833661">"Ascundeți numărul"</item>
-    <item msgid="1108394741608734023">"Afișați numărul"</item>
+    <item msgid="5560134294467334594">"Reţea prestabilită"</item>
+    <item msgid="7876195870037833661">"Ascundeţi numărul"</item>
+    <item msgid="1108394741608734023">"Afişaţi numărul"</item>
   </string-array>
     <string name="vm_changed" msgid="380744030726254139">"Număr mesagerie vocală modificat."</string>
-    <string name="vm_change_failed" msgid="3352934863246208918">"Nu s-a putut schimba numărul de mesagerie vocală.\nContactați operatorul în cazul în care această problemă persistă."</string>
-    <string name="fw_change_failed" msgid="5298103228470214665">"Nu s-a putut schimba numărul de redirecționare.\nContactați operatorul dvs. în cazul în care această problemă persistă."</string>
-    <string name="fw_get_in_vm_failed" msgid="8862896836093833973">"Nu s-au putut prelua și salva setările actuale ale numărului de redirecționare.\nDoriți să comutați oricum către un nou furnizor de servicii?"</string>
+    <string name="vm_change_failed" msgid="3352934863246208918">"Nu s-a putut schimba numărul de mesagerie vocală.\nContactaţi operatorul în cazul în care această problemă persistă."</string>
+    <string name="fw_change_failed" msgid="5298103228470214665">"Nu s-a putut schimba numărul de redirecţionare.\nContactaţi operatorul dvs. în cazul în care această problemă persistă."</string>
+    <string name="fw_get_in_vm_failed" msgid="8862896836093833973">"Nu s-au putut prelua și salva setările actuale ale numărului de redirecţionare.\nDoriți să comutaţi oricum către un nou furnizor de servicii?"</string>
     <string name="no_change" msgid="3186040086622435212">"Nicio schimbare efectuată."</string>
     <string name="sum_voicemail_choose_provider" msgid="59911196126278922">"Alegeți serviciul de mesagerie vocală"</string>
     <string name="voicemail_default" msgid="2001233554889016880">"Operatorul dvs."</string>
     <string name="mobile_networks" msgid="2843854043339307375">"Setările pentru rețeaua mobilă"</string>
-    <string name="label_available" msgid="1181658289009300430">"Rețele disponibile"</string>
+    <string name="label_available" msgid="1181658289009300430">"Reţele disponibile"</string>
     <string name="load_networks_progress" msgid="5230707536168902952">"Se caută…"</string>
     <string name="empty_networks_list" msgid="4249426905018815316">"Nicio rețea găsită."</string>
-    <string name="search_networks" msgid="1601136049300882441">"Căutați rețele"</string>
-    <string name="network_query_error" msgid="6828516148953325006">"Eroare la căutarea rețelelor."</string>
+    <string name="search_networks" msgid="1601136049300882441">"Căutaţi rețele"</string>
+    <string name="network_query_error" msgid="6828516148953325006">"Eroare la căutarea reţelelor."</string>
     <string name="register_on_network" msgid="9055203954040805084">"Se înregistrează pe <xliff:g id="NETWORK">%s</xliff:g>..."</string>
     <string name="not_allowed" msgid="5613353860205691579">"Cardul dvs. SIM nu permite conexiunea la această rețea."</string>
     <string name="connect_later" msgid="2308119155752343975">"Nu se poate efectua conectarea la această rețea chiar acum. Încercați din nou mai târziu."</string>
     <string name="registration_done" msgid="495135664535876612">"Înregistrat în rețea."</string>
     <string name="sum_carrier_select" msgid="3494252551249882718">"Alegeți un operator de rețea"</string>
-    <string name="sum_search_networks" msgid="2921092249873272715">"Căutați toate rețelele disponibile"</string>
-    <string name="select_automatically" msgid="5628402124471810174">"Selectați în mod automat"</string>
-    <string name="sum_select_automatically" msgid="5614890115123292400">"Selectați în mod automat rețeaua preferată"</string>
+    <string name="sum_search_networks" msgid="2921092249873272715">"Căutaţi toate reţelele disponibile"</string>
+    <string name="select_automatically" msgid="5628402124471810174">"Selectaţi în mod automat"</string>
+    <string name="sum_select_automatically" msgid="5614890115123292400">"Selectaţi în mod automat reţeaua preferată"</string>
     <string name="register_automatically" msgid="6017849844573519637">"Înregistrare automată..."</string>
     <string name="preferred_network_mode_title" msgid="2336624679902659306">"Tipul de rețea preferat"</string>
-    <string name="preferred_network_mode_summary" msgid="1434820673166126609">"Schimbați modul de operare a rețelei"</string>
+    <string name="preferred_network_mode_summary" msgid="1434820673166126609">"Schimbaţi modul de operare a reţelei"</string>
     <string name="preferred_network_mode_dialogtitle" msgid="4048082093347807230">"Tipul de rețea preferat"</string>
     <string name="preferred_network_mode_wcdma_perf_summary" msgid="8521677230113533809">"Mod de rețea preferat: de preferat WCDMA"</string>
     <string name="preferred_network_mode_gsm_only_summary" msgid="3352445413437453511">"Mod de rețea preferat: numai GSM"</string>
@@ -203,36 +203,36 @@
     <string name="roaming" msgid="8871412572928323707">"Roaming de date"</string>
     <string name="roaming_enable" msgid="7331106985174381987">"Conectați-vă la serviciile de date în roaming"</string>
     <string name="roaming_disable" msgid="1843417228755568110">"Conectați-vă la serviciile de date în roaming"</string>
-    <string name="roaming_reenable_message" msgid="8913735676127858115">"Ați pierdut conectivitatea la date, deoarece ați părăsit rețeaua de domiciliu neavând activat roamingul de date."</string>
+    <string name="roaming_reenable_message" msgid="8913735676127858115">"Aţi pierdut conectivitatea la date, deoarece aţi părăsit reţeaua de domiciliu neavând activat roamingul de date."</string>
     <string name="roaming_warning" msgid="1603164667540144353">"Se pot acumula costuri mari."</string>
     <string name="roaming_alert_title" msgid="3654815360303826008">"Permiteți roamingul de date?"</string>
-    <string name="gsm_umts_options" msgid="6538311689850981686">"Opțiuni GSM/UMTS"</string>
-    <string name="cdma_options" msgid="4016822858172249884">"Opțiuni CDMA"</string>
+    <string name="gsm_umts_options" msgid="6538311689850981686">"Opţiuni GSM/UMTS"</string>
+    <string name="cdma_options" msgid="4016822858172249884">"Opţiuni CDMA"</string>
     <string name="throttle_data_usage" msgid="3715677828160555808">"Utilizarea datelor"</string>
     <string name="throttle_current_usage" msgid="8762280193043815361">"Datele utilizate în perioada curentă"</string>
     <string name="throttle_time_frame" msgid="1915198770363734685">"Perioada de utilizare a datelor"</string>
     <string name="throttle_rate" msgid="4710388992676803508">"Politica ratei de transfer a datelor"</string>
-    <string name="throttle_help" msgid="243651091785169900">"Aflați mai multe"</string>
+    <string name="throttle_help" msgid="243651091785169900">"Aflaţi mai multe"</string>
     <string name="throttle_status_subtext" msgid="1657318943142085170">"<xliff:g id="USED_0">%1$s</xliff:g> (<xliff:g id="USED_1">%2$d</xliff:g>٪) din <xliff:g id="USED_2">%3$s</xliff:g> perioada maximă\nUrmătoarea perioadă începe în <xliff:g id="USED_3">%4$d</xliff:g> (de) zile (<xliff:g id="USED_4">%5$s</xliff:g>)"</string>
     <string name="throttle_data_usage_subtext" msgid="6029276011123694701">"<xliff:g id="USED_0">%1$s</xliff:g> (<xliff:g id="USED_1">%2$d</xliff:g>٪) din <xliff:g id="USED_2">%3$s</xliff:g> perioadă maximă"</string>
-    <string name="throttle_data_rate_reduced_subtext" msgid="7492763592720107737">"<xliff:g id="USED_0">%1$s</xliff:g> maximum depășit\nRata de transfer se reduce la <xliff:g id="USED_1">%2$d</xliff:g> Kb/s"</string>
+    <string name="throttle_data_rate_reduced_subtext" msgid="7492763592720107737">"<xliff:g id="USED_0">%1$s</xliff:g> maximum depăşit\nRata de transfer se reduce la <xliff:g id="USED_1">%2$d</xliff:g> Kb/s"</string>
     <string name="throttle_time_frame_subtext" msgid="7732763021560399960">"<xliff:g id="USED_0">%1$d</xliff:g>٪ din ciclul trecut\nPerioada următoare începe în <xliff:g id="USED_1">%2$d</xliff:g> (de) zile (<xliff:g id="USED_2">%3$s</xliff:g>)"</string>
-    <string name="throttle_rate_subtext" msgid="2149102656120726855">"Rata de transfer a datelor se reduce la <xliff:g id="USED">%1$d</xliff:g> Kb/s, dacă limita de utilizare este depășită."</string>
+    <string name="throttle_rate_subtext" msgid="2149102656120726855">"Rata de transfer a datelor se reduce la <xliff:g id="USED">%1$d</xliff:g> Kb/s, dacă limita de utilizare este depăşită."</string>
     <string name="throttle_help_subtext" msgid="3633091498168446044">"Mai multe informații despre politica de utilizare a datelor aplicată de operatorul dvs. de telefonie mobilă"</string>
     <string name="cell_broadcast_sms" msgid="5584192824053625842">"Transmisie celulară a mesajelor SMS"</string>
     <string name="enable_disable_cell_bc_sms" msgid="4851147873691392255">"Transmisie celulară a mesajelor SMS"</string>
     <string name="cell_bc_sms_enable" msgid="6441688565738921084">"Transmisie celulară a mesajelor SMS activată"</string>
     <string name="cell_bc_sms_disable" msgid="3398365088309408749">"Transmisie celulară a mesajelor SMS dezactivată"</string>
     <string name="cb_sms_settings" msgid="651715019785107312">"Setările transmisiei celulare a mesajelor SMS"</string>
-    <string name="enable_disable_emergency_broadcast" msgid="2157014609041245335">"Transmisie de urgență"</string>
-    <string name="emergency_broadcast_enable" msgid="2645980025414010211">"Transmisie de urgență activată"</string>
-    <string name="emergency_broadcast_disable" msgid="3665199821267569426">"Transmisie de urgență dezactivată"</string>
+    <string name="enable_disable_emergency_broadcast" msgid="2157014609041245335">"Transmisie de urgenţă"</string>
+    <string name="emergency_broadcast_enable" msgid="2645980025414010211">"Transmisie de urgenţă activată"</string>
+    <string name="emergency_broadcast_disable" msgid="3665199821267569426">"Transmisie de urgenţă dezactivată"</string>
     <string name="enable_disable_administrative" msgid="6501582322182059412">"Administrativ"</string>
     <string name="administrative_enable" msgid="1750086122962032235">"Administrativ activată"</string>
     <string name="administrative_disable" msgid="8433273857248698539">"Administrativ dezactivat"</string>
-    <string name="enable_disable_maintenance" msgid="1819693083025106678">"Întreținere"</string>
-    <string name="maintenance_enable" msgid="8566636458770971189">"Întreținere activată"</string>
-    <string name="maintenance_disable" msgid="7340189100885066077">"Întreținere dezactivată"</string>
+    <string name="enable_disable_maintenance" msgid="1819693083025106678">"Întreţinere"</string>
+    <string name="maintenance_enable" msgid="8566636458770971189">"Întreţinere activată"</string>
+    <string name="maintenance_disable" msgid="7340189100885066077">"Întreţinere dezactivată"</string>
     <string name="general_news_settings" msgid="4968779723948432978">"Știri generale"</string>
     <string name="bf_news_settings" msgid="3935593091894685267">"Știri despre afaceri și financiare"</string>
     <string name="sports_news_settings" msgid="7649399631270052835">"Știri din sport"</string>
@@ -243,14 +243,14 @@
     <string name="enable_disable_regional" msgid="4905652414535565872">"Regional"</string>
     <string name="regional_enable" msgid="4434680415437834759">"Știri locale activate"</string>
     <string name="regional_disable" msgid="5359325527213850077">"Știri regionale dezactivate"</string>
-    <string name="enable_disable_national" msgid="236278090206880734">"Național"</string>
-    <string name="national_enable" msgid="1172443648912246952">"Știri naționale activate"</string>
-    <string name="national_disable" msgid="326018148178601166">"Știri naționale dezactivate"</string>
-    <string name="enable_disable_international" msgid="7535348799604565592">"Internațional"</string>
-    <string name="international_enable" msgid="5855356769925044927">"Știri internaționale activate"</string>
-    <string name="international_disable" msgid="2850648591041088931">"Știri internaționale dezactivate"</string>
+    <string name="enable_disable_national" msgid="236278090206880734">"Naţional"</string>
+    <string name="national_enable" msgid="1172443648912246952">"Știri naţionale activate"</string>
+    <string name="national_disable" msgid="326018148178601166">"Știri naţionale dezactivate"</string>
+    <string name="enable_disable_international" msgid="7535348799604565592">"Internaţional"</string>
+    <string name="international_enable" msgid="5855356769925044927">"Știri internaţionale activate"</string>
+    <string name="international_disable" msgid="2850648591041088931">"Știri internaţionale dezactivate"</string>
     <string name="list_language_title" msgid="2841683501919760043">"Limbă"</string>
-    <string name="list_language_summary" msgid="8109546531071241601">"Selectați limba pentru știri"</string>
+    <string name="list_language_summary" msgid="8109546531071241601">"Selectaţi limba pentru ştiri"</string>
   <string-array name="list_language_entries">
     <item msgid="6137851079727305485">"Engleză"</item>
     <item msgid="1151988412809572526">"Franceză"</item>
@@ -285,18 +285,18 @@
     <string name="enable_disable_lodgings" msgid="1822029172658551202">"Cazare"</string>
     <string name="lodgings_enable" msgid="3230042508992850322">"Cazare activată"</string>
     <string name="lodgings_disable" msgid="3387879742320682391">"Cazare dezactivată"</string>
-    <string name="enable_disable_retail_directory" msgid="1357809784475660303">"Registrul comercianților"</string>
-    <string name="retail_directory_enable" msgid="3280626290436111496">"Registrul comercianților activat"</string>
-    <string name="retail_directory_disable" msgid="6479739816662879027">"Registrul comercianților dezactivat"</string>
+    <string name="enable_disable_retail_directory" msgid="1357809784475660303">"Registrul comercianţilor"</string>
+    <string name="retail_directory_enable" msgid="3280626290436111496">"Registrul comercianţilor activat"</string>
+    <string name="retail_directory_disable" msgid="6479739816662879027">"Registrul comercianţilor dezactivat"</string>
     <string name="enable_disable_advertisements" msgid="5999495926176182128">"Publicitate"</string>
     <string name="advertisements_enable" msgid="2050305021264683786">"Publicitate activată"</string>
     <string name="advertisements_disable" msgid="8350985908788707935">"Publicitate dezactivată"</string>
-    <string name="enable_disable_stock_quotes" msgid="6397810445293533603">"Cotații bursiere"</string>
-    <string name="stock_quotes_enable" msgid="4384802470887170543">"Cotații bursiere activate"</string>
-    <string name="stock_quotes_disable" msgid="4781450084565594998">"Cotații bursiere dezactivate"</string>
-    <string name="enable_disable_eo" msgid="4863043263443942494">"Oportunități de angajare"</string>
-    <string name="eo_enable" msgid="8623559062015685813">"Oportunități de angajare activate"</string>
-    <string name="eo_disable" msgid="3863812478090907609">"Oportunități de angajare dezactivate"</string>
+    <string name="enable_disable_stock_quotes" msgid="6397810445293533603">"Cotaţii bursiere"</string>
+    <string name="stock_quotes_enable" msgid="4384802470887170543">"Cotaţii bursiere activate"</string>
+    <string name="stock_quotes_disable" msgid="4781450084565594998">"Cotaţii bursiere dezactivate"</string>
+    <string name="enable_disable_eo" msgid="4863043263443942494">"Oportunităţi de angajare"</string>
+    <string name="eo_enable" msgid="8623559062015685813">"Oportunităţi de angajare activate"</string>
+    <string name="eo_disable" msgid="3863812478090907609">"Oportunităţi de angajare dezactivate"</string>
     <string name="enable_disable_mhh" msgid="908214593528968522">"Medicină, sănătate și spitale"</string>
     <string name="mhh_enable" msgid="5544500632306446815">"Medicină, sănătate și spitale activate"</string>
     <string name="mhh_disable" msgid="8998210550117117437">"Medicină, sănătate și spitale dezactivate"</string>
@@ -309,15 +309,15 @@
     <string name="network_lte" msgid="7702681952521375754">"LTE (recomandat)"</string>
     <string name="network_4G" msgid="2723512640529983138">"4G (recomandat)"</string>
     <string name="network_global" msgid="1323190488685355309">"Global"</string>
-    <string name="cdma_system_select_title" msgid="5757657769327732833">"Selectați sistemul"</string>
-    <string name="cdma_system_select_summary" msgid="60460043745797517">"Schimbați modul de roaming CDMA"</string>
-    <string name="cdma_system_select_dialogtitle" msgid="6083355415165359075">"Selectați sistemul"</string>
+    <string name="cdma_system_select_title" msgid="5757657769327732833">"Selectaţi sistemul"</string>
+    <string name="cdma_system_select_summary" msgid="60460043745797517">"Schimbaţi modul de roaming CDMA"</string>
+    <string name="cdma_system_select_dialogtitle" msgid="6083355415165359075">"Selectaţi sistemul"</string>
   <string-array name="cdma_system_select_choices">
     <item msgid="176474317493999285">"Doar domiciliu"</item>
     <item msgid="1205664026446156265">"Automat"</item>
   </string-array>
     <string name="cdma_subscription_title" msgid="1162564010076763284">"Abonament CMDA"</string>
-    <string name="cdma_subscription_summary" msgid="2530890766115781140">"Comutați între RUIM/SIM și NV"</string>
+    <string name="cdma_subscription_summary" msgid="2530890766115781140">"Comutaţi între RUIM/SIM și NV"</string>
     <string name="cdma_subscription_dialogtitle" msgid="2699527950523333110">"abonament"</string>
   <string-array name="cdma_subscription_choices">
     <item msgid="2258014151300708431">"RUIM/SIM"</item>
@@ -330,61 +330,61 @@
     <string name="cdma_activate_device" msgid="3793805892364814518">"Activați dispozitivul"</string>
     <string name="cdma_lte_data_service" msgid="4255018217292548962">"Configurați serviciul de date"</string>
     <string name="carrier_settings_title" msgid="9028166176523012300">"Setări operator"</string>
-    <string name="fdn" msgid="7878832555095183202">"Numere cu apelări restricționate"</string>
+    <string name="fdn" msgid="7878832555095183202">"Numere cu apelări restricţionate"</string>
     <string name="fdn_with_label" msgid="187084204115493366">"Numere fixe de apelare (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="manage_fdn_list" msgid="8777755791892122369">"Listă FDN"</string>
     <string name="fdn_list_with_label" msgid="7437232552210469217">"Lista FDN (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="fdn_activation" msgid="2156479741307463576">"Activare FDN"</string>
-    <string name="fdn_enabled" msgid="5238109009915521240">"Numerele cu apelări restricționate sunt activate"</string>
-    <string name="fdn_disabled" msgid="4700049736675368279">"Numerele cu apelări restricționate sunt dezactivate"</string>
+    <string name="fdn_enabled" msgid="5238109009915521240">"Numerele cu apelări restricţionate sunt activate"</string>
+    <string name="fdn_disabled" msgid="4700049736675368279">"Numerele cu apelări restricţionate sunt dezactivate"</string>
     <string name="enable_fdn" msgid="3740191529180493851">"Activați FDN"</string>
     <string name="disable_fdn" msgid="7944020890722540616">"Dezactivați FDN"</string>
-    <string name="change_pin2" msgid="2153563695382176676">"Schimbați codul PIN2"</string>
+    <string name="change_pin2" msgid="2153563695382176676">"Schimbaţi codul PIN2"</string>
     <string name="enable_fdn_ok" msgid="7215588870329688132">"Dezactivați FDN"</string>
     <string name="disable_fdn_ok" msgid="5727046928930740173">"Activați FDN"</string>
-    <string name="sum_fdn" msgid="1959399454900272878">"Gestionați numerele cu apelări restricționate"</string>
-    <string name="sum_fdn_change_pin" msgid="6666549734792827932">"Schimbați codul PIN pentru accesul FDN"</string>
+    <string name="sum_fdn" msgid="1959399454900272878">"Gestionați numerele cu apelări restricţionate"</string>
+    <string name="sum_fdn_change_pin" msgid="6666549734792827932">"Schimbaţi codul PIN pentru accesul FDN"</string>
     <string name="sum_fdn_manage_list" msgid="8431088265332628316">"Gestionați lista numerelor de telefon"</string>
-    <string name="voice_privacy" msgid="3776841382844614716">"Confidențialitate voce"</string>
-    <string name="voice_privacy_summary" msgid="3159383389833516214">"Activați modul avansat de confidențialitate"</string>
+    <string name="voice_privacy" msgid="3776841382844614716">"Confidenţialitate voce"</string>
+    <string name="voice_privacy_summary" msgid="3159383389833516214">"Activați modul avansat de confidenţialitate"</string>
     <string name="tty_mode_option_title" msgid="9033098925144434669">"Mod TTY"</string>
-    <string name="tty_mode_option_summary" msgid="1073835131534808732">"Setați modul TTY"</string>
+    <string name="tty_mode_option_summary" msgid="1073835131534808732">"Setaţi modul TTY"</string>
     <string name="auto_retry_mode_title" msgid="4073265511427813322">"Reîncercare automată"</string>
     <string name="auto_retry_mode_summary" msgid="4973886004067532288">"Activați modul Reîncercare automată"</string>
     <string name="tty_mode_not_allowed_video_call" msgid="3795846787901909176">"Schimbarea modului TTY nu este permisă în timpul unui apel video"</string>
     <string name="menu_add" msgid="1882023737425114762">"Adăugați o persoană în agendă"</string>
-    <string name="menu_edit" msgid="7143003705504672374">"Modificați informațiile despre persoana din agendă"</string>
-    <string name="menu_delete" msgid="3977150783449642851">"Ștergeți persoana din agendă"</string>
-    <string name="get_pin2" msgid="8204677063922225311">"Introduceți codul PIN2"</string>
+    <string name="menu_edit" msgid="7143003705504672374">"Modificaţi informațiile despre persoana din agendă"</string>
+    <string name="menu_delete" msgid="3977150783449642851">"Ștergeţi persoana din agendă"</string>
+    <string name="get_pin2" msgid="8204677063922225311">"Introduceţi codul PIN2"</string>
     <string name="name" msgid="7329028332786872378">"Nume"</string>
     <string name="number" msgid="7905950798349903858">"Număr"</string>
     <string name="save" msgid="4094274636321939086">"Salvați"</string>
-    <string name="add_fdn_contact" msgid="2481915899633353976">"Adăugați un număr cu apelări restricționate"</string>
-    <string name="adding_fdn_contact" msgid="7627379633721940991">"Se adaugă numărul cu apelări restricționate..."</string>
-    <string name="fdn_contact_added" msgid="7458335758501736665">"Număr cu apelări restricționate adăugat."</string>
-    <string name="edit_fdn_contact" msgid="7976936035587081480">"Modificați numărul cu apelări restricționate"</string>
-    <string name="updating_fdn_contact" msgid="8370929876849803600">"Se actualizează numărul cu apelări restricționate..."</string>
-    <string name="fdn_contact_updated" msgid="5497828782609005017">"Număr cu apelări restricționate actualizat."</string>
-    <string name="delete_fdn_contact" msgid="6668958073074151717">"Ștergeți numărul cu apelări restricționate"</string>
-    <string name="deleting_fdn_contact" msgid="5669163206349319969">"Se șterge numărul cu apelări restricționate..."</string>
-    <string name="fdn_contact_deleted" msgid="7154162327112259569">"Numărul cu apelări restricționate a fost șters."</string>
-    <string name="pin2_invalid" msgid="5470854099230755944">"FDN nu a fost actualizat, deoarece ați introdus un cod PIN incorect."</string>
-    <string name="fdn_invalid_number" msgid="1494755047900009147">"FDN nu a fost actualizat, deoarece numărul nu poate depăși 20 de cifre."</string>
+    <string name="add_fdn_contact" msgid="2481915899633353976">"Adăugați un număr cu apelări restricţionate"</string>
+    <string name="adding_fdn_contact" msgid="7627379633721940991">"Se adaugă numărul cu apelări restricţionate..."</string>
+    <string name="fdn_contact_added" msgid="7458335758501736665">"Număr cu apelări restricţionate adăugat."</string>
+    <string name="edit_fdn_contact" msgid="7976936035587081480">"Modificaţi numărul cu apelări restricţionate"</string>
+    <string name="updating_fdn_contact" msgid="8370929876849803600">"Se actualizează numărul cu apelări restricţionate..."</string>
+    <string name="fdn_contact_updated" msgid="5497828782609005017">"Număr cu apelări restricţionate actualizat."</string>
+    <string name="delete_fdn_contact" msgid="6668958073074151717">"Ștergeţi numărul cu apelări restricţionate"</string>
+    <string name="deleting_fdn_contact" msgid="5669163206349319969">"Se șterge numărul cu apelări restricţionate..."</string>
+    <string name="fdn_contact_deleted" msgid="7154162327112259569">"Numărul cu apelări restricţionate a fost șters."</string>
+    <string name="pin2_invalid" msgid="5470854099230755944">"FDN nu a fost actualizat, deoarece aţi introdus un cod PIN incorect."</string>
+    <string name="fdn_invalid_number" msgid="1494755047900009147">"FDN nu a fost actualizat, deoarece numărul nu poate depăşi 20 de cifre."</string>
     <string name="pin2_or_fdn_invalid" msgid="6025144083384701197">"Numărul FDN nu a fost actualizat. Codul PIN2 a fost incorect sau numărul de telefon a fost respins."</string>
     <string name="fdn_failed" msgid="540018079008319747">"Operațiunea FDN nu a reușit."</string>
-    <string name="simContacts_emptyLoading" msgid="2203331234764498011">"Se citește de pe cardul SIM..."</string>
+    <string name="simContacts_emptyLoading" msgid="2203331234764498011">"Se citeşte de pe cardul SIM..."</string>
     <string name="simContacts_empty" msgid="5270660846489561932">"Nicio persoană în agenda de pe cardul dvs. SIM."</string>
     <string name="simContacts_title" msgid="1861472842524839921">"Selectați pentru import"</string>
     <string name="simContacts_airplaneMode" msgid="5254946758982621072">"Pentru a importa persoane de contact de pe cardul SIM, dezactivați modul Avion."</string>
     <string name="enable_pin" msgid="5422767284133234860">"Activați/dezactivați codul PIN al cardului SIM"</string>
-    <string name="change_pin" msgid="9174186126330785343">"Schimbați codul PIN pentru SIM"</string>
+    <string name="change_pin" msgid="9174186126330785343">"Schimbaţi codul PIN pentru SIM"</string>
     <string name="enter_pin_text" msgid="8532615714751931951">"Codul PIN pentru cardul SIM:"</string>
     <string name="oldPinLabel" msgid="5287773661246368314">"Codul PIN vechi"</string>
     <string name="newPinLabel" msgid="207488227285336897">"Cod PIN nou"</string>
     <string name="confirmPinLabel" msgid="257597715098070206">"Confirmați noul cod PIN"</string>
-    <string name="badPin" msgid="8955102849303984935">"Codul PIN vechi pe care l-ați introdus nu este corect. Încercați din nou."</string>
+    <string name="badPin" msgid="8955102849303984935">"Codul PIN vechi pe care l-aţi introdus nu este corect. Încercați din nou."</string>
     <string name="mismatchPin" msgid="5923253370683071889">"Codurile PIN introduse nu se potrivesc. Încercați din nou."</string>
-    <string name="invalidPin" msgid="5981171102258684792">"Introduceți un cod PIN alcătuit din 4 până la 8 cifre."</string>
+    <string name="invalidPin" msgid="5981171102258684792">"Introduceţi un cod PIN alcătuit din 4 până la 8 cifre."</string>
     <string name="disable_sim_pin" msgid="3419351358300716472">"Ștergeți codul PIN pentru SIM"</string>
     <string name="enable_sim_pin" msgid="4845145659651484248">"Setați codul PIN pentru SIM"</string>
     <string name="enable_in_progress" msgid="3417917024688497010">"Se setează codul PIN…"</string>
@@ -414,7 +414,7 @@
     <string name="voicemail_settings_number_label" msgid="8524164258691887790">"Număr mesagerie vocală"</string>
     <string name="card_title_dialing" msgid="5769417478498348054">"Apelează"</string>
     <string name="card_title_redialing" msgid="8253487008234167266">"Se reapelează"</string>
-    <string name="card_title_conf_call" msgid="1162980346189744501">"Teleconferință"</string>
+    <string name="card_title_conf_call" msgid="1162980346189744501">"Teleconferinţă"</string>
     <string name="card_title_incoming_call" msgid="7364539451234646909">"Apel primit"</string>
     <string name="card_title_call_ended" msgid="5544730338889702298">"Apel încheiat"</string>
     <string name="card_title_on_hold" msgid="821463117892339942">"În așteptare"</string>
@@ -434,7 +434,7 @@
     <string name="incall_error_out_of_service_wfc" msgid="323851839058697057">"Rețeaua mobilă nu este disponibilă. Pentru a apela, conectați-vă la o rețea wireless."</string>
     <string name="incall_error_no_phone_number_supplied" msgid="1150414018684246528">"Pentru a apela, introduceți un număr valid."</string>
     <string name="incall_error_call_failed" msgid="6302746943230078197">"Nu se poate apela."</string>
-    <string name="incall_status_dialed_mmi" msgid="3672498861336189563">"Se pornește secvența MMI..."</string>
+    <string name="incall_status_dialed_mmi" msgid="3672498861336189563">"Se porneşte secvenţa MMI..."</string>
     <string name="incall_error_supp_service_unknown" msgid="655570339115407698">"Serviciul nu este compatibil"</string>
     <string name="incall_error_supp_service_switch" msgid="5237002176899962862">"Apelurile nu pot fi comutate."</string>
     <string name="incall_error_supp_service_separate" msgid="7224393405134545246">"Apelul nu poate fi separat."</string>
@@ -443,29 +443,31 @@
     <string name="incall_error_supp_service_reject" msgid="8998568661508655638">"Apelul nu poate fi respins."</string>
     <string name="incall_error_supp_service_hangup" msgid="7434513517153834426">"Apelurile nu pot fi eliberate."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="1782466780452640089">"Pentru a apela, conectați-vă la o rețea wireless."</string>
-    <string name="emergency_enable_radio_dialog_title" msgid="4627849966634578257">"Apel de urgență"</string>
+    <string name="emergency_enable_radio_dialog_title" msgid="4627849966634578257">"Apel de urgenţă"</string>
     <string name="emergency_enable_radio_dialog_message" msgid="207613549344420291">"Se activează semnalul radio..."</string>
     <string name="emergency_enable_radio_dialog_retry" msgid="5960061579996526883">"Fără semnal. Se încearcă din nou..."</string>
     <string name="dial_emergency_error" msgid="1509085166367420355">"Nu se poate apela. <xliff:g id="NON_EMERGENCY_NUMBER">%s</xliff:g> nu este un număr de urgență."</string>
     <string name="dial_emergency_empty_error" msgid="9130194953830414638">"Nu se poate apela. Formați un număr de urgență."</string>
-    <string name="dialerKeyboardHintText" msgid="9192914825413747792">"Utilizați tastatura pentru a forma"</string>
-    <string name="onscreenHoldText" msgid="2285258239691145872">"Rețineți"</string>
+    <string name="dialerKeyboardHintText" msgid="9192914825413747792">"Utilizaţi tastatura pentru a forma"</string>
+    <string name="onscreenHoldText" msgid="2285258239691145872">"Reţineţi"</string>
     <string name="onscreenEndCallText" msgid="4403855834875398585">"Terminat"</string>
     <string name="onscreenShowDialpadText" msgid="8561805492659639893">"Tastatură numerică"</string>
     <string name="onscreenMuteText" msgid="5011369181754261374">"Dezactivați sunetul"</string>
     <string name="onscreenAddCallText" msgid="5140385634712287403">"Adăugați un apel"</string>
-    <string name="onscreenMergeCallsText" msgid="6640195098064538950">"Îmbinați apelurile"</string>
-    <string name="onscreenSwapCallsText" msgid="1602990689244030047">"Schimbați"</string>
+    <string name="onscreenMergeCallsText" msgid="6640195098064538950">"Îmbinaţi apelurile"</string>
+    <string name="onscreenSwapCallsText" msgid="1602990689244030047">"Schimbaţi"</string>
     <string name="onscreenManageCallsText" msgid="5473231160123254154">"Gestionați apelurile"</string>
     <string name="onscreenManageConferenceText" msgid="6485935856534311346">"Gestion. conferința"</string>
     <string name="onscreenAudioText" msgid="1710087112800041743">"Audio"</string>
     <string name="onscreenVideoCallText" msgid="4800924186056115442">"Apel video"</string>
-    <string name="importSimEntry" msgid="6614358325359736031">"Importați"</string>
+    <string name="importSimEntry" msgid="6614358325359736031">"Importaţi"</string>
     <string name="importAllSimEntries" msgid="1503181169636198673">"Importați-le pe toate"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Se importă persoanele din agenda de pe cardul SIM"</string>
-    <string name="importToFDNfromContacts" msgid="2130620207013368580">"Importați din Agendă"</string>
+    <string name="importToFDNfromContacts" msgid="2130620207013368580">"Importaţi din Agendă"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Persoana de contact a fost importată"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Persoana de contact nu a fost importată"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Asistență auditivă"</string>
-    <string name="hac_mode_summary" msgid="6833851160514929341">"Activați compatibilitatea cu asistența auditivă"</string>
+    <string name="hac_mode_summary" msgid="6833851160514929341">"Activați compatibilitatea cu asistenţa auditivă"</string>
   <string-array name="tty_mode_entries">
     <item msgid="512950011423868021">"Mod TTY dezactivat"</item>
     <item msgid="3971695875449640648">"TTY plin"</item>
@@ -473,7 +475,7 @@
     <item msgid="5644925873488772224">"TTY VCO"</item>
   </string-array>
     <string name="dtmf_tones_title" msgid="5163153771291340803">"Tonuri DTMF"</string>
-    <string name="dtmf_tones_summary" msgid="3351820372864020331">"Setați lungimea tonurilor DTMF"</string>
+    <string name="dtmf_tones_summary" msgid="3351820372864020331">"Setaţi lungimea tonurilor DTMF"</string>
   <string-array name="dtmf_tone_entries">
     <item msgid="899650777817315681">"Normală"</item>
     <item msgid="2883365539347850535">"Lung"</item>
@@ -481,28 +483,28 @@
     <string name="network_info_message" msgid="7738596060242881930">"Mesaj de rețea"</string>
     <string name="network_error_message" msgid="3394780436230411413">"Mesaj de eroare"</string>
     <string name="ota_title_activate" msgid="8616918561356194398">"Activați-vă telefonul"</string>
-    <string name="ota_touch_activate" msgid="6553212803262586244">"Pentru a vă activa serviciul de telefonie, trebuie să efectuați un apel special. \n\nDupă ce apăsați „Activați”, ascultați instrucțiunile furnizate pentru a vă activa telefonul."</string>
+    <string name="ota_touch_activate" msgid="6553212803262586244">"Pentru a vă activa serviciul de telefonie, trebuie să efectuați un apel special. \n\nDupă ce apăsaţi „Activați”, ascultaţi instrucţiunile furnizate pentru a vă activa telefonul."</string>
     <string name="ota_hfa_activation_title" msgid="2234246934160473981">"Se activează..."</string>
     <string name="ota_hfa_activation_dialog_message" msgid="8092479227918463415">"Serviciul de date mobile este în curs de activare pe telefonul dvs.\n\nAcest proces poate dura până la 5 minute."</string>
-    <string name="ota_skip_activation_dialog_title" msgid="2943366608272261306">"Omiteți activarea?"</string>
-    <string name="ota_skip_activation_dialog_message" msgid="2440770373498870550">"Dacă omiteți activarea, nu puteți efectua apeluri și nici nu vă puteți conecta la o rețea de date mobilă (deși vă puteți conecta la rețele Wi-Fi). Până veți activa telefonul, vi se va solicita să-l activați de fiecare dată când îl porniți."</string>
-    <string name="ota_skip_activation_dialog_skip_label" msgid="3458532775091563208">"Omiteți"</string>
+    <string name="ota_skip_activation_dialog_title" msgid="2943366608272261306">"Omiteţi activarea?"</string>
+    <string name="ota_skip_activation_dialog_message" msgid="2440770373498870550">"Dacă omiteți activarea, nu puteţi efectua apeluri și nici nu vă puteţi conecta la o rețea de date mobilă (deși vă puteţi conecta la rețele Wi-Fi). Până veți activa telefonul, vi se va solicita să-l activați de fiecare dată când îl porniți."</string>
+    <string name="ota_skip_activation_dialog_skip_label" msgid="3458532775091563208">"Omiteţi"</string>
     <string name="ota_activate" msgid="1368528132525626264">"Activați"</string>
     <string name="ota_title_activate_success" msgid="6570240212263372046">"Telefonul este activat."</string>
     <string name="ota_title_problem_with_activation" msgid="7095824491970084367">"Problemă de activare"</string>
-    <string name="ota_listen" msgid="162923839877584937">"Urmăriți instrucțiunile rostite până când veți auzi că activarea este finalizată."</string>
+    <string name="ota_listen" msgid="162923839877584937">"Urmăriţi instrucţiunile rostite până când veți auzi că activarea este finalizată."</string>
     <string name="ota_speaker" msgid="6904589278542719647">"Difuzor"</string>
     <string name="ota_progress" msgid="460876637828044519">"Se programează telefonul…"</string>
     <string name="ota_failure" msgid="7713756181204620397">"Telefonul nu a putut fi programat"</string>
     <string name="ota_successful" msgid="1880780692887077407">"Telefonul dvs. este acum activat. Poate să dureze până la 15 minute până la pornirea serviciului."</string>
-    <string name="ota_unsuccessful" msgid="8072141612635635357">"Telefonul dvs. nu s-a activat. \nVă recomandăm să găsiți o zonă cu acoperire mai bună (lângă fereastră sau afară). \n\nPentru mai multe opțiuni, încercați din nou sau apelați serviciul pentru clienți."</string>
+    <string name="ota_unsuccessful" msgid="8072141612635635357">"Telefonul dvs. nu s-a activat. \nVă recomandăm să găsiţi o zonă cu acoperire mai bună (lângă fereastră sau afară). \n\nPentru mai multe opțiuni, încercaţi din nou sau apelaţi serviciul pentru clienţi."</string>
     <string name="ota_spc_failure" msgid="3909983542575030796">"ERORI DE DEPĂȘIRE SPC"</string>
     <string name="ota_call_end" msgid="4537279738134612388">"Înapoi"</string>
     <string name="ota_try_again" msgid="7685477206465902290">"Încercați din nou"</string>
     <string name="ota_next" msgid="3904945374358235910">"Înainte"</string>
     <string name="ecm_exit_dialog" msgid="4448531867763097533">"EcmExitDialog"</string>
-    <string name="phone_entered_ecm_text" msgid="6266424252578731203">"S-a activat modul de apelare inversă de urgență"</string>
-    <string name="phone_in_ecm_notification_title" msgid="3226896828951687085">"Mod de apelare inversă de urgență"</string>
+    <string name="phone_entered_ecm_text" msgid="6266424252578731203">"S-a activat modul de apelare inversă de urgenţă"</string>
+    <string name="phone_in_ecm_notification_title" msgid="3226896828951687085">"Mod de apelare inversă de urgenţă"</string>
     <string name="phone_in_ecm_call_notification_text" msgid="4611608947314729773">"Conexiune de date dezactivată"</string>
     <plurals name="phone_in_ecm_notification_time" formatted="false" msgid="8308381858502470919">
       <item quantity="few">Nicio conexiune de date timp de <xliff:g id="COUNT_1">%s</xliff:g> minute</item>
@@ -519,11 +521,11 @@
       <item quantity="other">Acțiunea selectată nu este disponibilă când telefonul este în modul Apelare inversă de urgență. Telefonul va fi în acest mod pentru <xliff:g id="COUNT_1">%s</xliff:g> de minute. Doriți să ieșiți acum?</item>
       <item quantity="one">Acțiunea selectată nu este disponibilă când telefonul este în modul Apelare inversă de urgență. Telefonul va fi în acest mod pentru <xliff:g id="COUNT_0">%s</xliff:g> minut. Doriți să ieșiți acum?</item>
     </plurals>
-    <string name="alert_dialog_in_ecm_call" msgid="1886723687211887104">"Acțiunea selectată nu este disponibilă în timpul efectuării unui apel de urgență."</string>
-    <string name="progress_dialog_exiting_ecm" msgid="4835734101617817074">"Se iese din modul Apelare inversă de urgență"</string>
+    <string name="alert_dialog_in_ecm_call" msgid="1886723687211887104">"Acţiunea selectată nu este disponibilă în timpul efectuării unui apel de urgenţă."</string>
+    <string name="progress_dialog_exiting_ecm" msgid="4835734101617817074">"Se iese din modul Apelare inversă de urgenţă"</string>
     <string name="alert_dialog_yes" msgid="6674268047820703974">"Da"</string>
     <string name="alert_dialog_no" msgid="1476091437797628703">"Nu"</string>
-    <string name="alert_dialog_dismiss" msgid="2491494287075907171">"Renunțați"</string>
+    <string name="alert_dialog_dismiss" msgid="2491494287075907171">"Renunţaţi"</string>
     <string name="voicemail_provider" msgid="5135942703327136909">"Servicii"</string>
     <string name="voicemail_settings" msgid="72448049107749316">"Configurare"</string>
     <string name="voicemail_number_not_set" msgid="6724904736891087856">"&lt;Nesetat&gt;"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 811aa8b..3da2429 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Отключено"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Ваш оператор не позволяет отключать переадресацию вызовов, если телефон находится вне зоны доступа."</string>
     <string name="updating_title" msgid="6146755386174019046">"Настройки вызовов"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Настройки вызовов может изменить только основной пользователь."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Настройки вызовов может изменить только основной пользователь"</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Настройки (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Ошибка настройки вызовов"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Чтение настроек…"</string>
@@ -466,6 +466,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Импортировать все"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Импорт контактов с SIM-карты"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Импортировать из контактов"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Контакт импортирован"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Не удалось импортировать контакт"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Слуховые аппараты"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Включить слуховой аппарат"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml
index f0f8427..43b0c62 100644
--- a/res/values-si-rLK/strings.xml
+++ b/res/values-si-rLK/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"අබලයි"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"ඔබගේ වාහකය ඔබගේ දුරකථනය ළඟා විය නොහැකි විට ඇමතුම් ඉදිරියට ගෙනයාම අබල කිරීමට සහාය නොදක්වයි."</string>
     <string name="updating_title" msgid="6146755386174019046">"ඇමතුම් සැකසීම්"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"ඇමතුම් සැකසීම් වෙනස් කළ හැක්කේ ප්‍රධාන පරිශීලකයකු විසින් පමණි."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"ඇමතුම් සැකසීම් වෙනස් කළ හැක්කේ පරිපාලක පරිශීලකයාට පමණි."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"සැකසීම් (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"ඇමතුම් සැකසුම් දෝෂය"</string>
     <string name="reading_settings" msgid="1920291699287055284">"සැකසුම් කියවමින්…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"සියල්ල ආයාත කරන්න"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"SIM සම්බන්ධතා ආයාත කරමින්"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"සම්බන්ධතා වෙතින් ආයාත කරන්න"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"ආයාත කළ සම්බන්ධතාවය"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"සම්බන්ධතාවය ආයාත කිරීමට නොහැකි විය"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"ඇසීමේ සහාය"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"ඇසීමේ සහාය සඳහා ගැලපීම සක්‍රිය කරන්න"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index d65476b..3be08f7 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Vypnuté"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Váš operátor neumožňuje zakázanie presmerovaní, keď je telefón nedostupný."</string>
     <string name="updating_title" msgid="6146755386174019046">"Nastavenia hovorov"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Nastavenia hovorov môže zmeniť iba hlavný používateľ."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Nastavenia hovorov môže zmeniť iba používateľ s povoleniami správcu."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Nastavenia (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Chyba nastavení hovorov"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Nastavenia sa načítajú…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Importovať všetko"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Importovanie kontaktov z SIM karty"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Import z kontaktov"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Kontakt bol importovaný"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Kontakt sa nepodarilo importovať"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Načúvacie pomôcky"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Zapnúť režim kompatibility s načúvacou pomôckou"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 8bd42db..49aca6c 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Onemogočeno"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Vaš operater ne podpira izklopa preusmeritve klicev, kadar je telefon nedosegljiv."</string>
     <string name="updating_title" msgid="6146755386174019046">"Nastavitve klicev"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Nastavitve klicanja lahko spremeni samo primarni uporabnik."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Nastavitve klicanja lahko spremeni samo uporabnik s skrbniškim dostopom."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Nastavitve (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Napaka nastavitev klicev"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Branje nastavitev …"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Uvozi vse"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Uvažanje stikov s kartice SIM"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Uvozi iz stikov"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Uvožen je bil stik"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Uvoz stika ni uspel"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Slušni pripomočki"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Vključi združljivost slušnega pripomočka"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml
index 2c8cae2..5e51847 100644
--- a/res/values-sq-rAL/strings.xml
+++ b/res/values-sq-rAL/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Çaktivizuar"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Operatori yt nuk mbështet çaktivizimin e transferimit të telefonatës kur telefoni është i paarritshëm."</string>
     <string name="updating_title" msgid="6146755386174019046">"Cilësimet e telefonatës"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Cilësimet e telefonatës mund të ndryshohen vetëm nga përdoruesi kryesor."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Cilësimet e telefonatës mund të ndryshohen vetëm nga administratori."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Cilësimet (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Gabim në cilësimet e telefonatës"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Po lexon cilësimet…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Importoji të gjitha"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Po importon kontaktet e kartës SIM"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Importo nga kontaktet"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Kontakti u importua"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Dështoi në importimin e kontaktit"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Aparatet e dëgjimit"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Aktivizo përputhshmërinë e aparateve të dëgjimit"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 5e0a2c5..403f09d 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Онемогућено"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Мобилни оператер не подржава онемогућавање преусмеравања позива када је телефон недоступан."</string>
     <string name="updating_title" msgid="6146755386174019046">"Подешавања позива"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Само примарни корисник може да мења подешавања позива."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Само кориснику са администраторским правима је дозвољено да мења подешавања позива."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Подешавања (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Грешка у подешавањима позива"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Подешавања се учитавају…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Увези све"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Увоз SIM контаката"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Увези из контаката"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Контакт је увезен"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Увоз контакта није успео"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Слушни апарат"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Укључи компатибилност са слушним апаратом"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 3282288..b36e59a 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Inaktiverat"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Operatören stöder inte inaktivering av vidarebefordran av samtal när det inte går att nå telefonen."</string>
     <string name="updating_title" msgid="6146755386174019046">"Samtalsinställningar"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Det är bara den primära användaren som kan ändra samtalsinställningar."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Det är bara administratören som kan ändra samtalsinställningar."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Inställningar (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Felaktiga samtalsinställningar"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Läser inställningar…"</string>
@@ -470,6 +470,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Importera alla"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Importera SIM-kontakter"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Importera från Kontakter"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Importerad kontakt"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Det gick inte att importera kontakter"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Hörapparater"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Aktivera kompatibilitet med hörapparat"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 27fc006..927c589 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Kimezimwa"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Mtoa huduma wako haauni ulemezaji wa kusambaza simu wakati simu yako haifikiwi."</string>
     <string name="updating_title" msgid="6146755386174019046">"Mipangilio ya simu"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Mipangilio ya simu inaweza kubadilishwa na mtumiaji wa msingi pekee."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Mipangilio ya simu inaweza kubadilishwa na mtumiaji wa akaunti ya msimamizi."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Mipangilio (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Hitlafu ya mipangilio ya kupiga simu"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Inasoma mipangilio…."</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Leta zote"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Inaleta anwani za SIM"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Ingiza kutoka kwa anwani"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Imeingiza anwani"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Imeshindwa kuingiza anwani"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Vifaa vya kusaidia kusikia"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Washa utangamano wa kifaa cha kusaidia kusikia"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml
index 83445af..cf93b97 100644
--- a/res/values-ta-rIN/strings.xml
+++ b/res/values-ta-rIN/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"முடக்கப்பட்டது"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"மொபைல் தொடர்புகொள்ள முடியாத இடத்தில் இருக்கும்போது, அழைப்பு பகிர்தலை முடக்குவதை ஆபரேட்டர் ஆதரிக்கவில்லை."</string>
     <string name="updating_title" msgid="6146755386174019046">"அழைப்பு அமைப்பு"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"முதன்மை பயனர் மட்டுமே அழைப்பிற்கான அமைப்புகளை மாற்ற முடியும்."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"நிர்வாகிப் பயனர் மட்டுமே அழைப்பிற்கான அமைப்புகளை மாற்ற முடியும்."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"அமைப்புகள் (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"அழைப்பு அமைப்புகளில் பிழை"</string>
     <string name="reading_settings" msgid="1920291699287055284">"அமைப்புகளைப் படிக்கிறது…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"எல்லாவற்றையும் இறக்குமதி செய்"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"சிம் தொடர்புகளிலிருந்து இறக்குமதி செய்கிறது"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"தொடர்புகளிலிருந்து இறக்குமதி செய்"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"தொடர்பு இறக்கப்பட்டது"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"தொடர்பை இறக்க முடியவில்லை"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"கேட்பதற்கான சாதனங்கள்"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"கேட்கும் சாதனத்தின் இணக்கத்தன்மையை இயக்கு"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml
index 7c04c3c..a2c577d 100644
--- a/res/values-te-rIN/strings.xml
+++ b/res/values-te-rIN/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"నిలిపివేయబడింది"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"మీ ఫోన్‌ను చేరుకోవడం సాధ్యపడనప్పుడు కాల్ ఫార్వర్డింగ్‌ను నిలిపివేయడానికి మీ క్యారియర్ మద్దతు ఇవ్వదు."</string>
     <string name="updating_title" msgid="6146755386174019046">"కాల్ సెట్టింగ్‌లు"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"కాల్ సెట్టింగ్‌లను ప్రాథమిక వినియోగదారు మాత్రమే మార్చగలరు."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"కాల్ సెట్టింగ్‌లను నిర్వాహక వినియోగదారు మాత్రమే మార్చగలరు."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"సెట్టింగ్‌లు (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"కాల్ సెట్టింగ్‌ల లోపం"</string>
     <string name="reading_settings" msgid="1920291699287055284">"సెట్టింగ్‌లను చదువుతోంది…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"అన్నింటినీ దిగుమతి చేయి"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"SIM పరిచయాలను దిగుమతి చేస్తోంది"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"పరిచయాల నుండి దిగుమతి చేయి"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"పరిచయం దిగుమతి చేయబడింది"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"పరిచయాన్ని దిగుమతి చేయడంలో విఫలమైంది"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"వినికిడి సహాయక సాధనాలు"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"వినికిడి సహాయక సాధనం అనుకూలతను ప్రారంభించండి"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 2a30062..4aaec69 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"ถูกปิดใช้งาน"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"ผู้ให้บริการของคุณไม่สนับสนุนการปิดใช้งานการโอนสายเมื่อติดต่อไม่ได้"</string>
     <string name="updating_title" msgid="6146755386174019046">"การตั้งค่าการโทร"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"มีเพียงผู้ใช้หลักเท่านั้นที่สามารถเปลี่ยนการตั้งค่าการโทรได้"</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"ผู้ใช้ระดับผู้ดูแลระบบเท่านั้นที่สามารถเปลี่ยนแปลงการตั้งค่าการโทรได้"</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"การตั้งค่า (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"ข้อผิดพลาดในการตั้งค่าการโทร"</string>
     <string name="reading_settings" msgid="1920291699287055284">"กำลังประมวลการตั้งค่า…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"นำเข้าทั้งหมด"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"กำลังนำเข้าสมุดโทรศัพท์ในซิม"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"นำเข้าจากสมุดโทรศัพท์"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"นำเข้ารายชื่อติดต่อแล้ว"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"ไม่สามารถนำเข้ารายชื่อติดต่อ"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"เครื่องช่วยฟัง"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"เปิดการช่วยฟัง"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 6f70fe8..72c9e86 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Hindi pinagana"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Hindi sinusuportahan ng iyong carrier ang hindi pagpapagana ng pagpasa ng tawag kapag hindi maabot ang iyong telepono."</string>
     <string name="updating_title" msgid="6146755386174019046">"Mga setting ng tawag"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Ang pangunahing user lang ang makakapagbago ng mga setting ng tawag."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Ang admin user lang ang maaaring magbago sa mga setting ng tawag."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Mga Setting (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Error sa mga setting ng tawag"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Binabasa ang mga setting…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"I-import lahat"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Ini-import ang mga contact sa SIM"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"I-import mula sa mga contact"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Na-import ang contact"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Hindi na-import ang contact"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Mga hearing aid"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"I-on ang compatibility ng hearing aid"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 59d1fc4..501154b 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Devre dışı"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Operatörünüz, telefonunuza ulaşılamadığında çağrı yönlendirmenin devre dışı bırakılmasını desteklemiyor."</string>
     <string name="updating_title" msgid="6146755386174019046">"Çağrı ayarları"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Çağrı ayarları sadece birincil kullanıcı tarafından değiştirilebilir."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Çağrı ayarları sadece yönetici tarafından değiştirilebilir."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Ayarlar (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Çağrı ayarları hatası"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Ayarlar okunuyor..."</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Tümünü içe aktar"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"SIM kişileri içe aktarılıyor"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Kişilerden içe aktar"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Kişi içe aktarıldı"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Kişi içe aktarılamadı"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"İşitme cihazları"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"İşitme cihazı uyumluluğunu aç"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index 91546ca..137d6a2 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Вимкнено"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Ваш оператор не підтримує вимкнення переадресації викликів, коли телефон недосяжний."</string>
     <string name="updating_title" msgid="6146755386174019046">"Налаштування викликів"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Налаштування виклику може змінити лише основний користувач."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Налаштування викликів може змінювати лише адміністратор."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Налаштування (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Помилка налаштування викликів"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Читання налаштувань…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Імпорт. всі"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Імпорт контактів SIM-карти"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Імпортув. з контактів"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Імпортований контакт"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Контакт не імпортовано"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Слухові апарати"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Увімкнути функцію НАС"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml
index 1cbd91d..d170948 100644
--- a/res/values-ur-rPK/strings.xml
+++ b/res/values-ur-rPK/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"غیر فعال"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"آپ کا کیریئر آپ کا فون ناقابل رسائی ہونے پر کال آگے منتقل کرنے کو غیر فعال کرنے کا تعاون نہیں کرتا ہے۔"</string>
     <string name="updating_title" msgid="6146755386174019046">"کال کی ترتیبات"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"صرف بنیادی صارف ہی کال کی ترتیبات تبدیل کر سکتا ہے۔"</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"صرف منتظم صارف ہی کال کی ترتیبات تبدیل کر سکتا ہے۔"</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"ترتیبات (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"کال کی ترتیبات کی خرابی"</string>
     <string name="reading_settings" msgid="1920291699287055284">"ترتیبات کو پڑھ رہا ہے…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"سبھی کو درآمد کریں"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"‏SIM کے رابطے درآمد کر رہا ہے"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"رابطوں سے درآمد کریں"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"درآمد کردہ رابطہ"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"رابطہ درآمد کرنے میں ناکام"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"سماعتی آلات"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"سماعتی آلہ کی ہم آہنگی آن کریں"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml
index d72c06b..1d4ede6 100644
--- a/res/values-uz-rUZ/strings.xml
+++ b/res/values-uz-rUZ/strings.xml
@@ -26,7 +26,7 @@
     <string name="payphone" msgid="4793877574636445118">"Taksofon"</string>
     <string name="onHold" msgid="9035493194749959955">"Kutmoqda"</string>
     <string name="mmiStarted" msgid="6347869857061147003">"MMI kodi ishga tushirildi"</string>
-    <string name="ussdRunning" msgid="485588686340541690">"USSD so‘rov bajarilmoqda…"</string>
+    <string name="ussdRunning" msgid="485588686340541690">"USSD kod bajarilmoqda…"</string>
     <string name="mmiCancelled" msgid="2771923949751842276">"MMI kodi bekor qilindi"</string>
     <string name="cancel" msgid="5044513931633602634">"Bekor qilish"</string>
     <string name="enter_input" msgid="1810529547726803893">"USSD xabari <xliff:g id="MIN_LEN">%d</xliff:g>dan <xliff:g id="MAX_LEN">%d</xliff:g>tagacha belgi bo‘lishi kerak. Yana urinib ko‘ring."</string>
@@ -38,7 +38,7 @@
     <string name="audio_mode_bluetooth" msgid="3047641300848211128">"Bluetooth"</string>
     <string name="wait_prompt_str" msgid="7601815427707856238">"Ushbu tovushlar jo‘natilsinmi?\n"</string>
     <string name="pause_prompt_str" msgid="1789964702154314806">"Tovushlar jo‘natilmoqda\n"</string>
-    <string name="send_button" msgid="4106860097497818751">"Yuborish"</string>
+    <string name="send_button" msgid="4106860097497818751">"Jo‘natish"</string>
     <string name="pause_prompt_yes" msgid="3564467212025151797">"Ha"</string>
     <string name="pause_prompt_no" msgid="6686238803236884877">"Yo‘q"</string>
     <string name="wild_prompt_str" msgid="5543521676355533577">"Belgilarni quyidagilar bilan almashtiring:"</string>
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"O‘chiq"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Telefoningiz o‘chiq bo‘lganida qo‘ng‘iroqlarni boshqa raqamga yo‘naltirishni o‘chirish xususiyati tarmoq operatoringizda yo‘q."</string>
     <string name="updating_title" msgid="6146755386174019046">"Qo‘ng‘iroq sozlamalari"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Faqat asosiy foydalanuvchi qo‘ng‘iroq sozlamalarini o‘zgartirishi mumkin."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Faqat administrator qo‘ng‘iroq sozlamalarini o‘zgartirishi mumkin."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Sozlamalar (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Qo‘ng‘iroq sozlamalarida xato"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Sozlamalar o‘qilmoqda…"</string>
@@ -418,7 +418,7 @@
     <string name="card_title_incoming_call" msgid="7364539451234646909">"Kiruvchi qo‘ng‘iroq"</string>
     <string name="card_title_call_ended" msgid="5544730338889702298">"Qo‘ng‘iroq tugadi"</string>
     <string name="card_title_on_hold" msgid="821463117892339942">"Kutish holatida"</string>
-    <string name="card_title_hanging_up" msgid="3999101620995182450">"Suhbat tugatilmoqda"</string>
+    <string name="card_title_hanging_up" msgid="3999101620995182450">"Go‘shak qo‘yilmoqda"</string>
     <string name="card_title_in_call" msgid="6346543933068225205">"Qo‘ng‘iroqda"</string>
     <string name="notification_voicemail_title" msgid="8933468752045550523">"Yangi ovozli xabar"</string>
     <string name="notification_voicemail_title_count" msgid="4366360747660929916">"Yangi ovozli xabar (<xliff:g id="COUNT">%d</xliff:g>)"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Barchasini import qilish"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"SIM karta kontaktlarini import qilish"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Kontaktlardan import qilish"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Kontakt import qilindi"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Kontaktni import qilib bo‘lmadi"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Eshitish qurilmalari"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Eshitish qurilmalari bilan ishlash xusisiyatini yoqish"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index ebceefd..a0f708d 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Đã tắt"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Nhà cung cấp dịch vụ của bạn không hỗ trợ vô hiệu hóa chuyển tiếp cuộc gọi khi điện thoại của bạn không thể truy cập được."</string>
     <string name="updating_title" msgid="6146755386174019046">"Cài đặt cuộc gọi"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Chỉ người dùng chính mới có thể thay đổi cài đặt cuộc gọi."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Chỉ người dùng quản trị mới có thể thay đổi cài đặt cuộc gọi."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Cài đặt (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Lỗi cài đặt cuộc gọi"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Đang đọc cài đặt…"</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Nhập tất cả"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Đang nhập danh bạ trên SIM"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Nhập từ danh bạ"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Đã nhập liên hệ"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Không nhập được liên hệ"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Trợ thính"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Bật khả năng tương thích trợ thính"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index ddd4488..4affbbe 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"未启用"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"您的运营商不支持在手机无法接通时停用来电转接功能。"</string>
     <string name="updating_title" msgid="6146755386174019046">"通话设置"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"只有主用户才能更改通话设置。"</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"只有管理员用户才能更改通话设置。"</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"设置(<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"通话设置出错"</string>
     <string name="reading_settings" msgid="1920291699287055284">"正在读取设置..."</string>
@@ -464,6 +464,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"全部导入"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"正在导入SIM联系人"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"从联系人导入"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"已导入联系人"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"无法导入联系人"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"助听器"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"启用助听器兼容模式"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 5a098a9..387b2b9 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"已停用"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"您的流動網絡供應商不支援在手機無法接通時停用轉接功能。"</string>
     <string name="updating_title" msgid="6146755386174019046">"通話設定"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"只有主要使用者可以變更通話設定。"</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"只有管理員可以變更通話設定。"</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"設定 (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"通話設定錯誤"</string>
     <string name="reading_settings" msgid="1920291699287055284">"正在讀取設定..."</string>
@@ -470,6 +470,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"全部匯入"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"正在匯入 SIM 通訊錄"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"從通訊錄匯入"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"已匯入聯絡人"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"無法匯入聯絡人"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"助聽器"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"開啟助聽器相容功能"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 5eaaf15..c2ae929 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"停用"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"您的行動通訊業者不支援手機無收訊時停用轉接功能。"</string>
     <string name="updating_title" msgid="6146755386174019046">"通話設定"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"只有主要使用者可以變更通話設定。"</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"只有管理員使用者可以變更通話設定。"</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"設定 (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"通話設定錯誤"</string>
     <string name="reading_settings" msgid="1920291699287055284">"正在讀取設定…"</string>
@@ -470,6 +470,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"全部匯入"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"匯入 SIM 聯絡人"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"從聯絡人匯入"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"已匯入聯絡人"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"無法匯入聯絡人"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"助聽器"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"開啟助聽器相容功能"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 5ec6152..aa378ef 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -117,7 +117,7 @@
     <string name="sum_cfnrc_disabled" msgid="7222141261321276464">"Khutshaziwe"</string>
     <string name="disable_cfnrc_forbidden" msgid="5646361343094064333">"Isiphathi sakho asisekeli ukuvimbela ukudlulisela ucingo lapho ifoni yakho ingafinyeleleki."</string>
     <string name="updating_title" msgid="6146755386174019046">"Izilungiselelo zekholi"</string>
-    <string name="call_settings_primary_user_only" msgid="5679923943740900965">"Izilungiselelo zekholi zingaguqulwa kuphela ngumsebenzisi oyinhloko."</string>
+    <string name="call_settings_admin_user_only" msgid="4526094783818216374">"Izilungiselelo zekholi zingaguqulwa kuphela ngumsebenzisi oyinhloko."</string>
     <string name="call_settings_with_label" msgid="3401177261468593519">"Izilungiselelo (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="7970259216988931777">"Iphutha lokulungiselela ikholi"</string>
     <string name="reading_settings" msgid="1920291699287055284">"Ifunda izilungiselelo..."</string>
@@ -468,6 +468,8 @@
     <string name="importAllSimEntries" msgid="1503181169636198673">"Ngenisa konke"</string>
     <string name="importingSimContacts" msgid="7374056215462575769">"Ingenisa othintana nabo be-SIM"</string>
     <string name="importToFDNfromContacts" msgid="2130620207013368580">"Ngenisa kothintana nabo"</string>
+    <string name="singleContactImportedMsg" msgid="6868483416182599206">"Ingenise oxhumana naye"</string>
+    <string name="failedToImportSingleContactMsg" msgid="415399285420353917">"Yehlulekile ukungenisa oxhumana naye"</string>
     <string name="hac_mode_title" msgid="8740268574688743289">"Izinsiza zokuzwa"</string>
     <string name="hac_mode_summary" msgid="6833851160514929341">"Vula ikhono lensiza yokuzwa"</string>
   <string-array name="tty_mode_entries">
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 4f57018..b30f8ce 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -139,6 +139,8 @@
     <string name="phone_accounts_make_sip_calls_with">Make SIP calls with</string>
     <!-- Entry in dialog to "ask first" for accounts when making a call -->
     <string name="phone_accounts_ask_every_time">Ask first</string>
+    <!-- Account label for when a SIM account has no service (i.e. airplane mode) -->
+    <string name="phone_accounts_default_account_label">No network available</string>
 
     <!-- Label for heading of the per-account settings section in the phone accounts settings
          screen. -->
@@ -258,7 +260,7 @@
     <!-- Title of the progress dialog displayed while updating Call settings -->
     <string name="updating_title">Call settings</string>
     <!-- Toast in Call settings when asked to launch settings for a secondary user -->
-    <string name="call_settings_primary_user_only">Call settings can only be changed by the primary user.</string>
+    <string name="call_settings_admin_user_only">Call settings can only be changed by the admin user.</string>
     <!-- Title of the "Call settings" settings screen, with a text label identifying which SIM the settings are for. -->
     <string name="call_settings_with_label">Settings (<xliff:g id="subscriptionlabel" example="Mock Carrier">%s</xliff:g>)</string>
     <!-- Title of the alert dialog displayed if an error occurs while updating Call settings -->
@@ -435,6 +437,8 @@
     <string name="data_enabled">Data enabled</string>
     <!-- Mobile network settings screen, setting summary text when check box is not selected (explains what selecting it would do) [CHAR LIMITS=40] -->
     <string name="data_enable_summary">Allow data usage</string>
+    <!-- Mobile network settings screen, title for alert dialog -->
+    <string name="dialog_alert_title">Attention</string>
     <!-- Mobile network settings screen, setting check box name -->
     <string name="roaming">Data roaming</string>
     <!-- Mobile network settings screen, setting summary text when check box is selected -->
@@ -966,7 +970,7 @@
     <!-- In-call screen: call failure message displayed in an error dialog -->
     <string name="incall_error_no_phone_number_supplied">To place a call, enter a valid number.</string>
     <!-- In-call screen: call failure message displayed in an error dialog -->
-    <string name="incall_error_call_failed">Can\'t call.</string>
+    <string name="incall_error_call_failed">Call failed.</string>
     <!-- In-call screen: status message displayed in a dialog when starting an MMI -->
     <string name="incall_status_dialed_mmi">Starting MMI sequence\u2026</string>
     <!-- In-call screen: message displayed in an error dialog -->
@@ -983,6 +987,8 @@
     <string name="incall_error_supp_service_reject">Can\'t reject call.</string>
     <!-- In-call screen: message displayed in an error dialog -->
     <string name="incall_error_supp_service_hangup">Can\'t release call(s).</string>
+    <!-- In-call screen: message displayed in an error dialog -->
+    <string name="incall_error_supp_service_hold">Can\'t hold calls.</string>
     <!-- In-call screen: call failure message displayed in an error dialog when WFC is enabled, is wifi-only, and not connected to a wireless network. [CHAR_LIMIT=NONE] -->
     <string name="incall_error_wfc_only_no_wireless_network">Connect to a wireless network to make a call.</string>
 
@@ -992,6 +998,8 @@
     <string name="emergency_enable_radio_dialog_message">Turning on radio\u2026</string>
     <!-- Status message for the "radio enable" UI for emergency calls -->
     <string name="emergency_enable_radio_dialog_retry">No service. Trying again\u2026</string>
+    <!-- Toast message shown when user tries to turn on airplane mode while in an emergency call -->
+    <string name="radio_off_during_emergency_call">Cannot enter airplane mode during an emergency call.</string>
 
     <!-- Dialer text on Emergency Dialer -->
     <!-- Emergency dialer: message displayed in an error dialog -->
@@ -1037,6 +1045,11 @@
     <!-- Import a single contact entry from contacts to the SIM card -->
     <string name="importToFDNfromContacts">Import from contacts</string>
 
+    <!-- Message shown when a single contact is imported from SIM card -->
+    <string name="singleContactImportedMsg">Imported contact</string>
+    <!-- Message shown when a single contact could not be imported from SIM card -->
+    <string name="failedToImportSingleContactMsg">Failed to import contact</string>
+
     <!-- Hearing aid settings -->
     <string name="hac_mode_title">Hearing aids</string>
     <string name="hac_mode_summary">Turn on hearing aid compatibility</string>
@@ -1295,7 +1308,7 @@
     <string name="wifi_calling_settings_key">button_wifi_calling_settings_key</string>
 
     <!-- Hint appearing below a selected action on the emergency dialer telling user to tap again to execute the action [CHAR LIMIT=NONE] -->
-    <string name="emergency_action_launch_hint">Touch again to open</string>
+    <string name="emergency_action_launch_hint">Tap again to open</string>
 
     <!-- Strings for IMAP -->
 
@@ -1308,4 +1321,9 @@
         A SIM card has activated your service and updated your phone\'s roaming capabilities.
     </string>
 
+    <!-- Call failure reason: Cannot add a call because there are already too many active calls. -->
+    <string name="callFailed_cdma_call_limit">
+        There are too many active calls. Please end or merge existing calls before placing a new one.
+    </string>
+
 </resources>
diff --git a/res/xml/network_setting.xml b/res/xml/network_setting.xml
index 58c19f7..875e1f3 100644
--- a/res/xml/network_setting.xml
+++ b/res/xml/network_setting.xml
@@ -21,7 +21,7 @@
         android:title="@string/cdma_lte_data_service">
     </PreferenceScreen>
 
-    <SwitchPreference
+    <com.android.phone.RestrictedSwitchPreference
         android:key="button_roaming_key"
         android:title="@string/roaming"
         android:persistent="false"
diff --git a/sip/res/values-af/strings.xml b/sip/res/values-af/strings.xml
index 0a3a023..b621aa9 100644
--- a/sip/res/values-af/strings.xml
+++ b/sip/res/values-af/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Opsioneel&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Raak om almal te wys"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Raak om almal te versteek"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Voer besonderhede van nuwe SIP-rekening in."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> word vereis en kan nie leeg wees nie."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Poortnommer moet tussen 1000 en 65534 wees."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Gaan eers jou internetverbinding na om \'n SIP-oproep te maak."</string>
diff --git a/sip/res/values-am/strings.xml b/sip/res/values-am/strings.xml
index 33afdda..3d3c7a0 100644
--- a/sip/res/values-am/strings.xml
+++ b/sip/res/values-am/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;አስገዳጅ ያልሆነ&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"ሁሉን ለማሳየት ▷ ይንኩ"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"ሁሉንም ለመደበቅ ▽ ይንኩ"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"አዲስ የSIP መለያ ዝርዝሮችን ያስገቡ።"</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> ይጠይቃል፣ ባዶ መተው አይቻልም።"</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"የወደብ ቁጥር በ1000 እና 65534 ውስጥ መሆን አለበት።"</string>
     <string name="no_internet_available" msgid="5523747991760017298">"የSIP ጥሪ ለማድረግ፣ በመጀመሪያ የበይነመረብ ግንኙነትዎን ይፈትሹ።"</string>
diff --git a/sip/res/values-ar/strings.xml b/sip/res/values-ar/strings.xml
index 6c4be12..1e21f1d 100644
--- a/sip/res/values-ar/strings.xml
+++ b/sip/res/values-ar/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"‏&lt;اختياري&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ المس لإظهار الكل"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ المس لإخفاء الكل"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"‏أدخل تفاصيل حساب SIP الجديد."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> مطلوب ولا يمكن تركه فارغًا."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"يجب أن يكون رقم المنفذ ما بين 1000 و65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"‏لإجراء اتصال SIP، تحقق من الاتصال بالإنترنت أولاً."</string>
diff --git a/sip/res/values-az-rAZ/strings.xml b/sip/res/values-az-rAZ/strings.xml
index 7f5f340..eaeebe7 100644
--- a/sip/res/values-az-rAZ/strings.xml
+++ b/sip/res/values-az-rAZ/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;İstəyə görə&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"Hamısını göstərmək üçün toxunun ▷"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"Hamısını gizlətmək üçün toxunun ▽"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Yeni SIP hesabından detalları daxil edin."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> tələb olunur və boş buraxıla bilməz."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Port 1000 və 65534 arasında olmalıdır."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"SIP zəngini yerləşdirmək üçün əvvəlcə İnternet bağlantınızı yoxlayın."</string>
diff --git a/sip/res/values-b+sr+Latn/strings.xml b/sip/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..d438a2b
--- /dev/null
+++ b/sip/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2014 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.
+ -->
+
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="sip_settings" msgid="3768482698061677257">"Podešavanja SIP-a"</string>
+    <string name="sip_accounts" msgid="85559497282185405">"SIP nalozi"</string>
+    <string name="sip_accounts_title" msgid="2082527045326874519">"Nalozi"</string>
+    <string name="sip_receive_calls" msgid="426678617137462173">"Primaj dolazne pozive"</string>
+    <string name="sip_receive_calls_summary" msgid="946161517528227523">"Više troši bateriju"</string>
+    <string name="sip_call_options_title" msgid="8421210494703869806">"Koristite SIP pozive"</string>
+    <string name="sip_call_options_wifi_only_title" msgid="5112579243580893890">"Koristite SIP pozive (samo za Wi-Fi)"</string>
+    <string name="sip_call_options_entry_1" msgid="7217659161237099900">"Za sve pozive kada je mreža za prenos podataka dostupna"</string>
+    <string name="sip_call_options_entry_2" msgid="1815335903940609729">"Samo za SIP pozive"</string>
+    <string name="sip_call_options_wifi_only_entry_1" msgid="1358513095551847314">"Za sve pozive"</string>
+    <string name="add_sip_account" msgid="800843669753980091">"Dodaj nalog"</string>
+    <string name="remove_sip_account" msgid="1367664438506503690">"Ukloni nalog"</string>
+    <string name="sip_account_list" msgid="5610858485304821480">"SIP nalozi"</string>
+    <string name="saving_account" msgid="5336529880235177448">"Čuvanje naloga..."</string>
+    <string name="removing_account" msgid="5537351356808985756">"Uklanjanje naloga..."</string>
+    <string name="sip_menu_save" msgid="7882219814563869225">"Sačuvaj"</string>
+    <string name="sip_menu_discard" msgid="2350421645423888438">"Odbaci"</string>
+    <string name="alert_dialog_close" msgid="1326011828713435134">"Zatvorite profil"</string>
+    <string name="alert_dialog_ok" msgid="4752048404605388940">"Potvrdi"</string>
+    <string name="close_profile" msgid="3122414058856309881">"Zatvori"</string>
+    <string name="registration_status_checking_status" msgid="6136793741862200337">"Provera statusa..."</string>
+    <string name="registration_status_registering" msgid="2677183977796278749">"Registrovanje..."</string>
+    <string name="registration_status_still_trying" msgid="7648151061205513458">"I dalje pokušava..."</string>
+    <string name="registration_status_not_receiving" msgid="7620333886153361090">"Ne primamo pozive."</string>
+    <string name="registration_status_no_data" msgid="2541999976218192413">"Registracija naloga je zaustavljena zato što ne postoji internet veza."</string>
+    <string name="registration_status_no_wifi_data" msgid="9154717387473039546">"Registracija naloga je zaustavljena zato što ne postoji Wi-Fi veza."</string>
+    <string name="registration_status_not_running" msgid="514205414303796800">"Registracija naloga nije uspela."</string>
+    <string name="registration_status_done" msgid="3264961069247314253">"Primamo pozive."</string>
+    <string name="registration_status_failed_try_later" msgid="2199970021756384317">"Registracija naloga nije uspela: <xliff:g id="REGISTRATION_ERROR_MESSAGE">%s</xliff:g>; pokušaćemo kasnije"</string>
+    <string name="registration_status_invalid_credentials" msgid="8406872554323334182">"Registracija naloga nije uspela: netačno korisničko ime ili lozinka."</string>
+    <string name="registration_status_server_unreachable" msgid="7710275557045148634">"Registracija naloga nije uspela: Proverite naziv servera."</string>
+    <string name="third_party_account_summary" msgid="9041060473615403041">"Ovaj nalog trenutno koristi aplikacija <xliff:g id="ACCOUNT_OWNER">%s</xliff:g>."</string>
+    <string name="sip_edit_title" msgid="1967247832635750410">"Detalji o SIP nalogu"</string>
+    <string name="sip_edit_new_title" msgid="266414118302574305">"Detalji o SIP nalogu"</string>
+    <string name="domain_address_title" msgid="1968479941328225423">"Server"</string>
+    <string name="username_title" msgid="6770064611005663470">"Korisničko ime"</string>
+    <string name="password_title" msgid="5289013731515564295">"Lozinka"</string>
+    <string name="display_name_title" msgid="579241787583079773">"Ime za prikaz"</string>
+    <string name="proxy_address_title" msgid="6890163365640631841">"Odlazna adresa proksija"</string>
+    <string name="port_title" msgid="6693965912656593862">"Broj porta"</string>
+    <string name="transport_title" msgid="889155457465372527">"Tip prenosa"</string>
+    <string name="send_keepalive_title" msgid="599627072150501159">"Pošalji keep-alive poruku"</string>
+    <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="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>
+    <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Dodirnite da biste sakrili sve"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Unesite detalje o novom SIP nalogu."</string>
+    <string name="empty_alert" msgid="6659484914371384024">"Polje <xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> je obavezno i ne može da bude prazno."</string>
+    <string name="not_a_valid_port" msgid="7931422555587011830">"Broj porta bi trebalo da bude između 1000 i 65.534."</string>
+    <string name="no_internet_available" msgid="5523747991760017298">"Da biste uputili SIP poziv, prvo proverite internet vezu."</string>
+    <string name="no_wifi_available" msgid="1955023904229673488">"Treba da budete povezani sa Wi-Fi mrežom da biste upućivali SIP pozive (koristite Podešavanja bežičnih veza i mreža)."</string>
+    <string name="no_voip" msgid="3038021971231952704">"SIP pozivanje nije podržano"</string>
+    <string name="sip_system_decide" msgid="5577696249416700671">"Automatski"</string>
+    <string name="sip_always_send_keepalive" msgid="4773022409239823318">"Uvek šalji"</string>
+    <string name="sip_connection_service_label" msgid="6935325004265884453">"Ugrađena funkcija SIP poziva"</string>
+</resources>
diff --git a/sip/res/values-bg/strings.xml b/sip/res/values-bg/strings.xml
index 7e5ac23..df5cbf9 100644
--- a/sip/res/values-bg/strings.xml
+++ b/sip/res/values-bg/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;По избор&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Докоснете за показване на всички"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Докоснете за скриване на всички"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Въведете подробностите за новия профил за SIP."</string>
     <string name="empty_alert" msgid="6659484914371384024">"Полето „<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g>“ е задължително и трябва да се попълни."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Номерът на порта трябва да е между 1000 и 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"За да осъществите обаждане през SIP, първо проверете връзката си с интернет."</string>
diff --git a/sip/res/values-bn-rBD/strings.xml b/sip/res/values-bn-rBD/strings.xml
index 3cc1e6e..ffd15f0 100644
--- a/sip/res/values-bn-rBD/strings.xml
+++ b/sip/res/values-bn-rBD/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;ঐচ্ছিক&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ সবকিছু দেখানোর জন্য স্পর্শ করুন"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ সবকিছু লুকানোর জন্য স্পর্শ করুন"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"নতুন SIP অ্যাকাউন্ট সম্বন্ধে বিশদ বিবরণ লিখুন।"</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> প্রয়োজনীয় এবং এটিকে ফাঁকা রাখা যাবে না৷"</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"পোর্ট নম্বরটিকে ১০০০ ও ৬৫৫৩৪ এর মধ্যে হতে হবে৷"</string>
     <string name="no_internet_available" msgid="5523747991760017298">"একটি SIP কল করতে প্রথমে আপনার ইন্টারনেট সংযোগ পরীক্ষা করুন৷"</string>
diff --git a/sip/res/values-ca/strings.xml b/sip/res/values-ca/strings.xml
index 4a22672..9234695 100644
--- a/sip/res/values-ca/strings.xml
+++ b/sip/res/values-ca/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Opcional&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Toca per mostrar-ho tot."</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Toca per amagar-ho tot."</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Introdueix els detalls del compte SIP nou."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> és obligatori i no es pot deixar en blanc."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"El número de port hauria d\'estar entre 1000 i 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Per fer una trucada SIP, comprova la connexió a Internet."</string>
diff --git a/sip/res/values-cs/strings.xml b/sip/res/values-cs/strings.xml
index fdb0e50..2d7c682 100644
--- a/sip/res/values-cs/strings.xml
+++ b/sip/res/values-cs/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Nepovinné&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Výběrem této položky zobrazíte všechna nastavení"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Výběrem této položky skryjete všechna nastavení"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Zadejte podrobnosti nového účtu SIP."</string>
     <string name="empty_alert" msgid="6659484914371384024">"Pole <xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> je povinné. Nelze je ponechat prázdné."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Číslo portu by mělo být od 1000 do 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Chcete-li uskutečnit volání SIP, nejdříve si zkontrolujte připojení k internetu."</string>
diff --git a/sip/res/values-da/strings.xml b/sip/res/values-da/strings.xml
index 462435e..fc5e443 100644
--- a/sip/res/values-da/strings.xml
+++ b/sip/res/values-da/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Valgfrit&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Tryk for at vise alle"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Tryk for at skjule alle"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Indtast oplysninger om den nye SIP-konto."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> skal udfyldes. Feltet må ikke være tomt."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Portnummeret skal være mellem 1000 og 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Før du foretager et SIP-opkald, skal du kontrollere din internetforbindelse."</string>
diff --git a/sip/res/values-de/strings.xml b/sip/res/values-de/strings.xml
index 7be04d2..9b1d47a 100644
--- a/sip/res/values-de/strings.xml
+++ b/sip/res/values-de/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Optional&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Tippen, um alle einzublenden"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Tippen, um alle auszublenden"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Gib Details zum neuen SIP-Konto ein."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> ist ein Pflichtfeld. Es darf nicht leer bleiben."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Portnummer muss zwischen 1000 und 65534 liegen."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Überprüfe zunächst deine Internetverbindung, um einen SIP-Anruf zu tätigen."</string>
diff --git a/sip/res/values-el/strings.xml b/sip/res/values-el/strings.xml
index 5f241ae..01f8270 100644
--- a/sip/res/values-el/strings.xml
+++ b/sip/res/values-el/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Προαιρετικό&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Αγγίξτε για εμφάνιση όλων"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▷ Αγγίξτε για απόκρυψη όλων"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Εισαγάγετε τα στοιχεία του νέου λογαριασμού SIP."</string>
     <string name="empty_alert" msgid="6659484914371384024">"Το πεδίο <xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> είναι υποχρεωτικό και δεν μπορεί να είναι κενό."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Ο αριθμός της θύρας θα πρέπει να είναι μεταξύ 1000 και 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Για να πραγματοποιήσετε μια κλήση SIP, ελέγξτε πρώτα τη σύνδεση διαδικτύου."</string>
diff --git a/sip/res/values-en-rAU/strings.xml b/sip/res/values-en-rAU/strings.xml
index 2b8c14a..59a9b16 100644
--- a/sip/res/values-en-rAU/strings.xml
+++ b/sip/res/values-en-rAU/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Optional&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Touch to show all"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Touch to hide all"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Enter details of new SIP account."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> is required and can\'t be left blank."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Port number should be within 1000 and 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"To place a SIP call, check your Internet connection first."</string>
diff --git a/sip/res/values-en-rGB/strings.xml b/sip/res/values-en-rGB/strings.xml
index 2b8c14a..59a9b16 100644
--- a/sip/res/values-en-rGB/strings.xml
+++ b/sip/res/values-en-rGB/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Optional&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Touch to show all"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Touch to hide all"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Enter details of new SIP account."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> is required and can\'t be left blank."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Port number should be within 1000 and 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"To place a SIP call, check your Internet connection first."</string>
diff --git a/sip/res/values-en-rIN/strings.xml b/sip/res/values-en-rIN/strings.xml
index 2b8c14a..59a9b16 100644
--- a/sip/res/values-en-rIN/strings.xml
+++ b/sip/res/values-en-rIN/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Optional&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Touch to show all"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Touch to hide all"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Enter details of new SIP account."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> is required and can\'t be left blank."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Port number should be within 1000 and 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"To place a SIP call, check your Internet connection first."</string>
diff --git a/sip/res/values-es-rUS/strings.xml b/sip/res/values-es-rUS/strings.xml
index 8da8d43..c16d375 100644
--- a/sip/res/values-es-rUS/strings.xml
+++ b/sip/res/values-es-rUS/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Opcional&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Tocar para mostrar todo"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Tocar para ocultar todo"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Ingresa los detalles de la cuenta SIP nueva."</string>
     <string name="empty_alert" msgid="6659484914371384024">"El campo <xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> es obligatorio y no puede quedar en blanco."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"El número de puerto debe estar dentro de 1000 y 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Para realizar una llamada SIP, primero comprueba que tienes conexión a Internet."</string>
diff --git a/sip/res/values-es/strings.xml b/sip/res/values-es/strings.xml
index ad97696..61f8b1c 100644
--- a/sip/res/values-es/strings.xml
+++ b/sip/res/values-es/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Opcional&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Tocar para mostrar todo"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Toca para ocultar todo"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Introduce la información de la cuenta de SIP nueva."</string>
     <string name="empty_alert" msgid="6659484914371384024">"El campo <xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> es obligatorio y no se puede dejar en blanco."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"El número de puerto debe estar comprendido entre 1.000 y 65.534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Antes de realizar una llamada SIP, comprueba tu conexión a Internet."</string>
diff --git a/sip/res/values-et-rEE/strings.xml b/sip/res/values-et-rEE/strings.xml
index cc14644..23ed65a 100644
--- a/sip/res/values-et-rEE/strings.xml
+++ b/sip/res/values-et-rEE/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Valikuline&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Puudutage kõige kuvamiseks"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Puudutage kõige peitmiseks"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Sisestage uue SPI-konto üksikasjad."</string>
     <string name="empty_alert" msgid="6659484914371384024">"Väli <xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> on kohustuslik, seda ei saa tühjaks jätta."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Pordi number peab jääma vahemikku 1000 kuni 65 534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"SIP-kõne tegemiseks kontrollige esmalt Interneti-ühendust."</string>
diff --git a/sip/res/values-eu-rES/strings.xml b/sip/res/values-eu-rES/strings.xml
index c62a29f..a859eb5 100644
--- a/sip/res/values-eu-rES/strings.xml
+++ b/sip/res/values-eu-rES/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Aukerakoa&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Guztiak erakusteko, ukitu"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Guztiak ezkutatzeko, ukitu"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Idatzi SIP kontu berriaren xehetasunak."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> beharrezkoa da eta ezin da hutsik utzi."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Ataka-zenbakiak 1000 eta 65534 artean egon behar luke."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"SIP deiak egiteko, egiaztatu Interneteko konexioa."</string>
diff --git a/sip/res/values-fa/strings.xml b/sip/res/values-fa/strings.xml
index 5b0cde0..7ea3987 100644
--- a/sip/res/values-fa/strings.xml
+++ b/sip/res/values-fa/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"‏&lt;اختیاری&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ جهت نمایش همه لمس کنید"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ برای پنهان کردن همه لمس کنید"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"‏جزئیات حساب جدید SIP را وارد کنید."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> ضروری است و نباید خالی بماند."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"شماره درگاه باید بین ۱۰۰۰ و ۶۵۵۳۴ باشد."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"‏برای برقراری تماس SIP، ابتدا اتصال اینترنتتان را بررسی کنید."</string>
diff --git a/sip/res/values-fi/strings.xml b/sip/res/values-fi/strings.xml
index dd0b69a..05aa2a1 100644
--- a/sip/res/values-fi/strings.xml
+++ b/sip/res/values-fi/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Valinnainen&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Näytä kaikki koskettamalla"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Piilota kaikki koskettamalla"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Anna uuden SIP-tilin tiedot."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> on pakollinen, joten se ei voi olla tyhjä."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Porttinumeron tulee olla 1 000 – 65 534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Jos haluat soittaa SIP-puhelun, tarkista ensin internetyhteytesi."</string>
diff --git a/sip/res/values-fr-rCA/strings.xml b/sip/res/values-fr-rCA/strings.xml
index ea210ec..60bd945 100644
--- a/sip/res/values-fr-rCA/strings.xml
+++ b/sip/res/values-fr-rCA/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Facultatif&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"Touchez ▷ pour tout afficher"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"Touchez ▽ pour tout masquer"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Entrez les détails du nouveau compte SIP."</string>
     <string name="empty_alert" msgid="6659484914371384024">"Le champ « <xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> » est obligatoire. Veuillez le remplir."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Le numéro de port doit être compris entre 1000 et 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Pour faire un appel SIP, veuillez d\'abord vérifier votre connexion Internet."</string>
diff --git a/sip/res/values-fr/strings.xml b/sip/res/values-fr/strings.xml
index a98533e..359576e 100644
--- a/sip/res/values-fr/strings.xml
+++ b/sip/res/values-fr/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Facultatif&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Appuyer ici pour tout afficher"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Appuyer ici pour tout masquer"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Saisissez les informations concernant le nouveau compte SIP."</string>
     <string name="empty_alert" msgid="6659484914371384024">"Le champ \"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g>\" est obligatoire. Veuillez le renseigner."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Le numéro de port doit être compris entre 1000 et 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Pour passer un appel SIP, veuillez d\'abord vérifier votre connexion Internet."</string>
diff --git a/sip/res/values-gl-rES/strings.xml b/sip/res/values-gl-rES/strings.xml
index 5a2c4ed..de43e95 100644
--- a/sip/res/values-gl-rES/strings.xml
+++ b/sip/res/values-gl-rES/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Opcional&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Toca aquí para mostrar todo"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Toca aquí para ocultar todo"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Introduce os datos da nova conta SIP."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> é obrigatorio e non se pode deixar en branco."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"O número do porto debe estar comprendido entre o 1000 e o 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Para realizar unha chamada SIP, primeiro debes comprobar a túa conexión de Internet."</string>
diff --git a/sip/res/values-gu-rIN/strings.xml b/sip/res/values-gu-rIN/strings.xml
index 40619d5..a947e4f 100644
--- a/sip/res/values-gu-rIN/strings.xml
+++ b/sip/res/values-gu-rIN/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;વૈકલ્પિક&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ બધુ દર્શાવવા માટે ટચ કરો"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ બધુ છુપાવવા માટે ટચ કરો"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"નવા SIP એકાઉન્ટની વિગતો દાખલ કરો."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> આવશ્યક છે અને ખાલી છોડી શકાતું નથી."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"પોર્ટ નંબર 1000 અને 65534 ની અંદરનો હોવો જોઈએ."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"SIP કૉલ કરવા માટે, પ્રથમ તમારું ઇન્ટરનેટ કનેક્શન તપાસો."</string>
diff --git a/sip/res/values-hi/strings.xml b/sip/res/values-hi/strings.xml
index fbf3fd2..ea665cb 100644
--- a/sip/res/values-hi/strings.xml
+++ b/sip/res/values-hi/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;वैकल्पिक&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ सभी दिखाने के लिए स्पर्श करें"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ सभी छिपाने के लिए स्पर्श करें"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"नए SIP खाते के विवरण डालें."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> आवश्यक है और इसे खाली नहीं छोड़ा जा सकता."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"पोर्ट नंबर 1000 और 65534 के बीच होना चाहिए."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"SIP कॉल करने के लिए, पहले अपना इंटरनेट कनेक्‍शन जांचें."</string>
diff --git a/sip/res/values-hr/strings.xml b/sip/res/values-hr/strings.xml
index 49d6970..cf57269 100644
--- a/sip/res/values-hr/strings.xml
+++ b/sip/res/values-hr/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Izborno&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Dodirnite da biste prikazali sve"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Dodirnite da biste sakrili sve"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Unesite pojedinosti novog SIP računa."</string>
     <string name="empty_alert" msgid="6659484914371384024">"Polje <xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> obavezno je i ne može ostati prazno."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Broj priključka trebao bi biti između 1000 i 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Da biste uputili SIP poziv, provjerite jeste li povezani s internetom."</string>
diff --git a/sip/res/values-hu/strings.xml b/sip/res/values-hu/strings.xml
index eda6bd0..12aef74 100644
--- a/sip/res/values-hu/strings.xml
+++ b/sip/res/values-hu/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Nem kötelező&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Érintse meg az összes megjelenítéséhez"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Érintse meg az összes elrejtéséhez"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Adja meg az új SIP-fiók részleteit."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> megadása kötelező, nem maradhat üresen."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"A port számának 1000 és 65534 között kell lennie."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"SIP-hívás indításához előbb ellenőrizze az internetkapcsolatát."</string>
diff --git a/sip/res/values-hy-rAM/strings.xml b/sip/res/values-hy-rAM/strings.xml
index e0eb582..cc1d26a 100644
--- a/sip/res/values-hy-rAM/strings.xml
+++ b/sip/res/values-hy-rAM/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Ընտրովի&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Հպեք՝ ցուցադրելու ամենը"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Հպեք՝ թաքցնելու ամենը"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Մուտքագրեք նոր SIP հաշվի տվյալները:"</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g>-ը պարտադիր է և չի կարող լինել դատարկ:"</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Միացքի համարը պետք է լինի 1000-ի և 65534-ի սահմաններում:"</string>
     <string name="no_internet_available" msgid="5523747991760017298">"SIP-ի միջոցով զանգ կատարելու համար նախ ստուգեք ձեր համացանցի կապակցումը:"</string>
diff --git a/sip/res/values-in/strings.xml b/sip/res/values-in/strings.xml
index d217120..6b4bb10 100644
--- a/sip/res/values-in/strings.xml
+++ b/sip/res/values-in/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Opsional&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Sentuh untuk menampilkan semua"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Sentuh untuk menyembunyikan semua"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Masukkan detail akun SIP baru."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> diwajibkan dan tidak boleh kosong."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Nomor port harus dalam rentang 1000 dan 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Untuk melakukan panggilan SIP, periksa sambungan internet terlebih dahulu."</string>
diff --git a/sip/res/values-is-rIS/strings.xml b/sip/res/values-is-rIS/strings.xml
index 49a45e7..1fa3c87 100644
--- a/sip/res/values-is-rIS/strings.xml
+++ b/sip/res/values-is-rIS/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Valfrjálst&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Snertu til að sýna allt"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Snertu til að fela allt"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Sláðu inn upplýsingar um nýjan SIP-reikning."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> er áskilið og má ekki vera autt."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Númer gáttar á að vera milli 1000 og 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Til að hringja SIP-símtal skaltu fyrst athuga nettenginguna þína."</string>
diff --git a/sip/res/values-it/strings.xml b/sip/res/values-it/strings.xml
index 97de314..ab04f42 100644
--- a/sip/res/values-it/strings.xml
+++ b/sip/res/values-it/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Facoltativo&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Tocca per mostrare tutto"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Tocca per nascondere tutto"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Inserisci i dati del nuovo account SIP."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> è obbligatorio e non può essere lasciato vuoto."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Il numero della porta deve essere compreso tra 1000 e 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Per effettuare una chiamata SIP, verifica prima la connessione Internet."</string>
diff --git a/sip/res/values-iw/strings.xml b/sip/res/values-iw/strings.xml
index 54712b7..f0ab757 100644
--- a/sip/res/values-iw/strings.xml
+++ b/sip/res/values-iw/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"‏&lt;אופציונלי&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ גע כדי להציג את הכל"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ גע כדי להסתיר את הכל"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"‏הזן את פרטי חשבון ה-SIP החדש."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> הוא שדה חובה ולא ניתן להשאיר אותו ריק."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"מספר היציאה צריך להיות בין 1000 ל-65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"‏כדי לבצע שיחת SIP, ראשית בדוק את חיבור האינטרנט שלך."</string>
diff --git a/sip/res/values-ja/strings.xml b/sip/res/values-ja/strings.xml
index d9dbc59..8487e9e 100644
--- a/sip/res/values-ja/strings.xml
+++ b/sip/res/values-ja/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;オプション&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷すべて表示"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽すべて非表示"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"新しいSIPアカウントの詳細情報を入力してください。"</string>
     <string name="empty_alert" msgid="6659484914371384024">"「<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g>」は必須です。空欄にはできません。"</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"ポート番号は1000~65534で指定してください。"</string>
     <string name="no_internet_available" msgid="5523747991760017298">"SIP通話を発信する前に、インターネット接続を確認してください。"</string>
diff --git a/sip/res/values-ka-rGE/strings.xml b/sip/res/values-ka-rGE/strings.xml
index e5dfb94..5760e90 100644
--- a/sip/res/values-ka-rGE/strings.xml
+++ b/sip/res/values-ka-rGE/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;სურვილისამებრ&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ შეეხეთ ყველას საჩვენებლად"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ შეეხეთ ყველას დასამალად"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"შეიყვანეთ თქვენი ახალი SIP ანგარიშის დეტალები."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> აუცილებელია და ცარიელი ვერ დარჩება."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"პორტის ნომერი უნდა იყოს 1000 – 65534 არეალში."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"SIP ზარის განხორციელებისათვის, პირველ რიგში შეამოწმეთ თქვენი ინტერნეტ კავშირი."</string>
diff --git a/sip/res/values-kk-rKZ/strings.xml b/sip/res/values-kk-rKZ/strings.xml
index 379e7df..b07dacd 100644
--- a/sip/res/values-kk-rKZ/strings.xml
+++ b/sip/res/values-kk-rKZ/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Міндетті емес&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Барлығын көрсету үшін түрту"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Барлығын жасыру үшін түрту"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Жаңа SIP есептік жазбасының мәліметтерін енгізіңіз."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> міндетті және оны бос қалдыруға болмайды."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Порт нөмірі 1000 және 65534 аралығында болуы керек."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"SIP қоңырауын шалу үшін алдымен интернет қосылымын тексеріңіз."</string>
diff --git a/sip/res/values-km-rKH/strings.xml b/sip/res/values-km-rKH/strings.xml
index c1d80b3..1b0d256 100644
--- a/sip/res/values-km-rKH/strings.xml
+++ b/sip/res/values-km-rKH/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;ជា​ជម្រើស&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"ប៉ះ ▷ ដើម្បី​បង្ហាញ​ទាំងអស់"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"ប៉ះ ▽ ដើម្បី​លាក់​ទាំងអស់"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"បញ្ចូលព័ត៌មានលម្អិតអំពីគណនី SIP ថ្មី"</string>
     <string name="empty_alert" msgid="6659484914371384024">"មិន​​អាច​ទុក​ឲ្យ​នៅ​ទទេ និង​បាន​ទាមទារ <xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> ។"</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"លេខ​ច្រក​គួរតែ​នៅ​ចន្លោះ ១០០០ និង ៦៥៥៣៤។"</string>
     <string name="no_internet_available" msgid="5523747991760017298">"ដើម្បីដាក់ការហៅ SIP ពិនិត្យការភ្ជាប់អ៊ីនធឺណិតរបស់អ្នកជាមុនសិន។"</string>
diff --git a/sip/res/values-kn-rIN/strings.xml b/sip/res/values-kn-rIN/strings.xml
index 8d95917..846fba1 100644
--- a/sip/res/values-kn-rIN/strings.xml
+++ b/sip/res/values-kn-rIN/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;ಐಚ್ಛಿಕ&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ ಎಲ್ಲವನ್ನೂ ತೋರಿಸಲು ಸ್ಪರ್ಶಿಸಿ"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ ಎಲ್ಲವನ್ನೂ ಮರೆಮಾಡಲು ಸ್ಪರ್ಶಿಸಿ"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"ಹೊಸ SIP ಖಾತೆಯ ವಿವರಗಳನ್ನು ನಮೂದಿಸಿ."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> ಅಗತ್ಯವಿದೆ ಮತ್ತು ಖಾಲಿ ಬಿಡುವಂತಿಲ್ಲ."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"ಪೋರ್ಟ್‌ ಸಂಖ್ಯೆಯು 1000 ಮತ್ತು 65534 ರ ವ್ಯಾಪ್ತಿಯೊಳಗಿರಬೇಕು."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"SIP ಕರೆ ಮಾಡಲು, ಮೊದಲು ನಿಮ್ಮ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವನ್ನು ಪರಿಶೀಲಿಸಿ."</string>
diff --git a/sip/res/values-ko/strings.xml b/sip/res/values-ko/strings.xml
index 0f5b7db..ea57042 100644
--- a/sip/res/values-ko/strings.xml
+++ b/sip/res/values-ko/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;선택사항&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ 모두 표시하려면 터치"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ 모두 숨기려면 터치"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"새 SIP 계정의 세부정보를 입력하세요."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g>은(는) 필수이므로 비워 둘 수 없습니다."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"포트 번호는 1000~65534 사이여야 합니다."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"SIP 통화를 하려면 먼저 인터넷 연결을 확인하세요."</string>
diff --git a/sip/res/values-ky-rKG/strings.xml b/sip/res/values-ky-rKG/strings.xml
index a61df19..8855772 100644
--- a/sip/res/values-ky-rKG/strings.xml
+++ b/sip/res/values-ky-rKG/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Кошумча&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Бардыгын көрсөтүү үчүн тийип коюңуз"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Бардыгын жашыруу үчүн тийип коюңуз"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Жаңы SIP каттоо эсебинин чоо-жайын киргизиңиз."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> талап кылынат жана бош калтырганга болбойт."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Порттун номери 1000 баштап 65534 чейин болушу керек."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"SIP чалуу жайгаштыруу үчүн, адегенде Интернет туташууңузду текшериңиз."</string>
diff --git a/sip/res/values-lo-rLA/strings.xml b/sip/res/values-lo-rLA/strings.xml
index 3bdc32c..e5921be 100644
--- a/sip/res/values-lo-rLA/strings.xml
+++ b/sip/res/values-lo-rLA/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;ໂຕເລືອກເສີມ&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ ແຕະ​ເພື່ອ​ສະແດງ​ທັງໝົດ"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ ແຕະ​ເພື່ອ​ເຊື່ອງ​ທັງໝົດ"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"ປ້ອນ​ລາຍ​ລະ​ອຽດ​ຂອງ​ບັນ​ຊີ SIP ໃໝ່​ເຂົ້າ​ໄປ."</string>
     <string name="empty_alert" msgid="6659484914371384024">"ຕ້ອງ​ລະບຸ <xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> ແລະ​ບໍ່​ສາມາດ​ປ່ອຍ​ຫວ່າງ​ໄດ້."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"ໝາຍ​ເລກ​ພອດ​ຄວນ​ຢູ່​ລະຫວ່າງ 1000 ແລະ 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"ເພື່ອ​ໃຊ້​ການ​ໂທ SIP, ກວດ​ເບິ່ງ​ການ​ເຊື່ອມ​ຕໍ່​ອິນ​ເຕີ​ເນັດ​ຂອງ​ທ່ານ​ກ່ອນ."</string>
diff --git a/sip/res/values-lt/strings.xml b/sip/res/values-lt/strings.xml
index b340e3b..da52cd5 100644
--- a/sip/res/values-lt/strings.xml
+++ b/sip/res/values-lt/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Pasirenkama&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Jei norite viską parodyti, palieskite"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Jei norite viską paslėpti, palieskite"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Įveskite išsamią naujos SIP paskyros informaciją."</string>
     <string name="empty_alert" msgid="6659484914371384024">"Lauke „<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g>“ būtina nurodyti vertę – jis negali likti tuščias."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Prievado numeris turi būti nuo 1 000 iki 65 534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Kad atliktumėte SIP skambutį, pirmiausia patikrinkite interneto ryšį."</string>
diff --git a/sip/res/values-lv/strings.xml b/sip/res/values-lv/strings.xml
index 0e6b541..48d6eb0 100644
--- a/sip/res/values-lv/strings.xml
+++ b/sip/res/values-lv/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Neobligāti&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Pieskarieties, lai rādītu visu"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Pieskarieties, lai paslēptu visu"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Ievadiet jaunā SIP konta datus."</string>
     <string name="empty_alert" msgid="6659484914371384024">"Lauks <xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> ir jāaizpilda obligāti; tas nedrīkst būt tukšs."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Porta numuram ir jābūt skaitlim no 1000 līdz 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Pirms veicat SIP zvanu, pārbaudiet interneta savienojumu."</string>
diff --git a/sip/res/values-mk-rMK/strings.xml b/sip/res/values-mk-rMK/strings.xml
index 96c043c..30af070 100644
--- a/sip/res/values-mk-rMK/strings.xml
+++ b/sip/res/values-mk-rMK/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"Изборно"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Допрете за да се прикажат сите"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Допрете за да се сокријат сите"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Внесете ги деталите за новата сметка со SIP."</string>
     <string name="empty_alert" msgid="6659484914371384024">"Потребно е <xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> и не може да се остави празно."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Бројот на портата треба да биде меѓу 1000 и 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"За да воспоставите повик со СИП, прво проверете го поврзувањето на интернет."</string>
diff --git a/sip/res/values-ml-rIN/strings.xml b/sip/res/values-ml-rIN/strings.xml
index 85b99aa..401b991 100644
--- a/sip/res/values-ml-rIN/strings.xml
+++ b/sip/res/values-ml-rIN/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;ഓപ്‌ഷണൽ&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ എല്ലാം കാണിക്കാൻ സ്‌പർശിക്കുക"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ എല്ലാം മറയ്‌ക്കാൻ സ്‌പർശിക്കുക"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"പുതിയ SIP അക്കൗണ്ട് വിശദാംശങ്ങൾ നൽകുക."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> ആവശ്യമായതിനാൽ ശൂന്യമായിടാനാകില്ല."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"പോർട്ട് നമ്പർ 1000, 65534 എന്നിവയ്‌ക്കിടയിലായിരിക്കണം."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"SIP കോൾചെയ്യുന്നതിന്, ആദ്യം നിങ്ങളുടെ ഇന്റർനെറ്റ് കണക്ഷൻ പരിശോധിക്കുക."</string>
diff --git a/sip/res/values-mn-rMN/strings.xml b/sip/res/values-mn-rMN/strings.xml
index 48792c6..9f62ae1 100644
--- a/sip/res/values-mn-rMN/strings.xml
+++ b/sip/res/values-mn-rMN/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Сонголтын&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Бүгдийг харуулахын тулд хүрнэ үү"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Бүгдийг нуухын тулд хүрнэ үү"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Шинэ SIP бүртгэлд дэлгэрэнгүй мэдээлэл нэмэх."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> заавал шаардагдах бөгөөд хоосон орхиж болохгүй."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Портын дугаар 1000 болон 65534 хооронд байх ёстой."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"SIP дуудлага хийхийн тулд эхлээд интернет сүлжээгээ шалгана уу"</string>
diff --git a/sip/res/values-mr-rIN/strings.xml b/sip/res/values-mr-rIN/strings.xml
index 66914f2..4f5e758 100644
--- a/sip/res/values-mr-rIN/strings.xml
+++ b/sip/res/values-mr-rIN/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;पर्यायी&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ सर्व दर्शविण्‍यासाठी स्‍पर्श करा"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ सर्व लपविण्‍यासाठी स्‍पर्श करा"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"नवीन SIP खात्याचा तपशील प्रविष्ट करा."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> आवश्‍यक आहे आणि रिक्त सोडले जाऊ शकत नाही."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"पोर्ट नंबर 1000 आणि 65534 मध्‍ये असावा."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"एक SIP कॉल करण्‍यासाठी, प्रथम आपले इंटरनेट कनेक्‍शन तपासा."</string>
diff --git a/sip/res/values-ms-rMY/strings.xml b/sip/res/values-ms-rMY/strings.xml
index b42068b..2ac1040 100644
--- a/sip/res/values-ms-rMY/strings.xml
+++ b/sip/res/values-ms-rMY/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Pilihan&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Sentuh untuk menunjukkan semua"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Sentuh untuk sembunyikan semua"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Masukkan butiran akaun SIP baharu."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> diperlukan dan tidak boleh dibiarkan kosong."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Nombor port harus berada dalam lingkungan 1000 dan 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Untuk membuat panggilan SIP, periksa sambungan Internet anda dahulu."</string>
diff --git a/sip/res/values-my-rMM/strings.xml b/sip/res/values-my-rMM/strings.xml
index 621d4fe..5591449 100644
--- a/sip/res/values-my-rMM/strings.xml
+++ b/sip/res/values-my-rMM/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;လိုချင်မှ လုပ်ရန်&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ အားလုံးပြရန် ထိပါ"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ အားလုံး ဖျောက်ရန် ထိပါ"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"SIP အကောင့်သစ်၏ အသေးစိတ်များရိုက်ထည့်ပါ။"</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> မှာ လိုအပ်ပြီး ပလာထား မရပါ"</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"ပို့ နံပါတ်မှာ ၁၀၀၀ မှ ၆၅၅၃၄ အတွင်းမှာ ရှိရပါမည်"</string>
     <string name="no_internet_available" msgid="5523747991760017298">"SIP ခေါ်ဆိုမှု ပြုလုပ်ရန်၊ သင့်အင်တာနက် ချိတ်ဆက်မှုကိုဦးစွာ စစ်ဆေးပါ။"</string>
diff --git a/sip/res/values-nb/strings.xml b/sip/res/values-nb/strings.xml
index 0d563e8..57bff86 100644
--- a/sip/res/values-nb/strings.xml
+++ b/sip/res/values-nb/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Valgfritt&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Trykk for å vise alle"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Trykk for å skjule alle"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Skriv inn opplysningene tilknyttet den nye SIP-kontoen."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> er obligatorisk. Feltet kan ikke være tomt."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Portnummeret må være mellom 1000 og 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"For å bruke SIP-anrop må du først sjekke internettilkoblingen din."</string>
diff --git a/sip/res/values-ne-rNP/strings.xml b/sip/res/values-ne-rNP/strings.xml
index 7ef1773..7e75a02 100644
--- a/sip/res/values-ne-rNP/strings.xml
+++ b/sip/res/values-ne-rNP/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;वैकल्पिकgt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ छोएर सबै देखाउनुहोस्"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ छोएर सबै लुकाउनुहोस्"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"नयाँ SIP खाताको विवरणहरू प्रविष्ट गर्नुहोस्।"</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> चाहिन्छ र खाली छोड्न सकिँदैन।"</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"पोर्ट संख्या १००० र  ६५५३४ को बीचमा हुनुपर्छ।"</string>
     <string name="no_internet_available" msgid="5523747991760017298">"एक SIP कल गर्नका लागि पहिले तपाईंको इन्टरनेट जडान जाँच गर्नुहोस्।"</string>
diff --git a/sip/res/values-nl/strings.xml b/sip/res/values-nl/strings.xml
index e090652..731dc62 100644
--- a/sip/res/values-nl/strings.xml
+++ b/sip/res/values-nl/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Optioneel&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Tikken om alles weer te geven"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Tikken om alles te verbergen"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Geef details op voor nieuw SIP-account."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> is verplicht en mag niet leeg worden gelaten."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Het poortnummer moet tussen 1000 en 65534 liggen."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Als je een SIP-oproep wilt plaatsen, controleer je eerst je internetverbinding."</string>
diff --git a/sip/res/values-pa-rIN/strings.xml b/sip/res/values-pa-rIN/strings.xml
index 1db0e5c..1f6e8b1 100644
--- a/sip/res/values-pa-rIN/strings.xml
+++ b/sip/res/values-pa-rIN/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;ਚੋਣਵਾਂ&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ ਸਾਰੇ ਦਿਖਾਉਣ ਲਈ ਛੋਹਵੋ"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ ਸਾਰੇ ਲੁਕਾਉਣ ਲਈ ਛੋਹਵੋ"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"ਨਵੇਂ SIP ਖਾਤੇ ਦੇ ਵੇਰਵੇ ਦਾਖ਼ਲ ਕਰੋ।"</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> ਲੁੜੀਂਦਾ ਹੈ ਅਤੇ ਇਸਨੂੰ ਖਾਲੀ ਨਹੀਂ ਛੱਡਿਆ ਜਾ ਸਕਦਾ।"</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"ਪੋਰਟ ਨੰਬਰ 1000 ਅਤੇ 65534 ਵਿਚਕਾਰ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।"</string>
     <string name="no_internet_available" msgid="5523747991760017298">"ਇੱਕ SIP ਕਾਲ ਕਰਨ ਲਈ, ਪਹਿਲਾਂ ਆਪਣੇ ਇੰਟਰਨੈਟ ਕਨੈਕਸ਼ਨ ਦੀ ਜਾਂਚ ਕਰੋ।"</string>
diff --git a/sip/res/values-pl/strings.xml b/sip/res/values-pl/strings.xml
index 47aa286..651af45 100644
--- a/sip/res/values-pl/strings.xml
+++ b/sip/res/values-pl/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Opcjonalny&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Dotknij, by wyświetlić wszystkie ustawienia"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Dotknij, by ukryć wszystko"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Wpisz szczegóły nowego konta SIP"</string>
     <string name="empty_alert" msgid="6659484914371384024">"Pole <xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> jest wymagane i nie może pozostać puste."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Numer portu powinien mieć wartość od 1000 do 65 534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Aby nawiązać połączenie SIP, najpierw sprawdź połączenie internetowe."</string>
diff --git a/sip/res/values-pt-rPT/strings.xml b/sip/res/values-pt-rPT/strings.xml
index 6c4fa54..81652de 100644
--- a/sip/res/values-pt-rPT/strings.xml
+++ b/sip/res/values-pt-rPT/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Opcional&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Toque para mostrar tudo"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Toque para ocultar tudo"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Introduza os detalhes da nova conta SIP."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> é obrigatório e tem de ser preenchido."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"O número da porta deve estar entre 1000 e 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Para efetuar uma chamada SIP, verifique primeiro a ligação à Internet."</string>
diff --git a/sip/res/values-pt/strings.xml b/sip/res/values-pt/strings.xml
index fabe5ad..21c89a9 100644
--- a/sip/res/values-pt/strings.xml
+++ b/sip/res/values-pt/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Opcional&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Toque para mostrar todas"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Toque para ocultar todas"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Digite os detalhes da nova conta SIP."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> é um campo obrigatório e não pode ser deixado em branco."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"O número da porta deve estar entre 1000 e 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Para fazer uma chamada SIP, verifique sua conexão com a Internet primeiro."</string>
diff --git a/sip/res/values-ro/strings.xml b/sip/res/values-ro/strings.xml
index a167b12..3cbb3f8 100644
--- a/sip/res/values-ro/strings.xml
+++ b/sip/res/values-ro/strings.xml
@@ -23,17 +23,17 @@
     <string name="sip_receive_calls_summary" msgid="946161517528227523">"Consumă mai multă baterie"</string>
     <string name="sip_call_options_title" msgid="8421210494703869806">"Folosiți apelarea SIP"</string>
     <string name="sip_call_options_wifi_only_title" msgid="5112579243580893890">"Folosiți apelarea SIP (numai prin Wi-Fi)"</string>
-    <string name="sip_call_options_entry_1" msgid="7217659161237099900">"Pentru toate apelurile, când rețeaua de date este disponibilă"</string>
+    <string name="sip_call_options_entry_1" msgid="7217659161237099900">"Pentru toate apelurile, când reţeaua de date este disponibilă"</string>
     <string name="sip_call_options_entry_2" msgid="1815335903940609729">"Numai pentru apeluri SIP"</string>
     <string name="sip_call_options_wifi_only_entry_1" msgid="1358513095551847314">"Pentru toate apelurile"</string>
     <string name="add_sip_account" msgid="800843669753980091">"Adăugați un cont"</string>
-    <string name="remove_sip_account" msgid="1367664438506503690">"Eliminați contul"</string>
+    <string name="remove_sip_account" msgid="1367664438506503690">"Eliminaţi contul"</string>
     <string name="sip_account_list" msgid="5610858485304821480">"Conturi SIP"</string>
     <string name="saving_account" msgid="5336529880235177448">"Se salvează contul..."</string>
     <string name="removing_account" msgid="5537351356808985756">"Se elimină contul..."</string>
     <string name="sip_menu_save" msgid="7882219814563869225">"Salvați"</string>
     <string name="sip_menu_discard" msgid="2350421645423888438">"Renunțați"</string>
-    <string name="alert_dialog_close" msgid="1326011828713435134">"Închideți profilul"</string>
+    <string name="alert_dialog_close" msgid="1326011828713435134">"Închideţi profilul"</string>
     <string name="alert_dialog_ok" msgid="4752048404605388940">"OK"</string>
     <string name="close_profile" msgid="3122414058856309881">"Închideți"</string>
     <string name="registration_status_checking_status" msgid="6136793741862200337">"Se verifică starea..."</string>
@@ -42,30 +42,31 @@
     <string name="registration_status_not_receiving" msgid="7620333886153361090">"Nu se primesc apeluri."</string>
     <string name="registration_status_no_data" msgid="2541999976218192413">"Înregistrarea contului s-a oprit deoarece nu există conexiune la internet."</string>
     <string name="registration_status_no_wifi_data" msgid="9154717387473039546">"Înregistrarea contului s-a oprit deoarece nu există conexiune Wi-Fi."</string>
-    <string name="registration_status_not_running" msgid="514205414303796800">"Înregistrarea contului nu a reușit."</string>
+    <string name="registration_status_not_running" msgid="514205414303796800">"Înregistrarea contului nu a reuşit."</string>
     <string name="registration_status_done" msgid="3264961069247314253">"Se primesc apeluri."</string>
-    <string name="registration_status_failed_try_later" msgid="2199970021756384317">"Înregistrarea contului nu a reușit: (<xliff:g id="REGISTRATION_ERROR_MESSAGE">%s</xliff:g>); se va încerca mai târziu"</string>
-    <string name="registration_status_invalid_credentials" msgid="8406872554323334182">"Înregistrarea contului nu a reușit: nume de utilizator sau parolă incorectă."</string>
-    <string name="registration_status_server_unreachable" msgid="7710275557045148634">"Înregistrarea contului nu a reușit: verificați numele serverului."</string>
+    <string name="registration_status_failed_try_later" msgid="2199970021756384317">"Înregistrarea contului nu a reuşit: (<xliff:g id="REGISTRATION_ERROR_MESSAGE">%s</xliff:g>); se va încerca mai târziu"</string>
+    <string name="registration_status_invalid_credentials" msgid="8406872554323334182">"Înregistrarea contului nu a reuşit: nume de utilizator sau parolă incorectă."</string>
+    <string name="registration_status_server_unreachable" msgid="7710275557045148634">"Înregistrarea contului nu a reuşit: verificaţi numele serverului."</string>
     <string name="third_party_account_summary" msgid="9041060473615403041">"Acest cont este utilizat în prezent de aplicația <xliff:g id="ACCOUNT_OWNER">%s</xliff:g>."</string>
     <string name="sip_edit_title" msgid="1967247832635750410">"Detalii cont SIP"</string>
     <string name="sip_edit_new_title" msgid="266414118302574305">"Detalii cont SIP"</string>
     <string name="domain_address_title" msgid="1968479941328225423">"Server"</string>
     <string name="username_title" msgid="6770064611005663470">"Nume de utilizator"</string>
     <string name="password_title" msgid="5289013731515564295">"Parolă"</string>
-    <string name="display_name_title" msgid="579241787583079773">"Numele afișat"</string>
-    <string name="proxy_address_title" msgid="6890163365640631841">"Adresă proxy de ieșire"</string>
+    <string name="display_name_title" msgid="579241787583079773">"Numele afişat"</string>
+    <string name="proxy_address_title" msgid="6890163365640631841">"Adresă proxy de ieşire"</string>
     <string name="port_title" msgid="6693965912656593862">"Numărul portului"</string>
     <string name="transport_title" msgid="889155457465372527">"Tip de transport"</string>
     <string name="send_keepalive_title" msgid="599627072150501159">"Trimiteți mesaje keep-alive"</string>
-    <string name="advanced_settings" msgid="6622996380747040711">"Setări opționale"</string>
+    <string name="advanced_settings" msgid="6622996380747040711">"Setări opţionale"</string>
     <string name="auth_username_title" msgid="8262491689004708265">"Nume de utilizator pentru autentificare"</string>
     <string name="auth_username_summary" msgid="941160241371436473">"Numele de utilizator folosit pentru autentificare"</string>
     <string name="default_preference_summary" msgid="1979249643719483249">"&lt;Nesetat&gt;"</string>
     <string name="display_name_summary" msgid="7155076491675565407">"&lt;Identic cu numele de utilizator&gt;"</string>
-    <string name="optional_summary" msgid="2363105560396317624">"&lt;Opțional&gt;"</string>
+    <string name="optional_summary" msgid="2363105560396317624">"&lt;Opţional&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Atingeți pentru a afișa tot"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Atingeți pentru a ascunde tot"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Introduceți detaliile noului cont SIP."</string>
     <string name="empty_alert" msgid="6659484914371384024">"Câmpul <xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> este obligatoriu și nu poate fi lăsat necompletat."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Numărul portului trebuie să fie cuprins între 1000 și 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Pentru a efectua un apel SIP, mai întâi verificați conexiunea la internet."</string>
diff --git a/sip/res/values-ru/strings.xml b/sip/res/values-ru/strings.xml
index 4a1c7be..16ce9d0 100644
--- a/sip/res/values-ru/strings.xml
+++ b/sip/res/values-ru/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Необязательно&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Нажмите, чтобы показать все"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Нажмите, чтобы скрыть все"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Укажите параметры нового SIP-аккаунта."</string>
     <string name="empty_alert" msgid="6659484914371384024">"Поле \"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g>\" должно быть заполнено."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Номер порта должен быть от 1000 до 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Чтобы сделать звонок через SIP, проверьте подключение к Интернету."</string>
diff --git a/sip/res/values-si-rLK/strings.xml b/sip/res/values-si-rLK/strings.xml
index cee3923..22bccb3 100644
--- a/sip/res/values-si-rLK/strings.xml
+++ b/sip/res/values-si-rLK/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;වෛකල්පිත&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ සියල්ල පෙන්වීමට ස්පර්ශ කරන්න"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ සියල්ල සැඟවීමට ස්පර්ශ කරන්න"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"නව SIP ගිණුමේ විස්තර ඇතුළත් කරන්න."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> අවශ්‍ය වන අතර හිස්ව තැබිය නොහැක."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"කවුළුවේ අංකය 1000 ත් 65534 ත් අතර විය යුතුය."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"SIP ඇමතුමක් ලබාගැනීමට, ඔබගේ අන්තර්ජාල සම්බන්ධතාව මුලින් පරික්ෂා කරන්න."</string>
diff --git a/sip/res/values-sk/strings.xml b/sip/res/values-sk/strings.xml
index 1800b88..a278b55 100644
--- a/sip/res/values-sk/strings.xml
+++ b/sip/res/values-sk/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Voliteľné&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Klepnutím všetko zobrazíte"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Klepnutím všetko skryjete"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Zadajte informácie o novom účte SIP."</string>
     <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>
diff --git a/sip/res/values-sl/strings.xml b/sip/res/values-sl/strings.xml
index 55f556b..ae994e3 100644
--- a/sip/res/values-sl/strings.xml
+++ b/sip/res/values-sl/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Izbirno&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Dotaknite se, da prikažete vse"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Dotaknite se, če želite skriti vse"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Vnesite podrobnosti novega računa SIP."</string>
     <string name="empty_alert" msgid="6659484914371384024">"Polje <xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> je obvezno in ne sme biti prazno."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Številka vrat mora biti med 1000 in 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Če želite opraviti klic SIP, najprej preverite internetno povezavo."</string>
diff --git a/sip/res/values-sq-rAL/strings.xml b/sip/res/values-sq-rAL/strings.xml
index f7c794f..3e42c58 100644
--- a/sip/res/values-sq-rAL/strings.xml
+++ b/sip/res/values-sq-rAL/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Jo e detyrueshme&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Prek për t\'i shfaqur të gjitha"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Prek për t\'i fshehur të gjitha"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Fut të dhënat e një llogarie të re SIP."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> është e detyrueshme dhe nuk mund të lihet bosh."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Numri i portës duhet të jetë brenda 1 000 dhe 65 534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Për të kryer një telefonatë SIP, kontrollo lidhjen e internetit së pari."</string>
diff --git a/sip/res/values-sr/strings.xml b/sip/res/values-sr/strings.xml
index 18ae28f..0c6b48a 100644
--- a/sip/res/values-sr/strings.xml
+++ b/sip/res/values-sr/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Опционално&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Додирните да бисте приказали све"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Додирните да бисте сакрили све"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Унесите детаље о новом SIP налогу."</string>
     <string name="empty_alert" msgid="6659484914371384024">"Поље <xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> је обавезно и не може да буде празно."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Број порта би требало да буде између 1000 и 65.534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Да бисте упутили SIP позив, прво проверите интернет везу."</string>
diff --git a/sip/res/values-sv/strings.xml b/sip/res/values-sv/strings.xml
index 685efd2..24b0da1 100644
--- a/sip/res/values-sv/strings.xml
+++ b/sip/res/values-sv/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Valfritt&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Tryck om du vill visa alla"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Tryck om du vill dölja alla"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Ange uppgifter för det nya SIP-kontot."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> är ett obligatoriskt fält som måste fyllas i."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Portnumret ska vara mellan 1000 och 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Om du vill ringa ett SIP-samtal kontrollerar du först att du är ansluten till internet."</string>
diff --git a/sip/res/values-sw/strings.xml b/sip/res/values-sw/strings.xml
index 714b7b2..64f2101 100644
--- a/sip/res/values-sw/strings.xml
+++ b/sip/res/values-sw/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&amp;lt Ni hiari &gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Gusa ili uonyeshe yote"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Gusa ili ufiche zote"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Weka maelezo ya akaunti mpya ya SIP."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> sharti ijazwe na haiwezi kuachwa wazi."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Nambari ya mlango inafaa kuwa kati ya 1000 na 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Ili upige simu ya SIP, kwanza kagua muunganisho wako wa Intaneti."</string>
diff --git a/sip/res/values-ta-rIN/strings.xml b/sip/res/values-ta-rIN/strings.xml
index 130fbb6..b31891e 100644
--- a/sip/res/values-ta-rIN/strings.xml
+++ b/sip/res/values-ta-rIN/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;விரும்பினால்&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ எல்லாவற்றையும் காட்ட தொடவும்"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ எல்லாவற்றையும் மறைக்கத் தொடவும்"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"புதிய SIP கணக்கின் விவரங்களை உள்ளிடவும்."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> அவசியமானது மற்றும் வெறுமையாக விடக்கூடாது."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"போர்ட் எண் 1000 இலிருந்து 65534 க்குள் இருக்க வேண்டும்."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"SIP மூலம் அழைக்க, முதலில் இணைய இணைப்பைச் சரிபார்க்கவும்."</string>
diff --git a/sip/res/values-te-rIN/strings.xml b/sip/res/values-te-rIN/strings.xml
index 713f42b..e7a433a 100644
--- a/sip/res/values-te-rIN/strings.xml
+++ b/sip/res/values-te-rIN/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;ఐచ్ఛికం&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ అన్నీ చూపడానికి తాకండి"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ అన్నీ దాచడానికి తాకండి"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"కొత్త SIP ఖాతా వివరాలను నమోదు చేయండి."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> అవసరం కావున ఖాళీగా వదిలిపెట్టకూడదు."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"పోర్ట్ సంఖ్య 1000 మరియు 65534 మధ్య ఉండాలి."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"SIP కాల్ చేయడానికి, ముందుగా మీ ఇంటర్నెట్ కనెక్షన్‌ను తనిఖీ చేయండి."</string>
diff --git a/sip/res/values-th/strings.xml b/sip/res/values-th/strings.xml
index c3e4e89..92e1a3f 100644
--- a/sip/res/values-th/strings.xml
+++ b/sip/res/values-th/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;ไม่บังคับ&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ แตะเพื่อแสดงทั้งหมด"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ แตะเพื่อซ่อนทั้งหมด"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"ป้อนรายละเอียดของบัญชี SIP ใหม่"</string>
     <string name="empty_alert" msgid="6659484914371384024">"ต้องระบุ <xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> และไม่สามารถปล่อยว่างได้"</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"หมายเลขพอร์ตควรอยู่ระหว่าง 1000 ถึง 65534"</string>
     <string name="no_internet_available" msgid="5523747991760017298">"หากต้องการโทรผ่าน SIP ให้ตรวจสอบการเชื่อมต่ออินเทอร์เน็ตก่อน"</string>
diff --git a/sip/res/values-tl/strings.xml b/sip/res/values-tl/strings.xml
index 893421a..a2a9e82 100644
--- a/sip/res/values-tl/strings.xml
+++ b/sip/res/values-tl/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Opsyonal&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Pindutin upang ipakita lahat"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Pindutin upang itago lahat"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Ilagay ang mga detalye ng bagong SIP account."</string>
     <string name="empty_alert" msgid="6659484914371384024">"Kinakailangan ang <xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> at hindi maaaring iwanang blangko."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Dapat na nasa pagitan ng 1000 at 65534 ang numero ng port."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Upang tumawag sa pamamagitan ng SIP, suriin muna ang iyong koneksyon sa Internet."</string>
diff --git a/sip/res/values-tr/strings.xml b/sip/res/values-tr/strings.xml
index dad7ab6..168eb79 100644
--- a/sip/res/values-tr/strings.xml
+++ b/sip/res/values-tr/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;İsteğe bağlı&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Tümünü görmek için dokunun"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Tümünü gizlemek için dokunun"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Yeni SIP hesabının ayrıntılarını girin"</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> gerekli, bu alan boş bırakılamaz."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Bağlantı noktası numarası 1000 ile 65534 arasında olmalıdır."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Bir SIP çağrısı yapmak için önce İnternet bağlantınızı kontrol edin."</string>
diff --git a/sip/res/values-uk/strings.xml b/sip/res/values-uk/strings.xml
index e295cb0..a671f39 100644
--- a/sip/res/values-uk/strings.xml
+++ b/sip/res/values-uk/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Додатково&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Торкніться, щоб показати все"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Торкніться, щоб сховати все"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Введіть деталі нового облікового запису SIP."</string>
     <string name="empty_alert" msgid="6659484914371384024">"Поле <xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> обов’язкове. Воно не може бути порожнім."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Введіть номер порту між 1000 та 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Щоб здійснити виклик SIP, спершу перевірте своє з’єднання з Інтернетом."</string>
diff --git a/sip/res/values-ur-rPK/strings.xml b/sip/res/values-ur-rPK/strings.xml
index 3ff39d1..ccd53c6 100644
--- a/sip/res/values-ur-rPK/strings.xml
+++ b/sip/res/values-ur-rPK/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"‏&lt;اختیاری&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"◁ سبھی کو دکھانے کیلئے ٹچ کریں"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ سبھی کو چھپانے کیلئے ٹچ کریں"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"‏نئے SIP اکاؤنٹ کی تفصیلات شامل کریں۔"</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> مطلوب ہے اور خالی نہیں چھوڑا جا سکتا۔"</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"پورٹ نمبر 1000 اور 65534 کے اندر ہونا چاہیے۔"</string>
     <string name="no_internet_available" msgid="5523747991760017298">"‏ایک SIP کال کرنے کیلئے، پہلے اپنا انٹرنیٹ کنکشن چیک کریں۔"</string>
diff --git a/sip/res/values-uz-rUZ/strings.xml b/sip/res/values-uz-rUZ/strings.xml
index 94c6cef..5600bcf 100644
--- a/sip/res/values-uz-rUZ/strings.xml
+++ b/sip/res/values-uz-rUZ/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Ixtiyoriy&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Barchasini ko‘rsatish uchun bosing"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Berkitish uchun bu yerga bosing"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Yangi SIP hisobingiz ma’lumotlarini kiriting."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g>ni to‘ldirish shart, u bo‘sh qolmasligi kerak."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Port raqami 1000 va 65534 oralig‘ida bo‘lishi kerak."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"SIP qo‘ng‘irog‘ini amalga oshirish uchun avval internetga ulanishni tekshiring."</string>
diff --git a/sip/res/values-vi/strings.xml b/sip/res/values-vi/strings.xml
index c72eb03..df6cfde 100644
--- a/sip/res/values-vi/strings.xml
+++ b/sip/res/values-vi/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Tùy chọn&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Chạm để hiển thị tất cả"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Chạm để ẩn tất cả"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Nhập chi tiết của tài khoản SIP mới."</string>
     <string name="empty_alert" msgid="6659484914371384024">"<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> là bắt buộc và không thể để trống."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Số cổng phải trong khoảng từ 1000 đến 65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Để thực hiện cuộc gọi SIP, trước tiên hãy kiểm tra kết nối Internet của bạn."</string>
diff --git a/sip/res/values-zh-rCN/strings.xml b/sip/res/values-zh-rCN/strings.xml
index db4e2e9..e239c83 100644
--- a/sip/res/values-zh-rCN/strings.xml
+++ b/sip/res/values-zh-rCN/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;可选&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ 触摸可全部显示"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ 触摸可全部隐藏"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"请输入新 SIP 帐号的详情。"</string>
     <string name="empty_alert" msgid="6659484914371384024">"“<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g>”属于必填字段,不得留空。"</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"端口号应在1000与65534之间。"</string>
     <string name="no_internet_available" msgid="5523747991760017298">"要拨打 SIP 电话,请先检查您的互联网连接。"</string>
diff --git a/sip/res/values-zh-rHK/strings.xml b/sip/res/values-zh-rHK/strings.xml
index 84fbcf0..eebe438 100644
--- a/sip/res/values-zh-rHK/strings.xml
+++ b/sip/res/values-zh-rHK/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;非必填&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ 輕觸即可全部顯示"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ 輕觸即可全部隱藏"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"請輸入新 SIP 帳戶的詳細資料。"</string>
     <string name="empty_alert" msgid="6659484914371384024">"「<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g>」為必填欄位,不得留空。"</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"通訊埠號碼必須介乎 1000 至 65534 之間。"</string>
     <string name="no_internet_available" msgid="5523747991760017298">"如要進行 SIP 通話,請先檢查您的互聯網連線。"</string>
diff --git a/sip/res/values-zh-rTW/strings.xml b/sip/res/values-zh-rTW/strings.xml
index 70a08dd..7f25be7 100644
--- a/sip/res/values-zh-rTW/strings.xml
+++ b/sip/res/values-zh-rTW/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;選擇性&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ 輕觸即可全部顯示"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ 輕觸即可全部隱藏"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"請輸入新 SIP 帳戶的詳細資料。"</string>
     <string name="empty_alert" msgid="6659484914371384024">"「<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g>」為必填欄位,不得留空。"</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"通訊埠號碼必須介於 1000 到 65534 間。"</string>
     <string name="no_internet_available" msgid="5523747991760017298">"如要撥打 SIP 電話,請先檢查您的網際網路連線。"</string>
diff --git a/sip/res/values-zu/strings.xml b/sip/res/values-zu/strings.xml
index 8e79375..3a6b00a 100644
--- a/sip/res/values-zu/strings.xml
+++ b/sip/res/values-zu/strings.xml
@@ -66,6 +66,7 @@
     <string name="optional_summary" msgid="2363105560396317624">"&lt;Ongakukhetha&gt;"</string>
     <string name="advanced_settings_show" msgid="7838761602853998622">"▷ Thinta ukuze ubonise konke"</string>
     <string name="advanced_settings_hide" msgid="3480554978705290228">"▽ Thinta ukuze ufihle konke"</string>
+    <string name="all_empty_alert" msgid="4087734950375192387">"Faka imininingwane ye-akhawunti entsha ye-SIP."</string>
     <string name="empty_alert" msgid="6659484914371384024">"I-<xliff:g id="INPUT_FIELD_NAME">%s</xliff:g> iyadingeka futhi ayikwazi ukungabi nalutho."</string>
     <string name="not_a_valid_port" msgid="7931422555587011830">"Inombolo yembobo kumele ibe phakathi kokungu-1000 nokungu-65534."</string>
     <string name="no_internet_available" msgid="5523747991760017298">"Ukuze wenze ikholi ye-SIP, hlola ukuxhumeka kwe-inthanethi yakho kuqala."</string>
diff --git a/sip/res/values/strings.xml b/sip/res/values/strings.xml
index b220d17..6ac7c8d 100644
--- a/sip/res/values/strings.xml
+++ b/sip/res/values/strings.xml
@@ -133,6 +133,8 @@
     <!-- Hint to hide the advanced settings section. [CHAR LIMIT=NONE] -->
     <string name="advanced_settings_hide">▽ Touch to hide all</string>
 
+    <!-- Text in an alert dialog telling the user that all input fields can not be left blank. [CHAR LIMIT=NONE] -->
+    <string name="all_empty_alert">Enter details of new SIP account.</string>
     <!-- Text in an alert dialog telling the user that some input field (name of which is also part of the strings being translated above) is required and can not be left blank. [CHAR LIMIT=NONE] -->
     <string name="empty_alert"><xliff:g id="input_field_name" example="Username, Password...">%s</xliff:g> is required and can\'t be left blank.</string>
     <!-- Showing that port number is out of range in an alert dialog. [CHAR LIMIT=NONE] -->
diff --git a/sip/src/com/android/services/telephony/sip/SipAccountRegistry.java b/sip/src/com/android/services/telephony/sip/SipAccountRegistry.java
index dd76c27..2987ef4 100644
--- a/sip/src/com/android/services/telephony/sip/SipAccountRegistry.java
+++ b/sip/src/com/android/services/telephony/sip/SipAccountRegistry.java
@@ -23,7 +23,6 @@
 import android.telecom.PhoneAccount;
 import android.telecom.PhoneAccountHandle;
 import android.telecom.TelecomManager;
-import android.text.TextUtils;
 import android.util.Log;
 
 import java.util.List;
@@ -67,7 +66,7 @@
                     sipManager.open(
                             mProfile,
                             SipUtil.createIncomingCallPendingIntent(context,
-                                    mProfile.getUriString()),
+                                    mProfile.getProfileName()),
                             null);
                 } else {
                     sipManager.open(mProfile);
@@ -231,9 +230,8 @@
      * @param enableProfile Sip account should be enabled.
      */
     private void startSipProfiles(Context context, String sipProfileName, boolean enableProfile) {
-        final SipSharedPreferences sipSharedPreferences = new SipSharedPreferences(context);
-        boolean isReceivingCalls = sipSharedPreferences.isReceivingCallsEnabled();
-        String primaryProfile = sipSharedPreferences.getPrimaryAccount();
+        final SipPreferences sipPreferences = new SipPreferences(context);
+        boolean isReceivingCalls = sipPreferences.isReceivingCallsEnabled();
         TelecomManager telecomManager = TelecomManager.from(context);
         SipManager sipManager = SipManager.newInstance(context);
         SipProfileDb profileDb = new SipProfileDb(context);
@@ -251,12 +249,6 @@
                 startSipServiceForProfile(profile, sipManager, context, isReceivingCalls);
             }
         }
-
-        if (primaryProfile != null) {
-            // Remove the primary account shared preference, ensuring the migration does not
-            // occur again in the future.
-            sipSharedPreferences.cleanupPrimaryAccountSetting();
-        }
     }
 
     /**
diff --git a/sip/src/com/android/services/telephony/sip/SipBroadcastReceiver.java b/sip/src/com/android/services/telephony/sip/SipBroadcastReceiver.java
index 545854d..66ae2da 100644
--- a/sip/src/com/android/services/telephony/sip/SipBroadcastReceiver.java
+++ b/sip/src/com/android/services/telephony/sip/SipBroadcastReceiver.java
@@ -21,10 +21,15 @@
 import android.content.Intent;
 import android.net.sip.SipManager;
 import android.os.Bundle;
+import android.os.UserHandle;
+import android.telecom.PhoneAccount;
 import android.telecom.PhoneAccountHandle;
 import android.telecom.TelecomManager;
 import android.util.Log;
 
+import com.android.phone.PhoneGlobals;
+import com.android.server.sip.SipService;
+
 /**
  * Broadcast receiver that handles SIP-related intents.
  */
@@ -36,13 +41,20 @@
     public void onReceive(Context context, final Intent intent) {
         String action = intent.getAction();
 
+        if (!isRunningInSystemUser()) {
+            if (VERBOSE) log("SipBroadcastReceiver only run in system user, ignore " + action);
+            return;
+        }
+
         if (!SipUtil.isVoipSupported(context)) {
             if (VERBOSE) log("SIP VOIP not supported: " + action);
             return;
         }
 
         SipAccountRegistry sipAccountRegistry = SipAccountRegistry.getInstance();
-        if (action.equals(SipManager.ACTION_SIP_INCOMING_CALL)) {
+        if (action.equals(Intent.ACTION_BOOT_COMPLETED)) {
+            SipUtil.startSipService();
+        } else if (action.equals(SipManager.ACTION_SIP_INCOMING_CALL)) {
             takeCall(context, intent);
         } else if (action.equals(SipManager.ACTION_SIP_SERVICE_UP) ||
                 action.equals(SipManager.ACTION_SIP_CALL_OPTION_CHANGED)) {
@@ -68,10 +80,20 @@
         if (accountHandle != null) {
             Bundle extras = new Bundle();
             extras.putParcelable(SipUtil.EXTRA_INCOMING_CALL_INTENT, intent);
-            TelecomManager.from(context).addNewIncomingCall(accountHandle, extras);
+            TelecomManager tm = TelecomManager.from(context);
+            PhoneAccount phoneAccount = tm.getPhoneAccount(accountHandle);
+            if(phoneAccount != null && phoneAccount.isEnabled()) {
+                tm.addNewIncomingCall(accountHandle, extras);
+            } else {
+                log("takeCall, PhoneAccount is disabled. Not accepting incoming call...");
+            }
         }
     }
 
+    private boolean isRunningInSystemUser() {
+        return UserHandle.myUserId() == UserHandle.USER_SYSTEM;
+    }
+
     private static void log(String msg) {
         Log.d(SipUtil.LOG_TAG, PREFIX + msg);
     }
diff --git a/sip/src/com/android/services/telephony/sip/SipConnection.java b/sip/src/com/android/services/telephony/sip/SipConnection.java
index 0d8a6f8..b10ae56 100644
--- a/sip/src/com/android/services/telephony/sip/SipConnection.java
+++ b/sip/src/com/android/services/telephony/sip/SipConnection.java
@@ -17,15 +17,18 @@
 package com.android.services.telephony.sip;
 
 import android.net.Uri;
+import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
 import android.telecom.AudioState;
 import android.telecom.Connection;
 import android.telecom.PhoneAccount;
+import android.telecom.TelecomManager;
 import android.util.Log;
 
 import com.android.internal.telephony.Call;
 import com.android.internal.telephony.CallStateException;
+import com.android.internal.telephony.PhoneConstants;
 import com.android.internal.telephony.sip.SipPhone;
 import com.android.services.telephony.DisconnectCauseUtil;
 
@@ -64,6 +67,7 @@
                     null);
         }
         updateAddress();
+        setTechnologyTypeExtra();
         setInitialized();
     }
 
@@ -309,6 +313,17 @@
         }
     }
 
+    private void setTechnologyTypeExtra() {
+        int phoneType = PhoneConstants.PHONE_TYPE_SIP;
+        if (getExtras() == null) {
+            Bundle b = new Bundle();
+            b.putInt(TelecomManager.EXTRA_CALL_TECHNOLOGY_TYPE, phoneType);
+            setExtras(b);
+        } else {
+            getExtras().putInt(TelecomManager.EXTRA_CALL_TECHNOLOGY_TYPE, phoneType);
+        }
+    }
+
     /**
      * Determines the address for an incoming number.
      *
diff --git a/sip/src/com/android/services/telephony/sip/SipConnectionService.java b/sip/src/com/android/services/telephony/sip/SipConnectionService.java
index ab4223a..a5f48d3 100644
--- a/sip/src/com/android/services/telephony/sip/SipConnectionService.java
+++ b/sip/src/com/android/services/telephony/sip/SipConnectionService.java
@@ -27,7 +27,6 @@
 import android.net.sip.SipProfile;
 import android.os.Bundle;
 import android.os.Handler;
-import android.os.ResultReceiver;
 import android.telecom.Connection;
 import android.telecom.ConnectionRequest;
 import android.telecom.ConnectionService;
diff --git a/sip/src/com/android/services/telephony/sip/SipEditor.java b/sip/src/com/android/services/telephony/sip/SipEditor.java
index 6304220..8bc7734 100644
--- a/sip/src/com/android/services/telephony/sip/SipEditor.java
+++ b/sip/src/com/android/services/telephony/sip/SipEditor.java
@@ -18,7 +18,6 @@
 
 import android.app.AlertDialog;
 import android.content.Intent;
-import android.net.sip.SipManager;
 import android.net.sip.SipProfile;
 import android.os.Bundle;
 import android.os.Parcelable;
@@ -58,7 +57,7 @@
     private static final int NA = 0;
 
     private AdvancedSettings mAdvancedSettings;
-    private SipSharedPreferences mSharedPreferences;
+    private SipPreferences mSipPreferences;
     private boolean mDisplayNameSet;
     private boolean mHomeButtonClicked;
     private boolean mUpdateRequired;
@@ -151,7 +150,7 @@
         if (VERBOSE) log("onCreate, start profile editor");
         super.onCreate(savedInstanceState);
 
-        mSharedPreferences = new SipSharedPreferences(this);
+        mSipPreferences = new SipPreferences(this);
         mProfileDb = new SipProfileDb(this);
         mSipAccountRegistry = SipAccountRegistry.getInstance();
 
@@ -342,9 +341,12 @@
             }
         }
 
-        if (allEmpty || !mUpdateRequired) {
+        if (!mUpdateRequired) {
             finish();
             return;
+        } else if (allEmpty) {
+            showAlert(getString(R.string.all_empty_alert));
+            return;
         } else if (firstEmptyFieldTitle != null) {
             showAlert(getString(R.string.empty_alert, firstEmptyFieldTitle));
             return;
@@ -401,7 +403,7 @@
                 .setPort(Integer.parseInt(PreferenceKey.Port.getValue()))
                 .setSendKeepAlive(isAlwaysSendKeepAlive())
                 .setAutoRegistration(
-                        mSharedPreferences.isReceivingCallsEnabled())
+                        mSipPreferences.isReceivingCallsEnabled())
                 .setAuthUserName(PreferenceKey.AuthUserName.getValue())
                 .build();
     }
diff --git a/sip/src/com/android/services/telephony/sip/SipSharedPreferences.java b/sip/src/com/android/services/telephony/sip/SipPreferences.java
similarity index 63%
rename from sip/src/com/android/services/telephony/sip/SipSharedPreferences.java
rename to sip/src/com/android/services/telephony/sip/SipPreferences.java
index bad7dd5..f344497 100644
--- a/sip/src/com/android/services/telephony/sip/SipSharedPreferences.java
+++ b/sip/src/com/android/services/telephony/sip/SipPreferences.java
@@ -18,57 +18,27 @@
 
 import android.content.Context;
 import android.content.Intent;
-import android.content.SharedPreferences;
 import android.net.sip.SipManager;
 import android.provider.Settings;
 import android.provider.Settings.SettingNotFoundException;
 import android.util.Log;
 
 /**
- * Wrapper for SIP's shared preferences.
+ * Wrapper for SIP's preferences.
  */
-public class SipSharedPreferences {
-    private static final String PREFIX = "[SipSharedPreferences] ";
+public class SipPreferences {
+    private static final String PREFIX = "[SipPreferences] ";
     private static final boolean VERBOSE = false; /* STOP SHIP if true */
 
+    // Used to clear out old SharedPreferences file during SipProfile Database Migration
     private static final String SIP_SHARED_PREFERENCES = "SIP_PREFERENCES";
 
-    /**
-     * @deprecated Primary account selection for SIP accounts is no longer relevant.
-     */
-    @Deprecated
-    private static final String KEY_PRIMARY_ACCOUNT = "primary";
-
-    private static final String KEY_NUMBER_OF_PROFILES = "profiles";
-
-    private SharedPreferences mPreferences;
     private Context mContext;
 
-    public SipSharedPreferences(Context context) {
-        mPreferences = context.getSharedPreferences(
-                SIP_SHARED_PREFERENCES, Context.MODE_WORLD_READABLE);
+    public SipPreferences(Context context) {
         mContext = context;
     }
 
-    /**
-     * Returns the primary account URI or null if it does not exist.
-     * @deprecated The primary account setting is no longer used.
-     */
-    @Deprecated
-    public String getPrimaryAccount() {
-        return mPreferences.getString(KEY_PRIMARY_ACCOUNT, null);
-    }
-
-    public void setProfilesCount(int number) {
-        SharedPreferences.Editor editor = mPreferences.edit();
-        editor.putInt(KEY_NUMBER_OF_PROFILES, number);
-        editor.apply();
-    }
-
-    public int getProfilesCount() {
-        return mPreferences.getInt(KEY_NUMBER_OF_PROFILES, 0);
-    }
-
     public void setSipCallOption(String option) {
         Settings.System.putString(mContext.getContentResolver(),
                 Settings.System.SIP_CALL_OPTIONS, option);
@@ -103,15 +73,10 @@
     }
 
     /**
-     * Performs cleanup of the shared preferences, removing the deprecated primary account key if
-     * it exists.
+     * Remove obsolete SharedPreferences File upon upgrade from M->N.
      */
-    public void cleanupPrimaryAccountSetting() {
-        if (mPreferences.contains(KEY_PRIMARY_ACCOUNT)) {
-            SharedPreferences.Editor editor = mPreferences.edit();
-            editor.remove(KEY_PRIMARY_ACCOUNT);
-            editor.apply();
-        }
+    public void clearSharedPreferences() {
+        mContext.deleteSharedPreferences(SIP_SHARED_PREFERENCES);
     }
 
     // TODO: back up to Android Backup
diff --git a/sip/src/com/android/services/telephony/sip/SipProfileDb.java b/sip/src/com/android/services/telephony/sip/SipProfileDb.java
index 578c683..e7b201b 100644
--- a/sip/src/com/android/services/telephony/sip/SipProfileDb.java
+++ b/sip/src/com/android/services/telephony/sip/SipProfileDb.java
@@ -24,7 +24,6 @@
 import android.util.Log;
 
 import java.io.File;
-import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.ObjectInputStream;
@@ -45,20 +44,32 @@
 
     private static final String SCHEME_PREFIX = "sip:";
 
+    private Context mContext;
     private String mProfilesDirectory;
-    private SipSharedPreferences mSipSharedPreferences;
+    private SipPreferences mSipPreferences;
     private int mProfilesCount = -1;
 
     public SipProfileDb(Context context) {
-        mProfilesDirectory = context.getFilesDir().getAbsolutePath() + PROFILES_DIR;
-        mSipSharedPreferences = new SipSharedPreferences(context);
+        // Sip Profile Db should always reference CE storage.
+        mContext = context.createCredentialProtectedStorageContext();
+        setupDatabase();
+    }
+
+    // Only should be used during migration from M->N to move database
+    public void accessDEStorageForMigration() {
+        mContext = mContext.createDeviceProtectedStorageContext();
+        setupDatabase();
+    }
+
+    private void setupDatabase() {
+        mProfilesDirectory = mContext.getFilesDir().getAbsolutePath() + PROFILES_DIR;
+        mSipPreferences = new SipPreferences(mContext);
     }
 
     public void deleteProfile(SipProfile p) {
         synchronized(SipProfileDb.class) {
             deleteProfile(new File(mProfilesDirectory + p.getProfileName()));
             if (mProfilesCount < 0) retrieveSipProfileListInternal();
-            mSipSharedPreferences.setProfilesCount(--mProfilesCount);
         }
     }
 
@@ -69,6 +80,16 @@
         file.delete();
     }
 
+    public void cleanupUponMigration() {
+        // Remove empty .../profiles/ directory
+        File dbDir = new File(mProfilesDirectory);
+        if(dbDir.isDirectory()) {
+            dbDir.delete();
+        }
+        // Remove SharedPreferences file as well
+        mSipPreferences.clearSharedPreferences();
+    }
+
     public void saveProfile(SipProfile p) throws IOException {
         synchronized(SipProfileDb.class) {
             if (mProfilesCount < 0) retrieveSipProfileListInternal();
@@ -82,7 +103,6 @@
                 oos = new ObjectOutputStream(fos);
                 oos.writeObject(p);
                 oos.flush();
-                mSipSharedPreferences.setProfilesCount(++mProfilesCount);
                 atomicFile.finishWrite(fos);
             } catch (IOException e) {
                 atomicFile.failWrite(fos);
@@ -93,10 +113,6 @@
         }
     }
 
-    public int getProfilesCount() {
-        return (mProfilesCount < 0) ?  mSipSharedPreferences.getProfilesCount() : mProfilesCount;
-    }
-
     public List<SipProfile> retrieveSipProfileList() {
         synchronized(SipProfileDb.class) {
             return retrieveSipProfileListInternal();
@@ -116,7 +132,6 @@
             sipProfileList.add(p);
         }
         mProfilesCount = sipProfileList.size();
-        mSipSharedPreferences.setProfilesCount(mProfilesCount);
         return sipProfileList;
     }
 
diff --git a/sip/src/com/android/services/telephony/sip/SipSettings.java b/sip/src/com/android/services/telephony/sip/SipSettings.java
index 76470e5..0d87798 100644
--- a/sip/src/com/android/services/telephony/sip/SipSettings.java
+++ b/sip/src/com/android/services/telephony/sip/SipSettings.java
@@ -16,9 +16,6 @@
 
 package com.android.services.telephony.sip;
 
-import com.android.internal.telephony.Phone;
-import com.android.internal.telephony.PhoneConstants;
-
 import android.app.ActionBar;
 import android.app.AlertDialog;
 import android.content.Context;
@@ -34,13 +31,9 @@
 import android.os.Bundle;
 import android.os.Parcelable;
 import android.os.Process;
-import android.preference.CheckBoxPreference;
 import android.preference.Preference;
-import android.preference.Preference.OnPreferenceClickListener;
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceCategory;
-import android.telecom.PhoneAccount;
-import android.telecom.TelecomManager;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.Menu;
@@ -76,7 +69,7 @@
     private PreferenceCategory mSipListContainer;
     private Map<String, SipPreference> mSipPreferenceMap;
     private List<SipProfile> mSipProfileList;
-    private SipSharedPreferences mSipSharedPreferences;
+    private SipPreferences mSipPreferences;
     private int mUid = Process.myUid();
 
     private class SipPreference extends Preference {
@@ -93,7 +86,7 @@
         void setProfile(SipProfile p) {
             mProfile = p;
             setTitle(getProfileName(p));
-            updateSummary(mSipSharedPreferences.isReceivingCallsEnabled()
+            updateSummary(mSipPreferences.isReceivingCallsEnabled()
                     ? getString(R.string.registration_status_checking_status)
                     : getString(R.string.registration_status_not_receiving));
         }
@@ -133,7 +126,7 @@
         super.onCreate(savedInstanceState);
 
         mSipManager = SipManager.newInstance(this);
-        mSipSharedPreferences = new SipSharedPreferences(this);
+        mSipPreferences = new SipPreferences(this);
         mProfileDb = new SipProfileDb(this);
 
         mPackageManager = getPackageManager();
@@ -231,7 +224,7 @@
             }
         }
 
-        if (!mSipSharedPreferences.isReceivingCallsEnabled()) return;
+        if (!mSipPreferences.isReceivingCallsEnabled()) return;
         for (SipProfile p : mSipProfileList) {
             if (mUid == p.getCallingUid()) {
                 try {
@@ -245,7 +238,12 @@
     }
 
     private void processActiveProfilesFromSipService() {
-        SipProfile[] activeList = mSipManager.getListOfProfiles();
+        SipProfile[] activeList = {};
+        try {
+            activeList = mSipManager.getListOfProfiles();
+        } catch (SipException e) {
+            log("SipManager could not retrieve SIP profiles: " + e);
+        }
         for (SipProfile activeProfile : activeList) {
             SipProfile profile = getProfileFromList(activeProfile);
             if (profile == null) {
diff --git a/sip/src/com/android/services/telephony/sip/SipUtil.java b/sip/src/com/android/services/telephony/sip/SipUtil.java
index e885fad..3678c46 100644
--- a/sip/src/com/android/services/telephony/sip/SipUtil.java
+++ b/sip/src/com/android/services/telephony/sip/SipUtil.java
@@ -31,8 +31,11 @@
 import android.text.TextUtils;
 import android.util.Log;
 
+import com.android.phone.PhoneGlobals;
 import com.android.phone.R;
+import com.android.server.sip.SipService;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -55,10 +58,10 @@
     }
 
     static PendingIntent createIncomingCallPendingIntent(
-            Context context, String sipUri) {
+            Context context, String sipProfileName) {
         Intent intent = new Intent(context, SipBroadcastReceiver.class);
         intent.setAction(SipManager.ACTION_SIP_INCOMING_CALL);
-        intent.putExtra(EXTRA_PHONE_ACCOUNT, SipUtil.createAccountHandle(context, sipUri));
+        intent.putExtra(EXTRA_PHONE_ACCOUNT, SipUtil.createAccountHandle(context, sipProfileName));
         return PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
     }
 
@@ -133,13 +136,60 @@
     }
 
     /**
+     * Upon migration from M->N, the SIP Profile database will be moved into DE storage. This will
+     * not be a problem for non-FBE enabled devices, since DE and CE storage is available at the
+     * same time. This will be a problem for backup/restore, however if the SIP Profile DB is
+     * restored onto a new FBE enabled device.
+     *
+     * Checks if the Sip Db is in DE storage. If it is, the Db is moved to CE storage and
+     * deleted.
+     */
+    private static void possiblyMigrateSipDb(Context context) {
+        SipProfileDb dbDeStorage = new SipProfileDb(context);
+        dbDeStorage.accessDEStorageForMigration();
+        List<SipProfile> profilesDeStorage = dbDeStorage.retrieveSipProfileList();
+        if(profilesDeStorage.size() != 0) {
+            Log.i(LOG_TAG, "Migrating SIP Profiles over!");
+            SipProfileDb dbCeStorage = new SipProfileDb(context);
+            //Perform Profile Migration
+            for (SipProfile profileToMove : profilesDeStorage) {
+                if (dbCeStorage.retrieveSipProfileFromName(
+                        profileToMove.getProfileName()) == null) {
+                    try {
+                        dbCeStorage.saveProfile(profileToMove);
+                    } catch (IOException e) {
+                        Log.w(LOG_TAG, "Error Migrating file to CE: " +
+                                profileToMove.getProfileName(), e);
+                    }
+                }
+                Log.i(LOG_TAG, "(Migration) Deleting SIP profile: " +
+                        profileToMove.getProfileName());
+                dbDeStorage.deleteProfile(profileToMove);
+            }
+        }
+        // Delete supporting structures if they exist
+        dbDeStorage.cleanupUponMigration();
+    }
+
+    /**
+     * Migrates the DB files over from CE->DE storage and starts the SipService.
+     */
+    public static void startSipService() {
+        Context phoneGlobalsContext = PhoneGlobals.getInstance();
+        // Migrate SIP database from DE->CE storage if the device has just upgraded.
+        possiblyMigrateSipDb(phoneGlobalsContext);
+        // Wait until boot complete to start SIP so that it has access to CE storage.
+        SipService.start(phoneGlobalsContext);
+    }
+
+    /**
      * Determines if the user has chosen to use SIP for PSTN calls as well as SIP calls.
      * @param context The context.
      * @return {@code True} if SIP should be used for PSTN calls.
      */
     private static boolean useSipForPstnCalls(Context context) {
-        final SipSharedPreferences sipSharedPreferences = new SipSharedPreferences(context);
-        return sipSharedPreferences.getSipCallOption().equals(Settings.System.SIP_ALWAYS);
+        final SipPreferences sipPreferences = new SipPreferences(context);
+        return sipPreferences.getSipCallOption().equals(Settings.System.SIP_ALWAYS);
     }
 
     /**
diff --git a/src/com/android/phone/CallController.java b/src/com/android/phone/CallController.java
index 3af4d7d..5b08662 100644
--- a/src/com/android/phone/CallController.java
+++ b/src/com/android/phone/CallController.java
@@ -234,16 +234,6 @@
             checkForOtaspCall(intent);
         }
 
-        // Clear out the "restore mute state" flag since we're
-        // initiating a brand-new call.
-        //
-        // (This call to setRestoreMuteOnInCallResume(false) informs the
-        // phone app that we're dealing with a new connection
-        // (i.e. placing an outgoing call, and NOT handling an aborted
-        // "Add Call" request), so we should let the mute state be handled
-        // by the PhoneUtils phone state change handler.)
-        mApp.setRestoreMuteOnInCallResume(false);
-
         CallStatusCode status = placeCallInternal(intent);
 
         switch (status) {
diff --git a/src/com/android/phone/CallFeaturesSetting.java b/src/com/android/phone/CallFeaturesSetting.java
index 00c9170..d74558f 100644
--- a/src/com/android/phone/CallFeaturesSetting.java
+++ b/src/com/android/phone/CallFeaturesSetting.java
@@ -30,6 +30,7 @@
 import android.os.Bundle;
 import android.os.PersistableBundle;
 import android.os.UserHandle;
+import android.os.UserManager;
 import android.preference.CheckBoxPreference;
 import android.preference.ListPreference;
 import android.preference.Preference;
@@ -82,8 +83,6 @@
         implements Preference.OnPreferenceChangeListener {
     private static final String LOG_TAG = "CallFeaturesSetting";
     private static final boolean DBG = (PhoneGlobals.DBG_LEVEL >= 2);
-    // STOPSHIP if true. Flag to override behavior default behavior to hide VT setting.
-    private static final boolean ENABLE_VT_FLAG = true;
 
     // String keys for preference lookup
     // TODO: Naming these "BUTTON_*" is confusing since they're not actually buttons(!)
@@ -171,9 +170,9 @@
         super.onCreate(icicle);
         if (DBG) log("onCreate: Intent is " + getIntent());
 
-        // Make sure we are running as the primary user.
-        if (UserHandle.myUserId() != UserHandle.USER_OWNER) {
-            Toast.makeText(this, R.string.call_settings_primary_user_only,
+        // Make sure we are running as an admin user.
+        if (!UserManager.get(this).isAdminUser()) {
+            Toast.makeText(this, R.string.call_settings_admin_user_only,
                     Toast.LENGTH_SHORT).show();
             finish();
             return;
@@ -263,7 +262,7 @@
             }
         }
 
-        if (ImsManager.isVtEnabledByPlatform(mPhone.getContext()) && ENABLE_VT_FLAG) {
+        if (ImsManager.isVtEnabledByPlatform(mPhone.getContext())) {
             boolean currentValue =
                     ImsManager.isEnhanced4gLteModeSettingEnabledByUser(mPhone.getContext())
                     ? PhoneGlobals.getInstance().phoneMgr.isVideoCallingEnabled(
@@ -289,9 +288,15 @@
             Intent intent = PhoneAccountSettingsFragment.buildPhoneAccountConfigureIntent(
                     this, simCallManager);
             if (intent != null) {
-                wifiCallingSettings.setTitle(R.string.wifi_calling);
-                wifiCallingSettings.setSummary(null);
-                wifiCallingSettings.setIntent(intent);
+                PackageManager pm = mPhone.getContext().getPackageManager();
+                List<ResolveInfo> resolutions = pm.queryIntentActivities(intent, 0);
+                if (!resolutions.isEmpty()) {
+                    wifiCallingSettings.setTitle(resolutions.get(0).loadLabel(pm));
+                    wifiCallingSettings.setSummary(null);
+                    wifiCallingSettings.setIntent(intent);
+                } else {
+                    prefSet.removePreference(wifiCallingSettings);
+                }
             } else {
                 prefSet.removePreference(wifiCallingSettings);
             }
diff --git a/src/com/android/phone/CallForwardEditPreference.java b/src/com/android/phone/CallForwardEditPreference.java
index 01097f4..ef92349 100644
--- a/src/com/android/phone/CallForwardEditPreference.java
+++ b/src/com/android/phone/CallForwardEditPreference.java
@@ -12,7 +12,9 @@
 import android.os.AsyncResult;
 import android.os.Handler;
 import android.os.Message;
+import android.telephony.PhoneNumberUtils;
 import android.text.BidiFormatter;
+import android.text.SpannableString;
 import android.text.TextDirectionHeuristics;
 import android.text.TextUtils;
 import android.util.AttributeSet;
@@ -151,18 +153,23 @@
 
     private void updateSummaryText() {
         if (isToggled()) {
-            CharSequence summaryOn;
             final String number = getRawPhoneNumber();
             if (number != null && number.length() > 0) {
                 // Wrap the number to preserve presentation in RTL languages.
                 String wrappedNumber = BidiFormatter.getInstance().unicodeWrap(
                         number, TextDirectionHeuristics.LTR);
                 String values[] = { wrappedNumber };
-                summaryOn = TextUtils.replace(mSummaryOnTemplate, SRC_TAGS, values);
+                String summaryOn = String.valueOf(
+                        TextUtils.replace(mSummaryOnTemplate, SRC_TAGS, values));
+                int start = summaryOn.indexOf(wrappedNumber);
+
+                SpannableString spannableSummaryOn = new SpannableString(summaryOn);
+                PhoneNumberUtils.addTtsSpan(spannableSummaryOn,
+                        start, start + wrappedNumber.length());
+                setSummaryOn(spannableSummaryOn);
             } else {
-                summaryOn = getContext().getString(R.string.sum_cfu_enabled_no_number);
+                setSummaryOn(getContext().getString(R.string.sum_cfu_enabled_no_number));
             }
-            setSummaryOn(summaryOn);
         }
 
     }
diff --git a/src/com/android/phone/CallNotifier.java b/src/com/android/phone/CallNotifier.java
index fc583c4..7836248 100644
--- a/src/com/android/phone/CallNotifier.java
+++ b/src/com/android/phone/CallNotifier.java
@@ -18,18 +18,14 @@
 
 import com.android.internal.telephony.Call;
 import com.android.internal.telephony.CallManager;
-import com.android.internal.telephony.CallerInfo;
-import com.android.internal.telephony.CallerInfoAsyncQuery;
 import com.android.internal.telephony.Connection;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneConstants;
-import com.android.internal.telephony.PhoneBase;
 import com.android.internal.telephony.TelephonyCapabilities;
 import com.android.internal.telephony.cdma.CdmaInformationRecords.CdmaDisplayInfoRec;
 import com.android.internal.telephony.cdma.CdmaInformationRecords.CdmaSignalInfoRec;
 import com.android.internal.telephony.cdma.SignalToneUtil;
 
-import android.app.ActivityManagerNative;
 import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.BluetoothHeadset;
 import android.bluetooth.BluetoothProfile;
@@ -37,14 +33,10 @@
 import android.media.AudioAttributes;
 import android.media.AudioManager;
 import android.media.ToneGenerator;
-import android.net.Uri;
 import android.os.AsyncResult;
 import android.os.Handler;
 import android.os.Message;
 import android.os.SystemProperties;
-import android.os.SystemVibrator;
-import android.os.Vibrator;
-import android.provider.CallLog.Calls;
 import android.provider.Settings;
 import android.telecom.TelecomManager;
 import android.telephony.DisconnectCause;
@@ -55,7 +47,6 @@
 import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener;
 import android.telephony.TelephonyManager;
 import android.util.ArrayMap;
-import android.util.EventLog;
 import android.util.Log;
 
 import java.util.Iterator;
@@ -77,30 +68,15 @@
     // Time to display the message from the underlying phone layers.
     private static final int SHOW_MESSAGE_NOTIFICATION_TIME = 3000; // msec
 
-    private static final AudioAttributes VIBRATION_ATTRIBUTES = new AudioAttributes.Builder()
-            .setContentType(AudioAttributes.CONTENT_TYPE_SPEECH)
-            .setUsage(AudioAttributes.USAGE_VOICE_COMMUNICATION)
-            .build();
-
     /** The singleton instance. */
     private static CallNotifier sInstance;
 
-    // values used to track the query state
-    private static final int CALLERINFO_QUERY_READY = 0;
-    private static final int CALLERINFO_QUERYING = -1;
-
-    // the state of the CallerInfo Query.
-    private int mCallerInfoQueryState;
-
-    // object used to synchronize access to mCallerInfoQueryState
-    private Object mCallerInfoQueryStateGuard = new Object();
     private Map<Integer, CallNotifierPhoneStateListener> mPhoneStateListeners =
             new ArrayMap<Integer, CallNotifierPhoneStateListener>();
 
     private PhoneGlobals mApplication;
     private CallManager mCM;
     private BluetoothHeadset mBluetoothHeadset;
-    private CallLogger mCallLogger;
 
     // ToneGenerator instance for playing SignalInfo tones
     private ToneGenerator mSignalInfoToneGenerator;
@@ -108,26 +84,37 @@
     // The tone volume relative to other sounds in the stream SignalInfo
     private static final int TONE_RELATIVE_VOLUME_SIGNALINFO = 80;
 
-    private Call.State mPreviousCdmaCallState;
     private boolean mVoicePrivacyState = false;
-    private boolean mIsCdmaRedialCall = false;
 
     // Cached AudioManager
     private AudioManager mAudioManager;
     private SubscriptionManager mSubscriptionManager;
     private TelephonyManager mTelephonyManager;
 
+    // Events from the Phone object:
+    public static final int PHONE_DISCONNECT = 3;
+    public static final int PHONE_STATE_DISPLAYINFO = 6;
+    public static final int PHONE_STATE_SIGNALINFO = 7;
+    public static final int PHONE_ENHANCED_VP_ON = 9;
+    public static final int PHONE_ENHANCED_VP_OFF = 10;
+    public static final int PHONE_SUPP_SERVICE_FAILED = 14;
+    public static final int PHONE_TTY_MODE_RECEIVED = 15;
+    // Events generated internally.
+    // We should store all the possible event type values in one place to make sure that
+    // they don't step on each others' toes.
+    public static final int INTERNAL_SHOW_MESSAGE_NOTIFICATION_DONE = 22;
+    // Other events from call manager
+    public static final int EVENT_OTA_PROVISION_CHANGE = 20;
+
     /**
      * Initialize the singleton CallNotifier instance.
      * This is only done once, at startup, from PhoneApp.onCreate().
      */
     /* package */ static CallNotifier init(
-            PhoneGlobals app,
-            CallLogger callLogger,
-            CallStateMonitor callStateMonitor) {
+            PhoneGlobals app) {
         synchronized (CallNotifier.class) {
             if (sInstance == null) {
-                sInstance = new CallNotifier(app, callLogger, callStateMonitor);
+                sInstance = new CallNotifier(app);
             } else {
                 Log.wtf(LOG_TAG, "init() called multiple times!  sInstance = " + sInstance);
             }
@@ -137,12 +124,9 @@
 
     /** Private constructor; @see init() */
     private CallNotifier(
-            PhoneGlobals app,
-            CallLogger callLogger,
-            CallStateMonitor callStateMonitor) {
+            PhoneGlobals app) {
         mApplication = app;
         mCM = app.mCM;
-        mCallLogger = callLogger;
 
         mAudioManager = (AudioManager) mApplication.getSystemService(Context.AUDIO_SERVICE);
         mTelephonyManager =
@@ -150,7 +134,7 @@
         mSubscriptionManager = (SubscriptionManager) mApplication.getSystemService(
                 Context.TELEPHONY_SUBSCRIPTION_SERVICE);
 
-        callStateMonitor.addListener(this);
+        registerForNotifications();
 
         BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
         if (adapter != null) {
@@ -188,50 +172,54 @@
         }
     }
 
+    /**
+     * Register for call state notifications with the CallManager.
+     */
+    private void registerForNotifications() {
+        mCM.registerForDisconnect(this, PHONE_DISCONNECT, null);
+        mCM.registerForCdmaOtaStatusChange(this, EVENT_OTA_PROVISION_CHANGE, null);
+        mCM.registerForDisplayInfo(this, PHONE_STATE_DISPLAYINFO, null);
+        mCM.registerForSignalInfo(this, PHONE_STATE_SIGNALINFO, null);
+        mCM.registerForInCallVoicePrivacyOn(this, PHONE_ENHANCED_VP_ON, null);
+        mCM.registerForInCallVoicePrivacyOff(this, PHONE_ENHANCED_VP_OFF, null);
+        mCM.registerForSuppServiceFailed(this, PHONE_SUPP_SERVICE_FAILED, null);
+        mCM.registerForTtyModeReceived(this, PHONE_TTY_MODE_RECEIVED, null);
+    }
+
     @Override
     public void handleMessage(Message msg) {
+        if (DBG) {
+            Log.d(LOG_TAG, "handleMessage(" + msg.what + ")");
+        }
         switch (msg.what) {
-            case CallStateMonitor.PHONE_NEW_RINGING_CONNECTION:
-                log("RINGING... (new)");
-                onNewRingingConnection((AsyncResult) msg.obj);
-                break;
-
-            case CallStateMonitor.PHONE_STATE_CHANGED:
-                onPhoneStateChanged((AsyncResult) msg.obj);
-                break;
-
-            case CallStateMonitor.PHONE_DISCONNECT:
+            case PHONE_DISCONNECT:
                 if (DBG) log("DISCONNECT");
                 // Stop any signalInfo tone being played when a call gets ended, the rest of the
                 // disconnect functionality in onDisconnect() is handled in ConnectionService.
                 stopSignalInfoTone();
                 break;
 
-            case CallStateMonitor.PHONE_UNKNOWN_CONNECTION_APPEARED:
-                onUnknownConnectionAppeared((AsyncResult) msg.obj);
-                break;
-
-            case CallStateMonitor.PHONE_STATE_DISPLAYINFO:
+            case PHONE_STATE_DISPLAYINFO:
                 if (DBG) log("Received PHONE_STATE_DISPLAYINFO event");
                 onDisplayInfo((AsyncResult) msg.obj);
                 break;
 
-            case CallStateMonitor.PHONE_STATE_SIGNALINFO:
+            case PHONE_STATE_SIGNALINFO:
                 if (DBG) log("Received PHONE_STATE_SIGNALINFO event");
                 onSignalInfo((AsyncResult) msg.obj);
                 break;
 
-            case CallStateMonitor.INTERNAL_SHOW_MESSAGE_NOTIFICATION_DONE:
+            case INTERNAL_SHOW_MESSAGE_NOTIFICATION_DONE:
                 if (DBG) log("Received Display Info notification done event ...");
                 PhoneDisplayMessage.dismissMessage();
                 break;
 
-            case CallStateMonitor.EVENT_OTA_PROVISION_CHANGE:
+            case EVENT_OTA_PROVISION_CHANGE:
                 if (DBG) log("EVENT_OTA_PROVISION_CHANGE...");
                 mApplication.handleOtaspEvent(msg);
                 break;
 
-            case CallStateMonitor.PHONE_ENHANCED_VP_ON:
+            case PHONE_ENHANCED_VP_ON:
                 if (DBG) log("PHONE_ENHANCED_VP_ON...");
                 if (!mVoicePrivacyState) {
                     int toneToPlay = InCallTonePlayer.TONE_VOICE_PRIVACY;
@@ -240,7 +228,7 @@
                 }
                 break;
 
-            case CallStateMonitor.PHONE_ENHANCED_VP_OFF:
+            case PHONE_ENHANCED_VP_OFF:
                 if (DBG) log("PHONE_ENHANCED_VP_OFF...");
                 if (mVoicePrivacyState) {
                     int toneToPlay = InCallTonePlayer.TONE_VOICE_PRIVACY;
@@ -249,12 +237,12 @@
                 }
                 break;
 
-            case CallStateMonitor.PHONE_SUPP_SERVICE_FAILED:
+            case PHONE_SUPP_SERVICE_FAILED:
                 if (DBG) log("PHONE_SUPP_SERVICE_FAILED...");
                 onSuppServiceFailed((AsyncResult) msg.obj);
                 break;
 
-            case CallStateMonitor.PHONE_TTY_MODE_RECEIVED:
+            case PHONE_TTY_MODE_RECEIVED:
                 if (DBG) log("Received PHONE_TTY_MODE_RECEIVED event");
                 onTtyModeReceived((AsyncResult) msg.obj);
                 break;
@@ -264,207 +252,6 @@
         }
     }
 
-    /**
-     * Handles a "new ringing connection" event from the telephony layer.
-     */
-    private void onNewRingingConnection(AsyncResult r) {
-        Connection c = (Connection) r.result;
-        log("onNewRingingConnection(): state = " + mCM.getState() + ", conn = { " + c + " }");
-        Call ringing = c.getCall();
-        Phone phone = ringing.getPhone();
-
-        // Check for a few cases where we totally ignore incoming calls.
-        if (ignoreAllIncomingCalls(phone)) {
-            // Immediately reject the call, without even indicating to the user
-            // that an incoming call occurred.  (This will generally send the
-            // caller straight to voicemail, just as if we *had* shown the
-            // incoming-call UI and the user had declined the call.)
-            PhoneUtils.hangupRingingCall(ringing);
-            return;
-        }
-
-        if (!c.isRinging()) {
-            Log.i(LOG_TAG, "CallNotifier.onNewRingingConnection(): connection not ringing!");
-            // This is a very strange case: an incoming call that stopped
-            // ringing almost instantly after the onNewRingingConnection()
-            // event.  There's nothing we can do here, so just bail out
-            // without doing anything.  (But presumably we'll log it in
-            // the call log when the disconnect event comes in...)
-            return;
-        }
-
-        // Stop any signalInfo tone being played on receiving a Call
-        stopSignalInfoTone();
-
-        Call.State state = c.getState();
-        // State will be either INCOMING or WAITING.
-        if (VDBG) log("- connection is ringing!  state = " + state);
-        // if (DBG) PhoneUtils.dumpCallState(mPhone);
-
-        // No need to do any service state checks here (like for
-        // "emergency mode"), since in those states the SIM won't let
-        // us get incoming connections in the first place.
-
-        // TODO: Consider sending out a serialized broadcast Intent here
-        // (maybe "ACTION_NEW_INCOMING_CALL"), *before* starting the
-        // ringer and going to the in-call UI.  The intent should contain
-        // the caller-id info for the current connection, and say whether
-        // it would be a "call waiting" call or a regular ringing call.
-        // If anybody consumed the broadcast, we'd bail out without
-        // ringing or bringing up the in-call UI.
-        //
-        // This would give 3rd party apps a chance to listen for (and
-        // intercept) new ringing connections.  An app could reject the
-        // incoming call by consuming the broadcast and doing nothing, or
-        // it could "pick up" the call (without any action by the user!)
-        // via some future TelephonyManager API.
-        //
-        // See bug 1312336 for more details.
-        // We'd need to protect this with a new "intercept incoming calls"
-        // system permission.
-
-        // Obtain a partial wake lock to make sure the CPU doesn't go to
-        // sleep before we finish bringing up the InCallScreen.
-        // (This will be upgraded soon to a full wake lock; see
-        // showIncomingCall().)
-        if (VDBG) log("Holding wake lock on new incoming connection.");
-        mApplication.requestWakeState(PhoneGlobals.WakeState.PARTIAL);
-
-        // Note we *don't* post a status bar notification here, since
-        // we're not necessarily ready to actually show the incoming call
-        // to the user.  (For calls in the INCOMING state, at least, we
-        // still need to run a caller-id query, and we may not even ring
-        // at all if the "send directly to voicemail" flag is set.)
-        //
-        // Instead, we update the notification (and potentially launch the
-        // InCallScreen) from the showIncomingCall() method, which runs
-        // when the caller-id query completes or times out.
-
-        if (VDBG) log("- onNewRingingConnection() done.");
-    }
-
-    /**
-     * Determines whether or not we're allowed to present incoming calls to the
-     * user, based on the capabilities and/or current state of the device.
-     *
-     * If this method returns true, that means we should immediately reject the
-     * current incoming call, without even indicating to the user that an
-     * incoming call occurred.
-     *
-     * (We only reject incoming calls in a few cases, like during an OTASP call
-     * when we can't interrupt the user, or if the device hasn't completed the
-     * SetupWizard yet.  We also don't allow incoming calls on non-voice-capable
-     * devices.  But note that we *always* allow incoming calls while in ECM.)
-     *
-     * @return true if we're *not* allowed to present an incoming call to
-     * the user.
-     */
-    private boolean ignoreAllIncomingCalls(Phone phone) {
-        // Incoming calls are totally ignored on non-voice-capable devices.
-        if (!PhoneGlobals.sVoiceCapable) {
-            // ...but still log a warning, since we shouldn't have gotten this
-            // event in the first place!  (Incoming calls *should* be blocked at
-            // the telephony layer on non-voice-capable capable devices.)
-            Log.w(LOG_TAG, "Got onNewRingingConnection() on non-voice-capable device! Ignoring...");
-            return true;
-        }
-
-        // In ECM (emergency callback mode), we ALWAYS allow incoming calls
-        // to get through to the user.  (Note that ECM is applicable only to
-        // voice-capable CDMA devices).
-        if (PhoneUtils.isPhoneInEcm(phone)) {
-            if (DBG) log("Incoming call while in ECM: always allow...");
-            return false;
-        }
-
-        // Incoming calls are totally ignored if the device isn't provisioned yet.
-        boolean provisioned = Settings.Global.getInt(mApplication.getContentResolver(),
-            Settings.Global.DEVICE_PROVISIONED, 0) != 0;
-        if (!provisioned) {
-            Log.i(LOG_TAG, "Ignoring incoming call: not provisioned");
-            return true;
-        }
-
-        // Incoming calls are totally ignored if an OTASP call is active.
-        if (TelephonyCapabilities.supportsOtasp(phone)) {
-            boolean activateState = (mApplication.cdmaOtaScreenState.otaScreenState
-                    == OtaUtils.CdmaOtaScreenState.OtaScreenState.OTA_STATUS_ACTIVATION);
-            boolean dialogState = (mApplication.cdmaOtaScreenState.otaScreenState
-                    == OtaUtils.CdmaOtaScreenState.OtaScreenState.OTA_STATUS_SUCCESS_FAILURE_DLG);
-            boolean spcState = mApplication.cdmaOtaProvisionData.inOtaSpcState;
-
-            if (spcState) {
-                Log.i(LOG_TAG, "Ignoring incoming call: OTA call is active");
-                return true;
-            } else if (activateState || dialogState) {
-                // We *are* allowed to receive incoming calls at this point.
-                // But clear out any residual OTASP UI first.
-                // TODO: It's an MVC violation to twiddle the OTA UI state here;
-                // we should instead provide a higher-level API via OtaUtils.
-                if (dialogState) mApplication.dismissOtaDialogs();
-                mApplication.clearOtaState();
-                return false;
-            }
-        }
-
-        // Normal case: allow this call to be presented to the user.
-        return false;
-    }
-
-    private void onUnknownConnectionAppeared(AsyncResult r) {
-        PhoneConstants.State state = mCM.getState();
-
-        if (state == PhoneConstants.State.OFFHOOK) {
-            if (DBG) log("unknown connection appeared...");
-
-            onPhoneStateChanged(r);
-        }
-    }
-
-    /**
-     * Updates the phone UI in response to phone state changes.
-     *
-     * Watch out: certain state changes are actually handled by their own
-     * specific methods:
-     *   - see onNewRingingConnection() for new incoming calls
-     *   - see onDisconnect() for calls being hung up or disconnected
-     */
-    private void onPhoneStateChanged(AsyncResult r) {
-        PhoneConstants.State state = mCM.getState();
-        if (VDBG) log("onPhoneStateChanged: state = " + state);
-
-        // Turn status bar notifications on or off depending upon the state
-        // of the phone.  Notification Alerts (audible or vibrating) should
-        // be on if and only if the phone is IDLE.
-        mApplication.notificationMgr.statusBarHelper
-                .enableNotificationAlerts(state == PhoneConstants.State.IDLE);
-
-        Phone fgPhone = mCM.getFgPhone();
-        if (fgPhone.getPhoneType() == PhoneConstants.PHONE_TYPE_CDMA) {
-            if ((fgPhone.getForegroundCall().getState() == Call.State.ACTIVE)
-                    && ((mPreviousCdmaCallState == Call.State.DIALING)
-                    ||  (mPreviousCdmaCallState == Call.State.ALERTING))) {
-                if (mIsCdmaRedialCall) {
-                    int toneToPlay = InCallTonePlayer.TONE_REDIAL;
-                    new InCallTonePlayer(toneToPlay).start();
-                }
-                // Stop any signal info tone when call moves to ACTIVE state
-                stopSignalInfoTone();
-            }
-            mPreviousCdmaCallState = fgPhone.getForegroundCall().getState();
-        }
-
-        // Update the phone state and other sensor/lock.
-        mApplication.updatePhoneState(state);
-
-        if (state == PhoneConstants.State.OFFHOOK) {
-
-            if (VDBG) log("onPhoneStateChanged: OFF HOOK");
-            // make sure audio is in in-call mode now
-            PhoneUtils.setAudioMode(mCM);
-        }
-    }
-
     void updateCallNotifierRegistrationsAfterRadioTechnologyChange() {
         if (DBG) Log.d(LOG_TAG, "updateCallNotifierRegistrationsAfterRadioTechnologyChange...");
 
@@ -472,129 +259,6 @@
         createSignalInfoToneGenerator();
     }
 
-    private void onDisconnect(AsyncResult r) {
-        if (VDBG) log("onDisconnect()...  CallManager state: " + mCM.getState());
-
-        mVoicePrivacyState = false;
-        Connection c = (Connection) r.result;
-        if (c != null) {
-            log("onDisconnect: cause = " + DisconnectCause.toString(c.getDisconnectCause())
-                  + ", incoming = " + c.isIncoming()
-                  + ", date = " + c.getCreateTime());
-        } else {
-            Log.w(LOG_TAG, "onDisconnect: null connection");
-        }
-
-        int autoretrySetting = 0;
-        if ((c != null) &&
-                (c.getCall().getPhone().getPhoneType() == PhoneConstants.PHONE_TYPE_CDMA)) {
-            autoretrySetting = android.provider.Settings.Global.getInt(mApplication.
-                    getContentResolver(),android.provider.Settings.Global.CALL_AUTO_RETRY, 0);
-        }
-
-        // Stop any signalInfo tone being played when a call gets ended
-        stopSignalInfoTone();
-
-        if ((c != null) &&
-                (c.getCall().getPhone().getPhoneType() == PhoneConstants.PHONE_TYPE_CDMA)) {
-            // Resetting the CdmaPhoneCallState members
-            mApplication.cdmaPhoneCallState.resetCdmaPhoneCallState();
-        }
-
-        // If this is the end of an OTASP call, pass it on to the PhoneApp.
-        if (c != null && TelephonyCapabilities.supportsOtasp(c.getCall().getPhone())) {
-            final String number = c.getAddress();
-            if (c.getCall().getPhone().isOtaSpNumber(number)) {
-                if (DBG) log("onDisconnect: this was an OTASP call!");
-                mApplication.handleOtaspDisconnect();
-            }
-        }
-
-        // Check for the various tones we might need to play (thru the
-        // earpiece) after a call disconnects.
-        int toneToPlay = InCallTonePlayer.TONE_NONE;
-
-        // If we don't need to play BUSY or CONGESTION, then play the
-        // "call ended" tone if this was a "regular disconnect" (i.e. a
-        // normal call where one end or the other hung up) *and* this
-        // disconnect event caused the phone to become idle.  (In other
-        // words, we *don't* play the sound if one call hangs up but
-        // there's still an active call on the other line.)
-        // TODO: We may eventually want to disable this via a preference.
-        if ((toneToPlay == InCallTonePlayer.TONE_NONE)
-            && (mCM.getState() == PhoneConstants.State.IDLE)
-            && (c != null)) {
-            int cause = c.getDisconnectCause();
-            if ((cause == DisconnectCause.NORMAL)  // remote hangup
-                || (cause == DisconnectCause.LOCAL)) {  // local hangup
-                if (VDBG) log("- need to play CALL_ENDED tone!");
-                toneToPlay = InCallTonePlayer.TONE_CALL_ENDED;
-                mIsCdmaRedialCall = false;
-            }
-        }
-
-        // All phone calls are disconnected.
-        if (mCM.getState() == PhoneConstants.State.IDLE) {
-            // Don't reset the audio mode or bluetooth/speakerphone state
-            // if we still need to let the user hear a tone through the earpiece.
-            if (toneToPlay == InCallTonePlayer.TONE_NONE) {
-                resetAudioStateAfterDisconnect();
-            }
-        }
-
-        if (c != null) {
-            mCallLogger.logCall(c);
-
-            final String number = c.getAddress();
-            final Phone phone = c.getCall().getPhone();
-            final boolean isEmergencyNumber =
-                    PhoneNumberUtils.isLocalEmergencyNumber(mApplication, number);
-
-            // Possibly play a "post-disconnect tone" thru the earpiece.
-            // We do this here, rather than from the InCallScreen
-            // activity, since we need to do this even if you're not in
-            // the Phone UI at the moment the connection ends.
-            if (toneToPlay != InCallTonePlayer.TONE_NONE) {
-                if (VDBG) log("- starting post-disconnect tone (" + toneToPlay + ")...");
-                new InCallTonePlayer(toneToPlay).start();
-
-                // TODO: alternatively, we could start an InCallTonePlayer
-                // here with an "unlimited" tone length,
-                // and manually stop it later when this connection truly goes
-                // away.  (The real connection over the network was closed as soon
-                // as we got the BUSY message.  But our telephony layer keeps the
-                // connection open for a few extra seconds so we can show the
-                // "busy" indication to the user.  We could stop the busy tone
-                // when *that* connection's "disconnect" event comes in.)
-            }
-
-            final int cause = c.getDisconnectCause();
-            if (((mPreviousCdmaCallState == Call.State.DIALING)
-                    || (mPreviousCdmaCallState == Call.State.ALERTING))
-                    && (!isEmergencyNumber)
-                    && (cause != DisconnectCause.INCOMING_MISSED )
-                    && (cause != DisconnectCause.NORMAL)
-                    && (cause != DisconnectCause.LOCAL)
-                    && (cause != DisconnectCause.INCOMING_REJECTED)) {
-                if (!mIsCdmaRedialCall) {
-                    if (autoretrySetting == InCallScreen.AUTO_RETRY_ON) {
-                        // TODO: (Moto): The contact reference data may need to be stored and use
-                        // here when redialing a call. For now, pass in NULL as the URI parameter.
-                        final int status =
-                                PhoneUtils.placeCall(mApplication, phone, number, null, false);
-                        if (status != PhoneUtils.CALL_STATUS_FAILED) {
-                            mIsCdmaRedialCall = true;
-                        }
-                    } else {
-                        mIsCdmaRedialCall = false;
-                    }
-                } else {
-                    mIsCdmaRedialCall = false;
-                }
-            }
-        }
-    }
-
     /**
      * Resets the audio mode and speaker state when a call ends.
      */
@@ -866,15 +530,6 @@
                 resetAudioStateAfterDisconnect();
             }
         }
-
-        public void stopTone() {
-            synchronized (this) {
-                if (mState == TONE_ON) {
-                    notify();
-                }
-                mState = TONE_STOPPED;
-            }
-        }
     }
 
     /**
@@ -890,7 +545,7 @@
             PhoneDisplayMessage.displayNetworkMessage(mApplication, displayInfo);
 
             // start a timer that kills the dialog
-            sendEmptyMessageDelayed(CallStateMonitor.INTERNAL_SHOW_MESSAGE_NOTIFICATION_DONE,
+            sendEmptyMessageDelayed(INTERNAL_SHOW_MESSAGE_NOTIFICATION_DONE,
                     SHOW_MESSAGE_NOTIFICATION_TIME);
         }
     }
@@ -915,11 +570,14 @@
             if (DBG) log("onSuppServiceFailed: displaying merge failure message");
             mergeFailedString = mApplication.getResources().getString(
                     R.string.incall_error_supp_service_switch);
+        } else if (r.result == Phone.SuppService.HOLD) {
+            mergeFailedString = mApplication.getResources().getString(
+                    R.string.incall_error_supp_service_hold);
         }
         PhoneDisplayMessage.displayErrorMessage(mApplication, mergeFailedString);
 
         // start a timer that kills the dialog
-        sendEmptyMessageDelayed(CallStateMonitor.INTERNAL_SHOW_MESSAGE_NOTIFICATION_DONE,
+        sendEmptyMessageDelayed(INTERNAL_SHOW_MESSAGE_NOTIFICATION_DONE,
                 SHOW_MESSAGE_NOTIFICATION_TIME);
     }
 
@@ -1005,8 +663,7 @@
                     mApplication.getResources().getString(resId));
 
             // start a timer that kills the dialog
-            sendEmptyMessageDelayed(
-                    CallStateMonitor.INTERNAL_SHOW_MESSAGE_NOTIFICATION_DONE,
+            sendEmptyMessageDelayed(INTERNAL_SHOW_MESSAGE_NOTIFICATION_DONE,
                     SHOW_MESSAGE_NOTIFICATION_TIME);
         }
     }
@@ -1090,27 +747,6 @@
         new SignalInfoTonePlayer(ToneGenerator.TONE_CDMA_SIGNAL_OFF).start();
     }
 
-    /**
-     * Return the private variable mPreviousCdmaCallState.
-     */
-    /* package */ Call.State getPreviousCdmaCallState() {
-        return mPreviousCdmaCallState;
-    }
-
-    /**
-     * Return the private variable mVoicePrivacyState.
-     */
-    /* package */ boolean getVoicePrivacyState() {
-        return mVoicePrivacyState;
-    }
-
-    /**
-     * Return the private variable mIsCdmaRedialCall.
-     */
-    /* package */ boolean getIsCdmaRedialCall() {
-        return mIsCdmaRedialCall;
-    }
-
     private BluetoothProfile.ServiceListener mBluetoothProfileServiceListener =
            new BluetoothProfile.ServiceListener() {
                 public void onServiceConnected(int profile, BluetoothProfile proxy) {
diff --git a/src/com/android/phone/CallStateMonitor.java b/src/com/android/phone/CallStateMonitor.java
deleted file mode 100644
index 512c30b..0000000
--- a/src/com/android/phone/CallStateMonitor.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright (C) 2013 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.phone;
-
-import android.os.AsyncResult;
-import android.os.Handler;
-import android.os.Message;
-import android.os.SystemProperties;
-import android.util.Log;
-
-import com.android.internal.telephony.CallManager;
-
-import java.util.ArrayList;
-import java.util.LinkedList;
-import java.util.List;
-
-
-/**
- * Dedicated Call state monitoring class.  This class communicates directly with
- * the call manager to listen for call state events and notifies registered
- * handlers.
- * It works as an inverse multiplexor for all classes wanted Call State updates
- * so that there exists only one channel to the telephony layer.
- *
- * TODO: Add manual phone state checks (getState(), etc.).
- */
-class CallStateMonitor extends Handler {
-    private static final String LOG_TAG = CallStateMonitor.class.getSimpleName();
-    private static final boolean DBG =
-            (PhoneGlobals.DBG_LEVEL >= 1) && (SystemProperties.getInt("ro.debuggable", 0) == 1);
-
-    // Events from the Phone object:
-    public static final int PHONE_STATE_CHANGED = 1;
-    public static final int PHONE_NEW_RINGING_CONNECTION = 2;
-    public static final int PHONE_DISCONNECT = 3;
-    public static final int PHONE_UNKNOWN_CONNECTION_APPEARED = 4;
-    public static final int PHONE_STATE_DISPLAYINFO = 6;
-    public static final int PHONE_STATE_SIGNALINFO = 7;
-    public static final int PHONE_CDMA_CALL_WAITING = 8;
-    public static final int PHONE_ENHANCED_VP_ON = 9;
-    public static final int PHONE_ENHANCED_VP_OFF = 10;
-    public static final int PHONE_RINGBACK_TONE = 11;
-    public static final int PHONE_RESEND_MUTE = 12;
-    public static final int PHONE_ON_DIAL_CHARS = 13;
-    public static final int PHONE_SUPP_SERVICE_FAILED = 14;
-    public static final int PHONE_TTY_MODE_RECEIVED = 15;
-    // Events generated internally.
-    // We should store all the possible event type values in one place to make sure that
-    // they don't step on each others' toes.
-    public static final int INTERNAL_SHOW_MESSAGE_NOTIFICATION_DONE = 22;
-    public static final int INTERNAL_UPDATE_IN_CALL_NOTIFICATION = 23;
-
-    // Other events from call manager
-    public static final int EVENT_OTA_PROVISION_CHANGE = 20;
-
-    private CallManager callManager;
-    private ArrayList<Handler> registeredHandlers;
-
-    // Events generated internally:
-    public CallStateMonitor(CallManager callManager) {
-        this.callManager = callManager;
-        registeredHandlers = new ArrayList<Handler>();
-
-        registerForNotifications();
-    }
-
-    /**
-     * Register for call state notifications with the CallManager.
-     */
-    private void registerForNotifications() {
-        //
-        // TODO: The lines commented out here can be removed as their associated functionality in
-        // other files is removed.
-        //
-        //callManager.registerForNewRingingConnection(this, PHONE_NEW_RINGING_CONNECTION, null);
-        //callManager.registerForPreciseCallStateChanged(this, PHONE_STATE_CHANGED, null);
-        callManager.registerForDisconnect(this, PHONE_DISCONNECT, null);
-        //callManager.registerForUnknownConnection(this, PHONE_UNKNOWN_CONNECTION_APPEARED, null);
-        callManager.registerForCdmaOtaStatusChange(this, EVENT_OTA_PROVISION_CHANGE, null);
-        //callManager.registerForCallWaiting(this, PHONE_CDMA_CALL_WAITING, null);
-        callManager.registerForDisplayInfo(this, PHONE_STATE_DISPLAYINFO, null);
-        callManager.registerForSignalInfo(this, PHONE_STATE_SIGNALINFO, null);
-        callManager.registerForInCallVoicePrivacyOn(this, PHONE_ENHANCED_VP_ON, null);
-        callManager.registerForInCallVoicePrivacyOff(this, PHONE_ENHANCED_VP_OFF, null);
-        callManager.registerForSuppServiceFailed(this, PHONE_SUPP_SERVICE_FAILED, null);
-        //callManager.registerForRingbackTone(this, PHONE_RINGBACK_TONE, null);
-        //callManager.registerForResendIncallMute(this, PHONE_RESEND_MUTE, null);
-        //callManager.registerForPostDialCharacter(this, PHONE_ON_DIAL_CHARS, null);
-        callManager.registerForTtyModeReceived(this, PHONE_TTY_MODE_RECEIVED, null);
-    }
-
-    public void addListener(Handler handler) {
-        if (handler != null && !registeredHandlers.contains(handler)) {
-            if (DBG) {
-                Log.d(LOG_TAG, "Adding Handler: " + handler);
-            }
-
-            registeredHandlers.add(handler);
-        }
-    }
-
-    @Override
-    public void handleMessage(Message msg) {
-        if (DBG) {
-            Log.d(LOG_TAG, "handleMessage(" + msg.what + ")");
-        }
-
-        for (Handler handler : registeredHandlers) {
-            handler.handleMessage(msg);
-        }
-    }
-
-    /**
-     * When radio technology changes, we need to to reregister for all the events which are
-     * all tied to the old radio.
-     */
-    public void updateAfterRadioTechnologyChange() {
-        if (DBG) Log.d(LOG_TAG, "updateCallNotifierRegistrationsAfterRadioTechnologyChange...");
-
-        // Unregister all events from the old obsolete phone
-        //callManager.unregisterForNewRingingConnection(this);
-        //callManager.unregisterForPreciseCallStateChanged(this);
-        callManager.unregisterForDisconnect(this);
-        //callManager.unregisterForUnknownConnection(this);
-        //callManager.unregisterForCallWaiting(this);
-        callManager.unregisterForDisplayInfo(this);
-        callManager.unregisterForSignalInfo(this);
-        callManager.unregisterForCdmaOtaStatusChange(this);
-        //callManager.unregisterForRingbackTone(this);
-        //callManager.unregisterForResendIncallMute(this);
-        callManager.unregisterForInCallVoicePrivacyOn(this);
-        callManager.unregisterForInCallVoicePrivacyOff(this);
-        //callManager.unregisterForPostDialCharacter(this);
-        callManager.unregisterForSuppServiceFailed(this);
-        callManager.unregisterForTtyModeReceived(this);
-
-        registerForNotifications();
-    }
-
-}
diff --git a/src/com/android/phone/CarrierConfigLoader.java b/src/com/android/phone/CarrierConfigLoader.java
index 09f12ff..df1a127 100644
--- a/src/com/android/phone/CarrierConfigLoader.java
+++ b/src/com/android/phone/CarrierConfigLoader.java
@@ -93,8 +93,10 @@
     // Service connection for binding to config app.
     private CarrierServiceConnection[] mServiceConnection;
 
+    // Broadcast receiver for Boot intents, register intent filter in construtor.
+    private final BroadcastReceiver mBootReceiver = new ConfigLoaderBroadcastReceiver();
     // Broadcast receiver for SIM and pkg intents, register intent filter in constructor.
-    private final BroadcastReceiver mReceiver = new ConfigLoaderBroadcastReceiver();
+    private final BroadcastReceiver mPackageReceiver = new ConfigLoaderBroadcastReceiver();
 
     // Message codes; see mHandler below.
     // Request from SubscriptionInfoUpdater when SIM becomes absent or error.
@@ -119,8 +121,10 @@
     private static final int EVENT_BIND_CARRIER_TIMEOUT = 11;
     // Check if the system fingerprint has changed.
     private static final int EVENT_CHECK_SYSTEM_UPDATE = 12;
+    // Rerun carrier config binding after system is unlocked.
+    private static final int EVENT_SYSTEM_UNLOCKED = 13;
 
-    private static final int BIND_TIMEOUT_MILLIS = 10000;
+    private static final int BIND_TIMEOUT_MILLIS = 30000;
 
     // Tags used for saving and restoring XML documents.
     private static final String TAG_DOCUMENT = "carrier_config";
@@ -168,6 +172,12 @@
                     broadcastConfigChangedIntent(phoneId);
                     break;
 
+                case EVENT_SYSTEM_UNLOCKED:
+                    for (int i = 0; i < TelephonyManager.from(mContext).getPhoneCount(); ++i) {
+                        updateConfigForPhoneId(i);
+                    }
+                    break;
+
                 case EVENT_PACKAGE_CHANGED:
                     carrierPackageName = (String) msg.obj;
                     // Only update if there are cached config removed to avoid updating config
@@ -219,7 +229,8 @@
                         saveConfigToXml(DEFAULT_CARRIER_CONFIG_PACKAGE, iccid, config);
                         mConfigFromDefaultApp[phoneId] = config;
                         sendMessage(obtainMessage(EVENT_LOADED_FROM_DEFAULT, phoneId, -1));
-                    } catch (RemoteException ex) {
+                    } catch (Exception ex) {
+                        // The bound app could throw exceptions that binder will pass to us.
                         loge("Failed to get carrier config: " + ex.toString());
                     } finally {
                         mContext.unbindService(mServiceConnection[phoneId]);
@@ -290,7 +301,8 @@
                         saveConfigToXml(carrierPackageName, iccid, config);
                         mConfigFromCarrierApp[phoneId] = config;
                         sendMessage(obtainMessage(EVENT_LOADED_FROM_CARRIER, phoneId, -1));
-                    } catch (RemoteException ex) {
+                    } catch (Exception ex) {
+                        // The bound app could throw exceptions that binder will pass to us.
                         loge("Failed to get carrier config: " + ex.toString());
                     } finally {
                         mContext.unbindService(mServiceConnection[phoneId]);
@@ -334,6 +346,10 @@
     private CarrierConfigLoader(Context context) {
         mContext = context;
 
+        IntentFilter bootFilter = new IntentFilter();
+        bootFilter.addAction(Intent.ACTION_BOOT_COMPLETED);
+        context.registerReceiver(mBootReceiver, bootFilter);
+
         // Register for package updates. Update app or uninstall app update will have all 3 intents,
         // in the order or removed, added, replaced, all with extra_replace set to true.
         IntentFilter pkgFilter = new IntentFilter();
@@ -341,7 +357,7 @@
         pkgFilter.addAction(Intent.ACTION_PACKAGE_REMOVED);
         pkgFilter.addAction(Intent.ACTION_PACKAGE_REPLACED);
         pkgFilter.addDataScheme("package");
-        context.registerReceiverAsUser(mReceiver, UserHandle.ALL, pkgFilter, null, null);
+        context.registerReceiverAsUser(mPackageReceiver, UserHandle.ALL, pkgFilter, null, null);
 
         int numPhones = TelephonyManager.from(context).getPhoneCount();
         mConfigFromDefaultApp = new PersistableBundle[numPhones];
@@ -732,6 +748,10 @@
                 return;
 
             switch (action) {
+                case Intent.ACTION_BOOT_COMPLETED:
+                    mHandler.sendMessage(mHandler.obtainMessage(EVENT_SYSTEM_UNLOCKED, null));
+                    break;
+
                 case Intent.ACTION_PACKAGE_ADDED:
                 case Intent.ACTION_PACKAGE_REMOVED:
                 case Intent.ACTION_PACKAGE_REPLACED:
diff --git a/src/com/android/phone/CdmaSubscriptionListPreference.java b/src/com/android/phone/CdmaSubscriptionListPreference.java
index 9b96850..20adc12 100644
--- a/src/com/android/phone/CdmaSubscriptionListPreference.java
+++ b/src/com/android/phone/CdmaSubscriptionListPreference.java
@@ -79,7 +79,7 @@
             return;
         }
 
-        int buttonCdmaSubscriptionMode = Integer.valueOf(getValue()).intValue();
+        int buttonCdmaSubscriptionMode = Integer.parseInt(getValue());
         Log.d(LOG_TAG, "Setting new value " + buttonCdmaSubscriptionMode);
         int statusCdmaSubscriptionMode;
         switch(buttonCdmaSubscriptionMode) {
@@ -120,7 +120,7 @@
 
             if (ar.exception == null) {
                 // Get the original string entered by the user
-                int cdmaSubscriptionMode = Integer.valueOf((String) ar.userObj).intValue();
+                int cdmaSubscriptionMode = Integer.parseInt((String) ar.userObj);
                 Settings.Global.putInt(mPhone.getContext().getContentResolver(),
                         Settings.Global.CDMA_SUBSCRIPTION_MODE,
                         cdmaSubscriptionMode );
diff --git a/src/com/android/phone/CdmaSystemSelectListPreference.java b/src/com/android/phone/CdmaSystemSelectListPreference.java
index 5a001de..9bc55bd 100644
--- a/src/com/android/phone/CdmaSystemSelectListPreference.java
+++ b/src/com/android/phone/CdmaSystemSelectListPreference.java
@@ -67,7 +67,7 @@
         super.onDialogClosed(positiveResult);
 
         if (positiveResult && (getValue() != null)) {
-            int buttonCdmaRoamingMode = Integer.valueOf(getValue()).intValue();
+            int buttonCdmaRoamingMode = Integer.parseInt(getValue());
             int settingsCdmaRoamingMode =
                     Settings.Global.getInt(mPhone.getContext().getContentResolver(),
                     Settings.Global.CDMA_ROAMING_MODE, Phone.CDMA_RM_HOME);
@@ -147,7 +147,7 @@
             AsyncResult ar = (AsyncResult) msg.obj;
 
             if ((ar.exception == null) && (getValue() != null)) {
-                int cdmaRoamingMode = Integer.valueOf(getValue()).intValue();
+                int cdmaRoamingMode = Integer.parseInt(getValue());
                 Settings.Global.putInt(mPhone.getContext().getContentResolver(),
                         Settings.Global.CDMA_ROAMING_MODE,
                         cdmaRoamingMode );
diff --git a/src/com/android/phone/EmergencyActionGroup.java b/src/com/android/phone/EmergencyActionGroup.java
index 2d70d01..524462e 100644
--- a/src/com/android/phone/EmergencyActionGroup.java
+++ b/src/com/android/phone/EmergencyActionGroup.java
@@ -76,7 +76,6 @@
     @Override
     protected void onFinishInflate() {
         super.onFinishInflate();
-        setupAssistActions();
 
         mSelectedContainer = (ViewGroup) findViewById(R.id.selected_container);
         mSelectedContainer.setOnClickListener(this);
@@ -85,6 +84,14 @@
         mLaunchHint = findViewById(R.id.launch_hint);
     }
 
+    @Override
+    protected void onWindowVisibilityChanged(int visibility) {
+        super.onWindowVisibilityChanged(visibility);
+        if (visibility == View.VISIBLE) {
+            setupAssistActions();
+        }
+    }
+
     /**
      * Called by the activity before a touch event is dispatched to the view hierarchy.
      */
@@ -165,11 +172,9 @@
                 } catch (PackageManager.NameNotFoundException e) {
                     continue;
                 }
-                // Get earliest installed app, but prioritize system apps.
-                if (bestMatch == null
-                        || !isSystemApp(bestMatch) && isSystemApp(packageInfo)
-                        || isSystemApp(bestMatch) == isSystemApp(packageInfo)
-                                && bestMatch.firstInstallTime > packageInfo.firstInstallTime) {
+                // Get earliest installed system app.
+                if (isSystemApp(packageInfo) && (bestMatch == null ||
+                        bestMatch.firstInstallTime > packageInfo.firstInstallTime)) {
                     bestMatch = packageInfo;
                 }
             }
diff --git a/src/com/android/phone/EmergencyCallbackModeExitDialog.java b/src/com/android/phone/EmergencyCallbackModeExitDialog.java
index 7f4bd1b..b423e14 100644
--- a/src/com/android/phone/EmergencyCallbackModeExitDialog.java
+++ b/src/com/android/phone/EmergencyCallbackModeExitDialog.java
@@ -78,11 +78,12 @@
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
+        mPhone = PhoneGlobals.getInstance().getPhoneInEcm();
         // Check if phone is in Emergency Callback Mode. If not, exit.
         final boolean isInEcm = Boolean.parseBoolean(
                 SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE));
-        Log.i(TAG, "ECMModeExitDialog launched - isInEcm: " + isInEcm);
-        if (!isInEcm) {
+        Log.i(TAG, "ECMModeExitDialog launched - isInEcm: " + isInEcm + " phone:" + mPhone);
+        if (mPhone == null || !isInEcm) {
             finish();
             return;
         }
@@ -96,7 +97,6 @@
         waitForConnectionCompleteThread.start();
 
         // Register ECM timer reset notfication
-        mPhone = PhoneGlobals.getPhone();
         mPhone.registerForEcmTimerReset(mTimerResetHandler, ECM_TIMER_RESET, null);
 
         // Register receiver for intent closing the dialog
diff --git a/src/com/android/phone/EmergencyCallbackModeService.java b/src/com/android/phone/EmergencyCallbackModeService.java
index 3310df1..ca25653 100644
--- a/src/com/android/phone/EmergencyCallbackModeService.java
+++ b/src/com/android/phone/EmergencyCallbackModeService.java
@@ -35,7 +35,6 @@
 import android.os.SystemProperties;
 import android.util.Log;
 
-import com.android.internal.telephony.cdma.CDMAPhone;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneConstants;
 import com.android.internal.telephony.PhoneFactory;
@@ -74,12 +73,13 @@
 
     @Override
     public void onCreate() {
+         Phone phoneInEcm = PhoneGlobals.getInstance().getPhoneInEcm();
         // Check if it is CDMA phone
-        if ((PhoneFactory.getDefaultPhone().getPhoneType() != PhoneConstants.PHONE_TYPE_CDMA)
-                && (PhoneFactory.getDefaultPhone().getImsPhone() == null)) {
-            Log.e(LOG_TAG, "Error! Emergency Callback Mode not supported for " +
-                    PhoneFactory.getDefaultPhone().getPhoneName() + " phones");
+        if (phoneInEcm == null || ((phoneInEcm.getPhoneType() != PhoneConstants.PHONE_TYPE_CDMA)
+                && (phoneInEcm.getImsPhone() == null))) {
+            Log.e(LOG_TAG, "Error! Emergency Callback Mode not supported for " + phoneInEcm);
             stopSelf();
+            return;
         }
 
         // Register receiver for intents
@@ -91,7 +91,7 @@
         mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
 
         // Register ECM timer reset notfication
-        mPhone = PhoneFactory.getDefaultPhone();
+        mPhone = phoneInEcm;
         mPhone.registerForEcmTimerReset(mHandler, ECM_TIMER_RESET, null);
 
         startTimerNotification();
@@ -99,14 +99,16 @@
 
     @Override
     public void onDestroy() {
-        // Unregister receiver
-        unregisterReceiver(mEcmReceiver);
-        // Unregister ECM timer reset notification
-        mPhone.unregisterForEcmTimerReset(mHandler);
+        if (mPhone != null) {
+            // Unregister receiver
+            unregisterReceiver(mEcmReceiver);
+            // Unregister ECM timer reset notification
+            mPhone.unregisterForEcmTimerReset(mHandler);
 
-        // Cancel the notification and timer
-        mNotificationManager.cancel(R.string.phone_in_ecm_notification_title);
-        mTimer.cancel();
+            // Cancel the notification and timer
+            mNotificationManager.cancel(R.string.phone_in_ecm_notification_title);
+            mTimer.cancel();
+        }
     }
 
     /**
diff --git a/src/com/android/phone/EmergencyDialer.java b/src/com/android/phone/EmergencyDialer.java
index 780f76b..13cb339 100644
--- a/src/com/android/phone/EmergencyDialer.java
+++ b/src/com/android/phone/EmergencyDialer.java
@@ -36,20 +36,21 @@
 import android.telephony.PhoneNumberUtils;
 import android.telephony.SubscriptionManager;
 import android.text.Editable;
+import android.text.Spannable;
+import android.text.SpannableString;
 import android.text.TextUtils;
 import android.text.TextWatcher;
 import android.text.method.DialerKeyListener;
 import android.text.style.TtsSpan;
 import android.util.Log;
+import android.view.HapticFeedbackConstants;
 import android.view.KeyEvent;
 import android.view.MenuItem;
 import android.view.MotionEvent;
 import android.view.View;
 import android.view.WindowManager;
-import android.view.accessibility.AccessibilityManager;
 import android.widget.EditText;
 
-import com.android.phone.common.HapticFeedback;
 import com.android.phone.common.dialpad.DialpadKeyButton;
 import com.android.phone.common.util.ViewUtil;
 
@@ -116,9 +117,6 @@
     // determines if we want to playback local DTMF tones.
     private boolean mDTMFToneEnabled;
 
-    // Haptic feedback (vibration) for dialer key presses.
-    private HapticFeedback mHaptic = new HapticFeedback();
-
     private EmergencyActionGroup mEmergencyActionGroup;
 
     // close activity when screen turns off
@@ -206,7 +204,7 @@
         CarrierConfigManager configMgr =
                 (CarrierConfigManager) getSystemService(Context.CARRIER_CONFIG_SERVICE);
         PersistableBundle carrierConfig =
-                configMgr.getConfigForSubId(SubscriptionManager.getDefaultVoiceSubId());
+                configMgr.getConfigForSubId(SubscriptionManager.getDefaultVoiceSubscriptionId());
         if (carrierConfig.getBoolean(CarrierConfigManager.KEY_SHOW_ONSCREEN_DIAL_BUTTON_BOOL)) {
             mDialButton.setOnClickListener(this);
         } else {
@@ -244,15 +242,6 @@
         intentFilter.addAction(Intent.ACTION_SCREEN_OFF);
         registerReceiver(mBroadcastReceiver, intentFilter);
 
-        try {
-            mHaptic.init(
-                    this,
-                    carrierConfig.getBoolean(
-                            CarrierConfigManager.KEY_ENABLE_DIALER_KEY_VIBRATION_BOOL));
-        } catch (Resources.NotFoundException nfe) {
-             Log.e(LOG_TAG, "Vibrate control bool missing.", nfe);
-        }
-
         mEmergencyActionGroup = (EmergencyActionGroup) findViewById(R.id.emergency_action_group);
     }
 
@@ -333,7 +322,7 @@
     }
 
     private void keyPressed(int keyCode) {
-        mHaptic.vibrate();
+        mDigits.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
         KeyEvent event = new KeyEvent(KeyEvent.ACTION_DOWN, keyCode);
         mDigits.onKeyDown(keyCode, event);
     }
@@ -370,7 +359,7 @@
                 return;
             }
             case R.id.floating_action_button: {
-                mHaptic.vibrate();  // Vibrate here too, just like we do for the regular keys
+                view.performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
                 placeCall();
                 return;
             }
@@ -480,9 +469,6 @@
         mDTMFToneEnabled = Settings.System.getInt(getContentResolver(),
                 Settings.System.DTMF_TONE_WHEN_DIALING, 1) == 1;
 
-        // Retrieve the haptic feedback setting.
-        mHaptic.checkSystemSetting();
-
         // if the mToneGenerator creation fails, just continue without it.  It is
         // a local audio signal, and is not as important as the dtmf tone itself.
         synchronized (mToneGeneratorLock) {
@@ -588,7 +574,12 @@
 
     private CharSequence createErrorMessage(String number) {
         if (!TextUtils.isEmpty(number)) {
-            return getString(R.string.dial_emergency_error, mLastNumber);
+            String errorString = getString(R.string.dial_emergency_error, number);
+            int startingPosition = errorString.indexOf(number);
+            int endingPosition = startingPosition + number.length();
+            Spannable result = new SpannableString(errorString);
+            PhoneNumberUtils.addTtsSpan(result, startingPosition, endingPosition);
+            return result;
         } else {
             return getText(R.string.dial_emergency_empty_error).toString();
         }
diff --git a/src/com/android/phone/INetworkQueryService.aidl b/src/com/android/phone/INetworkQueryService.aidl
index 81eb8e6..b0fe992 100644
--- a/src/com/android/phone/INetworkQueryService.aidl
+++ b/src/com/android/phone/INetworkQueryService.aidl
@@ -21,8 +21,7 @@
 /**
  * Service interface to handle queries for available networks.  The
  * Phone application lets this service interface handle carrier 
- * availability queries instead of making direct calls to the 
- * GSMPhone layer.
+ * availability queries instead of making direct calls to the Phone layer.
  */
 oneway interface INetworkQueryService {
  
diff --git a/src/com/android/phone/MobileNetworkSettings.java b/src/com/android/phone/MobileNetworkSettings.java
index 59aa9a1..404c976 100644
--- a/src/com/android/phone/MobileNetworkSettings.java
+++ b/src/com/android/phone/MobileNetworkSettings.java
@@ -22,6 +22,7 @@
 import com.android.internal.telephony.PhoneFactory;
 import com.android.internal.telephony.TelephonyIntents;
 import com.android.internal.telephony.TelephonyProperties;
+import com.android.settingslib.RestrictedLockUtils;
 
 import java.util.ArrayList;
 import java.util.Iterator;
@@ -110,7 +111,7 @@
     //UI objects
     private ListPreference mButtonPreferredNetworkMode;
     private ListPreference mButtonEnabledNetworks;
-    private SwitchPreference mButtonDataRoam;
+    private RestrictedSwitchPreference mButtonDataRoam;
     private SwitchPreference mButton4glte;
     private Preference mLteDataServicePref;
 
@@ -265,6 +266,9 @@
     };
 
     private void initializeSubscriptions() {
+        if (isDestroyed()) { // Process preferences in activity only if its not destroyed
+            return;
+        }
         int currentTab = 0;
         if (DBG) log("initializeSubscriptions:+");
 
@@ -448,7 +452,7 @@
         //get UI object references
         PreferenceScreen prefSet = getPreferenceScreen();
 
-        mButtonDataRoam = (SwitchPreference) prefSet.findPreference(BUTTON_ROAMING_KEY);
+        mButtonDataRoam = (RestrictedSwitchPreference) prefSet.findPreference(BUTTON_ROAMING_KEY);
         mButtonPreferredNetworkMode = (ListPreference) prefSet.findPreference(
                 BUTTON_PREFERED_NETWORK_MODE);
         mButtonEnabledNetworks = (ListPreference) prefSet.findPreference(
@@ -704,11 +708,10 @@
             actionBar.setDisplayHomeAsUpEnabled(true);
         }
 
-        final boolean isSecondaryUser = UserHandle.myUserId() != UserHandle.USER_OWNER;
         // Enable link to CMAS app settings depending on the value in config.xml.
         final boolean isCellBroadcastAppLinkEnabled = this.getResources().getBoolean(
                 com.android.internal.R.bool.config_cellBroadcastAppLinks);
-        if (isSecondaryUser || !isCellBroadcastAppLinkEnabled
+        if (!mUm.isAdminUser() || !isCellBroadcastAppLinkEnabled
                 || mUm.hasUserRestriction(UserManager.DISALLOW_CONFIG_CELL_BROADCASTS)) {
             PreferenceScreen root = getPreferenceScreen();
             Preference ps = findPreference(BUTTON_CELL_BROADCAST_SETTINGS);
@@ -742,7 +745,16 @@
         boolean canChange4glte = (tm.getCallState() == TelephonyManager.CALL_STATE_IDLE) &&
                 ImsManager.isNonTtyOrTtyOnVolteEnabled(getApplicationContext()) &&
                 carrierConfig.getBoolean(CarrierConfigManager.KEY_EDITABLE_ENHANCED_4G_LTE_BOOL);
+        mButtonDataRoam.setDisabledByAdmin(false);
         mButtonDataRoam.setEnabled(hasActiveSubscriptions);
+        if (mButtonDataRoam.isEnabled()) {
+            if (RestrictedLockUtils.hasBaseUserRestriction(context,
+                    UserManager.DISALLOW_DATA_ROAMING, UserHandle.myUserId())) {
+                mButtonDataRoam.setEnabled(false);
+            } else {
+                mButtonDataRoam.checkRestrictionAndSetDisabled(UserManager.DISALLOW_DATA_ROAMING);
+            }
+        }
         mButtonPreferredNetworkMode.setEnabled(hasActiveSubscriptions);
         mButtonEnabledNetworks.setEnabled(hasActiveSubscriptions);
         mButton4glte.setEnabled(hasActiveSubscriptions && canChange4glte);
@@ -802,7 +814,7 @@
             //Check if the button value is changed from the System.Setting
             mButtonPreferredNetworkMode.setValue((String) objValue);
             int buttonNetworkMode;
-            buttonNetworkMode = Integer.valueOf((String) objValue).intValue();
+            buttonNetworkMode = Integer.parseInt((String) objValue);
             int settingsNetworkMode = android.provider.Settings.Global.getInt(
                     mPhone.getContext().getContentResolver(),
                     android.provider.Settings.Global.PREFERRED_NETWORK_MODE + phoneSubId,
@@ -852,7 +864,7 @@
         } else if (preference == mButtonEnabledNetworks) {
             mButtonEnabledNetworks.setValue((String) objValue);
             int buttonNetworkMode;
-            buttonNetworkMode = Integer.valueOf((String) objValue).intValue();
+            buttonNetworkMode = Integer.parseInt((String) objValue);
             if (DBG) log("buttonNetworkMode: " + buttonNetworkMode);
             int settingsNetworkMode = android.provider.Settings.Global.getInt(
                     mPhone.getContext().getContentResolver(),
@@ -941,21 +953,23 @@
         }
 
         private void handleSetPreferredNetworkTypeResponse(Message msg) {
+            if (isDestroyed()) { // Access preferences of activity only if it is not destroyed
+                return;
+            }
+
             AsyncResult ar = (AsyncResult) msg.obj;
             final int phoneSubId = mPhone.getSubId();
 
             if (ar.exception == null) {
                 int networkMode;
                 if (getPreferenceScreen().findPreference(BUTTON_PREFERED_NETWORK_MODE) != null)  {
-                    networkMode =  Integer.valueOf(
-                            mButtonPreferredNetworkMode.getValue()).intValue();
+                    networkMode =  Integer.parseInt(mButtonPreferredNetworkMode.getValue());
                     android.provider.Settings.Global.putInt(mPhone.getContext().getContentResolver(),
                             android.provider.Settings.Global.PREFERRED_NETWORK_MODE + phoneSubId,
                             networkMode );
                 }
                 if (getPreferenceScreen().findPreference(BUTTON_ENABLED_NETWORKS_KEY) != null)  {
-                    networkMode = Integer.valueOf(
-                            mButtonEnabledNetworks.getValue()).intValue();
+                    networkMode = Integer.parseInt(mButtonEnabledNetworks.getValue());
                     android.provider.Settings.Global.putInt(mPhone.getContext().getContentResolver(),
                             android.provider.Settings.Global.PREFERRED_NETWORK_MODE + phoneSubId,
                             networkMode );
diff --git a/src/com/android/phone/NetworkSetting.java b/src/com/android/phone/NetworkSetting.java
index a08bd40..a09c5c5 100644
--- a/src/com/android/phone/NetworkSetting.java
+++ b/src/com/android/phone/NetworkSetting.java
@@ -34,6 +34,8 @@
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceGroup;
 import android.preference.PreferenceScreen;
+import android.telephony.ServiceState;
+import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 import android.util.Log;
 import android.telephony.SubscriptionManager;
@@ -388,6 +390,15 @@
         final PhoneGlobals app = PhoneGlobals.getInstance();
         app.notificationMgr.postTransientNotification(
                 NotificationMgr.NETWORK_SELECTION_NOTIFICATION, status);
+
+        TelephonyManager tm = (TelephonyManager) app.getSystemService(Context.TELEPHONY_SERVICE);
+        Phone phone = PhoneFactory.getPhone(mPhoneId);
+        if (phone != null) {
+            ServiceState ss = tm.getServiceStateForSubscriber(phone.getSubId());
+            if (ss != null) {
+                app.notificationMgr.updateNetworkSelection(ss.getState());
+            }
+        }
     }
 
     private void displayNetworkSelectionSucceeded() {
diff --git a/src/com/android/phone/NotificationMgr.java b/src/com/android/phone/NotificationMgr.java
index 3b27a4d..0932cce 100644
--- a/src/com/android/phone/NotificationMgr.java
+++ b/src/com/android/phone/NotificationMgr.java
@@ -33,7 +33,6 @@
 import android.os.UserManager;
 import android.preference.PreferenceManager;
 import android.provider.ContactsContract.PhoneLookup;
-import android.provider.Settings;
 import android.telecom.PhoneAccount;
 import android.telecom.PhoneAccountHandle;
 import android.telecom.TelecomManager;
@@ -50,16 +49,13 @@
 import android.widget.Toast;
 
 import com.android.internal.telephony.Phone;
-import com.android.internal.telephony.PhoneBase;
 import com.android.internal.telephony.TelephonyCapabilities;
 import com.android.phone.settings.VoicemailSettingsActivity;
 import com.android.phone.vvm.omtp.sync.VoicemailStatusQueryHelper;
 import com.android.phone.settings.VoicemailNotificationSettingsUtil;
-import com.android.phone.settings.VoicemailProviderSettingsUtil;
 
 import java.util.Iterator;
 import java.util.List;
-import java.util.Map;
 import java.util.Set;
 
 /**
@@ -102,8 +98,6 @@
     private TelecomManager mTelecomManager;
     private TelephonyManager mTelephonyManager;
 
-    public StatusBarHelper statusBarHelper;
-
     // used to track the notification of selected network unavailable
     private boolean mSelectedUnavailableNotify = false;
 
@@ -123,7 +117,6 @@
                 (StatusBarManager) app.getSystemService(Context.STATUS_BAR_SERVICE);
         mUserManager = (UserManager) app.getSystemService(Context.USER_SERVICE);
         mPhone = app.mCM.getDefaultPhone();
-        statusBarHelper = new StatusBarHelper();
         mSubscriptionManager = SubscriptionManager.from(mContext);
         mTelecomManager = TelecomManager.from(mContext);
         mTelephonyManager = (TelephonyManager) app.getSystemService(Context.TELEPHONY_SERVICE);
@@ -175,101 +168,6 @@
         }
     }
 
-    /**
-     * Helper class that's a wrapper around the framework's
-     * StatusBarManager.disable() API.
-     *
-     * This class is used to control features like:
-     *
-     *   - Disabling the status bar "notification windowshade"
-     *     while the in-call UI is up
-     *
-     *   - Disabling notification alerts (audible or vibrating)
-     *     while a phone call is active
-     *
-     *   - Disabling navigation via the system bar (the "soft buttons" at
-     *     the bottom of the screen on devices with no hard buttons)
-     *
-     * We control these features through a single point of control to make
-     * sure that the various StatusBarManager.disable() calls don't
-     * interfere with each other.
-     */
-    public class StatusBarHelper {
-        // Current desired state of status bar / system bar behavior
-        private boolean mIsNotificationEnabled = true;
-        private boolean mIsExpandedViewEnabled = true;
-        private boolean mIsSystemBarNavigationEnabled = true;
-
-        private StatusBarHelper() {
-        }
-
-        /**
-         * Enables or disables auditory / vibrational alerts.
-         *
-         * (We disable these any time a voice call is active, regardless
-         * of whether or not the in-call UI is visible.)
-         */
-        public void enableNotificationAlerts(boolean enable) {
-            if (mIsNotificationEnabled != enable) {
-                mIsNotificationEnabled = enable;
-                updateStatusBar();
-            }
-        }
-
-        /**
-         * Enables or disables the expanded view of the status bar
-         * (i.e. the ability to pull down the "notification windowshade").
-         *
-         * (This feature is disabled by the InCallScreen while the in-call
-         * UI is active.)
-         */
-        public void enableExpandedView(boolean enable) {
-            if (mIsExpandedViewEnabled != enable) {
-                mIsExpandedViewEnabled = enable;
-                updateStatusBar();
-            }
-        }
-
-        /**
-         * Enables or disables the navigation via the system bar (the
-         * "soft buttons" at the bottom of the screen)
-         *
-         * (This feature is disabled while an incoming call is ringing,
-         * because it's easy to accidentally touch the system bar while
-         * pulling the phone out of your pocket.)
-         */
-        public void enableSystemBarNavigation(boolean enable) {
-            if (mIsSystemBarNavigationEnabled != enable) {
-                mIsSystemBarNavigationEnabled = enable;
-                updateStatusBar();
-            }
-        }
-
-        /**
-         * Updates the status bar to reflect the current desired state.
-         */
-        private void updateStatusBar() {
-            int state = StatusBarManager.DISABLE_NONE;
-
-            if (!mIsExpandedViewEnabled) {
-                state |= StatusBarManager.DISABLE_EXPAND;
-            }
-            if (!mIsNotificationEnabled) {
-                state |= StatusBarManager.DISABLE_NOTIFICATION_ALERTS;
-            }
-            if (!mIsSystemBarNavigationEnabled) {
-                // Disable *all* possible navigation via the system bar.
-                state |= StatusBarManager.DISABLE_HOME;
-                state |= StatusBarManager.DISABLE_RECENT;
-                state |= StatusBarManager.DISABLE_BACK;
-                state |= StatusBarManager.DISABLE_SEARCH;
-            }
-
-            if (DBG) log("updateStatusBar: state = 0x" + Integer.toHexString(state));
-            mStatusBarManager.disable(state);
-        }
-    }
-
     /** The projection to use when querying the phones table */
     static final String[] PHONES_PROJECTION = new String[] {
         PhoneLookup.NUMBER,
@@ -579,7 +477,7 @@
                     continue;
                 }
                 UserHandle userHandle = user.getUserHandle();
-                builder.setContentIntent(userHandle.isOwner() ? contentIntent : null);
+                builder.setContentIntent(user.isAdmin() ? contentIntent : null);
                 mNotificationManager.notifyAsUser(
                         Integer.toString(subId) /* tag */,
                         CALL_FORWARD_NOTIFICATION,
@@ -621,7 +519,7 @@
                 continue;
             }
             UserHandle userHandle = user.getUserHandle();
-            builder.setContentIntent(userHandle.isOwner() ? contentIntent : null);
+            builder.setContentIntent(user.isAdmin() ? contentIntent : null);
             final Notification notif =
                     new Notification.BigTextStyle(builder).bigText(contentText).build();
             mNotificationManager.notifyAsUser(
@@ -670,7 +568,7 @@
                 continue;
             }
             UserHandle userHandle = user.getUserHandle();
-            builder.setContentIntent(userHandle.isOwner() ? contentIntent : null);
+            builder.setContentIntent(user.isAdmin() ? contentIntent : null);
             mNotificationManager.notifyAsUser(
                     null /* tag */,
                     SELECTED_OPERATOR_FAIL_NOTIFICATION,
@@ -703,10 +601,10 @@
                 SharedPreferences sp =
                         PreferenceManager.getDefaultSharedPreferences(mContext);
                 String networkSelection =
-                        sp.getString(PhoneBase.NETWORK_SELECTION_NAME_KEY + subId, "");
+                        sp.getString(Phone.NETWORK_SELECTION_NAME_KEY + subId, "");
                 if (TextUtils.isEmpty(networkSelection)) {
                     networkSelection =
-                            sp.getString(PhoneBase.NETWORK_SELECTION_KEY + subId, "");
+                            sp.getString(Phone.NETWORK_SELECTION_KEY + subId, "");
                 }
 
                 if (DBG) log("updateNetworkSelection()..." + "state = " +
@@ -714,10 +612,8 @@
 
                 if (serviceState == ServiceState.STATE_OUT_OF_SERVICE
                         && !TextUtils.isEmpty(networkSelection)) {
-                    if (!mSelectedUnavailableNotify) {
-                        showNetworkSelection(networkSelection);
-                        mSelectedUnavailableNotify = true;
-                    }
+                    showNetworkSelection(networkSelection);
+                    mSelectedUnavailableNotify = true;
                 } else {
                     if (mSelectedUnavailableNotify) {
                         cancelNetworkSelection();
diff --git a/src/com/android/phone/OtaUtils.java b/src/com/android/phone/OtaUtils.java
index 775b253..a37ce80 100644
--- a/src/com/android/phone/OtaUtils.java
+++ b/src/com/android/phone/OtaUtils.java
@@ -638,6 +638,7 @@
             // Send a success or failure indication back to our caller.
             updateNonInteractiveOtaSuccessFailure();
         }
+        cleanOtaScreen(true);
     }
 
     private void otaShowHome() {
diff --git a/src/com/android/phone/OutgoingCallBroadcaster.java b/src/com/android/phone/OutgoingCallBroadcaster.java
index 1a23bc4..cfe6f32 100644
--- a/src/com/android/phone/OutgoingCallBroadcaster.java
+++ b/src/com/android/phone/OutgoingCallBroadcaster.java
@@ -635,7 +635,7 @@
         // timeout.
         mHandler.sendEmptyMessageDelayed(EVENT_OUTGOING_CALL_TIMEOUT,
                 OUTGOING_CALL_TIMEOUT_THRESHOLD);
-        sendOrderedBroadcastAsUser(broadcastIntent, UserHandle.OWNER,
+        sendOrderedBroadcastAsUser(broadcastIntent, UserHandle.SYSTEM,
                 android.Manifest.permission.PROCESS_OUTGOING_CALLS,
                 AppOpsManager.OP_PROCESS_OUTGOING_CALLS,
                 new OutgoingCallReceiver(),
diff --git a/src/com/android/phone/PhoneGlobals.java b/src/com/android/phone/PhoneGlobals.java
index c6081b1..783878c 100644
--- a/src/com/android/phone/PhoneGlobals.java
+++ b/src/com/android/phone/PhoneGlobals.java
@@ -18,61 +18,50 @@
 
 import android.app.Activity;
 import android.app.KeyguardManager;
-import android.app.PendingIntent;
 import android.app.ProgressDialog;
-import android.app.TaskStackBuilder;
-import android.bluetooth.BluetoothAdapter;
-import android.bluetooth.IBluetoothHeadsetPhone;
 import android.content.BroadcastReceiver;
-import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.ContextWrapper;
 import android.content.Intent;
 import android.content.IntentFilter;
-import android.content.ServiceConnection;
 import android.media.AudioManager;
+import android.net.ConnectivityManager;
 import android.net.Uri;
 import android.os.AsyncResult;
 import android.os.Bundle;
 import android.os.Handler;
-import android.os.IBinder;
-import android.os.IPowerManager;
 import android.os.Message;
 import android.os.PersistableBundle;
 import android.os.PowerManager;
-import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.SystemClock;
 import android.os.SystemProperties;
+import android.os.SystemService;
 import android.os.UpdateLock;
-import android.os.UserHandle;
+import android.os.UserManager;
 import android.preference.PreferenceManager;
-import android.provider.Settings.System;
+import android.provider.Settings;
 import android.telephony.CarrierConfigManager;
 import android.telephony.ServiceState;
-import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 import android.util.Log;
+import android.widget.Toast;
 
 import com.android.internal.telephony.Call;
 import com.android.internal.telephony.CallManager;
-import com.android.internal.telephony.IccCard;
 import com.android.internal.telephony.IccCardConstants;
 import com.android.internal.telephony.MmiCode;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneConstants;
 import com.android.internal.telephony.PhoneFactory;
-import com.android.internal.telephony.SubscriptionController;
 import com.android.internal.telephony.TelephonyCapabilities;
 import com.android.internal.telephony.TelephonyIntents;
 import com.android.phone.common.CallLogAsync;
 import com.android.phone.settings.SettingsConstants;
 import com.android.server.sip.SipService;
 import com.android.services.telephony.activation.SimActivationManager;
-
-import java.util.ArrayList;
-import java.util.List;
+import com.android.services.telephony.sip.SipUtil;
 
 /**
  * Global state for the telephony subsystem when running in the primary
@@ -109,7 +98,7 @@
     private static final int EVENT_DATA_ROAMING_DISCONNECTED = 10;
     private static final int EVENT_DATA_ROAMING_OK = 11;
     private static final int EVENT_UNSOL_CDMA_INFO_RECORD = 12;
-    private static final int EVENT_START_SIP_SERVICE = 13;
+    private static final int EVENT_RESTART_SIP = 13;
 
     // The MMI codes are also used by the InCallScreen.
     public static final int MMI_INITIATE = 51;
@@ -118,6 +107,9 @@
     // Don't use message codes larger than 99 here; those are reserved for
     // the individual Activities of the Phone UI.
 
+    public static final int AIRPLANE_ON = 1;
+    public static final int AIRPLANE_OFF = 0;
+
     /**
      * Allowable values for the wake lock code.
      *   SLEEP means the device can be put to sleep.
@@ -130,14 +122,6 @@
         FULL
     }
 
-    /**
-     * Intent Action used for hanging up the current call from Notification bar. This will
-     * choose first ringing call, first active call, or first background call (typically in
-     * HOLDING state).
-     */
-    public static final String ACTION_HANG_UP_ONGOING_CALL =
-            "com.android.phone.ACTION_HANG_UP_ONGOING_CALL";
-
     private static PhoneGlobals sMe;
 
     // A few important fields we expose to the rest of the package
@@ -152,7 +136,7 @@
     CarrierConfigLoader configLoader;
 
     private CallGatewayManager callGatewayManager;
-    private CallStateMonitor callStateMonitor;
+    private Phone phoneInEcm;
 
     static boolean sVoiceCapable = true;
 
@@ -166,20 +150,11 @@
     private Activity mPUKEntryActivity;
     private ProgressDialog mPUKEntryProgressDialog;
 
-    private boolean mIsSimPinEnabled;
-    private String mCachedSimPin;
-
-    // True if we are beginning a call, but the phone state has not changed yet
-    private boolean mBeginningCall;
     private boolean mDataDisconnectedDueToRoaming = false;
 
-    // Last phone state seen by updatePhoneState()
-    private PhoneConstants.State mLastPhoneState = PhoneConstants.State.IDLE;
-
     private WakeState mWakeState = WakeState.SLEEP;
 
     private PowerManager mPowerManager;
-    private IPowerManager mPowerManagerService;
     private PowerManager.WakeLock mWakeLock;
     private PowerManager.WakeLock mPartialWakeLock;
     private KeyguardManager mKeyguardManager;
@@ -189,9 +164,6 @@
     // Broadcast receiver for various intent broadcasts (see onCreate())
     private final BroadcastReceiver mReceiver = new PhoneAppBroadcastReceiver();
 
-    /** boolean indicating restoring mute state on InCallScreen.onResume() */
-    private boolean mShouldRestoreMuteOnInCallResume;
-
     /**
      * The singleton OtaUtils instance used for OTASP calls.
      *
@@ -212,28 +184,11 @@
     public OtaUtils.CdmaOtaScreenState cdmaOtaScreenState;
     public OtaUtils.CdmaOtaInCallScreenUiState cdmaOtaInCallScreenUiState;
 
-    /**
-     * Set the restore mute state flag. Used when we are setting the mute state
-     * OUTSIDE of user interaction {@link PhoneUtils#startNewCall(Phone)}
-     */
-    /*package*/void setRestoreMuteOnInCallResume (boolean mode) {
-        mShouldRestoreMuteOnInCallResume = mode;
-    }
-
     Handler mHandler = new Handler() {
         @Override
         public void handleMessage(Message msg) {
             PhoneConstants.State phoneState;
             switch (msg.what) {
-                // Starts the SIP service. It's a no-op if SIP API is not supported
-                // on the deivce.
-                // TODO: Having the phone process host the SIP service is only
-                // temporary. Will move it to a persistent communication process
-                // later.
-                case EVENT_START_SIP_SERVICE:
-                    SipService.start(getApplicationContext());
-                    break;
-
                 // TODO: This event should be handled by the lock screen, just
                 // like the "SIM missing" and "Sim locked" cases (bug 1804111).
                 case EVENT_SIM_NETWORK_LOCKED:
@@ -289,6 +244,16 @@
                 case EVENT_UNSOL_CDMA_INFO_RECORD:
                     //TODO: handle message here;
                     break;
+                case EVENT_RESTART_SIP:
+                    // This should only run if the Phone process crashed and was restarted. We do
+                    // not want this running if the device is still in the FBE encrypted state.
+                    // This is the same procedure that is triggered in the SipBroadcastReceiver
+                    // upon BOOT_COMPLETED.
+                    UserManager userManager = UserManager.get(sMe);
+                    if (userManager != null && userManager.isUserUnlocked()) {
+                        SipUtil.startSipService();
+                    }
+                    break;
             }
         }
     };
@@ -330,7 +295,8 @@
             // status bar icons and control other status bar behavior.
             notificationMgr = NotificationMgr.init(this);
 
-            mHandler.sendEmptyMessage(EVENT_START_SIP_SERVICE);
+            // If PhoneGlobals has crashed and is being restarted, then restart.
+            mHandler.sendEmptyMessage(EVENT_RESTART_SIP);
 
             // Create an instance of CdmaPhoneCallState and initialize it to IDLE
             cdmaPhoneCallState = new CdmaPhoneCallState();
@@ -345,11 +311,6 @@
 
             mKeyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
 
-            // get a handle to the service so that we can use it later when we
-            // want to set the poke lock.
-            mPowerManagerService = IPowerManager.Stub.asInterface(
-                    ServiceManager.getService("power"));
-
             // Get UpdateLock to suppress system-update related events (e.g. dialog show-up)
             // during phone calls.
             mUpdateLock = new UpdateLock("phone");
@@ -371,9 +332,6 @@
             // The asynchronous caching will start just after this call.
             callerInfoCache = CallerInfoCache.init(this);
 
-            // Monitors call activity from the telephony layer
-            callStateMonitor = new CallStateMonitor(mCM);
-
             phoneMgr = PhoneInterfaceManager.init(this, PhoneFactory.getDefaultPhone());
 
             configLoader = CarrierConfigLoader.init(this);
@@ -382,7 +340,7 @@
             // asynchronous events from the telephony layer (like
             // launching the incoming-call UI when an incoming call comes
             // in.)
-            notifier = CallNotifier.init(this, callLogger, callStateMonitor);
+            notifier = CallNotifier.init(this);
 
             PhoneUtils.registerIccStatus(mHandler, EVENT_SIM_NETWORK_LOCKED);
 
@@ -423,9 +381,6 @@
         // XXX pre-load the SimProvider so that it's ready
         resolver.getType(Uri.parse("content://icc/adn"));
 
-        // start with the default value to set the mute state.
-        mShouldRestoreMuteOnInCallResume = false;
-
         // TODO: Register for Cdma Information Records
         // phone.registerCdmaInformationRecord(mHandler, EVENT_UNSOL_CDMA_INFO_RECORD, null);
 
@@ -478,7 +433,7 @@
     }
 
     public PersistableBundle getCarrierConfig() {
-        return getCarrierConfigForSubId(SubscriptionManager.getDefaultSubId());
+        return getCarrierConfigForSubId(SubscriptionManager.getDefaultSubscriptionId());
     }
 
     public PersistableBundle getCarrierConfigForSubId(int subId) {
@@ -486,28 +441,6 @@
     }
 
     /**
-     * Returns PendingIntent for hanging up ongoing phone call. This will typically be used from
-     * Notification context.
-     */
-    /* package */ static PendingIntent createHangUpOngoingCallPendingIntent(Context context) {
-        Intent intent = new Intent(PhoneGlobals.ACTION_HANG_UP_ONGOING_CALL, null,
-                context, NotificationBroadcastReceiver.class);
-        return PendingIntent.getBroadcast(context, 0, intent, 0);
-    }
-
-    boolean isSimPinEnabled() {
-        return mIsSimPinEnabled;
-    }
-
-    boolean authenticateAgainstCachedSimPin(String pin) {
-        return (mCachedSimPin != null && mCachedSimPin.equals(pin));
-    }
-
-    void setCachedSimPin(String pin) {
-        mCachedSimPin = pin;
-    }
-
-    /**
      * Handles OTASP-related events from the telephony layer.
      *
      * While an OTASP call is active, the CallNotifier forwards
@@ -577,10 +510,6 @@
         mPUKEntryProgressDialog = dialog;
     }
 
-    ProgressDialog getPUKEntryProgressDialog() {
-        return mPUKEntryProgressDialog;
-    }
-
     /**
      * Controls whether or not the screen is allowed to sleep.
      *
@@ -686,51 +615,6 @@
         requestWakeState(keepScreenOn ? WakeState.FULL : WakeState.SLEEP);
     }
 
-    /**
-     * Manually pokes the PowerManager's userActivity method.  Since we
-     * set the {@link WindowManager.LayoutParams#INPUT_FEATURE_DISABLE_USER_ACTIVITY}
-     * flag while the InCallScreen is active when there is no proximity sensor,
-     * we need to do this for touch events that really do count as user activity
-     * (like pressing any onscreen UI elements.)
-     */
-    /* package */ void pokeUserActivity() {
-        if (VDBG) Log.d(LOG_TAG, "pokeUserActivity()...");
-        mPowerManager.userActivity(SystemClock.uptimeMillis(), false);
-    }
-
-    /**
-     * Notifies the phone app when the phone state changes.
-     *
-     * This method will updates various states inside Phone app (e.g. update-lock state, etc.)
-     */
-    /* package */ void updatePhoneState(PhoneConstants.State state) {
-        if (state != mLastPhoneState) {
-            mLastPhoneState = state;
-
-            // Try to acquire or release UpdateLock.
-            //
-            // Watch out: we don't release the lock here when the screen is still in foreground.
-            // At that time InCallScreen will release it on onPause().
-            if (state != PhoneConstants.State.IDLE) {
-                // UpdateLock is a recursive lock, while we may get "acquire" request twice and
-                // "release" request once for a single call (RINGING + OFFHOOK and IDLE).
-                // We need to manually ensure the lock is just acquired once for each (and this
-                // will prevent other possible buggy situations too).
-                if (!mUpdateLock.isHeld()) {
-                    mUpdateLock.acquire();
-                }
-            } else {
-                if (mUpdateLock.isHeld()) {
-                    mUpdateLock.release();
-                }
-            }
-        }
-    }
-
-    /* package */ PhoneConstants.State getPhoneState() {
-        return mLastPhoneState;
-    }
-
     KeyguardManager getKeyguardManager() {
         return mKeyguardManager;
     }
@@ -751,15 +635,25 @@
         }
 
         notifier.updateCallNotifierRegistrationsAfterRadioTechnologyChange();
-        callStateMonitor.updateAfterRadioTechnologyChange();
+    }
 
-        // Update registration for ICC status after radio technology change
-        IccCard sim = phone == null ? null : phone.getIccCard();
-        if (sim != null) {
-            if (DBG) Log.d(LOG_TAG, "Update registration for ICC status...");
-
-            //Register all events new to the new active phone
-            sim.registerForNetworkLocked(mHandler, EVENT_SIM_NETWORK_LOCKED, null);
+    private void handleAirplaneModeChange(int newMode) {
+        if (newMode == AIRPLANE_ON) {
+            // If we are trying to turn off the radio, make sure there are no active
+            // emergency calls.  If there are, switch airplane mode back to off.
+            if (PhoneUtils.isInEmergencyCall(mCM)) {
+                // Switch airplane mode back to off.
+                ConnectivityManager.from(this).setAirplaneMode(false);
+                Toast.makeText(this, R.string.radio_off_during_emergency_call, Toast.LENGTH_LONG)
+                        .show();
+                Log.i(LOG_TAG, "Ignoring airplane mode: emergency call. Turning airplane off");
+            } else {
+                Log.i(LOG_TAG, "Turning radio off - airplane");
+                PhoneUtils.setRadioPower(false);
+            }
+        } else {
+            Log.i(LOG_TAG, "Turning radio on - airplane");
+            PhoneUtils.setRadioPower(true);
         }
     }
 
@@ -771,9 +665,13 @@
         public void onReceive(Context context, Intent intent) {
             String action = intent.getAction();
             if (action.equals(Intent.ACTION_AIRPLANE_MODE_CHANGED)) {
-                boolean enabled = System.getInt(getContentResolver(),
-                        System.AIRPLANE_MODE_ON, 0) == 0;
-                PhoneUtils.setRadioPower(enabled);
+                int airplaneMode = Settings.Global.getInt(getContentResolver(),
+                        Settings.Global.AIRPLANE_MODE_ON, AIRPLANE_OFF);
+                // Treat any non-OFF values as ON.
+                if (airplaneMode != AIRPLANE_OFF) {
+                    airplaneMode = AIRPLANE_ON;
+                }
+                handleAirplaneModeChange(airplaneMode);
             } else if (action.equals(TelephonyIntents.ACTION_ANY_DATA_CONNECTION_STATE_CHANGED)) {
                 int subId = intent.getIntExtra(PhoneConstants.SUBSCRIPTION_KEY,
                         SubscriptionManager.INVALID_SUBSCRIPTION_ID);
@@ -821,47 +719,33 @@
             } else if (action.equals(TelephonyIntents.ACTION_SERVICE_STATE_CHANGED)) {
                 handleServiceStateChanged(intent);
             } else if (action.equals(TelephonyIntents.ACTION_EMERGENCY_CALLBACK_MODE_CHANGED)) {
-                if (TelephonyCapabilities.supportsEcm(mCM.getFgPhone())) {
-                    Log.d(LOG_TAG, "Emergency Callback Mode arrived in PhoneApp.");
-                    // Start Emergency Callback Mode service
-                    if (intent.getBooleanExtra("phoneinECMState", false)) {
-                        context.startService(new Intent(context,
-                                EmergencyCallbackModeService.class));
+                int phoneId = intent.getIntExtra(PhoneConstants.PHONE_KEY, 0);
+                phoneInEcm = getPhone(phoneId);
+                Log.d(LOG_TAG, "Emergency Callback Mode. phoneId:" + phoneId);
+                if (phoneInEcm != null) {
+                    if (TelephonyCapabilities.supportsEcm(phoneInEcm)) {
+                        Log.d(LOG_TAG, "Emergency Callback Mode arrived in PhoneApp.");
+                        // Start Emergency Callback Mode service
+                        if (intent.getBooleanExtra("phoneinECMState", false)) {
+                            context.startService(new Intent(context,
+                                    EmergencyCallbackModeService.class));
+                        } else {
+                            phoneInEcm = null;
+                        }
+                    } else {
+                        // It doesn't make sense to get ACTION_EMERGENCY_CALLBACK_MODE_CHANGED
+                        // on a device that doesn't support ECM in the first place.
+                        Log.e(LOG_TAG, "Got ACTION_EMERGENCY_CALLBACK_MODE_CHANGED, but "
+                                + "ECM isn't supported for phone: " + phoneInEcm.getPhoneName());
+                        phoneInEcm = null;
                     }
                 } else {
-                    // It doesn't make sense to get ACTION_EMERGENCY_CALLBACK_MODE_CHANGED
-                    // on a device that doesn't support ECM in the first place.
-                    Log.e(LOG_TAG, "Got ACTION_EMERGENCY_CALLBACK_MODE_CHANGED, "
-                            + "but ECM isn't supported for phone: "
-                            + mCM.getFgPhone().getPhoneName());
+                    Log.w(LOG_TAG, "phoneInEcm is null.");
                 }
             }
         }
     }
 
-    /**
-     * Accepts broadcast Intents which will be prepared by {@link NotificationMgr} and thus
-     * sent from framework's notification mechanism (which is outside Phone context).
-     * This should be visible from outside, but shouldn't be in "exported" state.
-     *
-     * TODO: If possible merge this into PhoneAppBroadcastReceiver.
-     */
-    public static class NotificationBroadcastReceiver extends BroadcastReceiver {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            String action = intent.getAction();
-            // TODO: use "if (VDBG)" here.
-            Log.d(LOG_TAG, "Broadcast from Notification: " + action);
-
-            if (action.equals(ACTION_HANG_UP_ONGOING_CALL)) {
-                PhoneUtils.hangup(PhoneGlobals.getInstance().mCM);
-            } else {
-                Log.w(LOG_TAG, "Received hang-up request from notification,"
-                        + " but there's no call the system can hang up.");
-            }
-        }
-    }
-
     private void handleServiceStateChanged(Intent intent) {
         /**
          * This used to handle updating EriTextWidgetProvider this routine
@@ -881,18 +765,6 @@
         }
     }
 
-    public boolean isOtaCallInActiveState() {
-        boolean otaCallActive = false;
-        if (VDBG) Log.d(LOG_TAG, "- isOtaCallInActiveState " + otaCallActive);
-        return otaCallActive;
-    }
-
-    public boolean isOtaCallInEndState() {
-        boolean otaCallEnded = false;
-        if (VDBG) Log.d(LOG_TAG, "- isOtaCallInEndState " + otaCallEnded);
-        return otaCallEnded;
-    }
-
     // it is safe to call clearOtaState() even if the InCallScreen isn't active
     public void clearOtaState() {
         if (DBG) Log.d(LOG_TAG, "- clearOtaState ...");
@@ -911,6 +783,10 @@
         }
     }
 
+    public Phone getPhoneInEcm() {
+        return phoneInEcm;
+    }
+
     /**
      * Triggers a refresh of the message waiting (voicemail) indicator.
      *
@@ -928,22 +804,4 @@
     public void clearMwiIndicator(int subId) {
         notificationMgr.updateMwi(subId, false);
     }
-
-    /**
-     * "Call origin" may be used by Contacts app to specify where the phone call comes from.
-     * Currently, the only permitted value for this extra is {@link #ALLOWED_EXTRA_CALL_ORIGIN}.
-     * Any other value will be ignored, to make sure that malicious apps can't trick the in-call
-     * UI into launching some random other app after a call ends.
-     *
-     * TODO: make this more generic. Note that we should let the "origin" specify its package
-     * while we are now assuming it is "com.android.contacts"
-     */
-    public static final String EXTRA_CALL_ORIGIN = "com.android.phone.CALL_ORIGIN";
-    private static final String DEFAULT_CALL_ORIGIN_PACKAGE = "com.android.dialer";
-    private static final String ALLOWED_EXTRA_CALL_ORIGIN =
-            "com.android.dialer.DialtactsActivity";
-    /**
-     * Used to determine if the preserved call origin is fresh enough.
-     */
-    private static final long CALL_ORIGIN_EXPIRATION_MILLIS = 30 * 1000;
 }
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index 21b3b22..7738b77 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -22,6 +22,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
+import android.content.pm.PackageInfo;
 import android.content.pm.PackageManager;
 import android.net.Uri;
 import android.os.AsyncResult;
@@ -31,12 +32,14 @@
 import android.os.Looper;
 import android.os.Message;
 import android.os.Process;
+import android.os.ResultReceiver;
 import android.os.ServiceManager;
 import android.os.UserHandle;
 import android.os.UserManager;
 import android.preference.PreferenceManager;
 import android.provider.Settings;
 import android.telecom.PhoneAccount;
+import android.telecom.PhoneAccountHandle;
 import android.telecom.TelecomManager;
 import android.telephony.CarrierConfigManager;
 import android.telephony.CellInfo;
@@ -49,7 +52,6 @@
 import android.telephony.TelephonyManager;
 import android.telephony.ModemActivityInfo;
 import android.text.TextUtils;
-import android.util.ArrayMap;
 import android.util.ArraySet;
 import android.util.Log;
 import android.util.Pair;
@@ -75,17 +77,15 @@
 import com.android.internal.telephony.uicc.UiccCard;
 import com.android.internal.telephony.uicc.UiccController;
 import com.android.internal.util.HexDump;
+import com.android.phone.settings.VoicemailNotificationSettingsUtil;
 
 import static com.android.internal.telephony.PhoneConstants.SUBSCRIPTION_KEY;
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
-import java.util.Objects;
 
 /**
  * Implementation of the ITelephony interface.
@@ -154,7 +154,6 @@
     private static final String PREF_CARRIERS_ALPHATAG_PREFIX = "carrier_alphtag_";
     private static final String PREF_CARRIERS_NUMBER_PREFIX = "carrier_number_";
     private static final String PREF_CARRIERS_SUBSCRIBER_PREFIX = "carrier_subscriber_";
-    private static final String PREF_ENABLE_VIDEO_CALLING = "enable_video_calling";
 
     /**
      * A request object to use for transmitting data to an ICC.
@@ -197,8 +196,9 @@
         public Object argument;
         /** The result of the request that is run on the main thread */
         public Object result;
-        /** The subscriber id that this request applies to. Null if default. */
-        public Integer subId;
+        // The subscriber id that this request applies to. Defaults to
+        // SubscriptionManager.INVALID_SUBSCRIPTION_ID
+        public Integer subId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
 
         public MainThreadRequest(Object argument) {
             this.argument = argument;
@@ -206,7 +206,9 @@
 
         public MainThreadRequest(Object argument, Integer subId) {
             this.argument = argument;
-            this.subId = subId;
+            if (subId != null) {
+                this.subId = subId;
+            }
         }
     }
 
@@ -241,7 +243,7 @@
             MainThreadRequest request;
             Message onCompleted;
             AsyncResult ar;
-            UiccCard uiccCard = UiccController.getInstance().getUiccCard(mPhone.getPhoneId());
+            UiccCard uiccCard;
             IccAPDUArgument iccArgument;
 
             switch (msg.what) {
@@ -317,6 +319,7 @@
                 case CMD_TRANSMIT_APDU_LOGICAL_CHANNEL:
                     request = (MainThreadRequest) msg.obj;
                     iccArgument = (IccAPDUArgument) request.argument;
+                    uiccCard = getUiccCardFromRequest(request);
                     if (uiccCard == null) {
                         loge("iccTransmitApduLogicalChannel: No UICC");
                         request.result = new IccIoResult(0x6F, 0, (byte[])null);
@@ -357,6 +360,7 @@
                 case CMD_TRANSMIT_APDU_BASIC_CHANNEL:
                     request = (MainThreadRequest) msg.obj;
                     iccArgument = (IccAPDUArgument) request.argument;
+                    uiccCard = getUiccCardFromRequest(request);
                     if (uiccCard == null) {
                         loge("iccTransmitApduBasicChannel: No UICC");
                         request.result = new IccIoResult(0x6F, 0, (byte[])null);
@@ -396,6 +400,7 @@
                 case CMD_EXCHANGE_SIM_IO:
                     request = (MainThreadRequest) msg.obj;
                     iccArgument = (IccAPDUArgument) request.argument;
+                    uiccCard = getUiccCardFromRequest(request);
                     if (uiccCard == null) {
                         loge("iccExchangeSimIO: No UICC");
                         request.result = new IccIoResult(0x6F, 0, (byte[])null);
@@ -426,6 +431,7 @@
 
                 case CMD_SEND_ENVELOPE:
                     request = (MainThreadRequest) msg.obj;
+                    uiccCard = getUiccCardFromRequest(request);
                     if (uiccCard == null) {
                         loge("sendEnvelopeWithStatus: No UICC");
                         request.result = new IccIoResult(0x6F, 0, (byte[])null);
@@ -461,9 +467,11 @@
 
                 case CMD_OPEN_CHANNEL:
                     request = (MainThreadRequest) msg.obj;
+                    uiccCard = getUiccCardFromRequest(request);
                     if (uiccCard == null) {
                         loge("iccOpenLogicalChannel: No UICC");
-                        request.result = new IccIoResult(0x6F, 0, (byte[])null);
+                        request.result = new IccOpenLogicalChannelResponse(-1,
+                            IccOpenLogicalChannelResponse.STATUS_MISSING_RESOURCE, null);
                         synchronized (request) {
                             request.notifyAll();
                         }
@@ -518,6 +526,7 @@
 
                 case CMD_CLOSE_CHANNEL:
                     request = (MainThreadRequest) msg.obj;
+                    uiccCard = getUiccCardFromRequest(request);
                     if (uiccCard == null) {
                         loge("iccCloseLogicalChannel: No UICC");
                         request.result = new IccIoResult(0x6F, 0, (byte[])null);
@@ -742,6 +751,10 @@
                             loge("queryModemActivityInfo: Unknown exception");
                         }
                     }
+                    // Result cannot be null. Return ModemActivityInfo with all fields set to 0.
+                    if (request.result == null) {
+                        request.result = new ModemActivityInfo(0, 0, 0, null, 0, 0);
+                    }
                     synchronized (request) {
                         request.notifyAll();
                     }
@@ -778,7 +791,7 @@
      * @see #sendRequestAsync
      */
     private Object sendRequest(int command, Object argument) {
-        return sendRequest(command, argument, null);
+        return sendRequest(command, argument, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
     }
 
     /**
@@ -865,7 +878,14 @@
     }
 
     private Phone getPhoneFromRequest(MainThreadRequest request) {
-        return (request.subId == null) ? mPhone : getPhone(request.subId);
+        return (request.subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID)
+                ? mPhone : getPhone(request.subId);
+    }
+
+    private UiccCard getUiccCardFromRequest(MainThreadRequest request) {
+        Phone phone = getPhoneFromRequest(request);
+        return phone == null ? null :
+                UiccController.getInstance().getUiccCard(phone.getPhoneId());
     }
 
     // returns phone associated with the subId.
@@ -1074,14 +1094,6 @@
         }
     }
 
-    public boolean isSimPinEnabled(String callingPackage) {
-        if (!canReadPhoneState(callingPackage, "isSimPinEnabled")) {
-            return false;
-        }
-
-        return (PhoneGlobals.getInstance().isSimPinEnabled());
-    }
-
     public boolean supplyPin(String pin) {
         return supplyPinForSubscriber(getDefaultSubscription(), pin);
     }
@@ -1386,11 +1398,13 @@
     }
 
     public int getCallState() {
-        return getCallStateForSubscriber(getDefaultSubscription());
+        return getCallStateForSlot(getSlotForDefaultSubscription());
     }
 
-    public int getCallStateForSubscriber(int subId) {
-        return DefaultPhoneNotifier.convertCallState(getPhone(subId).getState());
+    public int getCallStateForSlot(int slotId) {
+        Phone phone = PhoneFactory.getPhone(slotId);
+        return phone == null ? TelephonyManager.CALL_STATE_IDLE :
+            DefaultPhoneNotifier.convertCallState(phone.getState());
     }
 
     @Override
@@ -1424,7 +1438,8 @@
             return null;
         }
 
-        if (checkIfCallerIsSelfOrForegroundUser()) {
+        if (checkIfCallerIsSelfOrForegroundUser() ||
+                checkCallerInteractAcrossUsersFull()) {
             if (DBG_LOC) log("getCellLocation: is active user");
             Bundle data = new Bundle();
             Phone phone = getPhone(mSubscriptionController.getDefaultDataSubId());
@@ -1499,14 +1514,16 @@
             return null;
         }
 
-        if (checkIfCallerIsSelfOrForegroundUser()) {
+        if (checkIfCallerIsSelfOrForegroundUser() ||
+                checkCallerInteractAcrossUsersFull()) {
             if (DBG_LOC) log("getNeighboringCellInfo: is active user");
 
             ArrayList<NeighboringCellInfo> cells = null;
 
             try {
                 cells = (ArrayList<NeighboringCellInfo>) sendRequest(
-                        CMD_HANDLE_NEIGHBORING_CELL, null, null);
+                        CMD_HANDLE_NEIGHBORING_CELL, null,
+                        SubscriptionManager.INVALID_SUBSCRIPTION_ID);
             } catch (RuntimeException e) {
                 Log.e(LOG_TAG, "getNeighboringCellInfo " + e);
             }
@@ -1528,7 +1545,8 @@
             return null;
         }
 
-        if (checkIfCallerIsSelfOrForegroundUser()) {
+        if (checkIfCallerIsSelfOrForegroundUser() ||
+                checkCallerInteractAcrossUsersFull()) {
             if (DBG_LOC) log("getAllCellInfo: is active user");
             List<CellInfo> cellInfos = new ArrayList<CellInfo>();
             for (Phone phone : PhoneFactory.getPhones()) {
@@ -1547,10 +1565,37 @@
         mPhone.setCellInfoListRate(rateInMillis);
     }
 
+    @Override
+    public String getImeiForSlot(int slotId, String callingPackage) {
+      if (!canReadPhoneState(callingPackage, "getImeiForSlot")) {
+          return null;
+      }
+      Phone phone = PhoneFactory.getPhone(slotId);
+      return phone == null ? null : phone.getImei();
+    }
+
+    @Override
+    public String getDeviceSoftwareVersionForSlot(int slotId, String callingPackage) {
+      if (!canReadPhoneState(callingPackage, "getDeviceSoftwareVersionForSlot")) {
+          return null;
+      }
+      Phone phone = PhoneFactory.getPhone(slotId);
+      return phone == null ? null : phone.getDeviceSvn();
+    }
+
     //
     // Internal helper methods.
     //
 
+    /**
+     * Returns true if the caller holds INTERACT_ACROSS_USERS_FULL.
+     */
+    private boolean checkCallerInteractAcrossUsersFull() {
+        return mPhone.getContext().checkCallingOrSelfPermission(
+                android.Manifest.permission.INTERACT_ACROSS_USERS_FULL)
+                == PackageManager.PERMISSION_GRANTED;
+    }
+
     private static boolean checkIfCallerIsSelfOrForegroundUser() {
         boolean ok;
 
@@ -1597,7 +1642,7 @@
      *
      * @throws SecurityException if the caller does not have the required permission/privilege
      */
-    private void enforceModifyPermissionOrCarrierPrivilege() {
+    private void enforceModifyPermissionOrCarrierPrivilege(int subId) {
         int permission = mApp.checkCallingOrSelfPermission(
                 android.Manifest.permission.MODIFY_PHONE_STATE);
         if (permission == PackageManager.PERMISSION_GRANTED) {
@@ -1605,10 +1650,7 @@
         }
 
         log("No modify permission, check carrier privilege next.");
-        if (getCarrierPrivilegeStatus() != TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS) {
-            loge("No Carrier Privilege.");
-            throw new SecurityException("No modify permission or carrier privilege.");
-        }
+        enforceCarrierPrivilege(subId);
     }
 
     /**
@@ -1616,8 +1658,9 @@
      *
      * @throws SecurityException if the caller does not have the required permission
      */
-    private void enforceCarrierPrivilege() {
-        if (getCarrierPrivilegeStatus() != TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS) {
+    private void enforceCarrierPrivilege(int subId) {
+        if (getCarrierPrivilegeStatus(subId) !=
+                    TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS) {
             loge("No Carrier Privilege.");
             throw new SecurityException("No Carrier Privilege.");
         }
@@ -1660,16 +1703,16 @@
 
     @Override
     public int getActivePhoneType() {
-        return getActivePhoneTypeForSubscriber(getDefaultSubscription());
+        return getActivePhoneTypeForSlot(getSlotForDefaultSubscription());
     }
 
     @Override
-    public int getActivePhoneTypeForSubscriber(int subId) {
-        final Phone phone = getPhone(subId);
+    public int getActivePhoneTypeForSlot(int slotId) {
+        final Phone phone = PhoneFactory.getPhone(slotId);
         if (phone == null) {
             return PhoneConstants.PHONE_TYPE_NONE;
         } else {
-            return getPhone(subId).getPhoneType();
+            return phone.getPhoneType();
         }
     }
 
@@ -1743,7 +1786,7 @@
      */
     @Override
     public String getCdmaMdn(int subId) {
-        enforceModifyPermissionOrCarrierPrivilege();
+        enforceModifyPermissionOrCarrierPrivilege(subId);
         final Phone phone = getPhone(subId);
         if (mPhone.getPhoneType() == PhoneConstants.PHONE_TYPE_CDMA && phone != null) {
             return phone.getLine1Number();
@@ -1757,7 +1800,7 @@
      */
     @Override
     public String getCdmaMin(int subId) {
-        enforceModifyPermissionOrCarrierPrivilege();
+        enforceModifyPermissionOrCarrierPrivilege(subId);
         final Phone phone = getPhone(subId);
         if (phone != null && phone.getPhoneType() == PhoneConstants.PHONE_TYPE_CDMA) {
             return phone.getCdmaMin();
@@ -1778,7 +1821,7 @@
      */
     @Override
     public boolean setVoiceMailNumber(int subId, String alphaTag, String number) {
-        enforceCarrierPrivilege();
+        enforceCarrierPrivilege(subId);
         Boolean success = (Boolean) sendRequest(CMD_SET_VOICEMAIL_NUMBER,
                 new Pair<String, String>(alphaTag, number), new Integer(subId));
         return success;
@@ -1941,6 +1984,10 @@
         return mSubscriptionController.getDefaultSubId();
     }
 
+    private int getSlotForDefaultSubscription() {
+        return mSubscriptionController.getPhoneId(getDefaultSubscription());
+    }
+
     private int getPreferredVoiceSubscription() {
         return mSubscriptionController.getDefaultVoiceSubId();
     }
@@ -1968,37 +2015,37 @@
     }
 
     @Override
-    public IccOpenLogicalChannelResponse iccOpenLogicalChannel(String AID) {
-        enforceModifyPermissionOrCarrierPrivilege();
+    public IccOpenLogicalChannelResponse iccOpenLogicalChannel(int subId, String AID) {
+        enforceModifyPermissionOrCarrierPrivilege(subId);
 
-        if (DBG) log("iccOpenLogicalChannel: " + AID);
+        if (DBG) log("iccOpenLogicalChannel: subId=" + subId + " aid=" + AID);
         IccOpenLogicalChannelResponse response = (IccOpenLogicalChannelResponse)sendRequest(
-            CMD_OPEN_CHANNEL, AID);
+            CMD_OPEN_CHANNEL, AID, subId);
         if (DBG) log("iccOpenLogicalChannel: " + response);
         return response;
     }
 
     @Override
-    public boolean iccCloseLogicalChannel(int channel) {
-        enforceModifyPermissionOrCarrierPrivilege();
+    public boolean iccCloseLogicalChannel(int subId, int channel) {
+        enforceModifyPermissionOrCarrierPrivilege(subId);
 
-        if (DBG) log("iccCloseLogicalChannel: " + channel);
+        if (DBG) log("iccCloseLogicalChannel: subId=" + subId + " chnl=" + channel);
         if (channel < 0) {
           return false;
         }
-        Boolean success = (Boolean)sendRequest(CMD_CLOSE_CHANNEL, channel);
+        Boolean success = (Boolean)sendRequest(CMD_CLOSE_CHANNEL, channel, subId);
         if (DBG) log("iccCloseLogicalChannel: " + success);
         return success;
     }
 
     @Override
-    public String iccTransmitApduLogicalChannel(int channel, int cla,
+    public String iccTransmitApduLogicalChannel(int subId, int channel, int cla,
             int command, int p1, int p2, int p3, String data) {
-        enforceModifyPermissionOrCarrierPrivilege();
+        enforceModifyPermissionOrCarrierPrivilege(subId);
 
         if (DBG) {
-            log("iccTransmitApduLogicalChannel: chnl=" + channel + " cla=" + cla +
-                    " cmd=" + command + " p1=" + p1 + " p2=" + p2 + " p3=" + p3 +
+            log("iccTransmitApduLogicalChannel: subId=" + subId + " chnl=" + channel +
+                    " cla=" + cla + " cmd=" + command + " p1=" + p1 + " p2=" + p2 + " p3=" + p3 +
                     " data=" + data);
         }
 
@@ -2007,7 +2054,7 @@
         }
 
         IccIoResult response = (IccIoResult)sendRequest(CMD_TRANSMIT_APDU_LOGICAL_CHANNEL,
-                new IccAPDUArgument(channel, cla, command, p1, p2, p3, data));
+                new IccAPDUArgument(channel, cla, command, p1, p2, p3, data), subId);
         if (DBG) log("iccTransmitApduLogicalChannel: " + response);
 
         // Append the returned status code to the end of the response payload.
@@ -2020,17 +2067,17 @@
     }
 
     @Override
-    public String iccTransmitApduBasicChannel(int cla, int command, int p1, int p2,
+    public String iccTransmitApduBasicChannel(int subId, int cla, int command, int p1, int p2,
                 int p3, String data) {
-        enforceModifyPermissionOrCarrierPrivilege();
+        enforceModifyPermissionOrCarrierPrivilege(subId);
 
         if (DBG) {
-            log("iccTransmitApduBasicChannel: cla=" + cla + " cmd=" + command + " p1="
-                    + p1 + " p2=" + p2 + " p3=" + p3 + " data=" + data);
+            log("iccTransmitApduBasicChannel: subId=" + subId + " cla=" + cla + " cmd=" + command
+                    + " p1=" + p1 + " p2=" + p2 + " p3=" + p3 + " data=" + data);
         }
 
         IccIoResult response = (IccIoResult)sendRequest(CMD_TRANSMIT_APDU_BASIC_CHANNEL,
-                new IccAPDUArgument(0, cla, command, p1, p2, p3, data));
+                new IccAPDUArgument(0, cla, command, p1, p2, p3, data), subId);
         if (DBG) log("iccTransmitApduBasicChannel: " + response);
 
         // Append the returned status code to the end of the response payload.
@@ -2043,18 +2090,19 @@
     }
 
     @Override
-    public byte[] iccExchangeSimIO(int fileID, int command, int p1, int p2, int p3,
+    public byte[] iccExchangeSimIO(int subId, int fileID, int command, int p1, int p2, int p3,
             String filePath) {
-        enforceModifyPermissionOrCarrierPrivilege();
+        enforceModifyPermissionOrCarrierPrivilege(subId);
 
         if (DBG) {
-            log("Exchange SIM_IO " + fileID + ":" + command + " " +
+            log("Exchange SIM_IO " + subId + ":" + fileID + ":" + command + " " +
                 p1 + " " + p2 + " " + p3 + ":" + filePath);
         }
 
         IccIoResult response =
             (IccIoResult)sendRequest(CMD_EXCHANGE_SIM_IO,
-                    new IccAPDUArgument(-1, fileID, command, p1, p2, p3, filePath));
+                    new IccAPDUArgument(-1, fileID, command, p1, p2, p3, filePath),
+                    subId);
 
         if (DBG) {
           log("Exchange SIM_IO [R]" + response);
@@ -2076,10 +2124,10 @@
     }
 
     @Override
-    public String sendEnvelopeWithStatus(String content) {
-        enforceModifyPermissionOrCarrierPrivilege();
+    public String sendEnvelopeWithStatus(int subId, String content) {
+        enforceModifyPermissionOrCarrierPrivilege(subId);
 
-        IccIoResult response = (IccIoResult)sendRequest(CMD_SEND_ENVELOPE, content);
+        IccIoResult response = (IccIoResult)sendRequest(CMD_SEND_ENVELOPE, content, subId);
         if (response.payload == null) {
           return "";
         }
@@ -2100,7 +2148,7 @@
      */
     @Override
     public String nvReadItem(int itemID) {
-        enforceModifyPermissionOrCarrierPrivilege();
+        enforceModifyPermissionOrCarrierPrivilege(getDefaultSubscription());
         if (DBG) log("nvReadItem: item " + itemID);
         String value = (String) sendRequest(CMD_NV_READ_ITEM, itemID);
         if (DBG) log("nvReadItem: item " + itemID + " is \"" + value + '"');
@@ -2117,7 +2165,7 @@
      */
     @Override
     public boolean nvWriteItem(int itemID, String itemValue) {
-        enforceModifyPermissionOrCarrierPrivilege();
+        enforceModifyPermissionOrCarrierPrivilege(getDefaultSubscription());
         if (DBG) log("nvWriteItem: item " + itemID + " value \"" + itemValue + '"');
         Boolean success = (Boolean) sendRequest(CMD_NV_WRITE_ITEM,
                 new Pair<Integer, String>(itemID, itemValue));
@@ -2134,7 +2182,7 @@
      */
     @Override
     public boolean nvWriteCdmaPrl(byte[] preferredRoamingList) {
-        enforceModifyPermissionOrCarrierPrivilege();
+        enforceModifyPermissionOrCarrierPrivilege(getDefaultSubscription());
         if (DBG) log("nvWriteCdmaPrl: value: " + HexDump.toHexString(preferredRoamingList));
         Boolean success = (Boolean) sendRequest(CMD_NV_WRITE_CDMA_PRL, preferredRoamingList);
         if (DBG) log("nvWriteCdmaPrl: " + (success ? "ok" : "fail"));
@@ -2150,7 +2198,7 @@
      */
     @Override
     public boolean nvResetConfig(int resetType) {
-        enforceModifyPermissionOrCarrierPrivilege();
+        enforceModifyPermissionOrCarrierPrivilege(getDefaultSubscription());
         if (DBG) log("nvResetConfig: type " + resetType);
         Boolean success = (Boolean) sendRequest(CMD_NV_RESET_CONFIG, resetType);
         if (DBG) log("nvResetConfig: type " + resetType + ' ' + (success ? "ok" : "fail"));
@@ -2186,7 +2234,7 @@
      */
     @Override
     public void setNetworkSelectionModeAutomatic(int subId) {
-        enforceModifyPermissionOrCarrierPrivilege();
+        enforceModifyPermissionOrCarrierPrivilege(subId);
         if (DBG) log("setNetworkSelectionModeAutomatic: subId " + subId);
         sendRequest(CMD_SET_NETWORK_SELECTION_MODE_AUTOMATIC, null, subId);
     }
@@ -2197,7 +2245,7 @@
     @Override
     public boolean setNetworkSelectionModeManual(int subId, OperatorInfo operator,
             boolean persistSelection) {
-        enforceModifyPermissionOrCarrierPrivilege();
+        enforceModifyPermissionOrCarrierPrivilege(subId);
         if (DBG) log("setNetworkSelectionModeManual: subId:" + subId + " operator:" + operator);
         ManualNetworkSelectionArgument arg = new ManualNetworkSelectionArgument(operator,
                 persistSelection);
@@ -2209,7 +2257,7 @@
      */
     @Override
     public CellNetworkScanResult getCellNetworkScanResults(int subId) {
-        enforceModifyPermissionOrCarrierPrivilege();
+        enforceModifyPermissionOrCarrierPrivilege(subId);
         if (DBG) log("getCellNetworkScanResults: subId " + subId);
         CellNetworkScanResult result = (CellNetworkScanResult) sendRequest(
                 CMD_PERFORM_NETWORK_SCAN, null, subId);
@@ -2239,7 +2287,7 @@
      */
     @Override
     public int getPreferredNetworkType(int subId) {
-        enforceModifyPermissionOrCarrierPrivilege();
+        enforceModifyPermissionOrCarrierPrivilege(subId);
         if (DBG) log("getPreferredNetworkType");
         int[] result = (int[]) sendRequest(CMD_GET_PREFERRED_NETWORK_TYPE, null, subId);
         int networkType = (result != null ? result[0] : -1);
@@ -2256,7 +2304,7 @@
      */
     @Override
     public boolean setPreferredNetworkType(int subId, int networkType) {
-        enforceModifyPermissionOrCarrierPrivilege();
+        enforceModifyPermissionOrCarrierPrivilege(subId);
         if (DBG) log("setPreferredNetworkType: subId " + subId + " type " + networkType);
         Boolean success = (Boolean) sendRequest(CMD_SET_PREFERRED_NETWORK_TYPE, networkType, subId);
         if (DBG) log("setPreferredNetworkType: " + (success ? "ok" : "fail"));
@@ -2277,7 +2325,7 @@
      */
     @Override
     public int getTetherApnRequired() {
-        enforceModifyPermissionOrCarrierPrivilege();
+        enforceModifyPermission();
         int dunRequired = Settings.Global.getInt(mPhone.getContext().getContentResolver(),
                 Settings.Global.TETHER_DUN_REQUIRED, 2);
         // If not set, check net.tethering.noprovisioning, TETHER_DUN_APN setting and
@@ -2298,10 +2346,10 @@
     public void setDataEnabled(int subId, boolean enable) {
         enforceModifyPermission();
         int phoneId = mSubscriptionController.getPhoneId(subId);
-        log("getDataEnabled: subId=" + subId + " phoneId=" + phoneId);
+        if (DBG) log("getDataEnabled: subId=" + subId + " phoneId=" + phoneId);
         Phone phone = PhoneFactory.getPhone(phoneId);
         if (phone != null) {
-            log("setDataEnabled: subId=" + subId + " enable=" + enable);
+            if (DBG) log("setDataEnabled: subId=" + subId + " enable=" + enable);
             phone.setDataEnabled(enable);
         } else {
             loge("setDataEnabled: no phone for subId=" + subId);
@@ -2327,31 +2375,38 @@
                     null);
         }
         int phoneId = mSubscriptionController.getPhoneId(subId);
-        log("getDataEnabled: subId=" + subId + " phoneId=" + phoneId);
+        if (DBG) log("getDataEnabled: subId=" + subId + " phoneId=" + phoneId);
         Phone phone = PhoneFactory.getPhone(phoneId);
         if (phone != null) {
             boolean retVal = phone.getDataEnabled();
-            log("getDataEnabled: subId=" + subId + " retVal=" + retVal);
+            if (DBG) log("getDataEnabled: subId=" + subId + " retVal=" + retVal);
             return retVal;
         } else {
-            loge("getDataEnabled: no phone subId=" + subId + " retVal=false");
+            if (DBG) loge("getDataEnabled: no phone subId=" + subId + " retVal=false");
             return false;
         }
     }
 
     @Override
-    public int getCarrierPrivilegeStatus() {
-        UiccCard card = UiccController.getInstance().getUiccCard(mPhone.getPhoneId());
+    public int getCarrierPrivilegeStatus(int subId) {
+        final Phone phone = getPhone(subId);
+        if (phone == null) {
+            loge("getCarrierPrivilegeStatus: Invalid subId");
+            return TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS;
+        }
+        UiccCard card = UiccController.getInstance().getUiccCard(phone.getPhoneId());
         if (card == null) {
             loge("getCarrierPrivilegeStatus: No UICC");
             return TelephonyManager.CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED;
         }
         return card.getCarrierPrivilegeStatusForCurrentTransaction(
-                mPhone.getContext().getPackageManager());
+                phone.getContext().getPackageManager());
     }
 
     @Override
     public int checkCarrierPrivilegesForPackage(String pkgName) {
+        if (TextUtils.isEmpty(pkgName))
+            return TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS;
         UiccCard card = UiccController.getInstance().getUiccCard(mPhone.getPhoneId());
         if (card == null) {
             loge("checkCarrierPrivilegesForPackage: No UICC");
@@ -2362,6 +2417,8 @@
 
     @Override
     public int checkCarrierPrivilegesForPackageAnyPhone(String pkgName) {
+        if (TextUtils.isEmpty(pkgName))
+            return TelephonyManager.CARRIER_PRIVILEGE_STATUS_NO_ACCESS;
         int result = TelephonyManager.CARRIER_PRIVILEGE_STATUS_RULES_NOT_LOADED;
         for (int i = 0; i < TelephonyManager.getDefault().getPhoneCount(); i++) {
             UiccCard card = UiccController.getInstance().getUiccCard(i);
@@ -2395,6 +2452,38 @@
                 mPhone.getContext().getPackageManager(), intent);
     }
 
+    @Override
+    public List<String> getPackagesWithCarrierPrivileges() {
+        PackageManager pm = mPhone.getContext().getPackageManager();
+        List<String> privilegedPackages = new ArrayList<>();
+        List<PackageInfo> packages = null;
+        for (int i = 0; i < TelephonyManager.getDefault().getPhoneCount(); i++) {
+            UiccCard card = UiccController.getInstance().getUiccCard(i);
+            if (card == null) {
+                // No UICC in that slot.
+                continue;
+            }
+            if (card.hasCarrierPrivilegeRules()) {
+                if (packages == null) {
+                    // Only check packages in user 0 for now
+                    packages = pm.getInstalledPackagesAsUser(
+                            PackageManager.MATCH_DISABLED_COMPONENTS
+                            | PackageManager.MATCH_DISABLED_UNTIL_USED_COMPONENTS
+                            | PackageManager.GET_SIGNATURES, UserHandle.USER_SYSTEM);
+                }
+                for (int p = packages.size() - 1; p >= 0; p--) {
+                    PackageInfo pkgInfo = packages.get(p);
+                    if (pkgInfo != null && pkgInfo.packageName != null
+                            && card.getCarrierPrivilegeStatus(pkgInfo)
+                                == TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS) {
+                        privilegedPackages.add(pkgInfo.packageName);
+                    }
+                }
+            }
+        }
+        return privilegedPackages;
+    }
+
     private String getIccId(int subId) {
         final Phone phone = getPhone(subId);
         UiccCard card = phone == null ? null : phone.getUiccCard();
@@ -2413,7 +2502,7 @@
     @Override
     public boolean setLine1NumberForDisplayForSubscriber(int subId, String alphaTag,
             String number) {
-        enforceCarrierPrivilege();
+        enforceCarrierPrivilege(subId);
 
         final String iccId = getIccId(subId);
         final Phone phone = getPhone(subId);
@@ -2460,14 +2549,20 @@
     public String getLine1NumberForDisplay(int subId, String callingPackage) {
         // This is open to apps with WRITE_SMS.
         if (!canReadPhoneNumber(callingPackage, "getLine1NumberForDisplay")) {
+            if (DBG_MERGE) log("getLine1NumberForDisplay returning null due to permission");
             return null;
         }
 
         String iccId = getIccId(subId);
         if (iccId != null) {
             String numberPrefKey = PREF_CARRIERS_NUMBER_PREFIX + iccId;
+            if (DBG_MERGE) {
+                log("getLine1NumberForDisplay returning " +
+                        mTelephonySharedPreferences.getString(numberPrefKey, null));
+            }
             return mTelephonySharedPreferences.getString(numberPrefKey, null);
         }
+        if (DBG_MERGE) log("getLine1NumberForDisplay returning null as iccId is null");
         return null;
     }
 
@@ -2559,17 +2654,22 @@
     }
 
     @Override
-    public boolean setOperatorBrandOverride(String brand) {
-        enforceCarrierPrivilege();
-        return mPhone.setOperatorBrandOverride(brand);
+    public boolean setOperatorBrandOverride(int subId, String brand) {
+        enforceCarrierPrivilege(subId);
+        final Phone phone = getPhone(subId);
+        return phone == null ? false : phone.setOperatorBrandOverride(brand);
     }
 
     @Override
-    public boolean setRoamingOverride(List<String> gsmRoamingList,
+    public boolean setRoamingOverride(int subId, List<String> gsmRoamingList,
             List<String> gsmNonRoamingList, List<String> cdmaRoamingList,
             List<String> cdmaNonRoamingList) {
-        enforceCarrierPrivilege();
-        return mPhone.setRoamingOverride(gsmRoamingList, gsmNonRoamingList, cdmaRoamingList,
+        enforceCarrierPrivilege(subId);
+        final Phone phone = getPhone(subId);
+        if (phone == null) {
+            return false;
+        }
+        return phone.setRoamingOverride(gsmRoamingList, gsmNonRoamingList, cdmaRoamingList,
                 cdmaNonRoamingList);
     }
 
@@ -2626,9 +2726,7 @@
     @Override
     public void enableVideoCalling(boolean enable) {
         enforceModifyPermission();
-        SharedPreferences.Editor editor = mTelephonySharedPreferences.edit();
-        editor.putBoolean(PREF_ENABLE_VIDEO_CALLING, enable);
-        editor.commit();
+        ImsManager.setVtSetting(mPhone.getContext(), enable);
     }
 
     @Override
@@ -2643,7 +2741,7 @@
         // which can support video calling.
         return ImsManager.isVtEnabledByPlatform(mPhone.getContext())
                 && ImsManager.isEnhanced4gLteModeSettingEnabledByUser(mPhone.getContext())
-                && mTelephonySharedPreferences.getBoolean(PREF_ENABLE_VIDEO_CALLING, true);
+                && ImsManager.isVtEnabledByUser(mPhone.getContext());
     }
 
     @Override
@@ -2748,7 +2846,7 @@
     }
 
     /**
-     * Besides READ_PHONE_STATE, WRITE_SMS also allows apps to get phone numbers.
+     * Besides READ_PHONE_STATE, WRITE_SMS and READ_SMS also allow apps to get phone numbers.
      */
     private boolean canReadPhoneNumber(String callingPackage, String message) {
         // Default SMS app can always read it.
@@ -2758,11 +2856,19 @@
         }
         try {
             return canReadPhoneState(callingPackage, message);
-        } catch (SecurityException e) {
-            // Can be read with READ_SMS too.
-            mApp.enforceCallingOrSelfPermission(android.Manifest.permission.READ_SMS, message);
-            return mAppOps.noteOp(AppOpsManager.OP_READ_SMS,
-                    Binder.getCallingUid(), callingPackage) == AppOpsManager.MODE_ALLOWED;
+        } catch (SecurityException readPhoneStateSecurityException) {
+            try {
+                // Can be read with READ_SMS too.
+                mApp.enforceCallingOrSelfPermission(android.Manifest.permission.READ_SMS, message);
+                return mAppOps.noteOp(AppOpsManager.OP_READ_SMS,
+                        Binder.getCallingUid(), callingPackage) == AppOpsManager.MODE_ALLOWED;
+            } catch (SecurityException readSmsSecurityException) {
+                // Throw exception with message including both READ_PHONE_STATE and READ_SMS
+                // permissions
+                throw new SecurityException(message + ": Neither user " + Binder.getCallingUid() +
+                        " nor current process has " + android.Manifest.permission.READ_PHONE_STATE +
+                        " or " + android.Manifest.permission.READ_SMS + ".");
+            }
         }
     }
 
@@ -2873,11 +2979,74 @@
     }
 
     /**
-     * {@hide}
-     * Returns the modem stats
+     * Responds to the ResultReceiver with the {@link android.telephony.ModemActivityInfo} object
+     * representing the state of the modem.
+     *
+     * NOTE: This clears the modem state, so there should only every be one caller.
+     * @hide
      */
     @Override
-    public ModemActivityInfo getModemActivityInfo() {
-        return (ModemActivityInfo) sendRequest(CMD_GET_MODEM_ACTIVITY_INFO, null);
+    public void requestModemActivityInfo(ResultReceiver result) {
+        enforceModifyPermission();
+
+        ModemActivityInfo info = (ModemActivityInfo) sendRequest(CMD_GET_MODEM_ACTIVITY_INFO, null);
+        Bundle bundle = new Bundle();
+        bundle.putParcelable(TelephonyManager.MODEM_ACTIVITY_RESULT_KEY, info);
+        result.send(0, bundle);
     }
+
+    /**
+     * {@hide}
+     * Returns the service state information on specified subscription.
+     */
+    @Override
+    public ServiceState getServiceStateForSubscriber(int subId, String callingPackage) {
+
+        if (!canReadPhoneState(callingPackage, "getServiceStateForSubscriber")) {
+            return null;
+        }
+
+        final Phone phone = getPhone(subId);
+        if (phone == null) {
+            return null;
+        }
+
+        return phone.getServiceState();
+    }
+
+    /**
+     * Returns the URI for the per-account voicemail ringtone set in Phone settings.
+     *
+     * @param accountHandle The handle for the {@link PhoneAccount} for which to retrieve the
+     * voicemail ringtone.
+     * @return The URI for the ringtone to play when receiving a voicemail from a specific
+     * PhoneAccount.
+     */
+    @Override
+    public Uri getVoicemailRingtoneUri(PhoneAccountHandle accountHandle) {
+        final Phone phone = PhoneUtils.getPhoneForPhoneAccountHandle(accountHandle);
+        if (phone == null) {
+            return null;
+        }
+
+        return VoicemailNotificationSettingsUtil.getRingtoneUri(phone);
+    }
+
+    /**
+     * Returns whether vibration is set for voicemail notification in Phone settings.
+     *
+     * @param accountHandle The handle for the {@link PhoneAccount} for which to retrieve the
+     * voicemail vibration setting.
+     * @return {@code true} if the vibration is set for this PhoneAccount, {@code false} otherwise.
+     */
+    @Override
+    public boolean isVoicemailVibrationEnabled(PhoneAccountHandle accountHandle) {
+        final Phone phone = PhoneUtils.getPhoneForPhoneAccountHandle(accountHandle);
+        if (phone == null) {
+            return false;
+        }
+
+        return VoicemailNotificationSettingsUtil.isVibrationEnabled(phone);
+    }
+
 }
diff --git a/src/com/android/phone/PhoneUtils.java b/src/com/android/phone/PhoneUtils.java
index 0ab0cd2..4dd7d0b 100644
--- a/src/com/android/phone/PhoneUtils.java
+++ b/src/com/android/phone/PhoneUtils.java
@@ -73,6 +73,7 @@
  * Misc utilities for the Phone app.
  */
 public class PhoneUtils {
+    public static final String EMERGENCY_ACCOUNT_HANDLE_ID = "E";
     private static final String LOG_TAG = "PhoneUtils";
     private static final boolean DBG = (PhoneGlobals.DBG_LEVEL >= 2);
 
@@ -145,6 +146,10 @@
     private static AlertDialog sUssdDialog = null;
     private static StringBuilder sUssdMsg = new StringBuilder();
 
+    private static final ComponentName PSTN_CONNECTION_SERVICE_COMPONENT =
+            new ComponentName("com.android.phone",
+                    "com.android.services.telephony.TelephonyConnectionService");
+
     /**
      * Handler that tracks the connections and updates the value of the
      * Mute settings for each connection as needed.
@@ -1848,10 +1853,14 @@
     }
 
     static boolean isInEmergencyCall(CallManager cm) {
-        for (Connection cn : cm.getActiveFgCall().getConnections()) {
-            if (PhoneNumberUtils.isLocalEmergencyNumber(PhoneGlobals.getInstance(),
-                    cn.getAddress())) {
-                return true;
+        Call fgCall = cm.getActiveFgCall();
+        // isIdle includes checks for the DISCONNECTING/DISCONNECTED state.
+        if(!fgCall.isIdle()) {
+            for (Connection cn : fgCall.getConnections()) {
+                if (PhoneNumberUtils.isLocalEmergencyNumber(PhoneGlobals.getInstance(),
+                        cn.getAddress())) {
+                    return true;
+                }
             }
         }
         return false;
@@ -1893,7 +1902,7 @@
      *
      * @return true if we find a connection that is disconnected, and
      * pending removal via
-     * {@link com.android.internal.telephony.gsm.GsmCall#clearDisconnected()}.
+     * {@link com.android.internal.telephony.Call#clearDisconnected()}.
      */
     private static final boolean hasDisconnectedConnections(Call call) {
         // look through all connections for non-active ones.
@@ -2406,7 +2415,8 @@
             Phone phone, String prefix, boolean isEmergency) {
         // TODO: Should use some sort of special hidden flag to decorate this account as
         // an emergency-only account
-        String id = isEmergency ? "E" : prefix + String.valueOf(phone.getIccSerialNumber());
+        String id = isEmergency ? EMERGENCY_ACCOUNT_HANDLE_ID : prefix +
+                String.valueOf(phone.getFullIccSerialNumber());
         return makePstnPhoneAccountHandleWithPrefix(id, prefix, isEmergency);
     }
 
@@ -2425,15 +2435,21 @@
     }
 
     public static int getSubIdForPhoneAccountHandle(PhoneAccountHandle handle) {
-        if (handle != null && handle.getComponentName().equals(getPstnConnectionServiceName())) {
-            Phone phone = getPhoneFromIccId(handle.getId());
-            if (phone != null) {
-                return phone.getSubId();
-            }
+        Phone phone = getPhoneForPhoneAccountHandle(handle);
+        if (phone != null) {
+            return phone.getSubId();
         }
         return SubscriptionManager.INVALID_SUBSCRIPTION_ID;
     }
 
+    static Phone getPhoneForPhoneAccountHandle(PhoneAccountHandle handle) {
+        if (handle != null && handle.getComponentName().equals(getPstnConnectionServiceName())) {
+            return getPhoneFromIccId(handle.getId());
+        }
+        return null;
+    }
+
+
     /**
      * Determine if a given phone account corresponds to an active SIM
      *
@@ -2448,13 +2464,13 @@
     }
 
     private static ComponentName getPstnConnectionServiceName() {
-        return new ComponentName(PhoneGlobals.getInstance(), TelephonyConnectionService.class);
+        return PSTN_CONNECTION_SERVICE_COMPONENT;
     }
 
     private static Phone getPhoneFromIccId(String iccId) {
         if (!TextUtils.isEmpty(iccId)) {
             for (Phone phone : PhoneFactory.getPhones()) {
-                String phoneIccId = phone.getIccSerialNumber();
+                String phoneIccId = phone.getFullIccSerialNumber();
                 if (iccId.equals(phoneIccId)) {
                     return phone;
                 }
diff --git a/src/com/android/phone/RestrictedSwitchPreference.java b/src/com/android/phone/RestrictedSwitchPreference.java
new file mode 100644
index 0000000..ba6b65e
--- /dev/null
+++ b/src/com/android/phone/RestrictedSwitchPreference.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.phone;
+
+import android.content.Context;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.preference.PreferenceScreen;
+import android.preference.SwitchPreference;
+import android.util.AttributeSet;
+import android.view.View;
+import android.widget.TextView;
+
+import com.android.settingslib.RestrictedLockUtils;
+import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
+
+public class RestrictedSwitchPreference extends SwitchPreference {
+    private final Context mContext;
+    private boolean mDisabledByAdmin;
+    private final int mSwitchWidgetResId;
+
+    public RestrictedSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr,
+            int defStyleRes) {
+        super(context, attrs, defStyleAttr, defStyleRes);
+        mSwitchWidgetResId = getWidgetLayoutResource();
+        mContext = context;
+    }
+
+    public RestrictedSwitchPreference(Context context, AttributeSet attrs, int defStyleAttr) {
+        this(context, attrs, defStyleAttr, 0);
+    }
+
+    public RestrictedSwitchPreference(Context context, AttributeSet attrs) {
+        this(context, attrs, com.android.internal.R.attr.switchPreferenceStyle);
+    }
+
+    public RestrictedSwitchPreference(Context context) {
+        this(context, null);
+    }
+
+    @Override
+    public void onBindView(View view) {
+        super.onBindView(view);
+        if (mDisabledByAdmin) {
+            view.setEnabled(true);
+        }
+        final TextView summaryView = (TextView) view.findViewById(android.R.id.summary);
+        if (summaryView != null && mDisabledByAdmin) {
+            summaryView.setText(
+                    isChecked() ? R.string.enabled_by_admin : R.string.disabled_by_admin);
+            summaryView.setVisibility(View.VISIBLE);
+        }
+    }
+
+    public void checkRestrictionAndSetDisabled(String userRestriction) {
+        UserManager um = UserManager.get(mContext);
+        UserHandle user = UserHandle.of(um.getUserHandle());
+        boolean disabledByAdmin = um.hasUserRestriction(userRestriction, user)
+                && !um.hasBaseUserRestriction(userRestriction, user);
+        setDisabledByAdmin(disabledByAdmin);
+    }
+
+    @Override
+    public void setEnabled(boolean enabled) {
+        if (enabled && mDisabledByAdmin) {
+            setDisabledByAdmin(false);
+        } else {
+            super.setEnabled(enabled);
+        }
+    }
+
+    public void setDisabledByAdmin(boolean disabled) {
+        if (mDisabledByAdmin != disabled) {
+            mDisabledByAdmin = disabled;
+            setWidgetLayoutResource(disabled ? R.layout.restricted_icon : mSwitchWidgetResId);
+            setEnabled(!disabled);
+        }
+    }
+
+    @Override
+    public void performClick(PreferenceScreen preferenceScreen) {
+        if (mDisabledByAdmin) {
+            RestrictedLockUtils.sendShowAdminSupportDetailsIntent(mContext,
+                    new EnforcedAdmin());
+        } else {
+            super.performClick(preferenceScreen);
+        }
+    }
+}
diff --git a/src/com/android/phone/SimContacts.java b/src/com/android/phone/SimContacts.java
index 9f7f868..f668917 100644
--- a/src/com/android/phone/SimContacts.java
+++ b/src/com/android/phone/SimContacts.java
@@ -20,8 +20,10 @@
 import android.app.ActionBar;
 import android.app.ProgressDialog;
 import android.content.ContentProviderOperation;
+import android.content.ContentProviderResult;
 import android.content.ContentResolver;
 import android.content.ContentValues;
+import android.content.Context;
 import android.content.DialogInterface;
 import android.content.DialogInterface.OnCancelListener;
 import android.content.DialogInterface.OnClickListener;
@@ -52,6 +54,7 @@
 import android.widget.ListView;
 import android.widget.SimpleCursorAdapter;
 import android.widget.TextView;
+import android.widget.Toast;
 
 import java.util.ArrayList;
 
@@ -132,7 +135,7 @@
         }
     }
 
-    private static void actuallyImportOneSimContact(
+    private static boolean actuallyImportOneSimContact(
             final Cursor cursor, final ContentResolver resolver, Account account) {
         final NamePhoneTypePair namePhoneTypePair =
             new NamePhoneTypePair(cursor.getString(NAME_COLUMN));
@@ -194,20 +197,32 @@
         }
 
         try {
-            resolver.applyBatch(ContactsContract.AUTHORITY, operationList);
+            final ContentProviderResult[] results = resolver.applyBatch(ContactsContract.AUTHORITY,
+                    operationList);
+            return results.length > 0; // Batch operations either all succeed or all fail.
         } catch (RemoteException e) {
             Log.e(LOG_TAG, String.format("%s: %s", e.toString(), e.getMessage()));
         } catch (OperationApplicationException e) {
             Log.e(LOG_TAG, String.format("%s: %s", e.toString(), e.getMessage()));
         }
+        return false;
     }
 
     private void importOneSimContact(int position) {
         final ContentResolver resolver = getContentResolver();
+        final Context context = getApplicationContext();
         if (mCursor.moveToPosition(position)) {
-            actuallyImportOneSimContact(mCursor, resolver, mAccount);
+            if (actuallyImportOneSimContact(mCursor, resolver, mAccount)){
+                Toast.makeText(context, R.string.singleContactImportedMsg, Toast.LENGTH_SHORT)
+                        .show();
+            } else {
+                Toast.makeText(context, R.string.failedToImportSingleContactMsg, Toast.LENGTH_SHORT)
+                        .show();
+            }
         } else {
             Log.e(LOG_TAG, "Failed to move the cursor to the position \"" + position + "\"");
+            Toast.makeText(context, R.string.failedToImportSingleContactMsg, Toast.LENGTH_SHORT)
+                    .show();
         }
     }
 
diff --git a/src/com/android/phone/TelephonyDebugService.java b/src/com/android/phone/TelephonyDebugService.java
index fdfe8f5..fe17633 100644
--- a/src/com/android/phone/TelephonyDebugService.java
+++ b/src/com/android/phone/TelephonyDebugService.java
@@ -17,6 +17,7 @@
 package com.android.phone;
 
 import com.android.internal.telephony.DebugService;
+
 import android.app.Service;
 import android.content.Intent;
 import android.os.IBinder;
@@ -30,11 +31,12 @@
  */
 public class TelephonyDebugService extends Service {
     private static String TAG = "TelephonyDebugService";
+    private static final boolean DBG = true;
     private DebugService mDebugService = new DebugService();
 
     /** Constructor */
     public TelephonyDebugService() {
-        Log.d(TAG, "TelephonyDebugService()");
+        if (DBG) Log.d(TAG, "TelephonyDebugService()");
     }
 
     /**
@@ -50,4 +52,3 @@
         mDebugService.dump(fd, pw, args);
     }
 }
-
diff --git a/src/com/android/phone/VoicemailUtils.java b/src/com/android/phone/VoicemailUtils.java
new file mode 100644
index 0000000..f67c64b
--- /dev/null
+++ b/src/com/android/phone/VoicemailUtils.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.phone;
+
+import android.content.Context;
+import android.provider.VoicemailContract;
+import android.provider.VoicemailContract.Status;
+import android.telecom.PhoneAccountHandle;
+
+public class VoicemailUtils {
+
+    public static void setConfigurationState(Context context, PhoneAccountHandle accountHandle,
+            int configurationState) {
+        VoicemailContract.Status.setStatus(context, accountHandle,
+                configurationState,
+                Status.DATA_CHANNEL_STATE_IGNORE,
+                Status.NOTIFICATION_CHANNEL_STATE_IGNORE);
+    }
+
+    public static void setDataChannelState(Context context, PhoneAccountHandle accountHandle,
+            int dataChannelState) {
+        VoicemailContract.Status.setStatus(context, accountHandle,
+                Status.CONFIGURATION_STATE_IGNORE,
+                dataChannelState,
+                Status.NOTIFICATION_CHANNEL_STATE_IGNORE);
+    }
+
+    public static void setNotificationChannelState(Context context,
+            PhoneAccountHandle accountHandle, int notificationChannelState) {
+        VoicemailContract.Status.setStatus(context, accountHandle,
+                Status.CONFIGURATION_STATE_IGNORE,
+                Status.DATA_CHANNEL_STATE_IGNORE,
+                notificationChannelState);
+    }
+}
diff --git a/src/com/android/phone/common/mail/FetchProfile.java b/src/com/android/phone/common/mail/FetchProfile.java
index 01c1fcf..d88dc7c 100644
--- a/src/com/android/phone/common/mail/FetchProfile.java
+++ b/src/com/android/phone/common/mail/FetchProfile.java
@@ -59,7 +59,7 @@
 

         /**

          * A sane portion of the entire message, cut off at a provider determined limit.

-         * This should generaly be around 50kB.

+         * This should generally be around 50kB.

          */

         BODY_SANE,

 

diff --git a/src/com/android/phone/common/mail/MailTransport.java b/src/com/android/phone/common/mail/MailTransport.java
index 172d1a9..f452bab 100644
--- a/src/com/android/phone/common/mail/MailTransport.java
+++ b/src/com/android/phone/common/mail/MailTransport.java
@@ -17,10 +17,21 @@
 
 import android.content.Context;
 import android.net.Network;
+import android.provider.VoicemailContract.Status;
 
+import com.android.internal.annotations.VisibleForTesting;
 import com.android.phone.common.mail.store.ImapStore;
 import com.android.phone.common.mail.utils.LogUtils;
+import com.android.phone.vvm.omtp.imap.ImapHelper;
 
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.Socket;
 import java.net.SocketAddress;
 import java.util.ArrayList;
 import java.util.List;
@@ -32,15 +43,6 @@
 import javax.net.ssl.SSLSession;
 import javax.net.ssl.SSLSocket;
 
-import java.io.BufferedInputStream;
-import java.io.BufferedOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.net.InetAddress;
-import java.net.InetSocketAddress;
-import java.net.Socket;
-
 /**
  * Make connection and perform operations on mail server by reading and writing lines.
  */
@@ -54,17 +56,21 @@
     private static final HostnameVerifier HOSTNAME_VERIFIER =
             HttpsURLConnection.getDefaultHostnameVerifier();
 
-    private Context mContext;
-    private Network mNetwork;
-    private String mHost;
-    private int mPort;
+    private final Context mContext;
+    private final ImapHelper mImapHelper;
+    private final Network mNetwork;
+    private final String mHost;
+    private final int mPort;
     private Socket mSocket;
     private BufferedInputStream mIn;
     private BufferedOutputStream mOut;
-    private int mFlags;
+    private final int mFlags;
+    private SocketCreator mSocketCreator;
 
-    public MailTransport(Context context, Network network, String address, int port, int flags) {
+    public MailTransport(Context context, ImapHelper imapHelper, Network network, String address,
+            int port, int flags) {
         mContext = context;
+        mImapHelper = imapHelper;
         mNetwork = network;
         mHost = address;
         mPort = port;
@@ -77,7 +83,7 @@
      */
     @Override
     public MailTransport clone() {
-        return new MailTransport(mContext, mNetwork, mHost, mPort, mFlags);
+        return new MailTransport(mContext, mImapHelper, mNetwork, mHost, mPort, mFlags);
     }
 
     public boolean canTrySslSecurity() {
@@ -92,55 +98,112 @@
      * Attempts to open a connection using the Uri supplied for connection parameters.  Will attempt
      * an SSL connection if indicated.
      */
-    public void open() throws MessagingException, CertificateValidationException {
+    public void open() throws MessagingException {
         LogUtils.d(TAG, "*** IMAP open " + mHost + ":" + String.valueOf(mPort));
 
-        List<SocketAddress> socketAddresses = new ArrayList<SocketAddress>();
-        try {
-            if (canTrySslSecurity()) {
-                mSocket = HttpsURLConnection.getDefaultSSLSocketFactory().createSocket();
-                socketAddresses.add(new InetSocketAddress(mHost, mPort));
-            } else {
-                if (mNetwork == null) {
-                    mSocket = new Socket();
-                    socketAddresses.add(new InetSocketAddress(mHost, mPort));
-                } else {
-                    InetAddress[] inetAddresses = mNetwork.getAllByName(mHost);
-                    for (int i = 0; i < inetAddresses.length; i++) {
-                        socketAddresses.add(new InetSocketAddress(inetAddresses[i], mPort));
-                    }
-                    mSocket = mNetwork.getSocketFactory().createSocket();
+        List<InetSocketAddress> socketAddresses = new ArrayList<InetSocketAddress>();
+
+        if (mNetwork == null) {
+            socketAddresses.add(new InetSocketAddress(mHost, mPort));
+        } else {
+            try {
+                InetAddress[] inetAddresses = mNetwork.getAllByName(mHost);
+                if (inetAddresses.length == 0) {
+                    throw new MessagingException(MessagingException.IOERROR,
+                            "Host name " + mHost + "cannot be resolved on designated network");
                 }
+                for (int i = 0; i < inetAddresses.length; i++) {
+                    socketAddresses.add(new InetSocketAddress(inetAddresses[i], mPort));
+                }
+            } catch (IOException ioe) {
+                LogUtils.d(TAG, ioe.toString());
+                mImapHelper.setDataChannelState(Status.DATA_CHANNEL_STATE_SERVER_CONNECTION_ERROR);
+                throw new MessagingException(MessagingException.IOERROR, ioe.toString());
             }
-        } catch (IOException ioe) {
-            LogUtils.d(TAG, ioe.toString());
-            throw new MessagingException(MessagingException.IOERROR, ioe.toString());
         }
 
+        boolean success = false;
         while (socketAddresses.size() > 0) {
+            mSocket = createSocket();
             try {
-                mSocket.connect(socketAddresses.remove(0), SOCKET_CONNECT_TIMEOUT);
+                InetSocketAddress address = socketAddresses.remove(0);
+                mSocket.connect(address, SOCKET_CONNECT_TIMEOUT);
 
-                // After the socket connects to an SSL server, confirm that the hostname is as
-                // expected
-                if (canTrySslSecurity() && !canTrustAllCertificates()) {
-                    verifyHostname(mSocket, mHost);
+                if (canTrySslSecurity()) {
+                    /**
+                     * {@link SSLSocket} must connect in its constructor, or create through a
+                     * already connected socket. Since we need to use
+                     * {@link Socket#connect(SocketAddress, int) } to set timeout, we can only
+                     * create it here.
+                     */
+                    LogUtils.d(TAG, "open: converting to SSL socket");
+                    mSocket = HttpsURLConnection.getDefaultSSLSocketFactory()
+                            .createSocket(mSocket, address.getHostName(), address.getPort(), true);
+                    // After the socket connects to an SSL server, confirm that the hostname is as
+                    // expected
+                    if (!canTrustAllCertificates()) {
+                        verifyHostname(mSocket, mHost);
+                    }
                 }
 
                 mIn = new BufferedInputStream(mSocket.getInputStream(), 1024);
                 mOut = new BufferedOutputStream(mSocket.getOutputStream(), 512);
                 mSocket.setSoTimeout(SOCKET_READ_TIMEOUT);
+                success = true;
                 return;
             } catch (IOException ioe) {
                 LogUtils.d(TAG, ioe.toString());
                 if (socketAddresses.size() == 0) {
                     // Only throw an error when there are no more sockets to try.
+                    mImapHelper
+                            .setDataChannelState(Status.DATA_CHANNEL_STATE_SERVER_CONNECTION_ERROR);
                     throw new MessagingException(MessagingException.IOERROR, ioe.toString());
                 }
+            } finally {
+                if (!success) {
+                    try {
+                        mSocket.close();
+                        mSocket = null;
+                    } catch (IOException ioe) {
+                        throw new MessagingException(MessagingException.IOERROR, ioe.toString());
+                    }
+
+                }
             }
         }
     }
 
+    // For testing. We need something that can replace the behavior of "new Socket()"
+    @VisibleForTesting
+    interface SocketCreator {
+
+        Socket createSocket() throws MessagingException;
+    }
+
+    @VisibleForTesting
+    void setSocketCreator(SocketCreator creator) {
+        mSocketCreator = creator;
+    }
+
+    protected Socket createSocket() throws MessagingException {
+        if (mSocketCreator != null) {
+            return mSocketCreator.createSocket();
+        }
+
+        if (mNetwork == null) {
+            LogUtils.v(TAG, "createSocket: network not specified");
+            return new Socket();
+        }
+
+        try {
+            LogUtils.v(TAG, "createSocket: network specified");
+            return mNetwork.getSocketFactory().createSocket();
+        } catch (IOException ioe) {
+            LogUtils.d(TAG, ioe.toString());
+            throw new MessagingException(MessagingException.IOERROR, ioe.toString());
+        }
+    }
+
     /**
      * Lightweight version of SSLCertificateSocketFactory.verifyHostname, which provides this
      * service but is not in the public API.
@@ -158,7 +221,7 @@
      * @throws IOException if something goes wrong handshaking with the server
      * @throws SSLPeerUnverifiedException if the server cannot prove its identity
       */
-    private static void verifyHostname(Socket socket, String hostname) throws IOException {
+    private void verifyHostname(Socket socket, String hostname) throws IOException {
         // The code at the start of OpenSSLSocketImpl.startHandshake()
         // ensures that the call is idempotent, so we can safely call it.
         SSLSocket ssl = (SSLSocket) socket;
@@ -166,6 +229,7 @@
 
         SSLSession session = ssl.getSession();
         if (session == null) {
+            mImapHelper.setDataChannelState(Status.DATA_CHANNEL_STATE_COMMUNICATION_ERROR);
             throw new SSLException("Cannot verify SSL socket without session");
         }
         // TODO: Instead of reporting the name of the server we think we're connecting to,
@@ -173,8 +237,9 @@
         // in the verifier code and is not available in the verifier API, and extracting the
         // CN & alts is beyond the scope of this patch.
         if (!HOSTNAME_VERIFIER.verify(hostname, session)) {
-            throw new SSLPeerUnverifiedException(
-                    "Certificate hostname not useable for server: " + hostname);
+            mImapHelper.setDataChannelState(Status.DATA_CHANNEL_STATE_COMMUNICATION_ERROR);
+            throw new SSLPeerUnverifiedException("Certificate hostname not useable for server: "
+                    + session.getPeerPrincipal());
         }
     }
 
diff --git a/src/com/android/phone/common/mail/store/ImapConnection.java b/src/com/android/phone/common/mail/store/ImapConnection.java
index ace7029..9207aa9 100644
--- a/src/com/android/phone/common/mail/store/ImapConnection.java
+++ b/src/com/android/phone/common/mail/store/ImapConnection.java
@@ -15,6 +15,7 @@
  */
 package com.android.phone.common.mail.store;
 
+import android.provider.VoicemailContract.Status;
 import android.text.TextUtils;
 
 import com.android.phone.common.mail.AuthenticationFailedException;
@@ -105,9 +106,12 @@
             doLogin();
         } catch (SSLException e) {
             LogUtils.d(TAG, "SSLException ", e);
+            mImapStore.getImapHelper().setDataChannelState(Status.DATA_CHANNEL_STATE_SERVER_ERROR);
             throw new CertificateValidationException(e.getMessage(), e);
         } catch (IOException ioe) {
             LogUtils.d(TAG, "IOException", ioe);
+            mImapStore.getImapHelper()
+                    .setDataChannelState(Status.DATA_CHANNEL_STATE_COMMUNICATION_ERROR);
             throw ioe;
         } finally {
             destroyResponses();
@@ -144,6 +148,8 @@
             if (ImapConstants.AUTHENTICATIONFAILED.equals(code) ||
                     ImapConstants.EXPIRED.equals(code) ||
                     (ImapConstants.NO.equals(status) && TextUtils.isEmpty(code))) {
+                mImapStore.getImapHelper()
+                        .setDataChannelState(Status.DATA_CHANNEL_STATE_BAD_CONFIGURATION);
                 throw new AuthenticationFailedException(alertText, ie);
             }
 
@@ -233,12 +239,12 @@
             final String alert = response.getAlertTextOrEmpty().getString();
             final String responseCode = response.getResponseCodeOrEmpty().getString();
             destroyResponses();
-
+            mImapStore.getImapHelper().setDataChannelState(Status.DATA_CHANNEL_STATE_SERVER_ERROR);
             // if the response code indicates an error occurred within the server, indicate that
             if (ImapConstants.UNAVAILABLE.equals(responseCode)) {
+
                 throw new MessagingException(MessagingException.SERVER_ERROR, alert);
             }
-
             throw new ImapException(toString, status, alert, responseCode);
         }
         return responses;
diff --git a/src/com/android/phone/common/mail/store/ImapFolder.java b/src/com/android/phone/common/mail/store/ImapFolder.java
index faeb93f..13c7424 100644
--- a/src/com/android/phone/common/mail/store/ImapFolder.java
+++ b/src/com/android/phone/common/mail/store/ImapFolder.java
@@ -15,18 +15,19 @@
  */
 package com.android.phone.common.mail.store;
 
+import android.annotation.Nullable;
 import android.content.Context;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+import android.provider.VoicemailContract;
+import android.provider.VoicemailContract.Status;
+import android.telecom.Voicemail;
 import android.text.TextUtils;
 import android.util.Base64DataException;
+import android.util.Log;
 
-import com.android.phone.common.mail.store.ImapStore.ImapException;
-import com.android.phone.common.mail.store.ImapStore.ImapMessage;
-import com.android.phone.common.mail.store.imap.ImapConstants;
-import com.android.phone.common.mail.store.imap.ImapElement;
-import com.android.phone.common.mail.store.imap.ImapList;
-import com.android.phone.common.mail.store.imap.ImapResponse;
-import com.android.phone.common.mail.store.imap.ImapString;
-import com.android.phone.common.mail.store.imap.ImapUtility;
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.phone.common.R;
 import com.android.phone.common.mail.AuthenticationFailedException;
 import com.android.phone.common.mail.Body;
 import com.android.phone.common.mail.FetchProfile;
@@ -39,30 +40,25 @@
 import com.android.phone.common.mail.internet.MimeHeader;
 import com.android.phone.common.mail.internet.MimeMultipart;
 import com.android.phone.common.mail.internet.MimeUtility;
-import com.android.phone.common.mail.utility.CountingOutputStream;
-import com.android.phone.common.mail.utility.EOLConvertingOutputStream;
-import com.android.phone.common.mail.utils.Utility;
+import com.android.phone.common.mail.store.ImapStore.ImapException;
+import com.android.phone.common.mail.store.ImapStore.ImapMessage;
+import com.android.phone.common.mail.store.imap.ImapConstants;
+import com.android.phone.common.mail.store.imap.ImapElement;
+import com.android.phone.common.mail.store.imap.ImapList;
+import com.android.phone.common.mail.store.imap.ImapResponse;
+import com.android.phone.common.mail.store.imap.ImapString;
 import com.android.phone.common.mail.utils.LogUtils;
-import com.android.internal.annotations.VisibleForTesting;
-import com.android.phone.common.R;
+import com.android.phone.common.mail.utils.Utility;
 
-import org.apache.commons.io.IOUtils;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.text.SimpleDateFormat;
 import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Locale;
-import java.util.TimeZone;
 
 public class ImapFolder {
     private static final String TAG = "ImapFolder";
@@ -218,7 +214,7 @@
         }
     }
 
-
+    @Nullable
     public Message getMessage(String uid) throws MessagingException {
         checkOpen();
 
@@ -228,6 +224,7 @@
                 return new ImapMessage(uid, this);
             }
         }
+        LogUtils.e(TAG, "UID " + uid + " not found on server");
         return null;
     }
 
@@ -329,7 +326,7 @@
             mConnection.sendCommand(String.format(Locale.US,
                     ImapConstants.UID_FETCH + " %s (%s)", ImapStore.joinMessageUids(messages),
                     Utility.combine(fetchFields.toArray(new String[fetchFields.size()]), ' ')
-                    ), false);
+            ), false);
             ImapResponse response;
             do {
                 response = null;
@@ -416,7 +413,7 @@
                             // decodeBody creates BinaryTempFileBody, but we could avoid this
                             // if we implement ImapStringBody.
                             // (We'll need to share a temp file.  Protect it with a ref-count.)
-                            fetchPart.setBody(decodeBody(mStore.getContext(), bodyStream,
+                            message.setBody(decodeBody(mStore.getContext(), bodyStream,
                                     contentTransferEncoding, fetchPart.getSize(), listener));
                         } catch(Exception e) {
                             // TODO: Figure out what kinds of exceptions might actually be thrown
@@ -734,6 +731,7 @@
                     mMode = MODE_READ_WRITE;
                 }
             } else if (response.isTagged()) { // Not OK
+                mStore.getImapHelper().setDataChannelState(Status.DATA_CHANNEL_STATE_SERVER_ERROR);
                 throw new MessagingException("Can't open mailbox: "
                         + response.getStatusResponseTextOrEmpty());
             }
@@ -745,6 +743,44 @@
         mExists = true;
     }
 
+    public class Quota {
+
+        public final int occupied;
+        public final int total;
+
+        public Quota(int occupied, int total) {
+            this.occupied = occupied;
+            this.total = total;
+        }
+    }
+
+    public Quota getQuota() throws MessagingException {
+        try {
+            final List<ImapResponse> responses = mConnection.executeSimpleCommand(
+                    String.format(Locale.US, ImapConstants.GETQUOTAROOT + " \"%s\"", mName));
+
+            for (ImapResponse response : responses) {
+                if (!response.isDataResponse(0, ImapConstants.QUOTA)) {
+                    continue;
+                }
+                ImapList list = response.getListOrEmpty(2);
+                for (int i = 0; i < list.size(); i += 3) {
+                    if (!list.getStringOrEmpty(i).is("voice")) {
+                        continue;
+                    }
+                    return new Quota(
+                            list.getStringOrEmpty(i + 1).getNumber(-1),
+                            list.getStringOrEmpty(i + 2).getNumber(-1));
+                }
+            }
+        } catch (IOException ioe) {
+            throw ioExceptionHandler(mConnection, ioe);
+        } finally {
+            destroyResponses();
+        }
+        return null;
+    }
+
     private void checkOpen() throws MessagingException {
         if (!isOpen()) {
             throw new MessagingException("Folder " + mName + " is not open.");
@@ -758,6 +794,7 @@
             mConnection = null; // To prevent close() from returning the connection to the pool.
             close(false);
         }
+        mStore.getImapHelper().setDataChannelState(Status.DATA_CHANNEL_STATE_COMMUNICATION_ERROR);
         return new MessagingException(MessagingException.IOERROR, "IO Error", ioe);
     }
 
diff --git a/src/com/android/phone/common/mail/store/ImapStore.java b/src/com/android/phone/common/mail/store/ImapStore.java
index 605abbb..c8095e5 100644
--- a/src/com/android/phone/common/mail/store/ImapStore.java
+++ b/src/com/android/phone/common/mail/store/ImapStore.java
@@ -19,11 +19,11 @@
 import android.content.Context;
 import android.net.Network;
 
-import com.android.phone.common.mail.internet.MimeMessage;
 import com.android.phone.common.mail.MailTransport;
 import com.android.phone.common.mail.Message;
 import com.android.phone.common.mail.MessagingException;
-import com.android.phone.common.mail.store.ImapFolder;
+import com.android.phone.common.mail.internet.MimeMessage;
+import com.android.phone.vvm.omtp.imap.ImapHelper;
 
 import java.io.IOException;
 import java.io.InputStream;
@@ -34,10 +34,11 @@
      * should be returned on FetchProfile.Item.BODY_SANE requests. We'll use 125k now.
      */
     public static final int FETCH_BODY_SANE_SUGGESTED_SIZE = (125 * 1024);
-    private Context mContext;
-    private String mUsername;
-    private String mPassword;
-    private MailTransport mTransport;
+    private final Context mContext;
+    private final ImapHelper mHelper;
+    private final String mUsername;
+    private final String mPassword;
+    private final MailTransport mTransport;
     private ImapConnection mConnection;
 
     public static final int FLAG_NONE         = 0x00;    // No flags
@@ -50,18 +51,24 @@
     /**
      * Contains all the information necessary to log into an imap server
      */
-    public ImapStore(Context context, String username, String password, int port,
+    public ImapStore(Context context, ImapHelper helper, String username, String password, int port,
             String serverName, int flags, Network network) {
         mContext = context;
+        mHelper = helper;
         mUsername = username;
         mPassword = password;
-        mTransport = new MailTransport(context, network, serverName, port, flags);
+        mTransport = new MailTransport(context, this.getImapHelper(),
+                network, serverName, port, flags);
     }
 
     public Context getContext() {
         return mContext;
     }
 
+    public ImapHelper getImapHelper() {
+        return mHelper;
+    }
+
     public String getUsername() {
         return mUsername;
     }
diff --git a/src/com/android/phone/common/mail/store/imap/ImapConstants.java b/src/com/android/phone/common/mail/store/imap/ImapConstants.java
index cde1616..63dda8c 100644
--- a/src/com/android/phone/common/mail/store/imap/ImapConstants.java
+++ b/src/com/android/phone/common/mail/store/imap/ImapConstants.java
@@ -97,6 +97,14 @@
     public static final String APPENDUID = "APPENDUID";
     public static final String NIL = "NIL";
 
+    /**
+     * extensions
+     */
+    public static final String GETQUOTA = "GETQUOTA";
+    public static final String GETQUOTAROOT = "GETQUOTAROOT";
+    public static final String QUOTAROOT = "QUOTAROOT";
+    public static final String QUOTA = "QUOTA";
+
     /** response codes within IMAP responses */
     public static final String EXPIRED = "EXPIRED";
     public static final String AUTHENTICATIONFAILED = "AUTHENTICATIONFAILED";
diff --git a/src/com/android/phone/common/mail/store/imap/ImapString.java b/src/com/android/phone/common/mail/store/imap/ImapString.java
index f38a993..a33ba24 100644
--- a/src/com/android/phone/common/mail/store/imap/ImapString.java
+++ b/src/com/android/phone/common/mail/store/imap/ImapString.java
@@ -107,11 +107,18 @@
     }
 
     /**
-     * @return value parsed as a number.
+     * @return value parsed as a number, or 0 if the string is not a number.
      */
     public final int getNumberOrZero() {
+        return getNumber(0);
+    }
+
+    /**
+     * @return value parsed as a number, or {@code defaultValue} if the string is not a number.
+     */
+    public final int getNumber(int defaultValue) {
         if (!isNumber()) {
-            return 0;
+            return defaultValue;
         }
         return mParsedInteger;
     }
diff --git a/src/com/android/phone/settings/AccessibilitySettingsFragment.java b/src/com/android/phone/settings/AccessibilitySettingsFragment.java
index d5a613b..ea19f75 100644
--- a/src/com/android/phone/settings/AccessibilitySettingsFragment.java
+++ b/src/com/android/phone/settings/AccessibilitySettingsFragment.java
@@ -31,10 +31,14 @@
 import android.util.Log;
 
 import com.android.ims.ImsManager;
+import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.PhoneFactory;
 import com.android.phone.PhoneGlobals;
 import com.android.phone.R;
 import com.android.phone.settings.TtyModeListPreference;
 
+import java.util.List;
+
 public class AccessibilitySettingsFragment extends PreferenceFragment {
     private static final String LOG_TAG = AccessibilitySettingsFragment.class.getSimpleName();
     private static final boolean DBG = (PhoneGlobals.DBG_LEVEL >= 2);
@@ -54,7 +58,10 @@
             if (DBG) Log.d(LOG_TAG, "PhoneStateListener.onCallStateChanged: state=" + state);
             Preference pref = getPreferenceScreen().findPreference(BUTTON_TTY_KEY);
             if (pref != null) {
-                pref.setEnabled(state == TelephonyManager.CALL_STATE_IDLE);
+                final boolean isVolteTtySupported = ImsManager.isVolteEnabledByPlatform(mContext)
+                        && getVolteTtySupported();
+                pref.setEnabled((isVolteTtySupported && !isVideoCallInProgress()) ||
+                        (state == TelephonyManager.CALL_STATE_IDLE));
             }
         }
     };
@@ -98,23 +105,17 @@
     @Override
     public void onResume() {
         super.onResume();
-
-        if (ImsManager.isVolteEnabledByPlatform(mContext) && !getVolteTtySupported()) {
-            TelephonyManager tm =
-                    (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
-            tm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
-        }
+        TelephonyManager tm =
+                (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
+        tm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
     }
 
     @Override
     public void onPause() {
         super.onPause();
-
-        if (ImsManager.isVolteEnabledByPlatform(mContext) && !getVolteTtySupported()) {
-            TelephonyManager tm =
-                    (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
-            tm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
-        }
+        TelephonyManager tm =
+                (TelephonyManager) mContext.getSystemService(Context.TELEPHONY_SERVICE);
+        tm.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
     }
 
     @Override
@@ -142,4 +143,19 @@
         return configManager.getConfig().getBoolean(
                 CarrierConfigManager.KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL);
     }
+
+    private boolean isVideoCallInProgress() {
+        final Phone[] phones = PhoneFactory.getPhones();
+        if (phones == null) {
+            if (DBG) Log.d(LOG_TAG, "isVideoCallInProgress: No phones found. Return false");
+            return false;
+        }
+
+        for (Phone phone : phones) {
+            if (phone.isVideoCallPresent()) {
+                return true;
+            }
+        }
+        return false;
+    }
 }
diff --git a/src/com/android/phone/settings/AccountSelectionPreference.java b/src/com/android/phone/settings/AccountSelectionPreference.java
index 6872a16..58072d9 100644
--- a/src/com/android/phone/settings/AccountSelectionPreference.java
+++ b/src/com/android/phone/settings/AccountSelectionPreference.java
@@ -26,8 +26,10 @@
 import android.os.UserHandle;
 import android.preference.ListPreference;
 import android.preference.Preference;
+import android.telecom.PhoneAccount;
 import android.telecom.PhoneAccountHandle;
 import android.telecom.TelecomManager;
+import android.text.TextUtils;
 import android.util.AttributeSet;
 
 import java.util.List;
@@ -82,11 +84,16 @@
         int selectedIndex = mAccounts.length;  // Points to nullSelectionString by default
         int i = 0;
         for ( ; i < mAccounts.length; i++) {
-            CharSequence label = telecomManager.getPhoneAccount(mAccounts[i]).getLabel();
+            PhoneAccount account = telecomManager.getPhoneAccount(mAccounts[i]);
+            CharSequence label = account.getLabel();
             if (label != null) {
                 label = pm.getUserBadgedLabel(label, mAccounts[i].getUserHandle());
             }
-            mEntries[i] = label == null ? null : label.toString();
+            boolean isSimAccount =
+                    account.hasCapabilities(PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION);
+            mEntries[i] = (TextUtils.isEmpty(label) && isSimAccount)
+                    ? mContext.getString(R.string.phone_accounts_default_account_label)
+                    : String.valueOf(label);
             mEntryValues[i] = Integer.toString(i);
             if (Objects.equals(currentSelection, mAccounts[i])) {
                 selectedIndex = i;
diff --git a/src/com/android/phone/settings/PhoneAccountSettingsFragment.java b/src/com/android/phone/settings/PhoneAccountSettingsFragment.java
index c08b32a..77de3f5 100644
--- a/src/com/android/phone/settings/PhoneAccountSettingsFragment.java
+++ b/src/com/android/phone/settings/PhoneAccountSettingsFragment.java
@@ -7,6 +7,7 @@
 import android.graphics.drawable.Icon;
 import android.net.sip.SipManager;
 import android.os.Bundle;
+import android.os.UserManager;
 import android.preference.CheckBoxPreference;
 import android.preference.ListPreference;
 import android.preference.Preference;
@@ -26,7 +27,7 @@
 import com.android.phone.R;
 import com.android.phone.SubscriptionInfoHelper;
 import com.android.services.telephony.sip.SipAccountRegistry;
-import com.android.services.telephony.sip.SipSharedPreferences;
+import com.android.services.telephony.sip.SipPreferences;
 import com.android.services.telephony.sip.SipUtil;
 
 import java.util.ArrayList;
@@ -73,7 +74,7 @@
 
     private ListPreference mUseSipCalling;
     private CheckBoxPreference mSipReceiveCallsPreference;
-    private SipSharedPreferences mSipSharedPreferences;
+    private SipPreferences mSipPreferences;
 
     @Override
     public void onCreate(Bundle icicle) {
@@ -150,8 +151,8 @@
             getPreferenceScreen().removePreference(mAccountList);
         }
 
-        if (SipUtil.isVoipSupported(getActivity())) {
-            mSipSharedPreferences = new SipSharedPreferences(getActivity());
+        if (isPrimaryUser() && SipUtil.isVoipSupported(getActivity())) {
+            mSipPreferences = new SipPreferences(getActivity());
 
             mUseSipCalling = (ListPreference)
                     getPreferenceScreen().findPreference(USE_SIP_PREF_KEY);
@@ -161,13 +162,13 @@
             mUseSipCalling.setOnPreferenceChangeListener(this);
 
             int optionsValueIndex =
-                    mUseSipCalling.findIndexOfValue(mSipSharedPreferences.getSipCallOption());
+                    mUseSipCalling.findIndexOfValue(mSipPreferences.getSipCallOption());
             if (optionsValueIndex == -1) {
                 // If the option is invalid (eg. deprecated value), default to SIP_ADDRESS_ONLY.
-                mSipSharedPreferences.setSipCallOption(
+                mSipPreferences.setSipCallOption(
                         getResources().getString(R.string.sip_address_only));
                 optionsValueIndex =
-                        mUseSipCalling.findIndexOfValue(mSipSharedPreferences.getSipCallOption());
+                        mUseSipCalling.findIndexOfValue(mSipPreferences.getSipCallOption());
             }
             mUseSipCalling.setValueIndex(optionsValueIndex);
             mUseSipCalling.setSummary(mUseSipCalling.getEntry());
@@ -176,7 +177,7 @@
                     getPreferenceScreen().findPreference(SIP_RECEIVE_CALLS_PREF_KEY);
             mSipReceiveCallsPreference.setEnabled(SipUtil.isPhoneIdle(getActivity()));
             mSipReceiveCallsPreference.setChecked(
-                    mSipSharedPreferences.isReceivingCallsEnabled());
+                    mSipPreferences.isReceivingCallsEnabled());
             mSipReceiveCallsPreference.setOnPreferenceChangeListener(this);
         } else {
             getPreferenceScreen().removePreference(
@@ -195,7 +196,7 @@
     public boolean onPreferenceChange(Preference pref, Object objValue) {
         if (pref == mUseSipCalling) {
             String option = objValue.toString();
-            mSipSharedPreferences.setSipCallOption(option);
+            mSipPreferences.setSipCallOption(option);
             mUseSipCalling.setValueIndex(mUseSipCalling.findIndexOfValue(option));
             mUseSipCalling.setSummary(mUseSipCalling.getEntry());
             return true;
@@ -249,7 +250,7 @@
             return;
         }
 
-        mSipSharedPreferences.setReceivingCallsEnabled(isEnabled);
+        mSipPreferences.setReceivingCallsEnabled(isEnabled);
 
         SipUtil.useSipToReceiveIncomingCalls(context, isEnabled);
 
@@ -305,6 +306,14 @@
                     retval = isSim1 ? -1 : 1;
                 }
 
+                int subId1 = mTelephonyManager.getSubIdForPhoneAccount(account1);
+                int subId2 = mTelephonyManager.getSubIdForPhoneAccount(account2);
+                if (subId1 != SubscriptionManager.INVALID_SUBSCRIPTION_ID &&
+                        subId2 != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+                    retval = (mSubscriptionManager.getSlotId(subId1) <
+                        mSubscriptionManager.getSlotId(subId2)) ? -1 : 1;
+                }
+
                 // Then order by package
                 if (retval == 0) {
                     String pkg1 = account1.getAccountHandle().getComponentName().getPackageName();
@@ -356,7 +365,11 @@
 
             // Create the preference & add the label
             Preference accountPreference = new Preference(getActivity());
-            accountPreference.setTitle(account.getLabel());
+            CharSequence accountLabel = account.getLabel();
+            boolean isSimAccount =
+                    account.hasCapabilities(PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION);
+            accountPreference.setTitle((TextUtils.isEmpty(accountLabel) && isSimAccount)
+                    ? getString(R.string.phone_accounts_default_account_label) : accountLabel);
 
             // Add an icon.
             Icon icon = account.getIcon();
@@ -450,4 +463,13 @@
 
         return intent;
     }
+
+    /**
+     * @return Whether the current user is the primary user.
+     */
+    private boolean isPrimaryUser() {
+        final UserManager userManager = (UserManager) getActivity()
+                .getSystemService(Context.USER_SERVICE);
+        return userManager.isPrimaryUser();
+    }
 }
diff --git a/src/com/android/phone/settings/TtyModeListPreference.java b/src/com/android/phone/settings/TtyModeListPreference.java
index e8ef099..89cac47 100644
--- a/src/com/android/phone/settings/TtyModeListPreference.java
+++ b/src/com/android/phone/settings/TtyModeListPreference.java
@@ -51,8 +51,7 @@
     @Override
     public boolean onPreferenceChange(Preference preference, Object objValue) {
         if (preference == this) {
-            int buttonTtyMode;
-            buttonTtyMode = Integer.valueOf((String) objValue).intValue();
+            int buttonTtyMode = Integer.parseInt((String) objValue);
             int settingsTtyMode = android.provider.Settings.Secure.getInt(
                     getContext().getContentResolver(),
                     Settings.Secure.PREFERRED_TTY_MODE,
diff --git a/src/com/android/phone/settings/VisualVoicemailSettingsUtil.java b/src/com/android/phone/settings/VisualVoicemailSettingsUtil.java
index 888a5f9..62abffd 100644
--- a/src/com/android/phone/settings/VisualVoicemailSettingsUtil.java
+++ b/src/com/android/phone/settings/VisualVoicemailSettingsUtil.java
@@ -164,7 +164,7 @@
                 NO_PRIOR_FULL_SYNC);
     }
 
-    private static String getVisualVoicemailSharedPrefsKey(String key,
+    public static String getVisualVoicemailSharedPrefsKey(String key,
             PhoneAccountHandle phoneAccount) {
         return VISUAL_VOICEMAIL_SHARED_PREFS_KEY_PREFIX + key + "_" + phoneAccount.getId();
     }
diff --git a/src/com/android/phone/settings/fdn/FdnSetting.java b/src/com/android/phone/settings/fdn/FdnSetting.java
index ac43cce..c76f91d 100644
--- a/src/com/android/phone/settings/fdn/FdnSetting.java
+++ b/src/com/android/phone/settings/fdn/FdnSetting.java
@@ -468,6 +468,20 @@
         }
     }
 
+    /**
+    * Reflect the updated change PIN2 state in the UI.
+    */
+    private void updateChangePIN2() {
+        if (mPhone.getIccCard().getIccPin2Blocked()) {
+            // If the pin2 is blocked, the state of the change pin2 dialog
+            // should be set for puk2 use (that is, the user should be prompted
+            // to enter puk2 code instead of old pin2).
+            resetPinChangeStateForPUK2();
+        } else {
+            resetPinChangeState();
+        }
+    }
+
     @Override
     protected void onCreate(Bundle icicle) {
         super.onCreate(icicle);
@@ -518,6 +532,7 @@
         super.onResume();
         mPhone = mSubscriptionInfoHelper.getPhone();
         updateEnableFDN();
+        updateChangePIN2();
     }
 
     /**
diff --git a/src/com/android/phone/vvm/omtp/OmtpBootCompletedReceiver.java b/src/com/android/phone/vvm/omtp/OmtpBootCompletedReceiver.java
new file mode 100644
index 0000000..a2b85f7
--- /dev/null
+++ b/src/com/android/phone/vvm/omtp/OmtpBootCompletedReceiver.java
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.phone.vvm.omtp;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+import android.util.ArraySet;
+import android.util.Log;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import java.util.Set;
+
+/**
+ * Stores subscription ID of SIMs while the device is locked to process them after the device is
+ * unlocked. This class is only intended to be used within {@link SimChangeReceiver}. subId is used
+ * for Visual voicemail activation/deactivation, which need to be done when the device is unlocked.
+ * But the enumeration of subIds happen on boot, when the device could be locked. This class is used
+ * to defer all activation/deactivation until the device is unlocked.
+ *
+ * The subIds are stored in device encrypted {@link SharedPreferences} (readable/writable even
+ * locked). after the device is unlocked the list is read and deleted.
+ */
+public class OmtpBootCompletedReceiver extends BroadcastReceiver {
+
+    private static final String TAG = "OmtpBootCompletedRcvr";
+
+    private static final String DEFERRED_SUBID_LIST_KEY = "deferred_sub_id_key";
+
+    @VisibleForTesting
+    interface SubIdProcessor{
+        void process(Context context,int subId);
+    }
+
+    private SubIdProcessor mSubIdProcessor = new SubIdProcessor() {
+        @Override
+        public void process(Context context, int subId) {
+            SimChangeReceiver.processSubId(context,subId);
+        }
+    };
+
+    /**
+     * Write the subId to the the list.
+     */
+    public static void addDeferredSubId(Context context, int subId) {
+        SharedPreferences sharedPreferences = getSubIdSharedPreference(context);
+        Set<String> subIds =
+                new ArraySet<>(sharedPreferences.getStringSet(DEFERRED_SUBID_LIST_KEY, null));
+        subIds.add(String.valueOf(subId));
+        sharedPreferences.edit().putStringSet(DEFERRED_SUBID_LIST_KEY, subIds).apply();
+    }
+
+    @Override
+    public void onReceive(Context context, Intent intent) {
+        // Listens to android.intent.action.BOOT_COMPLETED
+        if(!intent.getAction().equals(Intent.ACTION_BOOT_COMPLETED)) {
+            return;
+        }
+
+        Log.v(TAG, "processing deferred subId list");
+        Set<Integer> subIds = readAndDeleteSubIds(context);
+        for (Integer subId : subIds) {
+            Log.v(TAG, "processing subId " + subId);
+            mSubIdProcessor.process(context, subId);
+        }
+    }
+
+    /**
+     * Read all subId from the list to a unique integer set, and delete the preference.
+     */
+    private static Set<Integer> readAndDeleteSubIds(Context context) {
+        SharedPreferences sharedPreferences = getSubIdSharedPreference(context);
+        Set<String> subIdStrings = sharedPreferences.getStringSet(DEFERRED_SUBID_LIST_KEY, null);
+        Set<Integer> subIds = new ArraySet<>();
+        if(subIdStrings == null) {
+            return subIds;
+        }
+        for(String string : subIdStrings){
+            subIds.add(Integer.valueOf(string));
+        }
+        getSubIdSharedPreference(context).edit().remove(DEFERRED_SUBID_LIST_KEY).apply();
+        return subIds;
+    }
+
+    @VisibleForTesting
+    void setSubIdProcessorForTest(SubIdProcessor processor){
+        mSubIdProcessor = processor;
+    }
+
+    private static SharedPreferences getSubIdSharedPreference(Context context) {
+        return PreferenceManager
+                .getDefaultSharedPreferences(context.createDeviceProtectedStorageContext());
+    }
+}
diff --git a/src/com/android/phone/vvm/omtp/OmtpVvmCarrierConfigHelper.java b/src/com/android/phone/vvm/omtp/OmtpVvmCarrierConfigHelper.java
index 9f39db1..9534a10 100644
--- a/src/com/android/phone/vvm/omtp/OmtpVvmCarrierConfigHelper.java
+++ b/src/com/android/phone/vvm/omtp/OmtpVvmCarrierConfigHelper.java
@@ -34,7 +34,8 @@
  * retrieve carrier vvm configuration details before sending the appropriate texts.
  */
 public class OmtpVvmCarrierConfigHelper {
-    private static final String TAG = "OmtpVvmCarrierConfigHelper";
+
+    private static final String TAG = "OmtpVvmCarrierCfgHlpr";
     private Context mContext;
     private int mSubId;
     private PersistableBundle mCarrierConfig;
@@ -88,6 +89,22 @@
         }
     }
 
+    public boolean isCellularDataRequired() {
+        if (mCarrierConfig == null) {
+            return false;
+        }
+        return mCarrierConfig
+                .getBoolean(CarrierConfigManager.KEY_VVM_CELLULAR_DATA_REQUIRED_BOOL);
+    }
+
+    public boolean isPrefetchEnabled() {
+        if (mCarrierConfig == null) {
+            return false;
+        }
+        return mCarrierConfig
+                .getBoolean(CarrierConfigManager.KEY_VVM_PREFETCH_BOOL);
+    }
+
     public void startActivation() {
         OmtpMessageSender messageSender = getMessageSender();
         if (messageSender != null) {
diff --git a/src/com/android/phone/vvm/omtp/SimChangeReceiver.java b/src/com/android/phone/vvm/omtp/SimChangeReceiver.java
index a3255e3..0a37493 100644
--- a/src/com/android/phone/vvm/omtp/SimChangeReceiver.java
+++ b/src/com/android/phone/vvm/omtp/SimChangeReceiver.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import android.content.Intent;
 import android.os.UserHandle;
+import android.os.UserManager;
 import android.telecom.PhoneAccountHandle;
 import android.telephony.CarrierConfigManager;
 import android.telephony.SubscriptionManager;
@@ -33,20 +34,21 @@
 import com.android.phone.vvm.omtp.sync.OmtpVvmSourceManager;
 
 /**
- * This class listens to the {@link CarrierConfigManager#ACTION_CARRIER_CONFIG_CHANGED} and
- * {@link TelephonyIntents#ACTION_SIM_STATE_CHANGED} to determine when a SIM is added, replaced,
- * or removed.
+ * This class listens to the {@link CarrierConfigManager#ACTION_CARRIER_CONFIG_CHANGED} and {@link
+ * TelephonyIntents#ACTION_SIM_STATE_CHANGED} to determine when a SIM is added, replaced, or
+ * removed.
  *
  * When a SIM is added, send an activate SMS. When a SIM is removed, remove the sync accounts and
  * change the status in the voicemail_status table.
  */
 public class SimChangeReceiver extends BroadcastReceiver {
-    private final String TAG = "SimChangeReceiver";
+
+    private static final String TAG = "SimChangeReceiver";
 
     @Override
     public void onReceive(Context context, Intent intent) {
-        if (UserHandle.myUserId() != UserHandle.USER_OWNER) {
-            Log.v(TAG, "Received broadcast for user that is not owner.");
+        if (UserHandle.myUserId() != UserHandle.USER_SYSTEM) {
+            Log.v(TAG, "Received broadcast for user that is not system.");
             return;
         }
 
@@ -67,47 +69,60 @@
             case CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED:
                 int subId = intent.getIntExtra(PhoneConstants.SUBSCRIPTION_KEY,
                         SubscriptionManager.INVALID_SUBSCRIPTION_ID);
-                OmtpVvmCarrierConfigHelper carrierConfigHelper =
-                        new OmtpVvmCarrierConfigHelper(context, subId);
 
-                if (carrierConfigHelper.isOmtpVvmType()) {
-                    PhoneAccountHandle phoneAccount = PhoneUtils.makePstnPhoneAccountHandle(
-                            SubscriptionManager.getPhoneId(subId));
+                if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+                    Log.i(TAG, "Received SIM change for invalid subscription id.");
+                    return;
+                }
 
-                    boolean isUserSet = VisualVoicemailSettingsUtil.isVisualVoicemailUserSet(
-                            context, phoneAccount);
-                    boolean isEnabledInSettings =
-                            VisualVoicemailSettingsUtil.isVisualVoicemailEnabled(context,
-                            phoneAccount);
-                    boolean isSupported =
-                            context.getResources().getBoolean(R.bool.allow_visual_voicemail);
-                    boolean isEnabled = isSupported && (isUserSet ? isEnabledInSettings :
-                        carrierConfigHelper.isEnabledByDefault());
-
-                    if (!isUserSet) {
-                        // Preserve the previous setting for "isVisualVoicemailEnabled" if it is
-                        // set by the user, otherwise, set this value for the first time.
-                        VisualVoicemailSettingsUtil.setVisualVoicemailEnabled(context, phoneAccount,
-                                isEnabled, /** isUserSet */ false);
-                    }
-
-                    if (isEnabled) {
-                        LocalLogHelper.log(TAG, "Sim state or carrier config changed: requesting"
-                                + " activation for " + phoneAccount.getId());
-
-                        // Add a phone state listener so that changes to the communication channels
-                        // can be recorded.
-                        OmtpVvmSourceManager.getInstance(context).addPhoneStateListener(
-                                phoneAccount);
-                        carrierConfigHelper.startActivation();
-                    } else {
-                        // It may be that the source was not registered to begin with but we want
-                        // to run through the steps to remove the source just in case.
-                        OmtpVvmSourceManager.getInstance(context).removeSource(phoneAccount);
-                        Log.v(TAG, "Sim change for disabled account.");
-                    }
+                if (!UserManager.get(context).isUserUnlocked()) {
+                    OmtpBootCompletedReceiver.addDeferredSubId(context, subId);
+                } else {
+                    processSubId(context, subId);
                 }
                 break;
         }
     }
+
+    public static void processSubId(Context context, int subId) {
+        OmtpVvmCarrierConfigHelper carrierConfigHelper =
+                new OmtpVvmCarrierConfigHelper(context, subId);
+        if (carrierConfigHelper.isOmtpVvmType()) {
+            PhoneAccountHandle phoneAccount = PhoneUtils.makePstnPhoneAccountHandle(
+                    SubscriptionManager.getPhoneId(subId));
+
+            boolean isUserSet = VisualVoicemailSettingsUtil.isVisualVoicemailUserSet(
+                    context, phoneAccount);
+            boolean isEnabledInSettings =
+                    VisualVoicemailSettingsUtil.isVisualVoicemailEnabled(context,
+                            phoneAccount);
+            boolean isSupported =
+                    context.getResources().getBoolean(R.bool.allow_visual_voicemail);
+            boolean isEnabled = isSupported && (isUserSet ? isEnabledInSettings :
+                    carrierConfigHelper.isEnabledByDefault());
+
+            if (!isUserSet) {
+                // Preserve the previous setting for "isVisualVoicemailEnabled" if it is
+                // set by the user, otherwise, set this value for the first time.
+                VisualVoicemailSettingsUtil.setVisualVoicemailEnabled(context, phoneAccount,
+                        isEnabled, /** isUserSet */false);
+            }
+
+            if (isEnabled) {
+                LocalLogHelper.log(TAG, "Sim state or carrier config changed: requesting"
+                        + " activation for " + phoneAccount.getId());
+
+                // Add a phone state listener so that changes to the communication channels
+                // can be recorded.
+                OmtpVvmSourceManager.getInstance(context).addPhoneStateListener(
+                        phoneAccount);
+                carrierConfigHelper.startActivation();
+            } else {
+                // It may be that the source was not registered to begin with but we want
+                // to run through the steps to remove the source just in case.
+                OmtpVvmSourceManager.getInstance(context).removeSource(phoneAccount);
+                Log.v(TAG, "Sim change for disabled account.");
+            }
+        }
+    }
 }
\ No newline at end of file
diff --git a/src/com/android/phone/vvm/omtp/fetch/FetchVoicemailReceiver.java b/src/com/android/phone/vvm/omtp/fetch/FetchVoicemailReceiver.java
index 0f9a41f..da60ad1 100644
--- a/src/com/android/phone/vvm/omtp/fetch/FetchVoicemailReceiver.java
+++ b/src/com/android/phone/vvm/omtp/fetch/FetchVoicemailReceiver.java
@@ -22,7 +22,6 @@
 import android.database.Cursor;
 import android.net.ConnectivityManager;
 import android.net.Network;
-import android.net.NetworkCapabilities;
 import android.net.NetworkRequest;
 import android.net.Uri;
 import android.provider.VoicemailContract;
@@ -36,16 +35,18 @@
 import com.android.phone.vvm.omtp.OmtpVvmCarrierConfigHelper;
 import com.android.phone.vvm.omtp.imap.ImapHelper;
 import com.android.phone.vvm.omtp.sync.OmtpVvmSourceManager;
+import com.android.phone.vvm.omtp.sync.VvmNetworkRequestCallback;
 
 import java.util.concurrent.Executor;
 import java.util.concurrent.Executors;
 
 public class FetchVoicemailReceiver extends BroadcastReceiver {
+
     private static final String TAG = "FetchVoicemailReceiver";
 
     final static String[] PROJECTION = new String[] {
-        Voicemails.SOURCE_DATA,      // 0
-        Voicemails.PHONE_ACCOUNT_ID, // 1
+            Voicemails.SOURCE_DATA,      // 0
+            Voicemails.PHONE_ACCOUNT_ID, // 1
     };
 
     public static final int SOURCE_DATA = 0;
@@ -60,7 +61,7 @@
     private ContentResolver mContentResolver;
     private Uri mUri;
     private NetworkRequest mNetworkRequest;
-    private OmtpVvmNetworkRequestCallback mNetworkCallback;
+    private VvmNetworkRequestCallback mNetworkCallback;
     private Context mContext;
     private String mUid;
     private ConnectivityManager mConnectivityManager;
@@ -115,18 +116,9 @@
                     OmtpVvmCarrierConfigHelper carrierConfigHelper =
                             new OmtpVvmCarrierConfigHelper(context, subId);
 
-                    if (TelephonyManager.VVM_TYPE_CVVM.equals(carrierConfigHelper.getVvmType())) {
-                        fetchVoicemail(null);
-                    } else {
-                        mNetworkRequest = new NetworkRequest.Builder()
-                                .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
-                                .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
-                                .setNetworkSpecifier(Integer.toString(subId))
-                                .build();
-
-                        mNetworkCallback = new OmtpVvmNetworkRequestCallback();
-                        requestNetwork();
-                    }
+                    mNetworkCallback = new fetchVoicemailNetworkRequestCallback(context,
+                            mPhoneAccount);
+                    mNetworkCallback.requestNetwork();
                 }
             } finally {
                 cursor.close();
@@ -134,21 +126,18 @@
         }
     }
 
-    private class OmtpVvmNetworkRequestCallback extends ConnectivityManager.NetworkCallback {
+    private class fetchVoicemailNetworkRequestCallback extends VvmNetworkRequestCallback {
+
+        public fetchVoicemailNetworkRequestCallback(Context context,
+                PhoneAccountHandle phoneAccount) {
+            super(context, phoneAccount);
+        }
+
         @Override
         public void onAvailable(final Network network) {
+            super.onAvailable(network);
             fetchVoicemail(network);
         }
-
-        @Override
-        public void onLost(Network network) {
-            releaseNetwork();
-        }
-
-        @Override
-        public void onUnavailable() {
-            releaseNetwork();
-        }
     }
 
     private void fetchVoicemail(final Network network) {
@@ -156,44 +145,28 @@
         executor.execute(new Runnable() {
             @Override
             public void run() {
-                while (mRetryCount > 0) {
-                    ImapHelper imapHelper = new ImapHelper(mContext, mPhoneAccount, network);
-                    if (!imapHelper.isSuccessfullyInitialized()) {
-                        Log.w(TAG, "Can't retrieve Imap credentials.");
-                        // releaseNetwork() will check if the network callback exists
-                        releaseNetwork();
-                        return;
-                    }
+                try {
+                    while (mRetryCount > 0) {
+                        ImapHelper imapHelper = new ImapHelper(mContext, mPhoneAccount, network);
+                        if (!imapHelper.isSuccessfullyInitialized()) {
+                            Log.w(TAG, "Can't retrieve Imap credentials.");
+                            return;
+                        }
 
-                    boolean success = imapHelper.fetchVoicemailPayload(
-                            new VoicemailFetchedCallback(mContext, mUri), mUid);
-                    if (!success && mRetryCount > 0) {
-                        mRetryCount--;
-                    } else {
-                        releaseNetwork();
-                        return;
+                        boolean success = imapHelper.fetchVoicemailPayload(
+                                new VoicemailFetchedCallback(mContext, mUri), mUid);
+                        if (!success && mRetryCount > 0) {
+                            mRetryCount--;
+                        } else {
+                            return;
+                        }
+                    }
+                } finally {
+                    if (mNetworkCallback != null) {
+                        mNetworkCallback.releaseNetwork();
                     }
                 }
             }
         });
     }
-
-    private void requestNetwork() {
-        getConnectivityManager().requestNetwork(
-                mNetworkRequest, mNetworkCallback, NETWORK_REQUEST_TIMEOUT_MILLIS);
-    }
-
-    private void releaseNetwork() {
-        if (mNetworkCallback != null) {
-            getConnectivityManager().unregisterNetworkCallback(mNetworkCallback);
-        }
-    }
-
-    private ConnectivityManager getConnectivityManager() {
-        if (mConnectivityManager == null) {
-            mConnectivityManager = (ConnectivityManager) mContext.getSystemService(
-                    Context.CONNECTIVITY_SERVICE);
-        }
-        return mConnectivityManager;
-    }
 }
diff --git a/src/com/android/phone/vvm/omtp/fetch/VoicemailFetchedCallback.java b/src/com/android/phone/vvm/omtp/fetch/VoicemailFetchedCallback.java
index eb6a175..3862d54 100644
--- a/src/com/android/phone/vvm/omtp/fetch/VoicemailFetchedCallback.java
+++ b/src/com/android/phone/vvm/omtp/fetch/VoicemailFetchedCallback.java
@@ -39,7 +39,7 @@
     private ContentResolver mContentResolver;
     private Uri mUri;
 
-    VoicemailFetchedCallback(Context context, Uri uri) {
+    public VoicemailFetchedCallback(Context context, Uri uri) {
         mContentResolver = context.getContentResolver();
         mUri = uri;
     }
diff --git a/src/com/android/phone/vvm/omtp/imap/ImapHelper.java b/src/com/android/phone/vvm/omtp/imap/ImapHelper.java
index 1c2ae32..2c10377 100644
--- a/src/com/android/phone/vvm/omtp/imap/ImapHelper.java
+++ b/src/com/android/phone/vvm/omtp/imap/ImapHelper.java
@@ -16,13 +16,21 @@
 package com.android.phone.vvm.omtp.imap;
 
 import android.content.Context;
+import android.content.SharedPreferences;
+import android.net.ConnectivityManager;
 import android.net.Network;
+import android.net.NetworkInfo;
+import android.preference.PreferenceManager;
+import android.provider.VoicemailContract;
+import android.provider.VoicemailContract.Status;
 import android.telecom.PhoneAccountHandle;
 import android.telecom.Voicemail;
 import android.telephony.TelephonyManager;
 import android.util.Base64;
+import android.util.Log;
 
 import com.android.phone.PhoneUtils;
+import com.android.phone.VoicemailUtils;
 import com.android.phone.common.mail.Address;
 import com.android.phone.common.mail.Body;
 import com.android.phone.common.mail.BodyPart;
@@ -41,6 +49,7 @@
 import com.android.phone.vvm.omtp.OmtpConstants;
 import com.android.phone.vvm.omtp.OmtpVvmCarrierConfigHelper;
 import com.android.phone.vvm.omtp.fetch.VoicemailFetchedCallback;
+import com.android.phone.vvm.omtp.sync.OmtpVvmSyncService.TranscriptionFetchedCallback;
 
 import libcore.io.IoUtils;
 
@@ -59,13 +68,23 @@
 
     private ImapFolder mFolder;
     private ImapStore mImapStore;
-    private Context mContext;
-    private PhoneAccountHandle mPhoneAccount;
+
+    private final Context mContext;
+    private final PhoneAccountHandle mPhoneAccount;
+    private final Network mNetwork;
+
+    SharedPreferences mPrefs;
+    private static final String PREF_KEY_QUOTA_OCCUPIED = "quota_occupied_";
+    private static final String PREF_KEY_QUOTA_TOTAL = "quota_total_";
+
+    private int mQuotaOccupied;
+    private int mQuotaTotal;
 
     public ImapHelper(Context context, PhoneAccountHandle phoneAccount, Network network) {
+        mContext = context;
+        mPhoneAccount = phoneAccount;
+        mNetwork = network;
         try {
-            mContext = context;
-            mPhoneAccount = phoneAccount;
             TempDirectory.setTempDirectory(context);
 
             String username = VisualVoicemailSettingsUtil.getVisualVoicemailCredentials(context,
@@ -88,10 +107,20 @@
             }
 
             mImapStore = new ImapStore(
-                    context, username, password, port, serverName, auth, network);
+                    context, this, username, password, port, serverName, auth, network);
         } catch (NumberFormatException e) {
+            VoicemailUtils.setDataChannelState(
+                    mContext, mPhoneAccount, Status.DATA_CHANNEL_STATE_BAD_CONFIGURATION);
             LogUtils.w(TAG, "Could not parse port number");
         }
+
+        mPrefs = PreferenceManager.getDefaultSharedPreferences(context);
+        mQuotaOccupied = mPrefs.getInt(getSharedPrefsKey(PREF_KEY_QUOTA_OCCUPIED),
+                VoicemailContract.Status.QUOTA_UNAVAILABLE);
+        mQuotaTotal = mPrefs.getInt(getSharedPrefsKey(PREF_KEY_QUOTA_TOTAL),
+                VoicemailContract.Status.QUOTA_UNAVAILABLE);
+
+        Log.v(TAG, "Quota:" + mQuotaOccupied + "/" + mQuotaTotal);
     }
 
     /**
@@ -103,6 +132,16 @@
         return mImapStore != null;
     }
 
+    public boolean isRoaming(){
+        ConnectivityManager connectivityManager = (ConnectivityManager) mContext.getSystemService(
+                Context.CONNECTIVITY_SERVICE);
+        NetworkInfo info = connectivityManager.getNetworkInfo(mNetwork);
+        if(info == null){
+            return false;
+        }
+        return info.isRoaming();
+    }
+
     /** The caller thread will block until the method returns. */
     public boolean markMessagesAsRead(List<Voicemail> voicemails) {
         return setFlags(voicemails, Flag.SEEN);
@@ -113,6 +152,10 @@
         return setFlags(voicemails, Flag.DELETED);
     }
 
+    public void setDataChannelState(int dataChannelState) {
+        VoicemailUtils.setDataChannelState(mContext, mPhoneAccount, dataChannelState);
+    }
+
     /**
      * Set flags on the server for a given set of voicemails.
      *
@@ -158,10 +201,10 @@
             messages = mFolder.getMessages(null);
 
             for (Message message : messages) {
-                // Get the voicemail details.
-                Voicemail voicemail = fetchVoicemail(message);
-                if (voicemail != null) {
-                    result.add(voicemail);
+                // Get the voicemail details (message structure).
+                MessageStructureWrapper messageStructureWrapper = fetchMessageStructure(message);
+                if (messageStructureWrapper != null) {
+                    result.add(getVoicemailFromMessageStructure(messageStructureWrapper));
                 }
             }
             return result;
@@ -174,11 +217,64 @@
     }
 
     /**
-     * Fetches the structure of the given message and returns the voicemail parsed from it.
+     * Extract voicemail details from the message structure. Also fetch transcription if a
+     * transcription exists.
+     */
+    private Voicemail getVoicemailFromMessageStructure(
+            MessageStructureWrapper messageStructureWrapper) throws MessagingException{
+        Message messageDetails = messageStructureWrapper.messageStructure;
+
+        TranscriptionFetchedListener listener = new TranscriptionFetchedListener();
+        if (messageStructureWrapper.transcriptionBodyPart != null) {
+            FetchProfile fetchProfile = new FetchProfile();
+            fetchProfile.add(messageStructureWrapper.transcriptionBodyPart);
+
+            mFolder.fetch(new Message[] {messageDetails}, fetchProfile, listener);
+        }
+
+        // Found an audio attachment, this is a valid voicemail.
+        long time = messageDetails.getSentDate().getTime();
+        String number = getNumber(messageDetails.getFrom());
+        boolean isRead = Arrays.asList(messageDetails.getFlags()).contains(Flag.SEEN);
+        return Voicemail.createForInsertion(time, number)
+                .setPhoneAccount(mPhoneAccount)
+                .setSourcePackage(mContext.getPackageName())
+                .setSourceData(messageDetails.getUid())
+                .setIsRead(isRead)
+                .setTranscription(listener.getVoicemailTranscription())
+                .build();
+    }
+
+    /**
+     * The "from" field of a visual voicemail IMAP message is the number of the caller who left
+     * the message. Extract this number from the list of "from" addresses.
+     *
+     * @param fromAddresses A list of addresses that comprise the "from" line.
+     * @return The number of the voicemail sender.
+     */
+    private String getNumber(Address[] fromAddresses) {
+        if (fromAddresses != null && fromAddresses.length > 0) {
+            if (fromAddresses.length != 1) {
+                LogUtils.w(TAG, "More than one from addresses found. Using the first one.");
+            }
+            String sender = fromAddresses[0].getAddress();
+            int atPos = sender.indexOf('@');
+            if (atPos != -1) {
+                // Strip domain part of the address.
+                sender = sender.substring(0, atPos);
+            }
+            return sender;
+        }
+        return null;
+    }
+
+    /**
+     * Fetches the structure of the given message and returns a wrapper containing the message
+     * structure and the transcription structure (if applicable).
      *
      * @throws MessagingException if fetching the structure of the message fails
      */
-    private Voicemail fetchVoicemail(Message message)
+    private MessageStructureWrapper fetchMessageStructure(Message message)
             throws MessagingException {
         LogUtils.d(TAG, "Fetching message structure for " + message.getUid());
 
@@ -191,19 +287,20 @@
         // The IMAP folder fetch method will call "messageRetrieved" on the listener when the
         // message is successfully retrieved.
         mFolder.fetch(new Message[] {message}, fetchProfile, listener);
-        return listener.getVoicemail();
+        return listener.getMessageStructure();
     }
 
-
     public boolean fetchVoicemailPayload(VoicemailFetchedCallback callback, final String uid) {
-        Message message;
         try {
             mFolder = openImapFolder(ImapFolder.MODE_READ_WRITE);
             if (mFolder == null) {
                 // This means we were unable to successfully open the folder.
                 return false;
             }
-            message = mFolder.getMessage(uid);
+            Message message = mFolder.getMessage(uid);
+            if (message == null) {
+                return false;
+            }
             VoicemailPayload voicemailPayload = fetchVoicemailPayload(message);
 
             if (voicemailPayload == null) {
@@ -237,18 +334,101 @@
         return listener.getVoicemailPayload();
     }
 
+    public boolean fetchTranscription(TranscriptionFetchedCallback callback, String uid) {
+        try {
+            mFolder = openImapFolder(ImapFolder.MODE_READ_WRITE);
+            if (mFolder == null) {
+                // This means we were unable to successfully open the folder.
+                return false;
+            }
+
+            Message message = mFolder.getMessage(uid);
+            if (message == null) {
+                return false;
+            }
+
+            MessageStructureWrapper messageStructureWrapper = fetchMessageStructure(message);
+            if (messageStructureWrapper != null) {
+                TranscriptionFetchedListener listener = new TranscriptionFetchedListener();
+                if (messageStructureWrapper.transcriptionBodyPart != null) {
+                    FetchProfile fetchProfile = new FetchProfile();
+                    fetchProfile.add(messageStructureWrapper.transcriptionBodyPart);
+
+                    // This method is called synchronously so the transcription will be populated
+                    // in the listener once the next method is called.
+                    mFolder.fetch(new Message[] {message}, fetchProfile, listener);
+                    callback.setVoicemailTranscription(listener.getVoicemailTranscription());
+                }
+            }
+            return true;
+        } catch (MessagingException e) {
+            LogUtils.e(TAG, e, "Messaging Exception");
+            return false;
+        } finally {
+            closeImapFolder();
+        }
+    }
+
+    public void updateQuota() {
+        try {
+            mFolder = openImapFolder(ImapFolder.MODE_READ_WRITE);
+            if (mFolder == null) {
+                // This means we were unable to successfully open the folder.
+                return;
+            }
+            updateQuota(mFolder);
+        } catch (MessagingException e) {
+            LogUtils.e(TAG, e, "Messaging Exception");
+        } finally {
+            closeImapFolder();
+        }
+    }
+
+    private void updateQuota(ImapFolder folder) throws MessagingException {
+        setQuota(folder.getQuota());
+    }
+
+    private void setQuota(ImapFolder.Quota quota) {
+        if (quota == null) {
+            return;
+        }
+        if (quota.occupied == mQuotaOccupied && quota.total == mQuotaTotal) {
+            Log.v(TAG, "Quota hasn't changed");
+            return;
+        }
+        mQuotaOccupied = quota.occupied;
+        mQuotaTotal = quota.total;
+        VoicemailContract.Status
+                .setQuota(mContext, mPhoneAccount, mQuotaOccupied, mQuotaTotal);
+        mPrefs.edit()
+                .putInt(getSharedPrefsKey(PREF_KEY_QUOTA_OCCUPIED), mQuotaOccupied)
+                .putInt(getSharedPrefsKey(PREF_KEY_QUOTA_TOTAL), mQuotaTotal)
+                .apply();
+        Log.v(TAG, "Quota changed to " + mQuotaOccupied + "/" + mQuotaTotal);
+    }
+    /**
+     * A wrapper to hold a message with its header details and the structure for transcriptions
+     * (so they can be fetched in the future).
+     */
+    public class MessageStructureWrapper {
+        public Message messageStructure;
+        public BodyPart transcriptionBodyPart;
+
+        public MessageStructureWrapper() { }
+    }
+
     /**
      * Listener for the message structure being fetched.
      */
     private final class MessageStructureFetchedListener
             implements ImapFolder.MessageRetrievalListener {
-        private Voicemail mVoicemail;
+        private MessageStructureWrapper mMessageStructure;
 
         public MessageStructureFetchedListener() {
         }
 
-        public Voicemail getVoicemail() {
-            return mVoicemail;
+        public MessageStructureWrapper getMessageStructure() {
+            return mMessageStructure;
         }
 
         @Override
@@ -256,8 +436,8 @@
             LogUtils.d(TAG, "Fetched message structure for " + message.getUid());
             LogUtils.d(TAG, "Message retrieved: " + message);
             try {
-                mVoicemail = getVoicemailFromMessage(message);
-                if (mVoicemail == null) {
+                mMessageStructure = getMessageOrNull(message);
+                if (mMessageStructure == null) {
                     LogUtils.d(TAG, "This voicemail does not have an attachment...");
                     return;
                 }
@@ -268,18 +448,22 @@
         }
 
         /**
-         * Convert an IMAP message to a voicemail object.
+         * Check if this IMAP message is a valid voicemail and whether it contains a transcription.
          *
          * @param message The IMAP message.
-         * @return The voicemail object corresponding to an IMAP message.
+         * @return The MessageStructureWrapper object corresponding to an IMAP message and
+         * transcription.
          * @throws MessagingException
          */
-        private Voicemail getVoicemailFromMessage(Message message) throws MessagingException {
+        private MessageStructureWrapper getMessageOrNull(Message message)
+                throws MessagingException {
             if (!message.getMimeType().startsWith("multipart/")) {
                 LogUtils.w(TAG, "Ignored non multi-part message");
                 return null;
             }
 
+            MessageStructureWrapper messageStructureWrapper = new MessageStructureWrapper();
+
             Multipart multipart = (Multipart) message.getBody();
             for (int i = 0; i < multipart.getCount(); ++i) {
                 BodyPart bodyPart = multipart.getBodyPart(i);
@@ -287,45 +471,19 @@
                 LogUtils.d(TAG, "bodyPart mime type: " + bodyPartMimeType);
 
                 if (bodyPartMimeType.startsWith("audio/")) {
-                    // Found an audio attachment, this is a valid voicemail.
-                    long time = message.getSentDate().getTime();
-                    String number = getNumber(message.getFrom());
-                    boolean isRead = Arrays.asList(message.getFlags()).contains(Flag.SEEN);
-
-                    return Voicemail.createForInsertion(time, number)
-                            .setPhoneAccount(mPhoneAccount)
-                            .setSourcePackage(mContext.getPackageName())
-                            .setSourceData(message.getUid())
-                            .setIsRead(isRead)
-                            .build();
+                    messageStructureWrapper.messageStructure = message;
+                } else if (bodyPartMimeType.startsWith("text/")) {
+                    messageStructureWrapper.transcriptionBodyPart = bodyPart;
                 }
             }
+
+            if (messageStructureWrapper.messageStructure != null) {
+                return messageStructureWrapper;
+            }
+
             // No attachment found, this is not a voicemail.
             return null;
         }
-
-        /**
-         * The "from" field of a visual voicemail IMAP message is the number of the caller who left
-         * the message. Extract this number from the list of "from" addresses.
-         *
-         * @param fromAddresses A list of addresses that comprise the "from" line.
-         * @return The number of the voicemail sender.
-         */
-        private String getNumber(Address[] fromAddresses) {
-            if (fromAddresses != null && fromAddresses.length > 0) {
-                if (fromAddresses.length != 1) {
-                    LogUtils.w(TAG, "More than one from addresses found. Using the first one.");
-                }
-                String sender = fromAddresses[0].getAddress();
-                int atPos = sender.indexOf('@');
-                if (atPos != -1) {
-                    // Strip domain part of the address.
-                    sender = sender.substring(0, atPos);
-                }
-                return sender;
-            }
-            return null;
-        }
     }
 
     /**
@@ -361,7 +519,7 @@
                 LogUtils.d(TAG, "bodyPart mime type: " + bodyPartMimeType);
 
                 if (bodyPartMimeType.startsWith("audio/")) {
-                    byte[] bytes = getAudioDataFromBody(bodyPart.getBody());
+                    byte[] bytes = getDataFromBody(bodyPart.getBody());
                     LogUtils.d(TAG, String.format("Fetched %s bytes of data", bytes.length));
                     return new VoicemailPayload(bodyPartMimeType, bytes);
                 }
@@ -369,16 +527,30 @@
             LogUtils.e(TAG, "No audio attachment found on this voicemail");
             return null;
         }
+    }
 
-        private byte[] getAudioDataFromBody(Body body) throws IOException, MessagingException {
-            ByteArrayOutputStream out = new ByteArrayOutputStream();
-            BufferedOutputStream bufferedOut = new BufferedOutputStream(out);
+    /**
+     * Listener for the transcription being fetched.
+     */
+    private final class TranscriptionFetchedListener implements
+            ImapFolder.MessageRetrievalListener {
+        private String mVoicemailTranscription;
+
+        /** Returns the fetched voicemail transcription. */
+        public String getVoicemailTranscription() {
+            return mVoicemailTranscription;
+        }
+
+        @Override
+        public void messageRetrieved(Message message) {
+            LogUtils.d(TAG, "Fetched transcription for " + message.getUid());
             try {
-                body.writeTo(bufferedOut);
-            } finally {
-                IoUtils.closeQuietly(bufferedOut);
+                mVoicemailTranscription = new String(getDataFromBody(message.getBody()));
+            } catch (MessagingException e) {
+                LogUtils.e(TAG, "Messaging Exception:", e);
+            } catch (IOException e) {
+                LogUtils.e(TAG, "IO Exception:", e);
             }
-            return Base64.decode(out.toByteArray(), Base64.DEFAULT);
         }
     }
 
@@ -410,4 +582,20 @@
             mFolder.close(true);
         }
     }
+
+    private byte[] getDataFromBody(Body body) throws IOException, MessagingException {
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        BufferedOutputStream bufferedOut = new BufferedOutputStream(out);
+        try {
+            body.writeTo(bufferedOut);
+            return Base64.decode(out.toByteArray(), Base64.DEFAULT);
+        } finally {
+            IoUtils.closeQuietly(bufferedOut);
+            IoUtils.closeQuietly(out);
+        }
+    }
+
+    private String getSharedPrefsKey(String key) {
+        return VisualVoicemailSettingsUtil.getVisualVoicemailSharedPrefsKey(key, mPhoneAccount);
+    }
 }
\ No newline at end of file
diff --git a/src/com/android/phone/vvm/omtp/sms/OmtpCvvmMessageSender.java b/src/com/android/phone/vvm/omtp/sms/OmtpCvvmMessageSender.java
index ef4e40b..7f45254 100644
--- a/src/com/android/phone/vvm/omtp/sms/OmtpCvvmMessageSender.java
+++ b/src/com/android/phone/vvm/omtp/sms/OmtpCvvmMessageSender.java
@@ -48,7 +48,7 @@
     private void sendCvvmMessage(String request, PendingIntent sentIntent) {
         StringBuilder sb = new StringBuilder().append(request);
         sb.append(OmtpConstants.SMS_PREFIX_SEPARATOR);
-        appendField(sb, "dt", "6");
+        appendField(sb, "dt", "15");
         sendSms(sb.toString(), sentIntent);
     }
 }
diff --git a/src/com/android/phone/vvm/omtp/sms/OmtpMessageReceiver.java b/src/com/android/phone/vvm/omtp/sms/OmtpMessageReceiver.java
index 3eefbee..9ac37a4 100644
--- a/src/com/android/phone/vvm/omtp/sms/OmtpMessageReceiver.java
+++ b/src/com/android/phone/vvm/omtp/sms/OmtpMessageReceiver.java
@@ -16,14 +16,16 @@
 package com.android.phone.vvm.omtp.sms;
 
 import android.content.BroadcastReceiver;
+import android.content.ContentUris;
 import android.content.Context;
 import android.content.Intent;
+import android.net.Uri;
+import android.os.UserManager;
 import android.provider.Telephony;
 import android.provider.VoicemailContract;
 import android.telecom.PhoneAccountHandle;
 import android.telecom.Voicemail;
 import android.telephony.SmsMessage;
-import android.telephony.SubscriptionManager;
 import android.util.Log;
 
 import com.android.internal.telephony.PhoneConstants;
@@ -47,6 +49,12 @@
 
     @Override
     public void onReceive(Context context, Intent intent) {
+        if (!UserManager.get(context).isUserUnlocked()) {
+            Log.i(TAG, "Received message on locked device");
+            // A full sync will happen after the device is unlocked, so nothing need to be done.
+            return;
+        }
+
         mContext = context;
         mPhoneAccount = PhoneUtils.makePstnPhoneAccountHandle(
                 intent.getExtras().getInt(PhoneConstants.PHONE_KEY));
@@ -62,6 +70,12 @@
         }
 
         SmsMessage[] messages = Telephony.Sms.Intents.getMessagesFromIntent(intent);
+
+        if (messages == null) {
+            Log.w(TAG, "Message does not exist in the intent.");
+            return;
+        }
+
         StringBuilder messageBody = new StringBuilder();
 
         for (int i = 0; i < messages.length; i++) {
@@ -76,9 +90,9 @@
                 SyncMessage message = new SyncMessage(messageData);
 
                 Log.v(TAG, "Received SYNC sms for " + mPhoneAccount.getId() +
-                        " with event" + message.getSyncTriggerEvent());
+                        " with event " + message.getSyncTriggerEvent());
                 LocalLogHelper.log(TAG, "Received SYNC sms for " + mPhoneAccount.getId() +
-                        " with event" + message.getSyncTriggerEvent());
+                        " with event " + message.getSyncTriggerEvent());
                 processSync(message);
             } else if (messageData.getPrefix() == OmtpConstants.STATUS_SMS_PREFIX) {
                 Log.v(TAG, "Received STATUS sms for " + mPhoneAccount.getId());
@@ -101,31 +115,42 @@
      * @param message The sync message to extract data from.
      */
     private void processSync(SyncMessage message) {
+        Intent serviceIntent = null;
         switch (message.getSyncTriggerEvent()) {
             case OmtpConstants.NEW_MESSAGE:
-                Voicemail voicemail = Voicemail.createForInsertion(
+                Voicemail.Builder builder = Voicemail.createForInsertion(
                         message.getTimestampMillis(), message.getSender())
                         .setPhoneAccount(mPhoneAccount)
                         .setSourceData(message.getId())
                         .setDuration(message.getLength())
-                        .setSourcePackage(mContext.getPackageName())
-                        .build();
+                        .setSourcePackage(mContext.getPackageName());
+                Voicemail voicemail = builder.build();
+
                 VoicemailsQueryHelper queryHelper = new VoicemailsQueryHelper(mContext);
-                queryHelper.insertIfUnique(voicemail);
+                if (queryHelper.isVoicemailUnique(voicemail)) {
+                    Uri uri = VoicemailContract.Voicemails.insert(mContext, voicemail);
+                    voicemail = builder.setId(ContentUris.parseId(uri)).setUri(uri).build();
+                    serviceIntent = OmtpVvmSyncService.getSyncIntent(mContext,
+                            OmtpVvmSyncService.SYNC_DOWNLOAD_ONE_TRANSCRIPTION, mPhoneAccount,
+                            voicemail, true /* firstAttempt */);
+                }
                 break;
             case OmtpConstants.MAILBOX_UPDATE:
-                Intent serviceIntent = OmtpVvmSyncService.getSyncIntent(
+                serviceIntent = OmtpVvmSyncService.getSyncIntent(
                         mContext, OmtpVvmSyncService.SYNC_DOWNLOAD_ONLY, mPhoneAccount,
                         true /* firstAttempt */);
-                mContext.startService(serviceIntent);
                 break;
             case OmtpConstants.GREETINGS_UPDATE:
                 // Not implemented in V1
                 break;
-           default:
+            default:
                Log.e(TAG, "Unrecognized sync trigger event: " + message.getSyncTriggerEvent());
                break;
         }
+
+        if (serviceIntent != null) {
+            mContext.startService(serviceIntent);
+        }
     }
 
     private void updateSource(StatusMessage message) {
@@ -162,4 +187,4 @@
                     /* isEnabled */ false, /* isUserSet */ true);
         }
     }
-}
\ No newline at end of file
+}
diff --git a/src/com/android/phone/vvm/omtp/sync/OmtpVvmSyncReceiver.java b/src/com/android/phone/vvm/omtp/sync/OmtpVvmSyncReceiver.java
new file mode 100644
index 0000000..0902b6d
--- /dev/null
+++ b/src/com/android/phone/vvm/omtp/sync/OmtpVvmSyncReceiver.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.phone.vvm.omtp.sync;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.provider.VoicemailContract;
+import android.util.Log;
+
+public class OmtpVvmSyncReceiver extends BroadcastReceiver {
+
+    private static final String TAG = "OmtpVvmSyncReceiver";
+
+    @Override
+    public void onReceive(final Context context, Intent intent) {
+        if (VoicemailContract.ACTION_SYNC_VOICEMAIL.equals(intent.getAction())) {
+            Log.v(TAG, "Sync intent received");
+            Intent syncIntent = OmtpVvmSyncService
+                    .getSyncIntent(context, OmtpVvmSyncService.SYNC_FULL_SYNC, null, true);
+            intent.putExtra(OmtpVvmSyncService.EXTRA_IS_MANUAL_SYNC, true);
+            context.startService(syncIntent);
+        }
+    }
+}
diff --git a/src/com/android/phone/vvm/omtp/sync/OmtpVvmSyncService.java b/src/com/android/phone/vvm/omtp/sync/OmtpVvmSyncService.java
index ba3d236..e44904b 100644
--- a/src/com/android/phone/vvm/omtp/sync/OmtpVvmSyncService.java
+++ b/src/com/android/phone/vvm/omtp/sync/OmtpVvmSyncService.java
@@ -20,21 +20,22 @@
 import android.app.PendingIntent;
 import android.content.Context;
 import android.content.Intent;
-import android.net.ConnectivityManager;
 import android.net.Network;
-import android.net.ConnectivityManager.NetworkCallback;
-import android.net.NetworkCapabilities;
-import android.net.NetworkRequest;
+import android.net.NetworkInfo;
+import android.net.Uri;
 import android.provider.VoicemailContract;
+import android.provider.VoicemailContract.Status;
 import android.telecom.PhoneAccountHandle;
 import android.telecom.Voicemail;
-import android.telephony.TelephonyManager;
+import android.text.TextUtils;
 import android.util.Log;
 
 import com.android.phone.PhoneUtils;
+import com.android.phone.VoicemailUtils;
 import com.android.phone.settings.VisualVoicemailSettingsUtil;
 import com.android.phone.vvm.omtp.LocalLogHelper;
 import com.android.phone.vvm.omtp.OmtpVvmCarrierConfigHelper;
+import com.android.phone.vvm.omtp.fetch.VoicemailFetchedCallback;
 import com.android.phone.vvm.omtp.imap.ImapHelper;
 
 import java.util.HashMap;
@@ -46,28 +47,48 @@
  * Sync OMTP visual voicemail.
  */
 public class OmtpVvmSyncService extends IntentService {
+
     private static final String TAG = OmtpVvmSyncService.class.getSimpleName();
 
-    /** Signifies a sync with both uploading to the server and downloading from the server. */
+    // Number of retries
+    private static final int NETWORK_RETRY_COUNT = 3;
+
+    /**
+     * Signifies a sync with both uploading to the server and downloading from the server.
+     */
     public static final String SYNC_FULL_SYNC = "full_sync";
-    /** Only upload to the server. */
+    /**
+     * Only upload to the server.
+     */
     public static final String SYNC_UPLOAD_ONLY = "upload_only";
-    /** Only download from the server. */
+    /**
+     * Only download from the server.
+     */
     public static final String SYNC_DOWNLOAD_ONLY = "download_only";
-    /** The account to sync. */
+    /**
+     * Only download single voicemail transcription.
+     */
+    public static final String SYNC_DOWNLOAD_ONE_TRANSCRIPTION =
+            "download_one_transcription";
+    /**
+     * The account to sync.
+     */
     public static final String EXTRA_PHONE_ACCOUNT = "phone_account";
-
-    // Timeout used to call ConnectivityManager.requestNetwork
-    private static final int NETWORK_REQUEST_TIMEOUT_MILLIS = 60 * 1000;
-
+    /**
+     * The voicemail to fetch.
+     */
+    public static final String EXTRA_VOICEMAIL = "voicemail";
+    /**
+     * The sync request is initiated by the user, should allow shorter sync interval.
+     */
+    public static final String EXTRA_IS_MANUAL_SYNC = "is_manual_sync";
     // Minimum time allowed between full syncs
     private static final int MINIMUM_FULL_SYNC_INTERVAL_MILLIS = 60 * 1000;
 
-    // Number of retries
-    private static final int NETWORK_RETRY_COUNT = 6;
+    // Minimum time allowed between manual syncs
+    private static final int MINIMUM_MANUAL_SYNC_INTERVAL_MILLIS = 3 * 1000;
 
     private VoicemailsQueryHelper mQueryHelper;
-    private ConnectivityManager mConnectivityManager;
 
     public OmtpVvmSyncService() {
         super("OmtpVvmSyncService");
@@ -75,6 +96,11 @@
 
     public static Intent getSyncIntent(Context context, String action,
             PhoneAccountHandle phoneAccount, boolean firstAttempt) {
+        return getSyncIntent(context, action, phoneAccount, null, firstAttempt);
+    }
+
+    public static Intent getSyncIntent(Context context, String action,
+            PhoneAccountHandle phoneAccount, Voicemail voicemail, boolean firstAttempt) {
         if (firstAttempt) {
             if (phoneAccount != null) {
                 VisualVoicemailSettingsUtil.resetVisualVoicemailRetryInterval(context,
@@ -94,6 +120,9 @@
         if (phoneAccount != null) {
             serviceIntent.putExtra(EXTRA_PHONE_ACCOUNT, phoneAccount);
         }
+        if (voicemail != null) {
+            serviceIntent.putExtra(EXTRA_VOICEMAIL, voicemail);
+        }
 
         cancelRetriesForIntent(context, serviceIntent);
         return serviceIntent;
@@ -101,6 +130,7 @@
 
     /**
      * Cancel all retry syncs for an account.
+     *
      * @param context The context the service runs in.
      * @param phoneAccount The phone account for which to cancel syncs.
      */
@@ -112,6 +142,7 @@
     /**
      * A helper method to cancel all pending alarms for intents that would be identical to the given
      * intent.
+     *
      * @param context The context the service runs in.
      * @param intent The intent to search and cancel.
      */
@@ -141,29 +172,29 @@
             Log.d(TAG, "onHandleIntent: could not handle null intent");
             return;
         }
-
         String action = intent.getAction();
-
         PhoneAccountHandle phoneAccount = intent.getParcelableExtra(EXTRA_PHONE_ACCOUNT);
-
         LocalLogHelper.log(TAG, "Sync requested: " + action +
                 " for all accounts: " + String.valueOf(phoneAccount == null));
 
+        boolean isManualSync = intent.getBooleanExtra(EXTRA_IS_MANUAL_SYNC, false);
+        Voicemail voicemail = intent.getParcelableExtra(EXTRA_VOICEMAIL);
         if (phoneAccount != null) {
             Log.v(TAG, "Sync requested: " + action + " - for account: " + phoneAccount);
-            setupAndSendRequest(phoneAccount, action);
+            setupAndSendRequest(phoneAccount, voicemail, action, isManualSync);
         } else {
             Log.v(TAG, "Sync requested: " + action + " - for all accounts");
             OmtpVvmSourceManager vvmSourceManager =
                     OmtpVvmSourceManager.getInstance(this);
             Set<PhoneAccountHandle> sources = vvmSourceManager.getOmtpVvmSources();
             for (PhoneAccountHandle source : sources) {
-                setupAndSendRequest(source, action);
+                setupAndSendRequest(source, null, action, isManualSync);
             }
         }
     }
 
-    private void setupAndSendRequest(PhoneAccountHandle phoneAccount, String action) {
+    private void setupAndSendRequest(PhoneAccountHandle phoneAccount, Voicemail voicemail,
+            String action, boolean isManualSync) {
         if (!VisualVoicemailSettingsUtil.isVisualVoicemailEnabled(this, phoneAccount)) {
             Log.v(TAG, "Sync requested for disabled account");
             return;
@@ -173,163 +204,143 @@
             long lastSyncTime = VisualVoicemailSettingsUtil.getVisualVoicemailLastFullSyncTime(
                     this, phoneAccount);
             long currentTime = System.currentTimeMillis();
-            if (currentTime - lastSyncTime < MINIMUM_FULL_SYNC_INTERVAL_MILLIS) {
+            int minimumInterval = isManualSync ? MINIMUM_MANUAL_SYNC_INTERVAL_MILLIS
+                    : MINIMUM_MANUAL_SYNC_INTERVAL_MILLIS;
+            if (currentTime - lastSyncTime < minimumInterval) {
                 // If it's been less than a minute since the last sync, bail.
                 Log.v(TAG, "Avoiding duplicate full sync: synced recently for "
                         + phoneAccount.getId());
+
+                /**
+                 *  Perform a NOOP change to the database so the sender can observe the sync is
+                 *  completed.
+                 *  TODO: Instead of this hack, refactor the sync to be synchronous so the sender
+                 *  can use sendOrderedBroadcast() to register a callback once all syncs are
+                 *  finished
+                 *  b/26937720
+                 */
+                Status.setStatus(this, phoneAccount,
+                        Status.CONFIGURATION_STATE_IGNORE,
+                        Status.DATA_CHANNEL_STATE_IGNORE,
+                        Status.NOTIFICATION_CHANNEL_STATE_IGNORE);
                 return;
             }
             VisualVoicemailSettingsUtil.setVisualVoicemailLastFullSyncTime(
                     this, phoneAccount, currentTime);
         }
 
-        int subId = PhoneUtils.getSubIdForPhoneAccountHandle(phoneAccount);
-        OmtpVvmCarrierConfigHelper carrierConfigHelper =
-                new OmtpVvmCarrierConfigHelper(this, subId);
-
-        if (TelephonyManager.VVM_TYPE_CVVM.equals(carrierConfigHelper.getVvmType())) {
-            doSync(null, null, phoneAccount, action);
-        } else {
-            OmtpVvmNetworkRequestCallback networkCallback = new OmtpVvmNetworkRequestCallback(
-                    phoneAccount, action);
-            requestNetwork(networkCallback);
-        }
+        VvmNetworkRequestCallback networkCallback = new SyncNetworkRequestCallback(this,
+                phoneAccount, voicemail, action);
+        networkCallback.requestNetwork();
     }
 
-    private class OmtpVvmNetworkRequestCallback extends ConnectivityManager.NetworkCallback {
-        PhoneAccountHandle mPhoneAccount;
-        String mAction;
-        NetworkRequest mNetworkRequest;
-
-        public OmtpVvmNetworkRequestCallback(PhoneAccountHandle phoneAccount,
-                String action) {
-            mPhoneAccount = phoneAccount;
-            mAction = action;
-            mNetworkRequest = new NetworkRequest.Builder()
-                    .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
-                    .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
-                    .setNetworkSpecifier(
-                            Integer.toString(
-                                    PhoneUtils.getSubIdForPhoneAccountHandle(phoneAccount)))
-                    .build();
-        }
-
-        public NetworkRequest getNetworkRequest() {
-            return mNetworkRequest;
-        }
-
-        @Override
-        public void onAvailable(final Network network) {
-            doSync(network, this, mPhoneAccount, mAction);
-        }
-
-        @Override
-        public void onLost(Network network) {
-            releaseNetwork(this);
-        }
-
-        @Override
-        public void onUnavailable() {
-            releaseNetwork(this);
-        }
-    }
-
-    private void doSync(Network network, OmtpVvmNetworkRequestCallback callback,
-            PhoneAccountHandle phoneAccount, String action) {
+    private void doSync(Network network, VvmNetworkRequestCallback callback,
+            PhoneAccountHandle phoneAccount, Voicemail voicemail, String action) {
         int retryCount = NETWORK_RETRY_COUNT;
-
-        boolean uploadSuccess;
-        boolean downloadSuccess;
-
-        while (retryCount > 0) {
-            uploadSuccess = true;
-            downloadSuccess = true;
-
-            ImapHelper imapHelper = new ImapHelper(this, phoneAccount, network);
-            if (!imapHelper.isSuccessfullyInitialized()) {
-                Log.w(TAG, "Can't retrieve Imap credentials.");
-                releaseNetwork(callback);
-                VisualVoicemailSettingsUtil.resetVisualVoicemailRetryInterval(this,
-                        phoneAccount);
-                return;
-            }
-
-            if (SYNC_FULL_SYNC.equals(action) || SYNC_UPLOAD_ONLY.equals(action)) {
-                uploadSuccess = upload(imapHelper);
-            }
-            if (SYNC_FULL_SYNC.equals(action) || SYNC_DOWNLOAD_ONLY.equals(action)) {
-                downloadSuccess = download(imapHelper);
-            }
-
-            Log.v(TAG, "upload succeeded: ["+  String.valueOf(uploadSuccess)
-                    + "] download succeeded: [" + String.valueOf(downloadSuccess) + "]");
-
-            // Need to check again for whether visual voicemail is enabled because it could have
-            // been disabled while waiting for the response from the network.
-            if (VisualVoicemailSettingsUtil.isVisualVoicemailEnabled(this, phoneAccount) &&
-                    (!uploadSuccess || !downloadSuccess)) {
-                retryCount--;
-                // Re-adjust so that only the unsuccessful action needs to be retried.
-                // No need to re-adjust if both are unsuccessful. It means the full sync
-                // failed so the action remains unchanged.
-                if (uploadSuccess) {
-                    action = SYNC_DOWNLOAD_ONLY;
-                } else if (downloadSuccess) {
-                    action = SYNC_UPLOAD_ONLY;
+        try {
+            while (retryCount > 0) {
+                ImapHelper imapHelper = new ImapHelper(this, phoneAccount, network);
+                if (!imapHelper.isSuccessfullyInitialized()) {
+                    Log.w(TAG, "Can't retrieve Imap credentials.");
+                    VisualVoicemailSettingsUtil.resetVisualVoicemailRetryInterval(this,
+                            phoneAccount);
+                    return;
                 }
 
-                Log.v(TAG, "Retrying " + action);
-                LocalLogHelper.log(TAG, "Immediately retrying " + action);
-            } else {
-                // Nothing more to do here, just exit.
-                releaseNetwork(callback);
+                boolean success = true;
+                if (voicemail == null) {
+                    success = syncAll(action, imapHelper, phoneAccount);
+                } else {
+                    success = syncOne(imapHelper, voicemail, phoneAccount);
+                }
+                imapHelper.updateQuota();
 
-                VisualVoicemailSettingsUtil.resetVisualVoicemailRetryInterval(this, phoneAccount);
-                return;
+                // Need to check again for whether visual voicemail is enabled because it could have
+                // been disabled while waiting for the response from the network.
+                if (VisualVoicemailSettingsUtil.isVisualVoicemailEnabled(this, phoneAccount) &&
+                        !success) {
+                    retryCount--;
+                    Log.v(TAG, "Retrying " + action);
+                } else {
+                    // Nothing more to do here, just exit.
+                    VisualVoicemailSettingsUtil.resetVisualVoicemailRetryInterval(this,
+                            phoneAccount);
+                    VoicemailUtils.setDataChannelState(
+                            this, phoneAccount, Status.DATA_CHANNEL_STATE_OK);
+                    return;
+                }
+            }
+        } finally {
+            if (callback != null) {
+                callback.releaseNetwork();
+            }
+        }
+    }
+
+    private boolean syncAll(String action, ImapHelper imapHelper, PhoneAccountHandle account) {
+        boolean uploadSuccess = true;
+        boolean downloadSuccess = true;
+
+        if (SYNC_FULL_SYNC.equals(action) || SYNC_UPLOAD_ONLY.equals(action)) {
+            uploadSuccess = upload(imapHelper);
+        }
+        if (SYNC_FULL_SYNC.equals(action) || SYNC_DOWNLOAD_ONLY.equals(action)) {
+            downloadSuccess = download(imapHelper, account);
+        }
+
+        Log.v(TAG, "upload succeeded: [" + String.valueOf(uploadSuccess)
+                + "] download succeeded: [" + String.valueOf(downloadSuccess) + "]");
+
+        boolean success = uploadSuccess && downloadSuccess;
+        if (!uploadSuccess || !downloadSuccess) {
+            if (uploadSuccess) {
+                action = SYNC_DOWNLOAD_ONLY;
+            } else if (downloadSuccess) {
+                action = SYNC_UPLOAD_ONLY;
             }
         }
 
-        releaseNetwork(callback);
-        setRetryAlarm(phoneAccount, action);
+        return success;
     }
 
-    private void requestNetwork(OmtpVvmNetworkRequestCallback networkCallback) {
-        getConnectivityManager().requestNetwork(networkCallback.getNetworkRequest(),
-                networkCallback, NETWORK_REQUEST_TIMEOUT_MILLIS);
-    }
-
-    private void releaseNetwork(NetworkCallback networkCallback) {
-        if (networkCallback != null) {
-            getConnectivityManager().unregisterNetworkCallback(networkCallback);
+    private boolean syncOne(ImapHelper imapHelper, Voicemail voicemail,
+            PhoneAccountHandle account) {
+        if (shouldPerformPrefetch(account, imapHelper)) {
+            VoicemailFetchedCallback callback = new VoicemailFetchedCallback(this,
+                    voicemail.getUri());
+            imapHelper.fetchVoicemailPayload(callback, voicemail.getSourceData());
         }
+
+        return imapHelper.fetchTranscription(
+                new TranscriptionFetchedCallback(this, voicemail),
+                voicemail.getSourceData());
     }
 
-    private ConnectivityManager getConnectivityManager() {
-        if (mConnectivityManager == null) {
-            mConnectivityManager = (ConnectivityManager) this.getSystemService(
-                    Context.CONNECTIVITY_SERVICE);
+    private class SyncNetworkRequestCallback extends VvmNetworkRequestCallback {
+
+        Voicemail mVoicemail;
+        private String mAction;
+
+        public SyncNetworkRequestCallback(Context context, PhoneAccountHandle phoneAccount,
+                Voicemail voicemail, String action) {
+            super(context, phoneAccount);
+            mAction = action;
+            mVoicemail = voicemail;
         }
-        return mConnectivityManager;
-    }
 
-    private void setRetryAlarm(PhoneAccountHandle phoneAccount, String action) {
-        Intent serviceIntent = new Intent(this, OmtpVvmSyncService.class);
-        serviceIntent.setAction(action);
-        serviceIntent.putExtra(OmtpVvmSyncService.EXTRA_PHONE_ACCOUNT, phoneAccount);
-        PendingIntent pendingIntent = PendingIntent.getService(this, 0, serviceIntent, 0);
-        long retryInterval = VisualVoicemailSettingsUtil.getVisualVoicemailRetryInterval(this,
-                phoneAccount);
+        @Override
+        public void onAvailable(Network network) {
+            super.onAvailable(network);
+            NetworkInfo info = getConnectivityManager().getNetworkInfo(network);
+            if (info == null) {
+                Log.d(TAG, "Network Type: Unknown");
+            } else {
+                Log.d(TAG, "Network Type: " + info.getTypeName());
+            }
 
-        Log.v(TAG, "Retrying "+ action + " in " + retryInterval + "ms");
-        LocalLogHelper.log(TAG, "Retrying "+ action + " in " + retryInterval + "ms");
+            doSync(network, this, mPhoneAccount, mVoicemail, mAction);
+        }
 
-        AlarmManager alarmManager = (AlarmManager)
-                this.getSystemService(Context.ALARM_SERVICE);
-        alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + retryInterval,
-                pendingIntent);
-
-        VisualVoicemailSettingsUtil.setVisualVoicemailRetryInterval(this, phoneAccount,
-                retryInterval * 2);
     }
 
     private boolean upload(ImapHelper imapHelper) {
@@ -359,7 +370,7 @@
         return success;
     }
 
-    private boolean download(ImapHelper imapHelper) {
+    private boolean download(ImapHelper imapHelper, PhoneAccountHandle account) {
         List<Voicemail> serverVoicemails = imapHelper.fetchAllVoicemails();
         List<Voicemail> localVoicemails = mQueryHelper.getAllVoicemails();
 
@@ -384,17 +395,52 @@
                 if (remoteVoicemail.isRead() != localVoicemail.isRead()) {
                     mQueryHelper.markReadInDatabase(localVoicemail);
                 }
+
+                if (!TextUtils.isEmpty(remoteVoicemail.getTranscription()) &&
+                        TextUtils.isEmpty(localVoicemail.getTranscription())) {
+                    mQueryHelper.updateWithTranscription(localVoicemail,
+                            remoteVoicemail.getTranscription());
+                }
             }
         }
 
         // The leftover messages are messages that exist on the server but not locally.
+        boolean prefetchEnabled = shouldPerformPrefetch(account, imapHelper);
         for (Voicemail remoteVoicemail : remoteMap.values()) {
-            VoicemailContract.Voicemails.insert(this, remoteVoicemail);
+            Uri uri = VoicemailContract.Voicemails.insert(this, remoteVoicemail);
+            if (prefetchEnabled) {
+                VoicemailFetchedCallback fetchedCallback = new VoicemailFetchedCallback(this, uri);
+                imapHelper.fetchVoicemailPayload(fetchedCallback, remoteVoicemail.getSourceData());
+            }
         }
 
         return true;
     }
 
+    private boolean shouldPerformPrefetch(PhoneAccountHandle account, ImapHelper imapHelper) {
+        OmtpVvmCarrierConfigHelper carrierConfigHelper = new OmtpVvmCarrierConfigHelper(
+                this, PhoneUtils.getSubIdForPhoneAccountHandle(account));
+        return carrierConfigHelper.isPrefetchEnabled() && !imapHelper.isRoaming();
+    }
+
+    protected void setRetryAlarm(PhoneAccountHandle phoneAccount, String action) {
+        Intent serviceIntent = new Intent(this, OmtpVvmSyncService.class);
+        serviceIntent.setAction(action);
+        serviceIntent.putExtra(OmtpVvmSyncService.EXTRA_PHONE_ACCOUNT, phoneAccount);
+        PendingIntent pendingIntent = PendingIntent.getService(this, 0, serviceIntent, 0);
+        long retryInterval = VisualVoicemailSettingsUtil.getVisualVoicemailRetryInterval(this,
+                phoneAccount);
+
+        Log.v(TAG, "Retrying " + action + " in " + retryInterval + "ms");
+
+        AlarmManager alarmManager = (AlarmManager) this.getSystemService(Context.ALARM_SERVICE);
+        alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + retryInterval,
+                pendingIntent);
+
+        VisualVoicemailSettingsUtil.setVisualVoicemailRetryInterval(this, phoneAccount,
+                retryInterval * 2);
+    }
+
     /**
      * Builds a map from provider data to message for the given collection of voicemails.
      */
@@ -405,4 +451,20 @@
         }
         return map;
     }
+
+    public class TranscriptionFetchedCallback {
+
+        private Context mContext;
+        private Voicemail mVoicemail;
+
+        public TranscriptionFetchedCallback(Context context, Voicemail voicemail) {
+            mContext = context;
+            mVoicemail = voicemail;
+        }
+
+        public void setVoicemailTranscription(String transcription) {
+            VoicemailsQueryHelper queryHelper = new VoicemailsQueryHelper(mContext);
+            queryHelper.updateWithTranscription(mVoicemail, transcription);
+        }
+    }
 }
diff --git a/src/com/android/phone/vvm/omtp/sync/VoicemailsQueryHelper.java b/src/com/android/phone/vvm/omtp/sync/VoicemailsQueryHelper.java
index 8e2c76a..9a84232 100644
--- a/src/com/android/phone/vvm/omtp/sync/VoicemailsQueryHelper.java
+++ b/src/com/android/phone/vvm/omtp/sync/VoicemailsQueryHelper.java
@@ -25,7 +25,6 @@
 import android.provider.VoicemailContract.Voicemails;
 import android.telecom.PhoneAccountHandle;
 import android.telecom.Voicemail;
-import android.util.Log;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -34,19 +33,19 @@
  * Construct queries to interact with the voicemails table.
  */
 public class VoicemailsQueryHelper {
-    private static final String TAG = "VoicemailsQueryHelper";
-
     final static String[] PROJECTION = new String[] {
             Voicemails._ID,              // 0
             Voicemails.SOURCE_DATA,      // 1
             Voicemails.IS_READ,          // 2
             Voicemails.DELETED,          // 3
+            Voicemails.TRANSCRIPTION     // 4
     };
 
     public static final int _ID = 0;
     public static final int SOURCE_DATA = 1;
     public static final int IS_READ = 2;
     public static final int DELETED = 3;
+    public static final int TRANSCRIPTION = 4;
 
     final static String READ_SELECTION = Voicemails.DIRTY + "=1 AND "
                 + Voicemails.DELETED + "!=1 AND " + Voicemails.IS_READ + "=1";
@@ -106,9 +105,11 @@
                 final long id = cursor.getLong(_ID);
                 final String sourceData = cursor.getString(SOURCE_DATA);
                 final boolean isRead = cursor.getInt(IS_READ) == 1;
+                final String transcription = cursor.getString(TRANSCRIPTION);
                 Voicemail voicemail = Voicemail
                         .createForUpdate(id, sourceData)
-                        .setIsRead(isRead).build();
+                        .setIsRead(isRead)
+                        .setTranscription(transcription).build();
                 voicemails.add(voicemail);
             }
             return voicemails;
@@ -177,15 +178,13 @@
     }
 
     /**
-     * Check if a particular voicemail has already been inserted. If not, insert the new voicemail.
-     * @param voicemail The voicemail to insert.
+     * Utility method to add a transcription to the voicemail.
      */
-    public void insertIfUnique(Voicemail voicemail) {
-        if (isVoicemailUnique(voicemail)) {
-            VoicemailContract.Voicemails.insert(mContext, voicemail);
-        } else {
-            Log.w(TAG, "Voicemail already exists.");
-        }
+    public void updateWithTranscription(Voicemail voicemail, String transcription) {
+        Uri uri = ContentUris.withAppendedId(mSourceUri, voicemail.getId());
+        ContentValues contentValues = new ContentValues();
+        contentValues.put(Voicemails.TRANSCRIPTION, transcription);
+        mContentResolver.update(uri, contentValues, null, null);
     }
 
     /**
@@ -195,7 +194,7 @@
      * @param voicemail The voicemail to check if it is unique.
      * @return {@code true} if the voicemail is unique, {@code false} otherwise.
      */
-    private boolean isVoicemailUnique(Voicemail voicemail) {
+    public boolean isVoicemailUnique(Voicemail voicemail) {
         Cursor cursor = null;
         PhoneAccountHandle phoneAccount = voicemail.getPhoneAccount();
         if (phoneAccount != null) {
diff --git a/src/com/android/phone/vvm/omtp/sync/VvmNetworkRequestCallback.java b/src/com/android/phone/vvm/omtp/sync/VvmNetworkRequestCallback.java
new file mode 100644
index 0000000..884bec9
--- /dev/null
+++ b/src/com/android/phone/vvm/omtp/sync/VvmNetworkRequestCallback.java
@@ -0,0 +1,159 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+package com.android.phone.vvm.omtp.sync;
+
+import android.annotation.CallSuper;
+import android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.Network;
+import android.net.NetworkCapabilities;
+import android.net.NetworkRequest;
+import android.os.Handler;
+import android.os.Looper;
+import android.provider.VoicemailContract;
+import android.provider.VoicemailContract.Status;
+import android.telecom.PhoneAccountHandle;
+import android.util.Log;
+
+import com.android.phone.PhoneUtils;
+import com.android.phone.VoicemailUtils;
+import com.android.phone.vvm.omtp.OmtpVvmCarrierConfigHelper;
+
+/**
+ * Base class for network request call backs for visual voicemail syncing with the Imap server. This
+ * handles retries and network requests.
+ */
+public abstract class VvmNetworkRequestCallback extends ConnectivityManager.NetworkCallback {
+
+    private static final String TAG = "VvmNetworkRequest";
+
+    // Timeout used to call ConnectivityManager.requestNetwork
+    private static final int NETWORK_REQUEST_TIMEOUT_MILLIS = 60 * 1000;
+
+    public static final String NETWORK_REQUEST_FAILED_TIMEOUT = "timeout";
+    public static final String NETWORK_REQUEST_FAILED_LOST = "lost";
+
+    protected Context mContext;
+    protected PhoneAccountHandle mPhoneAccount;
+    protected NetworkRequest mNetworkRequest;
+    private ConnectivityManager mConnectivityManager;
+    private final OmtpVvmCarrierConfigHelper mCarrierConfigHelper;
+    private final int mSubId;
+    private boolean mRequestSent = false;
+    private boolean mResultReceived = false;
+
+    public VvmNetworkRequestCallback(Context context, PhoneAccountHandle phoneAccount) {
+        mContext = context;
+        mPhoneAccount = phoneAccount;
+        mSubId = PhoneUtils.getSubIdForPhoneAccountHandle(phoneAccount);
+        mCarrierConfigHelper = new OmtpVvmCarrierConfigHelper(context, mSubId);
+        mNetworkRequest = createNetworkRequest();
+    }
+
+    /**
+     * @return NetworkRequest for a proper transport type. Use only cellular network if the carrier
+     * requires it. Otherwise use whatever available.
+     */
+    private NetworkRequest createNetworkRequest() {
+
+        NetworkRequest.Builder builder = new NetworkRequest.Builder()
+                .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET);
+
+        if (mCarrierConfigHelper.isCellularDataRequired()) {
+            Log.d(TAG, "Transport type: CELLULAR");
+            builder.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
+                    .setNetworkSpecifier(Integer.toString(mSubId));
+        } else {
+            Log.d(TAG, "Transport type: ANY");
+        }
+        return builder.build();
+    }
+
+    public NetworkRequest getNetworkRequest() {
+        return mNetworkRequest;
+    }
+
+    @Override
+    @CallSuper
+    public void onLost(Network network) {
+        Log.d(TAG, "onLost");
+        mResultReceived = true;
+        onFailed(NETWORK_REQUEST_FAILED_LOST);
+    }
+
+    @Override
+    @CallSuper
+    public void onAvailable(Network network) {
+        super.onAvailable(network);
+        mResultReceived = true;
+    }
+
+    @Override
+    @CallSuper
+    public void onUnavailable() {
+        mResultReceived = true;
+        onFailed(NETWORK_REQUEST_FAILED_TIMEOUT);
+    }
+
+    public void requestNetwork() {
+        if (mRequestSent == true) {
+            Log.e(TAG, "requestNetwork() called twice");
+            return;
+        }
+        mRequestSent = true;
+        getConnectivityManager().requestNetwork(getNetworkRequest(), this);
+        /**
+         * Somehow requestNetwork() with timeout doesn't work, and it's a hidden method.
+         * Implement our own timeout mechanism instead.
+         */
+        Handler handler = new Handler(Looper.getMainLooper());
+        handler.postDelayed(new Runnable() {
+            @Override
+            public void run() {
+                if (mResultReceived == false) {
+                    onFailed(NETWORK_REQUEST_FAILED_TIMEOUT);
+                }
+            }
+        }, NETWORK_REQUEST_TIMEOUT_MILLIS);
+    }
+
+    public void releaseNetwork() {
+        Log.d(TAG, "releaseNetwork");
+        getConnectivityManager().unregisterNetworkCallback(this);
+    }
+
+    public ConnectivityManager getConnectivityManager() {
+        if (mConnectivityManager == null) {
+            mConnectivityManager = (ConnectivityManager) mContext.getSystemService(
+                    Context.CONNECTIVITY_SERVICE);
+        }
+        return mConnectivityManager;
+    }
+
+    @CallSuper
+    public void onFailed(String reason) {
+        Log.d(TAG, "onFailed: " + reason);
+        if (mCarrierConfigHelper.isCellularDataRequired()) {
+            VoicemailUtils.setDataChannelState(
+                    mContext, mPhoneAccount,
+                    Status.DATA_CHANNEL_STATE_NO_CONNECTION_CELLULAR_REQUIRED);
+        } else {
+            VoicemailUtils.setDataChannelState(
+                    mContext, mPhoneAccount, Status.DATA_CHANNEL_STATE_NO_CONNECTION);
+        }
+        releaseNetwork();
+    }
+}
diff --git a/src/com/android/services/telephony/CdmaConference.java b/src/com/android/services/telephony/CdmaConference.java
index 5926a9f..19572e9 100755
--- a/src/com/android/services/telephony/CdmaConference.java
+++ b/src/com/android/services/telephony/CdmaConference.java
@@ -17,7 +17,6 @@
 package com.android.services.telephony;
 
 import android.content.Context;
-import android.content.res.Resources;
 import android.os.PersistableBundle;
 import android.telecom.Conference;
 import android.telecom.Connection;
@@ -36,14 +35,18 @@
  */
 public class CdmaConference extends Conference {
     private int mCapabilities;
+    private int mProperties;
 
     public CdmaConference(PhoneAccountHandle phoneAccount) {
         super(phoneAccount);
         setActive();
+
+        mProperties = Connection.PROPERTY_GENERIC_CONFERENCE;
+        setConnectionProperties(mProperties);
     }
 
     public void updateCapabilities(int capabilities) {
-        capabilities |= Connection.CAPABILITY_MUTE | Connection.CAPABILITY_GENERIC_CONFERENCE;
+        capabilities |= Connection.CAPABILITY_MUTE;
         setConnectionCapabilities(capabilities);
     }
 
diff --git a/src/com/android/services/telephony/CdmaConferenceController.java b/src/com/android/services/telephony/CdmaConferenceController.java
index 8a26365..9aee300 100644
--- a/src/com/android/services/telephony/CdmaConferenceController.java
+++ b/src/com/android/services/telephony/CdmaConferenceController.java
@@ -16,9 +16,12 @@
 
 package com.android.services.telephony;
 
+import com.android.phone.PhoneUtils;
+
 import android.os.Handler;
 import android.telecom.Connection;
 import android.telecom.DisconnectCause;
+import android.telecom.PhoneAccountHandle;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -32,7 +35,7 @@
  *    indication given to us as to what state they are in.
  *
  * To make life easier on the user we do the following: Whenever there exist 2 or more calls, we
- * say that we are in a conference call with {@link Connection#CAPABILITY_GENERIC_CONFERENCE}.
+ * say that we are in a conference call with {@link Connection#PROPERTY_GENERIC_CONFERENCE}.
  * Generic indicates that this is a simple conference that doesn't support conference management.
  * The conference call will also support "MERGE" to begin with and stop supporting it the first time
  * we are asked to actually execute a merge. I emphasize when "we are asked" because we get no
@@ -144,15 +147,18 @@
         if (conferenceConnections.size() >= 2) {
             boolean isNewlyCreated = false;
 
+            CdmaConnection newConnection = mCdmaConnections.get(mCdmaConnections.size() - 1);
+
             // There are two or more CDMA connections. Do the following:
             // 1) Create a new conference connection if it doesn't exist.
             if (mConference == null) {
                 Log.i(this, "Creating new Cdma conference call");
-                mConference = new CdmaConference(null);
+                PhoneAccountHandle phoneAccountHandle =
+                        PhoneUtils.makePstnPhoneAccountHandle(newConnection.getPhone());
+                mConference = new CdmaConference(phoneAccountHandle);
                 isNewlyCreated = true;
             }
 
-            CdmaConnection newConnection = mCdmaConnections.get(mCdmaConnections.size() - 1);
             if (newConnection.isOutgoing()) {
                 // Only an outgoing call can be merged with an ongoing call.
                 mConference.updateCapabilities(Connection.CAPABILITY_MERGE_CONFERENCE);
diff --git a/src/com/android/services/telephony/CdmaConnection.java b/src/com/android/services/telephony/CdmaConnection.java
index d13f66f..bfb0d23 100644
--- a/src/com/android/services/telephony/CdmaConnection.java
+++ b/src/com/android/services/telephony/CdmaConnection.java
@@ -63,7 +63,7 @@
     /**
      * {@code True} if the CDMA connection should allow mute.
      */
-    private final boolean mAllowMute;
+    private boolean mAllowMute;
     private final boolean mIsOutgoing;
     // Queue of pending short-DTMF characters.
     private final Queue<Character> mDtmfQueue = new LinkedList<>();
@@ -77,8 +77,9 @@
             Connection connection,
             EmergencyTonePlayer emergencyTonePlayer,
             boolean allowMute,
-            boolean isOutgoing) {
-        super(connection);
+            boolean isOutgoing,
+            String telecomCallId) {
+        super(connection, telecomCallId);
         mEmergencyTonePlayer = emergencyTonePlayer;
         mAllowMute = allowMute;
         mIsOutgoing = isOutgoing;
@@ -145,7 +146,7 @@
     @Override
     public TelephonyConnection cloneConnection() {
         CdmaConnection cdmaConnection = new CdmaConnection(getOriginalConnection(),
-                mEmergencyTonePlayer, mAllowMute, mIsOutgoing);
+                mEmergencyTonePlayer, mAllowMute, mIsOutgoing, getTelecomCallId());
         return cdmaConnection;
     }
 
@@ -190,9 +191,9 @@
 
     void forceAsDialing(boolean isDialing) {
         if (isDialing) {
-            setDialing();
+            setStateOverride(Call.State.DIALING);
         } else {
-            updateState(true);
+            resetStateOverride();
         }
     }
 
@@ -285,4 +286,15 @@
                 PhoneNumberUtils.isLocalEmergencyNumber(
                     phone.getContext(), getAddress().getSchemeSpecificPart());
     }
+
+    /**
+     * Called when ECM mode is exited; set the connection to allow mute and update the connection
+     * capabilities.
+     */
+    @Override
+    protected void handleExitedEcmMode() {
+        // We allow mute upon existing ECM mode and rebuild the capabilities.
+        mAllowMute = true;
+        super.handleExitedEcmMode();
+    }
 }
diff --git a/src/com/android/services/telephony/ConferenceParticipantConnection.java b/src/com/android/services/telephony/ConferenceParticipantConnection.java
index 4e7546d..78f9ca3 100644
--- a/src/com/android/services/telephony/ConferenceParticipantConnection.java
+++ b/src/com/android/services/telephony/ConferenceParticipantConnection.java
@@ -16,6 +16,7 @@
 
 package com.android.services.telephony;
 
+import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneConstants;
 
 import android.net.Uri;
@@ -23,6 +24,8 @@
 import android.telecom.ConferenceParticipant;
 import android.telecom.DisconnectCause;
 import android.telecom.PhoneAccount;
+import android.telephony.PhoneNumberUtils;
+import android.telephony.SubscriptionInfo;
 import android.text.TextUtils;
 
 /**
@@ -60,12 +63,14 @@
             ConferenceParticipant participant) {
 
         mParentConnection = parentConnection;
+
         int presentation = getParticipantPresentation(participant);
         Uri address;
         if (presentation != PhoneConstants.PRESENTATION_ALLOWED) {
             address = null;
         } else {
-            address = getParticipantAddress(participant);
+            String countryIso = getCountryIso(parentConnection.getCall().getPhone());
+            address = getParticipantAddress(participant, countryIso);
         }
         setAddress(address, presentation);
         setCallerDisplayName(participant.getDisplayName(), presentation);
@@ -197,9 +202,11 @@
      * format into a typical tel: style URI.
      *
      * @param participant The conference participant.
+     * @param countryIso The country ISO of the current subscription; used when formatting the
+     *                   participant phone number to E.164 format.
      * @return The participant's address URI.
      */
-    private Uri getParticipantAddress(ConferenceParticipant participant) {
+    private Uri getParticipantAddress(ConferenceParticipant participant, String countryIso) {
         Uri address = participant.getHandle();
         if (address == null) {
             return address;
@@ -233,7 +240,44 @@
         }
         number = numberParts[0];
 
-        return Uri.fromParts(PhoneAccount.SCHEME_TEL, number, null);
+        // Attempt to format the number in E.164 format and use that as part of the TEL URI.
+        // RFC2806 recommends to format telephone numbers using E.164 since it is independent of
+        // how the dialing of said numbers takes place.
+        // If conversion to E.164 fails, the returned value is null.  In that case, fallback to the
+        // number which was in the CEP data.
+        String formattedNumber = null;
+        if (!TextUtils.isEmpty(countryIso)) {
+            formattedNumber = PhoneNumberUtils.formatNumberToE164(number, countryIso);
+        }
+
+        return Uri.fromParts(PhoneAccount.SCHEME_TEL,
+                formattedNumber != null ? formattedNumber : number, null);
+    }
+
+    /**
+     * Given a {@link Phone} instance, determines the country ISO associated with the phone's
+     * subscription.
+     *
+     * @param phone The phone instance.
+     * @return The country ISO.
+     */
+    private String getCountryIso(Phone phone) {
+        if (phone == null) {
+            return null;
+        }
+
+        int subId = phone.getSubId();
+
+        SubscriptionInfo subInfo = TelecomAccountRegistry.getInstance(null).
+                getSubscriptionManager().getActiveSubscriptionInfo(subId);
+
+        if (subInfo == null) {
+            return null;
+        }
+        // The SubscriptionInfo reports ISO country codes in lower case.  Convert to upper case,
+        // since ultimately we use this ISO when formatting the CEP phone number, and the phone
+        // number formatting library expects uppercase ISO country codes.
+        return subInfo.getCountryIso().toUpperCase();
     }
 
     /**
diff --git a/src/com/android/services/telephony/DisconnectCauseUtil.java b/src/com/android/services/telephony/DisconnectCauseUtil.java
index 235c4b9..d7db345 100644
--- a/src/com/android/services/telephony/DisconnectCauseUtil.java
+++ b/src/com/android/services/telephony/DisconnectCauseUtil.java
@@ -92,6 +92,7 @@
             case android.telephony.DisconnectCause.EMERGENCY_ONLY:
             case android.telephony.DisconnectCause.FDN_BLOCKED:
             case android.telephony.DisconnectCause.LIMIT_EXCEEDED:
+            case android.telephony.DisconnectCause.VIDEO_CALL_NOT_ALLOWED_WHILE_TTY_ENABLED:
                 return DisconnectCause.RESTRICTED;
 
             case android.telephony.DisconnectCause.CDMA_ACCESS_FAILURE:
@@ -324,6 +325,10 @@
                 resourceId = R.string.incall_error_missing_voicemail_number;
                 break;
 
+            case android.telephony.DisconnectCause.VIDEO_CALL_NOT_ALLOWED_WHILE_TTY_ENABLED:
+                resourceId = R.string.callFailed_video_call_tty_enabled;
+                break;
+
             case android.telephony.DisconnectCause.OUTGOING_CANCELED:
                 // We don't want to show any dialog for the canceled case since the call was
                 // either canceled by the user explicitly (end-call button pushed immediately)
@@ -371,6 +376,7 @@
             case android.telephony.DisconnectCause.ERROR_UNSPECIFIED:
             case android.telephony.DisconnectCause.LOCAL:
             case android.telephony.DisconnectCause.NORMAL:
+            case android.telephony.DisconnectCause.VIDEO_CALL_NOT_ALLOWED_WHILE_TTY_ENABLED:
                 return ToneGenerator.TONE_PROP_PROMPT;
 
             case android.telephony.DisconnectCause.IMS_MERGED_SUCCESSFULLY:
diff --git a/src/com/android/services/telephony/GsmConnection.java b/src/com/android/services/telephony/GsmConnection.java
index 1273c60..dd47e8d 100644
--- a/src/com/android/services/telephony/GsmConnection.java
+++ b/src/com/android/services/telephony/GsmConnection.java
@@ -22,8 +22,8 @@
  * Manages a single phone call handled by GSM.
  */
 final class GsmConnection extends TelephonyConnection {
-    GsmConnection(Connection connection) {
-        super(connection);
+    GsmConnection(Connection connection, String telecomCallId) {
+        super(connection, telecomCallId);
     }
 
     /**
@@ -35,7 +35,8 @@
      */
     @Override
     public TelephonyConnection cloneConnection() {
-        GsmConnection gsmConnection = new GsmConnection(getOriginalConnection());
+        GsmConnection gsmConnection = new GsmConnection(getOriginalConnection(),
+                getTelecomCallId());
         return gsmConnection;
     }
 
@@ -59,9 +60,11 @@
     protected int buildConnectionCapabilities() {
         int capabilities = super.buildConnectionCapabilities();
         capabilities |= CAPABILITY_MUTE;
-        capabilities |= CAPABILITY_SUPPORT_HOLD;
-        if (getState() == STATE_ACTIVE || getState() == STATE_HOLDING) {
-            capabilities |= CAPABILITY_HOLD;
+        if (!shouldTreatAsEmergencyCall()) {
+            capabilities |= CAPABILITY_SUPPORT_HOLD;
+            if (getState() == STATE_ACTIVE || getState() == STATE_HOLDING) {
+                capabilities |= CAPABILITY_HOLD;
+            }
         }
         return capabilities;
     }
diff --git a/src/com/android/services/telephony/ImsConference.java b/src/com/android/services/telephony/ImsConference.java
index 8ccc8f9..69d57d7 100644
--- a/src/com/android/services/telephony/ImsConference.java
+++ b/src/com/android/services/telephony/ImsConference.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import android.graphics.drawable.Icon;
 import android.net.Uri;
+import android.os.Bundle;
 import android.telecom.Conference;
 import android.telecom.ConferenceParticipant;
 import android.telecom.Connection.VideoProvider;
@@ -34,8 +35,6 @@
 import com.android.internal.telephony.CallStateException;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneConstants;
-import com.android.internal.telephony.imsphone.ImsPhone;
-import com.android.internal.telephony.imsphone.ImsPhoneConnection;
 import com.android.phone.PhoneUtils;
 import com.android.phone.R;
 
@@ -173,17 +172,37 @@
 
         @Override
         public void onConnectionCapabilitiesChanged(Connection c, int connectionCapabilities) {
-            Log.d(this, "onCallCapabilitiesChanged: Connection: %s, callCapabilities: %s", c,
-                    connectionCapabilities);
+            Log.d(this, "onConnectionCapabilitiesChanged: Connection: %s," +
+                    " connectionCapabilities: %s", c, connectionCapabilities);
             int capabilites = ImsConference.this.getConnectionCapabilities();
             setConnectionCapabilities(applyHostCapabilities(capabilites, connectionCapabilities));
         }
 
         @Override
+        public void onConnectionPropertiesChanged(Connection c, int connectionProperties) {
+            Log.d(this, "onConnectionPropertiesChanged: Connection: %s," +
+                    " connectionProperties: %s", c, connectionProperties);
+            int properties = ImsConference.this.getConnectionProperties();
+            setConnectionProperties(applyHostProperties(properties, connectionProperties));
+        }
+
+        @Override
         public void onStatusHintsChanged(Connection c, StatusHints statusHints) {
             Log.v(this, "onStatusHintsChanged");
             updateStatusHints();
         }
+
+        @Override
+        public void onExtrasChanged(Connection c, Bundle extras) {
+            Log.v(this, "onExtrasChanged: c=" + c + " Extras=" + extras);
+            putExtras(extras);
+        }
+
+        @Override
+        public void onExtrasRemoved(Connection c, List<String> keys) {
+            Log.v(this, "onExtrasRemoved: c=" + c + " key=" + keys);
+            removeExtras(keys);
+        }
     };
 
     /**
@@ -238,14 +257,12 @@
      * @param telephonyConnectionService The connection service responsible for adding new
      *                                   conferene participants.
      * @param conferenceHost The telephony connection hosting the conference.
+     * @param phoneAccountHandle The phone account handle associated with the conference.
      */
     public ImsConference(TelephonyConnectionService telephonyConnectionService,
-            TelephonyConnection conferenceHost) {
+            TelephonyConnection conferenceHost, PhoneAccountHandle phoneAccountHandle) {
 
-        super((conferenceHost != null && conferenceHost.getCall() != null &&
-                        conferenceHost.getCall().getPhone() != null) ?
-                PhoneUtils.makePstnPhoneAccountHandle(
-                        conferenceHost.getCall().getPhone()) : null);
+        super(phoneAccountHandle);
 
         // Specify the connection time of the conference to be the connection time of the original
         // connection.
@@ -273,41 +290,49 @@
      * @return The merged capabilities to be applied to the conference.
      */
     private int applyHostCapabilities(int conferenceCapabilities, int capabilities) {
-        if (can(capabilities, Connection.CAPABILITY_SUPPORTS_VT_LOCAL_BIDIRECTIONAL)) {
-            conferenceCapabilities = applyCapability(conferenceCapabilities,
-                    Connection.CAPABILITY_SUPPORTS_VT_LOCAL_BIDIRECTIONAL);
-        } else {
-            conferenceCapabilities = removeCapability(conferenceCapabilities,
-                    Connection.CAPABILITY_SUPPORTS_VT_LOCAL_BIDIRECTIONAL);
-        }
+        conferenceCapabilities = changeBitmask(conferenceCapabilities,
+                    Connection.CAPABILITY_SUPPORTS_VT_LOCAL_BIDIRECTIONAL,
+                    can(capabilities, Connection.CAPABILITY_SUPPORTS_VT_LOCAL_BIDIRECTIONAL));
 
-        if (can(capabilities, Connection.CAPABILITY_SUPPORTS_VT_REMOTE_BIDIRECTIONAL)) {
-            conferenceCapabilities = applyCapability(conferenceCapabilities,
-                    Connection.CAPABILITY_SUPPORTS_VT_REMOTE_BIDIRECTIONAL);
-        } else {
-            conferenceCapabilities = removeCapability(conferenceCapabilities,
-                    Connection.CAPABILITY_SUPPORTS_VT_REMOTE_BIDIRECTIONAL);
-        }
+        conferenceCapabilities = changeBitmask(conferenceCapabilities,
+                    Connection.CAPABILITY_SUPPORTS_VT_REMOTE_BIDIRECTIONAL,
+                    can(capabilities, Connection.CAPABILITY_SUPPORTS_VT_REMOTE_BIDIRECTIONAL));
 
-        if (can(capabilities, Connection.CAPABILITY_CAN_UPGRADE_TO_VIDEO)) {
-            conferenceCapabilities = applyCapability(conferenceCapabilities,
-                    Connection.CAPABILITY_CAN_UPGRADE_TO_VIDEO);
-        } else {
-            conferenceCapabilities = removeCapability(conferenceCapabilities,
-                    Connection.CAPABILITY_CAN_UPGRADE_TO_VIDEO);
-        }
+        conferenceCapabilities = changeBitmask(conferenceCapabilities,
+                    Connection.CAPABILITY_CANNOT_DOWNGRADE_VIDEO_TO_AUDIO,
+                    can(capabilities, Connection.CAPABILITY_CANNOT_DOWNGRADE_VIDEO_TO_AUDIO));
 
-        if (can(capabilities, Connection.CAPABILITY_HIGH_DEF_AUDIO)) {
-            conferenceCapabilities = applyCapability(conferenceCapabilities,
-                    Connection.CAPABILITY_HIGH_DEF_AUDIO);
-        } else {
-            conferenceCapabilities = removeCapability(conferenceCapabilities,
-                    Connection.CAPABILITY_HIGH_DEF_AUDIO);
-        }
+        conferenceCapabilities = changeBitmask(conferenceCapabilities,
+                    Connection.CAPABILITY_CAN_UPGRADE_TO_VIDEO,
+                    can(capabilities, Connection.CAPABILITY_CAN_UPGRADE_TO_VIDEO));
+
         return conferenceCapabilities;
     }
 
     /**
+     * Transfers properties from the conference host to the conference itself.
+     *
+     * @param conferenceProperties The current conference properties.
+     * @param properties The new conference host properties.
+     * @return The merged properties to be applied to the conference.
+     */
+    private int applyHostProperties(int conferenceProperties, int properties) {
+        conferenceProperties = changeBitmask(conferenceProperties,
+                Connection.PROPERTY_HIGH_DEF_AUDIO,
+                can(properties, Connection.PROPERTY_HIGH_DEF_AUDIO));
+
+        conferenceProperties = changeBitmask(conferenceProperties,
+                Connection.PROPERTY_WIFI,
+                can(properties, Connection.PROPERTY_WIFI));
+
+        conferenceProperties = changeBitmask(conferenceProperties,
+                Connection.PROPERTY_IS_EXTERNAL_CALL,
+                can(properties, Connection.PROPERTY_IS_EXTERNAL_CALL));
+
+        return conferenceProperties;
+    }
+
+    /**
      * Not used by the IMS conference controller.
      *
      * @return {@code Null}.
@@ -456,14 +481,20 @@
         // No-op
     }
 
-    private int applyCapability(int capabilities, int capability) {
-        int newCapabilities = capabilities | capability;
-        return newCapabilities;
-    }
-
-    private int removeCapability(int capabilities, int capability) {
-        int newCapabilities = capabilities & ~capability;
-        return newCapabilities;
+    /**
+     * Changes a bit-mask to add or remove a bit-field.
+     *
+     * @param bitmask The bit-mask.
+     * @param bitfield The bit-field to change.
+     * @param enabled Whether the bit-field should be set or removed.
+     * @return The bit-mask with the bit-field changed.
+     */
+    private int changeBitmask(int bitmask, int bitfield, boolean enabled) {
+        if (enabled) {
+            return bitmask | bitfield;
+        } else {
+            return bitmask & ~bitfield;
+        }
     }
 
     /**
@@ -478,12 +509,9 @@
         }
         com.android.internal.telephony.Connection originalConnection =
                 mConferenceHost.getOriginalConnection();
-        if (!(originalConnection instanceof ImsPhoneConnection)) {
-            return false;
-        }
 
-        ImsPhoneConnection imsPhoneConnection = (ImsPhoneConnection) originalConnection;
-        return imsPhoneConnection.isMultiparty() && imsPhoneConnection.isConferenceHost();
+        return originalConnection != null && originalConnection.isMultiparty() &&
+                originalConnection.isConferenceHost();
     }
 
     /**
@@ -530,10 +558,11 @@
         // Attempt to get the conference host's address (e.g. the host's own phone number).
         // We need to look at the default phone for the ImsPhone when creating the phone account
         // for the
-        if (mConferenceHost.getPhone() != null &&  mConferenceHost.getPhone() instanceof ImsPhone) {
+        if (mConferenceHost.getPhone() != null &&
+                mConferenceHost.getPhone().getPhoneType() == PhoneConstants.PHONE_TYPE_IMS) {
             // Look up the conference host's address; we need this later for filtering out the
             // conference host in conference event package data.
-            ImsPhone imsPhone = (ImsPhone) mConferenceHost.getPhone();
+            Phone imsPhone = mConferenceHost.getPhone();
             mConferenceHostPhoneAccountHandle =
                     PhoneUtils.makePstnPhoneAccountHandle(imsPhone.getDefaultPhone());
             mConferenceHostAddress = TelecomAccountRegistry.getInstance(mTelephonyConnectionService)
@@ -770,17 +799,28 @@
         com.android.internal.telephony.Connection originalConnection =
                 mConferenceHost.getOriginalConnection();
 
-        if (!(originalConnection instanceof ImsPhoneConnection)) {
+        if (originalConnection != null &&
+                originalConnection.getPhoneType() != PhoneConstants.PHONE_TYPE_IMS) {
             if (Log.VERBOSE) {
                 Log.v(this,
                         "Original connection for conference host is no longer an IMS connection; " +
                                 "new connection: %s", originalConnection);
             }
 
-            PhoneAccountHandle phoneAccountHandle =
-                    PhoneUtils.makePstnPhoneAccountHandle(mConferenceHost.getPhone());
+            PhoneAccountHandle phoneAccountHandle = null;
+            if (mConferenceHost.getPhone() != null &&
+                    mConferenceHost.getPhone().getPhoneType() == PhoneConstants.PHONE_TYPE_IMS) {
+                Phone imsPhone = mConferenceHost.getPhone();
+                // The phone account handle for an ImsPhone is based on the default phone (ie the
+                // base GSM or CDMA phone, not on the ImsPhone itself).
+                phoneAccountHandle =
+                        PhoneUtils.makePstnPhoneAccountHandle(imsPhone.getDefaultPhone());
+            }
+
             if (mConferenceHost.getPhone().getPhoneType() == PhoneConstants.PHONE_TYPE_GSM) {
-                GsmConnection c = new GsmConnection(originalConnection);
+                GsmConnection c = new GsmConnection(originalConnection, getTelecomCallId());
+                // This is a newly created conference connection as a result of SRVCC
+                c.setConferenceSupported(true);
                 c.updateState();
                 // Copy the connect time from the conferenceHost
                 c.setConnectTimeMillis(mConferenceHost.getConnectTimeMillis());
@@ -867,6 +907,8 @@
         StringBuilder sb = new StringBuilder();
         sb.append("[ImsConference objId:");
         sb.append(System.identityHashCode(this));
+        sb.append(" telecomCallID:");
+        sb.append(getTelecomCallId());
         sb.append(" state:");
         sb.append(Connection.stateToString(getState()));
         sb.append(" hostConnection:");
diff --git a/src/com/android/services/telephony/ImsConferenceController.java b/src/com/android/services/telephony/ImsConferenceController.java
index 7c45657..0f9ae5d 100644
--- a/src/com/android/services/telephony/ImsConferenceController.java
+++ b/src/com/android/services/telephony/ImsConferenceController.java
@@ -16,13 +16,16 @@
 
 package com.android.services.telephony;
 
-import com.android.internal.telephony.imsphone.ImsPhoneConnection;
+import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.PhoneConstants;
+import com.android.phone.PhoneUtils;
 
 import android.telecom.Conference;
 import android.telecom.Connection;
 import android.telecom.ConnectionService;
 import android.telecom.DisconnectCause;
 import android.telecom.Conferenceable;
+import android.telecom.PhoneAccountHandle;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -73,7 +76,7 @@
         @Override
         public void onConferenceStarted() {
             Log.v(this, "onConferenceStarted");
-            recalculateConference();
+            recalculate();
         }
     };
 
@@ -270,12 +273,9 @@
         TelephonyConnection telephonyConnection = (TelephonyConnection) connection;
         com.android.internal.telephony.Connection originalConnection =
                 telephonyConnection.getOriginalConnection();
-        if (!(originalConnection instanceof ImsPhoneConnection)) {
-            return false;
-        }
 
-        ImsPhoneConnection imsPhoneConnection = (ImsPhoneConnection) originalConnection;
-        return imsPhoneConnection.isMultiparty() && !imsPhoneConnection.isConferenceHost();
+        return originalConnection != null && originalConnection.isMultiparty() &&
+                originalConnection.isMemberOfPeerConference();
     }
 
     /**
@@ -321,12 +321,25 @@
         // from Telecom.  Instead we create a new instance and remove the old one from telecom.
         TelephonyConnection conferenceHostConnection = connection.cloneConnection();
 
-        // Create conference and add to telecom
-        ImsConference conference = new ImsConference(mConnectionService, conferenceHostConnection);
+        PhoneAccountHandle phoneAccountHandle = null;
+
+        // Attempt to determine the phone account associated with the conference host connection.
+        if (connection.getPhone() != null &&
+                connection.getPhone().getPhoneType() == PhoneConstants.PHONE_TYPE_IMS) {
+            Phone imsPhone = connection.getPhone();
+            // The phone account handle for an ImsPhone is based on the default phone (ie the
+            // base GSM or CDMA phone, not on the ImsPhone itself).
+            phoneAccountHandle =
+                    PhoneUtils.makePstnPhoneAccountHandle(imsPhone.getDefaultPhone());
+        }
+
+        ImsConference conference = new ImsConference(mConnectionService, conferenceHostConnection,
+                phoneAccountHandle);
         conference.setState(conferenceHostConnection.getState());
         conference.addListener(mConferenceListener);
         conference.updateConferenceParticipantsAfterCreation();
         mConnectionService.addConference(conference);
+        conferenceHostConnection.setTelecomCallId(conference.getTelecomCallId());
 
         // Cleanup TelephonyConnection which backed the original connection and remove from telecom.
         // Use the "Other" disconnect cause to ensure the call is logged to the call log but the
diff --git a/src/com/android/services/telephony/PstnIncomingCallNotifier.java b/src/com/android/services/telephony/PstnIncomingCallNotifier.java
index 9e035b5..b4733dd 100644
--- a/src/com/android/services/telephony/PstnIncomingCallNotifier.java
+++ b/src/com/android/services/telephony/PstnIncomingCallNotifier.java
@@ -25,18 +25,25 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
+import android.os.SystemClock;
 import android.telecom.PhoneAccount;
+import android.telecom.PhoneAccountHandle;
 import android.telecom.TelecomManager;
-import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 
 import com.android.internal.telephony.Call;
+import com.android.internal.telephony.CallStateException;
 import com.android.internal.telephony.Connection;
+import com.android.internal.telephony.DriverCall;
+import com.android.internal.telephony.GsmCdmaCallTracker;
+import com.android.internal.telephony.GsmCdmaConnection;
+import com.android.internal.telephony.GsmCdmaPhone;
 import com.android.internal.telephony.Phone;
-import com.android.internal.telephony.PhoneConstants;
-import com.android.internal.telephony.PhoneProxy;
+import com.android.internal.telephony.TelephonyComponentFactory;
 import com.android.internal.telephony.TelephonyIntents;
 import com.android.internal.telephony.cdma.CdmaCallWaitingNotification;
+import com.android.internal.telephony.imsphone.ImsExternalCallTracker;
+import com.android.internal.telephony.imsphone.ImsExternalConnection;
 import com.android.phone.PhoneUtils;
 
 import com.google.common.base.Preconditions;
@@ -53,19 +60,11 @@
     private static final int EVENT_CDMA_CALL_WAITING = 101;
     private static final int EVENT_UNKNOWN_CONNECTION = 102;
 
-    /** The phone proxy object to listen to. */
-    private final PhoneProxy mPhoneProxy;
+    /** The phone object to listen to. */
+    private final Phone mPhone;
 
     /**
-     * The base phone implementation behind phone proxy. The underlying phone implementation can
-     * change underneath when the radio technology changes. We listen for these events and update
-     * the base phone in this variable. We save it so that when the change happens, we can
-     * unregister from the events we were listening to.
-     */
-    private Phone mPhoneBase;
-
-    /**
-     * Used to listen to events from {@link #mPhoneBase}.
+     * Used to listen to events from {@link #mPhone}.
      */
     private final Handler mHandler = new Handler() {
         @Override
@@ -87,77 +86,40 @@
     };
 
     /**
-     * Receiver to listen for radio technology change events.
-     */
-    private final BroadcastReceiver mRATReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            String action = intent.getAction();
-            if (TelephonyIntents.ACTION_RADIO_TECHNOLOGY_CHANGED.equals(action)) {
-                String newPhone = intent.getStringExtra(PhoneConstants.PHONE_NAME_KEY);
-                Log.d(this, "Radio technology switched. Now %s is active.", newPhone);
-
-                registerForNotifications();
-            }
-        }
-    };
-
-    /**
      * Persists the specified parameters and starts listening to phone events.
      *
-     * @param phoneProxy The phone object for listening to incoming calls.
+     * @param phone The phone object for listening to incoming calls.
      */
-    PstnIncomingCallNotifier(PhoneProxy phoneProxy) {
-        Preconditions.checkNotNull(phoneProxy);
+    PstnIncomingCallNotifier(Phone phone) {
+        Preconditions.checkNotNull(phone);
 
-        mPhoneProxy = phoneProxy;
+        mPhone = phone;
 
         registerForNotifications();
-
-        IntentFilter intentFilter =
-                new IntentFilter(TelephonyIntents.ACTION_RADIO_TECHNOLOGY_CHANGED);
-        mPhoneProxy.getContext().registerReceiver(mRATReceiver, intentFilter);
     }
 
     void teardown() {
         unregisterForNotifications();
-        mPhoneProxy.getContext().unregisterReceiver(mRATReceiver);
     }
 
     /**
      * Register for notifications from the base phone.
-     * TODO: We should only need to interact with the phoneproxy directly. However,
-     * since the phoneproxy only interacts directly with CallManager we either listen to callmanager
-     * or we have to poke into the proxy like this.  Neither is desirable. It would be better if
-     * this class and callManager could register generically with the phone proxy instead and get
-     * radio techonology changes directly.  Or better yet, just register for the notifications
-     * directly with phone proxy and never worry about the technology changes. This requires a
-     * change in opt/telephony code.
      */
     private void registerForNotifications() {
-        Phone newPhone = mPhoneProxy.getActivePhone();
-        if (newPhone != mPhoneBase) {
-            unregisterForNotifications();
-
-            if (newPhone != null) {
-                Log.i(this, "Registering: %s", newPhone);
-                mPhoneBase = newPhone;
-                mPhoneBase.registerForNewRingingConnection(
-                        mHandler, EVENT_NEW_RINGING_CONNECTION, null);
-                mPhoneBase.registerForCallWaiting(
-                        mHandler, EVENT_CDMA_CALL_WAITING, null);
-                mPhoneBase.registerForUnknownConnection(mHandler, EVENT_UNKNOWN_CONNECTION,
-                        null);
-            }
+        if (mPhone != null) {
+            Log.i(this, "Registering: %s", mPhone);
+            mPhone.registerForNewRingingConnection(mHandler, EVENT_NEW_RINGING_CONNECTION, null);
+            mPhone.registerForCallWaiting(mHandler, EVENT_CDMA_CALL_WAITING, null);
+            mPhone.registerForUnknownConnection(mHandler, EVENT_UNKNOWN_CONNECTION, null);
         }
     }
 
     private void unregisterForNotifications() {
-        if (mPhoneBase != null) {
-            Log.i(this, "Unregistering: %s", mPhoneBase);
-            mPhoneBase.unregisterForNewRingingConnection(mHandler);
-            mPhoneBase.unregisterForCallWaiting(mHandler);
-            mPhoneBase.unregisterForUnknownConnection(mHandler);
+        if (mPhone != null) {
+            Log.i(this, "Unregistering: %s", mPhone);
+            mPhone.unregisterForNewRingingConnection(mHandler);
+            mPhone.unregisterForCallWaiting(mHandler);
+            mPhone.unregisterForUnknownConnection(mHandler);
         }
     }
 
@@ -182,7 +144,7 @@
     private void handleCdmaCallWaiting(AsyncResult asyncResult) {
         Log.d(this, "handleCdmaCallWaiting");
         CdmaCallWaitingNotification ccwi = (CdmaCallWaitingNotification) asyncResult.result;
-        Call call = mPhoneBase.getRingingCall();
+        Call call = mPhone.getRingingCall();
         if (call.getState() == Call.State.WAITING) {
             Connection connection = call.getLatestConnection();
             if (connection != null) {
@@ -223,15 +185,36 @@
 
         if (!maybeSwapAnyWithUnknownConnection(connection)) {
             Log.i(this, "determined new connection is: %s", connection);
-            Bundle extras = null;
+            Bundle extras = new Bundle();
             if (connection.getNumberPresentation() == TelecomManager.PRESENTATION_ALLOWED &&
                     !TextUtils.isEmpty(connection.getAddress())) {
-                extras = new Bundle();
                 Uri uri = Uri.fromParts(PhoneAccount.SCHEME_TEL, connection.getAddress(), null);
                 extras.putParcelable(TelecomManager.EXTRA_UNKNOWN_CALL_HANDLE, uri);
             }
-            TelecomManager.from(mPhoneProxy.getContext()).addNewUnknownCall(
-                    PhoneUtils.makePstnPhoneAccountHandle(mPhoneProxy), extras);
+            // ImsExternalConnections are keyed by a unique mCallId; include this as an extra on
+            // the call to addNewUknownCall in Telecom.  This way when the request comes back to the
+            // TelephonyConnectionService, we will be able to determine which unknown connection is
+            // being added.
+            if (connection instanceof ImsExternalConnection) {
+                ImsExternalConnection externalConnection = (ImsExternalConnection) connection;
+                extras.putInt(ImsExternalCallTracker.EXTRA_IMS_EXTERNAL_CALL_ID,
+                        externalConnection.getCallId());
+            }
+
+            // Specifies the time the call was added. This is used by the dialer for analytics.
+            extras.putLong(TelecomManager.EXTRA_CALL_CREATED_TIME_MILLIS,
+                    SystemClock.elapsedRealtime());
+
+            PhoneAccountHandle handle = findCorrectPhoneAccountHandle();
+            if (handle == null) {
+                try {
+                    connection.hangup();
+                } catch (CallStateException e) {
+                    // connection already disconnected. Do nothing
+                }
+            } else {
+                TelecomManager.from(mPhone.getContext()).addNewUnknownCall(handle, extras);
+            }
         } else {
             Log.i(this, "swapped an old connection, new one is: %s", connection);
         }
@@ -241,15 +224,55 @@
      * Sends the incoming call intent to telecom.
      */
     private void sendIncomingCallIntent(Connection connection) {
-        Bundle extras = null;
+        Bundle extras = new Bundle();
         if (connection.getNumberPresentation() == TelecomManager.PRESENTATION_ALLOWED &&
                 !TextUtils.isEmpty(connection.getAddress())) {
-            extras = new Bundle();
             Uri uri = Uri.fromParts(PhoneAccount.SCHEME_TEL, connection.getAddress(), null);
             extras.putParcelable(TelecomManager.EXTRA_INCOMING_CALL_ADDRESS, uri);
         }
-        TelecomManager.from(mPhoneProxy.getContext()).addNewIncomingCall(
-                PhoneUtils.makePstnPhoneAccountHandle(mPhoneProxy), extras);
+
+        // Specifies the time the call was added. This is used by the dialer for analytics.
+        extras.putLong(TelecomManager.EXTRA_CALL_CREATED_TIME_MILLIS,
+                SystemClock.elapsedRealtime());
+
+        PhoneAccountHandle handle = findCorrectPhoneAccountHandle();
+        if (handle == null) {
+            try {
+                connection.hangup();
+            } catch (CallStateException e) {
+                // connection already disconnected. Do nothing
+            }
+        } else {
+            TelecomManager.from(mPhone.getContext()).addNewIncomingCall(handle, extras);
+        }
+    }
+
+    /**
+     * Returns the PhoneAccount associated with this {@code PstnIncomingCallNotifier}'s phone. On a
+     * device with No SIM or in airplane mode, it can return an Emergency-only PhoneAccount. If no
+     * PhoneAccount is registered with telecom, return null.
+     * @return A valid PhoneAccountHandle that is registered to Telecom or null if there is none
+     * registered.
+     */
+    private PhoneAccountHandle findCorrectPhoneAccountHandle() {
+        TelecomAccountRegistry telecomAccountRegistry = TelecomAccountRegistry.getInstance(null);
+        // Check to see if a the SIM PhoneAccountHandle Exists for the Call.
+        PhoneAccountHandle handle = PhoneUtils.makePstnPhoneAccountHandle(mPhone);
+        if (telecomAccountRegistry.hasAccountEntryForPhoneAccount(handle)) {
+            return handle;
+        }
+        // The PhoneAccountHandle does not match any PhoneAccount registered in Telecom.
+        // This is only known to happen if there is no SIM card in the device and the device
+        // receives an MT call while in ECM. Use the Emergency PhoneAccount to receive the account
+        // if it exists.
+        PhoneAccountHandle emergencyHandle =
+                PhoneUtils.makePstnPhoneAccountHandleWithPrefix(mPhone, "", true);
+        if(telecomAccountRegistry.hasAccountEntryForPhoneAccount(emergencyHandle)) {
+            Log.i(this, "Receiving MT call in ECM. Using Emergency PhoneAccount Instead.");
+            return emergencyHandle;
+        }
+        Log.w(this, "PhoneAccount not found.");
+        return null;
     }
 
     /**
diff --git a/src/com/android/services/telephony/PstnPhoneCapabilitiesNotifier.java b/src/com/android/services/telephony/PstnPhoneCapabilitiesNotifier.java
index 7a2adf1..f5b8719 100644
--- a/src/com/android/services/telephony/PstnPhoneCapabilitiesNotifier.java
+++ b/src/com/android/services/telephony/PstnPhoneCapabilitiesNotifier.java
@@ -16,10 +16,6 @@
 
 package com.android.services.telephony;
 
-import android.content.BroadcastReceiver;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
 import android.os.AsyncResult;
 import android.os.Handler;
 import android.os.Message;
@@ -28,9 +24,6 @@
 import android.telecom.TelecomManager;
 
 import com.android.internal.telephony.Phone;
-import com.android.internal.telephony.PhoneConstants;
-import com.android.internal.telephony.PhoneProxy;
-import com.android.internal.telephony.TelephonyIntents;
 import com.android.internal.util.Preconditions;
 import com.android.phone.PhoneUtils;
 
@@ -48,9 +41,8 @@
         public void onVideoCapabilitiesChanged(boolean isVideoCapable);
     }
 
-    private final PhoneProxy mPhoneProxy;
+    private final Phone mPhone;
     private final Listener mListener;
-    private Phone mPhoneBase;
 
     private final Handler mHandler = new Handler() {
         @Override
@@ -65,57 +57,33 @@
         }
     };
 
-    private final BroadcastReceiver mRatReceiver = new BroadcastReceiver() {
-        @Override
-        public void onReceive(Context context, Intent intent) {
-            String action = intent.getAction();
-            if (TelephonyIntents.ACTION_RADIO_TECHNOLOGY_CHANGED.equals(action)) {
-                String newPhone = intent.getStringExtra(PhoneConstants.PHONE_NAME_KEY);
-                Log.d(this, "Radio technology switched. Now %s is active.", newPhone);
-
-                registerForNotifications();
-            }
-        }
-    };
-
     /*package*/
-    PstnPhoneCapabilitiesNotifier(PhoneProxy phoneProxy, Listener listener) {
-        Preconditions.checkNotNull(phoneProxy);
+    PstnPhoneCapabilitiesNotifier(Phone phone, Listener listener) {
+        Preconditions.checkNotNull(phone);
 
-        mPhoneProxy = phoneProxy;
+        mPhone = phone;
         mListener = listener;
 
         registerForNotifications();
-
-        IntentFilter intentFilter =
-                new IntentFilter(TelephonyIntents.ACTION_RADIO_TECHNOLOGY_CHANGED);
-        mPhoneProxy.getContext().registerReceiver(mRatReceiver, intentFilter);
     }
 
     /*package*/
     void teardown() {
         unregisterForNotifications();
-        mPhoneProxy.getContext().unregisterReceiver(mRatReceiver);
     }
 
     private void registerForNotifications() {
-        Phone newPhone = mPhoneProxy.getActivePhone();
-        if (newPhone != mPhoneBase) {
-            unregisterForNotifications();
-
-            if (newPhone != null) {
-                Log.d(this, "Registering: " + newPhone);
-                mPhoneBase = newPhone;
-                mPhoneBase.registerForVideoCapabilityChanged(
-                        mHandler, EVENT_VIDEO_CAPABILITIES_CHANGED, null);
-            }
+        if (mPhone != null) {
+            Log.d(this, "Registering: " + mPhone);
+            mPhone.registerForVideoCapabilityChanged(mHandler, EVENT_VIDEO_CAPABILITIES_CHANGED,
+                    null);
         }
     }
 
     private void unregisterForNotifications() {
-        if (mPhoneBase != null) {
-            Log.d(this, "Unregistering: " + mPhoneBase);
-            mPhoneBase.unregisterForVideoCapabilityChanged(mHandler);
+        if (mPhone != null) {
+            Log.d(this, "Unregistering: " + mPhone);
+            mPhone.unregisterForVideoCapabilityChanged(mHandler);
         }
     }
 
@@ -124,14 +92,21 @@
             boolean isVideoCapable = (Boolean) ar.result;
             Log.d(this, "handleVideoCapabilitesChanged. Video capability - " + isVideoCapable);
             PhoneAccountHandle accountHandle =
-                    PhoneUtils.makePstnPhoneAccountHandle(mPhoneProxy);
+                    PhoneUtils.makePstnPhoneAccountHandle(mPhone);
 
-            TelecomManager telecomMgr = TelecomManager.from(mPhoneProxy.getContext());
+            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());
diff --git a/src/com/android/services/telephony/TelecomAccountRegistry.java b/src/com/android/services/telephony/TelecomAccountRegistry.java
index a07e2e6..3ed8356 100644
--- a/src/com/android/services/telephony/TelecomAccountRegistry.java
+++ b/src/com/android/services/telephony/TelecomAccountRegistry.java
@@ -18,7 +18,6 @@
 
 import android.content.ComponentName;
 import android.content.Context;
-import android.content.pm.PackageManager;
 import android.content.res.Resources;
 import android.graphics.Bitmap;
 import android.graphics.Canvas;
@@ -26,7 +25,9 @@
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.Icon;
 import android.net.Uri;
+import android.os.Bundle;
 import android.os.PersistableBundle;
+import android.os.ServiceManager;
 import android.telecom.PhoneAccount;
 import android.telecom.PhoneAccountHandle;
 import android.telecom.TelecomManager;
@@ -39,9 +40,9 @@
 import android.telephony.TelephonyManager;
 import android.text.TextUtils;
 
+import com.android.internal.telephony.IPhoneSubInfo;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneFactory;
-import com.android.internal.telephony.PhoneProxy;
 import com.android.phone.PhoneGlobals;
 import com.android.phone.PhoneUtils;
 import com.android.phone.R;
@@ -67,6 +68,7 @@
         private final PstnIncomingCallNotifier mIncomingCallNotifier;
         private final PstnPhoneCapabilitiesNotifier mPhoneCapabilitiesNotifier;
         private boolean mIsVideoCapable;
+        private boolean mIsVideoPresenceSupported;
         private boolean mIsVideoPauseSupported;
         private boolean mIsMergeCallSupported;
 
@@ -75,8 +77,8 @@
             mAccount = registerPstnPhoneAccount(isEmergency, isDummy);
             Log.i(this, "Registered phoneAccount: %s with handle: %s",
                     mAccount, mAccount.getAccountHandle());
-            mIncomingCallNotifier = new PstnIncomingCallNotifier((PhoneProxy) mPhone);
-            mPhoneCapabilitiesNotifier = new PstnPhoneCapabilitiesNotifier((PhoneProxy) mPhone,
+            mIncomingCallNotifier = new PstnIncomingCallNotifier((Phone) mPhone);
+            mPhoneCapabilitiesNotifier = new PstnPhoneCapabilitiesNotifier((Phone) mPhone,
                     this);
         }
 
@@ -100,12 +102,11 @@
             int subId = mPhone.getSubId();
             int color = PhoneAccount.NO_HIGHLIGHT_COLOR;
             int slotId = SubscriptionManager.INVALID_SIM_SLOT_INDEX;
-            String line1Number = mTelephonyManager.getLine1NumberForSubscriber(subId);
+            String line1Number = mTelephonyManager.getLine1Number(subId);
             if (line1Number == null) {
                 line1Number = "";
             }
-            String subNumber = mPhone.getPhoneSubInfo().getLine1Number(
-                    mPhone.getContext().getOpPackageName());
+            String subNumber = mPhone.getLine1Number();
             if (subNumber == null) {
                 subNumber = "";
             }
@@ -171,9 +172,21 @@
             if (mIsVideoCapable) {
                 capabilities |= PhoneAccount.CAPABILITY_VIDEO_CALLING;
             }
+
+            mIsVideoPresenceSupported = isCarrierVideoPresenceSupported();
+            if (mIsVideoCapable && mIsVideoPresenceSupported) {
+                capabilities |= PhoneAccount.CAPABILITY_VIDEO_CALLING_RELIES_ON_PRESENCE;
+            }
+
+            if (mIsVideoCapable && isCarrierEmergencyVideoCallsAllowed()) {
+                capabilities |= PhoneAccount.CAPABILITY_EMERGENCY_VIDEO_CALLING;
+            }
+
             mIsVideoPauseSupported = isCarrierVideoPauseSupported();
+            Bundle instantLetteringExtras = null;
             if (isCarrierInstantLetteringSupported()) {
                 capabilities |= PhoneAccount.CAPABILITY_CALL_SUBJECT;
+                instantLetteringExtras = getPhoneAccountExtras();
             }
             mIsMergeCallSupported = isCarrierMergeCallSupported();
 
@@ -209,6 +222,7 @@
                     .setShortDescription(description)
                     .setSupportedUriSchemes(Arrays.asList(
                             PhoneAccount.SCHEME_TEL, PhoneAccount.SCHEME_VOICEMAIL))
+                    .setExtras(instantLetteringExtras)
                     .build();
 
             // Register with Telecom and put into the account entry.
@@ -234,6 +248,18 @@
         }
 
         /**
+         * Determines from carrier configuration whether RCS presence indication for video calls is
+         * supported.
+         *
+         * @return {@code true} if RCS presence indication for video calls is supported.
+         */
+        private boolean isCarrierVideoPresenceSupported() {
+            PersistableBundle b =
+                    PhoneGlobals.getInstance().getCarrierConfigForSubId(mPhone.getSubId());
+            return b.getBoolean(CarrierConfigManager.KEY_USE_RCS_PRESENCE_BOOL);
+        }
+
+        /**
          * Determines from carrier config whether instant lettering is supported.
          *
          * @return {@code true} if instant lettering is supported, {@code false} otherwise.
@@ -256,6 +282,37 @@
         }
 
         /**
+         * Determines from carrier config whether emergency video calls are supported.
+         *
+         * @return {@code true} if emergency video calls are allowed, {@code false} otherwise.
+         */
+        private boolean isCarrierEmergencyVideoCallsAllowed() {
+            PersistableBundle b =
+                    PhoneGlobals.getInstance().getCarrierConfigForSubId(mPhone.getSubId());
+            return b.getBoolean(CarrierConfigManager.KEY_ALLOW_EMERGENCY_VIDEO_CALLS_BOOL);
+        }
+
+        /**
+         * @return The {@linke PhoneAccount} extras associated with the current subscription.
+         */
+        private Bundle getPhoneAccountExtras() {
+            PersistableBundle b =
+                    PhoneGlobals.getInstance().getCarrierConfigForSubId(mPhone.getSubId());
+
+            int instantLetteringMaxLength = b.getInt(
+                    CarrierConfigManager.KEY_CARRIER_INSTANT_LETTERING_LENGTH_LIMIT_INT);
+            String instantLetteringEncoding = b.getString(
+                    CarrierConfigManager.KEY_CARRIER_INSTANT_LETTERING_ENCODING_STRING);
+
+            Bundle phoneAccountExtras = new Bundle();
+            phoneAccountExtras.putInt(PhoneAccount.EXTRA_CALL_SUBJECT_MAX_LENGTH,
+                    instantLetteringMaxLength);
+            phoneAccountExtras.putString(PhoneAccount.EXTRA_CALL_SUBJECT_CHARACTER_ENCODING,
+                    instantLetteringEncoding);
+            return phoneAccountExtras;
+        }
+
+        /**
          * Receives callback from {@link PstnPhoneCapabilitiesNotifier} when the video capabilities
          * have changed.
          *
@@ -373,6 +430,13 @@
     }
 
     /**
+     * @return Reference to the {@code TelecomAccountRegistry}'s subscription manager.
+     */
+    SubscriptionManager getSubscriptionManager() {
+        return mSubscriptionManager;
+    }
+
+    /**
      * Returns the address (e.g. the phone number) associated with a subscription.
      *
      * @param handle The phone account handle to find the subscription address for.
@@ -413,7 +477,7 @@
      * @param handle The {@link PhoneAccountHandle}.
      * @return {@code True} if an entry exists.
      */
-    private boolean hasAccountEntryForPhoneAccount(PhoneAccountHandle handle) {
+    boolean hasAccountEntryForPhoneAccount(PhoneAccountHandle handle) {
         for (AccountEntry entry : mAccounts) {
             if (entry.getPhoneAccountHandle().equals(handle)) {
                 return true;
diff --git a/src/com/android/services/telephony/TelephonyConferenceController.java b/src/com/android/services/telephony/TelephonyConferenceController.java
index 9724a32..7da9ea5 100644
--- a/src/com/android/services/telephony/TelephonyConferenceController.java
+++ b/src/com/android/services/telephony/TelephonyConferenceController.java
@@ -34,8 +34,6 @@
 import com.android.phone.PhoneUtils;
 
 import com.android.internal.telephony.Call;
-import com.android.internal.telephony.gsm.GsmConnection;
-import com.android.internal.telephony.imsphone.ImsPhoneConnection;
 
 /**
  * Maintains a list of all the known TelephonyConnections connections and controls GSM and
@@ -246,7 +244,18 @@
             } else {
                 if (allConnInService) {
                     mTriggerRecalculate = false;
-                    mTelephonyConference = new TelephonyConference(null);
+
+                    // Get PhoneAccount from one of the conferenced connections and use it to set
+                    // the phone account on the conference.
+                    PhoneAccountHandle phoneAccountHandle = null;
+                    if (!conferencedConnections.isEmpty()) {
+                        TelephonyConnection telephonyConnection =
+                                (TelephonyConnection) conferencedConnections.iterator().next();
+                        phoneAccountHandle = PhoneUtils.makePstnPhoneAccountHandle(
+                                telephonyConnection.getPhone());
+                    }
+
+                    mTelephonyConference = new TelephonyConference(phoneAccountHandle);
                     for (Connection connection : conferencedConnections) {
                         Log.d(this, "Adding a connection to a conference call: %s %s",
                                 mTelephonyConference, connection);
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
index d0da59d..21c71d2 100644
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -28,15 +28,19 @@
 import android.telecom.Connection;
 import android.telecom.PhoneAccount;
 import android.telecom.StatusHints;
+import android.telecom.TelecomManager;
+import android.telephony.PhoneNumberUtils;
+import android.util.Pair;
 
 import com.android.ims.ImsCallProfile;
 import com.android.internal.telephony.Call;
 import com.android.internal.telephony.CallStateException;
+import com.android.internal.telephony.Connection.Capability;
 import com.android.internal.telephony.Connection.PostDialListener;
+import com.android.internal.telephony.PhoneConstants;
 import com.android.internal.telephony.gsm.SuppServiceNotification;
 
 import com.android.internal.telephony.Phone;
-import com.android.internal.telephony.imsphone.ImsPhoneConnection;
 import com.android.phone.R;
 
 import java.lang.Override;
@@ -61,7 +65,6 @@
     private static final int MSG_MULTIPARTY_STATE_CHANGED = 5;
     private static final int MSG_CONFERENCE_MERGE_FAILED = 6;
     private static final int MSG_SUPP_SERVICE_NOTIFY = 7;
-    private static final int MSG_CONNECTION_EXTRAS_CHANGED = 8;
 
     /**
      * Mappings from {@link com.android.internal.telephony.Connection} extras keys to their
@@ -69,7 +72,13 @@
      */
     private static final Map<String, String> sExtrasMap = createExtrasMap();
 
-    private SuppServiceNotification mSsNotification = null;
+    private static final int MSG_SET_VIDEO_STATE = 8;
+    private static final int MSG_SET_VIDEO_PROVIDER = 9;
+    private static final int MSG_SET_AUDIO_QUALITY = 10;
+    private static final int MSG_SET_CONFERENCE_PARTICIPANTS = 11;
+    private static final int MSG_CONNECTION_EXTRAS_CHANGED = 12;
+    private static final int MSG_SET_ORIGNAL_CONNECTION_CAPABILITIES = 13;
+    private static final int MSG_ON_HOLD_TONE = 14;
 
     private final Handler mHandler = new Handler() {
         @Override
@@ -128,25 +137,75 @@
                 case MSG_SUPP_SERVICE_NOTIFY:
                     Log.v(TelephonyConnection.this, "MSG_SUPP_SERVICE_NOTIFY on phoneId : "
                             +getPhone().getPhoneId());
+                    SuppServiceNotification mSsNotification = null;
                     if (msg.obj != null && ((AsyncResult) msg.obj).result != null) {
                         mSsNotification =
                                 (SuppServiceNotification)((AsyncResult) msg.obj).result;
                         if (mOriginalConnection != null && mSsNotification.history != null) {
-                            Bundle extras = getExtras();
-                            if (extras != null) {
-                                Log.v(TelephonyConnection.this,
-                                        "Updating call history info in extras.");
-                                extras.putStringArrayList(Connection.EXTRA_LAST_FORWARDED_NUMBER,
-                                        new ArrayList(Arrays.asList(mSsNotification.history)));
-                                setExtras(extras);
-                            }
+                            Bundle lastForwardedNumber = new Bundle();
+                            Log.v(TelephonyConnection.this,
+                                    "Updating call history info in extras.");
+                            lastForwardedNumber.putStringArrayList(
+                                Connection.EXTRA_LAST_FORWARDED_NUMBER,
+                                new ArrayList(Arrays.asList(mSsNotification.history)));
+                            putExtras(lastForwardedNumber);
                         }
                     }
                     break;
+
+                case MSG_SET_VIDEO_STATE:
+                    int videoState = (int) msg.obj;
+                    setVideoState(videoState);
+                    break;
+
+                case MSG_SET_VIDEO_PROVIDER:
+                    VideoProvider videoProvider = (VideoProvider) msg.obj;
+                    setVideoProvider(videoProvider);
+                    break;
+
+                case MSG_SET_AUDIO_QUALITY:
+                    int audioQuality = (int) msg.obj;
+                    setAudioQuality(audioQuality);
+                    break;
+
+                case MSG_SET_CONFERENCE_PARTICIPANTS:
+                    List<ConferenceParticipant> participants = (List<ConferenceParticipant>) msg.obj;
+                    updateConferenceParticipants(participants);
+                    break;
+
                 case MSG_CONNECTION_EXTRAS_CHANGED:
                     final Bundle extras = (Bundle) msg.obj;
                     updateExtras(extras);
                     break;
+
+                case MSG_SET_ORIGNAL_CONNECTION_CAPABILITIES:
+                    setOriginalConnectionCapabilities(msg.arg1);
+                    break;
+
+                case MSG_ON_HOLD_TONE:
+                    AsyncResult asyncResult = (AsyncResult) msg.obj;
+                    Pair<com.android.internal.telephony.Connection, Boolean> heldInfo =
+                            (Pair<com.android.internal.telephony.Connection, Boolean>)
+                                    asyncResult.result;
+
+                    // Determines if the hold tone is starting or stopping.
+                    boolean playTone = ((Boolean) (heldInfo.second)).booleanValue();
+
+                    // Determine which connection the hold tone is stopping or starting for
+                    com.android.internal.telephony.Connection heldConnection = heldInfo.first;
+
+                    // Only start or stop the hold tone if this is the connection which is starting
+                    // or stopping the hold tone.
+                    if (heldConnection == mOriginalConnection) {
+                        // If starting the hold tone, send a connection event to Telecom which will
+                        // cause it to play the on hold tone.
+                        if (playTone) {
+                            sendConnectionEvent(EVENT_ON_HOLD_TONE_START, null);
+                        } else {
+                            sendConnectionEvent(EVENT_ON_HOLD_TONE_END, null);
+                        }
+                    }
+                    break;
             }
         }
     };
@@ -185,29 +244,18 @@
             new com.android.internal.telephony.Connection.ListenerBase() {
         @Override
         public void onVideoStateChanged(int videoState) {
-            setVideoState(videoState);
+            mHandler.obtainMessage(MSG_SET_VIDEO_STATE, videoState).sendToTarget();
         }
 
-        /**
-         * The {@link com.android.internal.telephony.Connection} has reported a change in local
-         * video capability.
-         *
-         * @param capable True if capable.
+        /*
+         * The {@link com.android.internal.telephony.Connection} has reported a change in
+         * connection capability.
+         * @param capabilities bit mask containing voice or video or both capabilities.
          */
         @Override
-        public void onLocalVideoCapabilityChanged(boolean capable) {
-            setLocalVideoCapable(capable);
-        }
-
-        /**
-         * The {@link com.android.internal.telephony.Connection} has reported a change in remote
-         * video capability.
-         *
-         * @param capable True if capable.
-         */
-        @Override
-        public void onRemoteVideoCapabilityChanged(boolean capable) {
-            setRemoteVideoCapable(capable);
+        public void onConnectionCapabilitiesChanged(int capabilities) {
+            mHandler.obtainMessage(MSG_SET_ORIGNAL_CONNECTION_CAPABILITIES,
+                    capabilities, 0).sendToTarget();
         }
 
         /**
@@ -218,7 +266,7 @@
          */
         @Override
         public void onVideoProviderChanged(VideoProvider videoProvider) {
-            setVideoProvider(videoProvider);
+            mHandler.obtainMessage(MSG_SET_VIDEO_PROVIDER, videoProvider).sendToTarget();
         }
 
         /**
@@ -240,7 +288,7 @@
          */
         @Override
         public void onAudioQualityChanged(int audioQuality) {
-            setAudioQuality(audioQuality);
+            mHandler.obtainMessage(MSG_SET_AUDIO_QUALITY, audioQuality).sendToTarget();
         }
         /**
          * Handles a change in the state of conference participant(s), as reported by the
@@ -250,7 +298,7 @@
          */
         @Override
         public void onConferenceParticipantsChanged(List<ConferenceParticipant> participants) {
-            updateConferenceParticipants(participants);
+            mHandler.obtainMessage(MSG_SET_CONFERENCE_PARTICIPANTS, participants).sendToTarget();
         }
 
         /*
@@ -276,11 +324,23 @@
         public void onExtrasChanged(Bundle extras) {
             mHandler.obtainMessage(MSG_CONNECTION_EXTRAS_CHANGED, extras).sendToTarget();
         }
+
+        /**
+         * Handles the phone exiting ECM mode by updating the connection capabilities.  During an
+         * ongoing call, if ECM mode is exited, we will re-enable mute for CDMA calls.
+         */
+        @Override
+        public void onExitedEcmMode() {
+            handleExitedEcmMode();
+        }
     };
 
-    private com.android.internal.telephony.Connection mOriginalConnection;
-    private Call.State mOriginalConnectionState = Call.State.IDLE;
+    protected com.android.internal.telephony.Connection mOriginalConnection;
+    private Call.State mConnectionState = Call.State.IDLE;
     private Bundle mOriginalConnectionExtras = new Bundle();
+    private boolean mIsStateOverridden = false;
+    private Call.State mOriginalConnectionState = Call.State.IDLE;
+    private Call.State mConnectionOverriddenState = Call.State.IDLE;
 
     private boolean mWasImsConnection;
 
@@ -290,39 +350,33 @@
     private boolean mIsMultiParty = false;
 
     /**
-     * Determines if the {@link TelephonyConnection} has local video capabilities.
-     * This is used when {@link TelephonyConnection#updateConnectionCapabilities()}} is called,
-     * ensuring the appropriate capabilities are set.  Since capabilities
-     * can be rebuilt at any time it is necessary to track the video capabilities between rebuild.
-     * The capabilities (including video capabilities) are communicated to the telecom
-     * layer.
+     * The {@link com.android.internal.telephony.Connection} capabilities associated with the
+     * current {@link #mOriginalConnection}.
      */
-    private boolean mLocalVideoCapable;
-
-    /**
-     * Determines if the {@link TelephonyConnection} has remote video capabilities.
-     * This is used when {@link TelephonyConnection#updateConnectionCapabilities()}} is called,
-     * ensuring the appropriate capabilities are set.  Since capabilities can be rebuilt at any time
-     * it is necessary to track the video capabilities between rebuild. The capabilities (including
-     * video capabilities) are communicated to the telecom layer.
-     */
-    private boolean mRemoteVideoCapable;
+    private int mOriginalConnectionCapabilities;
 
     /**
      * Determines if the {@link TelephonyConnection} is using wifi.
-     * This is used when {@link TelephonyConnection#updateConnectionCapabilities} is called to
-     * indicate wheter a call has the {@link Connection#CAPABILITY_WIFI} capability.
+     * This is used when {@link TelephonyConnection#updateConnectionProperties()} is called to
+     * indicate whether a call has the {@link Connection#PROPERTY_WIFI} property.
      */
     private boolean mIsWifi;
 
     /**
      * Determines the audio quality is high for the {@link TelephonyConnection}.
-     * This is used when {@link TelephonyConnection#updateConnectionCapabilities}} is called to
-     * indicate whether a call has the {@link Connection#CAPABILITY_HIGH_DEF_AUDIO} capability.
+     * This is used when {@link TelephonyConnection#updateConnectionProperties}} is called to
+     * indicate whether a call has the {@link Connection#PROPERTY_HIGH_DEF_AUDIO} property.
      */
     private boolean mHasHighDefAudio;
 
     /**
+     * Indicates that the connection should be treated as an emergency call because the
+     * number dialed matches an internal list of emergency numbers. Does not guarantee whether
+     * the network will treat the call as an emergency call.
+     */
+    private boolean mTreatAsEmergencyCall;
+
+    /**
      * For video calls, indicates whether the outgoing video for the call can be paused using
      * the {@link android.telecom.VideoProfile#STATE_PAUSED} VideoState.
      */
@@ -339,7 +393,9 @@
     private final Set<TelephonyConnectionListener> mTelephonyListeners = Collections.newSetFromMap(
             new ConcurrentHashMap<TelephonyConnectionListener, Boolean>(8, 0.9f, 1));
 
-    protected TelephonyConnection(com.android.internal.telephony.Connection originalConnection) {
+    protected TelephonyConnection(com.android.internal.telephony.Connection originalConnection,
+            String callId) {
+        setTelecomCallId(callId);
         if (originalConnection != null) {
             setOriginalConnection(originalConnection);
         }
@@ -450,11 +506,27 @@
         }
     }
 
+    /**
+     * Handles requests to pull an external call.
+     */
+    @Override
+    public void onPullExternalCall() {
+        if ((getConnectionProperties() & Connection.PROPERTY_IS_EXTERNAL_CALL) !=
+                Connection.PROPERTY_IS_EXTERNAL_CALL) {
+            Log.w(this, "onPullExternalCall - cannot pull non-external call");
+            return;
+        }
+
+        if (mOriginalConnection != null) {
+            mOriginalConnection.pullExternalCall();
+        }
+    }
+
     public void performHold() {
         Log.v(this, "performHold");
         // TODO: Can dialing calls be put on hold as well since they take up the
         // foreground call slot?
-        if (Call.State.ACTIVE == mOriginalConnectionState) {
+        if (Call.State.ACTIVE == mConnectionState) {
             Log.v(this, "Holding active call");
             try {
                 Phone phone = mOriginalConnection.getCall().getPhone();
@@ -485,7 +557,7 @@
 
     public void performUnhold() {
         Log.v(this, "performUnhold");
-        if (Call.State.HOLDING == mOriginalConnectionState) {
+        if (Call.State.HOLDING == mConnectionState) {
             try {
                 // Here's the deal--Telephony hold/unhold is weird because whenever there exists
                 // more than one call, one of them must always be active. In other words, if you
@@ -532,43 +604,34 @@
     }
 
     /**
-     * Builds call capabilities common to all TelephonyConnections. Namely, apply IMS-based
+     * Builds connection capabilities common to all TelephonyConnections. Namely, apply IMS-based
      * capabilities.
      */
     protected int buildConnectionCapabilities() {
         int callCapabilities = 0;
+        if (mOriginalConnection != null && mOriginalConnection.isIncoming()) {
+            callCapabilities |= CAPABILITY_SPEED_UP_MT_AUDIO;
+        }
         if (isImsConnection()) {
-            if (mOriginalConnection.isIncoming()) {
-                callCapabilities |= CAPABILITY_SPEED_UP_MT_AUDIO;
-            }
-            callCapabilities |= CAPABILITY_SUPPORT_HOLD;
-            if (getState() == STATE_ACTIVE || getState() == STATE_HOLDING) {
-                callCapabilities |= CAPABILITY_HOLD;
+            if (!shouldTreatAsEmergencyCall()) {
+                callCapabilities |= CAPABILITY_SUPPORT_HOLD;
+                if (getState() == STATE_ACTIVE || getState() == STATE_HOLDING) {
+                    callCapabilities |= CAPABILITY_HOLD;
+                }
             }
         }
 
-        // If the phone is in ECM mode, mark the call to indicate that the callback number should be
-        // shown.
-        Phone phone = getPhone();
-        if (phone != null && phone.isInEcm()) {
-            callCapabilities |= CAPABILITY_SHOW_CALLBACK_NUMBER;
-        }
         return callCapabilities;
     }
 
     protected final void updateConnectionCapabilities() {
         int newCapabilities = buildConnectionCapabilities();
 
-        newCapabilities = changeCapability(newCapabilities,
-                CAPABILITY_SUPPORTS_VT_REMOTE_BIDIRECTIONAL, mRemoteVideoCapable);
-        newCapabilities = changeCapability(newCapabilities,
-                CAPABILITY_SUPPORTS_VT_LOCAL_BIDIRECTIONAL, mLocalVideoCapable);
-        newCapabilities = changeCapability(newCapabilities,
-                CAPABILITY_HIGH_DEF_AUDIO, mHasHighDefAudio);
-        newCapabilities = changeCapability(newCapabilities, CAPABILITY_WIFI, mIsWifi);
-        newCapabilities = changeCapability(newCapabilities, CAPABILITY_CAN_PAUSE_VIDEO,
-                mIsVideoPauseSupported && mRemoteVideoCapable && mLocalVideoCapable);
-
+        newCapabilities = applyOriginalConnectionCapabilities(newCapabilities);
+        newCapabilities = changeBitmask(newCapabilities, CAPABILITY_CAN_PAUSE_VIDEO,
+                mIsVideoPauseSupported && isVideoCapable());
+        newCapabilities = changeBitmask(newCapabilities, CAPABILITY_CAN_PULL_CALL,
+                isExternalConnection() && isPullable());
         newCapabilities = applyConferenceTerminationCapabilities(newCapabilities);
 
         if (getConnectionCapabilities() != newCapabilities) {
@@ -576,8 +639,38 @@
         }
     }
 
+    protected int buildConnectionProperties() {
+        int connectionProperties = 0;
+
+        // If the phone is in ECM mode, mark the call to indicate that the callback number should be
+        // shown.
+        Phone phone = getPhone();
+        if (phone != null && phone.isInEcm()) {
+            connectionProperties |= PROPERTY_SHOW_CALLBACK_NUMBER;
+        }
+
+        return connectionProperties;
+    }
+
+    /**
+     * Updates the properties of the connection.
+     */
+    protected final void updateConnectionProperties() {
+        int newProperties = buildConnectionProperties();
+
+        newProperties = changeBitmask(newProperties, PROPERTY_HIGH_DEF_AUDIO, mHasHighDefAudio);
+        newProperties = changeBitmask(newProperties, PROPERTY_WIFI, mIsWifi);
+        newProperties = changeBitmask(newProperties, PROPERTY_IS_EXTERNAL_CALL,
+                isExternalConnection());
+
+        if (getConnectionProperties() != newProperties) {
+            setConnectionProperties(newProperties);
+        }
+    }
+
     protected final void updateAddress() {
         updateConnectionCapabilities();
+        updateConnectionProperties();
         if (mOriginalConnection != null) {
             Uri address = getAddressFromNumber(mOriginalConnection.getAddress());
             int presentation = mOriginalConnection.getNumberPresentation();
@@ -594,6 +687,10 @@
                 Log.v(this, "updateAddress, caller display name changed");
                 setCallerDisplayName(name, namePresentation);
             }
+
+            if (PhoneNumberUtils.isEmergencyNumber(mOriginalConnection.getAddress())) {
+                mTreatAsEmergencyCall = true;
+            }
         }
     }
 
@@ -606,6 +703,7 @@
         clearOriginalConnection();
         mOriginalConnectionExtras.clear();
         mOriginalConnection = originalConnection;
+        mOriginalConnection.setTelecomCallId(getTelecomCallId());
         getPhone().registerForPreciseCallStateChanged(
                 mHandler, MSG_PRECISE_CALL_STATE_CHANGED, null);
         getPhone().registerForHandoverStateChanged(
@@ -613,21 +711,28 @@
         getPhone().registerForRingbackTone(mHandler, MSG_RINGBACK_TONE, null);
         getPhone().registerForDisconnect(mHandler, MSG_DISCONNECT, null);
         getPhone().registerForSuppServiceNotification(mHandler, MSG_SUPP_SERVICE_NOTIFY, null);
+        getPhone().registerForOnHoldTone(mHandler, MSG_ON_HOLD_TONE, null);
         mOriginalConnection.addPostDialListener(mPostDialListener);
         mOriginalConnection.addListener(mOriginalConnectionListener);
 
         // Set video state and capabilities
         setVideoState(mOriginalConnection.getVideoState());
-        setLocalVideoCapable(mOriginalConnection.isLocalVideoCapable());
-        setRemoteVideoCapable(mOriginalConnection.isRemoteVideoCapable());
+        setOriginalConnectionCapabilities(mOriginalConnection.getConnectionCapabilities());
         setWifi(mOriginalConnection.isWifi());
         setVideoProvider(mOriginalConnection.getVideoProvider());
         setAudioQuality(mOriginalConnection.getAudioQuality());
+        setTechnologyTypeExtra();
 
         // Post update of extras to the handler; extras are updated via the handler to ensure thread
-        // safety.
-        mHandler.obtainMessage(MSG_CONNECTION_EXTRAS_CHANGED,
-                mOriginalConnection.getConnectionExtras()).sendToTarget();
+        // safety. The Extras Bundle is cloned in case the original extras are modified while they
+        // are being added to mOriginalConnectionExtras in updateExtras.
+        Bundle connExtras = mOriginalConnection.getConnectionExtras();
+            mHandler.obtainMessage(MSG_CONNECTION_EXTRAS_CHANGED, connExtras == null ? null :
+                    new Bundle(connExtras)).sendToTarget();
+
+        if (PhoneNumberUtils.isEmergencyNumber(mOriginalConnection.getAddress())) {
+            mTreatAsEmergencyCall = true;
+        }
 
         if (isImsConnection()) {
             mWasImsConnection = true;
@@ -646,6 +751,24 @@
     }
 
     /**
+     * Sets the EXTRA_CALL_TECHNOLOGY_TYPE extra on the connection to report back to Telecom.
+     */
+    private void setTechnologyTypeExtra() {
+        if (getPhone() != null) {
+            putExtra(TelecomManager.EXTRA_CALL_TECHNOLOGY_TYPE, getPhone().getPhoneType());
+        }
+    }
+
+    /**
+     * Whether the connection should be treated as an emergency.
+     * @return {@code true} if the connection should be treated as an emergency call based
+     * on the number dialed, {@code false} otherwise.
+     */
+    protected boolean shouldTreatAsEmergencyCall() {
+        return mTreatAsEmergencyCall;
+    }
+
+    /**
      * Un-sets the underlying radio connection.
      */
     void clearOriginalConnection() {
@@ -656,6 +779,7 @@
                 getPhone().unregisterForHandoverStateChanged(mHandler);
                 getPhone().unregisterForDisconnect(mHandler);
                 getPhone().unregisterForSuppServiceNotification(mHandler);
+                getPhone().unregisterForOnHoldTone(mHandler);
             }
             mOriginalConnection.removePostDialListener(mPostDialListener);
             mOriginalConnection.removeListener(mOriginalConnectionListener);
@@ -770,6 +894,9 @@
         return true;
     }
 
+    // Make sure the extras being passed into this method is a COPY of the original extras Bundle.
+    // We do not want the extras to be cleared or modified during mOriginalConnectionExtras.putAll
+    // below.
     protected void updateExtras(Bundle extras) {
         if (mOriginalConnection != null) {
             if (extras != null) {
@@ -799,12 +926,7 @@
                     }
 
                     // Ensure extras are propagated to Telecom.
-                    Bundle connectionExtras = getExtras();
-                    if (connectionExtras == null) {
-                        connectionExtras = new Bundle();
-                    }
-                    connectionExtras.putAll(mOriginalConnectionExtras);
-                    setExtras(connectionExtras);
+                    putExtras(mOriginalConnectionExtras);
                 } else {
                     Log.d(this, "Extras update not required");
                 }
@@ -835,19 +957,35 @@
         return true;
     }
 
-    void updateState() {
-       updateState(false);
+    void setStateOverride(Call.State state) {
+        mIsStateOverridden = true;
+        mConnectionOverriddenState = state;
+        // Need to keep track of the original connection's state before override.
+        mOriginalConnectionState = mOriginalConnection.getState();
+        updateStateInternal();
     }
 
-    void updateState(boolean force) {
+    void resetStateOverride() {
+        mIsStateOverridden = false;
+        updateStateInternal();
+    }
+
+    void updateStateInternal() {
         if (mOriginalConnection == null) {
             return;
         }
+        Call.State newState;
+        // If the state is overridden and the state of the original connection hasn't changed since,
+        // then we continue in the overridden state, else we go to the original connection's state.
+        if (mIsStateOverridden && mOriginalConnectionState == mOriginalConnection.getState()) {
+            newState = mConnectionOverriddenState;
+        } else {
+            newState = mOriginalConnection.getState();
+        }
+        Log.v(this, "Update state from %s to %s for %s", mConnectionState, newState, this);
 
-        Call.State newState = mOriginalConnection.getState();
-        Log.v(this, "Update state from %s to %s for %s", mOriginalConnectionState, newState, this);
-        if (mOriginalConnectionState != newState || force) {
-            mOriginalConnectionState = newState;
+        if (mConnectionState != newState) {
+            mConnectionState = newState;
             switch (newState) {
                 case IDLE:
                     break;
@@ -875,8 +1013,17 @@
                     break;
             }
         }
+    }
+
+    void updateState() {
+        if (mOriginalConnection == null) {
+            return;
+        }
+
+        updateStateInternal();
         updateStatusHints();
         updateConnectionCapabilities();
+        updateConnectionProperties();
         updateAddress();
         updateMultiparty();
     }
@@ -915,7 +1062,7 @@
      * Note: We post this to the mHandler to ensure that if a conference must be created as a
      * result of the multiparty state change, the conference creation happens on the correct
      * thread.  This ensures that the thread check in
-     * {@link com.android.internal.telephony.PhoneBase#checkCorrectThread(android.os.Handler)}
+     * {@link com.android.internal.telephony.Phone#checkCorrectThread(android.os.Handler)}
      * does not fire.
      *
      * @param isMultiParty {@code true} if this connection is multiparty, {@code false} otherwise.
@@ -957,10 +1104,51 @@
     }
 
     /**
-     * Applies capabilities specific to conferences termination to the
-     * {@code CallCapabilities} bit-mask.
+     * Determines if the current connection is video capable.
      *
-     * @param capabilities The {@code CallCapabilities} bit-mask.
+     * A connection is deemed to be video capable if the original connection capabilities state that
+     * both local and remote video is supported.
+     *
+     * @return {@code true} if the connection is video capable, {@code false} otherwise.
+     */
+    private boolean isVideoCapable() {
+        return can(mOriginalConnectionCapabilities, Capability.SUPPORTS_VT_LOCAL_BIDIRECTIONAL)
+                && can(mOriginalConnectionCapabilities,
+                Capability.SUPPORTS_VT_REMOTE_BIDIRECTIONAL);
+    }
+
+    /**
+     * Determines if the current connection is an external connection.
+     *
+     * A connection is deemed to be external if the original connection capabilities state that it
+     * is.
+     *
+     * @return {@code true} if the connection is external, {@code false} otherwise.
+     */
+    private boolean isExternalConnection() {
+        return can(mOriginalConnectionCapabilities, Capability.IS_EXTERNAL_CONNECTION)
+                && can(mOriginalConnectionCapabilities,
+                Capability.IS_EXTERNAL_CONNECTION);
+    }
+
+    /**
+     * Determines if the current connection is pullable.
+     *
+     * A connection is deemed to be pullable if the original connection capabilities state that it
+     * is.
+     *
+     * @return {@code true} if the connection is pullable, {@code false} otherwise.
+     */
+    private boolean isPullable() {
+        return can(mOriginalConnectionCapabilities, Capability.IS_EXTERNAL_CONNECTION)
+                && can(mOriginalConnectionCapabilities, Capability.IS_PULLABLE);
+    }
+
+    /**
+     * Applies capabilities specific to conferences termination to the
+     * {@code ConnectionCapabilities} bit-mask.
+     *
+     * @param capabilities The {@code ConnectionCapabilities} bit-mask.
      * @return The capabilities with the IMS conference capabilities applied.
      */
     private int applyConferenceTerminationCapabilities(int capabilities) {
@@ -977,52 +1165,52 @@
     }
 
     /**
-     * Returns the local video capability state for the connection.
+     * Stores the new original connection capabilities, and applies them to the current connection,
+     * notifying any listeners as necessary.
      *
-     * @return {@code True} if the connection has local video capabilities.
+     * @param connectionCapabilities The original connection capabilties.
      */
-    public boolean isLocalVideoCapable() {
-        return mLocalVideoCapable;
-    }
-
-    /**
-     * Returns the remote video capability state for the connection.
-     *
-     * @return {@code True} if the connection has remote video capabilities.
-     */
-    public boolean isRemoteVideoCapable() {
-        return mRemoteVideoCapable;
-    }
-
-    /**
-     * Sets whether video capability is present locally.  Used during rebuild of the
-     * capabilities to set the video call capabilities.
-     *
-     * @param capable {@code True} if video capable.
-     */
-    public void setLocalVideoCapable(boolean capable) {
-        mLocalVideoCapable = capable;
+    public void setOriginalConnectionCapabilities(int connectionCapabilities) {
+        mOriginalConnectionCapabilities = connectionCapabilities;
         updateConnectionCapabilities();
+        updateConnectionProperties();
     }
 
     /**
-     * Sets whether video capability is present remotely.  Used during rebuild of the
-     * capabilities to set the video call capabilities.
+     * Called to apply the capabilities present in the {@link #mOriginalConnection} to this
+     * {@link Connection}.  Provides a mapping between the capabilities present in the original
+     * connection (see {@link com.android.internal.telephony.Connection.Capability}) and those in
+     * this {@link Connection}.
      *
-     * @param capable {@code True} if video capable.
+     * @param capabilities The capabilities bitmask from the {@link Connection}.
+     * @return the capabilities bitmask with the original connection capabilities remapped and
+     *      applied.
      */
-    public void setRemoteVideoCapable(boolean capable) {
-        mRemoteVideoCapable = capable;
-        updateConnectionCapabilities();
+    public int applyOriginalConnectionCapabilities(int capabilities) {
+        // We only support downgrading to audio if both the remote and local side support
+        // downgrading to audio.
+        boolean supportsDowngradeToAudio = can(mOriginalConnectionCapabilities,
+                Capability.SUPPORTS_DOWNGRADE_TO_VOICE_LOCAL |
+                        Capability.SUPPORTS_DOWNGRADE_TO_VOICE_REMOTE);
+        capabilities = changeBitmask(capabilities,
+                CAPABILITY_CANNOT_DOWNGRADE_VIDEO_TO_AUDIO, !supportsDowngradeToAudio);
+
+        capabilities = changeBitmask(capabilities, CAPABILITY_SUPPORTS_VT_REMOTE_BIDIRECTIONAL,
+                can(mOriginalConnectionCapabilities, Capability.SUPPORTS_VT_REMOTE_BIDIRECTIONAL));
+
+        capabilities = changeBitmask(capabilities, CAPABILITY_SUPPORTS_VT_LOCAL_BIDIRECTIONAL,
+                can(mOriginalConnectionCapabilities, Capability.SUPPORTS_VT_LOCAL_BIDIRECTIONAL));
+
+        return capabilities;
     }
 
     /**
      * Sets whether the call is using wifi. Used when rebuilding the capabilities to set or unset
-     * the {@link Connection#CAPABILITY_WIFI} capability.
+     * the {@link Connection#PROPERTY_WIFI} property.
      */
     public void setWifi(boolean isWifi) {
         mIsWifi = isWifi;
-        updateConnectionCapabilities();
+        updateConnectionProperties();
         updateStatusHints();
     }
 
@@ -1034,28 +1222,26 @@
     }
 
     /**
-     * Sets the current call audio quality. Used during rebuild of the capabilities
-     * to set or unset the {@link Connection#CAPABILITY_HIGH_DEF_AUDIO} capability.
+     * Sets the current call audio quality. Used during rebuild of the properties
+     * to set or unset the {@link Connection#PROPERTY_HIGH_DEF_AUDIO} property.
      *
      * @param audioQuality The audio quality.
      */
     public void setAudioQuality(int audioQuality) {
         mHasHighDefAudio = audioQuality ==
                 com.android.internal.telephony.Connection.AUDIO_QUALITY_HIGH_DEFINITION;
-        updateConnectionCapabilities();
+        updateConnectionProperties();
     }
 
     void resetStateForConference() {
         if (getState() == Connection.STATE_HOLDING) {
-            if (mOriginalConnection.getState() == Call.State.ACTIVE) {
-                setActive();
-            }
+            resetStateOverride();
         }
     }
 
     boolean setHoldingForConference() {
         if (getState() == Connection.STATE_ACTIVE) {
-            setOnHold();
+            setStateOverride(Call.State.HOLDING);
             return true;
         }
         return false;
@@ -1093,7 +1279,9 @@
      *     otherwise.
      */
     protected boolean isImsConnection() {
-        return getOriginalConnection() instanceof ImsPhoneConnection;
+        com.android.internal.telephony.Connection originalConnection = getOriginalConnection();
+        return originalConnection != null &&
+                originalConnection.getPhoneType() == PhoneConstants.PHONE_TYPE_IMS;
     }
 
     /**
@@ -1116,16 +1304,16 @@
     /**
      * Changes a capabilities bit-mask to add or remove a capability.
      *
-     * @param capabilities The capabilities bit-mask.
-     * @param capability The capability to change.
-     * @param enabled Whether the capability should be set or removed.
-     * @return The capabilities bit-mask with the capability changed.
+     * @param bitmask The bit-mask.
+     * @param bitfield The bit-field to change.
+     * @param enabled Whether the bit-field should be set or removed.
+     * @return The bit-mask with the bit-field changed.
      */
-    private int changeCapability(int capabilities, int capability, boolean enabled) {
+    private int changeBitmask(int bitmask, int bitfield, boolean enabled) {
         if (enabled) {
-            return capabilities | capability;
+            return bitmask | bitfield;
         } else {
-            return capabilities & ~capability;
+            return bitmask & ~bitfield;
         }
     }
 
@@ -1186,6 +1374,12 @@
         }
     }
 
+    /**
+     * Handles exiting ECM mode.
+     */
+    protected void handleExitedEcmMode() {
+        updateConnectionProperties();
+    }
 
     /**
      * Provides a mapping from extras keys which may be found in the
@@ -1214,6 +1408,8 @@
         StringBuilder sb = new StringBuilder();
         sb.append("[TelephonyConnection objId:");
         sb.append(System.identityHashCode(this));
+        sb.append(" telecomCallID:");
+        sb.append(getTelecomCallId());
         sb.append(" type:");
         if (isImsConnection()) {
             sb.append("ims");
@@ -1226,6 +1422,8 @@
         sb.append(Connection.stateToString(getState()));
         sb.append(" capabilities:");
         sb.append(capabilitiesToString(getConnectionCapabilities()));
+        sb.append(" properties:");
+        sb.append(propertiesToString(getConnectionProperties()));
         sb.append(" address:");
         sb.append(Log.pii(getAddress()));
         sb.append(" originalConnection:");
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index a14a884..0af667a 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -21,13 +21,17 @@
 import android.content.Context;
 import android.content.Intent;
 import android.net.Uri;
+import android.os.Bundle;
+import android.telecom.Conference;
 import android.telecom.Connection;
 import android.telecom.ConnectionRequest;
 import android.telecom.ConnectionService;
+import android.telecom.DisconnectCause;
 import android.telecom.PhoneAccount;
 import android.telecom.PhoneAccountHandle;
+import android.telecom.TelecomManager;
+import android.telecom.VideoProfile;
 import android.telephony.CarrierConfigManager;
-import android.telephony.DisconnectCause;
 import android.telephony.PhoneNumberUtils;
 import android.telephony.ServiceState;
 import android.telephony.SubscriptionManager;
@@ -41,9 +45,9 @@
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneConstants;
 import com.android.internal.telephony.PhoneFactory;
-import com.android.internal.telephony.PhoneProxy;
 import com.android.internal.telephony.SubscriptionController;
-import com.android.internal.telephony.cdma.CDMAPhone;
+import com.android.internal.telephony.imsphone.ImsExternalCallTracker;
+import com.android.internal.telephony.imsphone.ImsPhone;
 import com.android.phone.MMIDialogActivity;
 import com.android.phone.PhoneUtils;
 import com.android.phone.R;
@@ -238,7 +242,7 @@
             if (!allowNonEmergencyCalls) {
                 return Connection.createFailedConnection(
                         DisconnectCauseUtil.toTelecomDisconnectCause(
-                                DisconnectCause.CDMA_NOT_EMERGENCY,
+                                android.telephony.DisconnectCause.CDMA_NOT_EMERGENCY,
                                 "Cannot make non-emergency call in ECM mode."
                         ));
             }
@@ -277,8 +281,22 @@
             }
         }
 
+        final Context context = getApplicationContext();
+        if (VideoProfile.isVideo(request.getVideoState()) && isTtyModeEnabled(context) &&
+                !isEmergencyNumber) {
+            return Connection.createFailedConnection(DisconnectCauseUtil.toTelecomDisconnectCause(
+                    android.telephony.DisconnectCause.VIDEO_CALL_NOT_ALLOWED_WHILE_TTY_ENABLED));
+        }
+
+        // Check for additional limits on CDMA phones.
+        final Connection failedConnection = checkAdditionalOutgoingCallLimits(phone);
+        if (failedConnection != null) {
+            return failedConnection;
+        }
+
         final TelephonyConnection connection =
-                createConnectionFor(phone, null, true /* isOutgoing */, request.getAccountHandle());
+                createConnectionFor(phone, null, true /* isOutgoing */, request.getAccountHandle(),
+                        request.getTelecomCallId(), request.getAddress());
         if (connection == null) {
             return Connection.createFailedConnection(
                     DisconnectCauseUtil.toTelecomDisconnectCause(
@@ -325,8 +343,17 @@
             PhoneAccountHandle connectionManagerPhoneAccount,
             ConnectionRequest request) {
         Log.i(this, "onCreateIncomingConnection, request: " + request);
-
-        Phone phone = getPhoneForAccount(request.getAccountHandle(), false);
+        // If there is an incoming emergency CDMA Call (while the phone is in ECBM w/ No SIM),
+        // make sure the PhoneAccount lookup retrieves the default Emergency Phone.
+        PhoneAccountHandle accountHandle = request.getAccountHandle();
+        boolean isEmergency = false;
+        if (accountHandle != null && PhoneUtils.EMERGENCY_ACCOUNT_HANDLE_ID.equals(
+                accountHandle.getId())) {
+            Log.i(this, "Emergency PhoneAccountHandle is being used for incoming call... " +
+                    "Treat as an Emergency Call.");
+            isEmergency = true;
+        }
+        Phone phone = getPhoneForAccount(accountHandle, isEmergency);
         if (phone == null) {
             return Connection.createFailedConnection(
                     DisconnectCauseUtil.toTelecomDisconnectCause(
@@ -353,7 +380,8 @@
 
         Connection connection =
                 createConnectionFor(phone, originalConnection, false /* isOutgoing */,
-                        request.getAccountHandle());
+                        request.getAccountHandle(), request.getTelecomCallId(),
+                        request.getAddress());
         if (connection == null) {
             return Connection.createCanceledConnection();
         } else {
@@ -372,34 +400,68 @@
     public Connection onCreateUnknownConnection(PhoneAccountHandle connectionManagerPhoneAccount,
             ConnectionRequest request) {
         Log.i(this, "onCreateUnknownConnection, request: " + request);
-
-        Phone phone = getPhoneForAccount(request.getAccountHandle(), false);
+        // Use the registered emergency Phone if the PhoneAccountHandle is set to Telephony's
+        // Emergency PhoneAccount
+        PhoneAccountHandle accountHandle = request.getAccountHandle();
+        boolean isEmergency = false;
+        if (accountHandle != null && PhoneUtils.EMERGENCY_ACCOUNT_HANDLE_ID.equals(
+                accountHandle.getId())) {
+            Log.i(this, "Emergency PhoneAccountHandle is being used for unknown call... " +
+                    "Treat as an Emergency Call.");
+            isEmergency = true;
+        }
+        Phone phone = getPhoneForAccount(accountHandle, isEmergency);
         if (phone == null) {
             return Connection.createFailedConnection(
                     DisconnectCauseUtil.toTelecomDisconnectCause(
                             android.telephony.DisconnectCause.ERROR_UNSPECIFIED,
                             "Phone is null"));
         }
+        Bundle extras = request.getExtras();
 
         final List<com.android.internal.telephony.Connection> allConnections = new ArrayList<>();
-        final Call ringingCall = phone.getRingingCall();
-        if (ringingCall.hasConnections()) {
-            allConnections.addAll(ringingCall.getConnections());
-        }
-        final Call foregroundCall = phone.getForegroundCall();
-        if ((foregroundCall.getState() != Call.State.DISCONNECTED)
-                && (foregroundCall.hasConnections())) {
-            allConnections.addAll(foregroundCall.getConnections());
-        }
-        if (phone.getImsPhone() != null) {
-            final Call imsFgCall = phone.getImsPhone().getForegroundCall();
-            if ((imsFgCall.getState() != Call.State.DISCONNECTED) && imsFgCall.hasConnections()) {
-                allConnections.addAll(imsFgCall.getConnections());
+
+        // Handle the case where an unknown connection has an IMS external call ID specified; we can
+        // skip the rest of the guesswork and just grad that unknown call now.
+        if (phone.getImsPhone() != null && extras != null &&
+                extras.containsKey(ImsExternalCallTracker.EXTRA_IMS_EXTERNAL_CALL_ID)) {
+
+            ImsPhone imsPhone = (ImsPhone) phone.getImsPhone();
+            ImsExternalCallTracker externalCallTracker = imsPhone.getExternalCallTracker();
+            int externalCallId = extras.getInt(ImsExternalCallTracker.EXTRA_IMS_EXTERNAL_CALL_ID,
+                    -1);
+
+            if (externalCallTracker != null) {
+                com.android.internal.telephony.Connection connection =
+                        externalCallTracker.getConnectionById(externalCallId);
+
+                if (connection != null) {
+                    allConnections.add(connection);
+                }
             }
         }
-        final Call backgroundCall = phone.getBackgroundCall();
-        if (backgroundCall.hasConnections()) {
-            allConnections.addAll(phone.getBackgroundCall().getConnections());
+
+        if (allConnections.isEmpty()) {
+            final Call ringingCall = phone.getRingingCall();
+            if (ringingCall.hasConnections()) {
+                allConnections.addAll(ringingCall.getConnections());
+            }
+            final Call foregroundCall = phone.getForegroundCall();
+            if ((foregroundCall.getState() != Call.State.DISCONNECTED)
+                    && (foregroundCall.hasConnections())) {
+                allConnections.addAll(foregroundCall.getConnections());
+            }
+            if (phone.getImsPhone() != null) {
+                final Call imsFgCall = phone.getImsPhone().getForegroundCall();
+                if ((imsFgCall.getState() != Call.State.DISCONNECTED) && imsFgCall
+                        .hasConnections()) {
+                    allConnections.addAll(imsFgCall.getConnections());
+                }
+            }
+            final Call backgroundCall = phone.getBackgroundCall();
+            if (backgroundCall.hasConnections()) {
+                allConnections.addAll(phone.getBackgroundCall().getConnections());
+            }
         }
 
         com.android.internal.telephony.Connection unknownConnection = null;
@@ -419,7 +481,8 @@
         TelephonyConnection connection =
                 createConnectionFor(phone, unknownConnection,
                         !unknownConnection.isIncoming() /* isOutgoing */,
-                        request.getAccountHandle());
+                        request.getAccountHandle(), request.getTelecomCallId(),
+                        request.getAddress());
 
         if (connection == null) {
             return Connection.createCanceledConnection();
@@ -481,15 +544,17 @@
             Phone phone,
             com.android.internal.telephony.Connection originalConnection,
             boolean isOutgoing,
-            PhoneAccountHandle phoneAccountHandle) {
+            PhoneAccountHandle phoneAccountHandle,
+            String telecomCallId,
+            Uri address) {
         TelephonyConnection returnConnection = null;
         int phoneType = phone.getPhoneType();
         if (phoneType == TelephonyManager.PHONE_TYPE_GSM) {
-            returnConnection = new GsmConnection(originalConnection);
+            returnConnection = new GsmConnection(originalConnection, telecomCallId);
         } else if (phoneType == TelephonyManager.PHONE_TYPE_CDMA) {
-            boolean allowMute = allowMute(phone);
-            returnConnection = new CdmaConnection(
-                    originalConnection, mEmergencyTonePlayer, allowMute, isOutgoing);
+            boolean allowsMute = allowsMute(phone);
+            returnConnection = new CdmaConnection(originalConnection, mEmergencyTonePlayer,
+                    allowsMute, isOutgoing, telecomCallId);
         }
         if (returnConnection != null) {
             // Listen to Telephony specific callbacks from the connection
@@ -497,8 +562,10 @@
             returnConnection.setVideoPauseSupported(
                     TelecomAccountRegistry.getInstance(this).isVideoPauseSupported(
                             phoneAccountHandle));
-            returnConnection.setConferenceSupported(
-                    TelecomAccountRegistry.getInstance(this).isMergeCallSupported(
+            boolean isEmergencyCall = (address != null && PhoneNumberUtils.isEmergencyNumber(
+                    address.getSchemeSpecificPart()));
+            returnConnection.setConferenceSupported(!isEmergencyCall
+                    && TelecomAccountRegistry.getInstance(this).isMergeCallSupported(
                             phoneAccountHandle));
         }
         return returnConnection;
@@ -518,54 +585,81 @@
     }
 
     private Phone getPhoneForAccount(PhoneAccountHandle accountHandle, boolean isEmergency) {
-        if (isEmergency) {
-            return PhoneFactory.getDefaultPhone();
-        }
-
+        Phone chosenPhone = null;
         int subId = PhoneUtils.getSubIdForPhoneAccountHandle(accountHandle);
         if (subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
             int phoneId = SubscriptionController.getInstance().getPhoneId(subId);
-            return PhoneFactory.getPhone(phoneId);
+            chosenPhone = PhoneFactory.getPhone(phoneId);
         }
-
-        return null;
+        // If this is an emergency call and the phone we originally planned to make this call
+        // with is not in service or was invalid, try to find one that is in service, using the
+        // default as a last chance backup.
+        if (isEmergency && (chosenPhone == null || ServiceState.STATE_IN_SERVICE != chosenPhone
+                .getServiceState().getState())) {
+            Log.d(this, "getPhoneForAccount: phone for phone acct handle %s is out of service "
+                    + "or invalid for emergency call.", accountHandle);
+            chosenPhone = getFirstPhoneForEmergencyCall();
+            Log.d(this, "getPhoneForAccount: using subId: " +
+                    (chosenPhone == null ? "null" : chosenPhone.getSubId()));
+        }
+        return chosenPhone;
     }
 
+    /**
+     * Retrieves the most sensible Phone to use for an emergency call using the following Priority
+     *  list (for multi-SIM devices):
+     *  1) The User's SIM preference for Voice calling
+     *  2) The First Phone that is currently IN_SERVICE or is available for emergency calling
+     *  3) The First Phone that has a SIM card in it (Starting from Slot 0...N)
+     *  4) The Default Phone (Currently set as Slot 0)
+     */
     private Phone getFirstPhoneForEmergencyCall() {
-        Phone selectPhone = null;
-        for (int i = 0; i < TelephonyManager.getDefault().getSimCount(); i++) {
-            int[] subIds = SubscriptionController.getInstance().getSubIdUsingSlotId(i);
-            if (subIds.length == 0)
-                continue;
+        Phone firstPhoneWithSim = null;
 
-            int phoneId = SubscriptionController.getInstance().getPhoneId(subIds[0]);
-            Phone phone = PhoneFactory.getPhone(phoneId);
-            if (phone == null)
-                continue;
-
-            if (ServiceState.STATE_IN_SERVICE == phone.getServiceState().getState()) {
-                // the slot is radio on & state is in service
-                Log.d(this, "pickBestPhoneForEmergencyCall, radio on & in service, slotId:" + i);
-                return phone;
-            } else if (ServiceState.STATE_POWER_OFF != phone.getServiceState().getState()) {
-                // the slot is radio on & with SIM card inserted.
-                if (TelephonyManager.getDefault().hasIccCard(i)) {
-                    Log.d(this, "pickBestPhoneForEmergencyCall," +
-                            "radio on and SIM card inserted, slotId:" + i);
-                    selectPhone = phone;
-                } else if (selectPhone == null) {
-                    Log.d(this, "pickBestPhoneForEmergencyCall, radio on, slotId:" + i);
-                    selectPhone = phone;
-                }
+        // 1)
+        int phoneId = SubscriptionManager.getDefaultVoicePhoneId();
+        if (phoneId != SubscriptionManager.INVALID_PHONE_INDEX) {
+            Phone defaultPhone = PhoneFactory.getPhone(phoneId);
+            if (defaultPhone != null && isAvailableForEmergencyCalls(defaultPhone)) {
+                return defaultPhone;
             }
         }
 
-        if (selectPhone == null) {
-            Log.d(this, "pickBestPhoneForEmergencyCall, return default phone");
-            selectPhone = PhoneFactory.getDefaultPhone();
+        for (int i = 0; i < TelephonyManager.getDefault().getPhoneCount(); i++) {
+            Phone phone = PhoneFactory.getPhone(i);
+            if (phone == null)
+                continue;
+            // 2)
+            if (isAvailableForEmergencyCalls(phone)) {
+                // the slot has the radio on & state is in service.
+                Log.d(this, "getFirstPhoneForEmergencyCall, radio on & in service, Phone Id:" + i);
+                return phone;
+            }
+            // 3)
+            if (firstPhoneWithSim == null && TelephonyManager.getDefault().hasIccCard(i)) {
+                // The slot has a SIM card inserted, but is not in service, so keep track of this
+                // Phone. Do not return because we want to make sure that none of the other Phones
+                // are in service (because that is always faster).
+                Log.d(this, "getFirstPhoneForEmergencyCall, SIM card inserted, Phone Id:" + i);
+                firstPhoneWithSim = phone;
+            }
         }
+        // 4)
+        if (firstPhoneWithSim == null) {
+            // No SIMs inserted, get the default.
+            Log.d(this, "getFirstPhoneForEmergencyCall, return default phone");
+            return PhoneFactory.getDefaultPhone();
+        } else {
+            return firstPhoneWithSim;
+        }
+    }
 
-        return selectPhone;
+    /**
+     * Returns true if the state of the Phone is IN_SERVICE or available for emergency calling only.
+     */
+    private boolean isAvailableForEmergencyCalls(Phone phone) {
+        return ServiceState.STATE_IN_SERVICE == phone.getServiceState().getState() ||
+                phone.getServiceState().isEmergencyOnly();
     }
 
     /**
@@ -574,16 +668,12 @@
      * @param phone The current phone.
      * @return {@code True} if the connection should allow mute.
      */
-    private boolean allowMute(Phone phone) {
+    private boolean allowsMute(Phone phone) {
         // For CDMA phones, check if we are in Emergency Callback Mode (ECM).  Mute is disallowed
         // in ECM mode.
         if (phone.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA) {
-            PhoneProxy phoneProxy = (PhoneProxy)phone;
-            CDMAPhone cdmaPhone = (CDMAPhone)phoneProxy.getActivePhone();
-            if (cdmaPhone != null) {
-                if (cdmaPhone.isInEcm()) {
-                    return false;
-                }
+            if (phone.isInEcm()) {
+                return false;
             }
         }
 
@@ -627,4 +717,43 @@
             mImsConferenceController.remove(connection);
         }
     }
+
+    /**
+     * Create a new CDMA connection. CDMA connections have additional limitations when creating
+     * additional calls which are handled in this method.  Specifically, CDMA has a "FLASH" command
+     * that can be used for three purposes: merging a call, swapping unmerged calls, and adding
+     * a new outgoing call. The function of the flash command depends on the context of the current
+     * set of calls. This method will prevent an outgoing call from being made if it is not within
+     * the right circumstances to support adding a call.
+     */
+    private Connection checkAdditionalOutgoingCallLimits(Phone phone) {
+        if (phone.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA) {
+            // Check to see if any CDMA conference calls exist, and if they do, check them for
+            // limitations.
+            for (Conference conference : getAllConferences()) {
+                if (conference instanceof CdmaConference) {
+                    CdmaConference cdmaConf = (CdmaConference) conference;
+
+                    // If the CDMA conference has not been merged, add-call will not work, so fail
+                    // this request to add a call.
+                    if (cdmaConf.can(Connection.CAPABILITY_MERGE_CONFERENCE)) {
+                        return Connection.createFailedConnection(new DisconnectCause(
+                                    DisconnectCause.RESTRICTED,
+                                    null,
+                                    getResources().getString(R.string.callFailed_cdma_call_limit),
+                                    "merge-capable call exists, prevent flash command."));
+                    }
+                }
+            }
+        }
+
+        return null; // null means nothing went wrong, and call should continue.
+    }
+
+    private boolean isTtyModeEnabled(Context context) {
+        return (android.provider.Settings.Secure.getInt(
+                context.getContentResolver(),
+                android.provider.Settings.Secure.PREFERRED_TTY_MODE,
+                TelecomManager.TTY_MODE_OFF) != TelecomManager.TTY_MODE_OFF);
+    }
 }
diff --git a/src/com/android/services/telephony/TtyManager.java b/src/com/android/services/telephony/TtyManager.java
index a3aeeb2..3389ce8 100644
--- a/src/com/android/services/telephony/TtyManager.java
+++ b/src/com/android/services/telephony/TtyManager.java
@@ -23,6 +23,7 @@
 import android.os.AsyncResult;
 import android.os.Handler;
 import android.os.Message;
+import android.provider.Settings;
 import android.telecom.TelecomManager;
 
 import com.android.internal.telephony.Phone;
@@ -83,6 +84,9 @@
             ttyMode = telecomManager.getCurrentTtyMode();
         }
         updateTtyMode(ttyMode);
+        //Get preferred TTY mode from data base as UI Tty mode is always user preferred Tty mode.
+        ttyMode = Settings.Secure.getInt(context.getContentResolver(),
+                Settings.Secure.PREFERRED_TTY_MODE, TelecomManager.TTY_MODE_OFF);
         updateUiTtyMode(ttyMode);
     }
 
diff --git a/tests/Android.mk b/tests/Android.mk
index a3a657b..6cc0355 100644
--- a/tests/Android.mk
+++ b/tests/Android.mk
@@ -27,4 +27,8 @@
 
 LOCAL_INSTRUMENTATION_FOR := TeleService
 
+LOCAL_STATIC_JAVA_LIBRARIES := \
+        android-support-test \
+        mockito-target
+
 include $(BUILD_PACKAGE)
diff --git a/tests/src/com/android/phone/MockitoHelper.java b/tests/src/com/android/phone/MockitoHelper.java
new file mode 100644
index 0000000..3da5d6e
--- /dev/null
+++ b/tests/src/com/android/phone/MockitoHelper.java
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.phone;
+
+import com.android.services.telephony.Log;
+
+/**
+ * Helper for Mockito-based test cases.
+ */
+public final class MockitoHelper {
+
+    private static final String TAG = "MockitoHelper";
+
+    private ClassLoader mOriginalClassLoader;
+    private Thread mContextThread;
+
+    /**
+     * Creates a new helper, which in turn will set the context classloader so it can load Mockito
+     * resources.
+     *
+     * @param packageClass test case class
+     */
+    public void setUp(Class<?> packageClass) throws Exception {
+        // makes a copy of the context classloader
+        mContextThread = Thread.currentThread();
+        mOriginalClassLoader = mContextThread.getContextClassLoader();
+        ClassLoader newClassLoader = packageClass.getClassLoader();
+        Log.v(TAG, "Changing context classloader from " + mOriginalClassLoader
+                + " to " + newClassLoader);
+        mContextThread.setContextClassLoader(newClassLoader);
+    }
+
+    /**
+     * Restores the context classloader to the previous value.
+     */
+    public void tearDown() throws Exception {
+        Log.v(TAG, "Restoring context classloader to " + mOriginalClassLoader);
+        mContextThread.setContextClassLoader(mOriginalClassLoader);
+    }
+}
\ No newline at end of file
diff --git a/tests/src/com/android/phone/common/mail/MailTransportTest.java b/tests/src/com/android/phone/common/mail/MailTransportTest.java
new file mode 100644
index 0000000..6acd517
--- /dev/null
+++ b/tests/src/com/android/phone/common/mail/MailTransportTest.java
@@ -0,0 +1,413 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.phone.common.mail;
+
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.net.Network;
+import android.test.AndroidTestCase;
+
+import com.android.phone.MockitoHelper;
+import com.android.phone.common.mail.MailTransport.SocketCreator;
+import com.android.phone.common.mail.store.ImapStore;
+import com.android.phone.vvm.omtp.imap.ImapHelper;
+
+import junit.framework.AssertionFailedError;
+
+import org.mockito.MockitoAnnotations;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.InetAddress;
+import java.net.InetSocketAddress;
+import java.net.Socket;
+import java.net.SocketAddress;
+import java.net.SocketException;
+import java.net.UnknownHostException;
+
+import javax.net.SocketFactory;
+
+public class MailTransportTest extends AndroidTestCase {
+
+    private static final String HOST_ADDRESS = "127.0.0.1";
+    private static final String INVALID_HOST_ADDRESS = "255.255.255.255";
+    private static final int HOST_PORT = 80;
+    private static final int HOST_FLAGS = 0;
+    // bypass verifyHostname() in open() by setting ImapStore.FLAG_TRUST_ALL
+    private static final int HOST_FLAGS_SSL = ImapStore.FLAG_SSL & ImapStore.FLAG_TRUST_ALL;
+    private static final InetAddress VALID_INET_ADDRESS = createInetAddress(HOST_ADDRESS);
+    private static final InetAddress INVALID_INET_ADDRESS = createInetAddress(INVALID_HOST_ADDRESS);
+
+    // ClassLoader need to be replaced for mockito to work.
+    private MockitoHelper mMokitoHelper = new MockitoHelper();
+
+    @Override
+    public void setUp() throws Exception {
+        super.setUp();
+        mMokitoHelper.setUp(getClass());
+        MockitoAnnotations.initMocks(this);
+    }
+
+    @Override
+    public void tearDown() throws Exception {
+        mMokitoHelper.tearDown();
+        super.tearDown();
+    }
+
+    public void testCreateSocket_anyNetwork() throws MessagingException {
+        // With no network, Socket#Socket() should be called.
+        MailTransport transport =
+                new MailTransport(getContext(), createMockImapHelper(), null, HOST_ADDRESS,
+                        HOST_PORT, HOST_FLAGS);
+        Socket socket = transport.createSocket();
+        assertTrue(socket != null);
+    }
+
+    public void testCreateSocket_networkSpecified() throws MessagingException, IOException {
+        // Network#getSocketFactory should be used to create socket.
+        Network mockNetwork = createMockNetwork();
+        MailTransport transport =
+                new MailTransport(getContext(), createMockImapHelper(), mockNetwork, HOST_ADDRESS,
+                        HOST_PORT, HOST_FLAGS);
+        Socket socket = transport.createSocket();
+        assertTrue(socket != null);
+        verify(mockNetwork).getSocketFactory();
+    }
+
+    public void testCreateSocket_socketCreator() throws MessagingException, IOException {
+        // For testing purposes, how sockets are created can be overridden.
+        SocketCreator socketCreator = new SocketCreator() {
+
+            private final Socket mSocket = new Socket();
+
+            @Override
+            public Socket createSocket() {
+                return mSocket;
+            }
+        };
+
+        MailTransport transport = new
+                MailTransport(getContext(), createMockImapHelper(), null, HOST_ADDRESS, HOST_PORT,
+                HOST_FLAGS);
+
+        transport.setSocketCreator(socketCreator);
+
+        Socket socket = transport.createSocket();
+        assertTrue(socket == socketCreator.createSocket());
+    }
+
+    public void testOpen() throws MessagingException {
+        MailTransport transport = new MailTransport(getContext(), createMockImapHelper(), null,
+                HOST_ADDRESS,
+                HOST_PORT, HOST_FLAGS);
+        transport.setSocketCreator(new TestSocketCreator());
+        transport.open();
+        assertTrue(transport.isOpen());
+
+    }
+
+    public void testOpen_Ssl() throws MessagingException {
+        //opening with ssl support.
+        MailTransport transport = new MailTransport(getContext(), createMockImapHelper(), null,
+                HOST_ADDRESS, HOST_PORT, HOST_FLAGS_SSL);
+        transport.setSocketCreator(new TestSocketCreator());
+        transport.open();
+        assertTrue(transport.isOpen());
+
+    }
+
+    public void testOpen_MultiIp() throws MessagingException {
+        //In case of round robin DNS, try all resolved address until one succeeded.
+        Network network = createMultiIpMockNetwork();
+        MailTransport transport = new MailTransport(getContext(), createMockImapHelper(), network,
+                HOST_ADDRESS,
+                HOST_PORT, HOST_FLAGS);
+        transport.setSocketCreator(new TestSocketCreator());
+        transport.open();
+        assertTrue(transport.isOpen());
+    }
+
+    public void testOpen_MultiIp_SSL() throws MessagingException {
+        Network network = createMultiIpMockNetwork();
+
+        MailTransport transport = new MailTransport(getContext(), createMockImapHelper(), network,
+                HOST_ADDRESS,
+                HOST_PORT, HOST_FLAGS_SSL);
+        transport.setSocketCreator(new TestSocketCreator());
+        transport.open();
+        assertTrue(transport.isOpen());
+    }
+
+    public void testOpen_network_hostResolutionFailed() {
+        // Couldn't resolve host on the network. Open() should fail.
+        Network network = createMockNetwork();
+        try {
+            when(network.getAllByName(HOST_ADDRESS))
+                    .thenThrow(new UnknownHostException("host resolution failed"));
+        } catch (IOException e) {
+            //ignored
+        }
+
+        MailTransport transport = new MailTransport(getContext(), createMockImapHelper(), network,
+                HOST_ADDRESS,
+                HOST_PORT, HOST_FLAGS);
+        try {
+            transport.open();
+            throw new AssertionFailedError("Should throw MessagingException");
+        } catch (MessagingException e) {
+            //expected
+        }
+        assertFalse(transport.isOpen());
+    }
+
+    public void testOpen_createSocketFailed() {
+        // Unable to create socket. Open() should fail.
+        MailTransport transport = new MailTransport(getContext(), createMockImapHelper(), null,
+                HOST_ADDRESS,
+                HOST_PORT, HOST_FLAGS);
+        transport.setSocketCreator(new SocketCreator() {
+            @Override
+            public Socket createSocket() throws MessagingException {
+                throw new MessagingException("createSocket failed");
+            }
+        });
+        try {
+            transport.open();
+            throw new AssertionFailedError("Should throw MessagingException");
+        } catch (MessagingException e) {
+            //expected
+        }
+        assertFalse(transport.isOpen());
+    }
+
+    public void testOpen_network_createSocketFailed() {
+        // Unable to create socket. Open() should fail.
+
+        Network network = createOneIpMockNetwork();
+        SocketFactory mockSocketFactory = mock(SocketFactory.class);
+        try {
+            when(mockSocketFactory.createSocket())
+                    .thenThrow(new IOException("unable to create socket"));
+        } catch (IOException e) {
+            //ignored
+        }
+        when(network.getSocketFactory()).thenReturn(mockSocketFactory);
+
+        MailTransport transport = new MailTransport(getContext(), createMockImapHelper(), network,
+                HOST_ADDRESS, HOST_PORT, HOST_FLAGS);
+
+        try {
+            transport.open();
+            throw new AssertionFailedError("Should throw MessagingException");
+        } catch (MessagingException e) {
+            //expected
+        }
+        assertFalse(transport.isOpen());
+    }
+
+    public void testOpen_connectFailed_one() {
+        // There is only one IP for this host, and we failed to connect to it. Open() should fail.
+
+        MailTransport transport = new MailTransport(getContext(), createMockImapHelper(), null,
+                HOST_ADDRESS, HOST_PORT, HOST_FLAGS);
+        transport.setSocketCreator(new SocketCreator() {
+            @Override
+            public Socket createSocket() throws MessagingException {
+                return new Socket() {
+                    @Override
+                    public void connect(SocketAddress address, int timeout) throws IOException {
+                        throw new IOException("connect failed");
+                    }
+                };
+            }
+        });
+        try {
+            transport.open();
+            throw new AssertionFailedError("Should throw MessagingException");
+        } catch (MessagingException e) {
+            //expected
+        }
+        assertFalse(transport.isOpen());
+    }
+
+    public void testOpen_connectFailed_multi() {
+        // There are multiple IP for this host, and we failed to connect to any of it.
+        // Open() should fail.
+        MailTransport transport = new MailTransport(getContext(), createMockImapHelper(),
+                createMultiIpMockNetwork(), HOST_ADDRESS, HOST_PORT, HOST_FLAGS);
+        transport.setSocketCreator(new SocketCreator() {
+            @Override
+            public Socket createSocket() throws MessagingException {
+                return new Socket() {
+                    @Override
+                    public void connect(SocketAddress address, int timeout) throws IOException {
+                        throw new IOException("connect failed");
+                    }
+                };
+            }
+        });
+        try {
+            transport.open();
+            throw new AssertionFailedError("Should throw MessagingException");
+        } catch (MessagingException e) {
+            //expected
+        }
+        assertFalse(transport.isOpen());
+    }
+
+    private class TestSocket extends Socket {
+
+        boolean mConnected = false;
+
+
+        /**
+         * A make a mock connection to the address.
+         *
+         * @param address Only address equivalent to VALID_INET_ADDRESS or INVALID_INET_ADDRESS is
+         * accepted
+         * @param timeout Ignored but should >= 0.
+         */
+        @Override
+        public void connect(SocketAddress address, int timeout) throws IOException {
+            // copied from Socket#connect
+            if (isClosed()) {
+                throw new SocketException("Socket is closed");
+            }
+            if (timeout < 0) {
+                throw new IllegalArgumentException("timeout < 0");
+            }
+            if (isConnected()) {
+                throw new SocketException("Already connected");
+            }
+            if (address == null) {
+                throw new IllegalArgumentException("remoteAddr == null");
+            }
+
+            if (!(address instanceof InetSocketAddress)) {
+                throw new AssertionError("address should be InetSocketAddress");
+            }
+
+            InetSocketAddress inetSocketAddress = (InetSocketAddress) address;
+            if (inetSocketAddress.getAddress().equals(INVALID_INET_ADDRESS)) {
+                throw new IOException("invalid address");
+            } else if (inetSocketAddress.getAddress().equals(VALID_INET_ADDRESS)) {
+                mConnected = true;
+            } else {
+                throw new AssertionError("Only INVALID_ADDRESS or VALID_ADDRESS are allowed");
+            }
+        }
+
+        @Override
+        public InputStream getInputStream() {
+            return null;
+        }
+
+        @Override
+        public OutputStream getOutputStream() {
+            return null;
+        }
+
+        @Override
+        public boolean isConnected() {
+            return mConnected;
+        }
+
+    }
+
+
+    private class TestSocketCreator implements MailTransport.SocketCreator {
+
+        @Override
+        public Socket createSocket() throws MessagingException {
+            Socket socket = new TestSocket();
+            return socket;
+        }
+
+    }
+
+    private ImapHelper createMockImapHelper() {
+        return mock(ImapHelper.class);
+    }
+
+    /**
+     * @return a mock Network that can create a TestSocket with {@code getSocketFactory()
+     * .createSocket()}
+     */
+    private Network createMockNetwork() {
+        Network network = mock(Network.class);
+        SocketFactory mockSocketFactory = mock(SocketFactory.class);
+        try {
+            when(mockSocketFactory.createSocket()).thenReturn(new TestSocket());
+        } catch (IOException e) {
+            //ignored
+        }
+        when(network.getSocketFactory()).thenReturn(mockSocketFactory);
+        return network;
+    }
+
+    /**
+     * @return a mock Network like {@link MailTransportTest#createMockNetwork()}, but also supports
+     * {@link Network#getAllByName(String)} with one valid result.
+     */
+    private Network createOneIpMockNetwork() {
+        Network network = createMockNetwork();
+        try {
+            when(network.getAllByName(HOST_ADDRESS))
+                    .thenReturn(new InetAddress[] {VALID_INET_ADDRESS});
+        } catch (UnknownHostException e) {
+            //ignored
+        }
+
+        return network;
+    }
+
+    /**
+     * @return a mock Network like {@link MailTransportTest#createMockNetwork()}, but also supports
+     * {@link Network#getAllByName(String)}, which will return 2 address with the first one
+     * invalid.
+     */
+    private Network createMultiIpMockNetwork() {
+        Network network = createMockNetwork();
+        try {
+            when(network.getAllByName(HOST_ADDRESS))
+                    .thenReturn(new InetAddress[] {INVALID_INET_ADDRESS, VALID_INET_ADDRESS});
+        } catch (UnknownHostException e) {
+            //ignored
+        }
+
+        return network;
+    }
+
+    /**
+     * helper method to translate{@code host} into a InetAddress.
+     *
+     * @param host IP address of the host. Domain name should not be used as this method should not
+     * access the internet.
+     */
+    private static InetAddress createInetAddress(String host) {
+        try {
+            return InetAddress.getByName(host);
+        } catch (UnknownHostException e) {
+            return null;
+        }
+    }
+
+
+}
diff --git a/tests/src/com/android/phone/vvm/omtp/OmtpBootCompletedReceiverTests.java b/tests/src/com/android/phone/vvm/omtp/OmtpBootCompletedReceiverTests.java
new file mode 100644
index 0000000..1924d9f
--- /dev/null
+++ b/tests/src/com/android/phone/vvm/omtp/OmtpBootCompletedReceiverTests.java
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License
+ */
+
+package com.android.phone.vvm.omtp;
+
+import android.content.Context;
+import android.content.Intent;
+import android.preference.PreferenceManager;
+import android.test.AndroidTestCase;
+import android.util.ArraySet;
+
+import com.android.phone.vvm.omtp.OmtpBootCompletedReceiver.SubIdProcessor;
+
+import java.util.Set;
+
+public class OmtpBootCompletedReceiverTests extends AndroidTestCase {
+    OmtpBootCompletedReceiver mReceiver = new OmtpBootCompletedReceiver();
+    @Override
+    public void setUp() {
+    }
+
+    @Override
+    public void tearDown() {
+        PreferenceManager
+                .getDefaultSharedPreferences(getContext().createDeviceProtectedStorageContext())
+                .edit().clear().apply();
+    }
+
+    public void testReadWriteList() {
+        readWriteList(new int[] {1});
+    }
+
+    public void testReadWriteList_Multiple() {
+        readWriteList(new int[] {1, 2});
+    }
+
+    public void testReadWriteList_Duplicate() {
+        readWriteList(new int[] {1, 1});
+    }
+
+    private void readWriteList(int[] values) {
+        for (int value : values) {
+            OmtpBootCompletedReceiver.addDeferredSubId(getContext(), value);
+        }
+        TestSubIdProcessor processor = new TestSubIdProcessor(values);
+        mReceiver.setSubIdProcessorForTest(processor);
+        Intent intent = new Intent(Intent.ACTION_BOOT_COMPLETED);
+        mReceiver.onReceive(getContext(), intent);
+        processor.assertMatch();
+        // after onReceive() is called the list should be empty
+        TestSubIdProcessor emptyProcessor = new TestSubIdProcessor(new int[] {});
+        mReceiver.setSubIdProcessorForTest(processor);
+        mReceiver.onReceive(getContext(), intent);
+        processor.assertMatch();
+    }
+
+    private static class TestSubIdProcessor implements SubIdProcessor {
+        private final Set<Integer> mExpectedSubIds;
+
+        public TestSubIdProcessor(int[] expectedSubIds) {
+            mExpectedSubIds = new ArraySet<>();
+            for(int subId : expectedSubIds){
+                mExpectedSubIds.add(subId);
+            }
+        }
+
+        @Override
+        public void process(Context context, int subId){
+            assertTrue(mExpectedSubIds.contains(subId));
+            mExpectedSubIds.remove(subId);
+        }
+
+        public void assertMatch(){
+            assertTrue(mExpectedSubIds.isEmpty());
+        }
+    }
+}