diff --git a/Android.mk b/Android.mk
index 7b63072..c824fff 100644
--- a/Android.mk
+++ b/Android.mk
@@ -5,7 +5,7 @@
 
 LOCAL_PRIVILEGED_MODULE := true
 
-LOCAL_SRC_FILES := $(call all-subdir-java-files)
+LOCAL_SRC_FILES := $(call all-java-files-under,src)
 
 LOCAL_PACKAGE_NAME := TelephonyProvider
 LOCAL_CERTIFICATE := platform
@@ -14,3 +14,5 @@
 LOCAL_STATIC_JAVA_LIBRARIES += android-common
 
 include $(BUILD_PACKAGE)
+
+include $(call all-makefiles-under,$(LOCAL_PATH))
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index ff8370d..256c347 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -4,9 +4,9 @@
      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.
@@ -24,12 +24,19 @@
     <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" />
     <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
 
+    <!-- This permission is only used to send the ACTION_EXTERNAL_PROVIDER_CHANGE intent. -->
+    <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
+
     <application android:process="com.android.phone"
                  android:allowClearUserData="false"
-                 android:allowBackup="false"
+                 android:fullBackupOnly="true"
+                 android:backupAgent="TelephonyBackupAgent"
+                 android:restoreAnyVersion="true"
                  android:label="@string/app_label"
                  android:icon="@mipmap/ic_launcher_phone"
-                 android:usesCleartextTraffic="true">
+                 android:usesCleartextTraffic="true"
+                 android:forceDeviceEncrypted="true"
+                 android:encryptionAware="true">
 
         <provider android:name="TelephonyProvider"
                   android:authorities="telephony"
diff --git a/res/values-af/config.xml b/res/values-af/config.xml
index 965199f..99877a6 100644
--- a/res/values-af/config.xml
+++ b/res/values-af/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 038d1b5..fd621e1 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Mobielnetwerk-opstelling"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Foon-/boodskapsberging"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Foon- en boodskapberging"</string>
 </resources>
diff --git a/res/values-am/config.xml b/res/values-am/config.xml
index 965199f..99877a6 100644
--- a/res/values-am/config.xml
+++ b/res/values-am/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index 91ede52..115d70e 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"የተንቀሳቃሽ ስልክ አውታረመረብ ማዋቀር"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"የስልክ/መልዕክት ማከማቻ"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"የስልክ እና የመልዕክት መላላኪያ ማከማቻ"</string>
 </resources>
diff --git a/res/values-ar/config.xml b/res/values-ar/config.xml
index 965199f..99877a6 100644
--- a/res/values-ar/config.xml
+++ b/res/values-ar/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 6ac890b..1c53b15 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"تهيئة شبكة الجوال"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"السعة التخزينية للهاتف/المراسلات"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"سعة تخزينية للهاتف والرسائل"</string>
 </resources>
diff --git a/res/values-az-rAZ/config.xml b/res/values-az-rAZ/config.xml
new file mode 100644
index 0000000..99877a6
--- /dev/null
+++ b/res/values-az-rAZ/config.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="persist_apns_for_plmn">
+    <item msgid="6413072509259000954">"20404"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
+  </string-array>
+</resources>
diff --git a/res/values-az-rAZ/strings.xml b/res/values-az-rAZ/strings.xml
index 7a83a42..22cf902 100644
--- a/res/values-az-rAZ/strings.xml
+++ b/res/values-az-rAZ/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Mobil Şəbəkə Konfiqurasiyası"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Telefon/Mesajlaşma Yaddaşı"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Telefon və Mesajlaşma Yaddaşı"</string>
 </resources>
diff --git a/res/values-b+sr+Latn/config.xml b/res/values-b+sr+Latn/config.xml
new file mode 100644
index 0000000..99877a6
--- /dev/null
+++ b/res/values-b+sr+Latn/config.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+  <string-array name="persist_apns_for_plmn">
+    <item msgid="6413072509259000954">"20404"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</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..08aa014
--- /dev/null
+++ b/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2008 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="app_label" product="tablet" msgid="9194799012395299737">"Konfiguracija mobilne mreže"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Memorija telefona i poruka"</string>
+</resources>
diff --git a/res/values-bg/config.xml b/res/values-bg/config.xml
index 965199f..99877a6 100644
--- a/res/values-bg/config.xml
+++ b/res/values-bg/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 646d4f1..40b755c 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Конфигурация на мобилната мрежа"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Хранилище: тел./съобщ."</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Хранил. за тел. и съобщ."</string>
 </resources>
diff --git a/res/values-bn-rBD/config.xml b/res/values-bn-rBD/config.xml
index 2cdeb55..a0f404f 100644
--- a/res/values-bn-rBD/config.xml
+++ b/res/values-bn-rBD/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"২০৪০৪"</item>
-    <item msgid="6382338691947744378">"৩১০১২০"</item>
-    <item msgid="1479229073702631561">"৩১১৪৮০"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-bn-rBD/strings.xml b/res/values-bn-rBD/strings.xml
index 04fa2d8..5d6d556 100644
--- a/res/values-bn-rBD/strings.xml
+++ b/res/values-bn-rBD/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"মোবাইল নেটওয়ার্ক কনফিগারেশন"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"ফোন/বার্তা প্রেরণের সঞ্চয়স্থান"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"ফোন এবং বার্তাপ্রেরণের সঞ্চয়স্থান"</string>
 </resources>
diff --git a/res/values-ca/config.xml b/res/values-ca/config.xml
index 965199f..99877a6 100644
--- a/res/values-ca/config.xml
+++ b/res/values-ca/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index 577bdf9..ec43c5c 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Configuració de la xarxa mòbil"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Emmagatz. telèfon/missat."</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Emmagatz. telèfon/missat."</string>
 </resources>
diff --git a/res/values-cs/config.xml b/res/values-cs/config.xml
index 965199f..99877a6 100644
--- a/res/values-cs/config.xml
+++ b/res/values-cs/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index c402cbf..3a4e053 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Konfigurace mobilní sítě"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Telefon a úložiště zpráv"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Telefon a úložiště zpráv"</string>
 </resources>
diff --git a/res/values-da/config.xml b/res/values-da/config.xml
index 965199f..99877a6 100644
--- a/res/values-da/config.xml
+++ b/res/values-da/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 0586492..abffe9f 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Konfiguration af mobilnetværk"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Telefon- og beskedlager"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Telefon- og beskedlager"</string>
 </resources>
diff --git a/res/values-de/config.xml b/res/values-de/config.xml
index 965199f..99877a6 100644
--- a/res/values-de/config.xml
+++ b/res/values-de/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index febd17c..27a576e 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Konfiguration des Mobilfunknetzes"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Telefon-/SMS-Speicher"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Telefon- und SMS-Speicher"</string>
 </resources>
diff --git a/res/values-el/config.xml b/res/values-el/config.xml
index 965199f..99877a6 100644
--- a/res/values-el/config.xml
+++ b/res/values-el/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index fd0c903..b2489e8 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Ρύθμιση δικτύου κιν. τηλεφωνίας"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Αποθ. τηλ./μηνυμ."</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Αποθ. χώρος τηλεφ./μηνυμ."</string>
 </resources>
diff --git a/res/values-en-rAU/config.xml b/res/values-en-rAU/config.xml
index 965199f..99877a6 100644
--- a/res/values-en-rAU/config.xml
+++ b/res/values-en-rAU/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index 5252756..f11997b 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Mobile Network Configuration"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Phone/Messaging Storage"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Phone and Messaging Storage"</string>
 </resources>
diff --git a/res/values-en-rGB/config.xml b/res/values-en-rGB/config.xml
index 965199f..99877a6 100644
--- a/res/values-en-rGB/config.xml
+++ b/res/values-en-rGB/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index 5252756..f11997b 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Mobile Network Configuration"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Phone/Messaging Storage"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Phone and Messaging Storage"</string>
 </resources>
diff --git a/res/values-en-rIN/config.xml b/res/values-en-rIN/config.xml
index 965199f..99877a6 100644
--- a/res/values-en-rIN/config.xml
+++ b/res/values-en-rIN/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index 5252756..f11997b 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Mobile Network Configuration"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Phone/Messaging Storage"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Phone and Messaging Storage"</string>
 </resources>
diff --git a/res/values-es-rUS/config.xml b/res/values-es-rUS/config.xml
index 965199f..99877a6 100644
--- a/res/values-es-rUS/config.xml
+++ b/res/values-es-rUS/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 6a5ac9a..3460450 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Configuración de la red móvil"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Teléfono/Almacenamiento de mensajes"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Alm. mensajes y teléfono"</string>
 </resources>
diff --git a/res/values-es/config.xml b/res/values-es/config.xml
index 965199f..99877a6 100644
--- a/res/values-es/config.xml
+++ b/res/values-es/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 18515a8..865f254 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Configuración de red móvil"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Almacenamiento teléfono/mensajes"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Almac. Mensajes/Teléfono"</string>
 </resources>
diff --git a/res/values-et-rEE/config.xml b/res/values-et-rEE/config.xml
index 965199f..99877a6 100644
--- a/res/values-et-rEE/config.xml
+++ b/res/values-et-rEE/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-et-rEE/strings.xml b/res/values-et-rEE/strings.xml
index d0b4936..4e92634 100644
--- a/res/values-et-rEE/strings.xml
+++ b/res/values-et-rEE/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Mobiilsidevõrgu konfigureerimine"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Telefoni/sõnumite salvestamine"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Kõnede ja sõnumite salv."</string>
 </resources>
diff --git a/res/values-eu-rES/config.xml b/res/values-eu-rES/config.xml
index 965199f..99877a6 100644
--- a/res/values-eu-rES/config.xml
+++ b/res/values-eu-rES/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-eu-rES/strings.xml b/res/values-eu-rES/strings.xml
index f763008..ff1af4f 100644
--- a/res/values-eu-rES/strings.xml
+++ b/res/values-eu-rES/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Sare mugikorraren konfigurazioa"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Telefono- / Mezu-biltegia"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Operadorea eta mezuak"</string>
 </resources>
diff --git a/res/values-fa/config.xml b/res/values-fa/config.xml
index a6e1687..8c2d094 100644
--- a/res/values-fa/config.xml
+++ b/res/values-fa/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"۲۰۴۰۴"</item>
-    <item msgid="6382338691947744378">"۳۱۰۱۲۰"</item>
-    <item msgid="1479229073702631561">"۳۱۱۴۸۰"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index 87e5239..c587129 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"پیکربندی شبکهٔ تلفن همراه"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"حافظه تلفن/پیام رسانی"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"فضای ذخیره تلفن و پیام‌رسانی"</string>
 </resources>
diff --git a/res/values-fi/config.xml b/res/values-fi/config.xml
index 965199f..99877a6 100644
--- a/res/values-fi/config.xml
+++ b/res/values-fi/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 35f6b61..8478884 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Matkapuhelinverkon määritykset"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Puhelimen/viestien tallennustila"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Puhelimen ja viestien tallennustila"</string>
 </resources>
diff --git a/res/values-fr-rCA/config.xml b/res/values-fr-rCA/config.xml
index 965199f..99877a6 100644
--- a/res/values-fr-rCA/config.xml
+++ b/res/values-fr-rCA/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index bb9f974..862bb32 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Configuration du réseau mobile"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Stockage téléphone+SMS/MMS"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Stockage tél. et messages"</string>
 </resources>
diff --git a/res/values-fr/config.xml b/res/values-fr/config.xml
index 965199f..99877a6 100644
--- a/res/values-fr/config.xml
+++ b/res/values-fr/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index bb9f974..6cfcdfb 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Configuration du réseau mobile"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Stockage téléphone+SMS/MMS"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Stockage tél. et SMS/MMS"</string>
 </resources>
diff --git a/res/values-gl-rES/config.xml b/res/values-gl-rES/config.xml
index 965199f..99877a6 100644
--- a/res/values-gl-rES/config.xml
+++ b/res/values-gl-rES/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-gl-rES/strings.xml b/res/values-gl-rES/strings.xml
index 6869a6e..317b3fb 100644
--- a/res/values-gl-rES/strings.xml
+++ b/res/values-gl-rES/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Configuración da rede móbil"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Almacenam. tfno./mensaxe"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Almacenamento tel. e mens."</string>
 </resources>
diff --git a/res/values-gu-rIN/config.xml b/res/values-gu-rIN/config.xml
index 965199f..99877a6 100644
--- a/res/values-gu-rIN/config.xml
+++ b/res/values-gu-rIN/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-gu-rIN/strings.xml b/res/values-gu-rIN/strings.xml
index 6dc1083..c35331d 100644
--- a/res/values-gu-rIN/strings.xml
+++ b/res/values-gu-rIN/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"મોબાઇલ નેટવર્ક ગોઠવણી"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"ફોન/મેસેજિંગ સંગ્રહ"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"ફોન/મેસેજિંગ સંગ્રહ"</string>
 </resources>
diff --git a/res/values-hi/config.xml b/res/values-hi/config.xml
index 965199f..99877a6 100644
--- a/res/values-hi/config.xml
+++ b/res/values-hi/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 4eedae0..34bb06b 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"मोबाइल नेटवर्क कॉन्फ़िगरेशन"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"फ़ोन/संदेश मेमोरी"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"फ़ोन और संदेश सेवा मेमोरी"</string>
 </resources>
diff --git a/res/values-hr/config.xml b/res/values-hr/config.xml
index 965199f..99877a6 100644
--- a/res/values-hr/config.xml
+++ b/res/values-hr/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index e5a90dc..c65b5ec 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Konfiguracija mobilne mreže"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Pohrana za telefon/poruke"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Pohrana za telefon/poruke"</string>
 </resources>
diff --git a/res/values-hu/config.xml b/res/values-hu/config.xml
index 965199f..99877a6 100644
--- a/res/values-hu/config.xml
+++ b/res/values-hu/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index 0a04a79..f82c03b 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Mobilhálózat konfigurációja"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Telefonos/üzenet-tárhely"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Telefon- és üzenettár"</string>
 </resources>
diff --git a/res/values-hy-rAM/config.xml b/res/values-hy-rAM/config.xml
index 965199f..99877a6 100644
--- a/res/values-hy-rAM/config.xml
+++ b/res/values-hy-rAM/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index 5a29628..b3a5b20 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Բջջային ցանցի կարգավորում"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Հեռախոսի/հաղորդակցման պահոց"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Հեռախոսի և հաղորդակցումների հիշողություն"</string>
 </resources>
diff --git a/res/values-in/config.xml b/res/values-in/config.xml
index 965199f..99877a6 100644
--- a/res/values-in/config.xml
+++ b/res/values-in/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index c67fa84..129a3da 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Konfigurasi Jaringan Seluler"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Penyimpanan Ponsel/Pesan"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Penyimpanan Ponsel dan Pesan"</string>
 </resources>
diff --git a/res/values-is-rIS/config.xml b/res/values-is-rIS/config.xml
index 965199f..99877a6 100644
--- a/res/values-is-rIS/config.xml
+++ b/res/values-is-rIS/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-is-rIS/strings.xml b/res/values-is-rIS/strings.xml
index c0c04fe..b96a7ff 100644
--- a/res/values-is-rIS/strings.xml
+++ b/res/values-is-rIS/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Grunnstilling farsímakerfis"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Geymsla síma/skilaboða"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Geymsla síma og skilaboða"</string>
 </resources>
diff --git a/res/values-it/config.xml b/res/values-it/config.xml
index 965199f..99877a6 100644
--- a/res/values-it/config.xml
+++ b/res/values-it/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index 5d8d2d0..9802433 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Configurazione rete mobile"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Archivio telefono/messaggi"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Memoria telefono/messaggi"</string>
 </resources>
diff --git a/res/values-iw/config.xml b/res/values-iw/config.xml
index 965199f..99877a6 100644
--- a/res/values-iw/config.xml
+++ b/res/values-iw/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index b5aa2bb..6d2ef10 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"תצורת רשת לנייד"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"אחסון טלפון/הודעות"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"טלפון ואחסון הודעות"</string>
 </resources>
diff --git a/res/values-ja/config.xml b/res/values-ja/config.xml
index 965199f..99877a6 100644
--- a/res/values-ja/config.xml
+++ b/res/values-ja/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index ee1a8e5..c9b80f4 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"モバイルネットワークの設定"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"電話/SMS用ストレージ"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"電話とSMS用ストレージ"</string>
 </resources>
diff --git a/res/values-ka-rGE/config.xml b/res/values-ka-rGE/config.xml
index 965199f..99877a6 100644
--- a/res/values-ka-rGE/config.xml
+++ b/res/values-ka-rGE/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index e26d329..fa84173 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"მობილური ქსელის კონფიგურაცია"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"ტელეფონის/შეტყობინებების საცავი"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"ტელ. &amp; შეტყობ. მეხსიერება"</string>
 </resources>
diff --git a/res/values-kk-rKZ/config.xml b/res/values-kk-rKZ/config.xml
index 965199f..99877a6 100644
--- a/res/values-kk-rKZ/config.xml
+++ b/res/values-kk-rKZ/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-kk-rKZ/strings.xml b/res/values-kk-rKZ/strings.xml
index 56176f3..a0cb308 100644
--- a/res/values-kk-rKZ/strings.xml
+++ b/res/values-kk-rKZ/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Ұялы Желі Конфигурациясы"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Телефон/Хабар жіберу жады"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Телефон және хабар алмасу қоймасы"</string>
 </resources>
diff --git a/res/values-km-rKH/config.xml b/res/values-km-rKH/config.xml
index 965199f..99877a6 100644
--- a/res/values-km-rKH/config.xml
+++ b/res/values-km-rKH/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-km-rKH/strings.xml b/res/values-km-rKH/strings.xml
index 5ca6f61..c0e65ea 100644
--- a/res/values-km-rKH/strings.xml
+++ b/res/values-km-rKH/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"ការ​កំណត់​រចនា​សម្ព័ន្ធ​​បណ្ដាញ​​ទូរស័ព្ទ​​ចល័ត"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"ឧបករណ៍​ផ្ទុក ទូរស័ព្ទ/ការ​ផ្ញើ​សារ"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"ឧបករណ៍ផ្ទុកទូរស័ព្ទ និងសារ"</string>
 </resources>
diff --git a/res/values-kn-rIN/config.xml b/res/values-kn-rIN/config.xml
index 965199f..99877a6 100644
--- a/res/values-kn-rIN/config.xml
+++ b/res/values-kn-rIN/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-kn-rIN/strings.xml b/res/values-kn-rIN/strings.xml
index 84a9963..87e43b4 100644
--- a/res/values-kn-rIN/strings.xml
+++ b/res/values-kn-rIN/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"ಮೊಬೈಲ್ ನೆಟ್‌‌ವರ್ಕ್‌ ಕಾನ್ಫಿಗರೇಶನ್"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"ಫೋನ್‌‌/ಸಂದೇಶಿಸುವಿಕೆ ಸಂಗ್ರಹಣೆ"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"ಫೋನ್‌‌ ಮತ್ತು ಸಂದೇಶ ಕಳುಹಿಸುವಿಕೆ ಸಂಗ್ರಹಣೆ"</string>
 </resources>
diff --git a/res/values-ko/config.xml b/res/values-ko/config.xml
index 965199f..99877a6 100644
--- a/res/values-ko/config.xml
+++ b/res/values-ko/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index ccd9a51..9e0799b 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"모바일 네트워크 구성"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"휴대전화/메시지 저장공간"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"전화 및 메시지 저장소"</string>
 </resources>
diff --git a/res/values-ky-rKG/config.xml b/res/values-ky-rKG/config.xml
index 965199f..99877a6 100644
--- a/res/values-ky-rKG/config.xml
+++ b/res/values-ky-rKG/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-ky-rKG/strings.xml b/res/values-ky-rKG/strings.xml
new file mode 100644
index 0000000..4383ad3
--- /dev/null
+++ b/res/values-ky-rKG/strings.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--  Copyright (C) 2008 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="app_label" product="tablet" msgid="9194799012395299737">"Мобилдик тармактын конфигурациясы"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Телфн ж-а SMS/MMS сактгч"</string>
+</resources>
diff --git a/res/values-lo-rLA/config.xml b/res/values-lo-rLA/config.xml
index 965199f..99877a6 100644
--- a/res/values-lo-rLA/config.xml
+++ b/res/values-lo-rLA/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-lo-rLA/strings.xml b/res/values-lo-rLA/strings.xml
index 9929161..80db46b 100644
--- a/res/values-lo-rLA/strings.xml
+++ b/res/values-lo-rLA/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"ການຕັ້ງຄ່າເຄືອຂ່າຍມືຖື"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"ບ່ອນເກັບຂໍ້ມູນໂທລະສັບ/ຂໍ້ຄວາມ"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"ບ່ອນເກັບຂໍ້ມູນ​ໃນ​ໂທ​ລະ​ສັບ ແລະ ຂໍ້​ຄວາມ"</string>
 </resources>
diff --git a/res/values-lt/config.xml b/res/values-lt/config.xml
index 965199f..99877a6 100644
--- a/res/values-lt/config.xml
+++ b/res/values-lt/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 3c26fdb..f9091a3 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Tinklo mobiliesiems konfigūracija"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Telefono / pranešimų saugykla"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Telef. ir susir. saugykla"</string>
 </resources>
diff --git a/res/values-lv/config.xml b/res/values-lv/config.xml
index 965199f..99877a6 100644
--- a/res/values-lv/config.xml
+++ b/res/values-lv/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index 8518f3c..fc64c44 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Mobilā tīkla konfigurācija"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Tālr./ziņojumapm. krāt."</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Tālruņa un īsziņu krātuve"</string>
 </resources>
diff --git a/res/values-mk-rMK/config.xml b/res/values-mk-rMK/config.xml
index 965199f..99877a6 100644
--- a/res/values-mk-rMK/config.xml
+++ b/res/values-mk-rMK/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-mk-rMK/strings.xml b/res/values-mk-rMK/strings.xml
index 2c1fd15..e1e6246 100644
--- a/res/values-mk-rMK/strings.xml
+++ b/res/values-mk-rMK/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Конфигурација на мобилна мрежа"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Меморија на телефон/пораки"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Меморија за телефонот и пораките"</string>
 </resources>
diff --git a/res/values-ml-rIN/config.xml b/res/values-ml-rIN/config.xml
index 965199f..99877a6 100644
--- a/res/values-ml-rIN/config.xml
+++ b/res/values-ml-rIN/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-ml-rIN/strings.xml b/res/values-ml-rIN/strings.xml
index 8849a0c..609d40e 100644
--- a/res/values-ml-rIN/strings.xml
+++ b/res/values-ml-rIN/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"മൊബൈൽ നെറ്റ്‌വർക്ക് കോൺഫിഗറേഷൻ"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"ഫോൺ/സന്ദേശ സംഭരണം"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"ഫോൺ, സന്ദേശമയക്കൽ സ്റ്റോറേജ്"</string>
 </resources>
diff --git a/res/values-mn-rMN/config.xml b/res/values-mn-rMN/config.xml
index 965199f..99877a6 100644
--- a/res/values-mn-rMN/config.xml
+++ b/res/values-mn-rMN/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-mn-rMN/strings.xml b/res/values-mn-rMN/strings.xml
index adab8c5..1c1c927 100644
--- a/res/values-mn-rMN/strings.xml
+++ b/res/values-mn-rMN/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Мобайль Сүлжээний Тохируулга"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Утас/Зурвасын Сан"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Гар утас болон Зурвасын Санах ой"</string>
 </resources>
diff --git a/res/values-mr-rIN/config.xml b/res/values-mr-rIN/config.xml
index 965199f..99877a6 100644
--- a/res/values-mr-rIN/config.xml
+++ b/res/values-mr-rIN/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-mr-rIN/strings.xml b/res/values-mr-rIN/strings.xml
index a354afc..2e2788d 100644
--- a/res/values-mr-rIN/strings.xml
+++ b/res/values-mr-rIN/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"मोबाइल नेटवर्क कॉन्‍फिगरेशन"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"फोन/संदेशन संचयन"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"फोन आणि संदेशन संचयन"</string>
 </resources>
diff --git a/res/values-ms-rMY/config.xml b/res/values-ms-rMY/config.xml
index 965199f..99877a6 100644
--- a/res/values-ms-rMY/config.xml
+++ b/res/values-ms-rMY/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index 45771ae..fdc24c7 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Konfigurasi Rangkaian Mudah Alih"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Storan Telefon/Pemesejan"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Storan Telefon &amp; Pemesejn"</string>
 </resources>
diff --git a/res/values-my-rMM/config.xml b/res/values-my-rMM/config.xml
index 965199f..99877a6 100644
--- a/res/values-my-rMM/config.xml
+++ b/res/values-my-rMM/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-my-rMM/strings.xml b/res/values-my-rMM/strings.xml
index fe6f377..e161f81 100644
--- a/res/values-my-rMM/strings.xml
+++ b/res/values-my-rMM/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"မိုဘိုင်း ကွန်ရက် အစီအစဉ်"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"ဖုန်း/စာပို့ခြင်း သိုလှောင်မှု"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"ဖုန်းနှင့် စာပို့ခြင်း သိုလှောင်မှု"</string>
 </resources>
diff --git a/res/values-nb/config.xml b/res/values-nb/config.xml
index 965199f..99877a6 100644
--- a/res/values-nb/config.xml
+++ b/res/values-nb/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index f74bc5d..bb28ae0 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Konfigurasjon av mobilnettverk"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Lagring for telefon/mld."</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Lagring for telefon og meldinger"</string>
 </resources>
diff --git a/res/values-ne-rNP/config.xml b/res/values-ne-rNP/config.xml
index 8056af1..629af9c 100644
--- a/res/values-ne-rNP/config.xml
+++ b/res/values-ne-rNP/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"२०४०४"</item>
-    <item msgid="6382338691947744378">"३१०१२०"</item>
-    <item msgid="1479229073702631561">"३११४८०"</item>
+    <item msgid="5639159280778239123">"३१०००४"</item>
+    <item msgid="3860605521380788028">"३१०१२०"</item>
+    <item msgid="537693705785480198">"३११४८०"</item>
   </string-array>
 </resources>
diff --git a/res/values-ne-rNP/strings.xml b/res/values-ne-rNP/strings.xml
index bf5b2b6..131d31a 100644
--- a/res/values-ne-rNP/strings.xml
+++ b/res/values-ne-rNP/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"मोबाइल नेटवर्क कन्फिगरेसन"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"फोन/सन्देश भण्डारण"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"फोन र सन्देश प्रवाह भण्डारण"</string>
 </resources>
diff --git a/res/values-nl/config.xml b/res/values-nl/config.xml
index 965199f..99877a6 100644
--- a/res/values-nl/config.xml
+++ b/res/values-nl/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index ff7e2c5..041984f 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Configuratie mobiel netwerk"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Opslag voor telefoon/berichten"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Opslag telefoon/berichten"</string>
 </resources>
diff --git a/res/values-pa-rIN/config.xml b/res/values-pa-rIN/config.xml
index 965199f..99877a6 100644
--- a/res/values-pa-rIN/config.xml
+++ b/res/values-pa-rIN/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-pa-rIN/strings.xml b/res/values-pa-rIN/strings.xml
index e499a0a..2c063bc 100644
--- a/res/values-pa-rIN/strings.xml
+++ b/res/values-pa-rIN/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"ਮੋਬਾਈਲ ਨੈਟਵਰਕ ਕੌਂਫਿਗਰੇਸ਼ਨ"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"ਫੋਨ/ਮੈਸੇਜ਼ਿੰਗ ਸਟੋਰੇਜ"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"ਫ਼ੋਨ ਅਤੇ ਮੈਸੇਜ਼ਿਗ ਸਟੋਰੇਜ"</string>
 </resources>
diff --git a/res/values-pl/config.xml b/res/values-pl/config.xml
index 965199f..99877a6 100644
--- a/res/values-pl/config.xml
+++ b/res/values-pl/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 9c7c158..29ac057 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Konfiguracja sieci komórkowej"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Telefon/Pamięć wiadomości"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Pamięć telefonu i SMS-ów"</string>
 </resources>
diff --git a/res/values-pt-rPT/config.xml b/res/values-pt-rPT/config.xml
index 965199f..99877a6 100644
--- a/res/values-pt-rPT/config.xml
+++ b/res/values-pt-rPT/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 35e728a..3ccf200 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Configuração de rede móvel"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Telef./armaz. de mensag."</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Tel. e armaz. de mensag."</string>
 </resources>
diff --git a/res/values-pt/config.xml b/res/values-pt/config.xml
index 965199f..99877a6 100644
--- a/res/values-pt/config.xml
+++ b/res/values-pt/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index a581be6..713e580 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Configuração da rede móvel"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Armazenamento de mensagens/telefone"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Armazenamento de mensagens/smartphone"</string>
 </resources>
diff --git a/res/values-ro/config.xml b/res/values-ro/config.xml
index 965199f..99877a6 100644
--- a/res/values-ro/config.xml
+++ b/res/values-ro/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index a54811d..a2c590c 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -16,6 +16,6 @@
 
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
-    <string name="app_label" product="tablet" msgid="9194799012395299737">"Configuraţia reţelei de telefonie mobilă"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Stocare telefon/mesaje"</string>
+    <string name="app_label" product="tablet" msgid="9194799012395299737">"Configurația reţelei de telefonie mobilă"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Stocare Telefon/Mesagerie"</string>
 </resources>
diff --git a/res/values-ru/config.xml b/res/values-ru/config.xml
index 965199f..99877a6 100644
--- a/res/values-ru/config.xml
+++ b/res/values-ru/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 4bd8bc7..78e8670 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Настройки мобильной сети"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Память номеров/SMS/MMS"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Память – звонки и SMS/MMS"</string>
 </resources>
diff --git a/res/values-si-rLK/config.xml b/res/values-si-rLK/config.xml
index 965199f..99877a6 100644
--- a/res/values-si-rLK/config.xml
+++ b/res/values-si-rLK/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-si-rLK/strings.xml b/res/values-si-rLK/strings.xml
index 64d17b9..47ab731 100644
--- a/res/values-si-rLK/strings.xml
+++ b/res/values-si-rLK/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"ජංගම ජාල වින්‍යාස කිරීම"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"දුරකථන/පණිවිඩ යැවීමේ ආචයනය"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"දුරකථන හා පණිවිඩ ආචයනය"</string>
 </resources>
diff --git a/res/values-sk/config.xml b/res/values-sk/config.xml
index 965199f..99877a6 100644
--- a/res/values-sk/config.xml
+++ b/res/values-sk/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 9b3a34a..65e91df 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Konfigurácia mobilnej siete"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Telefón / Ukladací priestor SMS"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Telefón a úložisko správ"</string>
 </resources>
diff --git a/res/values-sl/config.xml b/res/values-sl/config.xml
index 965199f..99877a6 100644
--- a/res/values-sl/config.xml
+++ b/res/values-sl/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index c2971ea..35892ee 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Nastavitev mobilnega omrežja"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Telefon/pomnilnik za sporočila"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Shramba za telefon in sporočila"</string>
 </resources>
diff --git a/res/values-sq-rAL/config.xml b/res/values-sq-rAL/config.xml
index 965199f..99877a6 100644
--- a/res/values-sq-rAL/config.xml
+++ b/res/values-sq-rAL/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-sq-rAL/strings.xml b/res/values-sq-rAL/strings.xml
index 17cf91d..dc23237 100644
--- a/res/values-sq-rAL/strings.xml
+++ b/res/values-sq-rAL/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Konfigurimi i rrjetit celular"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Hapësira ruajtëse e telefonit/mesazheve"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Hapësira ruajtëse e telefonit dhe mesazheve"</string>
 </resources>
diff --git a/res/values-sr/config.xml b/res/values-sr/config.xml
index 965199f..99877a6 100644
--- a/res/values-sr/config.xml
+++ b/res/values-sr/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index ce1e035..e5cd5b9 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Конфигурација мобилне мреже"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Меморија телефона/порука"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Меморија телефона и порука"</string>
 </resources>
diff --git a/res/values-sv/config.xml b/res/values-sv/config.xml
index 965199f..99877a6 100644
--- a/res/values-sv/config.xml
+++ b/res/values-sv/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 29c7de0..da530b3 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Konfiguration av mobilt nätverk"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Telefon-/meddelandelagr."</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Telefon-/meddelandelagr."</string>
 </resources>
diff --git a/res/values-sw/config.xml b/res/values-sw/config.xml
index 965199f..99877a6 100644
--- a/res/values-sw/config.xml
+++ b/res/values-sw/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 772a496..97319a2 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Usanidi wa Mtandao wa Simu"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Simu/Hifadhi ya ujumbe"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Hifadhi ya Simu na Ujumbe"</string>
 </resources>
diff --git a/res/values-ta-rIN/config.xml b/res/values-ta-rIN/config.xml
index 965199f..99877a6 100644
--- a/res/values-ta-rIN/config.xml
+++ b/res/values-ta-rIN/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-ta-rIN/strings.xml b/res/values-ta-rIN/strings.xml
index febf75f..b280259 100644
--- a/res/values-ta-rIN/strings.xml
+++ b/res/values-ta-rIN/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"மொபைல் நெட்வொர்க் உள்ளமைவு"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"மொபைல்/செய்தியிடலுக்கான சேமிப்பிடம்"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"போன் &amp; செய்தி சேமிப்பிடம்"</string>
 </resources>
diff --git a/res/values-te-rIN/config.xml b/res/values-te-rIN/config.xml
index 965199f..99877a6 100644
--- a/res/values-te-rIN/config.xml
+++ b/res/values-te-rIN/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-te-rIN/strings.xml b/res/values-te-rIN/strings.xml
index cea0749..0bbaa47 100644
--- a/res/values-te-rIN/strings.xml
+++ b/res/values-te-rIN/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"మొబైల్ నెట్‌వర్క్ కాన్ఫిగరేషన్"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"ఫోన్/సందేశ నిల్వ"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"ఫోన్ మరియు సందేశ నిల్వ"</string>
 </resources>
diff --git a/res/values-th/config.xml b/res/values-th/config.xml
index 965199f..99877a6 100644
--- a/res/values-th/config.xml
+++ b/res/values-th/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index eb804b2..97c6dc0 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"การกำหนดค่าเครือข่ายมือถือ"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"โทรศัพท์/ที่เก็บข้อความ"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"ที่จัดเก็บของโทรศัพท์/ข้อความ"</string>
 </resources>
diff --git a/res/values-tl/config.xml b/res/values-tl/config.xml
index 965199f..99877a6 100644
--- a/res/values-tl/config.xml
+++ b/res/values-tl/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index c2e81a7..544721c 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Configuration ng Network ng Mobile"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Imbakan ng Telepono/Pagpapadala ng mensahe"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Storage Tel. at Messaging"</string>
 </resources>
diff --git a/res/values-tr/config.xml b/res/values-tr/config.xml
index 965199f..99877a6 100644
--- a/res/values-tr/config.xml
+++ b/res/values-tr/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 5d385a2..164460b 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Mobil Ağ Yapılandırması"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Tlf/Mesajlaşma Deplm Brm"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Telefon ve Mesajlaşma Depolama Alanı"</string>
 </resources>
diff --git a/res/values-uk/config.xml b/res/values-uk/config.xml
index 965199f..99877a6 100644
--- a/res/values-uk/config.xml
+++ b/res/values-uk/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index ea0392d..34cf5aa 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Налаштування мобільної мережі"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Пам’ять телеф./повідомл."</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Пам’ять телефона"</string>
 </resources>
diff --git a/res/values-ur-rPK/config.xml b/res/values-ur-rPK/config.xml
index 965199f..99877a6 100644
--- a/res/values-ur-rPK/config.xml
+++ b/res/values-ur-rPK/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-ur-rPK/strings.xml b/res/values-ur-rPK/strings.xml
index d5d82e4..f1e21c7 100644
--- a/res/values-ur-rPK/strings.xml
+++ b/res/values-ur-rPK/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"موبائل نیٹ ورک کنفیگریشن"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"فون/پیغام رسانی اسٹوریج"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"فون اور پیغام رسانی اسٹوریج"</string>
 </resources>
diff --git a/res/values-uz-rUZ/config.xml b/res/values-uz-rUZ/config.xml
index 965199f..99877a6 100644
--- a/res/values-uz-rUZ/config.xml
+++ b/res/values-uz-rUZ/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-uz-rUZ/strings.xml b/res/values-uz-rUZ/strings.xml
index b006ba8..279bab8 100644
--- a/res/values-uz-rUZ/strings.xml
+++ b/res/values-uz-rUZ/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Uyali tarmoqni moslash"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Telefon/Xabar xotirasi"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Xotira – telefon va SMS/MMS"</string>
 </resources>
diff --git a/res/values-vi/config.xml b/res/values-vi/config.xml
index 965199f..99877a6 100644
--- a/res/values-vi/config.xml
+++ b/res/values-vi/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 62e2270..9865c8c 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Cấu hình mạng điện thoại di động"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Bộ nhớ điện thoại/tin nhắn"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Bộ nhớ đ.thoại+tin nhắn"</string>
 </resources>
diff --git a/res/values-zh-rCN/config.xml b/res/values-zh-rCN/config.xml
index 965199f..99877a6 100644
--- a/res/values-zh-rCN/config.xml
+++ b/res/values-zh-rCN/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index 24545e5..f9f5c27 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"移动网络配置"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"电话/短信存储"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"电话和短信存储"</string>
 </resources>
diff --git a/res/values-zh-rHK/config.xml b/res/values-zh-rHK/config.xml
index 965199f..99877a6 100644
--- a/res/values-zh-rHK/config.xml
+++ b/res/values-zh-rHK/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 4881e17..fc96850 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"流動網絡設定"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"手機/簡訊儲存裝置"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"手機及短訊儲存服務"</string>
 </resources>
diff --git a/res/values-zh-rTW/config.xml b/res/values-zh-rTW/config.xml
index 965199f..99877a6 100644
--- a/res/values-zh-rTW/config.xml
+++ b/res/values-zh-rTW/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index edb352f..7cbc2c7 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"行動網路設定"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"手機/簡訊儲存裝置"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"電話和簡訊儲存服務"</string>
 </resources>
diff --git a/res/values-zu/config.xml b/res/values-zu/config.xml
index 965199f..99877a6 100644
--- a/res/values-zu/config.xml
+++ b/res/values-zu/config.xml
@@ -3,7 +3,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="persist_apns_for_plmn">
     <item msgid="6413072509259000954">"20404"</item>
-    <item msgid="6382338691947744378">"310120"</item>
-    <item msgid="1479229073702631561">"311480"</item>
+    <item msgid="5639159280778239123">"310004"</item>
+    <item msgid="3860605521380788028">"310120"</item>
+    <item msgid="537693705785480198">"311480"</item>
   </string-array>
 </resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 702e971..e571505 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"Ukucushwa Kohleloxhumano Lweselula"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"Ifoni/Isigcini Somlayezo"</string>
+    <string name="app_label" product="default" msgid="8338087656149558019">"Isitoreji sefoni nokulayeza"</string>
 </resources>
diff --git a/src/com/android/providers/telephony/MmsProvider.java b/src/com/android/providers/telephony/MmsProvider.java
index bd31cc1..515ecad 100644
--- a/src/com/android/providers/telephony/MmsProvider.java
+++ b/src/com/android/providers/telephony/MmsProvider.java
@@ -547,7 +547,7 @@
         }
 
         if (notify) {
-            notifyChange();
+            notifyChange(res);
         }
         return res;
     }
@@ -643,7 +643,7 @@
         }
 
         if ((deletedRows > 0) && notify) {
-            notifyChange();
+            notifyChange(uri);
         }
         return deletedRows;
     }
@@ -816,7 +816,7 @@
         SQLiteDatabase db = mOpenHelper.getWritableDatabase();
         int count = db.update(table, finalValues, finalSelection, selectionArgs);
         if (notify && (count > 0)) {
-            notifyChange();
+            notifyChange(uri);
         }
         return count;
     }
@@ -922,9 +922,11 @@
         values.remove(Mms._ID);
     }
 
-    private void notifyChange() {
-        getContext().getContentResolver().notifyChange(
+    private void notifyChange(final Uri uri) {
+        final Context context = getContext();
+        context.getContentResolver().notifyChange(
                 MmsSms.CONTENT_URI, null, true, UserHandle.USER_ALL);
+        ProviderUtil.notifyIfNotDefaultSmsApp(uri, getCallingPackage(), context);
     }
 
     private final static String TAG = "MmsProvider";
diff --git a/src/com/android/providers/telephony/ProviderUtil.java b/src/com/android/providers/telephony/ProviderUtil.java
index 9435409..34c6da9 100644
--- a/src/com/android/providers/telephony/ProviderUtil.java
+++ b/src/com/android/providers/telephony/ProviderUtil.java
@@ -16,10 +16,16 @@
 
 package com.android.providers.telephony;
 
+import android.content.ComponentName;
 import android.content.ContentValues;
 import android.content.Context;
+import android.content.Intent;
+import android.net.Uri;
 import android.os.Process;
 import android.provider.Telephony;
+import android.provider.Telephony.Sms;
+import android.text.TextUtils;
+import android.util.Log;
 
 import com.android.internal.telephony.SmsApplication;
 
@@ -27,6 +33,7 @@
  * Helpers
  */
 public class ProviderUtil {
+    private final static String TAG = "SmsProvider";
 
     /**
      * Check if a caller of the provider has restricted access,
@@ -68,4 +75,41 @@
                 (values.containsKey(Telephony.Sms.CREATOR) ||
                         values.containsKey(Telephony.Mms.CREATOR));
     }
+
+    /**
+     * Notify the default SMS app of an SMS/MMS provider change if the change is being made
+     * by a package other than the default SMS app itself.
+     *
+     * @param uri The uri the provider change applies to
+     * @param callingPackage The package name of the provider caller
+     * @param Context
+     */
+    public static void notifyIfNotDefaultSmsApp(final Uri uri, final String callingPackage,
+            final Context context) {
+        if (TextUtils.equals(callingPackage, Telephony.Sms.getDefaultSmsPackage(context))) {
+            if (Log.isLoggable(TAG, Log.VERBOSE)) {
+                Log.d(TAG, "notifyIfNotDefaultSmsApp - called from default sms app");
+            }
+            return;
+        }
+        // Direct the intent to only the default SMS app, and only if the SMS app has a receiver
+        // for the intent.
+        ComponentName componentName =
+                SmsApplication.getDefaultExternalTelephonyProviderChangedApplication(context, true);
+        if (componentName == null) {
+            return;     // the default sms app doesn't have a receiver for this intent
+        }
+
+        final Intent intent =
+                new Intent(Telephony.Sms.Intents.ACTION_EXTERNAL_PROVIDER_CHANGE);
+        intent.setComponent(componentName);
+        if (uri != null) {
+            intent.setData(uri);
+        }
+        if (Log.isLoggable(TAG, Log.VERBOSE)) {
+            Log.d(TAG, "notifyIfNotDefaultSmsApp - called from " + callingPackage + ", notifying");
+        }
+        context.sendBroadcast(intent);
+    }
+
 }
diff --git a/src/com/android/providers/telephony/SmsProvider.java b/src/com/android/providers/telephony/SmsProvider.java
index d48f1c6..c282a7f 100644
--- a/src/com/android/providers/telephony/SmsProvider.java
+++ b/src/com/android/providers/telephony/SmsProvider.java
@@ -17,9 +17,12 @@
 package com.android.providers.telephony;
 
 import android.app.AppOpsManager;
+import android.content.ComponentName;
 import android.content.ContentProvider;
 import android.content.ContentResolver;
 import android.content.ContentValues;
+import android.content.Context;
+import android.content.Intent;
 import android.content.UriMatcher;
 import android.database.Cursor;
 import android.database.DatabaseUtils;
@@ -41,6 +44,8 @@
 import android.text.TextUtils;
 import android.util.Log;
 
+import com.android.internal.telephony.SmsApplication;
+
 import java.util.ArrayList;
 import java.util.HashMap;
 
@@ -402,6 +407,7 @@
 
         int match = sURLMatcher.match(url);
         String table = TABLE_SMS;
+        boolean notifyIfNotDefault = true;
 
         switch (match) {
             case SMS_ALL:
@@ -440,6 +446,10 @@
 
             case SMS_RAW_MESSAGE:
                 table = "raw";
+                // The raw table is used by the telephony layer for storing an sms before
+                // sending out a notification that an sms has arrived. We don't want to notify
+                // the default sms app of changes to this table.
+                notifyIfNotDefault = false;
                 break;
 
             case SMS_STATUS_PENDING:
@@ -575,7 +585,7 @@
             if (Log.isLoggable(TAG, Log.VERBOSE)) {
                 Log.d(TAG, "insert " + uri + " succeeded");
             }
-            notifyChange(uri);
+            notifyChange(notifyIfNotDefault, uri, callerPkg);
             return uri;
         } else {
             Log.e(TAG,"insert: failed!");
@@ -589,6 +599,7 @@
         int count;
         int match = sURLMatcher.match(url);
         SQLiteDatabase db = mOpenHelper.getWritableDatabase();
+        boolean notifyIfNotDefault = true;
         switch (match) {
             case SMS_ALL:
                 count = db.delete(TABLE_SMS, where, whereArgs);
@@ -627,6 +638,7 @@
 
             case SMS_RAW_MESSAGE:
                 count = db.delete("raw", where, whereArgs);
+                notifyIfNotDefault = false;
                 break;
 
             case SMS_STATUS_PENDING:
@@ -643,7 +655,7 @@
         }
 
         if (count > 0) {
-            notifyChange(url);
+            notifyChange(notifyIfNotDefault, url, getCallingPackage());
         }
         return count;
     }
@@ -678,11 +690,13 @@
         int count = 0;
         String table = TABLE_SMS;
         String extraWhere = null;
+        boolean notifyIfNotDefault = true;
         SQLiteDatabase db = mOpenHelper.getWritableDatabase();
 
         switch (sURLMatcher.match(url)) {
             case SMS_RAW_MESSAGE:
                 table = TABLE_RAW;
+                notifyIfNotDefault = false;
                 break;
 
             case SMS_STATUS_PENDING:
@@ -747,17 +761,21 @@
             if (Log.isLoggable(TAG, Log.VERBOSE)) {
                 Log.d(TAG, "update " + url + " succeeded");
             }
-            notifyChange(url);
+            notifyChange(notifyIfNotDefault, url, callerPkg);
         }
         return count;
     }
 
-    private void notifyChange(Uri uri) {
-        ContentResolver cr = getContext().getContentResolver();
+    private void notifyChange(boolean notifyIfNotDefault, Uri uri, final String callingPackage) {
+        final Context context = getContext();
+        ContentResolver cr = context.getContentResolver();
         cr.notifyChange(uri, null, true, UserHandle.USER_ALL);
         cr.notifyChange(MmsSms.CONTENT_URI, null, true, UserHandle.USER_ALL);
         cr.notifyChange(Uri.parse("content://mms-sms/conversations/"), null, true,
                 UserHandle.USER_ALL);
+        if (notifyIfNotDefault) {
+            ProviderUtil.notifyIfNotDefaultSmsApp(uri, callingPackage, context);
+        }
     }
 
     private SQLiteOpenHelper mOpenHelper;
diff --git a/src/com/android/providers/telephony/TelephonyBackupAgent.java b/src/com/android/providers/telephony/TelephonyBackupAgent.java
new file mode 100644
index 0000000..1e92966
--- /dev/null
+++ b/src/com/android/providers/telephony/TelephonyBackupAgent.java
@@ -0,0 +1,1101 @@
+/*
+ * 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.providers.telephony;
+
+import com.google.android.mms.ContentType;
+import com.google.android.mms.pdu.CharacterSets;
+
+import com.android.internal.annotations.VisibleForTesting;
+
+import android.annotation.TargetApi;
+import android.app.backup.BackupAgent;
+import android.app.backup.BackupDataInput;
+import android.app.backup.BackupDataOutput;
+import android.app.backup.FullBackupDataOutput;
+import android.content.ContentProvider;
+import android.content.ContentUris;
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.database.DatabaseUtils;
+import android.net.Uri;
+import android.os.Build;
+import android.os.ParcelFileDescriptor;
+import android.provider.BaseColumns;
+import android.provider.Telephony;
+import android.telephony.PhoneNumberUtils;
+import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
+import android.text.TextUtils;
+import android.util.ArrayMap;
+import android.util.ArraySet;
+import android.util.JsonReader;
+import android.util.JsonWriter;
+import android.util.Log;
+import android.util.SparseArray;
+
+import java.io.File;
+import java.io.FileDescriptor;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.UnsupportedEncodingException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Set;
+import java.util.zip.DeflaterOutputStream;
+import java.util.zip.InflaterInputStream;
+
+/***
+ * Backup agent for backup and restore SMS's and text MMS's.
+ *
+ * This backup agent stores SMS's into "sms_backup" file as a JSON array. Example below.
+ *  [{"self_phone":"+1234567891011","address":"+1234567891012","body":"Example sms",
+ *  "date":"1450893518140","date_sent":"1450893514000","status":"-1","type":"1"},
+ *  {"self_phone":"+1234567891011","address":"12345","body":"Example 2","date":"1451328022316",
+ *  "date_sent":"1451328018000","status":"-1","type":"1"}]
+ *
+ * Text MMS's are stored into "mms_backup" file as a JSON array. Example below.
+ *  [{"self_phone":"+1234567891011","date":"1451322716","date_sent":"0","m_type":"128","v":"18",
+ *  "msg_box":"2","mms_addresses":[{"type":137,"address":"+1234567891011","charset":106},
+ *  {"type":151,"address":"example@example.com","charset":106}],"mms_body":"Mms to email",
+ *  "mms_charset":106},
+ *  {"self_phone":"+1234567891011","sub":"MMS subject","date":"1451322955","date_sent":"0",
+ *  "m_type":"132","v":"17","msg_box":"1","ct_l":"http://promms/servlets/NOK5BBqgUHAqugrQNM",
+ *  "mms_addresses":[{"type":151,"address":"+1234567891011","charset":106}],
+ *  "mms_body":"Mms\nBody\r\n",
+ *  "mms_charset":106,"sub_cs":"106"}]
+ *
+ *   It deflates the files on the flight.
+ *   Every 1000 messages it backs up file, deletes it and creates a new one with the same name.
+ *
+ *   It stores how many bytes we are over the quota and don't backup the oldest messages.
+ */
+
+@TargetApi(Build.VERSION_CODES.M)
+public class TelephonyBackupAgent extends BackupAgent {
+    private static final String TAG = "TelephonyBackupAgent";
+    private static final boolean DEBUG = false;
+
+
+    // Copied from packages/apps/Messaging/src/com/android/messaging/sms/MmsUtils.java.
+    private static final int DEFAULT_DURATION = 5000; //ms
+
+    // Copied from packages/apps/Messaging/src/com/android/messaging/sms/MmsUtils.java.
+    @VisibleForTesting
+    static final String sSmilTextOnly =
+            "<smil>" +
+                "<head>" +
+                    "<layout>" +
+                        "<root-layout/>" +
+                        "<region id=\"Text\" top=\"0\" left=\"0\" "
+                        + "height=\"100%%\" width=\"100%%\"/>" +
+                    "</layout>" +
+                "</head>" +
+                "<body>" +
+                       "%s" +  // constructed body goes here
+                "</body>" +
+            "</smil>";
+
+    // Copied from packages/apps/Messaging/src/com/android/messaging/sms/MmsUtils.java.
+    @VisibleForTesting
+    static final String sSmilTextPart =
+            "<par dur=\"" + DEFAULT_DURATION + "ms\">" +
+                "<text src=\"%s\" region=\"Text\" />" +
+            "</par>";
+
+
+    // JSON key for phone number a message was sent from or received to.
+    private static final String SELF_PHONE_KEY = "self_phone";
+    // JSON key for list of addresses of MMS message.
+    private static final String MMS_ADDRESSES_KEY = "mms_addresses";
+    // JSON key for list of recipients of sms message.
+    private static final String SMS_RECIPIENTS = "sms_recipients";
+    // JSON key for MMS body.
+    private static final String MMS_BODY_KEY = "mms_body";
+    // JSON key for MMS charset.
+    private static final String MMS_BODY_CHARSET_KEY = "mms_charset";
+
+    // File names for backup/restore.
+    private static final String SMS_BACKUP_FILE = "sms_backup";
+    private static final String MMS_BACKUP_FILE = "mms_backup";
+
+    // Charset being used for reading/writing backup files.
+    private static final String CHARSET_UTF8 = "UTF-8";
+
+    // Order by ID entries from database.
+    private static final String ORDER_BY_ID = BaseColumns._ID + " ASC";
+
+    // Order by Date entries from database. We order it the oldest first in order to throw them if
+    // we are over quota.
+    private static final String ORDER_BY_DATE = "date ASC";
+
+    // Columns from SMS database for backup/restore.
+    @VisibleForTesting
+    static final String[] SMS_PROJECTION = new String[] {
+            Telephony.Sms._ID,
+            Telephony.Sms.SUBSCRIPTION_ID,
+            Telephony.Sms.ADDRESS,
+            Telephony.Sms.BODY,
+            Telephony.Sms.SUBJECT,
+            Telephony.Sms.DATE,
+            Telephony.Sms.DATE_SENT,
+            Telephony.Sms.STATUS,
+            Telephony.Sms.TYPE,
+            Telephony.Sms.THREAD_ID
+    };
+
+    // Columns to fetch recepients of SMS.
+    private static final String[] SMS_RECIPIENTS_PROJECTION = {
+            Telephony.Threads._ID,
+            Telephony.Threads.RECIPIENT_IDS
+    };
+
+    // Columns from MMS database for backup/restore.
+    @VisibleForTesting
+    static final String[] MMS_PROJECTION = new String[] {
+            Telephony.Mms._ID,
+            Telephony.Mms.SUBSCRIPTION_ID,
+            Telephony.Mms.SUBJECT,
+            Telephony.Mms.SUBJECT_CHARSET,
+            Telephony.Mms.DATE,
+            Telephony.Mms.DATE_SENT,
+            Telephony.Mms.MESSAGE_TYPE,
+            Telephony.Mms.MMS_VERSION,
+            Telephony.Mms.TEXT_ONLY,
+            Telephony.Mms.MESSAGE_BOX,
+            Telephony.Mms.CONTENT_LOCATION
+    };
+
+    // Columns from addr database for backup/restore. This database is used for fetching addresses
+    // for MMS message.
+    @VisibleForTesting
+    static final String[] MMS_ADDR_PROJECTION = new String[] {
+            Telephony.Mms.Addr.TYPE,
+            Telephony.Mms.Addr.ADDRESS,
+            Telephony.Mms.Addr.CHARSET
+    };
+
+    // Columns from part database for backup/restore. This database is used for fetching body text
+    // and charset for MMS message.
+    @VisibleForTesting
+    static final String[] MMS_TEXT_PROJECTION = new String[] {
+            Telephony.Mms.Part.CONTENT_TYPE,
+            Telephony.Mms.Part.TEXT,
+            Telephony.Mms.Part.CHARSET
+    };
+
+    // Maximum messages for one backup file. After reaching the limit the agent backs up the file,
+    // deletes it and creates a new one with the same name.
+    private static final int MAX_MSG_PER_FILE = 1000;
+
+
+    // Default values for SMS, MMS, Addresses restore.
+    private static final ContentValues defaultValuesSms = new ContentValues(3);
+    private static final ContentValues defaultValuesMms = new ContentValues(5);
+    private static final ContentValues defaultValuesAddr = new ContentValues(2);
+
+    // Shared preferences for the backup agent.
+    private static final String BACKUP_PREFS = "backup_shared_prefs";
+    // Key for storing bytes over.
+    private static final String BYTES_OVER_QUOTA_PREF_KEY = "bytes_over_quota";
+
+
+    static {
+        // Consider restored messages read and seen.
+        defaultValuesSms.put(Telephony.Sms.READ, 1);
+        defaultValuesSms.put(Telephony.Sms.SEEN, 1);
+        // If there is no sub_id with self phone number on restore set it to -1.
+        defaultValuesSms.put(Telephony.Sms.SUBSCRIPTION_ID, -1);
+
+        defaultValuesMms.put(Telephony.Mms.READ, 1);
+        defaultValuesMms.put(Telephony.Mms.SEEN, 1);
+        defaultValuesMms.put(Telephony.Mms.SUBSCRIPTION_ID, -1);
+        defaultValuesMms.put(Telephony.Mms.MESSAGE_BOX, Telephony.Mms.MESSAGE_BOX_ALL);
+        defaultValuesMms.put(Telephony.Mms.TEXT_ONLY, 1);
+
+        defaultValuesAddr.put(Telephony.Mms.Addr.TYPE, 0);
+        defaultValuesAddr.put(Telephony.Mms.Addr.CHARSET, CharacterSets.DEFAULT_CHARSET);
+    }
+
+
+    private SparseArray<String> subId2phone;
+    private Map<String, Integer> phone2subId;
+    private ContentProvider mSmsProvider;
+    private ContentProvider mMmsProvider;
+    private ContentProvider mMmsSmsProvider;
+
+    // How many bytes we have to skip to fit into quota.
+    private long mBytesOverQuota;
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+
+        subId2phone = new SparseArray<String>();
+        phone2subId = new ArrayMap<String, Integer>();
+        final SubscriptionManager subscriptionManager = SubscriptionManager.from(this);
+        if (subscriptionManager != null) {
+            final List<SubscriptionInfo> subInfo =
+                    subscriptionManager.getActiveSubscriptionInfoList();
+            if (subInfo != null) {
+                for (SubscriptionInfo sub : subInfo) {
+                    final String phoneNumber = getNormalizedNumber(sub);
+                    subId2phone.append(sub.getSubscriptionId(), phoneNumber);
+                    phone2subId.put(phoneNumber, sub.getSubscriptionId());
+                }
+            }
+        }
+
+        mSmsProvider = new SmsProvider();
+        mMmsProvider = new MmsProvider();
+        mMmsSmsProvider = new MmsSmsProvider();
+
+        attachAndCreateProviders();
+    }
+
+    private void attachAndCreateProviders() {
+        mSmsProvider.attachInfo(this, null);
+        mSmsProvider.onCreate();
+
+        mMmsProvider.attachInfo(this, null);
+        mMmsProvider.onCreate();
+
+        mMmsSmsProvider.attachInfo(this, null);
+        mMmsSmsProvider.onCreate();
+    }
+
+    @Override
+    public void onFullBackup(FullBackupDataOutput data) throws IOException {
+        mBytesOverQuota = getSharedPreferences(BACKUP_PREFS, MODE_PRIVATE).
+                getLong(BYTES_OVER_QUOTA_PREF_KEY, 0);
+
+        backupAllSms(data);
+        backupAllMms(data);
+    }
+
+    @Override
+    public void onQuotaExceeded(long backupDataBytes, long quotaBytes) {
+        mBytesOverQuota = (long)((backupDataBytes - quotaBytes)*1.1);
+        getSharedPreferences(BACKUP_PREFS, MODE_PRIVATE).edit()
+                .putLong(BYTES_OVER_QUOTA_PREF_KEY, mBytesOverQuota).apply();
+    }
+
+    private void backupAllSms(FullBackupDataOutput data) throws IOException {
+        try (Cursor cursor = mSmsProvider.query(Telephony.Sms.CONTENT_URI, SMS_PROJECTION, null,
+                null, ORDER_BY_DATE)) {
+            if (DEBUG) {
+                Log.i(TAG, "Backing up SMS");
+            }
+            if (cursor != null) {
+                while (!cursor.isLast() && !cursor.isAfterLast()) {
+                    try (JsonWriter jsonWriter = getJsonWriter(SMS_BACKUP_FILE)) {
+                        putSmsMessagesToJson(cursor, subId2phone, jsonWriter, mMmsSmsProvider,
+                                MAX_MSG_PER_FILE);
+                    }
+                    backupFile(SMS_BACKUP_FILE, data);
+                }
+            }
+        }
+    }
+
+    private void backupAllMms(FullBackupDataOutput data) throws IOException {
+        try (Cursor cursor = mMmsProvider.query(Telephony.Mms.CONTENT_URI, MMS_PROJECTION, null,
+                null, ORDER_BY_DATE)) {
+            if (DEBUG) {
+                Log.i(TAG, "Backing up text MMS");
+            }
+            if (cursor != null) {
+                while (!cursor.isLast() && !cursor.isAfterLast()) {
+                    try (JsonWriter jsonWriter = getJsonWriter(MMS_BACKUP_FILE)) {
+                        putMmsMessagesToJson(cursor, mMmsProvider, subId2phone, jsonWriter,
+                                MAX_MSG_PER_FILE);
+                    }
+                    backupFile(MMS_BACKUP_FILE, data);
+                }
+            }
+        }
+    }
+
+    @VisibleForTesting
+    static void putMmsMessagesToJson(Cursor cursor, ContentProvider mmsProvider,
+                                     SparseArray<String> subId2phone, JsonWriter jsonWriter,
+                                     int maxMsgPerFile) throws IOException {
+        jsonWriter.beginArray();
+        for (int msgCount=0; msgCount<maxMsgPerFile && cursor.moveToNext();) {
+            msgCount += writeMmsToWriter(jsonWriter, cursor, subId2phone, mmsProvider);
+        }
+        jsonWriter.endArray();
+    }
+
+    @VisibleForTesting
+    static void putSmsMessagesToJson(Cursor cursor, SparseArray<String> subId2phone,
+                                     JsonWriter jsonWriter, ContentProvider threadProvider,
+                                     int maxMsgPerFile) throws IOException {
+
+        jsonWriter.beginArray();
+        for (int msgCount=0; msgCount<maxMsgPerFile && cursor.moveToNext(); ++msgCount) {
+            writeSmsToWriter(jsonWriter, cursor, threadProvider, subId2phone);
+        }
+        jsonWriter.endArray();
+    }
+
+    private void backupFile(String fileName, FullBackupDataOutput data) {
+        final File file = new File(getFilesDir().getPath() + "/" + fileName);
+        try {
+            if (mBytesOverQuota > 0) {
+                mBytesOverQuota -= file.length();
+                return;
+            }
+            super.fullBackupFile(file, data);
+        } finally {
+            file.delete();
+        }
+    }
+
+    @Override
+    public void onRestoreFile(ParcelFileDescriptor data, long size, File destination, int type,
+                              long mode, long mtime) throws IOException {
+        if (DEBUG) {
+            Log.i(TAG, "Restoring file " + destination.getName());
+        }
+
+        if (destination.getName().equals(SMS_BACKUP_FILE)) {
+            if (DEBUG) {
+                Log.i(TAG, "Restoring SMS");
+            }
+            try (JsonReader jsonReader = getJsonReader(data.getFileDescriptor())) {
+                putSmsMessagesToProvider(jsonReader, mSmsProvider, mMmsSmsProvider, phone2subId);
+            }
+        } else if (destination.getName().equals(MMS_BACKUP_FILE)) {
+            if (DEBUG) {
+                Log.i(TAG, "Restoring text MMS");
+            }
+            try (JsonReader jsonReader = getJsonReader(data.getFileDescriptor())) {
+                putMmsMessagesToProvider(jsonReader, mMmsProvider, mMmsSmsProvider, phone2subId);
+            }
+        } else {
+            super.onRestoreFile(data, size, destination, type, mode, mtime);
+        }
+        if (DEBUG) {
+            Log.i(TAG, "Finished restore");
+        }
+    }
+
+    @VisibleForTesting
+    static void putSmsMessagesToProvider(JsonReader jsonReader, ContentProvider smsProvider,
+                                         ContentProvider threadProvider,
+                                         Map<String, Integer> phone2subId) throws IOException {
+        jsonReader.beginArray();
+        while (jsonReader.hasNext()) {
+            ContentValues smsValues =
+                    readSmsValuesFromReader(jsonReader, threadProvider, phone2subId);
+            if (doesSmsExist(smsProvider, smsValues)) {
+                if (DEBUG) {
+                    Log.e(TAG, String.format("Sms: %s already exists", smsValues.toString()));
+                }
+                continue;
+            }
+            smsProvider.insert(Telephony.Sms.CONTENT_URI, smsValues);
+        }
+        jsonReader.endArray();
+    }
+
+    @VisibleForTesting
+    static void putMmsMessagesToProvider(JsonReader jsonReader, ContentProvider mmsProvider,
+                                         ContentProvider threadProvider,
+                                         Map<String, Integer> phone2subId) throws IOException {
+        jsonReader.beginArray();
+        while (jsonReader.hasNext()) {
+            final Mms mms = readMmsFromReader(jsonReader, threadProvider, phone2subId);
+            if (doesMmsExist(mmsProvider, mms)) {
+                if (DEBUG) {
+                    Log.e(TAG, String.format("Mms: %s already exists", mms.toString()));
+                }
+                continue;
+            }
+            addMmsMessage(mmsProvider, mms);
+        }
+    }
+
+    @VisibleForTesting
+    static final String[] PROJECTION_ID = {BaseColumns._ID};
+
+    private static boolean doesSmsExist(ContentProvider smsProvider, ContentValues smsValues) {
+        final String where = String.format("%s = %d and %s = %s",
+                Telephony.Sms.DATE, smsValues.getAsLong(Telephony.Sms.DATE),
+                Telephony.Sms.BODY,
+                DatabaseUtils.sqlEscapeString(smsValues.getAsString(Telephony.Sms.BODY)));
+        try (Cursor cursor = smsProvider.query(Telephony.Sms.CONTENT_URI, PROJECTION_ID, where,
+                null, null)) {
+            return cursor != null && cursor.getCount() > 0;
+        }
+    }
+
+    private static boolean doesMmsExist(ContentProvider mmsProvider, Mms mms) {
+        final String where = String.format("%s = %d",
+                Telephony.Sms.DATE, mms.values.getAsLong(Telephony.Mms.DATE));
+        try (Cursor cursor = mmsProvider.query(Telephony.Mms.CONTENT_URI, PROJECTION_ID, where,
+                null, null)) {
+            if (cursor != null && cursor.moveToFirst()) {
+                do {
+                    final int mmsId = cursor.getInt(0);
+                    final MmsBody body = getMmsBody(mmsProvider, mmsId);
+                    if (body != null && body.equals(mms.body)) {
+                        return true;
+                    }
+                } while (cursor.moveToNext());
+            }
+        }
+        return false;
+    }
+
+    private static String getNormalizedNumber(SubscriptionInfo subscriptionInfo) {
+        if (subscriptionInfo == null) {
+            return null;
+        }
+        return PhoneNumberUtils.formatNumberToE164(subscriptionInfo.getNumber(),
+                subscriptionInfo.getCountryIso().toUpperCase(Locale.US));
+    }
+
+    private static void writeSmsToWriter(JsonWriter jsonWriter, Cursor cursor,
+                                         ContentProvider threadProvider,
+                                         SparseArray<String> subId2phone) throws IOException {
+        jsonWriter.beginObject();
+
+        for (int i=0; i<cursor.getColumnCount(); ++i) {
+            final String name = cursor.getColumnName(i);
+            final String value = cursor.getString(i);
+            if (value == null) {
+                continue;
+            }
+            switch (name) {
+                case Telephony.Sms.SUBSCRIPTION_ID:
+                    final int subId = cursor.getInt(i);
+                    final String selfNumber = subId2phone.get(subId);
+                    if (selfNumber != null) {
+                        jsonWriter.name(SELF_PHONE_KEY).value(selfNumber);
+                    }
+                    break;
+                case Telephony.Sms.THREAD_ID:
+                    final long threadId = cursor.getLong(i);
+                    writeSmsRecipientsToWriter(jsonWriter.name(SMS_RECIPIENTS),
+                            getRecipientsByThread(threadProvider, threadId));
+                    break;
+                case Telephony.Sms._ID:
+                    break;
+                default:
+                    jsonWriter.name(name).value(value);
+                    break;
+            }
+        }
+        jsonWriter.endObject();
+
+    }
+
+    private static void writeSmsRecipientsToWriter(JsonWriter jsonWriter, List<String> recipients)
+            throws IOException {
+        jsonWriter.beginArray();
+        if (recipients != null) {
+            for (String s : recipients) {
+                jsonWriter.value(s);
+            }
+        }
+        jsonWriter.endArray();
+    }
+
+    @VisibleForTesting
+    static ContentValues readSmsValuesFromReader(JsonReader jsonReader,
+                                                 ContentProvider threadProvider,
+                                                 Map<String, Integer> phone2id)
+            throws IOException {
+        ContentValues values = new ContentValues(8+defaultValuesSms.size());
+        values.putAll(defaultValuesSms);
+        jsonReader.beginObject();
+        while (jsonReader.hasNext()) {
+            String name = jsonReader.nextName();
+            switch (name) {
+                case Telephony.Sms.BODY:
+                case Telephony.Sms.DATE:
+                case Telephony.Sms.DATE_SENT:
+                case Telephony.Sms.STATUS:
+                case Telephony.Sms.TYPE:
+                case Telephony.Sms.SUBJECT:
+                case Telephony.Sms.ADDRESS:
+                    values.put(name, jsonReader.nextString());
+                    break;
+                case SMS_RECIPIENTS:
+                    values.put(Telephony.Sms.THREAD_ID,
+                            getOrCreateThreadId(threadProvider, getSmsRecipients(jsonReader)));
+                    break;
+                case SELF_PHONE_KEY:
+                    final String selfPhone = jsonReader.nextString();
+                    if (phone2id.containsKey(selfPhone)) {
+                        values.put(Telephony.Sms.SUBSCRIPTION_ID, phone2id.get(selfPhone));
+                    }
+                    break;
+                default:
+                    if (DEBUG) {
+                        Log.w(TAG, "Unknown name:" + name);
+                    }
+                    jsonReader.skipValue();
+                    break;
+            }
+        }
+        jsonReader.endObject();
+        return values;
+    }
+
+    private static Set<String> getSmsRecipients(JsonReader jsonReader) throws IOException {
+        Set<String> recipients = new ArraySet<String>();
+        jsonReader.beginArray();
+        while (jsonReader.hasNext()) {
+            recipients.add(jsonReader.nextString());
+        }
+        jsonReader.endArray();
+        return recipients;
+    }
+
+    private static int writeMmsToWriter(JsonWriter jsonWriter, Cursor cursor,
+                                        SparseArray<String> subId2phone,
+                                        ContentProvider mmsProvider) throws IOException {
+        // Do not backup non text-only MMS's.
+        if (cursor.getInt(cursor.getColumnIndex(Telephony.Mms.TEXT_ONLY)) != 1) {
+            return 0;
+        }
+        final int mmsId = cursor.getInt(0);
+        final MmsBody body = getMmsBody(mmsProvider, mmsId);
+        if (body == null || body.text == null) {
+            return 0;
+        }
+
+        boolean subjectNull = true;
+        jsonWriter.beginObject();
+        for (int i=0; i<cursor.getColumnCount(); ++i) {
+            final String name = cursor.getColumnName(i);
+            final String value = cursor.getString(i);
+            if (value == null) {
+                continue;
+            }
+            switch (name) {
+                case Telephony.Sms.SUBSCRIPTION_ID:
+                    final int subId = cursor.getInt(i);
+                    final String selfNumber = subId2phone.get(subId);
+                    if (selfNumber != null) {
+                        jsonWriter.name(SELF_PHONE_KEY).value(selfNumber);
+                    }
+                    break;
+                case Telephony.Mms._ID:
+                case Telephony.Mms.TEXT_ONLY:
+                case Telephony.Mms.SUBJECT_CHARSET:
+                    break;
+                case Telephony.Mms.SUBJECT:
+                    subjectNull = false;
+                default:
+                    jsonWriter.name(name).value(value);
+                    break;
+            }
+        }
+        // Addresses.
+        writeMmsAddresses(jsonWriter.name(MMS_ADDRESSES_KEY), mmsProvider, mmsId);
+        // Body (text of the message).
+        jsonWriter.name(MMS_BODY_KEY).value(body.text);
+        // Charset of the body text.
+        jsonWriter.name(MMS_BODY_CHARSET_KEY).value(body.charSet);
+
+        if (!subjectNull) {
+            // Subject charset.
+            writeStringToWriter(jsonWriter, cursor, Telephony.Mms.SUBJECT_CHARSET);
+        }
+        jsonWriter.endObject();
+        return 1;
+    }
+
+    private static Mms readMmsFromReader(JsonReader jsonReader, ContentProvider threadProvider,
+                                         Map<String, Integer> phone2id) throws IOException {
+        Mms mms = new Mms();
+        mms.values = new ContentValues(6+defaultValuesMms.size());
+        mms.values.putAll(defaultValuesMms);
+        jsonReader.beginObject();
+        String selfPhone = null;
+        String bodyText = null;
+        int bodyCharset = CharacterSets.DEFAULT_CHARSET;
+        while (jsonReader.hasNext()) {
+            String name = jsonReader.nextName();
+            switch (name) {
+                case SELF_PHONE_KEY:
+                    selfPhone = jsonReader.nextString();
+                    if (phone2id.containsKey(selfPhone)) {
+                        mms.values.put(Telephony.Mms.SUBSCRIPTION_ID, phone2id.get(selfPhone));
+                    }
+                    break;
+                case MMS_ADDRESSES_KEY:
+                    getMmsAddressesFromReader(jsonReader, mms);
+                    break;
+                case MMS_BODY_KEY:
+                    bodyText = jsonReader.nextString();
+                    break;
+                case MMS_BODY_CHARSET_KEY:
+                    bodyCharset = jsonReader.nextInt();
+                    break;
+                case Telephony.Mms.SUBJECT:
+                case Telephony.Mms.SUBJECT_CHARSET:
+                case Telephony.Mms.DATE:
+                case Telephony.Mms.DATE_SENT:
+                case Telephony.Mms.MESSAGE_TYPE:
+                case Telephony.Mms.MMS_VERSION:
+                case Telephony.Mms.MESSAGE_BOX:
+                case Telephony.Mms.CONTENT_LOCATION:
+                    mms.values.put(name, jsonReader.nextString());
+                    break;
+                default:
+                    if (DEBUG) {
+                        Log.w(TAG, "Unknown name:" + name);
+                    }
+                    jsonReader.skipValue();
+                    break;
+            }
+        }
+        jsonReader.endObject();
+
+        if (bodyText != null) {
+            mms.body = new MmsBody(bodyText, bodyCharset);
+        }
+
+        { // Get ThreadId.
+            Set<String> recipients = new ArraySet<String>();
+            for (ContentValues mmsAddress : mms.addresses) {
+                String address = getDecodedString(
+                        getStringBytes(mmsAddress.getAsString(Telephony.Mms.Addr.ADDRESS),
+                                CharacterSets.ISO_8859_1),
+                        mmsAddress.getAsInteger(Telephony.Mms.Addr.CHARSET));
+                if (selfPhone != null && selfPhone.equals(address))
+                    continue;
+                recipients.add(address);
+            }
+            mms.values.put(Telephony.Mms.THREAD_ID,
+                    getOrCreateThreadId(threadProvider, recipients));
+        }
+
+        // Set default charset for subject.
+        if (mms.values.get(Telephony.Mms.SUBJECT) != null &&
+                mms.values.get(Telephony.Mms.SUBJECT_CHARSET) == null) {
+            mms.values.put(Telephony.Mms.SUBJECT_CHARSET, CharacterSets.DEFAULT_CHARSET);
+        }
+
+        return mms;
+    }
+
+    private static MmsBody getMmsBody(ContentProvider mmsProvider, int mmsId) {
+        Uri MMS_PART_CONTENT_URI = Telephony.Mms.CONTENT_URI.buildUpon()
+                .appendPath(String.valueOf(mmsId)).appendPath("part").build();
+
+        String body = null;
+        int charSet = 0;
+
+        try (Cursor cursor = mmsProvider.query(MMS_PART_CONTENT_URI, MMS_TEXT_PROJECTION,
+                null, null/*selectionArgs*/, ORDER_BY_ID)) {
+            if (cursor != null && cursor.moveToFirst()) {
+                do {
+                    if (ContentType.TEXT_PLAIN.equals(cursor.getString(0))) {
+                        body = (body == null ? cursor.getString(1)
+                                             : body.concat(cursor.getString(1)));
+                        charSet = cursor.getInt(2);
+                    }
+                } while (cursor.moveToNext());
+            }
+        }
+        return (body == null ? null : new MmsBody(body, charSet));
+    }
+
+    private static void writeMmsAddresses(JsonWriter jsonWriter, ContentProvider mmsProvider,
+                                          int mmsId) throws IOException {
+        Uri.Builder builder = Telephony.Mms.CONTENT_URI.buildUpon();
+        builder.appendPath(String.valueOf(mmsId)).appendPath("addr");
+        Uri uriAddrPart = builder.build();
+
+        jsonWriter.beginArray();
+        try (Cursor cursor = mmsProvider.query(uriAddrPart, MMS_ADDR_PROJECTION,
+                null/*selection*/, null/*selectionArgs*/, ORDER_BY_ID)) {
+            if (cursor != null && cursor.moveToFirst()) {
+                do {
+                    if (cursor.getString(cursor.getColumnIndex(Telephony.Mms.Addr.ADDRESS))
+                            != null) {
+                        jsonWriter.beginObject();
+                        writeIntToWriter(jsonWriter, cursor, Telephony.Mms.Addr.TYPE);
+                        writeStringToWriter(jsonWriter, cursor, Telephony.Mms.Addr.ADDRESS);
+                        writeIntToWriter(jsonWriter, cursor, Telephony.Mms.Addr.CHARSET);
+                        jsonWriter.endObject();
+                    }
+                } while (cursor.moveToNext());
+            }
+        }
+        jsonWriter.endArray();
+    }
+
+    private static void getMmsAddressesFromReader(JsonReader jsonReader, Mms mms)
+            throws IOException {
+        mms.addresses = new ArrayList<ContentValues>();
+        jsonReader.beginArray();
+        while (jsonReader.hasNext()) {
+            jsonReader.beginObject();
+            ContentValues addrValues = new ContentValues(defaultValuesAddr);
+            while (jsonReader.hasNext()) {
+                final String name = jsonReader.nextName();
+                switch (name) {
+                    case Telephony.Mms.Addr.TYPE:
+                    case Telephony.Mms.Addr.CHARSET:
+                        addrValues.put(name, jsonReader.nextInt());
+                        break;
+                    case Telephony.Mms.Addr.ADDRESS:
+                        addrValues.put(name, jsonReader.nextString());
+                        break;
+                    default:
+                        if (DEBUG) {
+                            Log.w(TAG, "Unknown name:" + name);
+                        }
+                        jsonReader.skipValue();
+                        break;
+                }
+            }
+            jsonReader.endObject();
+            if (addrValues.containsKey(Telephony.Mms.Addr.ADDRESS)) {
+                mms.addresses.add(addrValues);
+            }
+        }
+        jsonReader.endArray();
+    }
+
+    private static void addMmsMessage(ContentProvider mmsProvider, Mms mms) {
+        if (DEBUG) {
+            Log.e(TAG, "Add mms:\n" + mms.toString());
+        }
+        final long dummyId = System.currentTimeMillis(); // Dummy ID of the msg.
+        final Uri partUri = Telephony.Mms.CONTENT_URI.buildUpon()
+                .appendPath(String.valueOf(dummyId)).appendPath("part").build();
+
+        final String srcName = String.format("text.%06d.txt", 0);
+        { // Insert SMIL part.
+            final String smilBody = String.format(sSmilTextPart, srcName);
+            final String smil = String.format(sSmilTextOnly, smilBody);
+            final ContentValues values = new ContentValues(7);
+            values.put(Telephony.Mms.Part.MSG_ID, dummyId);
+            values.put(Telephony.Mms.Part.SEQ, -1);
+            values.put(Telephony.Mms.Part.CONTENT_TYPE, ContentType.APP_SMIL);
+            values.put(Telephony.Mms.Part.NAME, "smil.xml");
+            values.put(Telephony.Mms.Part.CONTENT_ID, "<smil>");
+            values.put(Telephony.Mms.Part.CONTENT_LOCATION, "smil.xml");
+            values.put(Telephony.Mms.Part.TEXT, smil);
+            if (mmsProvider.insert(partUri, values) == null) {
+                if (DEBUG) {
+                    Log.e(TAG, "Could not insert SMIL part");
+                }
+                return;
+            }
+        }
+
+        { // Insert body part.
+            final ContentValues values = new ContentValues(8);
+            values.put(Telephony.Mms.Part.MSG_ID, dummyId);
+            values.put(Telephony.Mms.Part.SEQ, 0);
+            values.put(Telephony.Mms.Part.CONTENT_TYPE, ContentType.TEXT_PLAIN);
+            values.put(Telephony.Mms.Part.NAME, srcName);
+            values.put(Telephony.Mms.Part.CONTENT_ID, "<"+srcName+">");
+            values.put(Telephony.Mms.Part.CONTENT_LOCATION, srcName);
+            values.put(Telephony.Mms.Part.CHARSET, mms.body.charSet);
+            values.put(Telephony.Mms.Part.TEXT, mms.body.text);
+            if (mmsProvider.insert(partUri, values) == null) {
+                if (DEBUG) {
+                    Log.e(TAG, "Could not insert body part");
+                }
+                return;
+            }
+        }
+
+        // Insert mms.
+        final Uri mmsUri = mmsProvider.insert(Telephony.Mms.CONTENT_URI, mms.values);
+        if (mmsUri == null) {
+            if (DEBUG) {
+                Log.e(TAG, "Could not insert mms");
+            }
+            return;
+        }
+
+        final long mmsId = ContentUris.parseId(mmsUri);
+        { // Update parts with the right mms id.
+            ContentValues values = new ContentValues(1);
+            values.put(Telephony.Mms.Part.MSG_ID, mmsId);
+            mmsProvider.update(partUri, values, null, null);
+        }
+
+        { // Insert adderesses into "addr".
+            final Uri addrUri = Uri.withAppendedPath(mmsUri, "addr");
+            for (ContentValues mmsAddress : mms.addresses) {
+                ContentValues values = new ContentValues(mmsAddress);
+                values.put(Telephony.Mms.Addr.MSG_ID, mmsId);
+                mmsProvider.insert(addrUri, values);
+            }
+        }
+    }
+
+    private static final class MmsBody {
+        public String text;
+        public int charSet;
+
+        public MmsBody(String text, int charSet) {
+            this.text = text;
+            this.charSet = charSet;
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (obj == null || !(obj instanceof MmsBody)) {
+                return false;
+            }
+            MmsBody typedObj = (MmsBody) obj;
+            return this.text.equals(typedObj.text) && this.charSet == typedObj.charSet;
+        }
+
+        @Override
+        public String toString() {
+            return "Text:" + text + " charSet:" + charSet;
+        }
+    }
+
+    private static final class Mms {
+        public ContentValues values;
+        public List<ContentValues> addresses;
+        public MmsBody body;
+        @Override
+        public String toString() {
+            return "Values:" + values.toString() + "\nRecipients:"+addresses.toString()
+                    + "\nBody:" + body;
+        }
+    }
+
+    private JsonWriter getJsonWriter(final String fileName) throws IOException {
+        return new JsonWriter(new OutputStreamWriter(new DeflaterOutputStream(
+                openFileOutput(fileName, MODE_PRIVATE)), CHARSET_UTF8));
+    }
+
+    private JsonReader getJsonReader(final FileDescriptor fileDescriptor) throws IOException {
+        return new JsonReader(new InputStreamReader(new InflaterInputStream(
+                new FileInputStream(fileDescriptor)), CHARSET_UTF8));
+    }
+
+    private static void writeStringToWriter(JsonWriter jsonWriter, Cursor cursor, String name)
+            throws IOException {
+        final String value = cursor.getString(cursor.getColumnIndex(name));
+        if (value != null) {
+            jsonWriter.name(name).value(value);
+        }
+    }
+
+    private static void writeIntToWriter(JsonWriter jsonWriter, Cursor cursor, String name)
+            throws IOException {
+        final int value = cursor.getInt(cursor.getColumnIndex(name));
+        if (value != 0) {
+            jsonWriter.name(name).value(value);
+        }
+    }
+
+    // Copied from packages/apps/Messaging/src/com/android/messaging/sms/DatabaseMessages.java.
+    /**
+     * Decoded string by character set
+     */
+    private static String getDecodedString(final byte[] data, final int charset)  {
+        if (CharacterSets.ANY_CHARSET == charset) {
+            return new String(data); // system default encoding.
+        } else {
+            try {
+                final String name = CharacterSets.getMimeName(charset);
+                return new String(data, name);
+            } catch (final UnsupportedEncodingException e) {
+                try {
+                    return new String(data, CharacterSets.MIMENAME_ISO_8859_1);
+                } catch (final UnsupportedEncodingException exception) {
+                    return new String(data); // system default encoding.
+                }
+            }
+        }
+    }
+
+    // Copied from packages/apps/Messaging/src/com/android/messaging/sms/DatabaseMessages.java.
+    /**
+     * Unpack a given String into a byte[].
+     */
+    private static byte[] getStringBytes(final String data, final int charset) {
+        if (CharacterSets.ANY_CHARSET == charset) {
+            return data.getBytes();
+        } else {
+            try {
+                final String name = CharacterSets.getMimeName(charset);
+                return data.getBytes(name);
+            } catch (final UnsupportedEncodingException e) {
+                return data.getBytes();
+            }
+        }
+    }
+
+    private static final Uri THREAD_ID_CONTENT_URI = Uri.parse("content://mms-sms/threadID");
+    // Copied from frameworks/opt/telephony/src/java/android/provider/Telephony.java because we
+    // can't use ContentResolver during backup/restore.
+    private static long getOrCreateThreadId(
+            ContentProvider contentProvider, Set<String> recipients) {
+        Uri.Builder uriBuilder = THREAD_ID_CONTENT_URI.buildUpon();
+
+        for (String recipient : recipients) {
+            if (Telephony.Mms.isEmailAddress(recipient)) {
+                recipient = Telephony.Mms.extractAddrSpec(recipient);
+            }
+
+            uriBuilder.appendQueryParameter("recipient", recipient);
+        }
+
+        Uri uri = uriBuilder.build();
+
+        try (Cursor cursor = contentProvider.query(uri, PROJECTION_ID, null, null, null)) {
+            if (cursor != null) {
+                if (cursor.moveToFirst()) {
+                    return cursor.getLong(0);
+                } else {
+                    Log.e(TAG, "getOrCreateThreadId returned no rows!");
+                }
+            }
+        }
+
+        Log.e(TAG, "getOrCreateThreadId failed with " + recipients.size() + " recipients");
+        throw new IllegalArgumentException("Unable to find or allocate a thread ID.");
+    }
+
+    // Copied from packages/apps/Messaging/src/com/android/messaging/sms/MmsUtils.java.
+    private static List<String> getRecipientsByThread(final ContentProvider threadProvider,
+                                                      final long threadId) {
+        final String spaceSepIds = getRawRecipientIdsForThread(threadProvider, threadId);
+        if (!TextUtils.isEmpty(spaceSepIds)) {
+            return getAddresses(threadProvider, spaceSepIds);
+        }
+        return null;
+    }
+
+    private static final Uri ALL_THREADS_URI =
+            Telephony.Threads.CONTENT_URI.buildUpon().
+                    appendQueryParameter("simple", "true").build();
+    private static final int RECIPIENT_IDS  = 1;
+
+    // Copied from packages/apps/Messaging/src/com/android/messaging/sms/MmsUtils.java.
+    // NOTE: There are phones on which you can't get the recipients from the thread id for SMS
+    // until you have a message in the conversation!
+    private static String getRawRecipientIdsForThread(final ContentProvider threadProvider,
+                                                      final long threadId) {
+        if (threadId <= 0) {
+            return null;
+        }
+        final Cursor thread = threadProvider.query(
+                ALL_THREADS_URI,
+                SMS_RECIPIENTS_PROJECTION, "_id=?", new String[]{String.valueOf(threadId)}, null);
+        if (thread != null) {
+            try {
+                if (thread.moveToFirst()) {
+                    // recipientIds will be a space-separated list of ids into the
+                    // canonical addresses table.
+                    return thread.getString(RECIPIENT_IDS);
+                }
+            } finally {
+                thread.close();
+            }
+        }
+        return null;
+    }
+
+    private static final Uri SINGLE_CANONICAL_ADDRESS_URI =
+            Uri.parse("content://mms-sms/canonical-address");
+
+    // Copied from packages/apps/Messaging/src/com/android/messaging/sms/MmsUtils.java.
+    private static List<String> getAddresses(final ContentProvider threadProvider,
+                                             final String spaceSepIds) {
+        final List<String> numbers = new ArrayList<String>();
+        final String[] ids = spaceSepIds.split(" ");
+        for (final String id : ids) {
+            long longId;
+
+            try {
+                longId = Long.parseLong(id);
+                if (longId < 0) {
+                    if (DEBUG) {
+                        Log.e(TAG, "getAddresses: invalid id " + longId);
+                    }
+                    continue;
+                }
+            } catch (final NumberFormatException ex) {
+                if (DEBUG) {
+                    Log.e(TAG, "getAddresses: invalid id. " + ex, ex);
+                }
+                // skip this id
+                continue;
+            }
+
+            // TODO: build a single query where we get all the addresses at once.
+            Cursor c = null;
+            try {
+                c = threadProvider.query(
+                        ContentUris.withAppendedId(SINGLE_CANONICAL_ADDRESS_URI, longId),
+                        null, null, null, null);
+            } catch (final Exception e) {
+                if (DEBUG) {
+                    Log.e(TAG, "getAddresses: query failed for id " + longId, e);
+                }
+            }
+            if (c != null) {
+                try {
+                    if (c.moveToFirst()) {
+                        final String number = c.getString(0);
+                        if (!TextUtils.isEmpty(number)) {
+                            numbers.add(number);
+                        } else {
+                            if (DEBUG) {
+                                Log.w(TAG, "Canonical MMS/SMS address is empty for id: " + longId);
+                            }
+                        }
+                    }
+                } finally {
+                    c.close();
+                }
+            }
+        }
+        if (numbers.isEmpty()) {
+            if (DEBUG) {
+                Log.w(TAG, "No MMS addresses found from ids string [" + spaceSepIds + "]");
+            }
+        }
+        return numbers;
+    }
+
+    @Override
+    public void onBackup(ParcelFileDescriptor oldState, BackupDataOutput data,
+                         ParcelFileDescriptor newState) throws IOException {
+        // Empty because is not used during full backup.
+    }
+
+    @Override
+    public void onRestore(BackupDataInput data, int appVersionCode,
+                          ParcelFileDescriptor newState) throws IOException {
+        // Empty because is not used during full restore.
+    }
+}
diff --git a/src/com/android/providers/telephony/TelephonyProvider.java b/src/com/android/providers/telephony/TelephonyProvider.java
index 0137237..0de0e79 100644
--- a/src/com/android/providers/telephony/TelephonyProvider.java
+++ b/src/com/android/providers/telephony/TelephonyProvider.java
@@ -1069,7 +1069,7 @@
 
         static public ContentValues setDefaultValue(ContentValues values) {
             if (!values.containsKey(Telephony.Carriers.SUBSCRIPTION_ID)) {
-                int subId = SubscriptionManager.getDefaultSubId();
+                int subId = SubscriptionManager.getDefaultSubscriptionId();
                 values.put(Telephony.Carriers.SUBSCRIPTION_ID, subId);
             }
 
@@ -1550,7 +1550,7 @@
             + selection + "selectionArgs=" + selectionArgs + ", sort=" + sort);
         TelephonyManager mTelephonyManager =
                 (TelephonyManager)getContext().getSystemService(Context.TELEPHONY_SERVICE);
-        int subId = SubscriptionManager.getDefaultSubId();
+        int subId = SubscriptionManager.getDefaultSubscriptionId();
         String subIdString;
         SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
         qb.setStrict(true); // a little protection from injection attacks
@@ -1701,7 +1701,7 @@
     public synchronized Uri insert(Uri url, ContentValues initialValues)
     {
         Uri result = null;
-        int subId = SubscriptionManager.getDefaultSubId();
+        int subId = SubscriptionManager.getDefaultSubscriptionId();
 
         checkPermission();
 
@@ -1843,7 +1843,7 @@
     public synchronized int delete(Uri url, String where, String[] whereArgs)
     {
         int count = 0;
-        int subId = SubscriptionManager.getDefaultSubId();
+        int subId = SubscriptionManager.getDefaultSubscriptionId();
         String userOrCarrierEdited = ") and (" +
                 Telephony.Carriers.EDITED + "=" + Telephony.Carriers.USER_EDITED +  " or " +
                 Telephony.Carriers.EDITED + "=" + Telephony.Carriers.CARRIER_EDITED + ")";
@@ -1986,7 +1986,7 @@
     {
         int count = 0;
         int uriType = URL_UNKNOWN;
-        int subId = SubscriptionManager.getDefaultSubId();
+        int subId = SubscriptionManager.getDefaultSubscriptionId();
 
         checkPermission();
 
diff --git a/tests/Android.mk b/tests/Android.mk
new file mode 100644
index 0000000..1041716
--- /dev/null
+++ b/tests/Android.mk
@@ -0,0 +1,19 @@
+LOCAL_PATH := $(call my-dir)
+include $(CLEAR_VARS)
+
+LOCAL_MODULE_TAGS := tests
+
+LOCAL_STATIC_JAVA_LIBRARIES := mockito-target
+
+LOCAL_JAVA_LIBRARIES := android.test.runner
+
+LOCAL_SRC_FILES := $(call all-java-files-under,src)
+
+LOCAL_PACKAGE_NAME := TelephonyProviderTests
+LOCAL_CERTIFICATE := platform
+
+LOCAL_INSTRUMENTATION_FOR := TelephonyProvider
+
+LOCAL_SDK_VERSION := current
+
+include $(BUILD_PACKAGE)
diff --git a/tests/AndroidManifest.xml b/tests/AndroidManifest.xml
new file mode 100644
index 0000000..7a273fc
--- /dev/null
+++ b/tests/AndroidManifest.xml
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="com.android.providers.telephony.tests">
+
+    <application>
+        <uses-library android:name="android.test.runner" />
+    </application>
+
+    <instrumentation android:name="android.test.InstrumentationTestRunner"
+        android:targetPackage="com.android.providers.telephony"
+        android:label="Tests for TelephonyProvider">
+    </instrumentation>
+</manifest>
diff --git a/tests/src/com/android/providers/telephony/TelephonyBackupAgentTest.java b/tests/src/com/android/providers/telephony/TelephonyBackupAgentTest.java
new file mode 100644
index 0000000..4920c53
--- /dev/null
+++ b/tests/src/com/android/providers/telephony/TelephonyBackupAgentTest.java
@@ -0,0 +1,705 @@
+/*
+ * 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.providers.telephony;
+
+import android.annotation.TargetApi;
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.net.Uri;
+import android.os.Build;
+import android.provider.BaseColumns;
+import android.provider.Telephony;
+import android.test.AndroidTestCase;
+import android.test.mock.MockContentProvider;
+import android.test.mock.MockCursor;
+import android.util.ArrayMap;
+import android.util.JsonReader;
+import android.util.JsonWriter;
+import android.util.SparseArray;
+
+import java.io.StringReader;
+import java.io.StringWriter;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+
+/**
+ * Tests for testing backup/restore of SMS and text MMS messages.
+ * For backup it creates fake provider and checks resulting json array.
+ * For restore provides json array and checks inserts of the messages into provider.
+ */
+@TargetApi(Build.VERSION_CODES.M)
+public class TelephonyBackupAgentTest extends AndroidTestCase {
+    private SparseArray<String> mSubId2Phone;
+    private ArrayMap<String, Integer> mPhone2SubId;
+    private final List<ContentValues> mSmsTable = new ArrayList<>();
+    private final List<ContentValues> mMmsTable = new ArrayList<>();
+    private final List<ContentValues> mMmsAllContentValues = new ArrayList<>();
+    private FakeCursor mSmsCursor, mMmsCursor;
+    private ContentValues[] mSmsRows, mMmsRows;
+    private ContentValues mMmsNonText;
+    private String[] mSmsJson, mMmsJson;
+    private String mAllSmsJson, mAllMmsJson;
+
+
+    private StringWriter mStringWriter;
+    private Map<Uri, FakeCursor> mCursors;
+    private MockContentProvider mContentProvider;
+
+    private static final String EMPTY_JSON_ARRAY = "[]";
+
+    @Override
+    protected void setUp() throws Exception {
+        super.setUp();
+        mStringWriter = new StringWriter();
+        mSubId2Phone = new SparseArray<String>();
+        mSubId2Phone.append(1, "+111111111111111");
+        mSubId2Phone.append(3, "+333333333333333");
+
+        mPhone2SubId = new ArrayMap<>();
+        for (int i=0; i<mSubId2Phone.size(); ++i) {
+            mPhone2SubId.put(mSubId2Phone.valueAt(i), mSubId2Phone.keyAt(i));
+        }
+
+        mSmsCursor = new FakeCursor(mSmsTable, TelephonyBackupAgent.SMS_PROJECTION);
+        mMmsCursor = new FakeCursor(mMmsTable, TelephonyBackupAgent.MMS_PROJECTION);
+        mCursors = new HashMap<Uri, FakeCursor>();
+
+        mSmsRows = new ContentValues[3];
+        mSmsJson = new String[3];
+        mSmsRows[0] = createSmsRow(1, 1, "+1232132214124", "sms 1", "sms subject", 9087978987l,
+                999999999, 3, 44, 1);
+        mSmsJson[0] = "{\"self_phone\":\"+111111111111111\",\"address\":" +
+                "\"+1232132214124\",\"body\":\"sms 1\",\"subject\":\"sms subject\",\"date\":" +
+                "\"9087978987\",\"date_sent\":\"999999999\",\"status\":\"3\",\"type\":\"44\"}";
+
+        mSmsRows[1] = createSmsRow(2, 2, "+1232132214124", "sms 2", null, 9087978987l, 999999999,
+                0, 4, 1);
+        mSmsJson[1] = "{\"address\":\"+1232132214124\",\"body\":\"sms 2\",\"date\":" +
+                "\"9087978987\",\"date_sent\":\"999999999\",\"status\":\"0\",\"type\":\"4\"}";
+
+        mSmsRows[2] = createSmsRow(4, 3, "+1232221412433 +1232221412444", "sms 3", null,
+                111111111111l, 999999999, 2, 3, 2);
+        mSmsJson[2] =  "{\"self_phone\":\"+333333333333333\",\"address\":" +
+                "\"+1232221412433 +1232221412444\",\"body\":\"sms 3\",\"date\":\"111111111111\"," +
+                "\"date_sent\":" +
+                "\"999999999\",\"status\":\"2\",\"type\":\"3\"}";
+
+        mAllSmsJson = concatJson(mSmsJson);
+
+
+
+        mMmsRows = new ContentValues[3];
+        mMmsJson = new String[3];
+        mMmsRows[0] = createMmsRow(1 /*id*/, 1 /*subid*/, "Subject 1" /*subject*/,
+                100 /*subcharset*/, 111111 /*date*/, 111112 /*datesent*/, 3 /*type*/,
+                17 /*version*/, 1 /*textonly*/,
+                11 /*msgBox*/, "location 1" /*contentLocation*/, "MMs body 1" /*body*/,
+                111 /*body charset*/,
+                new String[]{"+11121212", "example@example.com", "+999999999"} /*addresses*/,
+                1 /*threadId*/);
+
+        mMmsJson[0] = "{\"self_phone\":\"+111111111111111\",\"sub\":\"Subject 1\"," +
+                "\"date\":\"111111\",\"date_sent\":\"111112\",\"m_type\":\"3\",\"v\":\"17\"," +
+                "\"msg_box\":\"11\",\"ct_l\":\"location 1\",\"mms_addresses\":[{\"type\":10," +
+                "\"address\":\"+11121212\",\"charset\":100},{\"type\":11,\"address\":" +
+                "\"example@example.com\",\"charset\":101},{\"type\":12,\"address\":\"+999999999\"" +
+                ",\"charset\":102}],\"mms_body\":\"MMs body 1\",\"mms_charset\":111,\"" +
+                "sub_cs\":\"100\"}";
+
+        mMmsRows[1] = createMmsRow(2 /*id*/, 2 /*subid*/, null /*subject*/, 100 /*subcharset*/,
+                111122 /*date*/, 1111112 /*datesent*/, 4 /*type*/, 18 /*version*/, 1 /*textonly*/,
+                222 /*msgBox*/, "location 2" /*contentLocation*/, "MMs body 2" /*body*/,
+                121 /*body charset*/,
+                new String[]{"example@example.com", "+999999999"} /*addresses*/, 2 /*threadId*/);
+
+        mMmsJson[1] = "{\"date\":\"111122\",\"date_sent\":\"1111112\",\"m_type\":\"4\"," +
+                "\"v\":\"18\",\"msg_box\":\"222\",\"ct_l\":\"location 2\",\"mms_addresses\":" +
+                "[{\"type\":10,\"address\":\"example@example.com\",\"charset\":100}," +
+                "{\"type\":11,\"address\":\"+999999999\",\"charset\":101}]," +
+                "\"mms_body\":\"MMs body 2\",\"mms_charset\":121}";
+
+        mMmsRows[2] = createMmsRow(10 /*id*/, 3 /*subid*/, "Subject 10" /*subject*/,
+                10 /*subcharset*/, 111133 /*date*/, 1111132 /*datesent*/, 5 /*type*/,
+                19 /*version*/, 1 /*textonly*/,
+                333 /*msgBox*/, null /*contentLocation*/, "MMs body 3" /*body*/,
+                131 /*body charset*/, new String[]{"+8888888888"} /*addresses*/, 3 /*threadId*/);
+
+        mMmsJson[2] = "{\"self_phone\":\"+333333333333333\",\"sub\":\"Subject 10\"," +
+                "\"date\":\"111133\",\"date_sent\":\"1111132\",\"m_type\":\"5\",\"v\":\"19\"," +
+                "\"msg_box\":\"333\",\"mms_addresses\":[{\"type\":10,\"address\":\"+8888888888\"," +
+                "\"charset\":100}],\"mms_body\":\"MMs body 3\",\"mms_charset\":131," +
+                "\"sub_cs\":\"10\"}";
+        mAllMmsJson = concatJson(mMmsJson);
+
+
+        // Should not be backed up. Cause flag text_only is false.
+        mMmsNonText = createMmsRow(10 /*id*/, 3 /*subid*/, "Subject 10" /*subject*/,
+                10 /*subcharset*/,
+                111133 /*date*/, 1111132 /*datesent*/, 5 /*type*/, 19 /*version*/, 0 /*textonly*/,
+                333 /*msgBox*/, null /*contentLocation*/, "MMs body 3" /*body*/,
+                131 /*body charset*/, new String[]{"+8888888888"} /*addresses*/, 3 /*threadId*/);
+
+        mContentProvider = new MockContentProvider() {
+            @Override
+            public Cursor query(Uri uri, String[] projection, String selection,
+                                String[] selectionArgs, String sortOrder) {
+                if (mCursors.containsKey(uri)) {
+                    FakeCursor fakeCursor = mCursors.get(uri);
+                    if (projection != null) {
+                        fakeCursor.setProjection(projection);
+                    }
+                    return fakeCursor;
+                }
+                return super.query(uri, projection, selection, selectionArgs, sortOrder);
+            }
+        };
+
+    }
+
+    private static String concatJson(String[] json) {
+        StringBuilder stringBuilder = new StringBuilder("[");
+        for (int i=0; i<json.length; ++i) {
+            if (i > 0) {
+                stringBuilder.append(",");
+            }
+            stringBuilder.append(json[i]);
+        }
+        stringBuilder.append("]");
+        return stringBuilder.toString();
+    }
+
+    private static ContentValues createSmsRow(int id, int subId, String address, String body,
+                                              String subj, long date, long dateSent,
+                                              int status, int type, long threadId) {
+        ContentValues smsRow = new ContentValues();
+        smsRow.put(Telephony.Sms._ID, id);
+        smsRow.put(Telephony.Sms.SUBSCRIPTION_ID, subId);
+        if (address != null) {
+            smsRow.put(Telephony.Sms.ADDRESS, address);
+        }
+        if (body != null) {
+            smsRow.put(Telephony.Sms.BODY, body);
+        }
+        if (subj != null) {
+            smsRow.put(Telephony.Sms.SUBJECT, subj);
+        }
+        smsRow.put(Telephony.Sms.DATE, String.valueOf(date));
+        smsRow.put(Telephony.Sms.DATE_SENT, String.valueOf(dateSent));
+        smsRow.put(Telephony.Sms.STATUS, String.valueOf(status));
+        smsRow.put(Telephony.Sms.TYPE, String.valueOf(type));
+        smsRow.put(Telephony.Sms.THREAD_ID, threadId);
+
+        return smsRow;
+    }
+
+    private ContentValues createMmsRow(int id, int subId, String subj, int subCharset,
+                                       long date, long dateSent, int type, int version,
+                                       int textOnly, int msgBox,
+                                       String contentLocation, String body,
+                                       int bodyCharset, String[] addresses, long threadId) {
+        ContentValues mmsRow = new ContentValues();
+        mmsRow.put(Telephony.Mms._ID, id);
+        mmsRow.put(Telephony.Mms.SUBSCRIPTION_ID, subId);
+        if (subj != null) {
+            mmsRow.put(Telephony.Mms.SUBJECT, subj);
+            mmsRow.put(Telephony.Mms.SUBJECT_CHARSET, String.valueOf(subCharset));
+        }
+        mmsRow.put(Telephony.Mms.DATE, String.valueOf(date));
+        mmsRow.put(Telephony.Mms.DATE_SENT, String.valueOf(dateSent));
+        mmsRow.put(Telephony.Mms.MESSAGE_TYPE, String.valueOf(type));
+        mmsRow.put(Telephony.Mms.MMS_VERSION, String.valueOf(version));
+        mmsRow.put(Telephony.Mms.TEXT_ONLY, textOnly);
+        mmsRow.put(Telephony.Mms.MESSAGE_BOX, String.valueOf(msgBox));
+        if (contentLocation != null) {
+            mmsRow.put(Telephony.Mms.CONTENT_LOCATION, contentLocation);
+        }
+        mmsRow.put(Telephony.Mms.THREAD_ID, threadId);
+
+        final Uri partUri = Telephony.Mms.CONTENT_URI.buildUpon().appendPath(String.valueOf(id)).
+                appendPath("part").build();
+        mCursors.put(partUri, createBodyCursor(body, bodyCharset));
+        mMmsAllContentValues.add(mmsRow);
+
+        final Uri addrUri = Telephony.Mms.CONTENT_URI.buildUpon().appendPath(String.valueOf(id)).
+                appendPath("addr").build();
+        mCursors.put(addrUri, createAddrCursor(addresses));
+
+        return mmsRow;
+    }
+
+    private static final String APP_SMIL = "application/smil";
+    private static final String TEXT_PLAIN = "text/plain";
+
+    // Cursor with parts of Mms.
+    private FakeCursor createBodyCursor(String body, int charset) {
+        List<ContentValues> table = new ArrayList<>();
+
+        final String srcName = String.format("text.%06d.txt", 0);
+        final String smilBody = String.format(TelephonyBackupAgent.sSmilTextPart, srcName);
+        final String smil = String.format(TelephonyBackupAgent.sSmilTextOnly, smilBody);
+
+        final ContentValues smilPart = new ContentValues();
+        smilPart.put(Telephony.Mms.Part.SEQ, -1);
+        smilPart.put(Telephony.Mms.Part.CONTENT_TYPE, APP_SMIL);
+        smilPart.put(Telephony.Mms.Part.NAME, "smil.xml");
+        smilPart.put(Telephony.Mms.Part.CONTENT_ID, "<smil>");
+        smilPart.put(Telephony.Mms.Part.CONTENT_LOCATION, "smil.xml");
+        smilPart.put(Telephony.Mms.Part.TEXT, smil);
+        table.add(smilPart); // This part should not be backed up.
+        mMmsAllContentValues.add(smilPart);
+
+        final ContentValues bodyPart = new ContentValues();
+        bodyPart.put(Telephony.Mms.Part.SEQ, 0);
+        bodyPart.put(Telephony.Mms.Part.CONTENT_TYPE, TEXT_PLAIN);
+        bodyPart.put(Telephony.Mms.Part.NAME, srcName);
+        bodyPart.put(Telephony.Mms.Part.CONTENT_ID, "<"+srcName+">");
+        bodyPart.put(Telephony.Mms.Part.CONTENT_LOCATION, srcName);
+        bodyPart.put(Telephony.Mms.Part.CHARSET, charset);
+        bodyPart.put(Telephony.Mms.Part.TEXT, body);
+        table.add(bodyPart);
+        mMmsAllContentValues.add(bodyPart);
+
+        return new FakeCursor(table, TelephonyBackupAgent.MMS_TEXT_PROJECTION);
+    }
+
+    // Cursor with addresses of Mms.
+    private FakeCursor createAddrCursor(String[] addresses) {
+        List<ContentValues> table = new ArrayList<>();
+        for (int i=0; i<addresses.length; ++i) {
+            ContentValues addr = new ContentValues();
+            addr.put(Telephony.Mms.Addr.TYPE, 10+i);
+            addr.put(Telephony.Mms.Addr.ADDRESS, addresses[i]);
+            addr.put(Telephony.Mms.Addr.CHARSET, 100+i);
+            mMmsAllContentValues.add(addr);
+            table.add(addr);
+        }
+        return new FakeCursor(table, TelephonyBackupAgent.MMS_ADDR_PROJECTION);
+    }
+
+    /**
+     * Test with no sms in the provider.
+     * @throws Exception
+     */
+    public void testBackupSms_NoSms() throws Exception {
+        TelephonyBackupAgent.putSmsMessagesToJson(mSmsCursor, mSubId2Phone,
+                new JsonWriter(mStringWriter), new ThreadProvider(), 1);
+        assertEquals(EMPTY_JSON_ARRAY, mStringWriter.toString());
+    }
+
+    /**
+     * Test with 3 sms in the provider with the limit per file 4.
+     * @throws Exception
+     */
+
+    public void DISABLED_testBackupSms_AllSms() throws Exception {
+        mSmsTable.addAll(Arrays.asList(mSmsRows));
+        TelephonyBackupAgent.putSmsMessagesToJson(mSmsCursor, mSubId2Phone,
+                new JsonWriter(mStringWriter), new ThreadProvider(), 4);
+        final String expected =
+                "[" + mSmsJson[0] + "," + mSmsJson[1] + "," + mSmsJson[2] + "]";
+        assertEquals(expected, mStringWriter.toString());
+    }
+
+    /**
+     * Test with 3 sms in the provider with the limit per file 3.
+     * @throws Exception
+     */
+    public void DISABLED_testBackupSms_AllSmsWithExactFileLimit() throws Exception {
+        mSmsTable.addAll(Arrays.asList(mSmsRows));
+        TelephonyBackupAgent.putSmsMessagesToJson(mSmsCursor, mSubId2Phone,
+                new JsonWriter(mStringWriter), new ThreadProvider(), 3);
+        final String expected =
+                "[" + mSmsJson[0] + "," + mSmsJson[1] + "," + mSmsJson[2] + "]";
+        assertEquals(expected, mStringWriter.toString());
+    }
+
+    /**
+     * Test with 3 sms in the provider with the limit per file 1.
+     * @throws Exception
+     */
+    public void DISABLED_testBackupSms_AllSmsOneMessagePerFile() throws Exception {
+        mSmsTable.addAll(Arrays.asList(mSmsRows));
+        TelephonyBackupAgent.putSmsMessagesToJson(mSmsCursor, mSubId2Phone,
+                new JsonWriter(mStringWriter), new ThreadProvider(), 1);
+        assertEquals("[" + mSmsJson[0] + "]", mStringWriter.toString());
+
+        mStringWriter = new StringWriter();
+        TelephonyBackupAgent.putSmsMessagesToJson(mSmsCursor, mSubId2Phone,
+                new JsonWriter(mStringWriter), new ThreadProvider(), 1);
+        assertEquals("[" + mSmsJson[1] + "]", mStringWriter.toString());
+
+        mStringWriter = new StringWriter();
+        TelephonyBackupAgent.putSmsMessagesToJson(mSmsCursor, mSubId2Phone,
+                new JsonWriter(mStringWriter), new ThreadProvider(), 1);
+        assertEquals("[" + mSmsJson[2] + "]", mStringWriter.toString());
+    }
+
+    /**
+     * Test with no mms in the pvovider.
+     * @throws Exception
+     */
+    public void testBackupMms_NoMms() throws Exception {
+        TelephonyBackupAgent.putMmsMessagesToJson(mMmsCursor, mContentProvider, mSubId2Phone,
+                new JsonWriter(mStringWriter), 4);
+        assertEquals(EMPTY_JSON_ARRAY, mStringWriter.toString());
+    }
+
+    /**
+     * Test with all mms.
+     * @throws Exception
+     */
+    public void testBackupMms_AllMms() throws Exception {
+        mMmsTable.addAll(Arrays.asList(mMmsRows));
+        mMmsTable.add(mMmsNonText);
+        TelephonyBackupAgent.putMmsMessagesToJson(mMmsCursor, mContentProvider, mSubId2Phone,
+                new JsonWriter(mStringWriter), 4);
+        final String expected =
+                "[" + mMmsJson[0] + "," + mMmsJson[1] + "," + mMmsJson[2] + "]";
+        assertEquals(expected, mStringWriter.toString());
+    }
+
+    /**
+     * Test with 3 mms in the provider with the limit per file 1.
+     * @throws Exception
+     */
+    public void testBackupMms_OneMessagePerFile() throws Exception {
+        mMmsTable.addAll(Arrays.asList(mMmsRows));
+        TelephonyBackupAgent.putMmsMessagesToJson(mMmsCursor, mContentProvider, mSubId2Phone,
+                new JsonWriter(mStringWriter), 1);
+        assertEquals("[" + mMmsJson[0] + "]", mStringWriter.toString());
+
+        mStringWriter = new StringWriter();
+        TelephonyBackupAgent.putMmsMessagesToJson(mMmsCursor, mContentProvider, mSubId2Phone,
+                new JsonWriter(mStringWriter), 1);
+        assertEquals("[" + mMmsJson[1] + "]", mStringWriter.toString());
+
+        mStringWriter = new StringWriter();
+        TelephonyBackupAgent.putMmsMessagesToJson(mMmsCursor, mContentProvider, mSubId2Phone,
+                new JsonWriter(mStringWriter), 2);
+        assertEquals("[" + mMmsJson[2] + "]", mStringWriter.toString());
+    }
+
+    /**
+     * Test with 3 mms in the provider with the limit per file 3.
+     * @throws Exception
+     */
+    public void testBackupMms_WithExactFileLimit() throws Exception {
+        mMmsTable.addAll(Arrays.asList(mMmsRows));
+        TelephonyBackupAgent.putMmsMessagesToJson(mMmsCursor, mContentProvider, mSubId2Phone,
+                new JsonWriter(mStringWriter), 3);
+        final String expected =
+                "[" + mMmsJson[0] + "," + mMmsJson[1] + "," + mMmsJson[2] + "]";
+        assertEquals(expected, mStringWriter.toString());
+    }
+
+    /**
+     * Test restore sms with the empty json array "[]".
+     * @throws Exception
+     */
+    public void testRestoreSms_NoSms() throws Exception {
+        JsonReader jsonReader = new JsonReader(new StringReader(EMPTY_JSON_ARRAY));
+        FakeSmsProvider smsProvider = new FakeSmsProvider(null);
+        TelephonyBackupAgent.putSmsMessagesToProvider(jsonReader, smsProvider,
+                new ThreadProvider(), mPhone2SubId);
+        assertEquals(0, smsProvider.getRowsAdded());
+    }
+
+    /**
+     * Test restore sms with three sms json object in the array.
+     * @throws Exception
+     */
+    public void DISABLED_testRestoreSms_AllSms() throws Exception {
+        JsonReader jsonReader = new JsonReader(new StringReader(mAllSmsJson));
+        FakeSmsProvider smsProvider = new FakeSmsProvider(mSmsRows);
+        TelephonyBackupAgent.putSmsMessagesToProvider(jsonReader, smsProvider,
+                new ThreadProvider(), mPhone2SubId);
+        assertEquals(mSmsRows.length, smsProvider.getRowsAdded());
+    }
+
+    /**
+     * Test restore mms with the empty json array "[]".
+     * @throws Exception
+     */
+    public void testRestoreMms_NoMms() throws Exception {
+        JsonReader jsonReader = new JsonReader(new StringReader(EMPTY_JSON_ARRAY));
+        FakeMmsProvider mmsProvider = new FakeMmsProvider(null);
+        TelephonyBackupAgent.putMmsMessagesToProvider(jsonReader, mmsProvider,
+                new ThreadProvider(), mPhone2SubId);
+        assertEquals(0, mmsProvider.getRowsAdded());
+    }
+
+    /**
+     * Test restore sms with three mms json object in the array.
+     * @throws Exception
+     */
+    public void testRestoreMms_AllMms() throws Exception {
+        JsonReader jsonReader = new JsonReader(new StringReader(mAllMmsJson));
+        FakeMmsProvider mmsProvider = new FakeMmsProvider(mMmsAllContentValues);
+        TelephonyBackupAgent.putMmsMessagesToProvider(jsonReader, mmsProvider,
+                new ThreadProvider(), mPhone2SubId);
+        assertEquals(15, mmsProvider.getRowsAdded());
+    }
+
+    /**
+     * class for checking sms insertion into the provider on restore.
+     */
+    private class FakeSmsProvider extends MockContentProvider {
+        private int nextRow = 0;
+        private ContentValues[] mSms;
+
+        public FakeSmsProvider(ContentValues[] sms) {
+            this.mSms = sms;
+        }
+
+        @Override
+        public Uri insert(Uri uri, ContentValues values) {
+            assertEquals(Telephony.Sms.CONTENT_URI, uri);
+            ContentValues modifiedValues = new ContentValues(mSms[nextRow++]);
+            modifiedValues.remove(Telephony.Sms._ID);
+            modifiedValues.put(Telephony.Sms.READ, 1);
+            modifiedValues.put(Telephony.Sms.SEEN, 1);
+            if (mSubId2Phone.get(modifiedValues.getAsInteger(Telephony.Sms.SUBSCRIPTION_ID))
+                    == null) {
+                modifiedValues.put(Telephony.Sms.SUBSCRIPTION_ID, -1);
+            }
+
+            assertEquals(modifiedValues, values);
+            return null;
+        }
+
+        @Override
+        public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+                            String sortOrder) {
+            return null;
+        }
+
+        public int getRowsAdded() {
+            return nextRow;
+        }
+    }
+
+    /**
+     * class for checking mms insertion into the provider on restore.
+     */
+    private class FakeMmsProvider extends MockContentProvider {
+        private int nextRow = 0;
+        private List<ContentValues> mValues;
+        private long mDummyMsgId = -1;
+        private long mMsgId = -1;
+
+        public FakeMmsProvider(List<ContentValues> values) {
+            this.mValues = values;
+        }
+
+        @Override
+        public Uri insert(Uri uri, ContentValues values) {
+            Uri retUri = Uri.parse("dummy_uri");
+            ContentValues modifiedValues = new ContentValues(mValues.get(nextRow++));
+            if (APP_SMIL.equals(values.get(Telephony.Mms.Part.CONTENT_TYPE))) {
+                // Smil part.
+                assertEquals(-1, mDummyMsgId);
+                mDummyMsgId = values.getAsLong(Telephony.Mms.Part.MSG_ID);
+            }
+
+            if (values.get(Telephony.Mms.Part.SEQ) != null) {
+                // Part of mms.
+                final Uri expectedUri = Telephony.Mms.CONTENT_URI.buildUpon()
+                        .appendPath(String.valueOf(mDummyMsgId))
+                        .appendPath("part")
+                        .build();
+                assertEquals(expectedUri, uri);
+            }
+
+            if (values.get(Telephony.Mms.Part.MSG_ID) != null) {
+                modifiedValues.put(Telephony.Mms.Part.MSG_ID, mDummyMsgId);
+            }
+
+
+            if (values.get(Telephony.Mms.SUBSCRIPTION_ID) != null) {
+                assertEquals(Telephony.Mms.CONTENT_URI, uri);
+                if (mSubId2Phone.get(modifiedValues.getAsInteger(Telephony.Sms.SUBSCRIPTION_ID))
+                        == null) {
+                    modifiedValues.put(Telephony.Sms.SUBSCRIPTION_ID, -1);
+                }
+                // Mms.
+                modifiedValues.put(Telephony.Mms.READ, 1);
+                modifiedValues.put(Telephony.Mms.SEEN, 1);
+                mMsgId = modifiedValues.getAsInteger(BaseColumns._ID);
+                retUri = Uri.withAppendedPath(Telephony.Mms.CONTENT_URI, String.valueOf(mMsgId));
+                modifiedValues.remove(BaseColumns._ID);
+            }
+
+            if (values.get(Telephony.Mms.Addr.ADDRESS) != null) {
+                // Address.
+                final Uri expectedUri = Telephony.Mms.CONTENT_URI.buildUpon()
+                        .appendPath(String.valueOf(mMsgId))
+                        .appendPath("addr")
+                        .build();
+                assertEquals(expectedUri, uri);
+                assertNotSame(-1, mMsgId);
+                modifiedValues.put(Telephony.Mms.Addr.MSG_ID, mMsgId);
+                mDummyMsgId = -1;
+            }
+
+            for (String key : modifiedValues.keySet()) {
+                assertEquals(modifiedValues.get(key), values.get(key));
+            }
+            assertEquals(modifiedValues.size(), values.size());
+            return retUri;
+        }
+
+        @Override
+        public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
+            final Uri expectedUri = Telephony.Mms.CONTENT_URI.buildUpon()
+                    .appendPath(String.valueOf(mDummyMsgId))
+                    .appendPath("part")
+                    .build();
+            assertEquals(expectedUri, uri);
+            ContentValues expected = new ContentValues();
+            expected.put(Telephony.Mms.Part.MSG_ID, mMsgId);
+            assertEquals(expected, values);
+            return 2;
+        }
+
+        @Override
+        public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+                            String sortOrder) {
+            return null;
+        }
+
+        public int getRowsAdded() {
+            return nextRow;
+        }
+    }
+
+    /**
+     * class that implements MmsSms provider for thread ids.
+     */
+    private static class ThreadProvider extends MockContentProvider {
+
+        Map<List<String>, Integer> threadIds;
+
+        public ThreadProvider() {
+            threadIds = new ArrayMap<>();
+        }
+
+        @Override
+        public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+                            String sortOrder) {
+            List<String> recipients = uri.getQueryParameters("recipient");
+            int threadId = threadIds.size() + 1;
+            if (threadIds.containsKey(recipients)) {
+                threadId = threadIds.get(recipients);
+            } else {
+                threadIds.put(recipients, threadId);
+            }
+
+            List<ContentValues> table = new ArrayList<>();
+            ContentValues row = new ContentValues();
+            row.put(BaseColumns._ID, String.valueOf(threadId));
+            table.add(row);
+            return new FakeCursor(table, projection);
+        }
+    }
+
+    /**
+     * general cursor for serving queries.
+     */
+    private static class FakeCursor extends MockCursor {
+        String[] projection;
+        List<ContentValues> rows;
+        int nextRow = -1;
+
+        public FakeCursor(List<ContentValues> rows, String[] projection) {
+            this.projection = projection;
+            this.rows = rows;
+        }
+
+        public void setProjection(String[] projection) {
+            this.projection = projection;
+        }
+
+        @Override
+        public int getColumnCount() {
+            return projection.length;
+        }
+
+        @Override
+        public String getColumnName(int columnIndex) {
+            return projection[columnIndex];
+        }
+
+        @Override
+        public String getString(int columnIndex) {
+            return rows.get(nextRow).getAsString(projection[columnIndex]);
+        }
+
+        @Override
+        public int getInt(int columnIndex) {
+            return rows.get(nextRow).getAsInteger(projection[columnIndex]);
+        }
+
+        @Override
+        public long getLong(int columnIndex) {
+            return rows.get(nextRow).getAsLong(projection[columnIndex]);
+        }
+
+        @Override
+        public boolean isAfterLast() {
+            return nextRow >= getCount();
+        }
+
+        @Override
+        public boolean isLast() {
+            return nextRow == getCount() - 1;
+        }
+
+        @Override
+        public boolean moveToFirst() {
+            nextRow = 0;
+            return getCount() > 0;
+        }
+
+        @Override
+        public boolean moveToNext() {
+            return getCount() > ++nextRow;
+        }
+
+        @Override
+        public int getCount() {
+            return rows.size();
+        }
+
+        @Override
+        public int getColumnIndex(String columnName) {
+            for (int i=0; i<projection.length; ++i) {
+                if (columnName.equals(projection[i])) {
+                    return i;
+                }
+            }
+            return -1;
+        }
+
+        @Override
+        public void close() {
+        }
+    }
+}
