Merge Android 14 QPR2 to AOSP main

Bug: 319669529
Merged-In: Ib72995a90662b0b8fee553a6a9785459ce078044
Change-Id: I4daa7c35a65ba74abf87a4722d98c069f9fcd571
diff --git a/Android.bp b/Android.bp
index b51af0b..48222f1 100644
--- a/Android.bp
+++ b/Android.bp
@@ -44,7 +44,11 @@
         "modules-utils-fastxmlserializer",
         "modules-utils-os",
         "nist-sip",
-        "service-entitlement"
+        "service-entitlement",
+        "telephony_flags_core_java_lib",
+        "android.permission.flags-aconfig-java",
+        "satellite-s2storage-ro",
+        "s2-geometry-library-java",
     ],
 
     srcs: [
@@ -90,7 +94,19 @@
     libs: [
         "telephony-common",
         "service-entitlement"
-        ],
+    ],
+}
+
+// Used by satellite unit tests temporarily during the development phase.
+// TODO: Remove this once the satellite code is wired into Telephony code.
+java_library {
+    name: "telephony-satellite",
+    srcs: ["src/com/android/phone/satellite/**/*.java"],
+    libs: [
+        "satellite-s2storage-ro",
+        "s2-geometry-library-java",
+        "telephony-common",
+    ],
 }
 
 platform_compat_config {
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 8d03ed7..7e56e8b 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -279,7 +279,7 @@
         <activity android:name="GsmUmtsCallForwardOptions"
                 android:label="@string/labelCF"
                 android:configChanges="orientation|screenSize|keyboardHidden"
-                android:exported="true"
+                android:exported="false"
                 android:theme="@style/CallSettingsWithoutDividerTheme">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
@@ -289,7 +289,7 @@
         <activity android:name="CdmaCallForwardOptions"
                 android:label="@string/labelCF"
                 android:configChanges="orientation|screenSize|keyboardHidden"
-                android:exported="true"
+                android:exported="false"
                 android:theme="@style/CallSettingsWithoutDividerTheme">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
@@ -299,7 +299,7 @@
         <activity android:name="GsmUmtsCallBarringOptions"
                 android:label="@string/labelCallBarring"
                 android:configChanges="orientation|screenSize|keyboardHidden"
-                android:exported="true"
+                android:exported="false"
                 android:theme="@style/DialerSettingsLight">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
@@ -309,7 +309,7 @@
         <activity android:name="GsmUmtsAdditionalCallOptions"
                 android:label="@string/labelGSMMore"
                 android:configChanges="orientation|screenSize|keyboardHidden"
-                android:exported="true"
+                android:exported="false"
                 android:theme="@style/CallSettingsWithoutDividerTheme">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
@@ -619,17 +619,6 @@
             </intent-filter>
         </activity>
 
-        <activity android:name=".settings.BandMode"
-                  android:label="@string/band_mode_title"
-                  android:exported="true"
-                  android:theme="@style/Theme.AppCompat.DayNight">
-            <intent-filter>
-                <action android:name="android.intent.action.MAIN" />
-                <category android:name="android.intent.category.DEFAULT" />
-                <category android:name="android.intent.category.VOICE_LAUNCH" />
-            </intent-filter>
-        </activity>
-
         <provider
             android:name="ServiceStateProvider"
             android:authorities="service-state"
diff --git a/TEST_MAPPING b/TEST_MAPPING
index 3831b6b..04a8efb 100644
--- a/TEST_MAPPING
+++ b/TEST_MAPPING
@@ -9,7 +9,8 @@
       ]
     },
     {
-      "name": "CarrierAppIntegrationTestCases"
+      "name": "CarrierAppIntegrationTestCases",
+      "keywords": ["internal"]
     },
     {
       "name": "CtsSimRestrictedApisTestCases",
diff --git a/ecc/input/eccdata.txt b/ecc/input/eccdata.txt
index 83b5c39..fe11383 100644
--- a/ecc/input/eccdata.txt
+++ b/ecc/input/eccdata.txt
@@ -906,6 +906,16 @@
       types: TYPE_UNSPECIFIED
       routing: NORMAL
   }
+  eccs {
+      phone_number: "028"
+      types: TYPE_UNSPECIFIED
+      routing: NORMAL
+  }
+  eccs {
+      phone_number: "116000"
+      types: TYPE_UNSPECIFIED
+      routing: NORMAL
+  }
   ecc_fallback: "112"
 }
 countries {
diff --git a/ecc/output/eccdata b/ecc/output/eccdata
index 3f28a3a..55d8151 100644
--- a/ecc/output/eccdata
+++ b/ecc/output/eccdata
Binary files differ
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index 2c8117b..dab1dfb 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA-Oproep Wat Wag onder IMS is Af"</string>
     <string name="updating_title" msgid="6130548922615719689">"Belinstellings"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Oproepinstellings kan net deur die administrateur verander word."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Net die admin of werkgebruiker kan foonrekeninginstellings verander."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Instellings (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Oproepinstellingsfout"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Lees tans instellings…"</string>
@@ -297,7 +298,7 @@
     <string name="sip_accounts_removed_notification_title" msgid="3528076957535736095">"Opgeskorte SIP-rekeninge is gevind en verwyder"</string>
     <string name="sip_accounts_removed_notification_message" msgid="1916856744869791592">"SIP-bel word nie meer deur die Android-platform ondersteun nie.\nJou bestaande SIP-rekeninge <xliff:g id="REMOVED_SIP_ACCOUNTS">%s</xliff:g> is verwyder.\nBevestig asseblief jou verstekbelinstelling."</string>
     <string name="sip_accounts_removed_notification_action" msgid="3772778402370555562">"Gaan na instellings"</string>
-    <string name="data_usage_title" msgid="8438592133893837464">"Programdatagebruik"</string>
+    <string name="data_usage_title" msgid="8438592133893837464">"Appdatagebruik"</string>
     <string name="data_usage_template" msgid="6287906680674061783">"<xliff:g id="ID_1">%1$s</xliff:g> mobiele data gebruik <xliff:g id="ID_2">%2$s</xliff:g>"</string>
     <string name="advanced_options_title" msgid="9208195294513520934">"Gevorderd"</string>
     <string name="carrier_settings_euicc" msgid="1190237227261337749">"Diensverskaffer"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Kan nie oproepe aanhou nie."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Koppel aan \'n draadlose netwerk om \'n oproep te maak."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Aktiveer Wi-Fi-oproepe om \'n oproep te maak."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Deaktiveer satellietmodus om ’n oproep te maak."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Noodinligting"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Eienaar"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Tik weer om inligting te bekyk"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Vliegtuigmodus is aan"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Kan nie toegang tot SIM-kaart verkry nie"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Mobiele netwerk is nie beskikbaar nie"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Satellietmodus is aan"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Fout met foonnommer wat jy probeer bel. Foutkode 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Kon nie oproep voltooi nie. Foutkode 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Kon nie oproep voltooi nie. Foutkode 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Sub-ID van verstekdata-SIM:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Aflaaibandwydte (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Oplaaibandwydte (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Fisieke LTE-kanaalopstelling:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Fisieke kanaalopstellings:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Herlaaikoers van selinligting:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Alle selmetingsinligting:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Datadiens:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Jou bluetooth-sein is swak. Probeer om na luidsprekerfoon oor te skakel."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Kennisgewing oor oproepgehalte"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Opgeskorte SIP-rekeninge"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Kan nie boodskap van hierdie profiel af stuur nie"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Jou werkbeleid laat jou toe om boodskappe slegs van die werkprofiel af te stuur"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Kan nie van ’n persoonlike app af boodskappe stuur nie"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Jou organisasie laat jou net toe om boodskappe van werkapps af te stuur"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Kanselleer"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Skakel oor na werkprofiel"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Installeer ’n werkboodskapapp"</string>
 </resources>
diff --git a/res/values-am/strings.xml b/res/values-am/strings.xml
index b3b063e..95437d5 100644
--- a/res/values-am/strings.xml
+++ b/res/values-am/strings.xml
@@ -113,7 +113,7 @@
     <string name="messageCFB" msgid="1958017270393563388">"ቁጥሩ ሲያዝ"</string>
     <string name="sum_cfb_enabled" msgid="332037613072049492">"ወደ <xliff:g id="PHONENUMBER">{0}</xliff:g>በማስተላለፍ ላይ"</string>
     <string name="sum_cfb_disabled" msgid="3589913334164866035">"ጠፍቷል"</string>
-    <string name="disable_cfb_forbidden" msgid="4831494744351633961">"ስልክህ ስራ ሲበዛበት የድምጽ ተያያዥ ሞደም አቅራቢህ  የጥሪ-ማስተላለፍን  አይደግፍም።"</string>
+    <string name="disable_cfb_forbidden" msgid="4831494744351633961">"ስልክህ ሥራ ሲበዛበት የድምጽ ተያያዥ ሞደም አቅራቢህ  የጥሪ-ማስተላለፍን  አይደግፍም።"</string>
     <string name="labelCFNRy" msgid="3403533792248457946">"መልስ ሳይሰጥ ሲቀር"</string>
     <string name="messageCFNRy" msgid="7644434155765359009">"ቁጥሩ ሳይነሳ"</string>
     <string name="sum_cfnry_enabled" msgid="3000500837493854799">"ወደ <xliff:g id="PHONENUMBER">{0}</xliff:g>በማስተላለፍ ላይ"</string>
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"በIMS ስር ያለው የCDMA ጥሪ መጠበቂያ ጠፍቷል"</string>
     <string name="updating_title" msgid="6130548922615719689">"የጥሪ ቅንብሮች"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"የጥሪ ቅንብሮች በአስተዳዳሪ ተጠቃሚው ብቻ ነው ሊለወጡ የሚችሉት።"</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"የስልክ የመለያ ቅንብሮች መለወጥ የሚችሉት በአስተዳዳሪ ወይም በሥራ ተጠቃሚ ብቻ ነው።"</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"ቅንብሮች (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"የጥሪ ቅንብሮች ስህተት"</string>
     <string name="reading_settings" msgid="1605904432450871183">"ቅንብሮች በማንበብ ላይ..."</string>
@@ -171,7 +172,7 @@
     <string name="vm_change_pin_error_mismatch" msgid="5364847280026257331">"የቀድሞ ፒን አልተዛመደም።"</string>
     <string name="vm_change_pin_error_invalid" msgid="5230002671175580674">"አዲሱ ፒን ልክ ያልሆኑ ቁምፊዎችን ይዟል።"</string>
     <string name="vm_change_pin_error_system_error" msgid="9116483527909681791">"ፒን መቀየር አልተቻለም።"</string>
-    <string name="vvm_unsupported_message_format" msgid="4206402558577739713">"የማይደገፍ የመልዕክት አይነት፤ ለማዳመጥ ወደ <xliff:g id="NUMBER">%s</xliff:g> ይደውሉ።"</string>
+    <string name="vvm_unsupported_message_format" msgid="4206402558577739713">"የማይደገፍ የመልዕክት ዓይነት፤ ለማዳመጥ ወደ <xliff:g id="NUMBER">%s</xliff:g> ይደውሉ።"</string>
     <string name="network_settings_title" msgid="7560807107123171541">"የተንቀሳቃሽ ስልክ አውታረ መረብ"</string>
     <string name="label_available" msgid="1316084116670821258">"የሚገኙ አውታረመረቦች"</string>
     <string name="load_networks_progress" msgid="4051433047717401683">"በመፈለግ ላይ…"</string>
@@ -186,9 +187,9 @@
     <string name="manual_mode_disallowed_summary" msgid="3970048592179890197">"ከ %1$s ጋር በተገናኘ ጊዜ አይገኝም"</string>
     <string name="network_select_title" msgid="4117305053881611988">"አውታረ መረብ"</string>
     <string name="register_automatically" msgid="3907580547590554834">"ራስ ሰር ምዝገባ...."</string>
-    <string name="preferred_network_mode_title" msgid="5253395265169539830">"የሚመረጠው የአውታረ መረብ አይነት"</string>
+    <string name="preferred_network_mode_title" msgid="5253395265169539830">"የሚመረጠው የአውታረ መረብ ዓይነት"</string>
     <string name="preferred_network_mode_summary" msgid="3787989000044330064">"የአውታረመረቡንመከወኛ ሁነታ ለውጥ"</string>
-    <string name="preferred_network_mode_dialogtitle" msgid="2781447433514459696">"የሚመረጠው የአውታረ መረብ አይነት"</string>
+    <string name="preferred_network_mode_dialogtitle" msgid="2781447433514459696">"የሚመረጠው የአውታረ መረብ ዓይነት"</string>
     <string name="forbidden_network" msgid="5081729819561333023">"(የተከለከለ)"</string>
     <string name="choose_network_title" msgid="5335832663422653082">"አውታረ መረብ ይምረጡ"</string>
     <string name="network_disconnected" msgid="8844141106841160825">"ግንኙነት ተቋርጧል"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"ጥሪዎችን መያዝ አልተቻለም።"</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"ጥሪ ለማድረግ ወደ ሽቦ አልባ አውታረ መረብ ያገናኙ።"</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"ጥሪ ለማድረግ Wi-Fi ጥሪን ያንቁ።"</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"ጥሪ ለማድረግ የመንኩራኩር ሁነታን ያሰናክሉ።"</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"የአደጋ ጊዜ መረጃ"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"ባለቤት"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"መረጃ ለማየት እንደገና መታ ያድርጉ"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"የአውሮፕላን ሁነታ በርቷል"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"ሲም ካርድ ዘንድ መድረስ አልቻለም"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"የተንቀሳቃሽ ስልክ አውታረ መረብ አይገኝም"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"የመንኩራኩር ሁነታ በርቷል"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"ሊደውሉለት እየሞከሩ ያሉት ስልክ ቁጥር ላይ ችግር። የስህተት ኮድ 1።"</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"ጥሪን ማጠናቀቅ አልተቻለም። የስህተት ኮድ 3።"</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"ጥሪን ማጠናቀቅ አልተቻለም። የስህተት ኮድ 6።"</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"የነባሪ ውሂብ ሲም SubId:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL መተላለፊያ ይዘት (ኪቢ/ሴ)፡"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"የUL መተላለፊያ ይዘት (ኪቢ/ሴ)፡"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"የLTE አካላዊ ሰርጥ ውቅረት:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"የአካላዊ ሰርጥ ውቅረቶች፦"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"የሕዋስ መረጃ እድሳት ፍጥነት፡"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"ሁሉም የሕዋስ መለኪያ መረጃ፡"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"የውሂብ አገልግሎት:"</string>
@@ -891,12 +894,12 @@
     <string name="radio_info_phone_number_label" msgid="2533852539562512203">"ስልክ ቁጥር:"</string>
     <string name="radio_info_voice_network_type_label" msgid="2395347336419593265">"የድምፅ የአውታረ መረብ ዓይነት፡"</string>
     <string name="radio_info_data_network_type_label" msgid="8886597029237501929">"የውሂብ አውታረ መረብ ዓይነት፡"</string>
-    <string name="radio_info_override_network_type_label" msgid="4176280017221092005">"የአውታረ መረብ አይነት ሻር፦"</string>
-    <string name="radio_info_voice_raw_registration_state_label" msgid="2822988327145825128">"የጥሬ ድምጽ ምዝገባ ሁነታ፦"</string>
+    <string name="radio_info_override_network_type_label" msgid="4176280017221092005">"የአውታረ መረብ ዓይነት ሻር፦"</string>
+    <string name="radio_info_voice_raw_registration_state_label" msgid="2822988327145825128">"የጥሬ ድምፅ ምዝገባ ሁነታ፦"</string>
     <string name="radio_info_data_raw_registration_state_label" msgid="2895895513822604539">"የጥሬ ውሂብ ምዝገባ ሁነታ፦"</string>
     <string name="radio_info_wlan_data_raw_registration_state_label" msgid="6396894835757296612">"የWLAN ጥሬ ውሂብ ምዝገባ ሁነታ፦"</string>
     <string name="phone_index_label" msgid="6222406512768964268">"የስልክ መረጃ ጠቋሚ ይምረጡ"</string>
-    <string name="radio_info_set_perferred_label" msgid="7408131389363136210">"ተመራጭ የአውታረ መረብ አይነት ያዋቅሩ፡"</string>
+    <string name="radio_info_set_perferred_label" msgid="7408131389363136210">"ተመራጭ የአውታረ መረብ ዓይነት ያዋቅሩ፡"</string>
     <string name="radio_info_ping_hostname_v4" msgid="6951237885381284790">"ፒንግ ስመ ከዳም(www.google.com) IPv4፦"</string>
     <string name="radio_info_ping_hostname_v6" msgid="2748637889486554603">"ፒንግ ስመ ካዳም(www.google.com) IPv6፡"</string>
     <string name="radio_info_http_client_test" msgid="1329583721088428238">"የኤችቲቲፒ ደንበኛ ሙከራ:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"የእርስዎ የብሉቱዝ ሲግናል ደካማ ነው። ወደ የስልክ ድምፅ ማጉያ ለመቀየር ይሞክሩ።"</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"የጥሪ ጥራት ማሳወቂያ"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"የተቋረጡ የSIP መለያዎች"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"ከዚህ መገለጫ መልዕክት መላክ አይቻልም"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"የሥራ መመሪያዎ እርስዎ ከሥራ መገለጫው ብቻ መልዕክት እንዲልኩ ይፈቅድልዎታል"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"ከግል መተግበሪያ መልዕክት መላክ አይቻልም"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"ድርጅትዎ ከሥራ መተግበሪያዎች ብቻ መልዕክቶችን እንዲልኩ ይፈቅድልዎታል"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"ይቅር"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"ወደ የሥራ መገለጫ ቀይር"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"የሥራ መልዕክቶች መተግበሪያ ይጫኑ"</string>
 </resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 1ee5e44..54eeb24 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"‏إيقاف ميزة انتظار مكالمات CDMA في ظل IMS"</string>
     <string name="updating_title" msgid="6130548922615719689">"إعدادات الاتصال"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"لا يمكن تغيير إعدادات المكالمات إلا بواسطة المستخدم الإداري."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"لا يمكن تغيير إعدادات حساب الهاتف إلا من قِبل المشرف أو مستخدم حساب العمل."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"الإعدادات (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"خطأ في إعدادات الاتصال"</string>
     <string name="reading_settings" msgid="1605904432450871183">"جارٍ قراءة الإعدادات..."</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"يتعذر وضع المكالمات قيد الانتظار."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"اتصل بشبكة لاسلكية لإجراء مكالمة."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"‏يمكنك تفعيل اتصال Wi-Fi لإجراء مكالمة."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"يجب إيقاف وضع القمر الصناعي لإجراء مكالمة."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"معلومات الطوارئ"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"المالك"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"انقر مجددًا لعرض المعلومات."</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"تفعيل وضع الطيران"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"‏تعذر الوصول إلى شريحة SIM"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"شبكة الجوّال غير متوفرة"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"وضع القمر الصناعي مفعَّل"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"حدثت مشكلة في رقم الهاتف الذي تحاول الاتصال به. رمز الخطأ 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"تعذر إكمال المكالمة. رمز الخطأ 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"تعذر إكمال المكالمة. رمز الخطأ 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"‏المعرّف الفرعي لشريحة SIM التلقائية للبيانات:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"‏معدّل نقل بيانات DL (كيلوبت في الثانية):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"‏معدّل نقل بيانات UL (كيلوبت في الثانية):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"‏ضبط قناة LTE Physical:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"إعدادات القنوات:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"معدّل إعادة تحميل المعلومات الخلوية:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"جميع معلومات القياس الخلوية:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"خدمة البيانات:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"إشارة البلوتوث ضعيفة. حاوِل التبديل إلى مكبّر الصوت."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"إشعار بشأن جودة المكالمة"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"‏حسابات SIP المتوقّفة"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"لا يمكن إرسال رسالة من هذا الملف الشخصي"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"تسمح لك سياسة العمل بإرسال الرسائل من الملف الشخصي للعمل فقط."</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"لا يمكن إرسال رسائل من تطبيق شخصي"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"تسمح لك مؤسستك بإرسال الرسائل من تطبيقات العمل فقط."</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"إلغاء"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"التبديل إلى الملف الشخصي للعمل"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"تثبيت تطبيق لرسائل العمل"</string>
 </resources>
diff --git a/res/values-as/strings.xml b/res/values-as/strings.xml
index f66b63c..b68f32b 100644
--- a/res/values-as/strings.xml
+++ b/res/values-as/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMSত CDMA কল অপেক্ষাৰত সুবিধাটো অফ আছে"</string>
     <string name="updating_title" msgid="6130548922615719689">"কল ছেটিংসমূহ"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"কেৱল প্ৰশাসকে কল ছেটিংসমূহ সলনি কৰিব পাৰে।"</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"ফ’ন একাউণ্টৰ ছেটিং কেৱল প্ৰশাসক অথবা কৰ্মস্থানৰ ব্যৱহাৰকাৰীয়েহে সলনি কৰিব পাৰে।"</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"ছেটিংসমূহ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"কল ছেটিংসমূহত আসোঁৱাহ"</string>
     <string name="reading_settings" msgid="1605904432450871183">"ছেটিংসমূহ পঢ়ি থকা হৈছে…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"কলসমূহ হ\'ল্ডত ৰাখিব নোৱাৰি।"</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"কল কৰিবলৈ কোনো বেতাঁৰ নেটৱৰ্কৰ সৈতে সংযোগ কৰক।"</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"কল কৰিবৰ কাৰণে ৱাই-ফাই কলিং সুবিধা সক্ষম কৰক।"</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"কল কৰিবলৈ উপগ্ৰহ ম’ডটো অক্ষম কৰক।"</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"জৰুৰীকালীন তথ্য"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"গৰাকী"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"তথ্য চাবলৈ পুনৰ টিপক"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"এয়াৰপ্লেইন ম\'ড অন হৈ আছে"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"ছিম কাৰ্ড এক্সেছ কৰিব নোৱাৰি"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"ম’বাইল নেটৱৰ্ক উপলব্ধ নহয়"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"উপগ্ৰহ ম’ডটো অন আছে"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"আপুনি ডায়েল কৰিব খোজা ফ\'ন নম্বৰত আসোঁৱাহ আছে। আসোঁৱাহ ক\'ড ১।"</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"কলটো সম্পূৰ্ণ কৰিব পৰা নগ\'ল। আসোঁৱাহ ক\'ড ৩।"</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"কলটো সম্পূৰ্ণ কৰিব পৰা নগ\'ল। আসোঁৱাহ ক\'ড ৬।"</string>
@@ -850,7 +853,7 @@
     <string name="radio_info_ims_reg_status" msgid="25582845222446390">"IMS পঞ্জীয়ন: <xliff:g id="STATUS">%1$s</xliff:g>\nভইচ অভাৰ LTE: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nভইচ অভাৰ ৱাই-ফাই: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nভিডিঅ’ কলিং: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT ইণ্টাৰফে’চ: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
     <string name="radioInfo_service_in" msgid="45753418231446400">"সেৱাত আছে"</string>
     <string name="radioInfo_service_out" msgid="287972405416142312">"সেৱাত নাই"</string>
-    <string name="radioInfo_service_emergency" msgid="4763879891415016848">"কেৱল জৰুৰীকালীন কলসমূহ"</string>
+    <string name="radioInfo_service_emergency" msgid="4763879891415016848">"কেৱল জৰুৰীকালীন কল"</string>
     <string name="radioInfo_service_off" msgid="3456583511226783064">"ৰেডিঅ’ অফ হৈ আছে"</string>
     <string name="radioInfo_roaming_in" msgid="3156335577793145965">"ৰ’মিং"</string>
     <string name="radioInfo_roaming_not" msgid="1904547918725478110">"ৰ’মিঙত নাই"</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"ডিফ’ল্ট ডেটা ছিমৰ ছাবআইডি:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL বেণ্ডৱিথ (কেবিপিএছ):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL বেণ্ডৱিথ (কেবিপিএছ):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE ফিজিকেল চেনেলৰ কনফিগাৰেশ্বন:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"ফিজিকেল চেনেল কনফিগাৰেশ্বন:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"চেল তথ্য ৰিফ্ৰেশ্বৰ হাৰ:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"সকলো চেল পৰিমাপৰ তথ্য:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"ডেটা সেৱা:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"আপোনাৰ ব্লুটুথৰ ছিগনেল দুৰ্বল। স্পীকাৰফ’নলৈ সলনি কৰি চাওক।"</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"কলৰ গুণগত মানৰ জাননী"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"বন্ধ হৈ যোৱা SIP একাউণ্ট"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"এই প্ৰ’ফাইলৰ পৰা বাৰ্তা পঠিয়াব নোৱাৰি"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"আপোনাৰ কৰ্মস্থানৰ নীতিয়ে আপোনাক কেৱল কৰ্মস্থানৰ প্ৰ’ফাইলৰ পৰা বাৰ্তা পঠিয়াবলৈ দিয়ে"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"ব্যক্তিগত এপৰ পৰা বাৰ্তা পঠিয়াব নোৱাৰি"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"আপোনাৰ প্ৰতিষ্ঠানে আপোনাক কেৱল কাম সম্পর্কীয় এপ্‌সমূহৰ পৰা বাৰ্তা পঠিওৱাৰ অনুমতি দিয়ে"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"বাতিল কৰক"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"কৰ্মস্থানৰ প্ৰ’ফাইললৈ সলনি কৰক"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"এটা কৰ্মস্থানৰ বাৰ্তা আদান-প্ৰদান কৰা এপ্‌ ইনষ্টল কৰক"</string>
 </resources>
diff --git a/res/values-az/strings.xml b/res/values-az/strings.xml
index f7cf162..38a8f9f 100644
--- a/res/values-az/strings.xml
+++ b/res/values-az/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS ilə CDMA zəng gözlətməsi deaktivdir"</string>
     <string name="updating_title" msgid="6130548922615719689">"Zəng ayarları"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Zəng parametrləri yalnız admin olan istifadəçi tərəfindən dəyişdirilə bilər."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Telefon hesabı ayarlarını yalnız admin və ya işçi dəyişə bilər."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Ayarlar ( <xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g> )"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Zəng parametrləri xətası"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Oxuma ayarları..."</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Zənglər saxlanıla bilməz."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Zəng etmək üçün Wi-Fi şəbəkəsinə qoşulun."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Zəng etmək üçün Wi-Fi zəngini dəyişdirin."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Zəng etmək üçün peyk rejimini deaktiv edin."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Təcili məlumat"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Sahib"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Məlumata baxmaq üçün yenidən klikləyin"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Uçuş rejimi aktivdir"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"SIM karta daxil olmaq mümkün deyil"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Mobil şəbəkə əlçatan deyil"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Peyk rejimi aktivdir"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Yığmağa çalışdığınız telefon nömrəsi ilə bağlı problem. Xəta kodu: 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Zəngi bitirmək mümkün deyil. Xəta kodu: 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Zəngi bitirmək mümkün deyil. Xəta kodu: 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Defolt data SIM üçün alt Id:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL Buraxılışı (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL Buraxılışı (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE Fiziki Kanal Konfiqurasiyası:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Fiziki Kanal Konfiqurasiyaları:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Mobil məlumatın yenilənmə göstəricisi:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Operatorun bütün mobil ölçü məlumatı:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Data Xidməti:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Bluetooth siqnalı zəifdir. Telefon spikerinə keçin."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Zəng keyfiyyəti bildirişi"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Ləğv edilmiş SIP hesabları"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Bu profildən mesaj göndərmək mümkün deyil"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"İş siyasətiniz yalnız iş profilindən mesaj göndərməyə icazə verir"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Şəxsi tətbiqdən mesaj göndərmək mümkün deyil"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Təşkilatınız yalnız iş tətbiqlərindən mesaj göndərməyə icazə verir"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Ləğv edin"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"İş profilinə keçin"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"İş üçün mesajlaşma tətbiqi quraşdırın"</string>
 </resources>
diff --git a/res/values-b+sr+Latn/strings.xml b/res/values-b+sr+Latn/strings.xml
index ce1b9a3..69a0f7b 100644
--- a/res/values-b+sr+Latn/strings.xml
+++ b/res/values-b+sr+Latn/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Stavljanje CDMA poziva na čekanje u IMS-u je isključeno"</string>
     <string name="updating_title" msgid="6130548922615719689">"Podešavanja poziva"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Samo korisniku sa administratorskim pravima je dozvoljeno da menja podešavanja poziva."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Podešavanja naloga telefona može da promeni samo administrator ili poslovni korisnik."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Podešavanja (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Greška u podešavanjima poziva"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Podešavanja se učitavaju…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Nije moguće stavljati pozive na čekanje."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Povežite se na bežičnu mrežu da biste uputili poziv."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Omogućite pozivanje preko WiFi-a da biste uputili poziv."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Onemogućite satelitski režim da biste uputili poziv."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Informacije za hitne slučajeve"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Vlasnik"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Dodirnite ponovo da biste videli informacije"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Režim rada u avionu je uključen"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Nije moguće pristupiti SIM kartici"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Mobilna mreža nije dostupna"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Satelitski režim je uključen"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Problem sa brojem telefona koji pokušavate da pozovete. Kôd greške 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Upućivanje poziva nije uspelo. Kôd greške 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Upućivanje poziva nije uspelo. Kôd greške 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"SubID podrazumevanog SIM-a za podatke:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL propusni opseg (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL propusni opseg (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Konfiguracija LTE fizičkog kanala:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Konfiguracije fizičkog kanala:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Učestalost osvežavanja informacija o predajniku:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Sve informacije o merenju za predajnik:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Usluga prenosa podataka:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Bluetooth signal je slab. Probajte da pređete na spikerfon."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Obaveštenje o kvalitetu poziva"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Zastareli SIP nalozi"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Ne možete da pošaljete poruku sa ovog profila"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Smernice za posao vam omogućavaju da šaljete poruke samo sa poslovnog profila"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Ne možete da šaljete poruke iz lične aplikacije"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Vaša organizacija dozvoljava slanje poruka samo iz poslovnih aplikacija"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Otkaži"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Pređi na poslovni profil"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Instalirajte poslovnu aplikaciju za razmenu poruka"</string>
 </resources>
diff --git a/res/values-be/strings.xml b/res/values-be/strings.xml
index e2e48ad..0f7f46a 100644
--- a/res/values-be/strings.xml
+++ b/res/values-be/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Чаканне выкліку па тэхналогіі CDMA (IMS) выключана"</string>
     <string name="updating_title" msgid="6130548922615719689">"Налады выклікаў"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Налады выклікаў можа мяняць толькі адміністратар."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Налады ўліковага запісу на тэлефоне можа мяняць толькі адміністратар ці карыстальнік працоўнага профілю."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Налады (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Памылка налад выкліку"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Чытанне налад..."</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Немагчыма ўтрымліваць выклікі."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Падлучыцеся да бесправадной сеткі, каб зрабіць выклік."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Дазволіць выклік па Wi-Fi-тэлефаніі."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Адключыце рэжым спадарожніка, каб зрабіць выклік."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Даныя для экстранных сітуацый"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Уладальнік"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Каб паглядзець інфармацыю, націсніце яшчэ раз"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Уключаны рэжым палёту"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Няма доступу да SIM-карты"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Мабільная сетка недаступная"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Рэжым спадарожніка ўключаны"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Праблема з нумарам тэлефона, які вы спрабуеце набраць. Код памылкі: 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Не атрымалася выканаць выклік. Код памылкі: 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Не атрымалася выканаць выклік. Код памылкі: 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"SubID стандартнай SIM-карты для перадачы даных:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Прапускная здольнасць канала спампоўвання (кбіт/с):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Прапускная здольнасць канала запампоўвання (кбіт/с):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Канфігурацыя фізічнага канала LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Канфігурацыі фізічнага канала:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Частата абнаўлення даных сотавай сеткі:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Усе паказчыкі сотавай сеткі:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Сэрвіс перадачы даных:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Сігнал Bluetooth слабы. Паспрабуйце пераключыцца на гучную сувязь."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Апавяшчэнне пра якасць выкліку"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Састарэлыя ўліковыя запісы SIP"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Адпраўляць паведамленні з гэтага профілю нельга"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Згодна з палітыкай вашай арганізацыі адпраўляць паведамленні дазваляецца толькі з працоўнага профілю"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Нельга адпраўляць паведамленні з асабістай праграмы"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Ваша арганізацыя дазваляе адпраўляць паведамленні толькі з працоўных праграм"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Скасаваць"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Пераключыцца на працоўны профіль"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Усталюйце працоўную праграму абмену паведамленнямі"</string>
 </resources>
diff --git a/res/values-bg/strings.xml b/res/values-bg/strings.xml
index 5c6ea93..97f086f 100644
--- a/res/values-bg/strings.xml
+++ b/res/values-bg/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Изчакващите обаждания за CDMA с IMS са изключени"</string>
     <string name="updating_title" msgid="6130548922615719689">"Настройки за обаждане"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Само администраторът може да променя настройките за обаждане."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Настройките на профилите в телефона могат да се променят само от администратора или служебния потребител."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Настройки (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Грешка в настройките за обаждане"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Извършва се четене на настройки…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Не може да се извършват обаждания."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Свържете се с безжична мрежа, за да осъществите обаждане."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"За да извършите обаждане, активирайте обажданията през Wi-Fi."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Деактивирайте сателитния режим, за да извършите обаждане."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Информация за спешни случаи"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Собственик"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Докоснете отново, за да видите информация"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Самолетният режим е включен"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Няма достъп до SIM картата"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Мобилната мрежа не е налице"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Сателитният режим е включен"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Има проблем с телефонния номер, който набирате. Код на грешка 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Обаждането не можа да завърши. Код на грешка 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Обаждането не можа да завърши. Код на грешка 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Идентификационен подномер на SIM картата за данни по подразбиране:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Пропускателна способност при изтегляне (кб/сек):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Пропускателна способност при качване (кб/сек):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Конфигурация на физическия канал на LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Конфигурации на физическия канал:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Честота на опресняване на информацията за клетките:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Цялата измервателна информация за клетките:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Услуга за данни:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Сигналът ви за Bluetooth е слаб. Опитайте да превключите на високоговорител."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Известия за качеството на обаждането"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Оттеглени профили за SIP"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Съобщението не може да се изпрати от този потребителски профил"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Служебните ви правила позволяват да изпращате съобщения само от служебния потребителски профил"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Не можете да изпращате съобщения от лично приложение"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Организацията ви разрешава да изпращате съобщения само от служебни приложения"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Отказ"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Превключване към служебния потребителски профил"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Инсталиране на служебно приложение за съобщения"</string>
 </resources>
diff --git a/res/values-bn/strings.xml b/res/values-bn/strings.xml
index cb98b0d..f1fefbc 100644
--- a/res/values-bn/strings.xml
+++ b/res/values-bn/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS-এ CDMA কল ওয়েটিং সুবিধা বন্ধ আছে"</string>
     <string name="updating_title" msgid="6130548922615719689">"কল সেটিংস"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"কেবলমাত্র প্রশাসক ব্যবহারকারী কল সেটিংস পরিবর্তন করতে পারবেন৷"</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"শুধুমাত্র অ্যাডমিন বা অফিস প্রোফাইল ব্যবহারকারী ফোনের অ্যাকাউন্ট সেটিংস পরিবর্তন করতে পারবেন।"</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"সেটিংস (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"কল সেটিংসে ত্রুটি"</string>
     <string name="reading_settings" msgid="1605904432450871183">"সেটিংস পড়ছে…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"কলগুলি ধরে রাখা যাবে না।"</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"একটি কল করতে কোনো ওয়্যারলেস নেটওয়ার্কে সংযোগ করুন৷"</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"কোনো কল করতে Wi-Fi কলিং সক্ষম করুন৷"</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"কল করার জন্য \'উপগ্রহ\' মোড বন্ধ করুন।"</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"জরুরি তথ্য"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"মালিক"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"তথ্য দেখার জন্য আবার ট্যাপ করুন"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"ফ্লাইট মোড চালু আছে"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"সিম কার্ড অ্যাক্সেস করা যাচ্ছে না"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"মোবাইল নেটওয়ার্ক নেই"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"\'উপগ্রহ\' মোড চালু আছে"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"আপনি যে নম্বর ডায়াল করছেন সেটিতে কোনও সমস্যা আছে। ত্রুটি কোড ১।"</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"কল করা যায়নি। ত্রুটি কোড ৩।"</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"কল করা যায়নি। ত্রুটি কোড ৬।"</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"ডিফল্ট ডেটা সিমের SubId:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"ডিএল ব্যান্ডউইথ (কেবিপিএস):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"ইউএল ব্যান্ডউইথ (কেবিপিএস):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE ফিজিক্যাল চ্যানেল কনফিগারেশন:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"ফিজিক্যাল চ্যানেল কনফিগারেশন:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"সেল তথ্যে রিফ্রেশ রেট:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"সমস্ত সেল পরিমাপ তথ্য:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"ডেটা পরিষেবা:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"আপনার ডিভাইসের ব্লুটুথ সিগনাল ভাল না। বদল করে স্পিকারফোন বেছে নিন।"</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"ফোন কলের কোয়ালিটি সংক্রান্ত বিজ্ঞপ্তি"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"পুরনো SIP অ্যাকাউন্ট"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"এই প্রোফাইল থেকে মেসেজ পাঠানো যাচ্ছে না"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"কাজ সংক্রান্ত নীতি, আপনাকে শুধুমাত্র অফিস প্রোফাইল থেকে মেসেজ করার অনুমতি দেয়"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"ব্যক্তিগত অ্যাপ থেকে মেসেজ পাঠানো যাবে না"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"আপনার সংস্থা শুধু অফিসের অ্যাপ থেকেই আপনাকে মেসেজ পাঠানোর অনুমতি দেয়"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"বাতিল করুন"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"অফিস প্রোফাইলে পাল্টে নিন"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"অফিসের জন্য একটি মেসেজিং অ্যাপ ইনস্টল করুন"</string>
 </resources>
diff --git a/res/values-bs/strings.xml b/res/values-bs/strings.xml
index 1a6d50f..992f1b2 100644
--- a/res/values-bs/strings.xml
+++ b/res/values-bs/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA poziv na čekanju u okviru IMS-a je isključen"</string>
     <string name="updating_title" msgid="6130548922615719689">"Postavke poziva"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Postavke poziva može promijeniti samo administrator."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Postavke računa na telefonu može promijeniti samo administrator ili poslovni korisnik."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Postavke (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Greška u postavkama poziva"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Čitanje postavki…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Nije moguće staviti pozive na čekanje."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Povežite se na bežičnu mrežu da pozovete."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Omogućite pozivanje putem WiFi-ja da pozovete."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Onemogućite način rada putem satelita da uputite poziv."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Informacije za hitne slučajeve"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Vlasnik"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Dodirnite ponovo da pogledate informacije"</string>
@@ -594,7 +596,7 @@
     <string name="failedToImportSingleContactMsg" msgid="228095510489830266">"Uvoz kontakta nije uspio"</string>
     <string name="hac_mode_title" msgid="4127986689621125468">"Slušni aparat"</string>
     <string name="hac_mode_summary" msgid="7774989500136009881">"Uključite kompatibilnost za slušni aparat"</string>
-    <string name="rtt_mode_title" msgid="3075948111362818043">"Pozivanje sa slanjem SMS-ova u stvarnom vremenu (RTT)"</string>
+    <string name="rtt_mode_title" msgid="3075948111362818043">"Poziv sa SMS-ovima u stvarnom vremenu (RTT)"</string>
     <string name="rtt_mode_summary" msgid="8631541375609989562">"Dozvolite razmjenu poruka tokom glasovnog poziva"</string>
     <string name="rtt_mode_more_information" msgid="587500128658756318">"RTT pomaže pozivaocima koji su gluhi, imaju probleme sa sluhom ili govorom te onima kojima treba više od samog glasa.&lt;br&gt; &lt;a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>&gt;Saznajte više&lt;/a&gt;\n       &lt;br&gt;&lt;br&gt; - RTT pozivi se pohranjuju kao transkripti poruka\n       &lt;br&gt; - RTT nije dostupan za video pozive"</string>
     <string name="no_rtt_when_roaming" msgid="5268008247378355389">"Napomena: RTT nije dostupan u romingu"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Način rada u avionu je uključen"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Nije moguće pristupiti SIM kartici"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Mobilna mreža nije dostupna"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Način rada putem satelita je uključen"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Problem s brojem telefona koji pokušavate birati. Kȏd greške 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Završavanje poziva nije uspjelo. Kôd greške 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Završavanje poziva nije uspjelo. Kôd greške 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Pomoćni ID za zadani SIM za prijenos podataka:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL propusnost (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL propusnost (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Konfiguracija LTE fizičkog kanala:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Konfiguracije fizičkih kanala:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Interval osvježavanja informacija o ćeliji:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Sve informacije o mjerenju ćelije:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Prijenos podataka:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Vaš Bluetooth signal je slab. Pokušajte prebaciti na zvučnik."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Obavještenje o kvalitetu poziva"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Zastarjeli SIP računi"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Slanje poruke s ovog profila nije moguće"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Vaša poslovna pravila dopuštaju vam da šaljete poruke samo s poslovnog profila"</string>
-    <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Odustani"</string>
-    <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Prelazak na poslovni profil"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Nije moguće poslati poruku iz lične aplikacije"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Vaša organizacija vam dozvoljava da šaljete poruke samo iz poslovnih aplikacija"</string>
+    <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Otkaži"</string>
+    <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Pređite na radni profil"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Instalirajte poslovnu aplikaciju za razmjenu poruka"</string>
 </resources>
diff --git a/res/values-ca/strings.xml b/res/values-ca/strings.xml
index f7effe7..6557918 100644
--- a/res/values-ca/strings.xml
+++ b/res/values-ca/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"L\'opció de trucada en espera de CDMA a IMS està desactivada"</string>
     <string name="updating_title" msgid="6130548922615719689">"Configuració de trucada"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Només l\'administrador pot canviar la configuració de trucades."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Només l\'administrador o l\'usuari de la feina pot canviar la configuració del compte del telèfon."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Configuració (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Error de configuració de trucada"</string>
     <string name="reading_settings" msgid="1605904432450871183">"S\'està llegint la configuració…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"No es poden posar les trucades en espera."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Per fer una trucada, connecta amb una xarxa sense fil."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Activa les trucades per Wi-Fi per fer una trucada."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Per fer una trucada, desactiva el mode de satèl·lit."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Informació d\'emergència"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Propietari"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Torna a tocar per veure la informació"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"El mode d\'avió està activat"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"No es pot accedir a la targeta SIM"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"La xarxa mòbil no està disponible"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"El mode de satèl·lit està activat"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Hi ha un problema amb el número de telèfon que vols marcar. Codi d\'error: 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"No s\'ha pogut completar la trucada. Codi d\'error: 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"No s\'ha pogut completar la trucada. Codi d\'error: 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Subidentificador de la SIM de dades predeterminada:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Amplada de banda de baixada (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Amplada de banda de pujada (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Configuració del canal físic de LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Configuracions del canal físic:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Freqüència d\'actualització de la informació del mòbil:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Tota la informació de mesures del mòbil:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Servei de dades:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"El senyal del Bluetooth és feble. Fes servir l\'altaveu."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Notificació sobre la qualitat de la trucada"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Comptes SIP obsolets"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"No es pot enviar el missatge des d\'aquest perfil"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"La teva política de treball et permet enviar missatges només des del perfil de treball"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"No pots enviar missatges des d\'una aplicació personal"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"La teva organització només et permet enviar missatges des d\'aplicacions de treball"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Cancel·la"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Canvia al perfil de treball"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Instal·la una aplicació de missatgeria de treball"</string>
 </resources>
diff --git a/res/values-cs/strings.xml b/res/values-cs/strings.xml
index 6c945ca..660da5e 100644
--- a/res/values-cs/strings.xml
+++ b/res/values-cs/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA – další hovor na lince ve službě IMS – vypnuto"</string>
     <string name="updating_title" msgid="6130548922615719689">"Nastavení hovorů"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Nastavení hovorů může změnit pouze uživatel s oprávněním administrátora."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Nastavení telefonního účtu může změnit jen administrátor nebo uživatel pracovního účtu."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Nastavení (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Chyba nastavení hovorů"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Načítání nastavení..."</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Hovory nelze podržet."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Chcete-li provést hovor, připojte se k bezdrátové síti."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Pokud chcete provést hovor, povolte volání přes připojení Wi-Fi."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Pokud chcete někomu zavolat, satelitní režim vypněte."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Nouzové informace"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Vlastník"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Údaje zobrazíte dalším klepnutím"</string>
@@ -596,8 +598,8 @@
     <string name="hac_mode_summary" msgid="7774989500136009881">"Zapnout režim kompatibility s naslouchátkem"</string>
     <string name="rtt_mode_title" msgid="3075948111362818043">"Hovor, během něhož můžete posílat zprávy (RTT)"</string>
     <string name="rtt_mode_summary" msgid="8631541375609989562">"Povolit posílání zpráv během hlasového hovoru"</string>
-    <string name="rtt_mode_more_information" msgid="587500128658756318">"Funkce SMS během hovoru (RTT) pomáhá volajícím, kteří neslyší, jsou nedoslýchaví, mají řečovou vadu, případně potřebují víc než jen hlas z jiného důvodu.&lt;br&gt; &lt;a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>&gt;Další informace&lt;/a&gt;\n       &lt;br&gt;&lt;br&gt; – Text poslaný během hovoru se uloží jako přepis zpráv\n       &lt;br&gt; – Tato funkce není dostupná při videohovorech"</string>
-    <string name="no_rtt_when_roaming" msgid="5268008247378355389">"Použít: Funkce SMS během hovoru není dostupná při roamingu"</string>
+    <string name="rtt_mode_more_information" msgid="587500128658756318">"Funkce Okamžitý text (RTT) pomáhá volajícím, kteří neslyší, jsou nedoslýchaví, mají řečovou vadu, případně potřebují víc než jen hlas z jiného důvodu.&lt;br&gt; &lt;a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>&gt;Další informace&lt;/a&gt;\n       &lt;br&gt;&lt;br&gt; – Text poslaný během hovoru se uloží jako přepis zpráv\n       &lt;br&gt; – Tato funkce není dostupná při videohovorech"</string>
+    <string name="no_rtt_when_roaming" msgid="5268008247378355389">"Použít: Funkce Okamžitý text není dostupná při roamingu"</string>
   <string-array name="tty_mode_entries">
     <item msgid="3238070884803849303">"TTY vypnuto"</item>
     <item msgid="1449091874731375214">"Úplný režim TTY"</item>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Režim Letadlo je zapnutý"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Nelze získat přístup k SIM kartě"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Mobilní síť je nedostupná"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Satelitní režim je zapnutý"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Došlo k potížím s telefonním číslem, které se pokoušíte vytočit. Kód chyby: 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Hovor se nepodařilo dokončit. Kód chyby: 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Hovor se nepodařilo dokončit. Kód chyby: 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"SubId výchozí datové SIM karty:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Rychlost stahování (kB/s):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Rychlost nahrávání (kB/s):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Konfigurace fyzického kanálu LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Konfigurace fyzického kanálu:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Interval obnovení informací o mobilní síti:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Všechny údaje o měření mobilní sítě:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Datová služba:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Signál sítě Bluetooth je slabý. Zkuste přepnout na hlasitý odposlech."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Oznámení o kvalitě hovoru"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Zastaralé účty SIP"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Z tohoto profilu nemůžete odeslat zprávu"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Vaše pracovní zásady vám umožňují odesílat zprávy jen z pracovního profilu"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Z osobní aplikace nelze odeslat zprávu"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Vaše organizace dovoluje odesílat zprávy jen z pracovních aplikací"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Zrušit"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Přepnout na pracovní profil"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Nainstalovat pracovní aplikaci na odesílání zpráv"</string>
 </resources>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index a489077..58f2670 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Ventende CDMA-opkald under IMS er deaktiveret"</string>
     <string name="updating_title" msgid="6130548922615719689">"Indstillinger for opkald"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Opkaldsindstillingerne kan kun ændres af administratorbrugeren."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Telefons kontoindstillinger kan kun ændres af en administrator eller arbejdsbruger."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Indstillinger (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Fejl i indstillinger for opkald"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Læser indstillinger ..."</string>
@@ -556,7 +557,8 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Opkald kan ikke sættes i venteposition."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Opret forbindelse til et trådløst netværk for at foretage et opkald."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Aktivér Wi-Fi-opkald for at foretage et opkald."</string>
-    <string name="emergency_information_hint" msgid="9208897544917793012">"Info til nødsituationer"</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Deaktiver satellit for at foretage et opkald."</string>
+    <string name="emergency_information_hint" msgid="9208897544917793012">"Nødoplysninger"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Ejer"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Tryk igen for at se oplysninger"</string>
     <string name="emergency_enable_radio_dialog_title" msgid="2667568200755388829">"Nødopkald"</string>
@@ -594,9 +596,9 @@
     <string name="failedToImportSingleContactMsg" msgid="228095510489830266">"Kontaktpersonen kunne ikke importeres"</string>
     <string name="hac_mode_title" msgid="4127986689621125468">"Høreapparater"</string>
     <string name="hac_mode_summary" msgid="7774989500136009881">"Slå høreapparatskompatibilitet til"</string>
-    <string name="rtt_mode_title" msgid="3075948111362818043">"Opkald via sms i realtid"</string>
+    <string name="rtt_mode_title" msgid="3075948111362818043">"Opkald via beskeder i realtid"</string>
     <string name="rtt_mode_summary" msgid="8631541375609989562">"Tillad afsendelse af sms-beskeder i et taleopkald"</string>
-    <string name="rtt_mode_more_information" msgid="587500128658756318">"Sms i realtid hjælper personer, som er døve, hørehæmmede, talehandicappede, eller som har brug for mere end bare tale, med at foretage opkald.&lt;br&gt; &lt;a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>&gt;Få flere oplysninger&lt;/a&gt;\n       &lt;br&gt;&lt;br&gt; – Opkald via sms i realtid gemmes som en beskedtransskription\n       &lt;br&gt; – Sms i realtid er ikke tilgængeligt til videoopkald"</string>
+    <string name="rtt_mode_more_information" msgid="587500128658756318">"Beskeder i realtid hjælper personer, som er døve, hørehæmmede, talehandicappede, eller som har brug for mere end bare tale, med at foretage opkald.&lt;br&gt; &lt;a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>&gt;Få flere oplysninger&lt;/a&gt;\n       &lt;br&gt;&lt;br&gt; – Opkald via beskeder i realtid gemmes som en beskedtransskription\n       &lt;br&gt; – Beskeder i realtid er ikke tilgængeligt til videoopkald"</string>
     <string name="no_rtt_when_roaming" msgid="5268008247378355389">"Bemærk! RTT er ikke tilgængeligt under roaming"</string>
   <string-array name="tty_mode_entries">
     <item msgid="3238070884803849303">"TTY fra"</item>
@@ -681,8 +683,8 @@
     <string name="callFailed_wifi_lost" msgid="1788036730589163141">"Du mistede Wi-Fi-forbindelsen. Opkaldet blev afsluttet."</string>
     <string name="dialFailed_low_battery" msgid="6857904237423407056">"Du kan ikke foretage videoopkaldet på grund af lavt batteriniveau."</string>
     <string name="callFailed_low_battery" msgid="4056828320214416182">"Videoopkaldet blev afsluttet på grund af lavt batteriniveau."</string>
-    <string name="callFailed_emergency_call_over_wfc_not_available" msgid="5944309590693432042">"Det er ikke muligt at foretage nødopkald som Wi-Fi-opkald i dette land."</string>
-    <string name="callFailed_wfc_service_not_available_in_this_location" msgid="3624536608369524988">"Det er ikke muligt at foretage Wi-Fi-opkald i dette land."</string>
+    <string name="callFailed_emergency_call_over_wfc_not_available" msgid="5944309590693432042">"Det er ikke muligt at foretage nødopkald som Wi-Fi-opkald på denne lokation."</string>
+    <string name="callFailed_wfc_service_not_available_in_this_location" msgid="3624536608369524988">"Det er ikke muligt at foretage Wi-Fi-opkald på denne lokation."</string>
     <string name="change_pin_title" msgid="3564254326626797321">"Skift pinkode til din telefonsvarer"</string>
     <string name="change_pin_continue_label" msgid="5177011752453506371">"Fortsæt"</string>
     <string name="change_pin_cancel_label" msgid="2301711566758827936">"Annuller"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Flytilstand er slået til"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Der er ikke adgang til SIM-kortet"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Mobilnetværket er ikke tilgængeligt"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Satellit er aktiveret"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Der opstod et problem med det telefonnummer, du prøver at ringe til. Fejlkode 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Opkaldet kunne ikke foretages. Fejlkode 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Opkaldet kunne ikke foretages. Fejlkode 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Under-id for standard-SIM-kort til data:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Båndbredde til download (kB/sek.):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Båndbredde til upload (kB/sek.):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Fysisk kanalkonfiguration for LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Fysiske kanalkonfigurationer:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Opdateringsfrekvens for celleoplysninger:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Alle oplysninger om cellemåling:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Datatjeneste:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Dit Bluetooth-signal er svagt. Prøv at skifte til medhør."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Notifikation om opkaldskvalitet"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Udfasede SIP-konti"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Du kan ikke sende beskeder fra denne profil"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Din arbejdspolitik giver dig mulighed for kun at sende beskeder fra arbejdsprofilen"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Du kan ikke sende beskeder fra en personlig app"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Din organisation tillader kun, at du sender beskeder fra arbejdsapps"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Annuller"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Skift til arbejdsprofil"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Installer en app til arbejdsbeskeder"</string>
 </resources>
diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml
index 3613464..7378480 100644
--- a/res/values-de/strings.xml
+++ b/res/values-de/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA-Anklopfen unter IMS deaktiviert"</string>
     <string name="updating_title" msgid="6130548922615719689">"Anrufeinstellungen"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Anrufeinstellungen können nur vom Administrator geändert werden."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Die Kontoeinstellungen können nur durch den Administrator oder den Nutzer des Arbeitsprofils geändert werden."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Einstellungen (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Fehler bei Anrufeinstellungen"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Einstellungen werden gelesen…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Anrufe können nicht gehalten werden."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Stelle zum Telefonieren eine WLAN-Verbindung her."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Aktiviere WLAN-Telefonie, um anzurufen."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Deaktiviere den Satellitenmodus, um einen Anruf zu tätigen."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Notfallinformationen"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Eigentümer"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Noch einmal tippen, um Informationen anzuzeigen"</string>
@@ -592,11 +594,11 @@
     <string name="importToFDNfromContacts" msgid="5068664870738407341">"Aus Kontakten importieren"</string>
     <string name="singleContactImportedMsg" msgid="3619804066300998934">"Kontakt wird importiert."</string>
     <string name="failedToImportSingleContactMsg" msgid="228095510489830266">"Fehler beim Importieren des Kontakts"</string>
-    <string name="hac_mode_title" msgid="4127986689621125468">"Hörhilfen"</string>
+    <string name="hac_mode_title" msgid="4127986689621125468">"Hörgeräte"</string>
     <string name="hac_mode_summary" msgid="7774989500136009881">"Hörhilfekompatibilität aktivieren"</string>
     <string name="rtt_mode_title" msgid="3075948111362818043">"RTT-Anruf"</string>
     <string name="rtt_mode_summary" msgid="8631541375609989562">"Nachrichten in Sprachanrufen erlauben"</string>
-    <string name="rtt_mode_more_information" msgid="587500128658756318">"Echtzeittext (Real-Time Text, RTT) dient als Unterstützung für Anrufer, die gehörlos, schwerhörig oder sprachgeschädigt sind oder zusätzlich zur gesprochenen Sprache weitere Informationen benötigen.&lt;br&gt; &lt;a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>&gt;Weitere Informationen&lt;/a&gt;\n       &lt;br&gt;&lt;br&gt; – RTT-Anrufe werden als Nachrichtentranskripte gespeichert\n       &lt;br&gt; – RTT ist nicht für Videoanrufe verfügbar"</string>
+    <string name="rtt_mode_more_information" msgid="587500128658756318">"Echtzeittext (Real-Time Text, RTT) dient als Unterstützung für Anrufer mit Hör- oder Sprachbehinderung oder Anrufer, die zusätzlich zur gesprochenen Sprache weitere Informationen benötigen.&lt;br&gt; &lt;a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>&gt;Weitere Informationen&lt;/a&gt;\n       &lt;br&gt;&lt;br&gt; – RTT-Anrufe werden als Nachrichtentranskripte gespeichert\n       &lt;br&gt; – RTT ist nicht für Videoanrufe verfügbar"</string>
     <string name="no_rtt_when_roaming" msgid="5268008247378355389">"Hinweis: RTT ist während des Roamings nicht verfügbar"</string>
   <string-array name="tty_mode_entries">
     <item msgid="3238070884803849303">"TTY aus"</item>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Flugmodus ist aktiviert"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Zugriff auf SIM-Karte nicht möglich"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Mobilfunknetz nicht verfügbar"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Satellitenmodus ist aktiviert"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Problem mit der gewählten Telefonnummer. Fehlercode 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Anruf konnte nicht korrekt abgeschlossen werden. Fehlercode 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Anruf konnte nicht korrekt abgeschlossen werden. Fehlercode 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Unter-ID der standardmäßigen Daten-SIM:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL-Bandbreite (kbit/s):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL-Bandbreite (kbit/s):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Konfiguration des physischen LTE-Kanals:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Konfiguration des physischen Kanals:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Aktualisierungsrate der Mobiltelefoninformationen:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Alle Informationen zu Zellenmesswerten:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Datendienst:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Das Bluetooth-Signal ist schwach. Verwende die Freisprechfunktion."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Benachrichtigung zu Anrufqualität"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Eingestellte SIP-Konten"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Du kannst über dieses Profil keine Nachrichten senden"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Gemäß den Arbeitsrichtlinien darfst du nur über dein Arbeitsprofil Nachrichten senden"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Senden von Nachrichten über private Apps nicht möglich"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Deine Organisation lässt nur das Senden von Nachrichten über geschäftliche Apps zu"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Abbrechen"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Zum Arbeitsprofil wechseln"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Geschäftliche Messaging-App installieren"</string>
 </resources>
diff --git a/res/values-el/strings.xml b/res/values-el/strings.xml
index 035e947..875ae61 100644
--- a/res/values-el/strings.xml
+++ b/res/values-el/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Η αναμονή κλήσης σε λειτουργία άμεσων μηνυμάτων (ΙΜ) είναι απενεργοποιημένη"</string>
     <string name="updating_title" msgid="6130548922615719689">"Ρυθμίσεις κλήσης"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Οι ρυθμίσεις κλήσεων μπορούν να αλλάξουν μόνο από τον χρήστη που έχει ρόλο διαχειριστή."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Οι ρυθμίσεις λογαριασμού του τηλεφώνου μπορούν να αλλάξουν μόνο από τον διαχειριστή ή τον χρήστη του προφίλ εργασίας."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Ρυθμίσεις (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Σφάλμα ρυθμίσεων κλήσης"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Ανάγνωση ρυθμίσεων…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Δεν είναι δυνατή η αναμονή κλήσεων."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Συνδεθείτε σε ασύρματο δίκτυο για να πραγματοποιήσετε μια κλήση."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Ενεργοποιήστε τη δυνατότητα κλήσεων μέσω Wi-Fi για να πραγματοποιήσετε μια κλήση."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Απενεργοποιήστε τη λειτουργία δορυφόρου για να πραγματοποιήσετε μια κλήση."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Πληροφορίες έκτακτης ανάγκης"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Κάτοχος"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Πατήστε ξανά για προβολή πληροφοριών"</string>
@@ -681,8 +683,8 @@
     <string name="callFailed_wifi_lost" msgid="1788036730589163141">"Η σύνδεση Wi-Fi χάθηκε. Η κλήση τερματίστηκε."</string>
     <string name="dialFailed_low_battery" msgid="6857904237423407056">"Η βιντεοκλήση δεν μπορεί να πραγματοποιηθεί λόγω χαμηλής στάθμης μπαταρίας"</string>
     <string name="callFailed_low_battery" msgid="4056828320214416182">"Η βιντεοκλήση τερματίστηκε λόγω χαμηλής στάθμης μπαταρίας"</string>
-    <string name="callFailed_emergency_call_over_wfc_not_available" msgid="5944309590693432042">"Η δυνατότητα κλήσεων Wi-Fi δεν είναι διαθέσιμη για κλήσεις έκτακτης ανάγκης σε αυτήν την τοποθεσία."</string>
-    <string name="callFailed_wfc_service_not_available_in_this_location" msgid="3624536608369524988">"Η δυνατότητα κλήσεων Wi-Fi δεν είναι διαθέσιμη σε αυτήν την τοποθεσία."</string>
+    <string name="callFailed_emergency_call_over_wfc_not_available" msgid="5944309590693432042">"Η δυνατότητα κλήσεων Wi-Fi δεν είναι διαθέσιμη για κλήσεις έκτακτης ανάγκης σε αυτή την τοποθεσία."</string>
+    <string name="callFailed_wfc_service_not_available_in_this_location" msgid="3624536608369524988">"Η δυνατότητα κλήσεων Wi-Fi δεν είναι διαθέσιμη σε αυτή την τοποθεσία."</string>
     <string name="change_pin_title" msgid="3564254326626797321">"Αλλαγή PIN αυτόματου τηλεφωνητή"</string>
     <string name="change_pin_continue_label" msgid="5177011752453506371">"Συνέχεια"</string>
     <string name="change_pin_cancel_label" msgid="2301711566758827936">"Ακύρωση"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Λειτουργία πτήσης ενεργή"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Δεν είναι δυνατή η πρόσβαση στην κάρτα SIM"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Μη διαθέσιμο δίκτυο κινητής τηλεφωνίας"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Η λειτουργία δορυφόρου είναι ενεργοποιημένη"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Υπάρχει πρόβλημα με τον αριθμό τηλεφώνου που επιχειρείτε να καλέσετε. Κωδικός σφάλματος 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Δεν ήταν δυνατή η ολοκλήρωση της κλήσης. Κωδικός σφάλματος 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Δεν ήταν δυνατή η ολοκλήρωση της κλήσης. Κωδικός σφάλματος 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"SubId προεπιλεγμένης SIM δεδομένων:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Εύρος ζώνης DL (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Εύρος ζώνης UL (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Διαμόρφωση φυσικού καναλιού LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Διαμορφώσεις φυσικού καναλιού:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Ρυθμός ανανέωσης στοιχείων κινητής τηλεφωνίας:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Όλα τα στοιχεία μετρήσεων κινητής τηλεφωνίας:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Υπηρεσία δεδομένων:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Το σήμα bluetooth είναι ασθενές. Δοκιμάστε να αλλάξετε σε ανοιχτή ακρόαση."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Ειδοποίηση ποιότητας κλήσης"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Καταργημένοι λογαριασμοί SIP"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Δεν είναι δυνατή η αποστολή μηνύματος από αυτό το προφίλ"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Η πολιτική εργασίας σας επιτρέπει την αποστολή μηνυμάτων μόνο από το προφίλ εργασίας"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Δεν είναι δυνατή η ανταλλαγή μηνυμάτων από μια προσωπική εφαρμογή"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Ο οργανισμός σας επιτρέπει μόνο την αποστολή μηνυμάτων από εφαρμογές εργασιών"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Ακύρωση"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Εναλλαγή σε προφίλ εργασίας"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Εγκατάσταση εφαρμογής ανταλλαγής μηνυμάτων για την εργασία"</string>
 </resources>
diff --git a/res/values-en-rAU/strings.xml b/res/values-en-rAU/strings.xml
index c9a7765..9a7861f 100644
--- a/res/values-en-rAU/strings.xml
+++ b/res/values-en-rAU/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA call waiting under IMS off"</string>
     <string name="updating_title" msgid="6130548922615719689">"Call settings"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Call settings can only be changed by the admin user."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Phone account settings can only be changed by the admin or work user."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Settings (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Call settings error"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Reading settings…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Can\'t hold calls."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Connect to a wireless network to make a call."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Enable Wi-Fi calling to make a call."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Disable satellite mode to make a call."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Emergency information"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Owner"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Tap again to view info"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Aeroplane mode is on"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Can\'t access SIM card"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Mobile network not available"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Satellite mode is on"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Issue with phone number you are trying to dial. Error code 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Couldn\'t complete call. Error code 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Couldn\'t complete call. Error code 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"SubId of default data SIM:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL bandwidth (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL bandwidth (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE physical channel configuration:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Physical channel configurations:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Mobile info refresh rate:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"All mobile measurement info:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Data service:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Your Bluetooth signal is weak. Try switching to speakerphone."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Call quality notification"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Deprecated SIP accounts"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Can\'t send message from this profile"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Your work policy allows you to send messages only from the work profile"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Can\'t message from a personal app"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Your organisation only allows you to send messages from work apps"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Cancel"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Switch to work profile"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Install a work messages app"</string>
 </resources>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index b65452e..81942d0 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA Call Waiting under IMS Off"</string>
     <string name="updating_title" msgid="6130548922615719689">"Call settings"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Call settings can only be changed by the admin user."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Phone account settings can only be changed by the admin or work user."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Settings (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Call settings error"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Reading settings…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Can\'t hold calls."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Connect to a wireless network to make a call."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Enable Wi-Fi calling to make a call."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Disable satellite mode to make a call."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Emergency information"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Owner"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Tap again to view info"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Airplane mode is on"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Can\'t access SIM card"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Mobile network not available"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Satellite mode is on"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Issue with phone number you are trying to dial. Error code 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Couldn\'t complete call. Error code 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Couldn\'t complete call. Error code 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"SubId of default data SIM:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL Bandwidth (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL Bandwidth (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE Physical Channel Configuration:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Physical Channel Configurations:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Cell Info Refresh Rate:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"All Cell Measurement Info:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Data Service:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Your bluetooth signal is weak. Try switching to speakerphone."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Call Quality Notification"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Deprecated SIP accounts"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Can\'t send message from this profile"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Your work policy allows you to send message only from the work profile"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Can\'t message from a personal app"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Your organization only allows you to send messages from work apps"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Cancel"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Switch to work profile"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Install a work messages app"</string>
 </resources>
diff --git a/res/values-en-rGB/strings.xml b/res/values-en-rGB/strings.xml
index c9a7765..9a7861f 100644
--- a/res/values-en-rGB/strings.xml
+++ b/res/values-en-rGB/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA call waiting under IMS off"</string>
     <string name="updating_title" msgid="6130548922615719689">"Call settings"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Call settings can only be changed by the admin user."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Phone account settings can only be changed by the admin or work user."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Settings (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Call settings error"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Reading settings…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Can\'t hold calls."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Connect to a wireless network to make a call."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Enable Wi-Fi calling to make a call."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Disable satellite mode to make a call."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Emergency information"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Owner"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Tap again to view info"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Aeroplane mode is on"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Can\'t access SIM card"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Mobile network not available"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Satellite mode is on"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Issue with phone number you are trying to dial. Error code 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Couldn\'t complete call. Error code 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Couldn\'t complete call. Error code 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"SubId of default data SIM:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL bandwidth (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL bandwidth (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE physical channel configuration:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Physical channel configurations:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Mobile info refresh rate:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"All mobile measurement info:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Data service:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Your Bluetooth signal is weak. Try switching to speakerphone."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Call quality notification"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Deprecated SIP accounts"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Can\'t send message from this profile"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Your work policy allows you to send messages only from the work profile"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Can\'t message from a personal app"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Your organisation only allows you to send messages from work apps"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Cancel"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Switch to work profile"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Install a work messages app"</string>
 </resources>
diff --git a/res/values-en-rIN/strings.xml b/res/values-en-rIN/strings.xml
index c9a7765..9a7861f 100644
--- a/res/values-en-rIN/strings.xml
+++ b/res/values-en-rIN/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA call waiting under IMS off"</string>
     <string name="updating_title" msgid="6130548922615719689">"Call settings"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Call settings can only be changed by the admin user."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Phone account settings can only be changed by the admin or work user."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Settings (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Call settings error"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Reading settings…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Can\'t hold calls."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Connect to a wireless network to make a call."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Enable Wi-Fi calling to make a call."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Disable satellite mode to make a call."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Emergency information"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Owner"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Tap again to view info"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Aeroplane mode is on"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Can\'t access SIM card"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Mobile network not available"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Satellite mode is on"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Issue with phone number you are trying to dial. Error code 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Couldn\'t complete call. Error code 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Couldn\'t complete call. Error code 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"SubId of default data SIM:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL bandwidth (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL bandwidth (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE physical channel configuration:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Physical channel configurations:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Mobile info refresh rate:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"All mobile measurement info:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Data service:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Your Bluetooth signal is weak. Try switching to speakerphone."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Call quality notification"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Deprecated SIP accounts"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Can\'t send message from this profile"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Your work policy allows you to send messages only from the work profile"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Can\'t message from a personal app"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Your organisation only allows you to send messages from work apps"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Cancel"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Switch to work profile"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Install a work messages app"</string>
 </resources>
diff --git a/res/values-en-rXC/strings.xml b/res/values-en-rXC/strings.xml
index 7c9c6ee..d275cc4 100644
--- a/res/values-en-rXC/strings.xml
+++ b/res/values-en-rXC/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‎‎‏‏‏‏‎‏‎‎‎‎‎‏‎‏‎‎‏‏‏‎‏‎‎‎‎‏‎‎‎‏‎‏‎‏‏‏‏‎‏‎‏‎‏‏‏‏‎‎‎‏‎‏‏‎‏‎‏‏‏‎‎CDMA Call Waiting under IMS Off‎‏‎‎‏‎"</string>
     <string name="updating_title" msgid="6130548922615719689">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‏‎‏‎‎‎‎‎‏‎‏‎‏‏‏‎‎‎‎‏‏‏‎‎‏‏‎‏‎‏‎‏‎‏‎‎‏‏‏‏‎‎‏‏‏‎‎‎‎‏‎‎‏‎Call settings‎‏‎‎‏‎"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‎‎‏‏‏‎‏‎‏‏‏‏‎‏‎‎‎‎‏‎‎‏‎‏‏‏‎‏‎‎‏‎‎‏‎‎‏‏‏‏‎‏‎‎‎‏‏‏‎‏‏‏‎‏‏‏‎‎Call settings can only be changed by the admin user.‎‏‎‎‏‎"</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‏‎‎‎‎‏‎‏‎‏‎‏‏‏‏‎‏‏‎‏‎‎‎‏‏‏‎‎‏‏‏‏‎‎‏‎‏‎‏‎‏‎‎‏‏‏‏‏‎‎‏‏‎‎‎Phone account settings can only be changed by the admin or work user.‎‏‎‎‏‎"</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‎‏‎‏‏‎‏‎‎‎‏‏‎‎‎‏‏‎‏‏‎‎‎‎‎‏‏‎‏‏‏‎‎‏‏‎‏‎‏‏‎‎‏‏‏‎‎‎‎‏‏‏‏‏‎‏‏‏‎Settings (‎‏‎‎‏‏‎<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>‎‏‎‎‏‏‏‎)‎‏‎‎‏‎"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‎‏‏‏‏‎‎‎‎‎‏‎‏‏‏‏‎‏‏‏‎‎‏‏‏‎‏‎‏‏‏‎‏‏‏‏‏‎‎‎‎‎‎‏‏‏‏‎‏‎‎‎‎‎‏‎‎‎‎‎‏‎‏‎Call settings error‎‏‎‎‏‎"</string>
     <string name="reading_settings" msgid="1605904432450871183">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‎‏‏‎‏‏‎‎‏‎‎‏‎‎‏‎‏‎‏‎‎‎‏‏‎‎‏‎‎‏‎‏‎‏‎‎‏‏‏‎‏‏‏‎‏‎‏‏‎‎‏‏‏‏‏‏‎‎‎‏‏‏‏‎Reading settings…‎‏‎‎‏‎"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‏‎‎‏‎‏‎‎‏‏‏‎‎‏‎‎‏‎‏‏‎‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‎‏‎‏‎‏‎‎‎‎‎‎‎‏‎‏‎Can\'t hold calls.‎‏‎‎‏‎"</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‏‎‎‎‏‎‏‎‏‎‏‎‏‏‎‎‎‏‎‏‎‏‎‎‎‎‏‎‎‏‎‏‏‏‏‎‏‎‏‏‏‎‏‎‎‎‏‎‎‏‎‏‏‏‎‏‎‏‏‎‏‎Connect to a wireless network to make a call.‎‏‎‎‏‎"</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‎‎‎‏‎‎‎‎‎‏‎‎‎‏‏‎‎‎‎‎‏‏‎‏‎‏‎‏‏‏‏‏‎‎‏‏‏‏‏‏‎‎‎‏‎‏‎‏‏‏‎Enable Wi-Fi calling to make a call.‎‏‎‎‏‎"</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‎‎‎‎‎‎‎‏‎‎‎‎‏‏‏‏‏‎‏‏‏‏‎‎‎‎‏‎‎‏‎‎‎‏‎‎‎‎Disable satellite mode to make a call.‎‏‎‎‏‎"</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‎‏‏‎‎‏‎‎‏‎‎‏‏‏‎‎‎‎‏‏‎‏‎‏‏‏‎‎‏‏‏‎‎‏‎‏‎‏‎‏‏‏‎‎‎‏‏‏‏‎‏‎‎‎Emergency information‎‏‎‎‏‎"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‏‎‏‏‎‏‏‎‏‎‏‎‏‎‎‎‎‎‎‏‎‎‏‏‎‎‏‎‎‏‎‎‎‎‏‎‎‏‏‎‎‏‏‎‏‎‎‎‎‎‎‏‎‎‎‏‎‎‏‎‎‎Owner‎‏‎‎‏‎"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‎‎‏‏‎‏‏‏‎‎‏‏‎‏‏‏‎‎‎‎‎‎‏‏‏‎‎‏‏‏‏‏‏‎‎‏‎‏‎‏‎‎‎‎‏‎‎‏‏‎‏‏‏‎‎‎‎‎‎‏‎‎Tap again to view info‎‏‎‎‏‎"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‎‎‎‎‎‏‏‏‏‎‎‏‏‏‎‏‏‏‏‎‎‎‏‏‎‏‎‏‎‎‎‏‎‏‎‎‎‎‏‏‎‎‏‏‎‏‏‎‎‎‏‎Airplane mode is on‎‏‎‎‏‎"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‏‎‏‏‎‎‎‎‏‏‏‎‏‎‏‎‎‏‏‏‎‏‏‏‏‏‎‏‎‎‏‏‏‏‏‎‎‎‎‎‎‎‏‏‏‏‏‎‎‎‏‏‎‏‎Can\'t access SIM card‎‏‎‎‏‎"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‎‏‎‎‏‎‏‏‏‏‏‏‎‎‎‎‏‎‎‎‎‏‏‎‎‏‎‏‎‎‏‎‎‎‏‏‎‏‎‏‎‎‏‏‏‎‎‎‏‎‏‎‏‏‎‏‎‏‎‏‏‎‏‎Mobile network not available‎‏‎‎‏‎"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‎‏‏‎‏‏‏‎‏‎‎‎‎‎‎‏‎‏‎‎‎‏‎‎‎‎‎‏‏‎‏‎‎‎‎‏‎‎‎‎‏‎‏‏‏‎‎‎‏‏‏‏‎‏‎‎‎‏‏‎‏‎‎‎Satellite mode is on‎‏‎‎‏‎"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‎‎‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‏‏‎‏‏‎‏‎‏‎‏‏‎‏‏‏‎‎‎‏‏‏‏‏‎‏‏‎‏‎‏‏‎‎‏‎‎‎‎‎‎‏‎‎Issue with phone number you are trying to dial. Error code 1.‎‏‎‎‏‎"</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‎‎‎‏‎‏‎‏‎‏‏‏‎‏‏‎‏‎‏‏‏‏‏‎‏‎‎‏‎‎‎‎‏‏‎‎‏‏‎‎‎‏‎‎‎‎‎‎‏‏‎‏‏‏‎‏‏‎‏‎‎‎Couldn\'t complete call. Error code 3.‎‏‎‎‏‎"</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‎‏‏‏‎‎‎‎‏‏‎‎‎‎‏‏‏‎‎‏‏‎‏‏‏‎‎‎‎‏‏‏‎‏‏‏‎‏‏‎‎‏‏‏‏‎‏‏‏‏‎‏‏‏‎‏‎‎‏‏‏‎‏‎Couldn\'t complete call. Error code 6.‎‏‎‎‏‎"</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‎‎‏‏‏‏‏‎‎‏‎‏‎‎‎‏‎‎‎‎‎‎‏‎‎‎‎‏‎‎‎‏‏‎‎‎‎‎‏‏‎‎‏‎‎‎‎‏‎‎‏‏‏‏‎‏‏‎‎‏‏‎‎SubId of default data SIM:‎‏‎‎‏‎"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‎‏‎‎‎‎‏‎‎‎‏‎‎‎‏‏‏‎‏‎‏‏‏‏‎‎‎‏‎‎‎‏‎‎‏‏‎‎‎‎‎‏‏‏‏‎‎‎‏‎‏‏‎‎‎‎‏‎‎‎‏‏‎‎DL Bandwidth (kbps):‎‏‎‎‏‎"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‎‏‏‏‏‎‏‎‎‏‎‏‏‎‎‏‎‎‏‏‎‏‎‏‏‎‏‏‏‎‏‎‎‏‏‎‎‏‎‏‎‏‏‏‎‏‏‏‏‎‏‎‎‏‏‎‎‏‏‏‏‎‎‎UL Bandwidth (kbps):‎‏‎‎‏‎"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‏‎‎‎‎‏‏‎‎‎‎‎‏‏‎‎‏‎‎‏‎‏‏‎‎‎‎‎‎‎‏‎‏‎‏‎‏‏‏‎‎‎‎‎‎‏‏‎‎‎‏‎LTE Physical Channel Configuration:‎‏‎‎‏‎"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‎‎‏‎‎‎‎‏‏‏‎‎‎‎‎‎‏‏‎‏‏‎‎‎‏‎‏‎‎‏‎‏‏‎‏‏‎‎‎‎‏‏‏‎‎‎‎‏‏‎‎‏‎‏‎‏‏‎‎‏‏‏‎Physical Channel Configurations:‎‏‎‎‏‎"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‎‎‏‎‎‏‎‏‎‎‏‏‏‎‎‎‏‎‎‎‏‎‏‎‎‏‏‏‎‎‎‎‏‏‏‏‏‎‎‎‎‎‏‎‏‏‏‏‏‏‏‎‎‏‏‎‎‏‏‏‎‎‎Cell Info Refresh Rate:‎‏‎‎‏‎"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‎‏‏‏‎‎‏‎‎‎‏‏‏‎‏‏‎‎‎‏‎‏‎‏‎‏‏‏‎‎‎‎‎‎‎‏‎‎‏‎‎‏‎‎‎‏‎‎‏‎‏‎‏‏‏‎‏‏‎All Cell Measurement Info:‎‏‎‎‏‎"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‏‏‏‏‎‏‎‏‎‎‎‏‎‏‎‏‎‏‏‏‎‎‎‏‎‎‎‎‏‏‏‏‎‎‎‏‎‏‏‎‏‏‎‎‏‏‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎Data Service:‎‏‎‎‏‎"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‎‎‏‏‏‏‎‏‏‏‎‏‎‏‏‎‏‏‏‎‎‎‎‏‎‏‏‏‏‎‎‏‎‎‎‎‏‏‎‎‏‎‏‏‏‏‎‎‏‏‏‏‎‎‎‏‎‏‏‏‎Your bluetooth signal is weak. Try switching to speakerphone.‎‏‎‎‏‎"</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎‎‎‎‎‎‎‏‎‏‏‎‎‏‏‏‎‏‎‎‎‏‎‎‎‎‏‏‏‏‏‏‎‎‏‎‎‎‏‏‎‎‎‎‎‏‎‎‏‏‏‏‎‎Call Quality Notification‎‏‎‎‏‎"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‎‏‏‎‎‎‏‏‎‎‎‎‎‏‎‏‏‎‏‏‏‏‎‏‏‏‏‏‏‎‏‎‏‎‎‏‏‏‏‎‏‎‏‎‏‎‎‎‏‎‏‎‏‏‎‏‎‏‏‎‏‎‏‎Deprecated SIP accounts‎‏‎‎‏‎"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‎‎‏‏‎‎‏‎‏‏‎‏‏‏‎‏‎‎‎‎‎‏‏‏‎‎‎‏‏‏‎‏‏‎‏‎‎‎‏‎‏‎‏‎‏‏‎‎‏‎Can\'t send message from this profile‎‏‎‎‏‎"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‎‎‏‎‏‎‏‏‎‏‏‎‏‎‎‏‎‏‎‏‎‏‏‎‏‎‎‎‏‏‏‎‏‏‏‎‏‏‏‎‏‎‏‏‎‏‏‎‎‏‎‎‏‏‏‎‎‎‏‎‎‎Your work policy allows you to send message only from the work profile‎‏‎‎‏‎"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‎‎‎‎‏‏‏‎‎‎‏‎‎‎‎‎‎‎‎‏‏‏‎‎‎‎‎‏‏‎‏‎‎‏‎‎‎‏‎‎‏‎‏‎‎‏‎‏‏‏‏‎‎‏‏‏‏‏‏‎‎‎Can\'t message from a personal app‎‏‎‎‏‎"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‎‏‏‏‏‏‎‎‎‏‎‏‏‎‏‎‎‎‎‎‏‏‏‏‎‎‎‏‏‏‏‏‎‏‎‏‎‏‏‎‏‏‎‎‏‏‎‏‎‎‏‎‏‎‎‎‏‏‏‎‏‏‎‎Your organization only allows you to send messages from work apps‎‏‎‎‏‎"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‎‏‎‏‎‎‏‏‏‎‏‏‏‎‏‏‏‏‎‏‏‏‎‎‎‎‎‏‎‏‎‎‏‎‎‏‎‎‎‎‎‎‏‏‏‏‏‏‎‏‏‎‎‏‎‎‎‏‏‏‏‎Cancel‎‏‎‎‏‎"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‏‏‏‏‏‏‎‏‎‏‎‎‎‎‎‎‎‏‏‏‎‏‏‎‏‏‎‏‎‏‏‏‎‎‎‎‏‎‎‏‏‎‎‎‎‎‏‎‏‎‎‎‎‎‎‎‎‏‎‎‏‎Switch to work profile‎‏‎‎‏‎"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‎‏‏‎‏‎‎‎‏‎‏‏‏‎‏‏‏‏‏‎‏‎‎‏‎‎‏‎‏‏‏‏‏‏‏‏‎‏‏‎‎‎‎‎‏‏‏‎‏‏‏‎‏‏‎‎‎‎‎‎‏‏‏‎Install a work messages app‎‏‎‎‏‎"</string>
 </resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index 22e0e4d..2a25ded 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"La función de llamada en espera de CDMA en IMS está desactivada"</string>
     <string name="updating_title" msgid="6130548922615719689">"Config. de llamada"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Solo el usuario administrador puede cambiar la configuración de llamadas."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Solo el administrador o usuario de trabajo puede cambiar la configuración de la cuenta telefónica."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Configuración (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Error de configuración de llamada"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Leyendo configuración..."</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"No es posible poner las llamadas en espera."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Conectarse a una red inalámbrica para hacer una llamada"</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Habilita las llamadas con Wi-Fi para hacer una llamada."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Inhabilita el modo satelital para realizar una llamada."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Información de emergencia"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Propietario"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Vuelve a presionar para ver la información"</string>
@@ -596,7 +598,7 @@
     <string name="hac_mode_summary" msgid="7774989500136009881">"Activar compatibilidad con audífono"</string>
     <string name="rtt_mode_title" msgid="3075948111362818043">"Llamada de Texto en tiempo real (RTT)"</string>
     <string name="rtt_mode_summary" msgid="8631541375609989562">"Permitir la mensajería en las llamadas de voz"</string>
-    <string name="rtt_mode_more_information" msgid="587500128658756318">"El RTT brinda asistencia a las personas sordas o hipoacúsicas, que tienen algún trastorno del habla o necesitan una transcripción además de la voz.&lt;br&gt; &lt;a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>&gt;Más información&lt;/a&gt;\n       &lt;br&gt;&lt;br&gt; - Las llamadas de RTT se guardan como las transcripciones de los mensajes\n       &lt;br&gt; - El RTT no está disponible para las videollamadas"</string>
+    <string name="rtt_mode_more_information" msgid="587500128658756318">"El RTT brinda asistencia en llamadas a las personas sordas o con hipoacusia, las que tienen algún trastorno del habla o las que necesitan una transcripción además de la voz.&lt;br&gt; &lt;a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>&gt;Más información&lt;/a&gt;\n       &lt;br&gt;&lt;br&gt; - Las llamadas de RTT se guardan como las transcripciones de los mensajes\n       &lt;br&gt; - El RTT no está disponible para las videollamadas"</string>
     <string name="no_rtt_when_roaming" msgid="5268008247378355389">"Nota: La función RTT no está disponible en roaming"</string>
   <string-array name="tty_mode_entries">
     <item msgid="3238070884803849303">"TTY desactivado"</item>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"El modo de avión está activado"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"No se puede acceder a la tarjeta SIM"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Red móvil no disponible"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"El modo satelital está activado"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Hubo un problema con el número de teléfono que quieres marcar. Código de error: 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"No se pudo realizar la llamada. Código de error: 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"No se pudo realizar la llamada. Código de error: 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"ID secundario de SIM de datos predeterminada:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Ancho de banda de descarga (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Ancho de banda de carga (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Configuración del canal físico de LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Parámetros de configuración de canales físicos:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Frecuencia de actualización de datos del celular:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Información sobre las dimensiones del celular:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Servicio de datos:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Tu señal de Bluetooth es débil. Intenta cambiar a la bocina."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Notificación de calidad de llamada"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Cuentas SIP obsoletas"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"No se puede enviar un mensaje desde este perfil"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Tu política de trabajo te permite enviar mensajes solo desde el perfil de trabajo."</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"No puedes enviar mensajes desde una app personal"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Tu organización solo te permite enviar mensajes desde apps laborales."</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Cancelar"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Cambiar al perfil de trabajo"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Instalar una app de mensajes laboral"</string>
 </resources>
diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml
index 8fa9445..26d5631 100644
--- a/res/values-es/strings.xml
+++ b/res/values-es/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Llamada en espera de CDMA en IMS desactivada"</string>
     <string name="updating_title" msgid="6130548922615719689">"Ajustes de llamadas"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"El administrador es el único usuario que puede cambiar los ajustes de llamada."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Solo el administrador o el usuario de trabajo pueden cambiar la configuración de la cuenta del teléfono."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Ajustes (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Error de configuración de llamada"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Leyendo ajustes..."</string>
@@ -186,9 +187,9 @@
     <string name="manual_mode_disallowed_summary" msgid="3970048592179890197">"No disponible cuando se ha conectado con %1$s"</string>
     <string name="network_select_title" msgid="4117305053881611988">"Red"</string>
     <string name="register_automatically" msgid="3907580547590554834">"Registro automático..."</string>
-    <string name="preferred_network_mode_title" msgid="5253395265169539830">"Tipo de red preferida"</string>
+    <string name="preferred_network_mode_title" msgid="5253395265169539830">"Tipo de red preferido"</string>
     <string name="preferred_network_mode_summary" msgid="3787989000044330064">"Cambiar el modo operativo de la red"</string>
-    <string name="preferred_network_mode_dialogtitle" msgid="2781447433514459696">"Tipo de red preferida"</string>
+    <string name="preferred_network_mode_dialogtitle" msgid="2781447433514459696">"Tipo de red preferido"</string>
     <string name="forbidden_network" msgid="5081729819561333023">"(prohibida)"</string>
     <string name="choose_network_title" msgid="5335832663422653082">"Elegir red"</string>
     <string name="network_disconnected" msgid="8844141106841160825">"Desconectado"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"No se pueden retener llamadas."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Conéctate a una red inalámbrica para hacer llamadas."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Para llamar, tienes que habilitar las llamadas por Wi-Fi."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Inhabilita el modo Satélite para hacer llamadas."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Información de emergencia"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Propietario"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Tocar de nuevo para ver la información"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Está activado el modo Avión"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"No se puede acceder a la tarjeta SIM"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Red móvil no disponible"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"El modo Satélite está activado"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"No se ha podido conectar con el número de teléfono al que estás llamando. Código de error 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"No se ha podido completar la llamada. Código de error 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"No se ha podido completar la llamada. Código de error 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"ID secundario de la SIM de datos predeterminada:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Ancho de banda de bajada (Kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Ancho de banda de subida (Kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Configuración del canal físico de LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Configuraciones del canal físico:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Frecuencia de actualización de la información del teléfono:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Información sobre las dimensiones de los teléfonos:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Servicio de datos:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Tu señal de Bluetooth es débil. Prueba a cambiar al altavoz."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Notificación de calidad de la llamada"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Cuentas SIP obsoletas"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"No se puede enviar el mensaje desde este perfil"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Tu política de trabajo te permite enviar mensajes solo desde el perfil de trabajo"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"No puedes enviar mensajes desde una aplicación personal"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Tu organización solo te permite enviar mensajes desde aplicaciones de trabajo"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Cancelar"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Cambiar al perfil de trabajo"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Instalar una aplicación de mensajería de trabajo"</string>
 </resources>
diff --git a/res/values-et/strings.xml b/res/values-et/strings.xml
index 6ec88dc..60c4d40 100644
--- a/res/values-et/strings.xml
+++ b/res/values-et/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA ootel kõne on IMS-i all välja lülitatud"</string>
     <string name="updating_title" msgid="6130548922615719689">"Kõneseaded"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Kõne seadeid saab muuta ainult administraator."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Telefoni konto seadeid saab muuta ainult administraator või tööprofiili kasutaja."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Seaded (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Kõneseadete viga"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Seadete lugemine ..."</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Kõnesid ei saa ootele panna."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Helistamiseks looge ühendus traadita võrguga."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Lubage helistamiseks WiFi-kõned."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Helistamiseks keelake satelliidirežiim."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Hädaabiteave"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Omanik"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Teabe vaatamiseks puudutage uuesti"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Lennukirežiim on sisse lülitatud"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"SIM-kaardile ei pääse juurde"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Mobiilsidevõrk pole saadaval"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Satelliidirežiim on sisse lülitatud"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Probleem telefoninumbriga, mida püüate valida. Veakood 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Kõnet ei õnnestunud lõpule viia. Veakood 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Kõnet ei õnnestunud lõpule viia. Veakood 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Andmete vaike-SIM-kaardi alam-ID:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL-i ribalaius (kbit/s):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL-i ribalaius (kbit/s):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE füüsilise kanali konfiguratsioon:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Füüsilise kanali seadistused:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Kärje teabe värskendamissagedus:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Kõik kärje mõõteandmed:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Andmesideteenus:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Teie Bluetoothi signaal on nõrk. Lülitage valjuhääldile."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Kõnekvaliteedi märguanne"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Katkestatud toega SIP-kontod"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Te ei saa sellelt profiililt sõnumeid saata"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Teie töökoja eeskirjad lubavad teil ainult tööprofiililt sõnumeid saata"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Isiklikust rakendusest ei saa sõnumit saata"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Teie organisatsioon lubab sõnumeid saata ainult töörakendustest."</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Tühista"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Lülitu tööprofiilile"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Installi töökoha sõnumsiderakendus"</string>
 </resources>
diff --git a/res/values-eu/strings.xml b/res/values-eu/strings.xml
index 12c1a3c..4790caa 100644
--- a/res/values-eu/strings.xml
+++ b/res/values-eu/strings.xml
@@ -96,10 +96,10 @@
     <string name="sum_loading_settings" msgid="434063780286688775">"Ezarpenak kargatzen…"</string>
     <string name="sum_hide_caller_id" msgid="131100328602371933">"Ezkutatu zenbakia irteerako deietan"</string>
     <string name="sum_show_caller_id" msgid="3571854755324664591">"Erakutsi zenbakia irteerako deietan"</string>
-    <string name="sum_default_caller_id" msgid="1767070797135682959">"Erabili operadorearen ezarpen lehenetsiak, egiten ditudan deietan nire zenbakia erakusteko"</string>
+    <string name="sum_default_caller_id" msgid="1767070797135682959">"Erabili operadorearen ezarpen lehenetsiak, irteerako deietan nire zenbakia erakusteko"</string>
     <string name="labelCW" msgid="8449327023861428622">"Deiak zain"</string>
-    <string name="sum_cw_enabled" msgid="3977308526187139996">"Deiak abian dauden bitartean, eman jasotzen ditudan deien berri"</string>
-    <string name="sum_cw_disabled" msgid="3658094589461768637">"Deiak abian dauden bitartean, eman jasotzen ditudan deien berri"</string>
+    <string name="sum_cw_enabled" msgid="3977308526187139996">"Deiak abian dauden bitartean, eman sarrerako deien berri"</string>
+    <string name="sum_cw_disabled" msgid="3658094589461768637">"Deiak abian dauden bitartean, eman sarrerako deien berri"</string>
     <string name="call_forwarding_settings" msgid="8937130467468257671">"Dei-desbideratzearen ezarpenak"</string>
     <string name="call_forwarding_settings_with_label" msgid="2345432813399564272">"Deiak desbideratzeko ezarpenak (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="labelCF" msgid="3578719437928476078">"Dei-desbideratzea"</string>
@@ -126,13 +126,14 @@
     <string name="disable_cfnrc_forbidden" msgid="775348748084726890">"Operadoreak ez du dei-desbideratzeak desgaitzea onartzen telefonoa eskuragarri ez dagoen bitartean."</string>
     <string name="registration_cf_forbidden" msgid="4386482610771190420">"Operadoreak ez du onartzen dei-desbideratzea."</string>
     <string name="cdma_call_waiting" msgid="4565070960879673216">"Deia zain uzteko aukera aktibatu nahi duzu?"</string>
-    <string name="enable_cdma_call_waiting_setting" msgid="5906811747921744307">"Dei batean zaudenean, jakinarazpen bat jasoko duzu deiak jasotzen badituzu"</string>
+    <string name="enable_cdma_call_waiting_setting" msgid="5906811747921744307">"Dei batean zaudenean, jakinarazpen bat jasoko duzu sarrerako deiak jasotzen badituzu"</string>
     <string name="enable_cdma_cw" msgid="811047045863422232">"Aktibatu"</string>
     <string name="disable_cdma_cw" msgid="7119290446496301734">"Utzi"</string>
     <string name="cdma_call_waiting_in_ims_on" msgid="6390979414188659218">"IMS zerbitzupean CDMA deiak zain uzteko aukera aktibatuta dago"</string>
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS zerbitzupean CDMA deiak zain uzteko aukera desaktibatuta dago"</string>
     <string name="updating_title" msgid="6130548922615719689">"Deien ezarpenak"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Administratzaileak soilik alda ditzake deien ezarpenak."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Administratzaileak / Laneko erabiltzaileek alda ditzakete telefonoko kontuaren ezarpenak."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Ezarpenak (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Deien ezarpenen errorea"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Ezarpenak irakurtzen…"</string>
@@ -156,8 +157,8 @@
     <item msgid="9150034130629852635">"Erakutsi zenbakia"</item>
   </string-array>
     <string name="vm_changed" msgid="4739599044379692505">"Erantzungailuaren zenbakia aldatu da."</string>
-    <string name="vm_change_failed" msgid="7877733929455763566">"Ezin izan da erantzungailuaren zenbakia aldatu.\nArazoak bere horretan badirau, jarri harremanetan operadorearekin."</string>
-    <string name="fw_change_failed" msgid="9179241823460192148">"Ezin izan da desbideratze-zenbakia aldatu.\nArazoak bere horretan jarraitzen badu, jarri harremanetan operadorearekin."</string>
+    <string name="vm_change_failed" msgid="7877733929455763566">"Ezin izan da erantzungailuaren zenbakia aldatu.\nArazoak bere horretan badirau, jarri operadorearekin harremanetan."</string>
+    <string name="fw_change_failed" msgid="9179241823460192148">"Ezin izan da desbideratze-zenbakia aldatu.\nArazoak bere horretan jarraitzen badu, jarri operadorearekin harremanetan."</string>
     <string name="fw_get_in_vm_failed" msgid="2432678237218183844">"Ezin izan dira desbideratze-zenbakiaren ezarpenak eskuratu eta gorde.\nHala ere, hornitzaile berrira aldatu nahi duzu?"</string>
     <string name="no_change" msgid="3737264882821031892">"Ez da aldaketarik egin."</string>
     <string name="sum_voicemail_choose_provider" msgid="6750824719081403773">"Aukeratu erantzungailu-zerbitzua"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Ezin dira zain utzi deiak."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Deia egiteko, konektatu haririk gabeko sare batera."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Deia egiteko, gaitu wifi bidezko deiak."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Deiak egiteko, desgaitu satelite modua."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Larrialdietarako informazioa"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Jabea"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Informazioa ikusteko, sakatu berriro"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Hegaldi modua aktibatuta dago"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Ezin da atzitu SIM txartela"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Sare mugikorra ez dago erabilgarri"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Satelite modua aktibatuta dago"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Arazoren bat dago markatzen ari zaren zenbakiarekin. Errore-kodea: 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Ezin izan da egin deia. Errore-kodea: 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Ezin izan da egin deia. Errore-kodea: 6."</string>
@@ -766,8 +769,8 @@
     <string name="sum_call_barring_enabled" msgid="5184331188926370824">"Aktibatuta"</string>
     <string name="sum_call_barring_disabled" msgid="5699448000600153096">"Desaktibatuta"</string>
     <string name="call_barring_baoc" msgid="7400892586336429326">"Egindako guztiak"</string>
-    <string name="call_barring_baoc_enabled" msgid="3131509193386668182">"Egindako dei guztiak blokeatzeko aukera desgaitu nahi duzu?"</string>
-    <string name="call_barring_baoc_disabled" msgid="8534224684091141509">"Egindako dei guztiak blokeatu nahi dituzu?"</string>
+    <string name="call_barring_baoc_enabled" msgid="3131509193386668182">"Irteerako dei guztiak blokeatzeko aukera desgaitu nahi duzu?"</string>
+    <string name="call_barring_baoc_disabled" msgid="8534224684091141509">"Irteerako dei guztiak blokeatu nahi dituzu?"</string>
     <string name="call_barring_baoic" msgid="8668125428666851665">"Nazioartean egindakoak"</string>
     <string name="call_barring_baoic_enabled" msgid="1203758092657630123">"Nazioartean egindako deiak blokeatzeko aukera desgaitu nahi duzu?"</string>
     <string name="call_barring_baoic_disabled" msgid="5656889339002997449">"Nazioartean egindako deiak blokeatu nahi dituzu?"</string>
@@ -775,8 +778,8 @@
     <string name="call_barring_baoicr_enabled" msgid="1615324165512798478">"Nazioarteko ibiltaritzan egindako deiak blokeatzeko aukera desgaitu nahi duzu?"</string>
     <string name="call_barring_baoicr_disabled" msgid="172010175248142831">"Nazioarteko ibiltaritzan egindako deiak blokeatu nahi dituzu?"</string>
     <string name="call_barring_baic" msgid="7941393541678658566">"Jasotako guztiak"</string>
-    <string name="call_barring_baic_enabled" msgid="4357332358020337470">"Jasotako dei guztiak blokeatzeko aukera desgaitu nahi duzu?"</string>
-    <string name="call_barring_baic_disabled" msgid="2355945245938240958">"Jasotako dei guztiak blokeatu nahi dituzu?"</string>
+    <string name="call_barring_baic_enabled" msgid="4357332358020337470">"Sarrerako dei guztiak blokeatzeko aukera desgaitu nahi duzu?"</string>
+    <string name="call_barring_baic_disabled" msgid="2355945245938240958">"Sarrerako dei guztiak blokeatu nahi dituzu?"</string>
     <string name="call_barring_baicr" msgid="8712249337313034226">"Nazioarteko ibiltaritzan jasotakoak"</string>
     <string name="call_barring_baicr_enabled" msgid="64774270234828175">"Nazioarteko ibiltaritzan jasotako dei guztiak blokeatzeko aukera desgaitu nahi duzu?"</string>
     <string name="call_barring_baicr_disabled" msgid="3488129262744027262">"Nazioarteko ibiltaritzan jasotako deiak blokeatu nahi dituzu?"</string>
@@ -801,8 +804,8 @@
     <string name="supp_service_notification_call_waiting" msgid="4577403881609445324">"Deia zain dago."</string>
     <string name="supp_service_clir_suppression_rejected" msgid="6105737020194776121">"Sareak zenbakia blokeatzeko aukera baztertu du."</string>
     <string name="supp_service_closed_user_group_call" msgid="2811636666505250689">"Erabiltzaile talde itxi baten deia."</string>
-    <string name="supp_service_incoming_calls_barred" msgid="2034627421274447674">"Debekatu da deiak jasotzea."</string>
-    <string name="supp_service_outgoing_calls_barred" msgid="5205725332394087112">"Debekatu da deiak egitea."</string>
+    <string name="supp_service_incoming_calls_barred" msgid="2034627421274447674">"Debekatu dira sarrerako deiak."</string>
+    <string name="supp_service_outgoing_calls_barred" msgid="5205725332394087112">"Debekatu dira irteerako deiak."</string>
     <string name="supp_service_call_forwarding_active" msgid="7910162960395132464">"Aktibatu da dei-desbideratzea."</string>
     <string name="supp_service_additional_call_forwarded" msgid="8772753260008398632">"Desbideratu da jasotako beste deia."</string>
     <string name="supp_service_additional_ect_connected" msgid="8525934162945220237">"Transferitu da deia."</string>
@@ -814,8 +817,8 @@
     <string name="supp_service_conference_call" msgid="4004193534408317148">"Konferentzia-deian sartzen."</string>
     <string name="supp_service_held_call_released" msgid="2847835124639112410">"Askatu da zain utzitako deia."</string>
     <string name="callFailed_otasp_provisioning_in_process" msgid="3345666183602879326">"Ezin da egin deia, une honetan gailua hornitzen ari delako."</string>
-    <string name="callFailed_already_dialing" msgid="7250591188960691086">"Ezin da egin deia, beste dei bat abian delako."</string>
-    <string name="callFailed_already_ringing" msgid="2376603543544289303">"Ezin da egin deia, oraindik erantzun ez diozun dei bat jasotzen ari zarelako. Beste dei bat egin aurretik, erantzun deiari edo bazter ezazu."</string>
+    <string name="callFailed_already_dialing" msgid="7250591188960691086">"Ezin da egin deia, irteerako beste dei bat abian delako."</string>
+    <string name="callFailed_already_ringing" msgid="2376603543544289303">"Ezin da egin deia, oraindik erantzun ez diozun sarrerako dei bat baitago. Beste dei bat egin aurretik, erantzun sarrerako deiari edo bazter ezazu."</string>
     <string name="callFailed_calling_disabled" msgid="5010992739401206283">"Ezin da egin deia, deiak egiteko aukera desgaitu egin delako sistemaren ro.telephony.disable-call propietatea erabilita."</string>
     <string name="callFailed_too_many_calls" msgid="2761754044990799580">"Ezin da egin deia, dagoeneko bi dei daudelako abian. Beste dei bat egin aurretik, eten deietako bat edo bateratu deiak konferentzia-dei bakarrean."</string>
     <string name="supp_service_over_ut_precautions" msgid="2145018231396701311">"<xliff:g id="SUPP_SERVICE">%s</xliff:g> erabiltzeko, ziurtatu datu-konexioa aktibatuta dagoela. Sare mugikorren ezarpenetan alda dezakezu aukera hau."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Datu-konexioetarako SIM lehenetsiaren azpiIDa:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Deskargatzeko banda-zabalera (Kb/s):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Kargen banda-zabalera (Kb/s):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE kanal fisikoaren konfigurazioa:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Kanal fisikoen konfigurazioa:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Sare mugikorraren informazioa eguneratzeko maiztasuna:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Sare mugikorraren neurketa guztien informazioa:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Datu-zerbitzua:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Bluetooth seinalea ahula da. Erabili telefonoko bozgorailua."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Deien kalitateari buruzko jakinarazpena"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"SIP-eko kontu zaharkituak"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Ezin duzu bidali mezurik profil honetatik"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Mezuak laneko profiletik soilik bidaltzeko baimena ematen dizute laneko gidalerroek"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Ezin duzu bidali mezurik aplikazio pertsonaletatik"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Mezuak laneko aplikazioetatik soilik bidaltzeko baimena ematen du zure erakundeak"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Utzi"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Aldatu laneko profilera"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Instalatu laneko mezularitza-aplikazio bat"</string>
 </resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index dce81ab..c52cb86 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"‏«انتظار مکالمه CDMA» تحت IMS خاموش است"</string>
     <string name="updating_title" msgid="6130548922615719689">"تنظیمات تماس"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"فقط کاربر سرپرست می‌تواند تنظیمات تماس را تغییر دهد."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"فقط کاربر کاری یا سرپرست می‌تواند تنظیمات حساب تلفن را تغییر دهد."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"تنظیمات (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"خطای تنظیمات تماس"</string>
     <string name="reading_settings" msgid="1605904432450871183">"در حال خواندن تنظیمات..."</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"نگه‌داشتن تماس‌ها ممکن نیست."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"برای برقراری تماس، به یک شبکه بی‌سیم وصل شوید"</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"‏برای برقراری تماس، تماس Wi-Fi را فعال کنید."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"برای برقراری تماس، حالت ماهواره را غیرفعال کنید."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"اطلاعات اضطراری"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"مالک"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"برای دیدن اطلاعات، دوباره ضربه بزنید"</string>
@@ -596,7 +598,7 @@
     <string name="hac_mode_summary" msgid="7774989500136009881">"روشن کردن سازگاری دستگاه کمک‌شنوایی"</string>
     <string name="rtt_mode_title" msgid="3075948111362818043">"‏تماس با نوشتار هم‌زمان (RTT)"</string>
     <string name="rtt_mode_summary" msgid="8631541375609989562">"پیام‌رسانی در تماس صوتی مجاز است"</string>
-    <string name="rtt_mode_more_information" msgid="587500128658756318">"‏«نوشتار هم‌زمان» به تماس گیرندگان ناشنوا، دارای مشکل شنوایی، دارای ناتوانی گفتاری یا افرادی که به چیزی بیش از صدا نیاز دارند کمک می‌کند.&lt;br&gt; &lt;a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>&gt;بیشتر بدانید&lt;/a&gt;\n       ‏&lt;br&gt;&lt;br&gt; تماس‌های «نوشتار هم‌زمان» به‌صورت ترانویسی پیام ذخیره می‌شود\n       &lt;br&gt; «نوشتار هم‌زمان» برای تماس‌های ویدیویی دردسترس نیست"</string>
+    <string name="rtt_mode_more_information" msgid="587500128658756318">"‏«نوشتار هم‌زمان» به تماس گیرندگان ناشنوا، دارای مشکل شنوایی، دارای ناتوانی گفتاری یا افرادی که به چیزی بیش از صدا نیاز دارند کمک می‌کند.&lt;br&gt; &lt;a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>&gt;بیشتر بدانید&lt;/a&gt;\n       ‏&lt;br&gt;&lt;br&gt; تماس‌های «نوشتار هم‌زمان» به‌صورت ترانویسی پیام ذخیره می‌شود\n       &lt;br&gt; «نوشتار هم‌زمان» برای تماس‌های تصویری دردسترس نیست"</string>
     <string name="no_rtt_when_roaming" msgid="5268008247378355389">"نکته: «نوشتار هم‌زمان» در هنگام فراگردی دردسترس نیست"</string>
   <string-array name="tty_mode_entries">
     <item msgid="3238070884803849303">"‏TTY خاموش"</item>
@@ -659,7 +661,7 @@
     <string name="description_dial_button" msgid="8614631902795087259">"شماره گیری"</string>
     <string name="description_dialpad_button" msgid="7395114120463883623">"نمایش صفحه شماره گیری"</string>
     <string name="pane_title_emergency_dialpad" msgid="3627372514638694401">"صفحه شماره‌گیری اضطراری"</string>
-    <string name="voicemail_visual_voicemail_switch_title" msgid="6610414098912832120">"پست صوتی تصویری"</string>
+    <string name="voicemail_visual_voicemail_switch_title" msgid="6610414098912832120">"پست صوتی دیداری"</string>
     <string name="voicemail_set_pin_dialog_title" msgid="7005128605986960003">"تنظیم پین"</string>
     <string name="voicemail_change_pin_dialog_title" msgid="4633077715231764435">"تغییر پین"</string>
     <string name="preference_category_ringtone" msgid="8787281191375434976">"آهنگ‌ زنگ و لرزش"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"حالت هواپیما روشن است"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"دسترسی به سیم‌کارت ممکن نیست"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"شبکه تلفن همراه در دسترس نیست"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"حالت ماهواره روشن است"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"شماره تلفنی که سعی دارید با آن تماس بگیرید مشکل دارد. کد خطا: ۱."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"تماس انجام نشد. کد خطا: ۳."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"تماس انجام نشد. کد خطا: ۶."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"‏SubId مربوط به سیم‌کارت داده پیش‌فرض:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"‏پهنای باند DL (کیلوبیت بر ثانیه):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"‏پهنای باند UL (کیلوبیت بر ثانیه):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"‏پیکربندی کانال فیزیکی LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"پیکربندی‌های کانال فیزیکی:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"نرخ بازآوری اطلاعات شبکه همراه:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"همه اطلاعات اندازه‌گیری شبکه همراه:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"سرویس داده:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"سیگنال بلوتوث شما ضعیف است. از بلندگوی تلفن استفاده کنید."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"اعلان کیفیت تماس"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"‏حساب‌های SIP منسوخ‌شده"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"نمی‌توانید ازطریق این نمایه پیام ارسال کنید"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"طبق خط‌مشی کاری‌تان فقط می‌توانید ازطریق نمایه کاری پیام ارسال کنید"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"نمی‌توانید ازطریق برنامه شخصی پیام ارسال کنید"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"سازمانتان فقط به شما اجازه می‌دهد ازطریق برنامه‌های کاری پیام ارسال کنید"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"لغو کردن"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"رفتن به نمایه کاری"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"نصب برنامه پیام‌رسانی کاری"</string>
 </resources>
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index 430afe0..f24af53 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS:n alainen CDMA-koputus pois käytöstä"</string>
     <string name="updating_title" msgid="6130548922615719689">"Puheluasetukset"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Vain järjestelmänvalvoja voi muuttaa puheluasetuksia."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Vain järjestelmänvalvoja tai työkäyttäjä voi muuttaa puhelintilin asetuksia."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Asetukset (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Virhe puheluasetuksissa"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Luetaan asetuksia…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Puhelujen pito ei onnistu."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Yhdistä langattomaan verkkoon, jos haluat soittaa puhelun."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Ota Wi-Fi-puhelut käyttöön soittaaksesi."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Poista satelliittitila käytöstä, jotta voit soittaa puhelun."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Vaaratiedot"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Omistaja"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Katso tiedot napauttamalla uudelleen"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Lentokonetila on käytössä."</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"SIM-kortin käyttö epäonnistui."</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Mobiiliverkko ei ole käytettävissä"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Satelliittitila on päällä"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Puhelinnumerossa, johon yritit soittaa, havaittiin virhe. Virhekoodi 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Soittaminen epäonnistui. Virhekoodi 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Soittaminen epäonnistui. Virhekoodi 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Oletusarvoisen data-SIM-kortin alitunnus:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL-kaistanleveys (kt/s):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL-kaistanleveys (kt/s):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Fyysisen LTE-kanavan kokoonpano:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Fyysisen kanavan määritykset:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Matkapuhelintietojen päivitysaikaväli:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Matkapuhelimen kaikki mittaustiedot:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Datapalvelu:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Bluetooth-signaali on heikko. Kokeile vaihtaa kaiutinpuhelimeen."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Puhelun laatua koskeva ilmoitus"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Käytöstä poistetut SIP-tilit"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Viestiä ei voi lähettää tästä profiilista"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Työkäytäntö sallii sinun lähettää viestejä vain työprofiilista"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Viestejä ei voi lähettää henkilökohtaisella sovelluksella"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Organisaatio sallii viestien lähettämisen vain työsovelluksilla"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Peru"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Vaihda työprofiiliin"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Asenna työviestisovellus"</string>
 </resources>
diff --git a/res/values-fr-rCA/strings.xml b/res/values-fr-rCA/strings.xml
index b5c2014..95e6ae9 100644
--- a/res/values-fr-rCA/strings.xml
+++ b/res/values-fr-rCA/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Mise en attente d\'appels CDMA sous IMS désactivée"</string>
     <string name="updating_title" msgid="6130548922615719689">"Paramètres d\'appel"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Seul l\'administrateur peut modifier les paramètres d\'appel."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Seuls l\'admin. ou l\'utilisat. profession. peuvent modif. les param. du compte tél."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Paramètres (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Erreur des paramètres d\'appel"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Lecture des paramètres..."</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Impossible de mettre les appels en attente."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Connectez-vous à un réseau Wi-Fi pour faire un appel."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Activez les appels Wi-Fi pour faire un appel."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Désactivez le mode Satellite pour passer un appel."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Renseignements en cas d\'urgence"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Propriétaire"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Touchez à nouveau pour afficher les renseignements"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Le mode Avion est activé"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Impossible d\'accéder à la carte SIM"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Réseau cellulaire non disponible"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Le mode Satellite est activé"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Problème avec le numéro de téléphone que vous essayez de composer. Code d\'erreur 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Impossible d\'effectuer l\'appel. Code d\'erreur 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Impossible d\'effectuer l\'appel. Code d\'erreur 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Sous-identifiant de la carte SIM par défaut :"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Bande passante de téléchargement (kb/s) :"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Bande passante de téléversement (kb/s) :"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Configuration du canal physique LTE :"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Configurations des canaux physiques :"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Taux d\'actualisation des données de la cellule :"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Données des mesures de toutes les cellules :"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Service de données :"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Votre signal Bluetooth est faible. Essayez de passer au haut-parleur mains libres."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Notification de qualité d\'appel"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Comptes SIP obsolètes"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Impossible d\'envoyer un message à partir de ce profil"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Votre politique de l\'entreprise vous autorise à envoyer des messages uniquement à partir de votre profil professionnel"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Impossible d\'envoyer un message à partir d\'une application personnelle"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Votre organisation ne vous autorise à envoyer de messages qu\'à partir d\'applications professionnelles"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Annuler"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Passer au profil professionnel"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Installer une application de messagerie professionnelle"</string>
 </resources>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index 7e3ca20..85a5a93 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Fonctionnalité d\'appel CDMA en attente sous IMS désactivée"</string>
     <string name="updating_title" msgid="6130548922615719689">"Paramètres d\'appel"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Seul l\'administrateur peut modifier les paramètres d\'appel."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Seul l\'administrateur ou l\'utilisateur professionnel peut modifier les paramètres du compte téléphonique."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Paramètres (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Erreur des paramètres d\'appel"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Lecture des paramètres..."</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Impossible de mettre les appels en attente."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Connectez-vous à un réseau sans fil pour passer un appel."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Pour passer un appel, veuillez activer les appels Wi-Fi."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Désactivez le mode Satellite pour passer un appel."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Informations d\'urgence"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Propriétaire"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Appuyer à nouveau pour afficher les informations"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Le mode Avion est activé"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Impossible d\'accéder à la carte SIM"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Réseau mobile non disponible"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Le mode Satellite est activé"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Un problème est survenu avec le numéro de téléphone que vous tentez de composer. Code d\'erreur 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"L\'appel n\'a pas abouti. Code d\'erreur 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"L\'appel n\'a pas abouti. Code d\'erreur 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Sous-identifiant SIM par défaut pour les données :"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Bande passante de téléchargement (kbit/s) :"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Bande passante d\'importation (kbit/s) :"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Configuration de la chaîne physique LTE :"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Configurations des canaux physiques :"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Fréquence d\'actualisation des informations mobiles :"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Toutes les informations mobiles liées aux mesures :"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Service de données :"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Votre signal Bluetooth est faible. Essayez d\'utiliser le haut-parleur."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Notification concernant la qualité de l\'appel"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Comptes SIP obsolètes"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Impossible d\'envoyer un message depuis ce profil"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Votre règle professionnelle ne vous permet d\'envoyer des messages que depuis le profil professionnel"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Impossible d\'envoyer des messages depuis une application personnelle"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Votre organisation ne vous permet d\'envoyer des messages que depuis des applications professionnelles"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Annuler"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Passer au profil professionnel"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Installer une application de chat professionnelle"</string>
 </resources>
diff --git a/res/values-gl/strings.xml b/res/values-gl/strings.xml
index 6d92dd2..5ce9ea3 100644
--- a/res/values-gl/strings.xml
+++ b/res/values-gl/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"A función de chamada en espera de CDMA en IMS está desactivada"</string>
     <string name="updating_title" msgid="6130548922615719689">"Configuración de chamada"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Só o usuario administrador pode cambiar a configuración de chamada."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Só o usuario administrador ou o usuario do traballo poden cambiar a configuración da conta do teléfono."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Configuración (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Erro de configuración das chamadas"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Lendo a configuración..."</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Non se poden poñer as chamadas en espera."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Conéctate a unha rede sen fíos para facer unha chamada."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Activa as chamadas por wifi para facer unha chamada."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Desactiva o modo Satélite para facer chamadas."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Información de emerxencia"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Propietario"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Toca de novo para consultar a información"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"O modo avión está activado"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Non se puido acceder á tarxeta SIM"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"A rede móbil non está dispoñible"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"O modo Satélite está activado"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Produciuse un problema co número de teléfono que estás tentando marcar. Código de erro 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Non se puido realizar a chamada. Código de erro 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Non se puido realizar a chamada. Código de erro 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Código de identificación secundario da SIM de datos predeterminada:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Largura de banda de descarga (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Largura de banda de carga (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Configuración de canle física de LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Configuración da canle física:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Taxa de actualización da información para móbiles:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Toda a información de medición para móbiles:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Servizo de datos:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"O teu sinal de Bluetooth é feble. Proba a cambiar ao altofalante."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Notificación sobre a calidade da chamada"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Contas SIP obsoletas"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Non se poden enviar mensaxes desde este perfil"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"A política do teu traballo só che permite enviar mensaxes desde o perfil de traballo"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Non se poden enviar mensaxes desde aplicacións persoais"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"A túa organización só che permite enviar mensaxes desde aplicacións do traballo"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Cancelar"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Cambiar ao perfil de traballo"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Instalar unha aplicación de mensaxaría para o traballo"</string>
 </resources>
diff --git a/res/values-gu/strings.xml b/res/values-gu/strings.xml
index 0bc9c21..99606a0 100644
--- a/res/values-gu/strings.xml
+++ b/res/values-gu/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS હેઠળ CDMA કૉલ પ્રતીક્ષા બંધ છે"</string>
     <string name="updating_title" msgid="6130548922615719689">"કૉલ સેટિંગ"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"કૉલ સેટિંગને ફક્ત ઍડમિન વપરાશકર્તા દ્વારા જ બદલી શકાય છે."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"ફોન એકાઉન્ટના સેટિંગને ફક્ત ઍડમિન અથવા ઑફિસના વપરાશકર્તા જ બદલી શકે છે."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"સેટિંગ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"કૉલ સેટિંગની ભૂલ"</string>
     <string name="reading_settings" msgid="1605904432450871183">"સેટિંગ વાંચી રહ્યાં છે…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"કૉલ્સને હોલ્ડ કરી શકતાં નથી."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"કૉલ કરવા માટે વાયરલેસ નેટવર્કથી કનેક્ટ કરો."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"કૉલ કરવા માટે Wi-Fi કૉલિંગ સક્ષમ કરો."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"કૉલ કરવા માટે ઉપગ્રહ મોડ બંધ કરો."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"ઇમર્જન્સીની માહિતી"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"માલિક"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"માહિતી જોવા માટે ફરીથી ટૅપ કરો"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"એરપ્લેન મોડ ચાલુ છે"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"સિમ કાર્ડ ઍક્સેસ કરી શકતાં નથી"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"મોબાઇલ નેટવર્ક ઉપલબ્ધ નથી"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"ઉપગ્રહ મોડ ચાલુ છે"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"તમે જે ફોન નંબર ડાયલ કરવાનો પ્રયાસ કરી રહ્યાં છો, તેની સમસ્યા. ભૂલનો કોડ 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"કૉલ પૂર્ણ થઈ શક્યો નથી. ભૂલનો કોડ 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"કૉલ પૂર્ણ થઈ શક્યો નથી. ભૂલનો કોડ 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"ડિફૉલ્ટ ડેટા સિમનું SubId:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL બૅન્ડવિડ્થ (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL બૅન્ડવિડ્થ (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE ભૌતિક ચૅનલની ગોઠવણી:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"ચૅનલનું ભૌતિક કન્ફિગ્યુરેશન:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"સેલ માહિતી રિફ્રેશ થવાનો રેટ:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"તમામ સેલ માપ માહિતી:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"ડેટા સેવા:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"તમારા બ્લૂટૂથનું સિગ્નલ નબળું છે. સ્પીકરફોન પર સ્વિચ કરવાનો પ્રયાસ કરો."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"કૉલની ક્વૉલિટી માટે નોટિફિકેશન"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"ટાળવામાં આવેલા SIP એકાઉન્ટ"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"આ પ્રોફાઇલ પરથી મેસેજ મોકલી શકતા નથી"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"તમારી ઑફિસની પૉલિસી તમને માત્ર ઑફિસની પ્રોફાઇલ પરથી જ મેસેજ મોકલવાની મંજૂરી આપે છે"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"કોઈ વ્યક્તિગત ઍપ પરથી મેસેજ મોકલવાની પરવાનગી નથી"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"તમારી સંસ્થા તમને માત્ર ઑફિસ માટેની ઍપ પરથી મેસેજ મોકલવાની મંજૂરી આપે છે"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"રદ કરો"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"ઑફિસની પ્રોફાઇલ પર સ્વિચ કરો"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"ઑફિસ માટે કોઈ મેસેજિંગ ઍપ ઇન્સ્ટૉલ કરો"</string>
 </resources>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 6ba73b9..4f8e559 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"आईएमएस में CDMA कॉल वेटिंग की सुविधा बंद है"</string>
     <string name="updating_title" msgid="6130548922615719689">"कॉल सेटिंग"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"कॉल सेटिंग केवल व्यवस्थापक उपयोगकर्ता द्वारा ही बदली जा सकती हैं."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"फ़ोन की खाता सेटिंग, सिर्फ़ एडमिन या वर्क प्रोफ़ाइल के उपयोगकर्ता बदल सकते हैं."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"सेटिंग (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"कॉल सेटिंग गड़बड़ी"</string>
     <string name="reading_settings" msgid="1605904432450871183">"सेटिंग पढ़ रहा है..."</string>
@@ -313,7 +314,7 @@
     <string name="video_calling_settings_title" msgid="342829454913266078">"वाहक वीडियो कॉलिंग"</string>
     <string name="gsm_umts_options" msgid="4968446771519376808">"GSM/UMTS विकल्प"</string>
     <string name="cdma_options" msgid="3669592472226145665">"CDMA विकल्प"</string>
-    <string name="throttle_data_usage" msgid="1944145350660420711">"डेटा उपयोग"</string>
+    <string name="throttle_data_usage" msgid="1944145350660420711">"डेटा खर्च"</string>
     <string name="throttle_current_usage" msgid="7483859109708658613">"वर्तमान अवधि में उपयोग किया गया डेटा"</string>
     <string name="throttle_time_frame" msgid="1813452485948918791">"डेटा उपयोग अवधि"</string>
     <string name="throttle_rate" msgid="7641913901133634905">"डेटा दर नीति"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"कॉल होल्ड नहीं किए जा सकते."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"कॉल करने के लिए किसी वायरलेस नेटवर्क से कनेक्‍ट करें."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"कॉल करने के लिए वाई-फ़ाई कॉलिंग सक्षम करें."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"कॉल करने के लिए, सैटलाइट मोड को बंद करें."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"आपातकाल में दिखने वाली जानकारी"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"मालिक"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"जानकारी देखने के लिए फिर से टैप करें"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"हवाई जहाज़ मोड चालू है"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"SIM कार्ड ऐक्सेस नहीं किया जा सकता"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"मोबाइल नेटवर्क उपलब्ध नहीं है"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"सैटलाइट मोड चालू है"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"आप जिस फ़ोन नंबर को डायल करने की कोशिश कर रहे हैं, उसमें समस्या है. गड़बड़ी कोड 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"कॉल पूरा नहीं हो सका. गड़बड़ी कोड 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"कॉल पूरा नहीं हो सका. गड़बड़ी कोड 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"डिफ़ॉल्ट डेटा सिम का सब-आईडी:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"डीएल बैंडविड्थ (केबीपीएस):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"यूएल बैंडविड्थ (केबीपीएस):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"एलटीई की फ़िज़िकल चैनल कॉन्फ़िगरेशन:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"फ़िज़िकल चैनल के कॉन्फ़िगरेशन:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"सेल की जानकारी रीफ़्रेश होने की दर:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"सभी सेल के माप की पूरी जानकारी:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"डेटा सेवा:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"आपका ब्लूटूथ सिग्नल कमज़ोर है. स्पीकरफ़ोन की सुविधा का इस्तेमाल करें."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"कॉल की क्वालिटी की सूचना"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"ऐसे SIP खाते जिनका समर्थन रोक दिया गया है"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"इस प्रोफ़ाइल से मैसेज नहीं भेजा जा सकता"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"ऑफ़िस की नीति के तहत, वर्क प्रोफ़ाइल से ही मैसेज भेजा जा सकता है"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"निजी ऐप्लिकेशन से मैसेज नहीं भेजा जा सकता"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"आपका संगठन ने सिर्फ़ वर्क ऐप्लिकेशन से मैसेज भेजने की अनुमति दी है"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"रद्द करें"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"वर्क प्रोफ़ाइल पर स्विच करें"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"वर्क मैसेज ऐप्लिकेशन इंस्टॉल करें"</string>
 </resources>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index ffe6c69..790b6be 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA poziv na čekanju u okviru IMS-a isključen"</string>
     <string name="updating_title" msgid="6130548922615719689">"Postavke poziva"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Postavke poziva može mijenjati samo korisnik koji je administrator."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Postavke računa za telefon može mijenjati samo administrator ili poslovni korisnik."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Postavke (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Pogreška postavki poziva"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Čitanje postavki..."</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Pozivi se ne mogu stavljati na čekanje."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Povežite se s bežičnom mrežom da biste uputili poziv."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Omogućite pozivanje putem Wi-Fi veze da biste uspostavili poziv."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Onemogućite način satelita da biste uputili poziv."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Podaci za hitne slučajeve"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Vlasnik"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Dodirnite ponovno da biste vidjeli informacije"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Uključen je način rada u zrakoplovu"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Nije moguće pristupiti SIM kartici"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Mobilna mreža nije dostupna"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Način satelita je uključen"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Pojavio se problem s telefonskim brojem koji pokušavate birati. Kôd pogreške:"</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Nije moguće izvršiti poziv. Kôd pogreške: 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Nije moguće izvršiti poziv. Kôd pogreške: 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"SUBID zadanog SIM-a za podatkovni promet:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL propusnost (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL propusnost (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Konfiguracija LTE fizičkog kanala:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Konfiguracije fizičkog kanala:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Stopa osvježavanja informacija u ćeliji:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Sve informacije ćelija o mjerenju:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Podatkovna usluga:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Signal Bluetootha je slab. Pokušajte se prebaciti na zvučnik."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Obavijest o kvaliteti poziva"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Obustavljeni SIP računi"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Slanje poruke s ovog profila nije moguće"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Vaša poslovna pravila dopuštaju vam da šaljete poruke samo s poslovnog profila"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Ne možete slati poruke iz osobne aplikacije"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Vaša organizacija dopušta slanje poruka samo iz poslovnih aplikacija"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Odustani"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Prelazak na poslovni profil"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Instalirajte poslovnu aplikaciju za slanje poruka"</string>
 </resources>
diff --git a/res/values-hu/strings.xml b/res/values-hu/strings.xml
index a7c1b4d..54c112b 100644
--- a/res/values-hu/strings.xml
+++ b/res/values-hu/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS alatti CDMA-hívásvárakoztatás kikapcsolva"</string>
     <string name="updating_title" msgid="6130548922615719689">"Hívásbeállítások"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"A hívásbeállításokat csak a rendszergazda módosíthatja."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"A telefon fiókbeállításait csak az adminisztrátor vagy munkahelyi felhasználó módosíthatja."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Beállítások (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Hiba a hívásbeállításokban"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Beállítások olvasása..."</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"A hívások nem tarthatók."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Hívás indításához csatlakozzon egy vezeték nélküli hálózathoz."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Engedélyezze a Wi-Fi-hívást a hívásindításhoz."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Hívás indításához kapcsolja ki a műholdas módot."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Segélyhívási információk"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Tulajdonos"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Koppints újra az információk megtekintéséhez"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Repülős üzemmód bekapcsolva"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Nem lehet hozzáférni a SIM-kártyához."</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"A mobilhálózat nem érhető el"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Műholdas mód bekapcsolva"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Hiba áll fenn a hívott telefonszámmal. Hibakód: 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Nem sikerült felépíteni a hívást. Hibakód: 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Nem sikerült felépíteni a hívást. Hibakód: 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Alapértelmezett adatok SIM-alazonosítója:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Letöltési sávszélesség (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Feltöltési sávszélesség (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE fizikai csatorna konfigurációja:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Fizikai csatorna konfigurációi:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Cellainformáció frissítési gyakorisága:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Minden cellamérési információ:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Adatszolgáltatás:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Gyenge a Bluetooth-jel. Próbáljon kihangosítóra váltani."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Értesítés a hívás minőségéről"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Elavult SIP-fiókok"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Nem lehet üzenetet küldeni ebből a profilból"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"A munkahelyi házirend csak az üzenetek munkaprofilból való küldését engedélyezi"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"A személyes alkalmazásokból nem lehet üzenetet küldeni"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Szervezete csak a munkahelyi alkalmazásokból engedélyezi az üzenetküldést"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Mégse"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Váltás munkaprofilra"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Munkahelyi üzenetküldő alkalmazás telepítése"</string>
 </resources>
diff --git a/res/values-hy/strings.xml b/res/values-hy/strings.xml
index b7a570b..8e68a06 100644
--- a/res/values-hy/strings.xml
+++ b/res/values-hy/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA զանգի սպասումը IMS-ում անջատված է"</string>
     <string name="updating_title" msgid="6130548922615719689">"Զանգի կարգավորումներ"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Զանգի կարգավորումները կարող է փոխել միայն ադմինիստրատոր հանդիսացող օգտատերը:"</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Հեռախոսի հաշվի կարգավորումները կարող է փոխել միայն ադմինիստրատորը կամ աշխատանքային հաշվի օգտատերը։"</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Կարգավորումներ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Զանգի կարգավորումների սխալ"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Ընթերցման կարգավորումներ..."</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Հնարավոր չէ հետաձգել զանգերը:"</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Զանգ կատարելու համար միացեք անլար ցանցին:"</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Զանգ կատարելու համար միացրեք «Զանգեր Wi-Fi ցանցի միջոցով» գործառույթը:"</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Զանգ կատարելու համար անջատեք արբանյակի ռեժիմը։"</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Անհետաձգելի բուժօգնության տվյալներ"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Սեփականատեր"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Կրկին հպեք՝ տեղեկությունները դիտելու համար"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Ավիառեժիմը միացած է"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"SIM քարտի սխալ"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Բջջային ցանցն անհասանելի է"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Արբանյակի ռեժիմը միացված է"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Զանգվող բաժանորդի հեռախոսահամարի հետ խնդիր կա: Սխալի կոդը՝ 1:"</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Զանգն ընդհատվեց: Սխալի կոդը՝ 3:"</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Զանգն ընդհատվեց: Սխալի կոդը՝ 6:"</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"SIM քարտի հավելյալ ID կանխադրված բջջային ինտերնետի համար՝"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL թողունակությունը (կբ/վ)՝"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL թողունակությունը (կբ/վ)՝"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE ֆիզիկական ալիքի կարգավորում՝"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Ֆիզիկական ալիքի կազմաձևեր՝"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Բջիջի տվյալների թարմացման հաճախականությունը՝"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Բոլոր բջիջների չափման տվյալները՝"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Տվյալների ծառայություն՝"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Ձեր Bluetooth-ի ազդանշանը թույլ է։ Փորձեք միացնել բարձրախոսը։"</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Զանգի որակի մասին ծանուցում"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Հնացած SIP հաշիվներ"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Հնարավոր չէ հաղորդագրություն ուղարկել այս պրոֆիլից"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Ձեր աշխատանքային կանոնների համաձայն՝ դուք կարող եք հաղորդագրություն ուղարկել միայն աշխատանքային պրոֆիլից"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Հնարավոր չէ հաղորդագրություն գրել անձնական հավելվածից"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Ձեր կազմակերպությունը թույլատրում է ձեզ հաղորդագրություններն ուղարկել միայն աշխատանքային հավելվածներից"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Չեղարկել"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Անցնել աշխատանքային պրոֆիլ"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Տեղադրել հաղորդագրման աշխատանքային հավելված"</string>
 </resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 7f31a9c..9484f54 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Nada tunggu CDMA dalam IMS nonaktif"</string>
     <string name="updating_title" msgid="6130548922615719689">"Setelan panggilan"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Setelan panggilan telepon hanya dapat diubah oleh pengguna admin."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Setelan akun Telepon hanya dapat diubah admin atau pengguna untuk kerja."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Setelan (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Kesalahan setelan panggilan"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Membaca setelan…"</string>
@@ -186,9 +187,9 @@
     <string name="manual_mode_disallowed_summary" msgid="3970048592179890197">"Tidak tersedia saat terhubung ke %1$s"</string>
     <string name="network_select_title" msgid="4117305053881611988">"Jaringan"</string>
     <string name="register_automatically" msgid="3907580547590554834">"Pendaftaran otomatis..."</string>
-    <string name="preferred_network_mode_title" msgid="5253395265169539830">"Jenis jaringan preferensi"</string>
+    <string name="preferred_network_mode_title" msgid="5253395265169539830">"Preferensi jenis jaringan"</string>
     <string name="preferred_network_mode_summary" msgid="3787989000044330064">"Ubah mode pengoperasian jaringan"</string>
-    <string name="preferred_network_mode_dialogtitle" msgid="2781447433514459696">"Jenis jaringan preferensi"</string>
+    <string name="preferred_network_mode_dialogtitle" msgid="2781447433514459696">"Preferensi jenis jaringan"</string>
     <string name="forbidden_network" msgid="5081729819561333023">"(terlarang)"</string>
     <string name="choose_network_title" msgid="5335832663422653082">"Pilih jaringan"</string>
     <string name="network_disconnected" msgid="8844141106841160825">"Terputus"</string>
@@ -288,7 +289,7 @@
     <string name="roaming_enabled_message" msgid="9022249120750897">"Biaya roaming dapat berlaku. Ketuk untuk mengubah."</string>
     <string name="roaming_notification_title" msgid="3590348480688047320">"Koneksi data seluler terputus"</string>
     <string name="roaming_on_notification_title" msgid="7451473196411559173">"Roaming data aktif"</string>
-    <string name="roaming_warning" msgid="7855681468067171971">"Anda dapat dikenakan biaya yang cukup besar."</string>
+    <string name="roaming_warning" msgid="7855681468067171971">"Anda dapat dikenai biaya yang cukup besar."</string>
     <string name="roaming_check_price_warning" msgid="8212484083990570215">"Hubungi penyedia jaringan untuk mengetahui harganya."</string>
     <string name="roaming_alert_title" msgid="5689615818220960940">"Izinkan roaming data?"</string>
     <string name="limited_sim_function_notification_title" msgid="612715399099846281">"Fungsi SIM terbatas"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Tidak dapat menahan panggilan."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Sambungkan ke jaringan nirkabel untuk melakukan panggilan"</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Aktifkan panggilan Wi-Fi untuk melakukan panggilan."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Nonaktifkan mode satelit untuk melakukan panggilan."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Informasi darurat"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Pemilik"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Ketuk lagi untuk melihat info"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Mode pesawat aktif"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Tidak dapat mengakses kartu SIM"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Jaringan seluler tidak tersedia"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Mode satelit aktif"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Masalah dengan nomor telepon yang ingin Anda panggil. Kode error 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Tidak dapat menyelesaikan panggilan. Kode error 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Tidak dapat menyelesaikan panggilan. Kode error 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"SubId SIM data default:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Bandwidth DL (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Bandwidth UL (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Konfigurasi Saluran Fisik LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Konfigurasi Saluran Fisik:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Rasio Pembaruan Info Sel"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Semua Info Pengukuran Sel:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Layanan Data:"</string>
@@ -896,7 +899,7 @@
     <string name="radio_info_data_raw_registration_state_label" msgid="2895895513822604539">"Status Pendaftaran Mentah Data:"</string>
     <string name="radio_info_wlan_data_raw_registration_state_label" msgid="6396894835757296612">"Status Pendaftaran Mentah Data WLAN:"</string>
     <string name="phone_index_label" msgid="6222406512768964268">"Pilih indeks ponsel"</string>
-    <string name="radio_info_set_perferred_label" msgid="7408131389363136210">"Setel Jenis Jaringan yang Disukai:"</string>
+    <string name="radio_info_set_perferred_label" msgid="7408131389363136210">"Setel Preferensi Jenis Jaringan:"</string>
     <string name="radio_info_ping_hostname_v4" msgid="6951237885381284790">"Ping Hostname(www.google.com) IPv4:"</string>
     <string name="radio_info_ping_hostname_v6" msgid="2748637889486554603">"Ping Hostname(www.google.com) IPv6:"</string>
     <string name="radio_info_http_client_test" msgid="1329583721088428238">"Uji Klien HTTP:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Sinyal bluetooth Anda lemah. Coba beralih ke speaker ponsel."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Notifikasi Kualitas Panggilan"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Akun SIP yang tidak digunakan lagi"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Tidak dapat mengirim pesan dari profil ini"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Kebijakan kantor mengizinkan Anda mengirim pesan hanya dari profil kerja"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Tidak dapat mengirim pesan dari aplikasi pribadi"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Organisasi Anda hanya mengizinkan pengiriman pesan dari aplikasi kerja"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Batal"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Beralih ke profil kerja"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Instal aplikasi pesan untuk kerja"</string>
 </resources>
diff --git a/res/values-is/strings.xml b/res/values-is/strings.xml
index 07b362d..123519e 100644
--- a/res/values-is/strings.xml
+++ b/res/values-is/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Slökkt er á CDMA-símtölum í bið undir spjalli"</string>
     <string name="updating_title" msgid="6130548922615719689">"Símtalsstillingar"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Aðeins stjórnandinn má breyta símtalsstillingum."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Aðeins stjórnandi eða vinnunotandi getur breytt reikningsstillingum símans."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Stillingar (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Villa í símtalsstillingum"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Les stillingar…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Getur ekki sett símtöl í bið."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Tengstu þráðlausu neti til að hringja."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Virkjaðu Wi-Fi símtöl til að hringja."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Slökktu á gervihnattarstillingu til að hringja símtal."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Neyðarupplýsingar"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Eigandi"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Ýttu aftur til að skoða upplýsingar"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Kveikt er á flugstillingu"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Ekki fæst aðgangur að SIM-korti"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Farsímakerfi ekki tiltækt"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Kveikt er á gervihnattarstillingu"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Vandamál í síma sem reynt er að hringja í. Villukóði 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Ekki tókst að hringja. Villukóði 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Ekki tókst að hringja. Villukóði 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Undirauðkenni sjálfgefins SIM-korts fyrir gögn:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Niðurhalsbandvídd (kb/sek.):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Upphleðslubandvídd (kb/sek.):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE-rásarstilling:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Áþreifanleg stilling stöðva:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Endurnýjunartíðni loftnetaupplýsinga:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Allar mælingarupplýsingar loftneta:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Gagnaþjónusta:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Bluetooth-tengingin er léleg. Prófaðu að nota hátalara í staðinn."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Tilkynning um símtalsgæði"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Úreldir SIP-reikningar"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Ekki er hægt að senda skilaboð úr þessu sniði"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Vinnureglur gera þér aðeins kleift að senda skilaboð úr vinnusniði"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Ekki er hægt að senda skilaboð úr forriti til einkanota"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Fyrirtækið heimilar þér aðeins að senda skilaboð úr vinnuforritum"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Hætta við"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Skipta yfir í vinnusnið"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Setja upp skilaboðaforrit fyrir vinnu"</string>
 </resources>
diff --git a/res/values-it/strings.xml b/res/values-it/strings.xml
index edc2cc3..2b8e870 100644
--- a/res/values-it/strings.xml
+++ b/res/values-it/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Avviso di chiamata CDMA con IMS disattivato"</string>
     <string name="updating_title" msgid="6130548922615719689">"Impostazioni chiamate"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Le impostazioni delle chiamate possono essere modificate solo dall\'utente amministratore."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Le impostazioni dell\'account del telefono possono essere modificate solo dall\'amministratore o dall\'utente di lavoro."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Impostazioni (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Errore durante aggiornam. impostaz. chiamate"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Lettura impostazioni..."</string>
@@ -556,7 +557,8 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Impossibile mettere in attesa le chiamate."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Connettiti a una rete wireless per effettuare una chiamata."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Attiva le chiamate tramite Wi-Fi per effettuare una chiamata."</string>
-    <string name="emergency_information_hint" msgid="9208897544917793012">"Informazioni per le emergenze"</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Disattiva la modalità satellite per effettuare una chiamata."</string>
+    <string name="emergency_information_hint" msgid="9208897544917793012">"Informazioni d\'emergenza"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Proprietario"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Tocca di nuovo per visualizzare le informazioni"</string>
     <string name="emergency_enable_radio_dialog_title" msgid="2667568200755388829">"Chiamata di emergenza"</string>
@@ -578,7 +580,7 @@
     <string name="onscreenHoldText" msgid="4025348842151665191">"In attesa"</string>
     <string name="onscreenEndCallText" msgid="6138725377654842757">"Chiudi"</string>
     <string name="onscreenShowDialpadText" msgid="658465753816164079">"Tastierino"</string>
-    <string name="onscreenMuteText" msgid="5470306116733843621">"No audio"</string>
+    <string name="onscreenMuteText" msgid="5470306116733843621">"Silenzia"</string>
     <string name="onscreenAddCallText" msgid="9075675082903611677">"Aggiungi chiamata"</string>
     <string name="onscreenMergeCallsText" msgid="3692389519611225407">"Unisci"</string>
     <string name="onscreenSwapCallsText" msgid="2682542150803377991">"Scambia"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Modalità aereo attiva"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Impossibile accedere alla scheda SIM"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Rete mobile non disponibile"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Modalità satellite attiva"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Problema riguardante il numero telefonico che stai tentando di comporre. Codice di errore: 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Impossibile completare la chiamata. Codice di errore: 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Impossibile completare la chiamata. Codice di errore: 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"ID secondario della SIM dati predefinita:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Larghezza di banda DL (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Larghezza di banda UL (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Configurazione canale fisico LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Configurazioni dei canali fisici:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Frequenza di aggiornamento delle informazioni sulle celle:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Informazioni sulla misurazione di tutte le celle:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Servizio dati:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Il segnale del Bluetooth è debole. Prova a passare al vivavoce."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Notifica sulla qualità della chiamata"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Account SIP deprecati"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Impossibile inviare messaggi da questo profilo"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Le norme di lavoro ti consentono di inviare messaggi solo dal profilo di lavoro"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Impossibile inviare messaggi da un\'app personale"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"La tua organizzazione consente di inviare messaggi solo dalle app di lavoro"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Annulla"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Passa al profilo di lavoro"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Installa un\'app di messaggistica di lavoro"</string>
 </resources>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index cb16eb2..a51c72d 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"‏השיחה הממתינה ברשת CDMA ב-IMS מושבתת"</string>
     <string name="updating_title" msgid="6130548922615719689">"הגדרות שיחה"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"רק מנהל המערכת יכול לשנות הגדרות שיחה."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"אפשר לשנות את הגדרות החשבון בטלפון רק מהחשבון של האדמין או של העבודה."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"הגדרות (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"שגיאה בהגדרות שיחה"</string>
     <string name="reading_settings" msgid="1605904432450871183">"קריאת ההגדרות מתבצעת…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"לא ניתן להחזיק שיחות."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"יש להתחבר לרשת אלחוטית כדי לבצע שיחה."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"‏יש להפעיל את \'שיחות Wi-Fi\' כדי להתקשר."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"כדי להתקשר, צריך להפסיק את השימוש במצב לוויין."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"מידע למקרה חירום"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"בעלים"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"אפשר להקיש שוב כדי להציג את הפרטים"</string>
@@ -596,7 +598,8 @@
     <string name="hac_mode_summary" msgid="7774989500136009881">"הפעלת תאימות למכשיר שמיעה"</string>
     <string name="rtt_mode_title" msgid="3075948111362818043">"‏שיחת RTT (טקסט בזמן אמת)"</string>
     <string name="rtt_mode_summary" msgid="8631541375609989562">"אפשר לשלוח הודעות טקסט בזמן שיחה"</string>
-    <string name="rtt_mode_more_information" msgid="587500128658756318">"‏RTT (טקסט בזמן אמת) היא תכונת נגישות שעוזרת לחרשים, לקויי שמיעה, לקויי דיבור או אנשים שלא יכולים להסתפק רק בשיחות קוליות.&lt;br&gt; &lt;a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>&gt;למידע נוסף&lt;/a&gt;‏\n      &lt;br&gt;&lt;br&gt; - שיחות RTT מתומללות ונשמרות כהודעות\n &lt;br&gt; - אי אפשר להשתמש ב-RTT לשיחות וידאו"</string>
+    <!-- syntax error in translation for rtt_mode_more_information (587500128658756318) org.xmlpull.v1.XmlPullParserException: expected: /br read: string (position:END_TAG </string>@1:430 in     <string name="rtt_mode_more_information" msgid="587500128658756318">"‏RTT (טקסט בזמן אמת) היא תכונת נגישות שעוזרת לחרשים, לקויי שמיעה, לקויי דיבור או אנשים שלא יכולים להסתפק רק בשיחות קוליות.&lt;br&gt; &lt;a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>&gt;למידע נוסף&lt;/a&gt;\n &lt;br&gt;&lt;br&gt; - שיחות RTT מתומללות ונשמרות כהודעות\n <br> - אי אפשר להשתמש ב-RTT לשיחות וידאו"</string>
+)  -->
     <string name="no_rtt_when_roaming" msgid="5268008247378355389">"‏הערה: אי אפשר להשתמש ב-RTT בזמן נדידה"</string>
   <string-array name="tty_mode_entries">
     <item msgid="3238070884803849303">"‏TTY כבוי"</item>
@@ -713,6 +716,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"מצב טיסה מופעל"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"‏אין גישה לכרטיס ה-SIM"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"הרשת הסלולרית אינה זמינה"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"מצב לוויין פועל"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"יש בעיה במספר הטלפון שניסית להתקשר אליו. קוד שגיאה: 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"אי אפשר היה להשלים את השיחה. קוד שגיאה: 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"אי אפשר היה להשלים את השיחה. קוד שגיאה: 6."</string>
@@ -873,7 +877,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"‏תת-מזהה של כרטיס ה-SIM עם חבילת גלישה המוגדר כברירת מחדל:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"‏רוחב פס DL (ב-kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"‏רוחב פס UL (ב-kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"‏תצורת ערוץ פיזי של LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"ההגדרות האישיות של הערוץ הפיזי"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"קצב רענון של מידע סלולרי:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"כל המידע של מדידה סלולרית:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"שירות נתונים:"</string>
@@ -923,8 +927,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"‏הקליטה של ה-Bluetooth חלשה. כדאי לעבור לדיבורית."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"התראה על איכות השיחה"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"‏חשבונות SIP שהוצאו משימוש"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"אי אפשר לשלוח הודעות מהפרופיל הזה"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"המדיניות של מקום העבודה מאפשרת לך לשלוח הודעות רק מפרופיל העבודה"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"אי אפשר לשלוח הודעות מאפליקציות לשימוש אישי"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"בארגון שלך מאפשרים לשלוח הודעות רק מאפליקציות לעבודה"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"ביטול"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"החלפה לפרופיל עבודה"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"התקנה של אפליקציית הודעות לעבודה"</string>
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 647a54d..4127de8 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS での CDMA 通話中着信が OFF になっています"</string>
     <string name="updating_title" msgid="6130548922615719689">"通話設定"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"通話設定は管理者ユーザーのみが変更できます。"</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"モバイル デバイスのアカウント設定を変更できるのは、管理者または従業員ユーザーのみに限られています。"</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"設定(<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"通話設定エラー"</string>
     <string name="reading_settings" msgid="1605904432450871183">"設定を読み取り中..."</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"通話を保留にできません。"</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"電話をかけるには無線ネットワークに接続してください。"</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"電話をかけるには Wi-Fi 通話を有効にしてください。"</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"電話をかけるには、衛星モードを無効にしてください。"</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"緊急時情報"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"所有者"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"もう一度タップすると情報を確認できます"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"機内モードが ON になっています"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"SIM カードにアクセスできません"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"モバイル ネットワークを利用できない"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"衛星モードがオンになっています"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"発信先の電話番号に問題があります。エラーコード 1。"</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"通話が切断されました。エラーコード 3。"</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"通話が切断されました。エラーコード 6。"</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"デフォルトのデータ SIM の SUBID:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL 帯域幅(kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL 帯域幅(kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE の物理チャネル設定:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"物理チャネルの構成:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"セル情報の更新間隔:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"すべてのセルの測定情報:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"データサービス:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Bluetooth の信号強度が十分ではありません。スピーカーフォンに切り替えてみてください。"</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"通話品質に関するお知らせ"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"サポートが終了した SIP アカウント"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"このプロファイルからはメッセージを送信できません"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"仕事用ポリシーでは、メッセージの送信を仕事用プロファイルからのみに制限できます"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"個人用アプリからのメッセージ送信はできません"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"組織では、仕事用アプリからのメッセージ送信のみ許可されています"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"キャンセル"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"仕事用プロファイルに切り替える"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"仕事用メッセージ アプリをインストール"</string>
 </resources>
diff --git a/res/values-ka/strings.xml b/res/values-ka/strings.xml
index 38aff47..f4ca82e 100644
--- a/res/values-ka/strings.xml
+++ b/res/values-ka/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA ზარის ლოდინი IMS-ში გამორთულია"</string>
     <string name="updating_title" msgid="6130548922615719689">"ზარის პარამეტრები"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"ზარის პარამეტრების შეცვლა მხოლოდ მომხმარებელ-ადმინისტრატორს შეუძლია."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"ტელ. ანგარიშის პარამეტრების შეცვლა შეუძლია მხოლოდ ადმინს/სამსახურის მომხმარებელს."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"პარამეტრები (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"ზარის პარამეტრების შეცდომა"</string>
     <string name="reading_settings" msgid="1605904432450871183">"პარამეტრების წაკითხვა…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"ზარების დაყოვნება ვერ ხერხდება."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"ზარის განსახორციელებლად, დაუკავშირდით უსადენო ქსელს."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"ზარის განსახორციელებლად ჩართეთ Wi-Fi დარეკვა."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"დასარეკად გამორთეთ სატელიტის რეჟიმი."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"საგანგებო ინფორმაცია"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"მფლობელი"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"ინფორმაციის სანახავად შეეხეთ ხელახლა"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"თვითმფრინავის რეჟიმი ჩართულია"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"SIM ბარათზე წვდომა ვერ ხერხდება"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"მობილური ქსელი მიუწვდომელია"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"სატელიტის რეჟიმი ჩართულია"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"პრობლემა აქვს ტელეფონის ნომერს, რომლის აკრეფასაც ცდილობთ. შეცდომის კოდია 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"ზარი ვერ შესრულდა. შეცდომის კოდია 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"ზარი ვერ შესრულდა. შეცდომის კოდია 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"მონაცემების ნაგულისხმევი SIM-ის subId:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL-არხის გამტარუნარიანობა (კბიტ/წმ):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL-არხის გამტარუნარიანობა (კბიტ/წმ):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE ფიზიკური არხის კონფიგურაცია:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"არხის ფიზიკური კონფიგურაცია:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"ფიჭური ინფორმაციის განახლების სიხშირე:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"სრული ინფორმაცია ფიჭური ქსელის შესახებ:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"მობილური ინტერნეტის სერვისი:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"თქვენი Bluetooth სიგნალი სუსტია. სცადეთ სპიკერფონზე გადართვა."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"შეტყობინება ზარის ხარისხის შესახებ"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"მოძველებული SIP ანგარიშები"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"ამ პროფილიდან შეტყობინებების გაგზავნა შეუძლებელია"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"თქვენი სამსახურის წესები საშუალებას გაძლევთ, შეტყობინებები გაგზავნოთ მხოლოდ სამუშაო პროფილიდან"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"პირადი აპიდან შეტყობინების გაგზავნა შეუძლებელია"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"თქვენი ორგანიზაცია ნებას გრთავთ, მხოლოდ სამსახურის აპიდან გაგზავნოთ შეტყობინებები"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"გაუქმება"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"სამსახურის პროფილზე გადართვა"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"დააინსტალირეთ აპი ბიზნეს-შეტყობინებების გასაცვლელად"</string>
 </resources>
diff --git a/res/values-kk/strings.xml b/res/values-kk/strings.xml
index 55026e5..72e9c7f 100644
--- a/res/values-kk/strings.xml
+++ b/res/values-kk/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS бойынша басқа CDMA желісіндегі қоңырауды ұстап тұру мүмкіндігі өшірулі."</string>
     <string name="updating_title" msgid="6130548922615719689">"Қоңырау параметрлері"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Қоңырау параметрлерін тек әкімші пайдаланушы өзгерте алады."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Телефонның аккаунт параметрлерін тек әкімші немесе жұмыстағы пайдаланушы өзгерте алады."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Параметрлер (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Қоңырау параметрлерінің қателігі"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Параметрлерді оқуда…"</string>
@@ -499,7 +500,7 @@
     <string name="disable_pin_ok" msgid="888505244389647754">"PIN тазаланды"</string>
     <string name="pin_failed" msgid="4527347792881939652">"PIN дұрыс емес"</string>
     <string name="pin_changed" msgid="7291153750090452808">"PIN коды жаңартылды"</string>
-    <string name="puk_requested" msgid="2061337960609806851">"Құпия сөз дұрыс емес. PIN қазір бөгелген. PUK коды сұралды."</string>
+    <string name="puk_requested" msgid="2061337960609806851">"Құпия сөз дұрыс емес. PIN қазір блокталған. PUK коды сұралды."</string>
     <string name="enter_pin2_text" msgid="7266379426804295979">"PIN2"</string>
     <string name="oldPin2Label" msgid="4648543187859997203">"Ескі PIN2"</string>
     <string name="newPin2Label" msgid="1840905981784453939">"Жаңа PIN2 коды"</string>
@@ -513,7 +514,7 @@
     <string name="label_puk2_code" msgid="2852217004288085562">"PUK2 кодын енгізіңіз"</string>
     <string name="fdn_enable_puk2_requested" msgid="5793652792131588041">"Құпия сөз дұрыс емес. PIN2 енді бөгелді. Әрекетті қайталау үшін PIN 2 кодын өзгертіңіз."</string>
     <string name="puk2_requested" msgid="6992374450720307514">"Құпия сөз дұрыс емес. SIM қазір бекітілген. PUK2 кодын енгізіңіз."</string>
-    <string name="puk2_blocked" msgid="3131139031779319911">"PUK2 уақытша бөгелген."</string>
+    <string name="puk2_blocked" msgid="3131139031779319911">"PUK2 уақытша блокталған."</string>
     <string name="pin2_attempts" msgid="5625178102026453023">\n"<xliff:g id="NUMBER">%d</xliff:g> әрекет қалды."</string>
     <string name="puk2_locked" msgid="6497760825455461057">"PUK2 құлыптаулы. Құлпын ашу үшін қызмет көрсетушіге хабарласыңыз."</string>
     <string name="pin2_unblocked" msgid="4481107908727789303">"PIN2 енді бөгелмеген"</string>
@@ -556,10 +557,11 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Қоңырауларды ұстау мүмкін емес."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Қоңырау шалу үшін сымсыз желіге қосылыңыз."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Қоңырау шалу үшін, Wi-Fi желісін қосыңыз."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Қоңырау шалу үшін жер серігі режимін өшіріңіз."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Төтенше жағдайға арналған ақпарат"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Иесі"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Ақпаратты көру үшін қайта түртіңіз"</string>
-    <string name="emergency_enable_radio_dialog_title" msgid="2667568200755388829">"Төтенше қоңырау"</string>
+    <string name="emergency_enable_radio_dialog_title" msgid="2667568200755388829">"Құтқару қызметіне қоңырау шалу"</string>
     <string name="single_emergency_number_title" msgid="8413371079579067196">"Төтенше жағдай қызметі"</string>
     <string name="numerous_emergency_numbers_title" msgid="8972398932506755510">"Төтенше жағдай қызметтері"</string>
     <string name="emergency_call_shortcut_hint" msgid="1290485125107779500">"<xliff:g id="EMERGENCY_NUMBER">%s</xliff:g> нөміріне қоңырау шалу үшін, түймені қайта түртіңіз"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Ұшақ режимі қосулы"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"SIM картасы ашылмай тұр"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Мобильдік желі қолжетімді емес"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Жер серігі режимі қосулы"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Терілген нөмірде ақаулық бар. Қате коды: 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Қоңырауды аяқтау мүмкін болмады. Қате коды: 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Қоңырауды аяқтау мүмкін болмады. Қате коды: 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Әдепкі деректер SIM картасының қосалқы идентификаторы:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL өткізу мүмкіндігі (кбит/сек):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL өткізу мүмкіндігі (кбит/сек):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE физикалық арна конфигурациясы:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Физикалық арна конфигурациялары:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Ұялы желі туралы ақпаратты жаңарту жиілігі:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Барлық ұялы желі өлшемдері туралы ақпарат:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Деректер қызметі:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Bluetooth сигналы нашар. Спикерфонға ауысып көріңіз."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Қоңырау сапасы туралы хабарландыру"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Қолданыстан шыққан SIP аккаунттары"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Бұл профильден хабар жіберу мүмкін емес"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Жұмыс саясатыңызға сәйкес тек жұмыс профилінен хабар жіберуге болады."</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Жеке қолданбадан хабар жіберу мүмкін емес"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Ұйымыңыз хабарды тек жұмыс қолданбаларынан жіберуге рұқсат етеді."</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Бас тарту"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Жұмыс профиліне ауысу"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Жұмысқа арналған хабар алмасу қолданбасын орнату"</string>
 </resources>
diff --git a/res/values-km/strings.xml b/res/values-km/strings.xml
index ee9bb00..d42deb0 100644
--- a/res/values-km/strings.xml
+++ b/res/values-km/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"ការរង់ចាំ​ការហៅ ទូរសព្ទ CDMA ក្រោម IMS ត្រូវ​បាន​បិទ"</string>
     <string name="updating_title" msgid="6130548922615719689">"កំណត់​ការ​ហៅ"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"ការកំណត់ការហៅអាចផ្លាស់ប្តូរបានដោយអ្នកប្រើដែលមានសិទ្ធិគ្រប់គ្រងតែប៉ុណ្ណោះ។"</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"មានតែ​អ្នកគ្រប់គ្រង ឬអ្នកប្រើប្រាស់​ពាក់ព័ន្ធនឹងការងារ​ប៉ុណ្ណោះ ទើបអាចផ្លាស់ប្ដូរ​ការកំណត់​គណនី​ទូរសព្ទបាន។"</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"ការកំណត់ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"បញ្ហា​ការ​កំណត់​ការ​ហៅ"</string>
     <string name="reading_settings" msgid="1605904432450871183">"កំពុង​អាន​ការ​កំណត់…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"មិនអាចរង់ចាំការហៅទេ"</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"ភ្ជាប់ទៅបណ្តាញឥតខ្សែដើម្បីធ្វើការហៅ។"</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"បើក​ការ​ហៅ​តាម​​វ៉ាយហ្វាយ​ដើម្បី​ធ្វើ​ការ​ហៅ។"</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"បិទ​មុខងារ​ផ្កាយរណប ដើម្បី​ហៅ​ទូរសព្ទ។"</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"ព័ត៌មានសង្គ្រោះបន្ទាន់"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"ម្ចាស់"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"ចុច​ម្ដង​ទៀត ដើម្បីមើល​ព័ត៌មាន"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"មុខងារ​ពេល​ជិះ​យន្តហោះ​បើក"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"មិន​អាច​ចូល​ប្រើប្រាស់​ស៊ីម​កាត​បាន​ទេ"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"មិនមានបណ្ដាញ​ទូរសព្ទចល័ត​"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"មុខងារ​ផ្កាយរណប​ត្រូវបានបើក"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"មាន​បញ្ហា​ជាមួយ​លេខ​ទូរសព្ទ​ដែល​អ្នក​កំពុង​ព្យាយាម​ចុច​ហៅ។ លេខ​កូដ​មាន​បញ្ហា​គឺ 1។"</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"មិន​អាចហៅទូរសព្ទបានទេ។ លេខ​កូដ​មាន​បញ្ហា​គឺ 3។"</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"មិន​អាចហៅទូរសព្ទបានទេ។ លេខ​កូដ​មាន​បញ្ហា​គឺ 6។"</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"លេខសម្គាល់រង​របស់​ស៊ីម​ទិន្នន័យ​លំនាំដើម៖"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"កម្រិត​បញ្ជូន DL (kbps) ៖"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"កម្រិត​បញ្ជូន UL (kbps) ៖"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"ការកំណត់​រចនាសម្ព័ន្ធបណ្ដាញរូបវ័ន្ត LTE ៖"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"ការកំណត់​រចនាសម្ព័ន្ធ​បណ្ដាញ​រូបវន្ត៖"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"អត្រា​ផ្ទុក​ឡើង​វិញ​នៃ​ព័ត៌មាន​ទូរសព្ទ​ចល័ត៖"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"ព័ត៌មាន​វាស់​ទូរសព្ទ​ចល័ត​ទាំងអស់៖"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"សេវាកម្មទិន្នន័យ៖"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"រលកសញ្ញាប៊្លូធូសរបស់អ្នក​មានកម្រិតខ្សោយ។ សូមសាកល្បងប្ដូរ​ទៅឧបករណ៍បំពងសំឡេងទូរសព្ទ។"</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"ការជូនដំណឹង​អំពីគុណភាព​ហៅទូរសព្ទ"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"គណនី SIP ដែលបានបញ្ឈប់"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"មិនអាច​ផ្ញើសារ​ពី​កម្រងព័ត៌មាន​នេះ​បានទេ"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"គោលការណ៍ការងារ​របស់អ្នក​អនុញ្ញាត​ឱ្យ​អ្នក​ផ្ញើសារ​បានតែពី​កម្រងព័ត៌មាន​ការងារ​ប៉ុណ្ណោះ"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"មិនអាច​ផ្ញើសារ​ពីកម្មវិធី​ផ្ទាល់ខ្លួន​បានទេ"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"ស្ថាប័ន​របស់អ្នក​អនុញ្ញាត​ឱ្យអ្នក​ផ្ញើសារ​ពី​កម្មវិធី​ការងារតែប៉ុណ្ណោះ"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"បោះបង់"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"ប្ដូរ​ទៅ​កម្រង​ព័ត៌មាន​ការងារ"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"ដំឡើង​កម្មវិធី messages សម្រាប់​ការងារ"</string>
 </resources>
diff --git a/res/values-kn/strings.xml b/res/values-kn/strings.xml
index fc0e952..fe39ede 100644
--- a/res/values-kn/strings.xml
+++ b/res/values-kn/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS ಆಫ್ ಅಡಿಯಲ್ಲಿ CDMA ಕರೆ ನಿರೀಕ್ಷೆ"</string>
     <string name="updating_title" msgid="6130548922615719689">"ಕರೆ ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"ಕರೆ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಕೇವಲ ನಿರ್ವಾಹಕ ಬಳಕೆದಾರರು ಮಾತ್ರ ಬದಲಾಯಿಸಬಹುದು."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"ಫೋನ್ ಖಾತೆಯ ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ನಿರ್ವಾಹಕರು ಅಥವಾ ಕೆಲಸದ ಬಳಕೆದಾರರಿಂದ ಮಾತ್ರ ಬದಲಾಯಿಸಬಹುದಾಗಿದೆ."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"ಕರೆ ಸೆಟ್ಟಿಂಗ್‌ಗಳ ದೋಷ"</string>
     <string name="reading_settings" msgid="1605904432450871183">"ಸೆಟ್ಟಿಂಗ್‌ಗಳನ್ನು ಓದಲಾಗುತ್ತಿದೆ…"</string>
@@ -422,9 +423,9 @@
     <item msgid="462340042928284921">"ಮುಖಪುಟ ಮಾತ್ರ"</item>
     <item msgid="6058010046783562674">"ಸ್ವಯಂಚಾಲಿತ"</item>
   </string-array>
-    <string name="cdma_subscription_title" msgid="3449527179325589434">"CDMA ಚಂದಾದಾರಿಕೆ"</string>
+    <string name="cdma_subscription_title" msgid="3449527179325589434">"CDMA ಸಬ್‌ಸ್ಕ್ರಿಪ್ಶನ್"</string>
     <string name="cdma_subscription_summary" msgid="5681152534466169001">"RUIM/ಸಿಮ್‌ ಮತ್ತು NV ರ ನಡುವೆ ಬದಲಾಯಿಸಿ"</string>
-    <string name="cdma_subscription_dialogtitle" msgid="8872086335839723980">"ಚಂದಾದಾರಿಕೆ"</string>
+    <string name="cdma_subscription_dialogtitle" msgid="8872086335839723980">"ಸಬ್‌ಸ್ಕ್ರಿಪ್ಶನ್"</string>
   <string-array name="cdma_subscription_choices">
     <item msgid="7989486897370727698">"RUIM/ಸಿಮ್‌"</item>
     <item msgid="5445342771222849381">"NV"</item>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"ಕರೆಗಳನ್ನು ಹೋಲ್ಡ್ ಮಾಡಲಾಗುವುದಿಲ್ಲ."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"ಕರೆ ಮಾಡಲು ವೈರ್‌ಲೆಸ್ ನೆಟ್‌ವರ್ಕ್‌ಗೆ ಸಂಪರ್ಕಿಸಿ."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"ಕರೆ ಮಾಡಲು ವೈ-ಫೈ ಕರೆ ಮಾಡುವಿಕೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಿ"</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"ಕರೆ ಮಾಡಲು ಸ್ಯಾಟಲೈಟ್ ಮೋಡ್ ಅನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"ತುರ್ತು ಮಾಹಿತಿ"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"ಮಾಲೀಕರು"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"ಮಾಹಿತಿಯನ್ನು ವೀಕ್ಷಿಸಲು ಮತ್ತೆ ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
@@ -616,7 +618,7 @@
     <string name="ota_touch_activate" msgid="838764494319694754">"ನಿಮ್ಮ ಫೋನ್‌ ಸೇವೆಯನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ವಿಶೇಷ ಕರೆಯೊಂದನ್ನು ಮಾಡಬೇಕಾಗುತ್ತದೆ. \n\n “ಸಕ್ರಿಯಗೊಳಿಸು” ಒತ್ತಿದ ಬಳಿಕ ನಿಮ್ಮ ಫೋನ್ ಸಕ್ರಿಯಗೊಳಿಸಲು ನೀಡಲಾಗುವ ಸೂಚನೆಗಳನ್ನು ಕೇಳಿ."</string>
     <string name="ota_hfa_activation_title" msgid="3300556778212729671">"ಸಕ್ರಿಯಗೊಳಿಸಲಾಗುತ್ತಿದೆ..."</string>
     <string name="ota_hfa_activation_dialog_message" msgid="7921718445773342996">"ನಿಮ್ಮ ಮೊಬೈಲ್‌‌ ಡೇಟಾ ಸೇವೆಯನ್ನು ಫೋನ್‌ ಸಕ್ರಿಯಗೊಳಿಸುತ್ತಿದೆ.\n\nಇದು ಸುಮಾರು 5 ನಿಮಿಷಗಳ ಕಾಲಾವಕಾಶ ತೆಗೆದುಕೊಳ್ಳಬಹುದು."</string>
-    <string name="ota_skip_activation_dialog_title" msgid="7666611236789203797">"ಸಕ್ರಿಯಗೊಳಿಸುವುದನ್ನು ಸ್ಕಿಪ್‌ ಮಾಡುವುದೇ?"</string>
+    <string name="ota_skip_activation_dialog_title" msgid="7666611236789203797">"ಸಕ್ರಿಯಗೊಳಿಸುವುದನ್ನು ಸ್ಕಿಪ್‌ ಮಾಡಬೇಕೆ?"</string>
     <string name="ota_skip_activation_dialog_message" msgid="6691722887019708713">"ನೀವು ಸಕ್ರಿಯಗೊಳಿಸುವುದನ್ನು ಸ್ಕಿಪ್‌ ಮಾಡಿದರೆ, ನೀವು ಕರೆಗಳನ್ನು ಮಾಡಲು ಅಥವಾ ಮೊಬೈಲ್‌ ಡೇಟಾ ನೆಟ್‌ವರ್ಕ್‌ಗಳಿಗೆ ಸಂಪರ್ಕಗೊಳಿಸಲು ಸಾಧ್ಯವಾಗುವುದಿಲ್ಲ (ಆದರೂ ನೀವು ವೈ-ಫೈ ನೆಟ್‌ವರ್ಕ್‌ಗಳಿಗೆ ಸಂಪರ್ಕಗೊಳಿಸಬಹುದು). ನಿಮ್ಮ ಫೋನ್ ಅನ್ನು ನೀವು ಸಕ್ರಿಯಗೊಳಿಸುವವರೆಗೂ, ನೀವು ಅದನ್ನು ಪ್ರತಿಬಾರಿ ಆನ್‌ ಮಾಡಿದಾಗಲೆಲ್ಲಾ ಅದನ್ನು ಸಕ್ರಿಯಗೊಳಿಸಲು ನಿಮಗೆ ತಿಳಿಸಲಾಗುತ್ತದೆ."</string>
     <string name="ota_skip_activation_dialog_skip_label" msgid="5908029466817825633">"ಸ್ಕಿಪ್"</string>
     <string name="ota_activate" msgid="7939695753665438357">"ಸಕ್ರಿಯಗೊಳಿಸಿ"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"ಏರ್‌ಪ್ಲೇನ್ ಮೋಡ್ ಆನ್ ಆಗಿದೆ"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"ಸಿಮ್ ಕಾರ್ಡ್ ಪ್ರವೇಶಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"ಮೊಬೈಲ್ ನೆಟ್‌ವರ್ಕ್ ಲಭ್ಯವಿಲ್ಲ"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"ಸ್ಯಾಟಲೈಟ್ ಮೋಡ್ ಆನ್ ಆಗಿದೆ"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"ನೀವು ಡಯಲ್‌ ಮಾಡಲು ಪ್ರಯತ್ನಿಸುತ್ತಿರುವ ಫೋನ್‌ ಸಂಖ್ಯೆಯು ತಪ್ಪಾಗಿದೆ. ದೋಷ ಕೋಡ್‌ 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"ಕರೆಯನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ದೋಷ ಕೋಡ್ 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"ಕರೆಯನ್ನು ಪೂರ್ಣಗೊಳಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ. ದೋಷ ಕೋಡ್ 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"ಡೀಫಾಲ್ಟ್ ಡೇಟಾ ಸಿಮ್‌ನ ವಿಷಯಐಡಿ:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL ಬ್ಯಾಂಡ್‌ವಿಡ್ತ್ (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL ಬ್ಯಾಂಡ್‌ವಿಡ್ತ್ (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE ಭೌತಿಕ ಚಾನೆಲ್ ಕಾನ್ಫಿಗರೇಶನ್:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"ಭೌತಿಕ ಚಾನಲ್ ಕಾನ್ಫಿಗರೇಶನ್‌ಗಳು:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"ಸೆಲ್ ಮಾಹಿತಿ ರಿಫ್ರೆಶ್ ದರ:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"ಎಲ್ಲಾ ಸೆಲ್ ಮಾಪನ ಮಾಹಿತಿ:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"ಡೇಟಾ ಸೇವೆ:"</string>
@@ -921,10 +924,11 @@
     <string name="carrier_provisioning" msgid="2668065041869578376">"ವಾಹಕ ಪೂರೈಕೆಯ ಮಾಹಿತಿ"</string>
     <string name="trigger_carrier_provisioning" msgid="1301829588620638234">"ಟ್ರಿಗರ್‌ ವಾಹಕ ಪೂರೈಕೆ"</string>
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"ನಿಮ್ಮ ಬ್ಲೂಟೂತ್ ಸಿಗ್ನಲ್ ದುರ್ಬಲವಾಗಿದೆ. ಸ್ಪೀಕರ್‌ಫೋನ್‌ಗೆ ಬದಲಾಯಿಸಲು ಪ್ರಯತ್ನಿಸಿ."</string>
-    <string name="call_quality_notification_name" msgid="3476828289553948830">"ಕರೆ ಗುಣಮಟ್ಟದ ಅಧಿಸೂಚನೆ"</string>
+    <string name="call_quality_notification_name" msgid="3476828289553948830">"ಕರೆ ಗುಣಮಟ್ಟದ ನೋಟಿಫಿಕೇಶನ್"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"ತಡೆಹಿಡಿಯಲಾಗಿರುವ SIP ಖಾತೆಗಳು"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"ಈ ಪ್ರೊಫೈಲ್‌ನಿಂದ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"ನಿಮ್ಮ ಉದ್ಯೋಗದ ನೀತಿಯು ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್‌ನಿಂದ ಮಾತ್ರ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"ವೈಯಕ್ತಿಕ ಆ್ಯಪ್‌ನಿಂದ ಸಂದೇಶವನ್ನು ಕಳುಹಿಸಲು ಸಾಧ್ಯವಿಲ್ಲ"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"ನಿಮ್ಮ ಸಂಸ್ಥೆಯು ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಆ್ಯಪ್‌ಗಳಿಂದ ಮಾತ್ರ ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸಲು ನಿಮಗೆ ಅನುಮತಿಸುತ್ತದೆ"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"ರದ್ದುಮಾಡಿ"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"ಉದ್ಯೋಗ ಪ್ರೊಫೈಲ್‌ಗೆ ಬದಲಿಸಿ"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"ಕೆಲಸಕ್ಕೆ ಸಂಬಂಧಿಸಿದ ಸಂದೇಶಗಳನ್ನು ಕಳುಹಿಸುವ ಆ್ಯಪ್ ಅನ್ನು ಇನ್‌ಸ್ಟಾಲ್ ಮಾಡಿ"</string>
 </resources>
diff --git a/res/values-ko/strings.xml b/res/values-ko/strings.xml
index a343348..6b403d9 100644
--- a/res/values-ko/strings.xml
+++ b/res/values-ko/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS에서 CDMA 통화중 대기 사용 안함"</string>
     <string name="updating_title" msgid="6130548922615719689">"통화 설정"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"관리자만 통화 설정을 변경할 수 있습니다."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"전화 계정 설정은 관리자 또는 직장 사용자만 변경할 수 있습니다."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"설정(<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"통화 설정 오류"</string>
     <string name="reading_settings" msgid="1605904432450871183">"설정을 읽는 중..."</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"통화를 보류할 수 없습니다."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"전화를 걸려면 무선 네트워크에 연결하세요."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"전화를 걸려면 Wi-Fi 통화를 사용 설정하세요."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"전화를 걸려면 위성 모드를 사용 중지하세요."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"긴급 상황 정보"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"소유자"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"정보를 보려면 다시 탭하세요."</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"비행기 모드 사용 중"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"SIM 카드에 액세스할 수 없음"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"모바일 네트워크를 사용할 수 없음"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"위성 모드 사용 중"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"전화를 걸려는 전화번호에 문제가 있습니다. 오류 코드 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"통화를 완료할 수 없습니다. 오류 코드 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"통화를 완료할 수 없습니다. 오류 코드 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"기본 데이터 SIM의 subId:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL 대역폭(kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL 대역폭(kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE 물리적 채널 구성:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"물리적 채널 구성:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"셀 정보 새로고침 빈도:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"모든 셀 측정 정보:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"데이터 서비스:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"블루투스 신호 강도가 약합니다. 스피커폰으로 전환해 보세요."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"통화 품질 알림"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"지원 중단된 SIP 계정"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"이 프로필에서 메시지를 보낼 수 없음"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"직장 정책을 사용하면 직장 프로필에서만 메시지를 보낼 수 있습니다."</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"개인 앱에서 메시지를 보낼 수 없음"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"귀하의 조직에서 직장 앱을 사용한 메시지 전송만 허용했습니다."</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"취소"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"직장 프로필로 전환"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"직장 메시지 앱 설치"</string>
 </resources>
diff --git a/res/values-ky/strings.xml b/res/values-ky/strings.xml
index a0e990a..3fca1ed 100644
--- a/res/values-ky/strings.xml
+++ b/res/values-ky/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS платформасында CDMA чалуу күтүүcү өчүрүлгөн"</string>
     <string name="updating_title" msgid="6130548922615719689">"Чалуу параметрлери"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Чалуу параметрлерин администратор гана өзгөртө алат."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Телефондогу аккаунттун параметрлерин администратор же жумуштагы колдонуучу гана өзгөртө алат."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Параметрлер (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Чалуу жөндөөлөрүндө ката кетти"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Параметрлер окулууда…"</string>
@@ -296,7 +297,7 @@
     <string name="limited_sim_function_notification_message" msgid="5338638075496721160">"Башка SIM картаны колднгндо <xliff:g id="CARRIER_NAME">%1$s</xliff:g> чалуулары жана дайындар кызмттары бөгөттлшү мүмкүн."</string>
     <string name="sip_accounts_removed_notification_title" msgid="3528076957535736095">"Колдонуудан чыккан SIP аккаунттары табылды жана өчүрүлдү"</string>
     <string name="sip_accounts_removed_notification_message" msgid="1916856744869791592">"SIP аркылуу чалуу Android платформасында мындан ары колдоого алынбайт.\nУчурдагы SIP аккаунттарыңыз (<xliff:g id="REMOVED_SIP_ACCOUNTS">%s</xliff:g>) өчүрүлдү.\nЧалууларга колдонулган демейки аккаунтун жөндөөсүн ырастаңыз."</string>
-    <string name="sip_accounts_removed_notification_action" msgid="3772778402370555562">"Жөндөөлөргө өтүү"</string>
+    <string name="sip_accounts_removed_notification_action" msgid="3772778402370555562">"Параметрлерге өтүү"</string>
     <string name="data_usage_title" msgid="8438592133893837464">"Колдонмолордун трафиги"</string>
     <string name="data_usage_template" msgid="6287906680674061783">"<xliff:g id="ID_2">%2$s</xliff:g> аралыгында <xliff:g id="ID_1">%1$s</xliff:g> мобилдик трафик колдонулду"</string>
     <string name="advanced_options_title" msgid="9208195294513520934">"Өркүндөтүлгөн"</string>
@@ -384,9 +385,9 @@
     <string name="enable_disable_lafs" msgid="7448060358300805661">"Жергиликтүү аэропорттун учуу тартиби"</string>
     <string name="lafs_enable" msgid="3125783406052655690">"Жергиликтүү аэропорттун учуу тартиби иштетилген"</string>
     <string name="lafs_disable" msgid="7326815066813851447">"Жергиликтүү аэропорттун учуу тартиби өчүрүлгөн"</string>
-    <string name="enable_disable_restaurants" msgid="3873247081569423019">"Ресторандар"</string>
-    <string name="restaurants_enable" msgid="5810452674239139572">"Ресторандар иштетилген"</string>
-    <string name="restaurants_disable" msgid="2733507854548413505">"Ресторандар өчүрүлгөн"</string>
+    <string name="enable_disable_restaurants" msgid="3873247081569423019">"Тамактануучу жайлар"</string>
+    <string name="restaurants_enable" msgid="5810452674239139572">"Тамактануучу жайлар иштетилген"</string>
+    <string name="restaurants_disable" msgid="2733507854548413505">"Тамактануучу жайлар өчүрүлгөн"</string>
     <string name="enable_disable_lodgings" msgid="7849168585821435109">"Турак жайлар"</string>
     <string name="lodgings_enable" msgid="2020598411398609514">"Турак жайлар иштетилген"</string>
     <string name="lodgings_disable" msgid="5145649659459722661">"Турак жайлар өчүрүлгөн"</string>
@@ -475,7 +476,7 @@
     <string name="delete_fdn_contact" msgid="7027405651994507077">"Туруктуу терүү номерин жок кылуу"</string>
     <string name="deleting_fdn_contact" msgid="6872320570844460428">"Туруктуу терүү номери жок кылынууда…"</string>
     <string name="fdn_contact_deleted" msgid="1680714996763848838">"Туруктуу терүү номери өчүрүлдү."</string>
-    <string name="pin2_invalid" msgid="2313954262684494442">"БНТ жаңырган жок, анткени туура эмес PIN-код киргизилди."</string>
+    <string name="pin2_invalid" msgid="2313954262684494442">"БНТ жаңырган жок, анткени туура эмес PIN код киргизилди."</string>
     <string name="fdn_invalid_number" msgid="9067189814657840439">"Уруксат берилген номер жаңырган жок, себеби жазылган номердин саны <xliff:g id="FDN_NUMBER_LIMIT_LENGTH">%d</xliff:g> ашпашы керек."</string>
     <string name="pin2_or_fdn_invalid" msgid="7542639487955868181">"БНТ жаңырган жок. PIN2 туура эмес, же телефон номуру жараксыз."</string>
     <string name="fdn_failed" msgid="216592346853420250">"БНТ иши кыйрады."</string>
@@ -489,9 +490,9 @@
     <string name="oldPinLabel" msgid="8618515202411987721">"Эски PIN"</string>
     <string name="newPinLabel" msgid="3585899083055354732">"Жаңы PIN"</string>
     <string name="confirmPinLabel" msgid="7783531218662473778">"Жаңы PIN\'ди ырастаңыз"</string>
-    <string name="badPin" msgid="4549286285015892321">"Сиз киргизген эски PIN-кодуңуз туура эмес. Кайра аракеттениңиз."</string>
+    <string name="badPin" msgid="4549286285015892321">"Сиз киргизген эски PIN кодуңуз туура эмес. Кайра аракеттениңиз."</string>
     <string name="mismatchPin" msgid="1467254768290323845">"Сиз терген PIN\'дер дал келишпейт. Кайра аракеттениңиз."</string>
-    <string name="invalidPin" msgid="7363723429414001979">"Узундугу 4төн 8ге чейинки сандан турган PIN-кодду териңиз."</string>
+    <string name="invalidPin" msgid="7363723429414001979">"Узундугу 4төн 8ге чейинки сандан турган PIN кодду териңиз."</string>
     <string name="disable_sim_pin" msgid="3112303905548613752">"SIM PIN тазалоо"</string>
     <string name="enable_sim_pin" msgid="445461050748318980">"SIM PIN орнотуу"</string>
     <string name="enable_in_progress" msgid="4135305985717272592">"PIN орнотулууда…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Чалууну кармап туруу мүмкүн эмес."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Чалуу үчүн зымсыз тармакка туташыңыз."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Wi-Fi аркылуу чалыңыз."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Чалуу үчүн спутникти өчүрүңүз."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Кырсыктаганда керек болчу маалымат"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Ээси"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Маалыматты көрүү үчүн кайра таптап коюңуз"</string>
@@ -596,7 +598,7 @@
     <string name="hac_mode_summary" msgid="7774989500136009881">"Угуу аппараты иштетилет"</string>
     <string name="rtt_mode_title" msgid="3075948111362818043">"Чалуу учурунда анык убакыттагы билдирүү (RTT)"</string>
     <string name="rtt_mode_summary" msgid="8631541375609989562">"Үн чалуунун учурунда жазышууга уруксат берүү"</string>
-    <string name="rtt_mode_more_information" msgid="587500128658756318">"RTT функциясы угуу жана сүйлөө жөндөмдүүлүгү бузулган адамдарга арналат.&lt;br&gt; &lt;a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>&gt;Кеңири маалымат&lt;/a&gt;\n       &lt;br&gt;&lt;br&gt; - RTT функциясында чалуулар транскрипциялар катары сакталат\n       &lt;br&gt; - RTT функациясы видео чалууда жеткиликсиз болот"</string>
+    <string name="rtt_mode_more_information" msgid="587500128658756318">"RTT функциясы уга албаган же сүйлөй албаган адамдарга арналган.&lt;br&gt; &lt;a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>&gt;Кеңири маалымат&lt;/a&gt;\n       &lt;br&gt;&lt;br&gt; - RTT функциясында чалуулар транскрипциялар катары сакталат\n       &lt;br&gt; - RTT функациясы видео чалууда жеткиликсиз болот"</string>
     <string name="no_rtt_when_roaming" msgid="5268008247378355389">"Эскертүү: Роуминг учурунда RTT жеткиликсиз"</string>
   <string-array name="tty_mode_entries">
     <item msgid="3238070884803849303">"Телетайп түзмөгү өчүк"</item>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Учак режими күйүк"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"SIM картага кире албай жатат"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Мобилдик тармак жок"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Спутник күйүк"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Сиз терип жаткан телефон номери менен бир маселе бар. Ката коду 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Чалуу аяктабай калды. Ката коду 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Чалуу аяктабай калды. Ката коду 6."</string>
@@ -832,7 +835,7 @@
     <string name="cbrs_data_switch_string" msgid="6060356430838077653">"Жарандык радио кызматынын дайындары"</string>
     <string name="dsds_switch_string" msgid="7564769822086764796">"DSDS\'ти иштетүү"</string>
     <string name="dsds_dialog_title" msgid="8494569893941847575">"Түзмөк өчүп күйсүнбү?"</string>
-    <string name="dsds_dialog_message" msgid="4047480385678538850">"Бул жөндөөнү өзгөртүү үчүн түзмөгүңүздү өчүрүп күйгүзүңүз."</string>
+    <string name="dsds_dialog_message" msgid="4047480385678538850">"Бул параметрди өзгөртүү үчүн түзмөгүңүздү өчүрүп күйгүзүңүз."</string>
     <string name="dsds_dialog_confirm" msgid="9032004888134129885">"Өчүрүп-күйгүзүү"</string>
     <string name="dsds_dialog_cancel" msgid="3245958947099586655">"Жокко чыгаруу"</string>
     <string name="removable_esim_string" msgid="7931369811671787649">"Чыгарылуучу eSIM-картаны демейки катары коюу"</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Демейки оператордун SIM картасынын көз салуу идентификатору:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL өткөрүү жөндөмдүүлүгү (кб/сек.):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL өткөрүү жөндөмдүүлүгү (кб/сек.):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE физикалык каналынын конфигурациясы:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Физикалык каналдын конфигурациялары:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Уюлдук маалыматты жаңылоо ылдамдыгы:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Уюлдук чен-өлчөм маалыматтары:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Мобилдик туташуу кызматы:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Bluetooth сигналыңыз начар. Спикерфонго которулуп көрүңүз."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Чалуунун сапаты тууралуу билдирме"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Колдонуудан чыккан SIP аккаунттары"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Билдирүүлөрдү бул профилден жөнөтүүгө болбойт"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Жумуш саясатыңызга ылайык, билдирүүлөрдү жумуш профилинен гана жөнөтө аласыз"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Жеке колдонмодон жазышуу мүмкүн эмес"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Уюмуңуз билдирүүлөрдү жумуш колдонмолорунан гана жөнөтүүгө уруксат берет"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Жокко чыгаруу"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Жумуш профилине которулуу"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Жумушка арналган жазышуу колдонмосун орнотуу"</string>
 </resources>
diff --git a/res/values-lo/strings.xml b/res/values-lo/strings.xml
index 4809c0d..10ddb89 100644
--- a/res/values-lo/strings.xml
+++ b/res/values-lo/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"ການລໍຖ້າສາຍ CDMA ພາຍໃຕ້ IMS ປິດຢູ່"</string>
     <string name="updating_title" msgid="6130548922615719689">"ການຕັ້ງຄ່າການໂທ"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"ມີ​ແຕ່​ຜູ້​ໃຊ້​ທີ່​ເປັນ​ຜູ້ດູແລລະບົບ​ເທົ່າ​ນັ້ນ​ທີ່​ສາ​ມາດ​ປ່ຽນການ​ຕັ້ງ​ຄ່າ​ການ​ໂທ​ໄດ້."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"ສະເພາະຜູ້ເບິ່ງແຍງລະບົບ ຫຼື ຜູ້ໃຊ້ຢູ່ບ່ອນເຮັດວຽກເທົ່ານັ້ນທີ່ສາມາດປ່ຽນການຕັ້ງຄ່າບັນຊີຂອງໂທລະສັບໄດ້."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"ການ​ຕັ້ງ​ຄ່າ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"ການຕັ້ງຄ່າການໂທຜິດພາດ"</string>
     <string name="reading_settings" msgid="1605904432450871183">"ກຳລັງອ່ານການຕັ້ງຄ່າ..."</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"ບໍ່ສາມາດພັກສາຍໄດ້."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"ເຊື່ອມຕໍ່ກັບເຄືອຂ່າຍໄຮ້ສາຍເພື່ອເຮັດການໂທ."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"ກະລຸນາເປີດໃຊ້ການໂທ Wi-Fi ເພື່ອໂທ."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"ປິດການນຳໃຊ້ໂໝດດາວທຽມເພື່ອໂທອອກ."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"ຂໍ້ມູນສຸກເສີນ"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"ເຈົ້າຂອງ"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"ແຕະອີກເທື່ອໜຶ່ງເພື່ອເບິ່ງຂໍ້ມູນ"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"ເປີດໂໝດຢູ່ໃນຍົນແລ້ວ"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"ບໍ່ສາມາດເຂົ້າເຖິງຊິມກາດໄດ້"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"ບໍ່ມີການເຊື່ອມຕໍ່ຂໍ້ມູນຜ່ານມືຖື"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"ໂໝດດາວທຽມເປີດຢູ່"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"ເກີດບັນຫາກັບເບີທີ່ທ່ານກຳລັງພະຍາຍາມໂທຫາ. ລະຫັດຂໍ້ຜິດພາດ 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"ບໍ່ສາມາດສຳເລັດການໂທໄດ້. ລະຫັດຂໍ້ຜິດພາດ 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"ບໍ່ສາມາດສຳເລັດການໂທໄດ້. ລະຫັດຂໍ້ຜິດພາດ 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"SubId ຂອງຊິມອິນເຕີເນັດເລີ່ມຕົ້ນ:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"ແບນວິດ DL (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"ແບນວິດ UL (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"ການຕັ້ງຄ່າຊ່ອງ LTE ກາຍະພາບ:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"ການຕັ້ງຄ່າຊ່ອງທາງກາຍະພາບ:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"ອັດຕາການໂຫຼດຄືນໃໝ່ຂອງຂໍ້ມູນມືຖື:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"ຂໍ້ມູນການວັດແທກມືຖືທັງໝົດ:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"ບໍລິການຂໍ້ມູນ:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"ສັນຍານ Bluetooth ຂອງທ່ານອ່ອນ. ລອງສະຫຼັບລຳໂພງໂທລະສັບ."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"ການແຈ້ງເຕືອນຄຸນນະພາບການໂທ"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"ບັນຊີ SIP ທີ່ເຊົາສະໜັບສະໜູນ"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"ບໍ່ສາມາດສົ່ງຂໍ້ຄວາມຈາກໂປຣໄຟລ໌ນີ້ໄດ້"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"ນະໂຍບາຍບ່ອນເຮັດວຽກຂອງທ່ານອະນຸຍາດໃຫ້ທ່ານສົ່ງຂໍ້ຄວາມໄດ້ຈາກໂປຣໄຟລ໌ບ່ອນເຮັດວຽກເທົ່ານັ້ນ"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"ບໍ່ສາມາດສົ່ງຂໍ້ຄວາມຈາກແອັບສ່ວນຕົວໄດ້"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"ອົງກອນຂອງທ່ານອະນຸຍາດໃຫ້ທ່ານສົ່ງຂໍ້ຄວາມໄດ້ຈາກແອັບບ່ອນເຮັດວຽກເທົ່ານັ້ນ"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"ຍົກເລີກ"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"ສະຫຼັບໄປໃຊ້ໂປຣໄຟລ໌ບ່ອນເຮັດວຽກ"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"ຕິດຕັ້ງແອັບ Messages ສຳລັບບ່ອນເຮັດວຽກ"</string>
 </resources>
diff --git a/res/values-lt/strings.xml b/res/values-lt/strings.xml
index 6af3c18..9e1a340 100644
--- a/res/values-lt/strings.xml
+++ b/res/values-lt/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA laukiamų skambučių paslauga įjungus IMS išjungta"</string>
     <string name="updating_title" msgid="6130548922615719689">"Skambinimo nustatymai"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Skambučių nustatymus gali keisti tik administruojantis naudotojas."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Telefono paskyros nustatymus gali keisti tik administratorius arba darbo paskyros naudotojas."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Nustatymai (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Skambinimo nustatymų klaida"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Analizuojami nustatymai..."</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Negalima sulaikyti skambučių."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Prisijunkite prie belaidžio ryšio tinklo, kad galėtumėte skambinti."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Įgalinkite „Wi-Fi“ skambinimą, kad galėtumėte skambinti."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Išjunkite satelito režimą, kad galėtumėte skambinti."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Kritinės padėties informacija"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Savininkas"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Palieskite dar kartą, kad peržiūrėtumėte informaciją"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Įjungtas lėktuvo režimas"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Nepavyko pasiekti SIM kortelės"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Mobiliojo ryšio tinklas nepasiekiamas"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Satelito režimas įjungtas"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Problema dėl telefono numerio, kuriuo bandote paskambinti. Klaidos kodas: 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Nepavyko paskambinti. Klaidos kodas: 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Nepavyko paskambinti. Klaidos kodas: 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Numatytųjų duomenų SIM kortelės papildomas ID:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL pralaidumas (Kb/s):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL pralaidumas (Kb/s):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE fizinio kanalo konfigūracija:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Fizinių kanalų konfigūracijos:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Mobiliojo ryšio informacijos atnaujinimo dažnis:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Visų mobiliųjų ryšių įvertinimo informacija:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Duomenų paslauga:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Silpnas „Bluetooth“ signalas. Pabandykite perjungti garsiakalbį."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Pranešimas apie skambučio kokybę"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Nebenaudojamos SIP paskyros"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Nepavyko išsiųsti pranešimo iš šio profilio"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Pagal jūsų darbo politiką galite siųsti pranešimus tik iš darbo profilio"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Nepavyko išsiųsti pranešimo iš asmeninės programos"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Jūsų organizacija leidžia siųsti pranešimus tik iš darbo programų"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Atšaukti"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Perjungti į darbo profilį"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Įdiegti darbo pranešimų programą"</string>
 </resources>
diff --git a/res/values-lv/strings.xml b/res/values-lv/strings.xml
index eba0413..90165b8 100644
--- a/res/values-lv/strings.xml
+++ b/res/values-lv/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA zvanu gaidīšana, kad ir izslēgts tūlītējās ziņojumapmaiņas pakalpojums"</string>
     <string name="updating_title" msgid="6130548922615719689">"Zvanu iestatījumi"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Tikai lietotājs ar administratora tiesībām var mainīt zvanu iestatījumus."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Tikai administrators vai primārais lietotājs var mainīt tālruņa konta iestatījumus."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Iestatījumi (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Zvanu iestatījumu kļūda"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Notiek iestatījumu lasīšana..."</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Nevar aizturēt zvanus."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Lai veiktu zvanu, izveidojiet savienojumu ar bezvadu tīklu."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Lai veiktu zvanu, iespējojiet Wi-Fi zvanus."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Lai zvanītu, atspējojiet satelīta režīmu."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Ārkārtas informācija"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Īpašnieks"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Pieskarieties vēlreiz, lai skatītu informāciju."</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Ir ieslēgts lidojuma režīms"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Nevar piekļūt SIM kartei"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Mobilais tīkls nav pieejams"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Satelīta režīms ir ieslēgts"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Radās problēma ar jūsu sastādīto tālruņa numuru. Kļūdas kods: 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Neizdevās pabeigt zvanu. Kļūdas kods: 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Neizdevās pabeigt zvanu. Kļūdas kods: 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Noklusējuma datu SIM kartes papildu ID:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL joslas platums (kb/s):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL joslas platums (kb/s):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE fiziskā kanāla konfigurācija:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Fiziskā kanāla konfigurācijas:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Mobilā tīkla informācijas atsvaidzināšanas biežums:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Visa mobilā tīkla mērījumu informācija:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Datu pakalpojums:"</string>
@@ -905,7 +908,7 @@
     <string name="radio_info_smsc_update_label" msgid="5141996256097115753">"Atjaunināt"</string>
     <string name="radio_info_smsc_refresh_label" msgid="8409923721451604560">"Atsvaidzināt"</string>
     <string name="radio_info_toggle_dns_check_label" msgid="1394078554927787350">"Pārslēgt DNS pārbaudi"</string>
-    <string name="oem_radio_info_label" msgid="2914167475119997456">"OEM raksturīga informācija/iestatījumi"</string>
+    <string name="oem_radio_info_label" msgid="2914167475119997456">"OAR raksturīga informācija/iestatījumi"</string>
     <string name="radio_info_endc_available" msgid="2983767110681230019">"EN-DC pieejamība (NSA):"</string>
     <string name="radio_info_dcnr_restricted" msgid="7147511536420148173">"DCNR ierobežojums (NSA):"</string>
     <string name="radio_info_nr_available" msgid="3383388088451237182">"NR pieejamība (NSA):"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Bluetooth signāls ir vājš. Mēģiniet pārslēgties uz skaļruni."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Paziņojums par zvana kvalitāti"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"SIP konti, kuru darbība ir pārtraukta"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Nevar nosūtīt ziņojumu no šī profila"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Saskaņā ar darbavietas politiku drīkstat sūtīt ziņojumus tikai no darba profila."</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Nevar sūtīt ziņojumus no personīgās lietotnes"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Jūsu organizācija ļauj jums sūtīt ziņojumus tikai no darba lietotnēm."</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Atcelt"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Pārslēgties uz darba profilu"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Instalēt darba ziņojumapmaiņas lietotni"</string>
 </resources>
diff --git a/res/values-mk/strings.xml b/res/values-mk/strings.xml
index d8a1cb6..0ab1b47 100644
--- a/res/values-mk/strings.xml
+++ b/res/values-mk/strings.xml
@@ -75,7 +75,7 @@
     <string name="phone_accounts_configure_account_settings" msgid="6622119715253196586">"Конфигурирајте ги поставките на сметка"</string>
     <string name="phone_accounts_all_calling_accounts" msgid="1609600743500618823">"Сите сметки за повици"</string>
     <string name="phone_accounts_all_calling_accounts_summary" msgid="2214134955430107240">"Изберете кои сметки може да повикуваат"</string>
-    <string name="wifi_calling" msgid="3650509202851355742">"Повик преку Wi-Fi"</string>
+    <string name="wifi_calling" msgid="3650509202851355742">"Повици преку Wi-Fi"</string>
     <string name="connection_service_default_label" msgid="7332739049855715584">"Вградена услуга на поврзување"</string>
     <string name="voicemail" msgid="7697769412804195032">"Говорна пошта"</string>
     <string name="voicemail_settings_with_label" msgid="4228431668214894138">"Говорна пошта (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Повикот на чекање CDMA под IMS е исклучен"</string>
     <string name="updating_title" msgid="6130548922615719689">"Поставки за повици"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Поставките за повик може да ги измени само администраторскиот корисник."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Поставките за сметката на телефонот може да ги промени само администраторот или деловниот корисник."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Поставки (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Грешка со поставки на повици"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Се читаат поставките..."</string>
@@ -152,7 +153,7 @@
     <string name="change_num" msgid="6982164494063109334">"Ажурирај"</string>
   <string-array name="clir_display_values">
     <item msgid="8477364191403806960">"Стандардна мрежа"</item>
-    <item msgid="6813323051965618926">"Сокриј број"</item>
+    <item msgid="6813323051965618926">"Скриј број"</item>
     <item msgid="9150034130629852635">"Прикажи број"</item>
   </string-array>
     <string name="vm_changed" msgid="4739599044379692505">"Бројот на говорна пошта е променет."</string>
@@ -296,7 +297,7 @@
     <string name="limited_sim_function_notification_message" msgid="5338638075496721160">"Повиците и услугите за интернет на <xliff:g id="CARRIER_NAME">%1$s</xliff:g> може да се блокирани со друга SIM-картичка."</string>
     <string name="sip_accounts_removed_notification_title" msgid="3528076957535736095">"Најдени и отстранети се неподдржани сметки на SIP"</string>
     <string name="sip_accounts_removed_notification_message" msgid="1916856744869791592">"Платформата Android веќе не поддржува повикување преку SIP.\nВашите постојни сметки на SIP <xliff:g id="REMOVED_SIP_ACCOUNTS">%s</xliff:g> се отстранети.\nПотврдете ја вашата стандардна поставка за повикување."</string>
-    <string name="sip_accounts_removed_notification_action" msgid="3772778402370555562">"Одете во „Поставки“"</string>
+    <string name="sip_accounts_removed_notification_action" msgid="3772778402370555562">"Отворете „Поставки“"</string>
     <string name="data_usage_title" msgid="8438592133893837464">"Потрошен интернет од апликации"</string>
     <string name="data_usage_template" msgid="6287906680674061783">"<xliff:g id="ID_1">%1$s</xliff:g> потрошен мобилен интернет во периодот <xliff:g id="ID_2">%2$s</xliff:g>"</string>
     <string name="advanced_options_title" msgid="9208195294513520934">"Напредни"</string>
@@ -309,7 +310,7 @@
     <string name="sim_selection_required_pref" msgid="6985901872978341314">"Треба да се избере"</string>
     <string name="sim_change_data_title" msgid="9142726786345906606">"Да се промени SIM за интернет?"</string>
     <string name="sim_change_data_message" msgid="3567358694255933280">"Да се користи <xliff:g id="NEW_SIM">%1$s</xliff:g> наместо <xliff:g id="OLD_SIM">%2$s</xliff:g> за мобилен интернет?"</string>
-    <string name="wifi_calling_settings_title" msgid="5800018845662016507">"Повик преку Wi-Fi"</string>
+    <string name="wifi_calling_settings_title" msgid="5800018845662016507">"Повици преку Wi-Fi"</string>
     <string name="video_calling_settings_title" msgid="342829454913266078">"Видеоповикување преку оператор"</string>
     <string name="gsm_umts_options" msgid="4968446771519376808">"Опции за GSM/UMTS"</string>
     <string name="cdma_options" msgid="3669592472226145665">"Опции на CDMA"</string>
@@ -458,7 +459,7 @@
     <string name="auto_retry_mode_title" msgid="2985801935424422340">"Автоматски повторен обид"</string>
     <string name="auto_retry_mode_summary" msgid="2863919925349511402">"Овозможи режим на автоматски повторен обид"</string>
     <string name="tty_mode_not_allowed_video_call" msgid="6551976083652752815">"Промена на режим TTY не е дозволена за време на видеоповик"</string>
-    <string name="menu_add" msgid="5616487894975773141">"Додај контакт"</string>
+    <string name="menu_add" msgid="5616487894975773141">"Додајте контакт"</string>
     <string name="menu_edit" msgid="3593856941552460706">"Измени контакт"</string>
     <string name="menu_delete" msgid="6326861853830546488">"Избриши контакт"</string>
     <string name="menu_dial" msgid="4178537318419450012">"Повикај контакт"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Не може да се задржат повици."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Поврзете се на безжична мрежа за да повикате."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Овозможете повикување преку Wi-Fi за воспоставување повик."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Исклучете го режимот на сателит за да упатите повик."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Податоци за итни случаи"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Сопственик"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Допрете повторно за приказ на информации"</string>
@@ -596,7 +598,7 @@
     <string name="hac_mode_summary" msgid="7774989500136009881">"Вклучи компатибилност на слушни помагала"</string>
     <string name="rtt_mode_title" msgid="3075948111362818043">"Повик со „Текст во реално време“ (RTT)"</string>
     <string name="rtt_mode_summary" msgid="8631541375609989562">"Дозволете пораки во текот на гласовен повик"</string>
-    <string name="rtt_mode_more_information" msgid="587500128658756318">"Функцијата RTT им помага на повикувачи коишто се глуви, слабо слушаат, имаат говорна мана или пак, им е потребно многу повеќе од глас.&lt;br&gt; &lt;a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>&gt;Дознајте повеќе&lt;/a&gt;\n       &lt;br&gt;&lt;br&gt; - Повиците со RTT се зачувуваат како препис на порака\n       &lt;br&gt; - Функцијата RTT не е достапна за видеоповици"</string>
+    <string name="rtt_mode_more_information" msgid="587500128658756318">"RTT им помага на корисниците коишто се глуви, наглуви, имаат попреченост во говорот или пак, не им е доволен само глас.&lt;br&gt; &lt;a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>&gt;Дознајте повеќе&lt;/a&gt;\n       &lt;br&gt;&lt;br&gt; - RTT-повиците се зачувуваат како транскрипции на пораки\n       &lt;br&gt; - Функцијата RTT не е достапна за видеоповици"</string>
     <string name="no_rtt_when_roaming" msgid="5268008247378355389">"Напомена: RTT не е достапна во роаминг"</string>
   <string-array name="tty_mode_entries">
     <item msgid="3238070884803849303">"TTY исклучени"</item>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Авионскиот режим е вклучен"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Не може да се пристапи до SIM-картичката"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Мобилната мрежа не е достапна"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Режимот на сателит е вклучен"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Проблем со телефонскиот број што се обидувате да го бирате. Код за грешка: 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Повикот не може да се заврши. Код за грешка: 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Повикот не може да се заврши. Код за грешка: 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"SUBID на стандардната SIM за мобилен интернет:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Брзина на пренос при преземање (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Брзина на пренос при прикачување (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Конфигурација на физички канал на LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Конфигурации на физички канали:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Стапка на освежување на информациите за мобилниот:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Сите информации за мерењата на мобилниот:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Услуга за мобилен интернет:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Вашиот сигнал на Bluetooth е слаб. Обидете се со префрлање на интерфон."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Известување за квалитет на повик"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Неподдржани сметки на SIP"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Не може да се испрати порака од профилов"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Вашето работно правило ви дозволува да испраќате пораки само од работниот профил"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Не може да испраќате пораки од лична апликација"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Организацијата ви дозволува да испраќате пораки само од работни апликации"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Откажи"</string>
-    <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Префрли на работен профил"</string>
+    <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Префрлете се на работен профил"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Инсталирајте работна апликација за разменување пораки"</string>
 </resources>
diff --git a/res/values-ml/strings.xml b/res/values-ml/strings.xml
index 4977d58..b0785bb 100644
--- a/res/values-ml/strings.xml
+++ b/res/values-ml/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS-ന് കീഴിലുള്ള CDMA കോൾ വെയ്‌റ്റിംഗ് ഓഫാണ്"</string>
     <string name="updating_title" msgid="6130548922615719689">"കോൾ ക്രമീകരണങ്ങൾ"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"അഡ്മിൻ ഉപയോക്താവിന് മാത്രമേ കോൾ ക്രമീകരണം മാറ്റാൻ കഴിയൂ."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"അഡ്‌മിനോ ഔദ്യോഗിക ഉപയോക്താവിനോ മാത്രമേ ഫോൺ അക്കൗണ്ട് ക്രമീകരണം മാറ്റാനാകൂ."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"ക്രമീകരണം (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"കോൾ ക്രമീകരണ പിശക്"</string>
     <string name="reading_settings" msgid="1605904432450871183">"ക്രമീകരണങ്ങൾ റീഡ് ചെയ്യുന്നു.…"</string>
@@ -181,7 +182,7 @@
     <string name="not_allowed" msgid="8541221928746104798">"നിങ്ങളുടെ സിം കാർഡ് ഈ നെറ്റ്‌വർക്കിലേക്ക് ഒരു കണക്ഷൻ അനുവദിക്കുന്നില്ല."</string>
     <string name="connect_later" msgid="1950138106010005425">"ഈ നെറ്റ്‌വർക്കിൽ ഇപ്പോൾ കണക്റ്റുചെയ്യാനാകുന്നില്ല. പിന്നീട് വീണ്ടും ശ്രമിക്കുക."</string>
     <string name="registration_done" msgid="5337407023566953292">"ഒരു നെറ്റ്‌വർക്കിൽ രജിസ്റ്റർ ചെയ്‌തു."</string>
-    <string name="already_auto" msgid="8607068290733079336">"സ്വമേധയാ ഉള്ള തിരഞ്ഞെടുക്കലിൽ ഇതിനകം ഉണ്ട്."</string>
+    <string name="already_auto" msgid="8607068290733079336">"സ്വയമേവ ഉള്ള തിരഞ്ഞെടുക്കലിൽ ഇതിനകം ഉണ്ട്."</string>
     <string name="select_automatically" msgid="779750291257872651">"സ്വയമേവ നെറ്റ്‌വർക്ക് തിരഞ്ഞെടുക്കുക"</string>
     <string name="manual_mode_disallowed_summary" msgid="3970048592179890197">"%1$s എന്നതിലേക്ക് കണക്‌റ്റ് ചെയ്‌തിരിക്കുമ്പോൾ ലഭ്യമല്ല"</string>
     <string name="network_select_title" msgid="4117305053881611988">"നെറ്റ്‌വർക്ക്"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"കോളുകൾ ഹോൾഡുചെയ്യാൻ കഴിയില്ല."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"ഒരു കോൾ വിളിക്കാൻ വയർലെസ്സ് നെറ്റ്‌വർക്കിലേക്ക് കണക്റ്റുചെയ്യുക."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"കോൾ ചെയ്യാൻ Wi-Fi കോളിംഗ് പ്രവർത്തനക്ഷമമാക്കുക."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"കോൾ ചെയ്യാൻ സാറ്റലൈറ്റ് മോഡ് പ്രവർത്തനരഹിതമാക്കുക."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"അടിയന്തര വിവരം"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"ഉടമ"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"വിവരങ്ങൾ കാണാൻ വീണ്ടും ടാപ്പ് ചെയ്യുക"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"വിമാന മോഡ് ഓണാണ്"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"സിം കാർഡ് ആക്‌സസ് ചെയ്യാനാവുന്നില്ല"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"മൊബൈൽ നെറ്റ്‌വർക്ക് ലഭ്യമല്ല"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"സാറ്റലൈറ്റ് മോഡ് ഓണാണ്"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"നിങ്ങൾ ഡയൽ ചെയ്യാൻ ശ്രമിക്കുന്ന ഫോൺ നമ്പറിൽ പ്രശ്‌നമുണ്ട്. പിശക് കോഡ് 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"കോൾ പൂർത്തിയാക്കാനായില്ല. പിശക് കോഡ് 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"കോൾ പൂർത്തിയാക്കാനായില്ല. പിശക് കോഡ് 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"ഡിഫോൾട്ട് ഡാറ്റാ സിമ്മിന്റെ ഉപഐഡി:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL ബാൻഡ്‌വിഡ്‌ത് (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL ബാൻഡ്‌വിഡ്‌ത് (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE ഫിസിക്കൽ ചാനൽ കോൺഫിഗറേഷൻ:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"ഫിസിക്കൽ ചാനൽ കോൺഫിഗറേഷനുകൾ:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"സെൽ വിവരങ്ങൾ പുതുക്കിയെടുക്കൽ നിരക്ക്:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"എല്ലാ സെൽ അളവ് വിവരങ്ങളും:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"ഡാറ്റ സേവനം:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"നിങ്ങളുടെ Bluetooth സിഗ്നൽ ദുർബലമാണ്. സ്‌പീക്കർഫോണിലേക്ക് മാറ്റി നോക്കൂ."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"കോൾ നിലവാര അറിയിപ്പ്"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"അവസാനിപ്പിച്ച SIP അക്കൗണ്ടുകൾ"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"ഈ പ്രൊഫൈലിൽ നിന്ന് സന്ദേശം അയയ്ക്കാനാകില്ല"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"ഔദ്യോഗിക പ്രൊഫൈലിൽ നിന്ന് മാത്രം സന്ദേശം അയയ്ക്കാനാണ് നിങ്ങളുടെ ഔദ്യോഗിക നയം അനുവദിക്കുന്നത്"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"വ്യക്തിപര ആപ്പിൽ നിന്ന് സന്ദേശമയയ്ക്കാനാകില്ല"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"നിങ്ങളുടെ സ്ഥാപനം ഔദ്യോഗിക ആപ്പുകളിൽ നിന്ന് സന്ദേശമയയ്ക്കാൻ മാത്രമേ നിങ്ങളെ അനുവദിക്കുന്നുള്ളൂ"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"റദ്ദാക്കുക"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"ഔദ്യോഗിക പ്രൊഫൈലിലേക്ക് മാറുക"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"ഒരു ഔദ്യോഗിക സന്ദേശമയയ്ക്കൽ ആപ്പ് ഇൻസ്റ്റാൾ ചെയ്യുക"</string>
 </resources>
diff --git a/res/values-mn/strings.xml b/res/values-mn/strings.xml
index 920074d..712042a 100644
--- a/res/values-mn/strings.xml
+++ b/res/values-mn/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS доорх CDMA-н \"Дуудлага хүлээлгэнд\" тохиргоо унтраалттай байна"</string>
     <string name="updating_title" msgid="6130548922615719689">"Дуудлагын тохиргоо"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Дуудлагын тохиргоог зөвхөн админ хэрэглэгч солих боломжтой."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Утасны бүртгэлийн тохиргоог зөвхөн админ эсвэл ажлын хэрэглэгч өөрчлөх боломжтой."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Тохиргоо (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Дуудлагын тохиргооны алдаа"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Тохиргоог уншиж байна…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Дуудлагыг хадгалах боломжгүй байна."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Дуудлага хийхийн тулд утасгүй интернетэд холбогдоно уу."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Дуудлага хийхийн тулд Wi-Fi дуудлагыг идэвхжүүлнэ үү."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Дуудлага хийхийн тулд хиймэл дагуулын горимыг идэвхгүй болгоно уу."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Яаралтай тусламжийн мэдээлэл"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Эзэмшигч"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Мэдээллийг үзэхийн тулд дахин товшино уу"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Нислэгийн горим асаалттай"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"SIM картад хандах боломжгүй"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Мобайл сүлжээ байхгүй"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Хиймэл дагуулын горим асаалттай байна"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Таны залгахыг оролдож буй утасны дугаарт асуудал байна. Алдааны код 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Дуудлагыг гүйцээж чадсангүй. Алдааны код 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Дуудлагыг гүйцээж чадсангүй. Алдааны код 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Өгөгдмөл дата SIM-н SubId:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DLзурвасын өргөн (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL Мессежийн өргөн (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE Сувгийн бодит тохиргоо:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Биет сувгийн тохируулга:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Үүрэн мэдээлэл сэргээх тариф:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Бүх үүрэн хэмжилтийн мэдээлэл:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Дата үйлчилгээ:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Таны Bluetooth-н дохио сул байна. Чанга яригчтай утас руу сэлгэж үзнэ үү."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Дуудлагын чанарын мэдэгдэл"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"SIP-н зогсоосон бүртгэлүүд"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Энэ профайлаас мессеж илгээх боломжгүй"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Таны ажлын бодлого танд зөвхөн ажлын профайлаас мессеж илгээхийг зөвшөөрдөг"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Хувийн аппаас мессеж бичих боломжгүй"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Танай байгууллага таныг зөвхөн ажлын аппуудаас мессеж илгээхийг зөвшөөрдөг"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Цуцлах"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Ажлын профайл руу сэлгэх"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Ажлын мессеж аппыг суулгах"</string>
 </resources>
diff --git a/res/values-mr/strings.xml b/res/values-mr/strings.xml
index e914d4c..76dee50 100644
--- a/res/values-mr/strings.xml
+++ b/res/values-mr/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS मध्ये CDMA कॉल वेटिंग बंद आहे"</string>
     <string name="updating_title" msgid="6130548922615719689">"कॉल सेटिंग्ज"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"कॉल सेटिंग्ज केवळ प्रशासक वापरकर्त्याद्वारे बदलल्‍या जाऊ शकतात."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"फोन खाते सेटिंग्ज फक्त ॲडमिन किंवा ऑफिसच्या वापरकर्त्याद्वारे बदलली जाऊ शकतात."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"सेटिंग्ज (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"कॉल सेटिंग्ज एरर"</string>
     <string name="reading_settings" msgid="1605904432450871183">"सेटिंग्‍ज वाचत आहे…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"कॉल सुरू ठेवू शकत नाही."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"कॉल करण्‍यासाठी वायरलेस नेटवर्कशी कनेक्‍ट करा."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"कॉल करण्यासाठी वाय-फाय कॉलिंग सक्षम करा."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"कॉल करण्यासाठी उपग्रह मोड बंद करा."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"अतिमहत्त्वाची माहिती"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"मालक"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"माहिती पाहण्यासाठी पुन्हा टॅप करा"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"विमान मोड सुरू आहे"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"सिम कार्ड अ‍ॅक्सेस करू शकत नाही"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"मोबाइल नेटवर्क उपलब्ध नाही"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"उपग्रह मोड सुरू आहे"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"तुम्ही डायल करायचा प्रयत्न करत असलेल्या फोन नंबरमध्ये समस्या आहे. एरर कोड 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"कॉल पूर्ण करता आला नाही. एरर कोड 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"कॉल पूर्ण करता आला नाही. एरर कोड 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"डीफॉल्ट डेटा सिम SubId:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL बँडविड्थ (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL बँडविड्थ (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE फिजिकल चॅनल कॉंफिगरेशन:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"प्रत्यक्ष चॅनलची कॉंफिगरेशन:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"सेल माहिती रिफ्रेश रेट:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"सर्व सेल परिमाण माहिती:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"डेटा सर्व्हिस:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"तुमचा ब्लूटूथ सिग्नल कमकुवत आहे. स्पीकरफोनवर स्विच करून पहा."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"कॉल गुणवत्ता सूचना"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"कालबाह्य झालेली SIP खाती"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"या प्रोफाइलवरून मेसेज पाठवू शकत नाही"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"तुमचे कामाशी संबंधित धोरण हे तुम्हाला फक्त तुमच्या कार्य प्रोफाइलवरून मेसेज पाठवण्याची अनुमती देते"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"वैयक्तिक ॲपवरून मेसेज पाठवू शकत नाही"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"तुमची संस्था तुम्हाला फक्त कार्य ॲप्सवरून मेसेज पाठवण्याची अनुमती देते"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"रद्द करा"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"कार्य प्रोफाइलवर स्विच करा"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"ऑफिससाठीचे मेसेज ॲप इंस्टॉल करा"</string>
 </resources>
diff --git a/res/values-ms/strings.xml b/res/values-ms/strings.xml
index 6ff9621..18b47c2 100644
--- a/res/values-ms/strings.xml
+++ b/res/values-ms/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Panggilan Menunggu CDMA di bawah IMS Dimatikan"</string>
     <string name="updating_title" msgid="6130548922615719689">"Tetapan panggilan"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Tetapan panggilan hanya boleh diubah oleh pengguna pentadbir."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Tetapan akaun telefon hanya boleh ditukar oleh pentadbir atau pengguna di tempat kerja."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Tetapan (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Ralat tetapan panggilan"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Membaca tetapan..."</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Tidak dapat menunda panggilan."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Sambungkan ke rangkaian wayarles untuk membuat panggilan."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Dayakan panggilan Wi-Fi untuk membuat panggilan."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Lumpuhkan mod satelit untuk membuat panggilan."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Maklumat kecemasan"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Pemilik"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Ketik lagi untuk melihat maklumat"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Mod pesawat dihidupkan"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Tidak dapat mengakses kad SIM"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Rangkaian mudah alih tidak tersedia"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Mod satelit dihidupkan"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Isu dengan nombor telefon yang cuba anda dail. Kod ralat 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Tidak dapat menyelesaikan panggilan. Kod ralat 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Tidak dapat menyelesaikan panggilan. Kod ralat 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"SubId SIM data lalai:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Lebar Jalur DL (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Lebar Jalur UL (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Konfigurasi Saluran Fizikal LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Konfigurasi Saluran Fizikal:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Kadar Muat Semula Maklumat Selular:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Semua Maklumat Ukuran Selular:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Perkhidmatan Data:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Isyarat bluetooth anda lemah. Cuba beralih kepada fon pembesar suara."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Pemberitahuan Kualiti Panggilan"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Akaun SIP ditamatkan"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Tidak dapat menghantar mesej daripada profil ini"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Dasar kerja anda membenarkan anda menghantar mesej hanya daripada profil kerja"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Tidak boleh menghantar mesej daripada apl peribadi"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Organisasi anda hanya membenarkan anda menghantar mesej daripada apl kerja"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Batal"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Beralih kepada profil kerja"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Pasang apl mesej kerja"</string>
 </resources>
diff --git a/res/values-my/strings.xml b/res/values-my/strings.xml
index dea794d..8576e1f 100644
--- a/res/values-my/strings.xml
+++ b/res/values-my/strings.xml
@@ -108,21 +108,21 @@
     <string name="sum_cfu_enabled_indicator" msgid="9030139213402432776">"ခေါ်ဆိုမှုအားလုံးအား တဆင့်ထပ်ပို့နေသည်"</string>
     <string name="sum_cfu_enabled" msgid="5806923046528144526">"ခေါ်ဆိုမှုအားလုံးကို <xliff:g id="PHONENUMBER">{0}</xliff:g> သို့ ထပ်ဆင့်ပို့နေသည်"</string>
     <string name="sum_cfu_enabled_no_number" msgid="7287752761743377930">"ဖုန်းနံပါတ်မှာ မရှိပါ"</string>
-    <string name="sum_cfu_disabled" msgid="5010617134210809853">"ပိတ်ထားသည်"</string>
+    <string name="sum_cfu_disabled" msgid="5010617134210809853">"ပိတ်"</string>
     <string name="labelCFB" msgid="615265213360512768">"မအားလပ်ချိန်"</string>
     <string name="messageCFB" msgid="1958017270393563388">"ဖုန်းမအားလျှင် ပို့ရန် နံပါတ်"</string>
     <string name="sum_cfb_enabled" msgid="332037613072049492">"<xliff:g id="PHONENUMBER">{0}</xliff:g> သို့ခေါ်ဆိုမှုအား တဆင့်ထပ်ပို့နေသည်"</string>
-    <string name="sum_cfb_disabled" msgid="3589913334164866035">"ပိတ်ထားသည်"</string>
+    <string name="sum_cfb_disabled" msgid="3589913334164866035">"ပိတ်"</string>
     <string name="disable_cfb_forbidden" msgid="4831494744351633961">"သင့် ဖုန်း အလုပ်များနေစဉ် call forwarding ပြုလုပ်မှု ပယ်ဖျက်ရန် သင့် အော်ပရေတာမှ ခွင့်မပြုပါ"</string>
     <string name="labelCFNRy" msgid="3403533792248457946">"ဖုန်းမကိုင်ချိန်"</string>
     <string name="messageCFNRy" msgid="7644434155765359009">"ဖုန်းမကိုင်လျှင်ပို့ရန် နံပါတ်"</string>
     <string name="sum_cfnry_enabled" msgid="3000500837493854799">"<xliff:g id="PHONENUMBER">{0}</xliff:g> သို့ခေါ်ဆိုမှုအား တဆင့်ထပ်ပို့နေသည်"</string>
-    <string name="sum_cfnry_disabled" msgid="1990563512406017880">"ပိတ်ထားသည်"</string>
+    <string name="sum_cfnry_disabled" msgid="1990563512406017880">"ပိတ်"</string>
     <string name="disable_cfnry_forbidden" msgid="3174731413216550689">"သင့် ဖုန်း မကိုင်စဉ် call forwarding ပြုလုပ်မှု ပယ်ဖျက်ရန် သင့် အော်ပရေတာမှ ခွင့်မပြုပါ"</string>
     <string name="labelCFNRc" msgid="4163399350778066013">"ဆက်သွယ်၍ မရချိန်"</string>
     <string name="messageCFNRc" msgid="6980340731313007250">"ဖုန်းခေါ်မရလျှင် ပို့ရန် နံပါတ်"</string>
     <string name="sum_cfnrc_enabled" msgid="1799069234006073477">"<xliff:g id="PHONENUMBER">{0}</xliff:g> သို့ခေါ်ဆိုမှုအား တဆင့်ထပ်ပို့နေသည်"</string>
-    <string name="sum_cfnrc_disabled" msgid="739289696796917683">"ပိတ်ထားသည်"</string>
+    <string name="sum_cfnrc_disabled" msgid="739289696796917683">"ပိတ်"</string>
     <string name="disable_cfnrc_forbidden" msgid="775348748084726890">"သင့် ဖုန်း ဆက်သွယ်မှု လုပ်လို့မရစဉ် call forwarding ပြုလုပ်မှု ပယ်ဖျက်ရန် သင့် အော်ပရေတာမှ ခွင့်မပြုပါ"</string>
     <string name="registration_cf_forbidden" msgid="4386482610771190420">"သင်၏ ဝန်ဆောင်မှုပေးသူသည် အဝင်ဖုန်းကို ဆက်ပို့ပေးခြင်းအား ပံ့ပိုးမထားပါ။"</string>
     <string name="cdma_call_waiting" msgid="4565070960879673216">"အဝင်ဖုန်း စောင့်ဆိုင်းခြင်းကို ဖွင့်မလား။"</string>
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS အောက်ရှိ CDMA အဝင်ဖုန်း စောင့်ဆိုင်းခြင်းကို ပိတ်ထားသည်"</string>
     <string name="updating_title" msgid="6130548922615719689">"ဖုန်းခေါ်ဆိုခြင်း ဆက်တင်များ"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"ခေါ်ဆိုမှုကြိုတင်ပြင်ဆင်ချက်များကို ကြီးကြပ်သူသာလျှင် ပြောင်းလဲနိုင်သည်။"</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"ဖုန်းအကောင့်ဆက်တင်များကို စီမံခန့်ခွဲသူ (သို့) ဝန်ထမ်းကသာ ပြောင်းနိုင်သည်။"</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"ဆက်တင်များ ( <xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g> )"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"ခေါ်ဆိုမှုဆက်တင်အမှား"</string>
     <string name="reading_settings" msgid="1605904432450871183">"ဆက်တင်များကို ဖတ်နေပါသည်…"</string>
@@ -178,7 +179,7 @@
     <string name="empty_networks_list" msgid="9216418268008582342">"ကွန်ယက်များ မတွေ့ပါ"</string>
     <string name="network_query_error" msgid="3862515805115145124">"ကွန်ရက် ရှာမတွေ့ပါ။ ထပ်လုပ်ကြည့်ပါ။"</string>
     <string name="register_on_network" msgid="4194770527833960423">"<xliff:g id="NETWORK">%s</xliff:g> တွင် မှတ်ပုံတင်နေခြင်း…"</string>
-    <string name="not_allowed" msgid="8541221928746104798">"ဒီကွန်ယက်ကို ဆက်သွယ်ရန် သင့်ရဲ့ ဆင်းမ်ကဒ်မှ ခွင့်မပြုပါ"</string>
+    <string name="not_allowed" msgid="8541221928746104798">"ဒီကွန်ယက်ကို ဆက်သွယ်ရန် သင့်ရဲ့ ဆင်းမ်ကတ်မှ ခွင့်မပြုပါ"</string>
     <string name="connect_later" msgid="1950138106010005425">"ကွန်ယက်ကို ဆက်သွယ်လို့မရပါ။ နောင်မှ ပြန်ကြိုးစားပါ"</string>
     <string name="registration_done" msgid="5337407023566953292">"ကွန်ယက်ပေါ်တွင် မှတ်ပုံတင်ထားခြင်း"</string>
     <string name="already_auto" msgid="8607068290733079336">"အလိုအလျောက် ရွေးချယ်မှုထဲတွင် ပါပြီးသားဖြစ်သည်။"</string>
@@ -479,11 +480,11 @@
     <string name="fdn_invalid_number" msgid="9067189814657840439">"နံပါတ်တွင် ဂဏန်းအလုံးရေ <xliff:g id="FDN_NUMBER_LIMIT_LENGTH">%d</xliff:g> ကျော်နေပါသဖြင့် FDN ကို အပ်ဒိတ်လုပ်၍ မရပါ။"</string>
     <string name="pin2_or_fdn_invalid" msgid="7542639487955868181">"FDN ပြောင်းလဲမှု မဖြစ်ပါ။ ပင်နံပါတ် ၂ မှားယွင်းခြင်း သို့မဟုတ် ဖုန်းနံပါတ်ကို ငြင်းဖယ်ခံရခြင်း တစ်ခုခုဖြစ်ပါသည်"</string>
     <string name="fdn_failed" msgid="216592346853420250">"FDN လုပ်ဆောင်ချက် မအောင်မြင်ပါ"</string>
-    <string name="simContacts_emptyLoading" msgid="4989040293858675483">"ဆင်းမ်ကဒ်မှ ဖတ်နေပါသည်..."</string>
+    <string name="simContacts_emptyLoading" msgid="4989040293858675483">"ဆင်းမ်ကတ်မှ ဖတ်နေပါသည်..."</string>
     <string name="simContacts_empty" msgid="1135632055473689521">"ဆင်းမ်ကဒ်ထဲတွင် လိပ်စာများ မရှိပါ"</string>
     <string name="simContacts_title" msgid="2714029230160136647">"ထည့်ယူရန် လိပ်စာများ ရွေးပါ"</string>
     <string name="simContacts_airplaneMode" msgid="4654884030631503808">"SIM ကဒ်မှ အဆက်အသွယ်များ သွင်းယူရန် လေယာဉ်ပျံမုဒ် ပိတ်ထားပါ။"</string>
-    <string name="enable_pin" msgid="967674051730845376">"ဆင်းမ် ပင်နံပါတ်ကို ပယ်ဖျက်၊ပြုလုပ်ရန်"</string>
+    <string name="enable_pin" msgid="967674051730845376">"ဆင်းမ်ကတ် ပင်နံပါတ်ကို ပယ်ဖျက်၊ပြုလုပ်ရန်"</string>
     <string name="change_pin" msgid="3657869530942905790">"ဆင်းမ်ကတ် ပင်နံပါတ်ပြောင်းရန်"</string>
     <string name="enter_pin_text" msgid="3182311451978663356">"ဆင်းမ်ကတ် ပင်နံပါတ်:"</string>
     <string name="oldPinLabel" msgid="8618515202411987721">"ပင်နံပါတ် အဟောင်း"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"ခေါ်ဆိုမှုများကို ကိုင်ထား၍မရပါ။"</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"ဖုန်းခေါ်ရန် ကြိုးမဲကွန်ယက်တစ်ခုသို့ ချိတ်ဆက်ပါ။"</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"ဖုန်းဆက်ရန် Wi-Fi ခေါ်ဆိုခြင်းကို ဖွင့်ပါ။"</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"ဖုန်းခေါ်ရန် ဂြိုဟ်တုမုဒ် ပိတ်ပါ။"</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"အရေးပေါ် အချက်အလက်"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"ပိုင်ရှင်"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"အချက်အလက်ကြည့်ရန် ထပ်နှိပ်ပါ"</string>
@@ -588,7 +590,7 @@
     <string name="onscreenVideoCallText" msgid="1743992456126258698">"ဗီဒီယိုခေါ်ဆိုမှု"</string>
     <string name="importSimEntry" msgid="3892354284082689894">"ထည့်ရန်"</string>
     <string name="importAllSimEntries" msgid="2628391505643564007">"အားလုံးကို ထည့်သွင်းပါ"</string>
-    <string name="importingSimContacts" msgid="4995457122107888932">"ဆင်းမ်ကဒ်မှ လိပ်စာများအား ထည့်ပါ"</string>
+    <string name="importingSimContacts" msgid="4995457122107888932">"ဆင်းမ်ကတ်မှ လိပ်စာများအား ထည့်ပါ"</string>
     <string name="importToFDNfromContacts" msgid="5068664870738407341">"လိပ်စားများထဲမှ ထည့်ပါ"</string>
     <string name="singleContactImportedMsg" msgid="3619804066300998934">"တင်သွင်းခဲ့သည့် အဆက်အသွယ်"</string>
     <string name="failedToImportSingleContactMsg" msgid="228095510489830266">"အဆက်အသွယ်ကို တင်သွင်း မရခဲ့"</string>
@@ -663,7 +665,7 @@
     <string name="voicemail_set_pin_dialog_title" msgid="7005128605986960003">"ပင်နံပါတ်သတ်မှတ်ရန်"</string>
     <string name="voicemail_change_pin_dialog_title" msgid="4633077715231764435">"ပင်နံပါတ်ပြောင်းပါ"</string>
     <string name="preference_category_ringtone" msgid="8787281191375434976">"ဖုန်းမြည်သံ &amp; တုန်ခါသံ"</string>
-    <string name="pstn_connection_service_label" msgid="9200102709997537069">"တပ်ဆင်ပြီး ဆင်းမ် ကဒ်များ"</string>
+    <string name="pstn_connection_service_label" msgid="9200102709997537069">"တပ်ဆင်ပြီး ဆင်းမ်ကတ် ကဒ်များ"</string>
     <string name="enable_video_calling_title" msgid="7246600931634161830">"ဗီဒီယို ခေါ်ဆိုမှုများကို ဖွင့်ထားရန်"</string>
     <string name="enable_video_calling_dialog_msg" msgid="7141478720386203540">"ဗီဒီယိုခေါ်ဆိုမှု ဖွင့်လိုပါက အဆင့်မြှင့်ထားသည့် 4G LTE မုဒ်ကို ကွန်ရက်ဆက်တင်များတွင် ဖွင့်ရပါမည်။"</string>
     <string name="enable_video_calling_dialog_settings" msgid="8697890611305307110">"ကွန်ရက် ဆက်တင်များ"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"လေယာဉ်ပျံမုဒ်ကို ဖွင့်ထားပါသည်"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"ဆင်းမ်ကဒ်ကို ဝင်၍ မရပါ"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"မိုဘိုင်း ကွန်ရက် မရှိပါ"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"ဂြိုဟ်တုမုဒ် ဖွင့်ထားသည်"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"သင်ခေါ်ဆိုနေသော ဖုန်းနံပါတ်တွင် လွဲချော်မှု ရှိပါသည်။ အမှားကုဒ် ၁။"</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"ခေါ်ဆိုမှုကို မပြုလုပ်နိုင်ပါ။ အမှားကုဒ် ၃။"</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"ခေါ်ဆိုမှုကို မပြုလုပ်နိုင်ပါ။ အမှားကုဒ် ၆။"</string>
@@ -764,7 +767,7 @@
     <string name="clh_callFailed_interworking_unspecified_txt" msgid="7969686413930847182">"ခေါ်ဆိုမှုကို မပြုလုပ်နိုင်ပါ။ အမှားကုဒ် ၁၂၇။"</string>
     <string name="labelCallBarring" msgid="4180377113052853173">"ခေါ်ဆိုမှုကို ပိတ်ပင်ရန်"</string>
     <string name="sum_call_barring_enabled" msgid="5184331188926370824">"ဖွင့်"</string>
-    <string name="sum_call_barring_disabled" msgid="5699448000600153096">"ပိတ်ထားသည်"</string>
+    <string name="sum_call_barring_disabled" msgid="5699448000600153096">"ပိတ်"</string>
     <string name="call_barring_baoc" msgid="7400892586336429326">"အထွက်ခေါ်ဆိုမှုအားလုံး"</string>
     <string name="call_barring_baoc_enabled" msgid="3131509193386668182">"အထွက်ခေါ်ဆိုမှုအားလုံး ပိတ်ထားခြင်းကို ပယ်ဖျက်မလား။"</string>
     <string name="call_barring_baoc_disabled" msgid="8534224684091141509">"အထွက်ခေါ်ဆိုမှုအားလုံးကို ပိတ်မလား။"</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"မူရင်း ဒေတာဆင်းမ်ကဒ်အတွက် Id အခွဲ −"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL မြန်နှုန်း (kbps)−"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL မြန်နှုန်း (kbps)−"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE ရုပ်ပိုင်းဆိုင်ရာ ချန်နယ်စီစဉ်သတ်မှတ်မှု−"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"ရုပ်ပိုင်းဆိုင်ရာ ချန်နယ်စီစဉ်သတ်မှတ်ချက်များ-"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"ဆဲလ်လူလာ အချက်အလက် ရယူမှုနှုန်း −"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"ဆဲလ်လူလာတိုင်းတာမှု အချက်အလက် အားလုံး −"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"ဒေတာ ဝန်ဆောင်မှု −"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"သင်၏ ဘလူးတုသ်လိုင်းဆွဲအား မကောင်းပါ။ စပီကာဖုန်းသို့ ပြောင်းကြည့်ပါ။"</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"ခေါ်ဆိုမှုအရည်အသွေး အကြောင်းကြားချက်"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"ရပ်ဆိုင်းထားသော SIP အကောင့်များ"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"ဤပရိုဖိုင်မှ မက်ဆေ့ဂျ်ပို့၍ မရပါ"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"သင့်အလုပ်ခွင်မူဝါဒသည် အလုပ်ပရိုဖိုင်မှသာ မက်ဆေ့ဂျ်ပို့ခွင့်ပြုသည်"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"ကိုယ်ရေးသုံးအက်ပ်မှ မက်ဆေ့ဂျ်ပို့၍မရပါ"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"သင့်အဖွဲ့အစည်းသည် သင့်အား အလုပ်သုံးအက်ပ်များမှသာ မက်ဆေ့ဂျ်ပို့ခွင့်ပြုသည်"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"မလုပ်တော့"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"အလုပ်ပရိုဖိုင်သို့ ပြောင်းရန်"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"အလုပ်သုံး မက်ဆေ့ဂျ်ပို့ရန်အက်ပ် ထည့်သွင်းရန်"</string>
 </resources>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 700221e..fb8a4fe 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA samtale venter under IMS er av"</string>
     <string name="updating_title" msgid="6130548922615719689">"Samtaleinnstillinger"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Anropsinnstillinger kan bare endres av administratoren."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Kontoinnstillingene for telefonen kan bare endres av administratoren eller jobbrukeren."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Innstillinger (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Feil ved samtaleinnstillinger"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Leser innstillingene …"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Kan ikke sette samtaler på vent."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Koble til et trådløst nettverk for å ringe."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Slå på telefonanrop via Wifi for å ringe."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Slå av satellittmodus for å ringe."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Nødinformasjon"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Eier"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Trykk på nytt for å se informasjon"</string>
@@ -692,7 +694,7 @@
     <string name="change_pin_enter_new_pin_header" msgid="4739465616733486118">"Angi en ny PIN-kode"</string>
     <string name="change_pin_enter_new_pin_hint" msgid="2326038476516364210">"PIN-koden må bestå av <xliff:g id="MIN">%1$d</xliff:g>-<xliff:g id="MAX">%2$d</xliff:g> sifre."</string>
     <string name="change_pin_confirm_pin_header" msgid="2606303906320705726">"Bekreft PIN-koden"</string>
-    <string name="change_pin_confirm_pins_dont_match" msgid="305164501222587215">"PIN-kodene stemmer ikke overens"</string>
+    <string name="change_pin_confirm_pins_dont_match" msgid="305164501222587215">"PIN-kodene er ikke like"</string>
     <string name="change_pin_succeeded" msgid="2504705600693014403">"PIN-koden for talemeldinger ble oppdatert"</string>
     <string name="change_pin_system_error" msgid="7772788809875146873">"Kan ikke angi PIN-kode"</string>
     <string name="mobile_data_status_roaming_turned_off_subtext" msgid="6840673347416227054">"Data-roaming er slått av"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Flymodus er på"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Får ikke tilgang til SIM-kortet"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Mobilnettverket er ikke tilgjengelig"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Satellittmodus er på"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Det er noe galt med telefonnummeret du prøver å ringe. Feilkode: 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Kunne ikke ringe. Feilkode: 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Kunne ikke ringe. Feilkode: 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Under-ID for standard-SIM-kort for data:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Båndbredde for nedlasting (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Båndbredde for opplasting (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Konfigurering av fysisk LTE-kanal:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Konfigurasjoner for fysiske kanaler:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Oppdateringsfrekvens for celleinformasjon:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"All informasjon for cellemåling:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Datatjeneste:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Bluetooth-signalet er svakt. Prøv å bytte til høyttaleren."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Varsel om anropskvalitet"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Avviklede SIP-kontoer"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Kan ikke sende meldingen fra denne profilen"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"I henhold til jobbreglene dine kan du bare sende meldinger fra jobbprofilen"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Kan ikke sende meldinger fra en personlig app"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Organisasjonen din tillater bare at du sender meldinger fra jobbapper"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Avbryt"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Bytt til jobbprofilen"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Installer en jobbmeldingsapp"</string>
 </resources>
diff --git a/res/values-ne/strings.xml b/res/values-ne/strings.xml
index 66c41c9..1b399ab 100644
--- a/res/values-ne/strings.xml
+++ b/res/values-ne/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS अन्तर्गत CDMA कल प्रतीक्षाको सुविधा निष्क्रिय छ"</string>
     <string name="updating_title" msgid="6130548922615719689">"कल सेटिङहरू"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"कल सेटिङहरू केवल प्रशासकीय प्रयोगकर्ताद्वारा परिवर्तन गर्न सकिन्छ।"</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"एड्मिन वा कार्य प्रोफाइलका प्रयोगकर्ता मात्र फोनमा लिंक गरिएको खाताका सेटिङ बदल्न सक्नुहुन्छ।"</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"सेटिङहरू (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"कल सेटिङमा त्रुटि"</string>
     <string name="reading_settings" msgid="1605904432450871183">"सेटिङहरू पढ्दै..."</string>
@@ -510,7 +511,7 @@
     <string name="invalidPin2" msgid="6467957903056379343">"4 देखि 8 नम्बरको एक PIN2 प्रविष्टि गर्नुहोस्।"</string>
     <string name="invalidPuk2" msgid="713729511903849544">"8 नम्बरको एक PUK2 प्रविष्टि गर्नुहोस्।"</string>
     <string name="pin2_changed" msgid="5710551850481287821">"PIN2 अद्यावधिक गरियो"</string>
-    <string name="label_puk2_code" msgid="2852217004288085562">"PUK2 कोड प्रविष्टि गर्नुहोस्"</string>
+    <string name="label_puk2_code" msgid="2852217004288085562">"PUK2 कोड हाल्नुहोस्"</string>
     <string name="fdn_enable_puk2_requested" msgid="5793652792131588041">"पासवर्ड गलत छ। PIN2 अहिले ब्लक गरिएको छ। पिन 2 परिवर्तन, फेरि प्रयास गर्नुहोस्।"</string>
     <string name="puk2_requested" msgid="6992374450720307514">"पासवर्ड गलत छ। सिम अब ब्लक गरिएको छ। PUK2 प्रविष्टि गर्नुहोस्।"</string>
     <string name="puk2_blocked" msgid="3131139031779319911">"PUK2 स्थायी रूपमा रोक्का गरियो।"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"कल सञ्चालन गर्न सकिँदैन।"</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"एक कल गर्न एक ताररहितको सञ्जालमा कनेक्ट गर्नुहोस्।"</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"कल गर्नका लागि Wi-Fi कलिङ सक्षम गर्नुहोस्।"</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"कल गर्न स्याटेलाइट मोड अफ गर्नुहोस्।"</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"आपत्‌कालीन जानकारी"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"मालिक"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"जानकारी हेर्न पुनः ट्याप गर्नुहोस्"</string>
@@ -618,7 +620,7 @@
     <string name="ota_hfa_activation_dialog_message" msgid="7921718445773342996">"फोनले तपाईँको मोबाइल डेटा सेवा सक्रिय पार्दै छ। \n\nयसले ५ मिनेटसम्म समय लिन सक्छ।"</string>
     <string name="ota_skip_activation_dialog_title" msgid="7666611236789203797">"सक्रिया गर्ने काम छोड्ने हो?"</string>
     <string name="ota_skip_activation_dialog_message" msgid="6691722887019708713">"यदि तपाईं सक्रियता छोड्नुहुन्छ भने तपाईं कल वा मोबाइल डेटा नेटवर्क (तपाईं Wi-Fi नेटवर्क जडान गर्न सक्नु हुन्छ) बाट जडान गर्न सक्नु हुन्छ। तपाईंले आफ्नो फोनलाई सक्रिय गर्ने बेलासम्म तपाईं यसलाई हरेक पटक खोल्ने गर्नुहोस्।"</string>
-    <string name="ota_skip_activation_dialog_skip_label" msgid="5908029466817825633">"छोड्नुहोस्"</string>
+    <string name="ota_skip_activation_dialog_skip_label" msgid="5908029466817825633">"स्किप गर्नुहोस्"</string>
     <string name="ota_activate" msgid="7939695753665438357">"सक्रिय बनाउनुहोस्"</string>
     <string name="ota_title_activate_success" msgid="1272135024761004889">"फोन सक्रिय भएको छ।"</string>
     <string name="ota_title_problem_with_activation" msgid="7019745985413368726">"सक्रिय पार्दा समस्या"</string>
@@ -688,7 +690,7 @@
     <string name="change_pin_cancel_label" msgid="2301711566758827936">"रद्द गर्नुहोस्"</string>
     <string name="change_pin_ok_label" msgid="6861082678817785330">"ठिक छ"</string>
     <string name="change_pin_enter_old_pin_header" msgid="853151335217594829">"आफ्नो पुरानो PIN को पुष्टि गर्नुहोस्"</string>
-    <string name="change_pin_enter_old_pin_hint" msgid="8801292976275169367">"जारी राख्नका लागि आफ्नो भ्वाइस मेलको PIN प्रविष्टि गर्नुहोस्।"</string>
+    <string name="change_pin_enter_old_pin_hint" msgid="8801292976275169367">"जारी राख्नका लागि आफ्नो भ्वाइस मेलको PIN हाल्नुहोस्।"</string>
     <string name="change_pin_enter_new_pin_header" msgid="4739465616733486118">"एउटा नयाँ PIN सेट गर्नुहोस्"</string>
     <string name="change_pin_enter_new_pin_hint" msgid="2326038476516364210">"PIN <xliff:g id="MIN">%1$d</xliff:g>-<xliff:g id="MAX">%2$d</xliff:g> अङ्कको हुनु पर्छ।"</string>
     <string name="change_pin_confirm_pin_header" msgid="2606303906320705726">"तपाईँको PIN को पुष्टि गर्नुहोस्"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"हवाइजहाज मोड सक्रिय छ"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"SIM कार्डमाथि पहुँच राख्न सकिएन"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"मोबाइल नेटवर्क उपलब्ध छैन"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"स्याटेलाइट मोड अन छ"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"तपाईंले डायल गर्न खोजिरहनुभएको नम्बरमा समस्या छ। त्रुटिको कोड: १।"</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"कल पूरा गर्न सकिएन। त्रुटिको कोड: ३।"</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"कल पूरा गर्न सकिएन। त्रुटिको कोड: ६।"</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"डिफल्ट डेटा SIM को SubId:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL ब्यान्डविथ (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL व्यान्डविथ (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE को भौतिक च्यानलको कन्फिगरेसन:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"भौतिक च्यानलका कन्फिगुरेसनहरू:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"सेलसम्बन्धी जानकारीलाई पुनः ताजा गरिने दर:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"सेलको मापनसम्बन्धी सबै जानकारी:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"डेटा सम्बन्धी सेवा:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"ब्लुटुथको सिग्नल कमजोर छ। स्पिकरफोन प्रयोग गरी हेर्नुहोस्।"</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"कलको गुणस्तरसम्बन्धी सूचना"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"चल्तीबाट हटाइएका SIP खाताहरू"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"यो प्रोफाइलबाट म्यासेज पठाउन सकिँदैन"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"तपाईंको कामसम्बन्धी नीतिअनुसार कार्य प्रोफाइलबाट मात्र म्यासेज पठाउन सकिन्छ"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"व्यक्तिगत एपमार्फत म्यासेज पठाउन मिल्दैन"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"तपाईंको सङ्गठनले तपाईंलाई केवल कामसम्बन्धी एपहरूमार्फत म्यासेज पठाउने अनुमति दिएको छ"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"रद्द गर्नुहोस्"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"कार्य प्रोफाइल प्रयोग गर्नुहोस्"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"कामसम्बन्धी म्यासेजिङ एप इन्स्टल गर्नुहोस्"</string>
 </resources>
diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml
index 8ccd4c3..da89764 100644
--- a/res/values-nl/strings.xml
+++ b/res/values-nl/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA-wisselgesprek onder IMS uit"</string>
     <string name="updating_title" msgid="6130548922615719689">"Gespreksinstellingen"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Oproepinstellingen kunnen alleen worden gewijzigd door de beheerder."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Alleen de beheerder of zakelijke gebruiker kan de accountinstellingen wijzigen."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Instellingen (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Fout met oproepinstellingen"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Instellingen lezen..."</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Kan gesprekken niet in de wacht zetten."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Maak verbinding met een draadloos netwerk om te bellen."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Zet bellen via wifi aan om te bellen."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Zet de satellietmodus uit om te bellen."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Noodinformatie"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Eigenaar"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Tik nogmaals om informatie te bekijken"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Vliegtuigmodus staat aan"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Kan geen toegang tot simkaart krijgen"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Mobiel netwerk niet beschikbaar"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Satellietmodus staat aan"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Probleem met het telefoonnummer dat je probeert te bellen. Foutcode 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Kan gesprek niet voltooien. Foutcode 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Kan gesprek niet voltooien. Foutcode 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"SubId van standaard simkaart voor data:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL-bandbreedte (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL-bandbreedte (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Fysieke LTE-kanaalconfiguratie:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Configuraties voor fysieke kanalen:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Vernieuwingsfrequentie van mobiele data:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Alle mobiele meetgegevens:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Gegevensservice:"</string>
@@ -923,12 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Het bluetooth-signaal is zwak. Schakel over naar bellen op luidspreker."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Melding over gesprekskwaliteit"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Beëindigde SIP-accounts"</string>
-    <!-- no translation found for send_from_work_profile_title (9201528838448432473) -->
-    <skip />
-    <!-- no translation found for send_from_work_profile_description (5002701841936861636) -->
-    <skip />
-    <!-- no translation found for send_from_work_profile_cancel (177746511030381711) -->
-    <skip />
-    <!-- no translation found for send_from_work_profile_action_str (6892775562934243337) -->
-    <skip />
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Kan geen berichten sturen vanuit een app voor persoonlijke doeleinden"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Je organisatie staat je alleen toe om berichten te sturen vanuit werk-apps"</string>
+    <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Annuleren"</string>
+    <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Overschakelen naar werkprofiel"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Werk-app voor berichten installeren"</string>
 </resources>
diff --git a/res/values-or/strings.xml b/res/values-or/strings.xml
index 8dd4ea2..5eea570 100644
--- a/res/values-or/strings.xml
+++ b/res/values-or/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMSରେ CDMA \'କଲ୍ ୱେଟିଂ\' ସୁବିଧା ବନ୍ଦ ଅଛି"</string>
     <string name="updating_title" msgid="6130548922615719689">"କଲ ସେଟିଂସ"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"କଲ ସେଟିଂସକୁ କେବଳ ଆଡମିନ ୟୁଜର ବଦଳାଇପାରିବେ।"</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"ଫୋନ ଆକାଉଣ୍ଟ ସେଟିଂସ କେବଳ ଆଡମିନ କିମ୍ବା ୱାର୍କ ୟୁଜରଙ୍କ ଦ୍ୱାରା ପରିବର୍ତ୍ତନ କରାଯାଇପାରିବ।"</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"ସେଟିଙ୍ଗ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"କଲ୍ ସେଟିଙ୍ଗରେ ତ୍ରୁଟି"</string>
     <string name="reading_settings" msgid="1605904432450871183">"ସେଟିଂସକୁ ପଢ଼ାଯାଉଛି…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"କଲ୍‍କୁ ହୋଲ୍ଡ କରାଯାଇପାରିବ ନାହିଁ।"</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"ଗୋଟିଏ କଲ୍ କରିବା ପାଇଁ ଏକ ତାରବିହୀନ ନେଟ୍‌ୱର୍କ ସହ କନେକ୍ଟ କରନ୍ତୁ।"</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"ଗୋଟିଏ କଲ୍ କରିବା ପାଇଁ ୱାଇ-ଫାଇ କଲିଙ୍ଗକୁ ସକ୍ଷମ କରନ୍ତୁ।"</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"ଏକ କଲ କରିବା ପାଇଁ ସେଟେଲାଇଟ ମୋଡକୁ ଅକ୍ଷମ କରନ୍ତୁ।"</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"ଜରୁରୀକାଳୀନ ସୂଚନା"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"ମାଲିକ"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"ସୂଚନା ଦେଖିବାକୁ ପୁଣିଥରେ ଟାପ୍‍ କରନ୍ତୁ"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"ଏୟାରପ୍ଲେନ୍ ମୋଡ୍ ଚାଲୁ ଅଛି"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"SIM କାର୍ଡକୁ ଆକ୍ସେସ୍ କରିହେଉନାହିଁ"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"ମୋବାଇଲ୍ ନେଟ୍‌ୱର୍କ ଉପଲବ୍ଧ ଅଛି"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"ସେଟେଲାଇଟ ମୋଡ ଚାଲୁ ଅଛି"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"ଆପଣ ଡାଏଲ୍ କରିବା ପାଇଁ ଚେଷ୍ଟା କରୁଥିବା ଫୋନ୍ ନମ୍ବର୍‌ରେ ସମସ୍ୟା ଅଛି। ତ୍ରୁଟି କୋଡ୍ 1।"</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"କଲ୍ ସମ୍ପୂର୍ଣ୍ଣ କରିହେଲା ନାହିଁ। ତ୍ରୁଟି କୋଡ୍ 3।"</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"କଲ୍ ସମ୍ପୂର୍ଣ୍ଣ କରିହେଲା ନାହିଁ। ତ୍ରୁଟି କୋଡ୍ 6।"</string>
@@ -850,7 +853,7 @@
     <string name="radio_info_ims_reg_status" msgid="25582845222446390">"IMS ରେଜିଷ୍ଟ୍ରସନ୍: <xliff:g id="STATUS">%1$s</xliff:g>\nଭଏସ୍ ଓଭର୍ LTE: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nଭଏସ୍ ଓଭର୍ ୱାଇ-ଫାଇ: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nଭିଡିଓ କଲିଙ୍ଗ: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT ଇଣ୍ଟର୍‌ଫେସ୍: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
     <string name="radioInfo_service_in" msgid="45753418231446400">"ସେବାରେ ଅଛି"</string>
     <string name="radioInfo_service_out" msgid="287972405416142312">"ଏବେ କାମ କରୁନାହିଁ"</string>
-    <string name="radioInfo_service_emergency" msgid="4763879891415016848">"କେବଳ ଜରୁରୀକାଳୀନ କଲ୍"</string>
+    <string name="radioInfo_service_emergency" msgid="4763879891415016848">"କେବଳ ଜରୁରୀକାଳୀନ କଲ"</string>
     <string name="radioInfo_service_off" msgid="3456583511226783064">"ରେଡିଓ ବନ୍ଦ କରନ୍ତୁ"</string>
     <string name="radioInfo_roaming_in" msgid="3156335577793145965">"ରୋମିଂ"</string>
     <string name="radioInfo_roaming_not" msgid="1904547918725478110">"ରୋମିଂରେ ନାହିଁ"</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"ଡିଫଲ୍ଟ ଡାଟା SIMର SubId:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL ବ୍ୟାଣ୍ଡୱିଡଥ୍ (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL ବ୍ୟାଣ୍ଡୱିଡଥ୍ (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE ଫିଜିକାଲ୍ ଚ୍ୟାନେଲ୍ କନ୍‌ଫିଗରେସନ୍:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"ଫିଜିକାଲ ଚେନେଲ କନଫିଗରେସନଗୁଡ଼ିକ:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"ସେଲ୍ ସୂଚନା ରିଫ୍ରେସ୍ ଦର:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"ସମସ୍ତ ସେଲ୍ ପରିମାପ ସୂଚନା:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"ଡାଟା ସେବା:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"ଆପଣଙ୍କ ବ୍ଲୁଟୁଥ୍ ସିଗନାଲ୍ ଦୁର୍ବଳ ଅଛି। ସ୍ପିକରଫୋନକୁ ସ୍ୱିଚ୍ କରିବା ପାଇଁ ଚେଷ୍ଟା କରନ୍ତୁ।"</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"କଲ୍ ଗୁଣବତ୍ତା ବିଜ୍ଞପ୍ତି"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"ଅସମର୍ଥିତ SIP ଆକାଉଣ୍ଟଗୁଡ଼ିକ"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"ଏହି ପ୍ରୋଫାଇଲରୁ ମେସେଜ ପଠାଯାଇପାରିବ ନାହିଁ"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"ଆପଣଙ୍କ ୱାର୍କ ନୀତି ଆପଣଙ୍କୁ କେବଳ ୱାର୍କ ପ୍ରୋଫାଇଲରୁ ମେସେଜ ପଠାଇବାକୁ ଅନୁମତି ଦିଏ"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"ଏକ ବ୍ୟକ୍ତିଗତ ଆପରୁ ମେସେଜ କରିପାରିବେ ନାହିଁ"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"ଆପଣଙ୍କ ସଂସ୍ଥା ଆପଣଙ୍କୁ କେବଳ ୱାର୍କ ଆପ୍ସରୁ ମେସେଜ ପଠାଇବା ପାଇଁ ଅନୁମତି ଦିଏ"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"ବାତିଲ କରନ୍ତୁ"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"ୱାର୍କ ପ୍ରୋଫାଇଲକୁ ସ୍ୱିଚ କରନ୍ତୁ"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"ଏକ ୱାର୍କ ମେସେଜ ଆପ ଇନଷ୍ଟଲ କରନ୍ତୁ"</string>
 </resources>
diff --git a/res/values-pa/strings.xml b/res/values-pa/strings.xml
index a779567..8dd6abd 100644
--- a/res/values-pa/strings.xml
+++ b/res/values-pa/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS ਦੇ ਅਧੀਨ CDMA ਕਾਲ ਦੀ ਉਡੀਕ ਵਾਲੀ ਸੁਵਿਧਾ ਬੰਦ ਹੈ"</string>
     <string name="updating_title" msgid="6130548922615719689">"ਕਾਲ ਸੈਟਿੰਗਾਂ"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"ਕਾਲ ਸੈਟਿੰਗਾਂ ਸਿਰਫ਼ ਪ੍ਰਸ਼ਾਸਕ ਵਰਤੋਂਕਾਰ ਵੱਲੋਂ ਹੀ ਬਦਲੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ।"</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"ਫ਼ੋਨ ਦੀਆਂ ਖਾਤਾ ਸੈਟਿੰਗਾਂ ਸਿਰਫ਼ ਪ੍ਰਸ਼ਾਸਕ ਜਾਂ ਕਾਰਜ-ਸਥਾਨ ਵਰਤੋਂਕਾਰ ਵੱਲੋਂ ਹੀ ਬਦਲੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ।"</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"ਸੈਟਿੰਗਾਂ (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"ਕਾਲ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਗੜਬੜ"</string>
     <string name="reading_settings" msgid="1605904432450871183">"ਸੈਟਿੰਗਾਂ ਪੜ੍ਹ ਰਿਹਾ ਹੈ…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"ਕਾਲਾਂ ਹੋਲਡ ਨਹੀਂ ਕੀਤੀਆਂ ਜਾ ਸਕਦੀਆਂ ਹਨ।"</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"ਇੱਕ ਕਾਲ ਕਰਨ ਲਈ ਇੱਕ ਵਾਇਰਲੈਸ ਨੈਟਵਰਕ ਨਾਲ ਕਨੈਕਟ ਕਰੋ।"</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"ਇੱਕ ਕਾਲ ਕਰਨ ਲਈ Wi-Fi ਕਾਲਿੰਗ ਯੋਗ ਬਣਾਓ।"</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"ਕਾਲ ਕਰਨ ਲਈ ਉਪਗ੍ਰਹਿ ਮੋਡ ਬੰਦ ਕਰੋ।"</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"ਸੰਕਟਕਾਲੀਨ ਜਾਣਕਾਰੀ"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"ਮਾਲਕ"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"ਜਾਣਕਾਰੀ ਦੇਖਣ ਲਈ ਦੁਬਾਰਾ ਟੈਪ ਕਰੋ"</string>
@@ -692,7 +694,7 @@
     <string name="change_pin_enter_new_pin_header" msgid="4739465616733486118">"ਇੱਕ ਨਵਾਂ PIN ਸੈੱਟ ਕਰੋ"</string>
     <string name="change_pin_enter_new_pin_hint" msgid="2326038476516364210">"PIN ਲਾਜ਼ਮੀ ਤੌਰ \'ਤੇ <xliff:g id="MIN">%1$d</xliff:g>-<xliff:g id="MAX">%2$d</xliff:g> ਅੰਕਾਂ ਦਾ ਹੋਣਾ ਚਾਹੀਦਾ ਹੈ।"</string>
     <string name="change_pin_confirm_pin_header" msgid="2606303906320705726">"ਆਪਣੇ PIN ਦੀ ਪੁਸ਼ਟੀ ਕਰੋ"</string>
-    <string name="change_pin_confirm_pins_dont_match" msgid="305164501222587215">"PIN ਮੇਲ ਨਹੀਂ ਖਾਂਦੇ"</string>
+    <string name="change_pin_confirm_pins_dont_match" msgid="305164501222587215">"ਪਿੰਨ ਮੇਲ ਨਹੀਂ ਖਾਂਦੇ"</string>
     <string name="change_pin_succeeded" msgid="2504705600693014403">"ਵੌਇਸਮੇਲ PIN ਅੱਪਡੇਟ ਕੀਤਾ ਗਿਆ"</string>
     <string name="change_pin_system_error" msgid="7772788809875146873">"PIN ਸਥਾਪਤ ਕਰਨ ਦੇ ਅਯੋਗ"</string>
     <string name="mobile_data_status_roaming_turned_off_subtext" msgid="6840673347416227054">" ਡਾਟਾ  ਰੋਮਿੰਗ ਬੰਦ ਹੈ"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"ਹਵਾਈ-ਜਹਾਜ਼ ਮੋਡ ਚਾਲੂ ਹੈ"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"ਸਿਮ ਕਾਰਡ ਤੱਕ ਪਹੁੰਚ ਨਹੀਂ ਕਰ ਸਕਦੇ"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"ਮੋਬਾਈਲ ਨੈੱਟਵਰਕ ਉਪਲਬਧ ਨਹੀਂ"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"ਉਪਗ੍ਰਹਿ ਮੋਡ ਚਾਲੂ ਹੈ"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"ਜਿਸ ਫ਼ੋਨ ਨੰਬਰ ਨੂੰ ਤੁਸੀਂ ਡਾਇਲ ਕਰਨ ਦੀ ਕੋਸ਼ਿਸ਼ ਕਰ ਰਹੇ ਹੋ ਉਸ ਵਿੱਚ ਸਮੱਸਿਆ ਹੈ। ਗੜਬੜ ਕੋਡ 1 ਹੈ।"</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"ਕਾਲ ਪੂਰੀ ਨਹੀਂ ਹੋ ਸਕੀ। ਗੜਬੜ ਕੋਡ 3 ਹੈ।"</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"ਕਾਲ ਪੂਰੀ ਨਹੀਂ ਹੋ ਸਕੀ। ਗੜਬੜ ਕੋਡ 6 ਹੈ।"</string>
@@ -847,7 +850,7 @@
     <string name="radio_info_ims_reg_status_not_registered" msgid="8045821447288876085">"ਰਜਿਸਟਰ ਨਹੀਂ ਕੀਤੀ ਗਈ"</string>
     <string name="radio_info_ims_feature_status_available" msgid="6493200914756969292">"ਉਪਲਬਧ"</string>
     <string name="radio_info_ims_feature_status_unavailable" msgid="8930391136839759778">"ਅਣਉਪਲਬਧ"</string>
-    <string name="radio_info_ims_reg_status" msgid="25582845222446390">"IMS ਰਜਿਸਟਰੇਸ਼ਨ: <xliff:g id="STATUS">%1$s</xliff:g>\nLTE \'ਤੇ ਅਵਾਜ਼: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nਵਾਈ-ਫਾਈ \'ਤੇ ਅਵਾਜ਼ੀ ਕਾਲ: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nਵੀਡੀਓ ਕਾਲਿੰਗ: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT ਇੰਟਰਫੇਸ: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
+    <string name="radio_info_ims_reg_status" msgid="25582845222446390">"IMS ਰਜਿਸਟਰੇਸ਼ਨ: <xliff:g id="STATUS">%1$s</xliff:g>\nLTE \'ਤੇ ਅਵਾਜ਼: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nਵਾਈ-ਫਾਈ \'ਤੇ ਅਵਾਜ਼ੀ ਕਾਲ: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nਵੀਡੀਓ ਕਾਲਿੰਗ: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT ਇੰਟਰਫ਼ੇਸ: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
     <string name="radioInfo_service_in" msgid="45753418231446400">"ਸੇਵਾ ਵਿੱਚ"</string>
     <string name="radioInfo_service_out" msgid="287972405416142312">"ਸੇਵਾ ਵਿੱਚ ਨਹੀਂ"</string>
     <string name="radioInfo_service_emergency" msgid="4763879891415016848">"ਸਿਰਫ਼ ਸੰਕਟਕਾਲੀਨ ਕਾਲਾਂ"</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"ਪੂਰਵ-ਨਿਰਧਾਰਤ ਡਾਟਾ ਸਿਮ ਦਾ SubId:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL ਬੈਂਡਵਿਡਥ (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL ਬੈਂਡਵਿਡਥ (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE ਭੌਤਿਕ ਚੈਨਲ ਸੰਰੂਪਣ:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"ਭੌਤਿਕ ਚੈਨਲ ਸੰਰੂਪਣ:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"ਸੈੱਲ ਦੀ ਜਾਣਕਾਰੀ ਦੀ ਰਿਫ੍ਰੈਸ਼ ਦਰ:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"ਸਾਰੀ ਸੈੱਲ ਮਾਪ ਜਾਣਕਾਰੀ:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"ਡਾਟਾ ਸੇਵਾ:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"ਤੁਹਾਡਾ ਬਲੂਟੁੱਥ ਸਿਗਨਲ ਕਮਜ਼ੋਰ ਹੈ। ਸਪੀਕਰਫ਼ੋਨ \'ਤੇ ਲਿਜਾ ਕੇ ਦੇਖੋ।"</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"ਕਾਲ ਦੀ ਕੁਆਲਿਟੀ ਸੰਬੰਧੀ ਸੂਚਨਾ"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"ਨਾਪਸੰਦ ਕੀਤੇ SIP ਖਾਤੇ"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"ਇਸ ਪ੍ਰੋਫਾਈਲ ਤੋਂ ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜਿਆ ਜਾ ਸਕਦਾ"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"ਤੁਹਾਡੀ ਕਾਰਜ ਨੀਤੀ ਤੁਹਾਨੂੰ ਸਿਰਫ਼ ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ ਤੋਂ ਹੀ ਸੁਨੇਹਾ ਭੇਜਣ ਦੀ ਆਗਿਆ ਦਿੰਦੀ ਹੈ"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"ਕਿਸੇ ਨਿੱਜੀ ਐਪ ਤੋਂ ਸੁਨੇਹਾ ਨਹੀਂ ਭੇਜਿਆ ਜਾ ਸਕਦਾ"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"ਤੁਹਾਡੀ ਸੰਸਥਾ ਤੁਹਾਨੂੰ ਸਿਰਫ਼ ਕੰਮ ਸੰਬੰਧੀ ਐਪਾਂ ਤੋਂ ਹੀ ਸੁਨੇਹੇ ਭੇਜਣ ਦਿੰਦੀ ਹੈ"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"ਰੱਦ ਕਰੋ"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"ਕਾਰਜ ਪ੍ਰੋਫਾਈਲ \'ਤੇ ਜਾਓ"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"ਕੰਮ ਸੰਬੰਧੀ ਸੁਨੇਹਾ ਐਪ ਸਥਾਪਤ ਕਰੋ"</string>
 </resources>
diff --git a/res/values-pl/strings.xml b/res/values-pl/strings.xml
index 9b060aa..18ff3b1 100644
--- a/res/values-pl/strings.xml
+++ b/res/values-pl/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Połączenie oczekujące CDMA, gdy usługa IMS jest wyłączona"</string>
     <string name="updating_title" msgid="6130548922615719689">"Ustawienia połączeń"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Ustawienia połączeń może zmieniać tylko użytkownik będący administratorem."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Ustawienia konta telefonu zmienia administrator lub użytkownik profilu służbowego."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Ustawienia (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Błąd w ustawieniach połączenia"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Czytanie ustawień..."</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Nie można zawieszać połączeń."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Połącz się z siecią bezprzewodową, by zadzwonić."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Włącz Połączenia przez Wi-Fi, aby nawiązać połączenie."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Aby zadzwonić, wyłącz tryb satelitarny."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Informacje alarmowe"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Właściciel"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Kliknij ponownie, aby wyświetlić informacje"</string>
@@ -594,7 +596,7 @@
     <string name="failedToImportSingleContactMsg" msgid="228095510489830266">"Nie udało się zaimportować kontaktu"</string>
     <string name="hac_mode_title" msgid="4127986689621125468">"Aparaty słuchowe"</string>
     <string name="hac_mode_summary" msgid="7774989500136009881">"Włącz funkcje zgodności z aparatem słuchowym"</string>
-    <string name="rtt_mode_title" msgid="3075948111362818043">"Połączenie RTT (wysyłanie SMS-ów w czasie rzeczywistym)"</string>
+    <string name="rtt_mode_title" msgid="3075948111362818043">"Połączenie RTT (tekst w czasie rzeczywistym)"</string>
     <string name="rtt_mode_summary" msgid="8631541375609989562">"Zezwalaj na wymianę SMS-ów podczas rozmowy głosowej"</string>
     <string name="rtt_mode_more_information" msgid="587500128658756318">"RTT pomaga osobom niesłyszącym, niedosłyszącym, mającym problemy z mówieniem oraz potrzebującym czegoś więcej oprócz głosu.&lt;br&gt; &lt;a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>&gt;Więcej informacji&lt;/a&gt;\n       &lt;br&gt;&lt;br&gt; – Połączenia RTT są zapisywane jako transkrypcje\n       &lt;br&gt; – Funkcja RTT jest niedostępna w przypadku rozmów wideo"</string>
     <string name="no_rtt_when_roaming" msgid="5268008247378355389">"Uwaga: funkcja RTT jest niedostępna podczas roamingu"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Tryb samolotowy jest włączony"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Brak dostępu do karty SIM"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Sieć komórkowa niedostępna"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Tryb satelitarny jest włączony"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Wystąpił problem z numerem telefonu, pod który chcesz zadzwonić. Kod błędu: 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Nie udało się nawiązać połączenia. Kod błędu: 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Nie udało się nawiązać połączenia. Kod błędu: 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Identyfikator domyślnej karty SIM do transmisji danych:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Przepustowość kanału DL (kb/s):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Przepustowość kanału UL (kb/s):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Konfiguracja kanału fizycznego LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Konfiguracje kanału fizycznego:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Częstotliwość odświeżania informacji o sieci komórkowej:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Wszystkie informacje pomiarowe z sieci komórkowej:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Usługa transmisji danych:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Twój sygnał Bluetooth jest słaby. Spróbuj przełączyć na głośnik."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Powiadomienie o jakości połączenia"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Wycofane konta SIP"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Nie możesz wysłać wiadomości z tego profilu"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Zasady obowiązujące w firmie zezwalają na wysyłanie wiadomości tylko z profilu służbowego"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Nie można wysyłać wiadomości z aplikacji osobistej"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Twoja organizacja zezwala na wysyłanie wiadomości tylko z aplikacji służbowych"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Anuluj"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Przełącz na profil służbowy"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Zainstaluj służbową aplikację do obsługi wiadomości"</string>
 </resources>
diff --git a/res/values-pt-rPT/strings.xml b/res/values-pt-rPT/strings.xml
index 1afd7aa..10fb31a 100644
--- a/res/values-pt-rPT/strings.xml
+++ b/res/values-pt-rPT/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Chamada em espera CDMA em IMS desativada"</string>
     <string name="updating_title" msgid="6130548922615719689">"Definições de chamadas"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"As definições de chamadas só podem ser alteradas pelo utilizador gestor."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"As definições da conta do telemóvel só podem ser alteradas pelo administrador ou utilizador de trabalho."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Definições (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Erro nas definições de chamada"</string>
     <string name="reading_settings" msgid="1605904432450871183">"A ler as definições..."</string>
@@ -307,8 +308,8 @@
     <string name="mobile_data_settings_summary" msgid="5012570152029118471">"Aceder aos dados através de rede móvel"</string>
     <string name="data_usage_disable_mobile" msgid="5669109209055988308">"Desativar os dados móveis?"</string>
     <string name="sim_selection_required_pref" msgid="6985901872978341314">"A seleção é necessária"</string>
-    <string name="sim_change_data_title" msgid="9142726786345906606">"Pretende alterar o SIM de dados?"</string>
-    <string name="sim_change_data_message" msgid="3567358694255933280">"Pretende utilizar o <xliff:g id="NEW_SIM">%1$s</xliff:g> em vez do <xliff:g id="OLD_SIM">%2$s</xliff:g> para os dados móveis?"</string>
+    <string name="sim_change_data_title" msgid="9142726786345906606">"Quer alterar o SIM de dados?"</string>
+    <string name="sim_change_data_message" msgid="3567358694255933280">"Quer utilizar o <xliff:g id="NEW_SIM">%1$s</xliff:g> em vez do <xliff:g id="OLD_SIM">%2$s</xliff:g> para os dados móveis?"</string>
     <string name="wifi_calling_settings_title" msgid="5800018845662016507">"Chamadas Wi-Fi"</string>
     <string name="video_calling_settings_title" msgid="342829454913266078">"Videochamadas do operador"</string>
     <string name="gsm_umts_options" msgid="4968446771519376808">"Opções GSM/UMTS"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Não é possível colocar as chamadas em espera."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Ligue-se a uma rede sem fios para fazer uma chamada."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Ativar as chamadas através de Wi-Fi para fazer uma chamada."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Desative o modo satélite para fazer uma chamada."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Informações de emergência"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Proprietário"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Toque novamente para ver informações"</string>
@@ -637,8 +639,8 @@
     <string name="phone_in_ecm_notification_title" msgid="6825016389926367946">"Modo de Chamada de Retorno de Emergência"</string>
     <string name="phone_in_ecm_call_notification_text" msgid="653972232922670335">"Ligação de dados desativada"</string>
     <string name="phone_in_ecm_notification_complete_time" msgid="7341624337163082759">"Sem ligação de dados até à(s) <xliff:g id="COMPLETETIME">%s</xliff:g>"</string>
-    <string name="alert_dialog_exit_ecm" msgid="7661603870224398025">"{count,plural, =1{O telemóvel ficará no modo de chamada de retorno de emergência durante um minuto. Enquanto estiver neste modo, não é possível utilizar aplicações que utilizem uma ligação de dados. Pretende sair agora?}other{O telemóvel ficará no modo de chamada de retorno de emergência durante %s minutos. Enquanto estiver neste modo, não é possível utilizar aplicações que utilizem uma ligação de dados. Pretende sair agora?}}"</string>
-    <string name="alert_dialog_not_avaialble_in_ecm" msgid="8717711120099503279">"{count,plural, =1{A ação selecionada não está disponível no modo de chamada de retorno de emergência. O telemóvel ficará neste modo durante um minuto. Pretende sair agora?}other{A ação selecionada não está disponível no modo de chamada de retorno de emergência. O telemóvel ficará neste modo durante %s minutos. Pretende sair agora?}}"</string>
+    <string name="alert_dialog_exit_ecm" msgid="7661603870224398025">"{count,plural, =1{O telemóvel ficará no modo de chamada de retorno de emergência durante um minuto. Enquanto estiver neste modo, não é possível utilizar aplicações que utilizem uma ligação de dados. Quer sair agora?}other{O telemóvel ficará no modo de chamada de retorno de emergência durante %s minutos. Enquanto estiver neste modo, não é possível utilizar aplicações que utilizem uma ligação de dados. Quer sair agora?}}"</string>
+    <string name="alert_dialog_not_avaialble_in_ecm" msgid="8717711120099503279">"{count,plural, =1{A ação selecionada não está disponível no modo de chamada de retorno de emergência. O telemóvel ficará neste modo durante um minuto. Quer sair agora?}other{A ação selecionada não está disponível no modo de chamada de retorno de emergência. O telemóvel ficará neste modo durante %s minutos. Quer sair agora?}}"</string>
     <string name="alert_dialog_in_ecm_call" msgid="1207545603149771978">"A ação selecionada não está disponível durante uma chamada de emergência."</string>
     <string name="progress_dialog_exiting_ecm" msgid="9159080081676927217">"A sair do modo de chamada de retorno de emergência"</string>
     <string name="alert_dialog_yes" msgid="3532525979632841417">"Sim"</string>
@@ -646,7 +648,7 @@
     <string name="alert_dialog_dismiss" msgid="1336356286354517054">"Ignorar"</string>
     <string name="phone_in_ecm_call_notification_text_without_data_restriction_hint" msgid="3747860785153531225">"O telemóvel está no modo de chamada de retorno de emergência."</string>
     <string name="phone_in_ecm_notification_complete_time_without_data_restriction_hint" msgid="3690292264812050858">"Até à(s) <xliff:g id="COMPLETETIME">%s</xliff:g>."</string>
-    <string name="alert_dialog_exit_ecm_without_data_restriction_hint" msgid="7549850847524907932">"{count,plural, =1{O telemóvel ficará no modo de chamada de retorno de emergência durante um minuto.\nPretende sair agora?}other{O telemóvel ficará no modo de chamada de retorno de emergência durante %s minutos.\nPretende sair agora?}}"</string>
+    <string name="alert_dialog_exit_ecm_without_data_restriction_hint" msgid="7549850847524907932">"{count,plural, =1{O telemóvel ficará no modo de chamada de retorno de emergência durante um minuto.\nQuer sair agora?}other{O telemóvel ficará no modo de chamada de retorno de emergência durante %s minutos.\nQuer sair agora?}}"</string>
     <string name="voicemail_provider" msgid="4158806657253745294">"Serviço"</string>
     <string name="voicemail_settings" msgid="4451045613238972776">"Configuração"</string>
     <string name="voicemail_number_not_set" msgid="8831561283386938155">"&lt;Não definido&gt;"</string>
@@ -705,7 +707,7 @@
     <string name="mobile_data_activate_roaming_plan" msgid="922290995866269366">"Sem plano de roaming"</string>
     <string name="mobile_data_activate_roaming_plan_summary" msgid="5379228493306235969">"Adicionar plano de roaming através do operador <xliff:g id="PROVIDER_NAME">%s</xliff:g>"</string>
     <string name="mobile_data_activate_footer" msgid="7895874069807204548">"Pode adicionar dados móveis ou um plano de roaming através do seu operador <xliff:g id="PROVIDER_NAME">%s</xliff:g>."</string>
-    <string name="mobile_data_activate_diag_title" msgid="5401741936224757312">"Pretende adicionar dados?"</string>
+    <string name="mobile_data_activate_diag_title" msgid="5401741936224757312">"Quer adicionar dados?"</string>
     <string name="mobile_data_activate_diag_message" msgid="3527260988020415441">"Pode ter de adicionar dados através do operador <xliff:g id="PROVIDER_NAME">%s</xliff:g>"</string>
     <string name="mobile_data_activate_button" msgid="1139792516354374612">"ADICIONAR DADOS"</string>
     <string name="mobile_data_activate_cancel_button" msgid="3530174817572005860">"CANCELAR"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"O modo de avião está ativado"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Não é possível aceder ao cartão SIM"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Rede móvel não disponível"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"O modo satélite está ativado"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Problema com o número de telefone que está a tentar marcar. Código de erro 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Não foi possível realizar a chamada. Código de erro 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Não foi possível realizar a chamada. Código de erro 6."</string>
@@ -831,7 +834,7 @@
     <string name="eab_provisioned_switch_string" msgid="4449676720736033035">"EAB/presença aprovisionada"</string>
     <string name="cbrs_data_switch_string" msgid="6060356430838077653">"Dados de CBRS"</string>
     <string name="dsds_switch_string" msgid="7564769822086764796">"Ativar DSDS"</string>
-    <string name="dsds_dialog_title" msgid="8494569893941847575">"Pretende reiniciar o dispositivo?"</string>
+    <string name="dsds_dialog_title" msgid="8494569893941847575">"Quer reiniciar o dispositivo?"</string>
     <string name="dsds_dialog_message" msgid="4047480385678538850">"Tem de reiniciar o dispositivo para alterar esta definição."</string>
     <string name="dsds_dialog_confirm" msgid="9032004888134129885">"Reiniciar"</string>
     <string name="dsds_dialog_cancel" msgid="3245958947099586655">"Cancelar"</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"SubID do SIM de dados predefinido:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Largura de banda de transferência (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Largura de banda de carregamento (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Configuração do canal físico LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Configurações do canal físico:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Taxa de atualização das informações da célula:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Todas as informações de medição de células:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Serviço de dados:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"O seu sinal Bluetooth é fraco. Tente mudar para o altifalante."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Notificação de qualidade da chamada"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Contas SIP descontinuadas"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Não é possível enviar mensagens a partir deste perfil"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"A sua Política de Trabalho permite-lhe enviar mensagens apenas a partir do perfil de trabalho"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Não é possível enviar mensagens a partir de uma app pessoal"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"A sua organização só lhe permite enviar mensagens a partir de apps profissionais"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Cancelar"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Mudar para perfil de trabalho"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Instalar app de mensagens profissional"</string>
 </resources>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index eca6894..02288b9 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"A chamada CDMA em espera está desativada no IMS"</string>
     <string name="updating_title" msgid="6130548922615719689">"Configurações de chamadas"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"As configurações de chamada só podem ser alteradas pelo usuário administrador."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"As configurações da conta do smartphone só podem ser alteradas pelo administrador ou usuário no trabalho."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Configurações (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Erro de configuração da chamada"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Lendo as configurações…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Não é possível colocar chamadas em espera."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Conecte-se a uma rede sem fio para fazer uma chamada."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Ative as chamadas por Wi-Fi para fazer uma chamada."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Desative o modo satélite para fazer uma ligação."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Informações de emergência"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Proprietário"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Toque novamente para ver as informações"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Modo avião ativado"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Não é possível acessar o chip"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"A rede móvel não está disponível"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"O modo satélite está ativado"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Há um problema com o número de telefone que você está discando. Código de erro 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Não foi possível concluir a chamada. Código de erro 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Não foi possível concluir a chamada. Código de erro 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Subcódigo do chip de dados padrão:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Largura de banda DL (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Largura de banda UL (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Configuração do canal físico de LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Configurações do canal físico:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Taxa de atualização das informações do celular:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Todas as informações de medição do celular:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Serviço de dados:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"O sinal do Bluetooth está fraco. Mude para o viva-voz."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Notificação sobre a qualidade da chamada"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Contas SIP suspensas"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Não é possível enviar mensagens deste perfil"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Sua política de trabalho só permite o envio de mensagens pelo perfil de trabalho"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Não é possível enviar mensagens de um app pessoal"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Sua organização só permite o envio de mensagens usando apps de trabalho"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Cancelar"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Mudar para o perfil de trabalho"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Instalar um app de mensagens de trabalho"</string>
 </resources>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 8e59266..94cf9d4 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Apelurile în așteptare CDMA din IMS sunt dezactivate"</string>
     <string name="updating_title" msgid="6130548922615719689">"Setări pentru apeluri"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Numai administratorul poate să modifice setările pentru apeluri."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Setările contului de pe telefon pot fi modificate numai de administrator sau de un utilizator profesional."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Setări (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Eroare în setările pentru apeluri"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Se citesc setările..."</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Apelurile nu pot fi puse în așteptare."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Pentru a apela, conectează-te la o rețea wireless."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Activează apelarea prin Wi-Fi pentru a iniția un apel."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Dezactivează modul Satelit pentru a apela."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Informații în caz de urgență"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Proprietar"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Atinge din nou pentru a vedea informațiile"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Modul Avion este activat"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Nu se poate accesa cardul SIM"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Rețeaua mobilă nu este disponibilă"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Modul Satelit este activat"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"A apărut o problemă legată de numărul de telefon pe care încerci să-l apelezi. Cod de eroare 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Nu s-a finalizat apelul. Cod de eroare 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Nu s-a finalizat apelul. Cod de eroare 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"SubId pentru SIM-ul de date prestabilit:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Lățime de bandă de descărcare (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Lățime de bandă de încărcare (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Configurarea canalului fizic LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Configurațiile canalului fizic:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Rata de actualizare a informațiilor despre celulă:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Toate informațiile de măsurare despre celulă:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Serviciu de date:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Semnalul Bluetooth este slab. Încearcă să folosești difuzorul."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Notificare privind calitatea apelului"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Conturi SIP învechite"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Nu se poate trimite un mesaj de pe acest profil"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Politica privind activitatea îți permite să trimiți mesaje numai din profilul de serviciu"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Nu poți trimite mesaje dintr-o aplicație personală"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Organizația îți permite să trimiți mesaje numai din aplicațiile pentru lucru"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Anulează"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Comută la profilul de serviciu"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Instalează o aplicație pentru mesaje de serviciu"</string>
 </resources>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index 61d796a..ec534c6 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Ожидание вызова CDMA, если сервис IMS выключен"</string>
     <string name="updating_title" msgid="6130548922615719689">"Настройки вызовов"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Настройки вызовов может изменить только основной пользователь"</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Настройки аккаунта на телефоне может изменить только работающий с ним сотрудник или администратор."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Настройки (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Ошибка настройки вызовов"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Чтение настроек…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Удержание невозможно."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Чтобы позвонить, подключитесь к Wi-Fi."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Чтобы позвонить, включите звонки через Wi-Fi."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Чтобы позвонить, отключите спутниковый режим."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Данные для экстренных случаев"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Владелец"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Чтобы посмотреть информацию, нажмите ещё раз"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Включен режим полета."</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Нет доступа к SIM-карте."</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Мобильная сеть недоступна"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Включен спутниковый режим"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Проблемы с набираемым номером (ошибка 1)."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Не удалось выполнить вызов (ошибка 3)."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Не удалось выполнить вызов (ошибка 6)."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Доп. идентификатор SIM-карты для мобильного Интернета по умолчанию:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Пропускная способность DL-канала (кбит/c):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Пропускная способность UL-канала (кбит/с):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Конфигурация физического канала LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Конфигурации физического канала:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Частота обновления данных о сетях:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Статистика сети:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Сервис для передачи данных:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Слабый сигнал Bluetooth. Попробуйте переключиться на громкую связь."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Уведомление о качестве связи"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Неподдерживаемые SIP-аккаунты"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Нельзя отправить сообщение из этого профиля"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Согласно правилам вашей организации вы можете отправлять сообщения только из рабочего профиля."</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Нельзя отправлять сообщения из личного приложения"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"В вашей организации разрешено отправлять сообщения только из рабочих приложений"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Отмена"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Перейти в рабочий профиль"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Установите приложение для обмена рабочими сообщениями"</string>
 </resources>
diff --git a/res/values-si/strings.xml b/res/values-si/strings.xml
index 2cb36b6..22f0a1c 100644
--- a/res/values-si/strings.xml
+++ b/res/values-si/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS යටත් CDMA ඇමතුම රඳවා ගැනීම ක්‍රියාවිරහිතයි"</string>
     <string name="updating_title" msgid="6130548922615719689">"ඇමතුම් සැකසීම්"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"ඇමතුම් සැකසීම් වෙනස් කළ හැක්කේ පරිපාලක පරිශීලකයාට පමණි."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"දුරකථන ගිණුම් සැකසීම් වෙනස් කළ හැක්කේ පරිපාලක හෝ කාර්යාල පරිශීලකයාට පමණි."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"සැකසීම් (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"ඇමතුම් සැකසුම් දෝෂය"</string>
     <string name="reading_settings" msgid="1605904432450871183">"සැකසුම් කියවමින්…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"ඇමතුම් රඳවා තැබීමට නොහැකිය."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"ඇමතුමක් ගැනීමට රැහැන් රහිත ජාලයක් වෙත සම්බන්ධ වෙන්න."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"ඇමතුමක් කිරීමට Wi-Fi ඇමතීම සබල කරන්න."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"ඇමතුමක් ගැනීමට චන්ද්‍රිකා ප්‍රකාරය ක්‍රියාවිරහිත කරන්න."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"හදිසි අවස්ථා තොරතුරු"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"හිමිකරු"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"තොරතුරු බැලීම සඳහා නැවත තට්ටු කරන්න"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"ගුවන් යානා ප්‍රකාරය ක්‍රියාත්මකයි"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"SIM කාඩ්පතට පිවිසිය නොහැකිය"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"ජංගම ජාලය නොමැත"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"චන්ද්‍රිකා ප්‍රකාරය ක්‍රියාත්මකයි"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"ඔබ ඇමතීමට උත්සාහ කරන දුරකථන අංකය සමගින් වන දෝෂයකි. දෝෂ කේතය 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"ඇමතුම සම්පූර්ණ කළ නොහැකි විය. දෝෂ කේතය 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"ඇමතුම සම්පූර්ණ කළ නොහැකි විය. දෝෂ කේතය 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"පෙරනිමි දත්ත SIM පතේ උප හැඳුනුම:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL කලාප පළල (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL කලාප පළල (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE භෞතික නාලිකා වින්‍යාසය:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"භෞතික නාලිකා වින්‍යාස කිරීම්:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"සෙල් තොරතුරු නැවුම් කිරීමේ අනුපාතය:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"සියලු සෙල් මිනුම් තොරතුරු:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"දත්ත සේවාව:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"ඔබේ බ්ලූටූත් සංඥාව දුර්වලයි. ස්පීකර් දුරකථනයට මාරු වීමට උත්සාහ කරන්න."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"ඇමතුම් ගුණත්ව දැනුම්දීම"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"අතහැර දැමූ SIP ගිණුම්"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"මෙම පැතිකඩෙන් පණිවිඩ යැවිය නොහැක"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"ඔබේ වැඩ ප්‍රතිපත්තිය ඔබට කාර්යාල පැතිකඩෙන් පමණක් පණිවිඩ යැවීමට ඉඩ දෙයි"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"පුද්ගලික යෙදුමකින් පණිවිඩය යැවිය නොහැක"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"ඔබේ සංවිධානය ඔබට කාර්යාල යෙදුම්වලින් පණිවිඩ යැවීමට පමණක් ඉඩ දෙයි"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"අවලංගු කරන්න"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"කාර්යාල පැතිකඩ වෙත මාරු වන්න"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"කාර්යාල පණිවිඩ යැවීමේ යෙදුමක් ස්ථාපනය කරන්න"</string>
 </resources>
diff --git a/res/values-sk/strings.xml b/res/values-sk/strings.xml
index 7dcc467..623f3c0 100644
--- a/res/values-sk/strings.xml
+++ b/res/values-sk/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA – čakajúci hovor v službe IMS – vypnuté"</string>
     <string name="updating_title" msgid="6130548922615719689">"Nastavenia hovorov"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Nastavenia hovorov môže zmeniť iba používateľ s povoleniami správcu."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Nastavenia telefónneho účtu môže zmeniť iba správca alebo spravovaný používateľ."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Nastavenia (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Chyba nastavení hovorov"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Nastavenia sa načítavajú…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Hovory nie je možné podržať."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Ak chcete volať, pripojte sa k bezdrôtovej sieti"</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Na uskutočnenie hovoru povoľte volanie cez Wi‑Fi."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Ak chcete volať, deaktivujte satelitný režim."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Tiesňové informácie"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Vlastník"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Informácie si zobrazíte opätovným klepnutím"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Režim v lietadle je zapnutý"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Nedá sa získať prístup k SIM karte"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Mobilná sieť nie je k dispozícii"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Satelitný režim je zapnutý"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Vyskytol sa problém s telefónnym číslom, ktoré sa pokúšate vytočiť. Kód chyby 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Hovor sa nepodarilo uskutočniť. Kód chyby 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Hovor sa nepodarilo uskutočniť. Kód chyby 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Podradený identifikátor predvolenej dátovej SIM karty:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Rýchlosť pripojenia DL (kB/s):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Rýchlosť pripojenia UL (kB/s):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Konfigurácia fyzického kanála LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Konfigurácie fyzického kanála:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Frekvencia obnovenia informácií o mobilnej sieti:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Všetky informácie o meraní mobilnej siete:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Dátová služba:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Signál Bluetooth je slabý. Skúste prepnúť na reproduktor."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Upozornenie o kvalite hovoru"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Účty SIP s ukončenou podporou"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Z tohto profilu nemôžete odosielať správy"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Pracovné pravidlá vám umožňujú odosielať správy iba v pracovnom profile"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Nemôžete posielať správy z osobnej aplikácie"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Vaša organizácia vám povoľuje posielať správy iba z pracovných aplikácií"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Zrušiť"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Prepnúť na pracovný profil"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Inštalovať aplikáciu na odosielanie pracovných správ"</string>
 </resources>
diff --git a/res/values-sl/strings.xml b/res/values-sl/strings.xml
index 327e2b4..1f86b13 100644
--- a/res/values-sl/strings.xml
+++ b/res/values-sl/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Čakajoči klic CDMA v sistemu IMS je izklopljen"</string>
     <string name="updating_title" msgid="6130548922615719689">"Nastavitve klicev"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Nastavitve klicanja lahko spremeni samo uporabnik s skrbniškim dostopom."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Nastavitve računa telefona lahko spremeni samo uporabnik s skrbniškim ali službenim dostopom."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Nastavitve (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Napaka nastavitev klicev"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Branje nastavitev …"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Klicev ni mogoče zadržati."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Povežite se v omrežje Wi-Fi, če želite opraviti klic."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Če želite opraviti klic, omogočite klicanja prek Wi-Fi-ja."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Če želite opraviti klic, onemogočite satelitski način."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Informacije za nujne primere"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Lastnik"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Znova se dotaknite, da si ogledate podatke"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Način za letalo je vklopljen"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Do kartice SIM ni mogoče dostopati"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Mobilno omrežje ni na voljo"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Satelitski način je vklopljen"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Težava s telefonsko številko, ki jo poskušate poklicati. Koda napake 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Klica ni bilo mogoče končati. Koda napake 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Klica ni bilo mogoče končati. Koda napake 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"ID naročnine privzete kartice SIM za prenos podatkov:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Pasovna širina za prenos (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Pasovna širina za nalaganje (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Konfiguracija fizičnega kanala LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Fizične konfiguracije kanalov:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Frekvenca osveževanja podatkov o celici:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Vsi podatki o meritvah celice:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Podatkovna storitev:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Signal povezave Bluetooth je šibek. Poskusite preklopiti na zvočnik."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Obvestilo o kakovosti klica"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Opuščeni računi SIP"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Sporočila ni mogoče poslati iz tega profila"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Službeni pravilnik dovoljuje pošiljanje sporočil le iz delovnega profila."</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Sporočila ni mogoče poslati iz osebne aplikacije"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Organizacija vam omogoča pošiljanje sporočil samo iz delovnih aplikacij"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Prekliči"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Preklopi na delovni profil"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Namestite delovno aplikacijo za sporočanje"</string>
 </resources>
diff --git a/res/values-sq/strings.xml b/res/values-sq/strings.xml
index 75afce1..0d4d021 100644
--- a/res/values-sq/strings.xml
+++ b/res/values-sq/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Telefonatat në pritje CDMA në sistemin IMS janë joaktive"</string>
     <string name="updating_title" msgid="6130548922615719689">"Cilësimet e telefonatës"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Cilësimet e telefonatës mund të ndryshohen vetëm nga administratori."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Cilësimet e llogarisë të telefonit mund të ndryshohen vetëm nga administratori ose një përdorues në punë."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Cilësimet (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Gabim në cilësimet e telefonatës"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Po lexon cilësimet…"</string>
@@ -541,7 +542,7 @@
     <string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Dil nga modaliteti i kthimit të telefonatës së urgjencës për të bërë një telefonatë jo urgjente."</string>
     <string name="incall_error_emergency_only" msgid="8786127461027964653">"I paregjistruar në rrjet."</string>
     <string name="incall_error_out_of_service" msgid="1927265196942672791">"Rrjeti celular nuk mundësohet."</string>
-    <string name="incall_error_out_of_service_wfc" msgid="4497663185857190885">"Rrjeti celular nuk ofrohet. Lidhu me një rrjet pa tel për të bërë një telefonatë."</string>
+    <string name="incall_error_out_of_service_wfc" msgid="4497663185857190885">"Rrjeti celular nuk ofrohet. Lidhu me një rrjet wireless për të bërë një telefonatë."</string>
     <string name="incall_error_no_phone_number_supplied" msgid="8680831089508851894">"Për të kryer një telefonatë, fut një numër të vlefshëm."</string>
     <string name="incall_error_call_failed" msgid="393508653582682539">"Thirrja dështoi."</string>
     <string name="incall_error_cannot_add_call" msgid="5425764862628655443">"Telefonata nuk mund të shtohet në këtë moment. Mund të provosh të kontaktosh duke dërguar një mesazh."</string>
@@ -554,8 +555,9 @@
     <string name="incall_error_supp_service_reject" msgid="3044363092441655912">"Nuk mund të refuzojë telefonatën."</string>
     <string name="incall_error_supp_service_hangup" msgid="836524952243836735">"Nuk mund të lëshojë telefonatën(at)."</string>
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Telefonatat nuk mund të mbahen në pritje."</string>
-    <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Lidhu me një rrjet me valë për të bërë një telefonatë."</string>
+    <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Lidhu me një rrjet wireless për të bërë një telefonatë."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Aktivizo telefonatat nëpërmjet rrjetit Wi-Fi për të bërë një telefonatë."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Çaktivizo modalitetin e satelitit për të bërë një telefonatë."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Informacioni i urgjencës"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Zotëruesi"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Trokit përsëri për të shikuar informacionet"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Modaliteti i aeroplanit është aktiv"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Nuk ka qasje te karta SIM"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Rrjeti celular nuk ofrohet"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Modaliteti i satelitit është aktiv"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Problem me numrin e telefonit që po përpiqesh të telefonosh. Kodi i gabimit 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Telefonata nuk mund të kryhej. Kodi i gabimit 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Telefonata nuk mund të kryhej. Kodi i gabimit 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"ID-ja dytësore e kartës SIM të parazgjedhur të të dhënave:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Gjerësia e bandës DL (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Gjerësia e bandës UL (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Konfigurimi i kanalit fizik LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Konfigurimet e kanalit fizik:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Shpejtësia e rifreskimit të informacioneve të rrjetit celular"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Të gjitha informacionet e matjes së rrjetit celular:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Shërbimi i të dhënave:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Sinjali i Bluetooth-it është i dobët. Provo të kalosh te altoparlanti."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Njoftim për cilësinë e telefonatës"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Llogaritë e zhvlerësuara SIP"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Mesazhi nuk mund të dërgohet nga ky profil"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Politika jote e punës të lejon të dërgosh mesazhe vetëm nga profili i punës"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Nuk mund të dërgohen mesazhe nga një aplikacion personal"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Organizata jote të lejon që të dërgosh mesazhe vetëm nga aplikacionet e punës"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Anulo"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Kalo te profili i punës"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Instalo një aplikacion të mesazheve të punës"</string>
 </resources>
diff --git a/res/values-sr/strings.xml b/res/values-sr/strings.xml
index 3b754b1..d25009f 100644
--- a/res/values-sr/strings.xml
+++ b/res/values-sr/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Стављање CDMA позива на чекање у IMS-у је искључено"</string>
     <string name="updating_title" msgid="6130548922615719689">"Подешавања позива"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Само кориснику са администраторским правима је дозвољено да мења подешавања позива."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Подешавања налога телефона може да промени само администратор или пословни корисник."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Подешавања (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Грешка у подешавањима позива"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Подешавања се учитавају…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Није могуће стављати позиве на чекање."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Повежите се на бежичну мрежу да бисте упутили позив."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Омогућите позивање преко WiFi-а да бисте упутили позив."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Онемогућите сателитски режим да бисте упутили позив."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Информације за хитне случајеве"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Власник"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Додирните поново да бисте видели информације"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Режим рада у авиону је укључен"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Није могуће приступити SIM картици"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Мобилна мрежа није доступна"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Сателитски режим је укључен"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Проблем са бројем телефона који покушавате да позовете. Кôд грешке 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Упућивање позива није успело. Кôд грешке 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Упућивање позива није успело. Кôд грешке 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"SubID подразумеваног SIM-а за податке:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL пропусни опсег (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL пропусни опсег (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Конфигурација LTE физичког канала:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Конфигурације физичког канала:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Учесталост освежавања информација о предајнику:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Све информације о мерењу за предајник:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Услуга преноса података:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Bluetooth сигнал је слаб. Пробајте да пређете на спикерфон."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Обавештење о квалитету позива"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Застарели SIP налози"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Не можете да пошаљете поруку са овог профила"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Смернице за посао вам омогућавају да шаљете поруке само са пословног профила"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Не можете да шаљете поруке из личне апликације"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Ваша организација дозвољава слање порука само из пословних апликација"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Откажи"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Пређи на пословни профил"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Инсталирајте пословну апликацију за размену порука"</string>
 </resources>
diff --git a/res/values-sv/strings.xml b/res/values-sv/strings.xml
index 0021e6d..19ce90f 100644
--- a/res/values-sv/strings.xml
+++ b/res/values-sv/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA samtal väntar under IMS av"</string>
     <string name="updating_title" msgid="6130548922615719689">"Samtalsinställningar"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Det är bara administratören som kan ändra samtalsinställningar."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Endast administratören eller arbetsanvändaren får ändra telefonens kontoinställningar."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Inställningar (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Felaktiga samtalsinställningar"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Läser inställningar…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Det går inte att hålla kvar samtal."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Anslut till ett trådlöst nätverk om du vill ringa."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Aktivera wifi-samtal för att ringa."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Inaktivera satellitläget om du vill ringa ett samtal."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Nödinformation"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Ägare"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Tryck igen för att visa information"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Flygplansläge är aktiverat"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Det går inte att komma åt SIM-kortet"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Inget mobilt nätverk tillgängligt"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Satellitläget är på"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Något är fel med telefonnumret du försöker ringa. Felkod 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"SubId för standarddata på SIM-kortet:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Bandbredd för nedladdning (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Bandbredd för uppladdning (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Fysisk kanalkonfiguration för LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Konfigurationer för fysiska kanaler:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Frekvens för uppdatering av mastinformation:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Alla information om mastmätning:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Datatjänst:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Svag Bluetooth-signal. Försök med att växla till högtalartelefon."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Avisering om samtalskvalitet"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Utfasade SIP-konton"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Det går inte att skicka meddelanden från den här profilen"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Jobbprincipen tillåter endast att skicka meddelanden från jobbprofilen"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Det går inte att skicka meddelanden med en privat app"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Organisationen tillåter endast att du skickar meddelanden med jobbappar"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Avbryt"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Byt till jobbprofilen"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Installera jobbmeddelandeapp"</string>
 </resources>
diff --git a/res/values-sw/strings.xml b/res/values-sw/strings.xml
index 0a73885..2cbcafa 100644
--- a/res/values-sw/strings.xml
+++ b/res/values-sw/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Kipengele cha Simu Inayosubiri Kupokewa ya CDMA chini ya IMS Kimezimwa"</string>
     <string name="updating_title" msgid="6130548922615719689">"Mipangilio ya simu"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Mipangilio ya simu inaweza kubadilishwa na mtumiaji wa akaunti ya msimamizi."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Mipangilio ya akaunti ya simu inaweza tu kubadilishwa na msimamizi au mtumiaji wa kazini."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Mipangilio (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Hitilafu ya mipangilio ya kupiga simu"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Inasoma mipangilio…."</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Haiwezi kushikilia simu."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Unganisha kwenye mtandao pasiwaya ili upige simu."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Washa kipengele cha kupiga simu kupitia Wi-Fi ili upige simu."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Zima hali ya sateliti ili upige simu."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Maelezo ya dharura"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Mmiliki"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Gusa tena ili uangalie maelezo"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Hali ya ndegeni imewashwa"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Imeshindwa kufikia SIM kadi"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Mtandao wa simu za mkononi haupatikani"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Hali ya sateliti imewashwa"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Nambari ya simu unayojaribu kupiga ina hitilafu. Msimbo wa hitilafu nambari 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Imeshindwa kupiga simu. Msimbo wa hitilafu nambari 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Imeshindwa kupiga simu. Msimbo wa hitilafu nambari 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"SubId ya SIM chaguomsingi ya data:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Kipimo Data cha DL (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Kipimo Data cha UL (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Mipangilio ya Kituo Halisi cha LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Mipangilio ya Kituo Halisi:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Kasi ya Kuonyesha Upya Maelezo ya Simu:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Maelezo Yote ya Vipimo vya Simu:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Huduma ya Data:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Muunganisho wako wa bluetooth ni dhaifu. Jaribu kubadilisha ili utumie spika ya simu."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Arifa ya Ubora wa Simu"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Akaunti za SIP ambazo zimefungwa"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Huwezi kutuma ujumbe kutoka kwenye wasifu huu"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Sera ya mahali pako pa kazi inakuruhusu utume ujumbe kutoka kwenye wasifu wa kazini pekee"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Imeshindwa kutuma ujumbe kupitia programu ya binafsi"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Shirika lako linakuruhusu wewe tu kutuma ujumbe kupitia programu za kazini"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Ghairi"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Tumia wasifu wa kazini"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Sakinisha programu ya kazini ya kutuma ujumbe"</string>
 </resources>
diff --git a/res/values-ta/strings.xml b/res/values-ta/strings.xml
index 33db134..620d4c0 100644
--- a/res/values-ta/strings.xml
+++ b/res/values-ta/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA அழைப்பு காத்திருப்பு IMS முடக்கத்தில்"</string>
     <string name="updating_title" msgid="6130548922615719689">"அழைப்பு அமைப்பு"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"நிர்வாகிப் பயனர் மட்டுமே அழைப்பிற்கான அமைப்புகளை மாற்ற முடியும்."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"நிர்வாகி/பணிக்கணக்கு பயனர் மட்டுமே அமைப்புகளை மாற்றலாம்."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"அமைப்புகள் (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"அழைப்பு அமைப்புகளில் பிழை"</string>
     <string name="reading_settings" msgid="1605904432450871183">"அமைப்புகளைப் படிக்கிறது…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"அழைப்புகளை ஹோல்டு செய்ய முடியாது."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"அழைக்க, வயர்லெஸ் நெட்வொர்க்குடன் இணைக்கவும்."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"அழைக்க, வைஃபை அழைப்பை இயக்கவும்."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"அழைப்பை மேற்கொள்ள சாட்டிலைட் பயன்முறையை முடக்கவும்."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"அவசரத் தகவல்"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"உரிமையாளர்"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"தகவலைப் பார்க்க, மீண்டும் தட்டவும்"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"விமானப் பயன்முறை இயக்கத்தில் உள்ளது"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"SIM கார்டை அணுக முடியவில்லை"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"மொபைல் நெட்வொர்க் இல்லை"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"சாட்டிலைட் பயன்முறை இயக்கப்பட்டுள்ளது"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"அழைப்பை நிறைவுசெய்ய முடியவில்லை. பிழைக் குறியீடு 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"அழைப்பை நிறைவுசெய்ய முடியவில்லை. பிழைக் குறியீடு 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"அழைப்பை நிறைவுசெய்ய முடியவில்லை. பிழைக் குறியீடு 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"இயல்பான டேட்டா சிம்மின் துணை ஐடி:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL இணைய வேகம் (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL இணைய வேகம் (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE ஃபிசிக்கல் சேனல் உள்ளமைவு:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"சேனல் உள்ளமைவுகள்:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"மொபைல் தகவலின் புதுப்பிப்பு விகிதம்:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"அனைத்து மொபைல் அளவீட்டுத் தகவல்:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"டேட்டா சேவை:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"புளூடூத் சிக்னல் வலுவற்றதாக உள்ளது. ஸ்பீக்கர் ஃபோனிற்கு மாற்றவும்."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"அழைப்பின் தரம் தொடர்பான அறிவிப்பு"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"நிறுத்தப்பட்ட SIP கணக்குகள்"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"இந்தச் சுயவிவரத்தில் இருந்து மெசேஜ் அனுப்ப முடியாது"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"உங்கள் பணிக் கொள்கையின்படி நீங்கள் பணிக் கணக்கில் இருந்து மட்டுமே மெசேஜ் அனுப்ப முடியும்"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"தனிப்பட்ட ஆப்ஸில் இருந்து மெசேஜ் அனுப்ப முடியாது"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"உங்கள் நிறுவனம் பணி ஆப்ஸில் இருந்து மட்டுமே மெசேஜ்களை அனுப்ப உங்களை அனுமதிக்கிறது"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"ரத்துசெய்"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"பணிக் கணக்கிற்கு மாறு"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"பணி தொடர்பான மெசேஜ்களுக்கான ஆப்ஸை நிறுவு"</string>
 </resources>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index a62c6a5..45417a6 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -31,7 +31,7 @@
     <string name="ussdRunning" msgid="1163586813106772717">"USSD కోడ్ అమలు చేయబడుతోంది…"</string>
     <string name="mmiCancelled" msgid="5339191899200678272">"MMI కోడ్ రద్దు చేయబడింది"</string>
     <string name="cancel" msgid="8984206397635155197">"రద్దు చేయండి"</string>
-    <string name="enter_input" msgid="6193628663039958990">"USSD మెసేజ్‌ తప్పనిసరిగా <xliff:g id="MIN_LEN">%1$d</xliff:g> మరియు <xliff:g id="MAX_LEN">%2$d</xliff:g> అక్షరాల మధ్య ఉండాలి. దయచేసి మళ్లీ ప్రయత్నించండి."</string>
+    <string name="enter_input" msgid="6193628663039958990">"USSD మెసేజ్‌ తప్పనిసరిగా <xliff:g id="MIN_LEN">%1$d</xliff:g> మరియు <xliff:g id="MAX_LEN">%2$d</xliff:g> అక్షరాల మధ్య ఉండాలి. దయచేసి మళ్లీ ట్రై చేయండి."</string>
     <string name="manageConferenceLabel" msgid="8415044818156353233">"కాన్ఫరెన్స్ కాల్‌ను నిర్వహించండి"</string>
     <string name="ok" msgid="7818974223666140165">"సరే"</string>
     <string name="audio_mode_speaker" msgid="243689733219312360">"స్పీకర్"</string>
@@ -40,7 +40,7 @@
     <string name="audio_mode_bluetooth" msgid="25732183428018809">"బ్లూటూత్"</string>
     <string name="wait_prompt_str" msgid="5136209532150094910">"కింది టోన్‌లు పంపాలా?\n"</string>
     <string name="pause_prompt_str" msgid="2308897950360272213">"టోన్‌లు పంపుతోంది\n"</string>
-    <string name="send_button" msgid="5070379600779031932">"పంపు"</string>
+    <string name="send_button" msgid="5070379600779031932">"పంపండి"</string>
     <string name="pause_prompt_yes" msgid="8184132073048369575">"అవును"</string>
     <string name="pause_prompt_no" msgid="2145264674774138579">"లేదు"</string>
     <string name="wild_prompt_str" msgid="5858910969703305375">"దీనితో వైల్డ్ అక్షరాన్ని భర్తీ చేయండి"</string>
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMSలో CDMA కాల్ వెయిటింగ్ ఆఫ్‌లో ఉంది"</string>
     <string name="updating_title" msgid="6130548922615719689">"కాల్ సెట్టింగ్‌లు"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"కాల్ సెట్టింగ్‌లను నిర్వాహక వినియోగదారు మాత్రమే మార్చగలరు."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"ఫోన్ ఖాతా సెట్టింగ్‌లను అడ్మిన్ లేదా వర్క్ యూజర్ మాత్రమే మార్చగలరు."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"సెట్టింగ్‌లు (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"కాల్ సెట్టింగ్‌ల ఎర్రర్"</string>
     <string name="reading_settings" msgid="1605904432450871183">"సెట్టింగ్‌లను చదువుతోంది…"</string>
@@ -176,10 +177,10 @@
     <string name="label_available" msgid="1316084116670821258">"అందుబాటులో ఉన్న నెట్‌వర్క్‌లు"</string>
     <string name="load_networks_progress" msgid="4051433047717401683">"శోధిస్తోంది..."</string>
     <string name="empty_networks_list" msgid="9216418268008582342">"నెట్‌వర్క్‌లు కనుగొనబడలేదు."</string>
-    <string name="network_query_error" msgid="3862515805115145124">"నెట్‌వర్క్‌లను కనుగొనడం సాధ్యపడలేదు. మళ్లీ ప్రయత్నించండి."</string>
+    <string name="network_query_error" msgid="3862515805115145124">"నెట్‌వర్క్‌లను కనుగొనడం సాధ్యపడలేదు. మళ్లీ ట్రై చేయండి."</string>
     <string name="register_on_network" msgid="4194770527833960423">"<xliff:g id="NETWORK">%s</xliff:g>లో నమోదు అవుతోంది…"</string>
     <string name="not_allowed" msgid="8541221928746104798">"మీ SIM కార్డు ఈ నెట్‌వర్క్‌కు కనెక్షన్‌ను అనుమతించదు."</string>
-    <string name="connect_later" msgid="1950138106010005425">"ప్రస్తుతం ఈ నెట్‌వర్క్‌కు కనెక్ట్ చేయడం సాధ్యపడదు. తర్వాత మళ్లీ ప్రయత్నించండి."</string>
+    <string name="connect_later" msgid="1950138106010005425">"ప్రస్తుతం ఈ నెట్‌వర్క్‌కు కనెక్ట్ చేయడం సాధ్యపడదు. తర్వాత మళ్లీ ట్రై చేయండి."</string>
     <string name="registration_done" msgid="5337407023566953292">"నెట్‌వర్క్‌లో నమోదు అయింది."</string>
     <string name="already_auto" msgid="8607068290733079336">"ఇప్పటికే ఆటోమేటిక్‌ ఎంపికలో ఉంది."</string>
     <string name="select_automatically" msgid="779750291257872651">"నెట్‌వర్క్‌ను ఆటోమేటిక్‌గా ఎంచుకో"</string>
@@ -319,7 +320,7 @@
     <string name="throttle_rate" msgid="7641913901133634905">"డేటా రేట్ విధానం"</string>
     <string name="throttle_help" msgid="2624535757028809735">"మరింత తెలుసుకోండి"</string>
     <string name="throttle_status_subtext" msgid="1110276415078236687">"గరిష్ఠ వ్యవధి అయిన <xliff:g id="USED_2">%3$s</xliff:g>లో <xliff:g id="USED_0">%1$s</xliff:g> (<xliff:g id="USED_1">%2$d</xliff:g>٪)\nతర్వాతి వ్యవధి <xliff:g id="USED_3">%4$d</xliff:g> రోజుల్లో (<xliff:g id="USED_4">%5$s</xliff:g>) ప్రారంభమవుతుంది"</string>
-    <string name="throttle_data_usage_subtext" msgid="3185429653996709840">"గరిష్టంగా <xliff:g id="USED_2">%3$s</xliff:g>లో <xliff:g id="USED_0">%1$s</xliff:g> (<xliff:g id="USED_1">%2$d</xliff:g>٪)"</string>
+    <string name="throttle_data_usage_subtext" msgid="3185429653996709840">"గరిష్ఠంగా <xliff:g id="USED_2">%3$s</xliff:g>లో <xliff:g id="USED_0">%1$s</xliff:g> (<xliff:g id="USED_1">%2$d</xliff:g>٪)"</string>
     <string name="throttle_data_rate_reduced_subtext" msgid="8369839346277847725">"<xliff:g id="USED_0">%1$s</xliff:g> గరిష్ట పరిమితి మించిపోయింది\nడేటా రేట్ <xliff:g id="USED_1">%2$d</xliff:g> Kb/sకి తగ్గించబడింది"</string>
     <string name="throttle_time_frame_subtext" msgid="6462089615392402127">"సైకిల్‌లో <xliff:g id="USED_0">%1$d</xliff:g>٪ గడిచిపోయింది\nతదుపరి వ్యవధి <xliff:g id="USED_1">%2$d</xliff:g> రోజుల్లో (<xliff:g id="USED_2">%3$s</xliff:g>) ప్రారంభమవుతుంది"</string>
     <string name="throttle_rate_subtext" msgid="7221971817325779535">"డేటా వినియోగ పరిమితి మించిపోయినప్పుడు డేటా రేట్ <xliff:g id="USED">%1$d</xliff:g> Kb/sకి తగ్గించబడుతుంది"</string>
@@ -489,8 +490,8 @@
     <string name="oldPinLabel" msgid="8618515202411987721">"పాత పిన్‌"</string>
     <string name="newPinLabel" msgid="3585899083055354732">"కొత్త పిన్‌"</string>
     <string name="confirmPinLabel" msgid="7783531218662473778">"కొత్త PINని నిర్ధారించండి"</string>
-    <string name="badPin" msgid="4549286285015892321">"మీరు టైప్ చేసిన పాత పిన్‌ చెల్లదు. మళ్లీ ప్రయత్నించండి."</string>
-    <string name="mismatchPin" msgid="1467254768290323845">"మీరు టైప్ చేసిన PINలు సరిపోలలేదు. మళ్లీ ప్రయత్నించండి."</string>
+    <string name="badPin" msgid="4549286285015892321">"మీరు టైప్ చేసిన పాత పిన్‌ చెల్లదు. మళ్లీ ట్రై చేయండి."</string>
+    <string name="mismatchPin" msgid="1467254768290323845">"మీరు టైప్ చేసిన PINలు సరిపోలలేదు. మళ్లీ ట్రై చేయండి."</string>
     <string name="invalidPin" msgid="7363723429414001979">"4 నుండి 8 సంఖ్యలు ఉండే PINని టైప్ చేయండి."</string>
     <string name="disable_sim_pin" msgid="3112303905548613752">"SIM PINను తీసివేయండి"</string>
     <string name="enable_sim_pin" msgid="445461050748318980">"SIM PINను సెట్ చేయండి"</string>
@@ -504,9 +505,9 @@
     <string name="oldPin2Label" msgid="4648543187859997203">"పాత PIN2"</string>
     <string name="newPin2Label" msgid="1840905981784453939">"కొత్త PIN2"</string>
     <string name="confirmPin2Label" msgid="4336025914667593762">"కొత్త PIN2ని నిర్ధారించండి"</string>
-    <string name="badPuk2" msgid="6438182906645832235">"PUK2 చెల్లదు. మళ్లీ ప్రయత్నించండి."</string>
-    <string name="badPin2" msgid="2760917538643074635">"పాత PIN2 చెల్లదు. మళ్లీ ప్రయత్నించండి."</string>
-    <string name="mismatchPin2" msgid="4952718725266700631">"PIN2లు సరిపోలలేదు. మళ్లీ ప్రయత్నించండి."</string>
+    <string name="badPuk2" msgid="6438182906645832235">"PUK2 చెల్లదు. మళ్లీ ట్రై చేయండి."</string>
+    <string name="badPin2" msgid="2760917538643074635">"పాత PIN2 చెల్లదు. మళ్లీ ట్రై చేయండి."</string>
+    <string name="mismatchPin2" msgid="4952718725266700631">"PIN2లు సరిపోలలేదు. మళ్లీ ట్రై చేయండి."</string>
     <string name="invalidPin2" msgid="6467957903056379343">"4 నుండి 8 సంఖ్యలు ఉండే PIN2ని నమోదు చేయండి."</string>
     <string name="invalidPuk2" msgid="713729511903849544">"8 సంఖ్యలు ఉండే PUK2ను నమోదు చేయండి."</string>
     <string name="pin2_changed" msgid="5710551850481287821">"PIN2 అప్‌డేట్ చేయబడింది"</string>
@@ -556,10 +557,11 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"కాల్స్‌ను హోల్డ్ చేయలేరు."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"కాల్ చేయడానికి వైర్‌లెస్ నెట్‌వర్క్‌కు కనెక్ట్ చేయండి."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"కాల్‌ను చేయడానికి Wi-Fi కాలింగ్‌ను ప్రారంభించండి."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"కాల్ చేయడానికి ఉపగ్రహ మోడ్‌ను డిజేబుల్ చేయండి."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"అత్యవసర సమాచారం"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"యజమాని"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"సమాచారాన్ని చూడడానికి మళ్లీ నొక్కండి"</string>
-    <string name="emergency_enable_radio_dialog_title" msgid="2667568200755388829">"అత్యవసర కాల్"</string>
+    <string name="emergency_enable_radio_dialog_title" msgid="2667568200755388829">"ఎమర్జెన్సీ కాల్"</string>
     <string name="single_emergency_number_title" msgid="8413371079579067196">"అత్యవసర నంబర్"</string>
     <string name="numerous_emergency_numbers_title" msgid="8972398932506755510">"అత్యవసర నంబర్‌లు"</string>
     <string name="emergency_call_shortcut_hint" msgid="1290485125107779500">"<xliff:g id="EMERGENCY_NUMBER">%s</xliff:g>కు కాల్ చేయడానికి మళ్లీ నొక్కండి"</string>
@@ -615,7 +617,7 @@
     <string name="ota_title_activate" msgid="4049645324841263423">"మీ ఫోన్‌ను యాక్టివేట్ చేయండి"</string>
     <string name="ota_touch_activate" msgid="838764494319694754">"మీ ఫోన్ సేవను సక్రియం చేయడానికి ప్రత్యేక కాల్ చేయాల్సి ఉంటుంది. \n\n“యాక్టివేట్ చేయండి” నొక్కిన తర్వాత, మీ ఫోన్‌ను సక్రియం చేయడానికి అందించబడే సూచనలను వినండి."</string>
     <string name="ota_hfa_activation_title" msgid="3300556778212729671">"సక్రియం చేస్తోంది..."</string>
-    <string name="ota_hfa_activation_dialog_message" msgid="7921718445773342996">"ఫోన్ మీ మొబైల్ డేటా సేవను సక్రియం చేస్తోంది.\n\nదీనికి గరిష్టంగా 5 నిమిషాలు పట్టవచ్చు."</string>
+    <string name="ota_hfa_activation_dialog_message" msgid="7921718445773342996">"ఫోన్ మీ మొబైల్ డేటా సేవను సక్రియం చేస్తోంది.\n\nదీనికి గరిష్ఠంగా 5 నిమిషాలు పట్టవచ్చు."</string>
     <string name="ota_skip_activation_dialog_title" msgid="7666611236789203797">"సక్రియం చేయడాన్ని దాటవేయాలా?"</string>
     <string name="ota_skip_activation_dialog_message" msgid="6691722887019708713">"మీరు సక్రియం చేయడాన్ని దాటవేస్తే, కాల్స్‌ చేయలేరు లేదా మొబైల్ డేటా నెట్‌వర్క్‌లకు కనెక్ట్ చేయలేరు (మీరు Wi-Fi నెట్‌వర్క్‌లకు కనెక్ట్ చేయగలిగినప్పటికీ). మీరు మీ ఫోన్‌ను సక్రియం చేసేవరకు, దాన్ని ప్రారంభించే ప్రతిసారీ సక్రియం చేయమని మిమ్మల్ని అడుగుతుంది."</string>
     <string name="ota_skip_activation_dialog_skip_label" msgid="5908029466817825633">"స్కిప్ చేయండి"</string>
@@ -626,8 +628,8 @@
     <string name="ota_speaker" msgid="1086766980329820528">"స్పీకర్"</string>
     <string name="ota_progress" msgid="8837259285255700132">"మీ ఫోన్ ప్రోగ్రామ్ చేయబడుతోంది…"</string>
     <string name="ota_failure" msgid="5674217489921481576">"మీ ఫోన్‌ను ప్రోగ్రామ్ చేయడం సాధ్యపడలేదు"</string>
-    <string name="ota_successful" msgid="1106825981548107774">"మీ ఫోన్ ఇప్పుడు సక్రియం అయ్యింది. సేవ ప్రారంభం కావడానికి గరిష్టంగా 15 నిమిషాలు పట్టవచ్చు."</string>
-    <string name="ota_unsuccessful" msgid="8531037653803955754">"మీ ఫోన్ సక్రియం చేయబడలేదు. \nమీరు మెరుగైన కవరేజీ గల ప్రాంతాన్ని (కిటికీ దగ్గర లేదా వెలుపల) కనుగొనాల్సి ఉంటుంది. \n\nమళ్లీ ప్రయత్నించండి లేదా మరిన్ని ఎంపికల కోసం కస్టమర్ సేవకు కాల్ చేయండి."</string>
+    <string name="ota_successful" msgid="1106825981548107774">"మీ ఫోన్ ఇప్పుడు సక్రియం అయ్యింది. సేవ ప్రారంభం కావడానికి గరిష్ఠంగా 15 నిమిషాలు పట్టవచ్చు."</string>
+    <string name="ota_unsuccessful" msgid="8531037653803955754">"మీ ఫోన్ సక్రియం చేయబడలేదు. \nమీరు మెరుగైన కవరేజీ గల ప్రాంతాన్ని (కిటికీ దగ్గర లేదా వెలుపల) కనుగొనాల్సి ఉంటుంది. \n\nమళ్లీ ట్రై చేయండి లేదా మరిన్ని ఎంపికల కోసం కస్టమర్ సేవకు కాల్ చేయండి."</string>
     <string name="ota_spc_failure" msgid="904092035241370080">"అత్యధిక SPC వైఫల్యాలు"</string>
     <string name="ota_call_end" msgid="8657746378290737034">"వెనుకకు"</string>
     <string name="ota_try_again" msgid="6914781945599998550">"మళ్లీ ప్రయత్నించు"</string>
@@ -692,7 +694,7 @@
     <string name="change_pin_enter_new_pin_header" msgid="4739465616733486118">"కొత్త PINని సెట్ చేయండి"</string>
     <string name="change_pin_enter_new_pin_hint" msgid="2326038476516364210">"PIN తప్పనిసరిగా <xliff:g id="MIN">%1$d</xliff:g>-<xliff:g id="MAX">%2$d</xliff:g> అంకెల మధ్య ఉండాలి."</string>
     <string name="change_pin_confirm_pin_header" msgid="2606303906320705726">"మీ PINని నిర్ధారించండి"</string>
-    <string name="change_pin_confirm_pins_dont_match" msgid="305164501222587215">"PINలు సరిపోలలేదు"</string>
+    <string name="change_pin_confirm_pins_dont_match" msgid="305164501222587215">"PINలు మ్యాచ్ కాలేదు"</string>
     <string name="change_pin_succeeded" msgid="2504705600693014403">"వాయిస్ మెయిల్ PIN అప్‌డేట్ చేయబడింది"</string>
     <string name="change_pin_system_error" msgid="7772788809875146873">"PINని సెట్ చేయడం సాధ్యపడలేదు"</string>
     <string name="mobile_data_status_roaming_turned_off_subtext" msgid="6840673347416227054">"డేటా రోమింగ్ ఆఫ్ చేయబడింది"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"విమానం మోడ్ ఆన్‌లో ఉంది"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"SIM కార్డ్‌ని యాక్సెస్ చేయడం సాధ్యపడలేదు"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"మొబైల్ నెట్‌వర్క్ అందుబాటులో లేదు"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"ఉపగ్రహ మోడ్ ఆన్‌లో ఉంది"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"మీరు డయల్ చేయడానికి ప్రయత్నిస్తున్న ఫోన్ నంబర్‌తో సమస్య ఉంది. ఎర్రర్ కోడ్ 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"కాల్ పూర్తి కాలేదు. ఎర్రర్ కోడ్ 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"కాల్ పూర్తి కాలేదు. ఎర్రర్ కోడ్ 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"ఆటోమేటిక్ డేటా SIM యొక్క SubId:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL బ్యాండ్‌విడ్త్ (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL బ్యాండ్‌విడ్త్ (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE భౌతిక ఛానెల్ కాన్ఫిగరేషన్:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"ఫిజికల్ ఛానెల్ కాన్ఫిగరేషన్‌లు:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"సెల్ సమాచార రిఫ్రెష్ సగటు:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"మొత్తం సెల్ పరిమాణ సమాచారం:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"డేటా సేవ:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"మీ బ్లూటూత్ సిగ్నల్ బలహీనంగా ఉంది. స్పీకర్‌ఫోన్‌కు స్విచ్ అవ్వడానికి ట్రై చేయండి."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"కాల్ క్వాలిటీ నోటిఫికేషన్"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"తీసివేయబడిన SIP ఖాతాలు"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"ఈ ప్రొఫైల్ నుండి మెసేజ్ పంపడం సాధ్యపడలేదు"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"మీ వర్క్ పాలసీ మిమ్మల్ని వర్క్ ప్రొఫైల్ నుండి మాత్రమే మెసేజ్ పంపడానికి అనుమతిస్తుంది"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"వ్యక్తిగత యాప్ నుండి మెసేజ్ పంపడం సాధ్యం కాదు"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"మీ సంస్థ వర్క్ యాప్‌ల నుండి మెసేజ్‌లను పంపడానికి మాత్రమే మిమ్మల్ని అనుమతిస్తుంది"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"రద్దు చేయండి"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"వర్క్ ప్రొఫైల్‌కు స్విచ్ అవ్వండి"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"వర్క్ మెసేజ్‌ల యాప్‌ను ఇన్‌స్టాల్ చేయండి"</string>
 </resources>
diff --git a/res/values-th/strings.xml b/res/values-th/strings.xml
index 029c6f3..1ada10d 100644
--- a/res/values-th/strings.xml
+++ b/res/values-th/strings.xml
@@ -61,7 +61,7 @@
     <string name="labelGsmMore_with_label" msgid="3206015314393246224">"การตั้งค่าการโทร GSM (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="labelCDMAMore" msgid="7937441382611224632">"การตั้งค่าการโทร CDMA"</string>
     <string name="labelCdmaMore_with_label" msgid="7759692829160238152">"การตั้งค่าการโทร CDMA (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
-    <string name="apn_settings" msgid="1978652203074756623">"ชื่อจุดเข้าใช้งาน"</string>
+    <string name="apn_settings" msgid="1978652203074756623">"จุดเข้าใช้งาน"</string>
     <string name="settings_label" msgid="9101778088412567956">"การตั้งค่าเครือข่าย"</string>
     <string name="phone_accounts" msgid="1216879437523774604">"บัญชีการโทร"</string>
     <string name="phone_accounts_make_calls_with" msgid="16747814788918145">"โทรด้วย"</string>
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"ปิดใช้สายเรียกซ้อนระบบ CDMA ภายใต้ IMS"</string>
     <string name="updating_title" msgid="6130548922615719689">"การตั้งค่าการโทร"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"ผู้ใช้ระดับผู้ดูแลระบบเท่านั้นที่สามารถเปลี่ยนแปลงการตั้งค่าการโทรได้"</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"เฉพาะผู้ดูแลระบบหรือผู้ใช้ที่ทำงานเท่านั้นที่สามารถเปลี่ยนการตั้งค่าบัญชีของโทรศัพท์ได้"</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"การตั้งค่า (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"ข้อผิดพลาดในการตั้งค่าการโทร"</string>
     <string name="reading_settings" msgid="1605904432450871183">"กำลังประมวลการตั้งค่า…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"ไม่สามารถถือสายรอได้"</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"เชื่อมต่อเครือข่ายไร้สายเพื่อโทรออก"</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"เปิดใช้การโทรผ่าน Wi-Fi เพื่อโทรออก"</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"ปิดโหมดดาวเทียมเพื่อโทรออก"</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"ข้อมูลสำหรับกรณีฉุกเฉิน"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"เจ้าของ"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"แตะอีกครั้งเพื่อดูข้อมูล"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"โหมดบนเครื่องบินเปิดอยู่"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"เข้าถึงซิมการ์ดไม่ได้"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"เครือข่ายมือถือใช้งานไม่ได้"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"โหมดดาวเทียมเปิดอยู่"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"เกิดปัญหากับหมายเลขโทรศัพท์ที่คุณต้องการโทรหา รหัสข้อผิดพลาด 1"</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"โทรไม่สำเร็จ รหัสข้อผิดพลาด 3"</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"โทรไม่สำเร็จ รหัสข้อผิดพลาด 6"</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"SubId ของซิมอินเทอร์เน็ตเริ่มต้น:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"แบนด์วิดท์ดาวน์โหลด (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"แบนด์วิดท์อัปโหลด (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"การกำหนดค่าแชเนลทางกายภาพของ LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"การกำหนดค่าแชแนลทางกายภาพ:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"อัตราการรีเฟรชข้อมูลมือถือ:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"ข้อมูลการวัดเครือข่ายมือถือทั้งหมด:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"บริการข้อมูล:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"สัญญาณบลูทูธอ่อน ลองเปลี่ยนไปใช้ลำโพงแทน"</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"การแจ้งเตือนคุณภาพการโทร"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"บัญชี SIP ที่เลิกใช้งาน"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"ส่งข้อความจากโปรไฟล์นี้ไม่ได้"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"นโยบายการทำงานอนุญาตให้คุณส่งข้อความได้จากโปรไฟล์งานเท่านั้น"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"ส่งข้อความจากแอปส่วนตัวไม่ได้"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"องค์กรอนุญาตให้คุณส่งข้อความได้จากแอปงานเท่านั้น"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"ยกเลิก"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"สลับไปใช้โปรไฟล์งาน"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"ติดตั้งแอปรับส่งข้อความสำหรับที่ทำงาน"</string>
 </resources>
diff --git a/res/values-tl/strings.xml b/res/values-tl/strings.xml
index 37b3f44..81d5bd3 100644
--- a/res/values-tl/strings.xml
+++ b/res/values-tl/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Naka-off ang CDMA Call Waiting sa IMS"</string>
     <string name="updating_title" msgid="6130548922615719689">"Mga setting ng tawag"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Ang admin user lang ang maaaring magbago sa mga setting ng tawag."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Ang admin o user sa trabaho lang ang puwedeng magbago sa mga setting ng account ng telepono."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Mga Setting (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Error sa mga setting ng tawag"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Binabasa ang mga setting…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Hindi makakapag-hold ng mga tawag."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Kumonekta sa isang wireless network upang makatawag."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"I-enable ang pagtawag sa Wi-Fi upang tumawag."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"I-disable ang satellite mode para tumawag."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Impormasyong pang-emergency"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"May-ari"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"I-tap muli para tingnan ang impormasyon"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Naka-on ang airplane mode"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Hindi ma-access ang SIM card"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Hindi available ang mobile network"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Naka-on ang satellite mode"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"May isyu sa numero ng telepono na sinusubukan mong i-dial. Code ng error 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Hindi makumpleto ang tawag. Code ng error 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Hindi makumpleto ang tawag. Code ng error 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"SubId ng default na data SIM:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL Bandwidth (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL Bandwidth (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Configuration ng LTE Physical Channel:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Mga Configuration ng Physical Channel:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Rate ng Pag-refresh ng Impormasyon ng Cell:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Impormasyon ng Pagsukat sa Lahat ng Cell:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Serbisyo ng Data:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Mahina ang signal ng iyong bluetooth. Subukang lumipat sa speakerphone."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Notification sa Kalidad ng Tawag"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Mga hindi na ginagamit na SIP account"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Hindi makakapagpadala ng mensahe mula sa profile na ito"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Pinapayagan ka ng iyong patakaran sa trabaho na magpadala ng mensahe mula lang sa profile sa trabaho"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Hindi puwedeng magpadala ng mensahe mula sa personal na app"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Pinapayagan ka lang ng iyong organisasyon na magpadala ng mga mensahe mula sa mga app para sa trabaho"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Kanselahin"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Lumipat sa profile sa trabaho"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Mag-install ng app sa pagmemensahe para sa trabaho"</string>
 </resources>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index 6916fde..40eb5e7 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS altında CDMA Arama Bekletme Devre Dışı"</string>
     <string name="updating_title" msgid="6130548922615719689">"Çağrı ayarları"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Çağrı ayarları sadece yönetici tarafından değiştirilebilir."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Telefon hesabı ayarları, yalnızca yönetici veya iş kullanıcısı tarafından değiştirilebilir."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Ayarlar (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Çağrı ayarları hatası"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Ayarlar okunuyor..."</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Çağrılar beklemeye alınamıyor."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Telefon etmek için kablosuz ağa bağlanın."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Telefon etmek için Kablosuz çağrı\'yı etkinleştirin."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Arama yapmak için uydu modunu devre dışı bırakın."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Acil durum bilgisi"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Sahip"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Bilgileri görüntülemek için tekrar dokunun"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Uçak modu açık"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"SIM karta erişilemiyor"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Mobil ağ kullanılamıyor"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Uydu modu açık"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Arama yapmaya çalıştığınız telefon numarasıyla ilgili bir sorun var. Hata kodu 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Çağrı tamamlanamadı. Hata kodu 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Çağrı tamamlanamadı. Hata kodu 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Varsayılan veri SIM\'inin alt kimliği:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"İndirme Bant Genişliği (kb/sn.):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Yükleme Bant Genişliği (kb/sn.):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE Fiziksel Kanal Yapılandırması:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Fiziksel Kanal Yapılandırmaları:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Hücre Bilgilerini Yenileme Hızı:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Tüm Hücre Ölçümü Bilgileri:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Veri Hizmeti:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Bluetooth sinyaliniz zayıf. Hoparlöre geçmeyi deneyin."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Arama Kalitesiyle İlgili Bildirim"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Kullanımdan kaldırılan SIP hesapları"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Bu profilden mesaj gönderilemiyor"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"İşletme politikanız yalnızca iş profilinden mesaj göndermenize izin veriyor"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Kişisel bir uygulamadan mesaj gönderilemez"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Kuruluşunuz yalnızca iş uygulamalarından mesaj göndermenize izin veriyor"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"İptal"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"İş profiline geç"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"İş mesajları için uygulama yükle"</string>
 </resources>
diff --git a/res/values-uk/strings.xml b/res/values-uk/strings.xml
index ea49e93..345d8e7 100644
--- a/res/values-uk/strings.xml
+++ b/res/values-uk/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Паралельний виклик CDMA на платформі IMS вимкнено"</string>
     <string name="updating_title" msgid="6130548922615719689">"Налаштування викликів"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Налаштування викликів може змінювати лише адміністратор."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Налаштування облікового запису телефона може змінювати лише співробітник, який із ним працює, або адміністратор."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Налаштування (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Помилка налаштування викликів"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Читання налаштувань…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Не можна призупиняти виклики."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Щоб зателефонувати, під’єднайтеся до бездротової мережі."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Щоб мати змогу телефонувати, увімкніть виклики через Wi-Fi."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Щоб зателефонувати, вимкніть режим супутника."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Дані для екстрених випадків"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Власник"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Торкніться ще раз, щоб переглянути відомості"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Увімкнено режим польоту"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Немає доступу до SIM-карти"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Мобільна мережа недоступна"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Режим супутника ввімкнено"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Проблема з номером телефону, який ви набираєте. Код помилки: 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Не вдалося здійснити виклик. Код помилки: 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Не вдалося здійснити виклик. Код помилки: 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Субідентифікатор SIM-карти для даних за умовчанням:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Пропускна спроможність DL (кбіт/с):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Пропускна спроможність UL (кбіт/с):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Конфігурація фізичного каналу LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Конфігурації фізичного каналу:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Частота оновлення даних про мобільний зв\'язок:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Усі дані про показники мобільного зв\'язку:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Мобільний Інтернет:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Сигнал Bluetooth заслабкий. Спробуйте переключитися на гучний зв\'язок."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Сповіщення про якість виклику"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Облікові записи SIP, що не підтримуються"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Надіслати повідомлення з цього профілю не можна"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Відповідно до правил організації ви можете надсилати повідомлення лише з робочого профілю"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Не можна надсилати повідомлення з особистого додатка"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"У вашій організації можна надсилати повідомлення лише з робочих додатків"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Скасувати"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Перейти в робочий профіль"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Установіть робочий додаток для обміну повідомленнями"</string>
 </resources>
diff --git a/res/values-ur/strings.xml b/res/values-ur/strings.xml
index ebac5d0..520f493 100644
--- a/res/values-ur/strings.xml
+++ b/res/values-ur/strings.xml
@@ -18,7 +18,7 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="phoneAppLabel" product="tablet" msgid="1916019789885839910">"موبائل ڈیٹا"</string>
     <string name="phoneAppLabel" product="default" msgid="130465039375347763">"فون سروسز"</string>
-    <string name="emergencyDialerIconLabel" msgid="8668005772339436680">"ہنگامی ڈائلر"</string>
+    <string name="emergencyDialerIconLabel" msgid="8668005772339436680">"ایمرجنسی ڈائلر"</string>
     <string name="phoneIconLabel" msgid="3015941229249651419">"فون"</string>
     <string name="fdnListLabel" msgid="4119121875004244097">"‏FDN کی فہرست"</string>
     <string name="unknown" msgid="8279698889921830815">"نامعلوم"</string>
@@ -84,7 +84,7 @@
     <string name="smart_forwarding_settings_menu" msgid="8850429887958938540">"اسمارٹ فارورڈنگ"</string>
     <string name="smart_forwarding_settings_menu_summary" msgid="5096947726032885325">"ایک نمبر کے قابل رسائی نہ ہونے کی صورت میں کالز کو ہمیشہ دوسرے نمبر پر فارورڈ کریں"</string>
     <string name="voicemail_notifications_preference_title" msgid="7829238858063382977">"اطلاعات"</string>
-    <string name="cell_broadcast_settings" msgid="8135324242541809924">"ہنگامی براڈکاسٹس"</string>
+    <string name="cell_broadcast_settings" msgid="8135324242541809924">"ایمرجنسی براڈکاسٹس"</string>
     <string name="call_settings" msgid="3677282690157603818">"کال کی ترتیبات"</string>
     <string name="additional_gsm_call_settings" msgid="1561980168685658846">"اضافی ترتیبات"</string>
     <string name="additional_gsm_call_settings_with_label" msgid="7973920539979524908">"اضافی ترتیبات (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"‏IMS آف کے تحت CDMA کال کا انتظار کرنا"</string>
     <string name="updating_title" msgid="6130548922615719689">"کال کی ترتیبات"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"صرف منتظم صارف ہی کال کی ترتیبات تبدیل کر سکتا ہے۔"</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"صرف منتظم یا دفتر کا صارف ہی فون کے اکاؤنٹ کی ترتیبات تبدیل کر سکتا ہے۔"</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"ترتیبات (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"کال کی ترتیبات کی خرابی"</string>
     <string name="reading_settings" msgid="1605904432450871183">"ترتیبات کو پڑھ رہا ہے…"</string>
@@ -329,9 +330,9 @@
     <string name="cell_bc_sms_enable" msgid="2019708772024632073">"‏سیل نشریہ SMS فعال ہوگیا"</string>
     <string name="cell_bc_sms_disable" msgid="1214238639910875347">"‏سیل نشریہ SMS غیر فعال ہوگیا"</string>
     <string name="cb_sms_settings" msgid="6858093721831312036">"‏سیل نشریہ SMS کی ترتیبات"</string>
-    <string name="enable_disable_emergency_broadcast" msgid="6325655044472196496">"ہنگامی نشریہ"</string>
-    <string name="emergency_broadcast_enable" msgid="5759610647771102442">"ہنگامی نشریہ فعال ہوگیا"</string>
-    <string name="emergency_broadcast_disable" msgid="2844904734469323266">"ہنگامی نشریہ غیر فعال ہوگیا"</string>
+    <string name="enable_disable_emergency_broadcast" msgid="6325655044472196496">"ایمرجنسی نشریہ"</string>
+    <string name="emergency_broadcast_enable" msgid="5759610647771102442">"ایمرجنسی نشریہ فعال ہوگیا"</string>
+    <string name="emergency_broadcast_disable" msgid="2844904734469323266">"ایمرجنسی نشریہ غیر فعال ہوگیا"</string>
     <string name="enable_disable_administrative" msgid="7825925366822117961">"انتظامی"</string>
     <string name="administrative_enable" msgid="5717963431079532028">"انتظامی فعال ہوگیا"</string>
     <string name="administrative_disable" msgid="156796633660118691">"انتظامی غیر فعال ہوگیا"</string>
@@ -537,8 +538,8 @@
     <string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"کال کرنے کیل‏ئے موبائل نیٹ ورک آن کریں، ہوائی جہاز موڈ یا بیٹری سیور موڈ آف کریں۔"</string>
     <string name="incall_error_power_off" product="default" msgid="8131672264311208673">"کال کرنے کیلئے ہوائی جہاز وضع آف کریں۔"</string>
     <string name="incall_error_power_off_wfc" msgid="9125661184694727052">"کال کرنے کیلئے ہوائی جہاز وضع آف کریں یا کسی وائرلیس نیٹ ورک سے منسلک ہوں۔"</string>
-    <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"فون بہت گرم ہے"</b>\n\n"اس کال کو مکمل نہیں کیا جا سکتا۔ جب آپ کا فون ٹھنڈا ہو جائے تو دوبارہ کوشش کریں۔\n\nآپ اب بھی ہنگامی کالز کر سکتے ہیں۔"</string>
-    <string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"غیر ہنگامی کال کرنے کیلئے ہنگامی کال بیک موڈ سے اخراج کریں۔"</string>
+    <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"فون بہت گرم ہے"</b>\n\n"اس کال کو مکمل نہیں کیا جا سکتا۔ جب آپ کا فون ٹھنڈا ہو جائے تو دوبارہ کوشش کریں۔\n\nآپ اب بھی ایمرجنسی کالز کر سکتے ہیں۔"</string>
+    <string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"غیر ایمرجنسی کال کرنے کیلئے ایمرجنسی کال بیک موڈ سے اخراج کریں۔"</string>
     <string name="incall_error_emergency_only" msgid="8786127461027964653">"نیٹ ورک پر رجسٹرڈ نہیں ہے۔"</string>
     <string name="incall_error_out_of_service" msgid="1927265196942672791">"موبائل نیٹ ورک دستیاب نہیں ہے۔"</string>
     <string name="incall_error_out_of_service_wfc" msgid="4497663185857190885">"موبائل نیٹ ورک دستیاب نہیں ہے۔ کال کرنے کیلئے کسی وائرلیس نیٹ ورک سے منسلک ہوں۔"</string>
@@ -556,19 +557,20 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"کالز کو ہولڈ نہیں کیا جا سکتا۔"</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"کال کرنے کیلئے کسی وائرلیس نیٹ ورک سے منسلک ہوں۔"</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"‏کال کرنے کیلئے Wi-Fi کالنگ فعال کریں۔"</string>
-    <string name="emergency_information_hint" msgid="9208897544917793012">"ہنگامی معلومات"</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"کال کرنے کیلئے سیٹلائٹ موڈ کو غیرفعال کریں"</string>
+    <string name="emergency_information_hint" msgid="9208897544917793012">"ایمرجنسی معلومات"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"مالک"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"معلومات دیکھنے کیلئے دوبارہ تھپتھپائیں"</string>
-    <string name="emergency_enable_radio_dialog_title" msgid="2667568200755388829">"ہنگامی کال"</string>
+    <string name="emergency_enable_radio_dialog_title" msgid="2667568200755388829">"ایمرجنسی کال"</string>
     <string name="single_emergency_number_title" msgid="8413371079579067196">"ایمرجنسی نمبر"</string>
     <string name="numerous_emergency_numbers_title" msgid="8972398932506755510">"ایمرجنسی نمبرز"</string>
     <string name="emergency_call_shortcut_hint" msgid="1290485125107779500">"<xliff:g id="EMERGENCY_NUMBER">%s</xliff:g> کو کال کرنے کے لئے دوبارہ تھپتھپائيں"</string>
     <string name="emergency_enable_radio_dialog_message" msgid="1695305158151408629">"ریڈیو آن کر رہا ہے…"</string>
     <string name="emergency_enable_radio_dialog_retry" msgid="4329131876852608587">"کوئی سروس نہیں ہے۔ دوبارہ کوشش کی جا رہی ہے…"</string>
-    <string name="radio_off_during_emergency_call" msgid="8011154134040481609">"ہنگامی کال کے دوران ہوائی جہاز موڈ میں داخل نہیں ہو سکتا۔"</string>
-    <string name="dial_emergency_error" msgid="825822413209026039">"کال نہیں کی جا سکتی۔ <xliff:g id="NON_EMERGENCY_NUMBER">%s</xliff:g> ایک ہنگامی نمبر نہیں ہے۔"</string>
-    <string name="dial_emergency_empty_error" msgid="2785803395047793634">"کال نہیں کی جا سکتی۔ ایک ہنگامی نمبر ڈائل کریں۔"</string>
-    <string name="dial_emergency_calling_not_available" msgid="6485846193794727823">"ہنگامی کالنگ دستیاب نہیں ہے"</string>
+    <string name="radio_off_during_emergency_call" msgid="8011154134040481609">"ایمرجنسی کال کے دوران ہوائی جہاز موڈ میں داخل نہیں ہو سکتا۔"</string>
+    <string name="dial_emergency_error" msgid="825822413209026039">"کال نہیں کی جا سکتی۔ <xliff:g id="NON_EMERGENCY_NUMBER">%s</xliff:g> ایک ایمرجنسی نمبر نہیں ہے۔"</string>
+    <string name="dial_emergency_empty_error" msgid="2785803395047793634">"کال نہیں کی جا سکتی۔ ایک ایمرجنسی نمبر ڈائل کریں۔"</string>
+    <string name="dial_emergency_calling_not_available" msgid="6485846193794727823">"ایمرجنسی کالنگ دستیاب نہیں ہے"</string>
     <string name="pin_puk_system_user_only" msgid="1045147220686867922">"‏صرف آلہ کا مالک ہی PIN/PUK کوڈ درج کرسکتا ہے۔"</string>
     <string name="police_type_description" msgid="2819533883972081757">"پولیس"</string>
     <string name="ambulance_type_description" msgid="6798237503553180461">"ایمبولینس"</string>
@@ -633,18 +635,18 @@
     <string name="ota_try_again" msgid="6914781945599998550">"دوبارہ کوشش کریں"</string>
     <string name="ota_next" msgid="2041016619313475914">"اگلا"</string>
     <string name="ecm_exit_dialog" msgid="4200691880721429078">"EcmExitDialog"</string>
-    <string name="phone_entered_ecm_text" msgid="8431238297843035842">"ہنگامی کال بیک طرز میں داخل ہو گیا"</string>
-    <string name="phone_in_ecm_notification_title" msgid="6825016389926367946">"ہنگامی کال بیک طرز"</string>
+    <string name="phone_entered_ecm_text" msgid="8431238297843035842">"ایمرجنسی کال بیک طرز میں داخل ہو گیا"</string>
+    <string name="phone_in_ecm_notification_title" msgid="6825016389926367946">"ایمرجنسی کال بیک طرز"</string>
     <string name="phone_in_ecm_call_notification_text" msgid="653972232922670335">"ڈیٹا کنکشن غیر فعال ہوگیا"</string>
     <string name="phone_in_ecm_notification_complete_time" msgid="7341624337163082759">"<xliff:g id="COMPLETETIME">%s</xliff:g> تک کوئی ڈیٹا کنکشن نہیں"</string>
     <string name="alert_dialog_exit_ecm" msgid="7661603870224398025">"{count,plural, =1{فون ایک منٹ تک ایمرجنسی کال بیک وضع میں رہے گا۔ اس وضع میں رہتے ہوئے ڈیٹا کنکشن کا استعمال کرنے والی کوئی بھی ایپ استعمال نہیں ہو سکتی۔ کیا آپ ابھی باہر نکلنا چاہتے ہیں؟}other{‏فون ‎%s منٹ تک ایمرجنسی کال بیک وضع میں رہے گا۔ اس وضع میں رہتے ہوئے ڈیٹا کنکشن کا استعمال کرنے والی کوئی بھی ایپلیکیشن استعمال نہیں ہو سکتی۔ کیا آپ ابھی باہر نکلنا چاہتے ہیں؟}}"</string>
     <string name="alert_dialog_not_avaialble_in_ecm" msgid="8717711120099503279">"{count,plural, =1{منتخب کردہ کارروائی ایمرجنسی کال بیک وضع میں دستیاب نہیں ہے۔ فون ایک منٹ تک اس وضع میں رہے گا۔ کیا آپ ابھی نکلنا چاہتے ہیں؟}other{‏منتخب کردہ کارروائی ایمرجنسی کال بیک وضع میں دستیاب نہیں ہے۔ فون ‎%s منٹ تک اس وضع میں رہے گا۔ کیا آپ ابھی نکلنا چاہتے ہیں؟}}"</string>
-    <string name="alert_dialog_in_ecm_call" msgid="1207545603149771978">"منتخب کردہ کارروائی ایک ہنگامی کال میں رہتے ہوئے دستیاب نہیں ہے۔"</string>
-    <string name="progress_dialog_exiting_ecm" msgid="9159080081676927217">"موجودہ ہنگامی کال بیک طرز"</string>
+    <string name="alert_dialog_in_ecm_call" msgid="1207545603149771978">"منتخب کردہ کارروائی ایک ایمرجنسی کال میں رہتے ہوئے دستیاب نہیں ہے۔"</string>
+    <string name="progress_dialog_exiting_ecm" msgid="9159080081676927217">"موجودہ ایمرجنسی کال بیک طرز"</string>
     <string name="alert_dialog_yes" msgid="3532525979632841417">"ہاں"</string>
     <string name="alert_dialog_no" msgid="1075632654085988420">"نہیں"</string>
     <string name="alert_dialog_dismiss" msgid="1336356286354517054">"کالعدم کریں"</string>
-    <string name="phone_in_ecm_call_notification_text_without_data_restriction_hint" msgid="3747860785153531225">"فون ہنگامی کال بیک وضع میں ہے"</string>
+    <string name="phone_in_ecm_call_notification_text_without_data_restriction_hint" msgid="3747860785153531225">"فون ایمرجنسی کال بیک وضع میں ہے"</string>
     <string name="phone_in_ecm_notification_complete_time_without_data_restriction_hint" msgid="3690292264812050858">"<xliff:g id="COMPLETETIME">%s</xliff:g> تک"</string>
     <string name="alert_dialog_exit_ecm_without_data_restriction_hint" msgid="7549850847524907932">"{count,plural, =1{فون ایک منٹ تک ایمرجنسی کال بیک وضع میں رہے گا۔\nکیا آپ ابھی باہر نکلنا چاہتے ہیں؟}other{‏فون ‎%s منٹ تک ایمرجنسی کال بیک وضع میں رہے گا۔\nکیا آپ ابھی باہر نکلنا چاہتے ہیں؟}}"</string>
     <string name="voicemail_provider" msgid="4158806657253745294">"سروس"</string>
@@ -668,8 +670,8 @@
     <string name="enable_video_calling_dialog_msg" msgid="7141478720386203540">"‏ویڈیو کالنگ کو آن کرنے کیلئے، آپ کیلئے نیٹ ورک ترتیبات میں Enhanced 4G LTE وضع فعال کرنا ضروری ہے۔"</string>
     <string name="enable_video_calling_dialog_settings" msgid="8697890611305307110">"نیٹ ورک کی ترتیبات"</string>
     <string name="enable_video_calling_dialog_close" msgid="4298929725917045270">"بند کریں"</string>
-    <string name="sim_label_emergency_calls" msgid="9078241989421522310">"ہنگامی کالز"</string>
-    <string name="sim_description_emergency_calls" msgid="5146872803938897296">"صرف ہنگامی کالنگ"</string>
+    <string name="sim_label_emergency_calls" msgid="9078241989421522310">"ایمرجنسی کالز"</string>
+    <string name="sim_description_emergency_calls" msgid="5146872803938897296">"صرف ایمرجنسی کالنگ"</string>
     <string name="sim_description_default" msgid="7474671114363724971">"‏SIM کارڈ، سلاٹ: <xliff:g id="SLOT_ID">%s</xliff:g>"</string>
     <string name="accessibility_settings_activity_title" msgid="7883415189273700298">"ایکسیسبیلٹی"</string>
     <string name="status_hint_label_incoming_wifi_call" msgid="2606052595898044071">"‏Wi-Fi کال منجانب"</string>
@@ -681,7 +683,7 @@
     <string name="callFailed_wifi_lost" msgid="1788036730589163141">"‏Wi-Fi کنکشن کھو گیا۔ کال ختم ہو گئی۔"</string>
     <string name="dialFailed_low_battery" msgid="6857904237423407056">"کم بیٹری کی وجہ سے آپ کی ویڈیو کال نہیں کی جا سکتی۔"</string>
     <string name="callFailed_low_battery" msgid="4056828320214416182">"کم بیٹری کی وجہ سے ویڈیو کال ختم ہو گئی۔"</string>
-    <string name="callFailed_emergency_call_over_wfc_not_available" msgid="5944309590693432042">"‏اس مقام میں Wi-Fi کالنگ پر ہنگامی کالز دستیاب نہیں ہیں۔"</string>
+    <string name="callFailed_emergency_call_over_wfc_not_available" msgid="5944309590693432042">"‏اس مقام میں Wi-Fi کالنگ پر ایمرجنسی کالز دستیاب نہیں ہیں۔"</string>
     <string name="callFailed_wfc_service_not_available_in_this_location" msgid="3624536608369524988">"‏اس مقام میں Wi-Fi کالنگ دستیاب نہیں ہے۔"</string>
     <string name="change_pin_title" msgid="3564254326626797321">"‏صوتی میل PIN تبدیل کریں"</string>
     <string name="change_pin_continue_label" msgid="5177011752453506371">"جاری رکھیں"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"ہوائی جہاز وضع آن ہے"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"‏SIM کارڈ تک رسائی حاصل نہیں ہو رہی"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"موبائل نیٹ ورک دستیاب نہیں ہے"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"سیٹلائٹ موڈ آن ہے"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"جو فون نمبر آپ ڈائل کرنے کی کوشش کر رہے ہیں اس کے ساتھ مسئلہ ہے۔ خرابی کا کوڈ 1۔"</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"کال مکمل نہیں ہو سکی۔ خرابی کا کوڈ 3۔"</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"کال مکمل نہیں ہو سکی۔ خرابی کا کوڈ 6۔"</string>
@@ -850,7 +853,7 @@
     <string name="radio_info_ims_reg_status" msgid="25582845222446390">"‏IMS رجسٹریشن: <xliff:g id="STATUS">%1$s</xliff:g>\nوائس اوور LTE‏: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\n‎وائس اوور WiFi‏: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\n‎ویڈیو کالنگ: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT انٹرفیس: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
     <string name="radioInfo_service_in" msgid="45753418231446400">"سروس میں"</string>
     <string name="radioInfo_service_out" msgid="287972405416142312">"سروس میں نہیں ہے"</string>
-    <string name="radioInfo_service_emergency" msgid="4763879891415016848">"صرف ہنگامی کالیں"</string>
+    <string name="radioInfo_service_emergency" msgid="4763879891415016848">"صرف ایمرجنسی کالیں"</string>
     <string name="radioInfo_service_off" msgid="3456583511226783064">"ریڈیو آف کریں"</string>
     <string name="radioInfo_roaming_in" msgid="3156335577793145965">"رومنگ"</string>
     <string name="radioInfo_roaming_not" msgid="1904547918725478110">"رومنگ میں نہيں"</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"‏ڈیفالٹ ڈیٹا SIM کی SubId:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"‏DL بینڈ وڈتھ (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"‏UL بینڈ وڈتھ (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"‏LTE فزيکل چینل کنفیگریشن:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"چینل کی طبعی کنفیگریشنز:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"سیل کی معلومات ریفریش کرنے کی شرح:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"سیل پیمائش کی تمام معلومات:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"ڈیٹا سروس:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"آپ کا بلوٹوتھ سگنل کمزور ہے۔ اسپیکر فون پر سوئچ کر کے آزمائیں۔"</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"کال کی کوالٹی کی اطلاع"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"‏فرسودہ SIP اکاؤنٹس"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"اس پروفائل سے پیغام نہیں بھیج سکتے"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"آپ کے کام سے متعلق پالیسی آپ کو صرف دفتری پروفائل سے پیغام بھیجنے کی اجازت دیتی ہے"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"ذاتی ایپ سے پیغام نہیں بھیج سکتے"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"آپ کی تنظیم آپ کو صرف دفتری ایپس سے پیغامات بھیجنے کی اجازت دیتی ہے"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"منسوخ کریں"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"دفتری پروفائل پر سوئچ کریں"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"دفتری پیغامات ایپ انسٹال کریں"</string>
 </resources>
diff --git a/res/values-uz/strings.xml b/res/values-uz/strings.xml
index dea3dd8..19d5563 100644
--- a/res/values-uz/strings.xml
+++ b/res/values-uz/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS asosidagi CDMA chaqiruvlari uchun kutish rejimi faolsizlantirildi"</string>
     <string name="updating_title" msgid="6130548922615719689">"Chaqiruv sozlamalari"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Faqat administrator qo‘ng‘iroq sozlamalarini o‘zgartirishi mumkin."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Telefondagi hisob sozlamalarini faqat administrator yoki ishxona foydalanuvchisi oʻzgartirishi mumkin."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Sozlamalar (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Chaqiruv sozlamalarida xato"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Sozlamalar olinmoqda…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Qo‘ng‘iroqlarni ushlab turib bo‘lmadi."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Qo‘ng‘iroq qilish uchun simsiz tarmoqqa ulaning"</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Qo‘ng‘iroq qilish uchun Wi-Fi qo‘ng‘iroqlar funksiyasini yoqing."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Telefon qilish uchun sputnik rejimini faolsizlantiring."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Favqulodda vaziyatlar uchun axborot"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Egasi"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Axborotni ochish uchun yana bir marta bosing"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Parvoz rejimi yoniq"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"SIM kartaga kirishga ruxsat berilmagan"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Uyali aloqa tarmog‘idan foydalanib bo‘lmaydi"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Sputnik rejimi yoniq"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Siz chaqiruv qilmoqchi bo‘lgan telefon raqami bilan muammo mavjud. Xatolik kodi: 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Chaqiruv amalga oshmadi. Xatolik kodi: 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Chaqiruv amalga oshmadi. Xatolik kodi: 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Mobil internet uchun birlamchi SIM kartaning qoʻshimcha identifikatori:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Axborot uzatish tezligi (kbit/s):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL kanalining axborot uzatish tezligi (kbit/s):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE jismoniy kanal konfiguratsiyasi:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Tashqi kanal konfiguratsiyalari:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Tarmoq haqidagi axborotning yangilanish darajasi:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Tarmoq statistikasi:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Mobil internet xizmati:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Bluetooth signali kuchsiz. Baland ovoz rejimini yoqish tavsiya etiladi."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Chaqiruv sifati haqida bildirishnoma"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"To‘xtatilgan SIP hisoblar"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Bu profildan xabar yuborish imkonsiz"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Ishga oid siyosatingiz faqat ish profilidan xabar yuborish imkonini beradi"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Shaxsiy ilova orqali xabar yuborish imkonsiz"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Tashkilotingiz faqat ishga oid ilovalar orqali xabarlar yuborishga ruxsat beradi"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Bekor qilish"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Ish profiliga almashish"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Ishga oid xabar almashinuv ilovasini oʻrnating"</string>
 </resources>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index f74bbf4..ebaf17f 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Cuộc gọi chờ CDMA trong IMS đang tắt"</string>
     <string name="updating_title" msgid="6130548922615719689">"Cài đặt cuộc gọi"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Chỉ người dùng quản trị mới có thể thay đổi cài đặt cuộc gọi."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Chỉ quản trị viên hoặc người dùng tài khoản cho công việc mới có thể thay đổi chế độ cài đặt tài khoản điện thoại."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Cài đặt (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Lỗi cài đặt cuộc gọi"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Đang đọc các tùy chọn cài đặt…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Không thể giữ cuộc gọi."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Kết nối với mạng không dây để thực hiện cuộc gọi."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Bật gọi điện qua Wi-Fi để thực hiện cuộc gọi."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Hãy tắt chế độ vệ tinh để gọi điện."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Thông tin khẩn cấp"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Chủ sở hữu"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Nhấn lại để xem thông tin"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Chế độ trên máy bay đang bật"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Không thể truy cập vào thẻ SIM"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Không có mạng di động"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Chế độ vệ tinh đang bật"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Vấn đề với số điện thoại bạn đang cố gắng gọi. Mã lỗi 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Không thể hoàn tất cuộc gọi. Mã lỗi 3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Không thể hoàn tất cuộc gọi. Mã lỗi 6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"Mã phụ của SIM dữ liệu mặc định:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Băng thông DL (kb/giây):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Băng thông UL (kb/giây):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Cấu hình kênh LTE thực:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Cấu hình của kênh thực tế:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Tốc độ làm mới thông tin mạng di động:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Toàn bộ thông tin về số đo mạng di động:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Dịch vụ dữ liệu:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Tín hiệu Bluetooth của bạn đang yếu. Hãy thử chuyển sang loa ngoài."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Thông báo về chất lượng cuộc gọi"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Tài khoản SIP không dùng nữa"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Không gửi được tin nhắn từ hồ sơ này"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Chính sách của nơi làm việc chỉ cho phép bạn gửi tin nhắn từ hồ sơ công việc"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Không thể nhắn tin bằng ứng dụng cá nhân"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Tổ chức của bạn chỉ cho phép gửi tin nhắn bằng ứng dụng công việc"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Huỷ"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Chuyển sang hồ sơ công việc"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Cài đặt một ứng dụng nhắn tin dùng trong công việc"</string>
 </resources>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index ed1825e..f439c6b 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -63,18 +63,18 @@
     <string name="labelCdmaMore_with_label" msgid="7759692829160238152">"CDMA 通话设置(<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="apn_settings" msgid="1978652203074756623">"接入点名称 (APN)"</string>
     <string name="settings_label" msgid="9101778088412567956">"网络设置"</string>
-    <string name="phone_accounts" msgid="1216879437523774604">"通话帐号"</string>
-    <string name="phone_accounts_make_calls_with" msgid="16747814788918145">"选择通话帐号"</string>
-    <string name="phone_accounts_make_sip_calls_with" msgid="4691221006731847255">"选择 SIP 通话帐号"</string>
+    <string name="phone_accounts" msgid="1216879437523774604">"通话账号"</string>
+    <string name="phone_accounts_make_calls_with" msgid="16747814788918145">"选择通话账号"</string>
+    <string name="phone_accounts_make_sip_calls_with" msgid="4691221006731847255">"选择 SIP 通话账号"</string>
     <string name="phone_accounts_ask_every_time" msgid="6192347582666047168">"先询问"</string>
     <string name="phone_accounts_default_account_label" msgid="5107598881335931101">"无可用网络"</string>
     <string name="phone_accounts_settings_header" msgid="6296501692964706536">"设置"</string>
-    <string name="phone_accounts_choose_accounts" msgid="4748805293314824974">"选择帐号"</string>
-    <string name="phone_accounts_selection_header" msgid="2945830843104108440">"电话帐号"</string>
-    <string name="phone_accounts_add_sip_account" msgid="1437634802033309305">"添加 SIP 帐号"</string>
-    <string name="phone_accounts_configure_account_settings" msgid="6622119715253196586">"配置帐号设置"</string>
-    <string name="phone_accounts_all_calling_accounts" msgid="1609600743500618823">"所有通话帐号"</string>
-    <string name="phone_accounts_all_calling_accounts_summary" msgid="2214134955430107240">"选择可用于拨打电话的帐号"</string>
+    <string name="phone_accounts_choose_accounts" msgid="4748805293314824974">"选择账号"</string>
+    <string name="phone_accounts_selection_header" msgid="2945830843104108440">"电话账号"</string>
+    <string name="phone_accounts_add_sip_account" msgid="1437634802033309305">"添加 SIP 账号"</string>
+    <string name="phone_accounts_configure_account_settings" msgid="6622119715253196586">"配置账号设置"</string>
+    <string name="phone_accounts_all_calling_accounts" msgid="1609600743500618823">"所有通话账号"</string>
+    <string name="phone_accounts_all_calling_accounts_summary" msgid="2214134955430107240">"选择可用于拨打电话的账号"</string>
     <string name="wifi_calling" msgid="3650509202851355742">"WLAN 通话"</string>
     <string name="connection_service_default_label" msgid="7332739049855715584">"内置网络连接服务"</string>
     <string name="voicemail" msgid="7697769412804195032">"语音信箱"</string>
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"基于 IMS 的 CDMA 来电等待功能已关闭"</string>
     <string name="updating_title" msgid="6130548922615719689">"通话设置"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"只有管理员用户才能更改通话设置。"</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"电话账号设置只能由管理员或工作资料用户更改。"</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"设置(<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"通话设置出错"</string>
     <string name="reading_settings" msgid="1605904432450871183">"正在读取设置..."</string>
@@ -294,8 +295,8 @@
     <string name="limited_sim_function_notification_title" msgid="612715399099846281">"SIM 卡功能受限"</string>
     <string name="limited_sim_function_with_phone_num_notification_message" msgid="5928988883403677610">"使用 <xliff:g id="PHONE_NUMBER">%2$s</xliff:g> 时,系统可能会屏蔽<xliff:g id="CARRIER_NAME">%1$s</xliff:g>通话和数据服务。"</string>
     <string name="limited_sim_function_notification_message" msgid="5338638075496721160">"使用另一张 SIM 卡时,系统可能会屏蔽<xliff:g id="CARRIER_NAME">%1$s</xliff:g>通话和数据服务。"</string>
-    <string name="sip_accounts_removed_notification_title" msgid="3528076957535736095">"系统已找到并移除已弃用的 SIP 帐号"</string>
-    <string name="sip_accounts_removed_notification_message" msgid="1916856744869791592">"SIP 通话已不再受 Android 平台支持。\n您现有的 SIP 帐号 <xliff:g id="REMOVED_SIP_ACCOUNTS">%s</xliff:g> 已被移除。\n请确认您的默认通话帐号设置。"</string>
+    <string name="sip_accounts_removed_notification_title" msgid="3528076957535736095">"系统已找到并移除已弃用的 SIP 账号"</string>
+    <string name="sip_accounts_removed_notification_message" msgid="1916856744869791592">"SIP 通话已不再受 Android 平台支持。\n您现有的 SIP 账号 <xliff:g id="REMOVED_SIP_ACCOUNTS">%s</xliff:g> 已被移除。\n请确认您的默认通话账号设置。"</string>
     <string name="sip_accounts_removed_notification_action" msgid="3772778402370555562">"转到设置"</string>
     <string name="data_usage_title" msgid="8438592133893837464">"应用的流量使用情况"</string>
     <string name="data_usage_template" msgid="6287906680674061783">"<xliff:g id="ID_2">%2$s</xliff:g>期间使用的移动数据流量为:<xliff:g id="ID_1">%1$s</xliff:g>"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"无法保持通话。"</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"需连接至无线网络才能拨打电话。"</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"启用 WLAN 通话功能以拨打电话。"</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"停用卫星模式才能拨打电话。"</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"急救信息"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"所有者"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"再次点按即可查看信息"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"已开启飞行模式"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"无法访问 SIM 卡"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"无法连接到移动网络"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"卫星模式处于开启状态"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"您尝试拨打的电话号码有问题。错误代码为 1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"无法完成通话。错误代码为 3。"</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"无法完成通话。错误代码为 6。"</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"默认数据 SIM 卡的 SubId:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL 带宽 (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL 带宽 (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE 物理信道配置:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"实体频道配置:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"移动网络信息刷新频率:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"所有移动网络测量信息:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"数据服务:"</string>
@@ -922,9 +925,10 @@
     <string name="trigger_carrier_provisioning" msgid="1301829588620638234">"触发运营商配置"</string>
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"您的蓝牙信号较弱。请尝试切换为扬声器模式。"</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"通话质量通知"</string>
-    <string name="notification_channel_sip_account" msgid="1261816025156179637">"已弃用的 SIP 帐号"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"无法通过此资料发送消息"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"根据您的工作政策,您只能通过工作资料发送消息"</string>
+    <string name="notification_channel_sip_account" msgid="1261816025156179637">"已弃用的 SIP 账号"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"无法通过个人应用发送消息"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"贵组织仅允许您通过工作应用发送消息"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"取消"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"切换到工作资料"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"安装工作消息应用"</string>
 </resources>
diff --git a/res/values-zh-rHK/strings.xml b/res/values-zh-rHK/strings.xml
index 2ddbf1d..0fadc35 100644
--- a/res/values-zh-rHK/strings.xml
+++ b/res/values-zh-rHK/strings.xml
@@ -48,7 +48,7 @@
     <string name="no_vm_number_msg" msgid="5165161462411372504">"SIM 卡中沒有儲存任何留言信箱號碼。"</string>
     <string name="add_vm_number_str" msgid="7368168964435881637">"新增電話號碼"</string>
     <string name="voice_number_setting_primary_user_only" msgid="3394706575741912843">"只有主要使用者可以修改留言設定。"</string>
-    <string name="puk_unlocked" msgid="4627340655215746511">"您的 SIM 卡已解除封鎖。您的手機正在解除鎖定..."</string>
+    <string name="puk_unlocked" msgid="4627340655215746511">"你的 SIM 卡已解除封鎖。你的手機正在解除鎖定..."</string>
     <string name="label_ndp" msgid="7617392683877410341">"SIM 網絡解除鎖定 PIN"</string>
     <string name="label_phoneid" msgid="8775611434123577808">"流動網絡供應商的 SIM 卡已上鎖"</string>
     <string name="sim_ndp_unlock_text" msgid="7737338355451978338">"解除鎖定"</string>
@@ -113,26 +113,27 @@
     <string name="messageCFB" msgid="1958017270393563388">"忙線號碼"</string>
     <string name="sum_cfb_enabled" msgid="332037613072049492">"轉接至 <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
     <string name="sum_cfb_disabled" msgid="3589913334164866035">"關閉"</string>
-    <string name="disable_cfb_forbidden" msgid="4831494744351633961">"您的流動網絡供應商不支援在手機通話時停用轉接功能。"</string>
+    <string name="disable_cfb_forbidden" msgid="4831494744351633961">"你的流動網絡供應商不支援在手機通話時停用轉接功能。"</string>
     <string name="labelCFNRy" msgid="3403533792248457946">"無人接聽時"</string>
     <string name="messageCFNRy" msgid="7644434155765359009">"未接聽時撥號"</string>
     <string name="sum_cfnry_enabled" msgid="3000500837493854799">"轉接至 <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
     <string name="sum_cfnry_disabled" msgid="1990563512406017880">"關閉"</string>
-    <string name="disable_cfnry_forbidden" msgid="3174731413216550689">"您的流動網絡供應商不支援在手機未接聽時停用轉接功能。"</string>
+    <string name="disable_cfnry_forbidden" msgid="3174731413216550689">"你的流動網絡供應商不支援在手機未接聽時停用轉接功能。"</string>
     <string name="labelCFNRc" msgid="4163399350778066013">"無法接通時"</string>
     <string name="messageCFNRc" msgid="6980340731313007250">"無法接通時的轉接號碼"</string>
     <string name="sum_cfnrc_enabled" msgid="1799069234006073477">"轉接至 <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
     <string name="sum_cfnrc_disabled" msgid="739289696796917683">"關閉"</string>
-    <string name="disable_cfnrc_forbidden" msgid="775348748084726890">"您的流動網絡供應商不支援在手機無法接通時停用轉接功能。"</string>
-    <string name="registration_cf_forbidden" msgid="4386482610771190420">"您的流動網絡供應商不支援來電轉駁。"</string>
+    <string name="disable_cfnrc_forbidden" msgid="775348748084726890">"你的流動網絡供應商不支援在手機無法接通時停用轉接功能。"</string>
+    <string name="registration_cf_forbidden" msgid="4386482610771190420">"你的流動網絡供應商不支援來電轉駁。"</string>
     <string name="cdma_call_waiting" msgid="4565070960879673216">"要開啟來電等候功能嗎?"</string>
-    <string name="enable_cdma_call_waiting_setting" msgid="5906811747921744307">"您會在通話期間收到來電通知"</string>
+    <string name="enable_cdma_call_waiting_setting" msgid="5906811747921744307">"你會在通話期間收到來電通知"</string>
     <string name="enable_cdma_cw" msgid="811047045863422232">"開啟"</string>
     <string name="disable_cdma_cw" msgid="7119290446496301734">"取消"</string>
     <string name="cdma_call_waiting_in_ims_on" msgid="6390979414188659218">"IMS 下的 CDMA 來電等候功能已開啟"</string>
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS 下的 CDMA 來電等候功能已關閉"</string>
     <string name="updating_title" msgid="6130548922615719689">"通話設定"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"只有管理員可以變更通話設定。"</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"只有管理員或工作設定檔使用者才可以變更手機帳戶設定。"</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"設定 (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"通話設定錯誤"</string>
     <string name="reading_settings" msgid="1605904432450871183">"正在讀取設定..."</string>
@@ -144,7 +145,7 @@
     <string name="stk_cc_ss_to_ussd_error" msgid="8330749347425752192">"SS 要求已變更為 USSD 要求"</string>
     <string name="stk_cc_ss_to_ss_error" msgid="8297155544652134278">"已變更為新的 SS 要求"</string>
     <string name="stk_cc_ss_to_dial_video_error" msgid="4255261231466032505">"SS 要求已變更為視像通話"</string>
-    <string name="fdn_check_failure" msgid="1833769746374185247">"您的「手機」應用程式已開啟固定撥號設定,因此部分撥號相關功能無法正常運作。"</string>
+    <string name="fdn_check_failure" msgid="1833769746374185247">"你的「手機」應用程式已開啟固定撥號設定,因此部分撥號相關功能無法正常運作。"</string>
     <string name="radio_off_error" msgid="8321564164914232181">"查看這些設定前,請先開啟無線電。"</string>
     <string name="close_dialog" msgid="1074977476136119408">"確定"</string>
     <string name="enable" msgid="2636552299455477603">"開啟"</string>
@@ -158,10 +159,10 @@
     <string name="vm_changed" msgid="4739599044379692505">"留言信箱號碼已更改。"</string>
     <string name="vm_change_failed" msgid="7877733929455763566">"無法更改留言信箱號碼。\n如果問題持續發生,請與流動網絡供應商聯絡。"</string>
     <string name="fw_change_failed" msgid="9179241823460192148">"無法更改轉接號碼。\n如果問題持續發生,請與流動網絡供應商聯絡。"</string>
-    <string name="fw_get_in_vm_failed" msgid="2432678237218183844">"無法擷取和儲存目前的轉接號碼設定。\n您仍要轉到新的供應商嗎?"</string>
+    <string name="fw_get_in_vm_failed" msgid="2432678237218183844">"無法擷取和儲存目前的轉接號碼設定。\n你仍要轉到新的供應商嗎?"</string>
     <string name="no_change" msgid="3737264882821031892">"沒有更改。"</string>
     <string name="sum_voicemail_choose_provider" msgid="6750824719081403773">"選擇留言信箱服務"</string>
-    <string name="voicemail_default" msgid="6427575113775462077">"您的流動網絡供應商"</string>
+    <string name="voicemail_default" msgid="6427575113775462077">"你的流動網絡供應商"</string>
     <string name="vm_change_pin_old_pin" msgid="7154951790929009241">"舊的 PIN"</string>
     <string name="vm_change_pin_new_pin" msgid="2656200418481288069">"新的 PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="626015184502739044">"請稍候。"</string>
@@ -178,7 +179,7 @@
     <string name="empty_networks_list" msgid="9216418268008582342">"找不到網絡。"</string>
     <string name="network_query_error" msgid="3862515805115145124">"找不到網絡,請再試一次。"</string>
     <string name="register_on_network" msgid="4194770527833960423">"正在註冊 <xliff:g id="NETWORK">%s</xliff:g>..."</string>
-    <string name="not_allowed" msgid="8541221928746104798">"您的 SIM 卡無法連接這個網絡。"</string>
+    <string name="not_allowed" msgid="8541221928746104798">"你的 SIM 卡無法連接這個網絡。"</string>
     <string name="connect_later" msgid="1950138106010005425">"目前無法連接這個網絡,請稍後再試。"</string>
     <string name="registration_done" msgid="5337407023566953292">"已在網絡上完成註冊。"</string>
     <string name="already_auto" msgid="8607068290733079336">"已選取自動選取功能。"</string>
@@ -288,14 +289,14 @@
     <string name="roaming_enabled_message" msgid="9022249120750897">"可能需要支付漫遊費用。輕按即可修改。"</string>
     <string name="roaming_notification_title" msgid="3590348480688047320">"流動數據連線中斷"</string>
     <string name="roaming_on_notification_title" msgid="7451473196411559173">"數據漫遊已開啟"</string>
-    <string name="roaming_warning" msgid="7855681468067171971">"您可能需要支付龐大的費用。"</string>
-    <string name="roaming_check_price_warning" msgid="8212484083990570215">"請聯絡您的網絡供應商查詢定價。"</string>
+    <string name="roaming_warning" msgid="7855681468067171971">"你可能需要支付龐大的費用。"</string>
+    <string name="roaming_check_price_warning" msgid="8212484083990570215">"請聯絡你的網絡供應商查詢定價。"</string>
     <string name="roaming_alert_title" msgid="5689615818220960940">"要允許數據漫遊嗎?"</string>
     <string name="limited_sim_function_notification_title" msgid="612715399099846281">"SIM 卡功能受限"</string>
     <string name="limited_sim_function_with_phone_num_notification_message" msgid="5928988883403677610">"「<xliff:g id="CARRIER_NAME">%1$s</xliff:g>」通話和數據服務在使用 <xliff:g id="PHONE_NUMBER">%2$s</xliff:g> 卡時可能遭到封鎖。"</string>
     <string name="limited_sim_function_notification_message" msgid="5338638075496721160">"「<xliff:g id="CARRIER_NAME">%1$s</xliff:g>」通話和數據服務在使用其他 SIM 卡時可能遭到封鎖。"</string>
     <string name="sip_accounts_removed_notification_title" msgid="3528076957535736095">"已找到並移除已停用的 SIP 帳戶"</string>
-    <string name="sip_accounts_removed_notification_message" msgid="1916856744869791592">"Android 平台不再支援 SIP 通話。\n您現有的 SIP 帳戶 (<xliff:g id="REMOVED_SIP_ACCOUNTS">%s</xliff:g>) 已移除。\n請確認您的預設通話帳戶設定。"</string>
+    <string name="sip_accounts_removed_notification_message" msgid="1916856744869791592">"Android 平台不再支援 SIP 通話。\n你現有的 SIP 帳戶 (<xliff:g id="REMOVED_SIP_ACCOUNTS">%s</xliff:g>) 已移除。\n請確認你的預設通話帳戶設定。"</string>
     <string name="sip_accounts_removed_notification_action" msgid="3772778402370555562">"前往設定"</string>
     <string name="data_usage_title" msgid="8438592133893837464">"應用程式數據用量"</string>
     <string name="data_usage_template" msgid="6287906680674061783">"<xliff:g id="ID_2">%2$s</xliff:g>期間使用了 <xliff:g id="ID_1">%1$s</xliff:g>流動數據"</string>
@@ -475,7 +476,7 @@
     <string name="delete_fdn_contact" msgid="7027405651994507077">"刪除固定撥號"</string>
     <string name="deleting_fdn_contact" msgid="6872320570844460428">"正在刪除固定撥號…"</string>
     <string name="fdn_contact_deleted" msgid="1680714996763848838">"固定撥號已刪除。"</string>
-    <string name="pin2_invalid" msgid="2313954262684494442">"您所輸入的 PIN 碼不正確,FDN 未更新。"</string>
+    <string name="pin2_invalid" msgid="2313954262684494442">"你所輸入的 PIN 碼不正確,FDN 未更新。"</string>
     <string name="fdn_invalid_number" msgid="9067189814657840439">"號碼超過 <xliff:g id="FDN_NUMBER_LIMIT_LENGTH">%d</xliff:g> 位數,FDN 未更新。"</string>
     <string name="pin2_or_fdn_invalid" msgid="7542639487955868181">"FDN 無法更新。PIN2 碼不正確或電話號碼被拒。"</string>
     <string name="fdn_failed" msgid="216592346853420250">"FDN 操作失敗。"</string>
@@ -489,8 +490,8 @@
     <string name="oldPinLabel" msgid="8618515202411987721">"舊 PIN"</string>
     <string name="newPinLabel" msgid="3585899083055354732">"新的 PIN"</string>
     <string name="confirmPinLabel" msgid="7783531218662473778">"確認新 PIN"</string>
-    <string name="badPin" msgid="4549286285015892321">"您所輸入的舊 PIN 碼不正確,請再試一次。"</string>
-    <string name="mismatchPin" msgid="1467254768290323845">"您所輸入的 PIN 碼不符,請再試一次。"</string>
+    <string name="badPin" msgid="4549286285015892321">"你所輸入的舊 PIN 碼不正確,請再試一次。"</string>
+    <string name="mismatchPin" msgid="1467254768290323845">"你所輸入的 PIN 碼不符,請再試一次。"</string>
     <string name="invalidPin" msgid="7363723429414001979">"請輸入一個 4 至 8 位數的 PIN。"</string>
     <string name="disable_sim_pin" msgid="3112303905548613752">"清除 SIM PIN"</string>
     <string name="enable_sim_pin" msgid="445461050748318980">"設定 SIM PIN"</string>
@@ -514,7 +515,7 @@
     <string name="fdn_enable_puk2_requested" msgid="5793652792131588041">"密碼不正確。PIN2 現在已被封鎖。如要再試一次,請變更 PIN 2。"</string>
     <string name="puk2_requested" msgid="6992374450720307514">"密碼不正確。SIM 現在已被封鎖,請輸入 PUK2。"</string>
     <string name="puk2_blocked" msgid="3131139031779319911">"PUK2 碼已被永久封鎖。"</string>
-    <string name="pin2_attempts" msgid="5625178102026453023">\n"您還有 <xliff:g id="NUMBER">%d</xliff:g> 次嘗試機會。"</string>
+    <string name="pin2_attempts" msgid="5625178102026453023">\n"你還有 <xliff:g id="NUMBER">%d</xliff:g> 次嘗試機會。"</string>
     <string name="puk2_locked" msgid="6497760825455461057">"PUK2 已鎖定。請通知服務供應商解鎖。"</string>
     <string name="pin2_unblocked" msgid="4481107908727789303">"PIN2 目前沒有封鎖"</string>
     <string name="pin2_error_exception" msgid="8116103864600823641">"網絡或 SIM 卡錯誤。"</string>
@@ -533,18 +534,18 @@
     <string name="notification_voicemail_text_format" msgid="5720947141702312537">"撥號 <xliff:g id="VOICEMAIL_NUMBER">%s</xliff:g>"</string>
     <string name="notification_voicemail_no_vm_number" msgid="3423686009815186750">"沒有可用的留言信箱號碼"</string>
     <string name="notification_network_selection_title" msgid="255595526707809121">"沒有服務"</string>
-    <string name="notification_network_selection_text" msgid="553288408722427659">"您所選取的網絡 (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) 無法使用"</string>
+    <string name="notification_network_selection_text" msgid="553288408722427659">"你所選取的網絡 (<xliff:g id="OPERATOR_NAME">%s</xliff:g>) 無法使用"</string>
     <string name="incall_error_power_off" product="watch" msgid="7191184639454113633">"開啟流動網絡、關閉飛行模式或關閉慳電模式,以撥打電話。"</string>
     <string name="incall_error_power_off" product="default" msgid="8131672264311208673">"關閉飛行模式以撥打電話。"</string>
     <string name="incall_error_power_off_wfc" msgid="9125661184694727052">"關閉飛行模式或連接無線網絡,以撥打電話。"</string>
-    <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"電話過熱"</b>\n\n"無法完成此通話。請在電話冷卻後再試一次。\n\n您仍可進行緊急電話。"</string>
+    <string name="incall_error_power_off_thermal" product="default" msgid="8695809601655300168"><b>"電話過熱"</b>\n\n"無法完成此通話。請在電話冷卻後再試一次。\n\n你仍可進行緊急電話。"</string>
     <string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"離開緊急回撥模式即可撥打非緊急電話。"</string>
     <string name="incall_error_emergency_only" msgid="8786127461027964653">"未在網絡上完成註冊。"</string>
     <string name="incall_error_out_of_service" msgid="1927265196942672791">"無法使用流動網絡。"</string>
     <string name="incall_error_out_of_service_wfc" msgid="4497663185857190885">"無法使用流動網絡。請連接無線網絡,以撥打電話。"</string>
     <string name="incall_error_no_phone_number_supplied" msgid="8680831089508851894">"要撥打電話,請輸入有效的號碼。"</string>
     <string name="incall_error_call_failed" msgid="393508653582682539">"無法接通。"</string>
-    <string name="incall_error_cannot_add_call" msgid="5425764862628655443">"目前無法新增通話。您可以改以傳送短訊聯絡對方。"</string>
+    <string name="incall_error_cannot_add_call" msgid="5425764862628655443">"目前無法新增通話。你可以改以傳送短訊聯絡對方。"</string>
     <string name="incall_error_supp_service_unknown" msgid="8751177117194592623">"不支援的服務"</string>
     <string name="incall_error_supp_service_switch" msgid="5272822448189448479">"無法切換通話。"</string>
     <string name="incall_error_supp_service_resume" msgid="1276861499306817035">"無法恢復通話。"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"無法保留通話。"</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"連接無線網絡,以撥打電話。"</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"啟用 Wi-Fi 通話功能以撥打電話。"</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"如要撥打電話,請停用衛星模式。"</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"緊急資料"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"擁有者"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"再次輕按即可查看資訊"</string>
@@ -612,22 +614,22 @@
   </string-array>
     <string name="network_info_message" msgid="7599413947016532355">"網絡訊息"</string>
     <string name="network_error_message" msgid="4271579424089326618">"錯誤訊息"</string>
-    <string name="ota_title_activate" msgid="4049645324841263423">"啟用您的手機"</string>
-    <string name="ota_touch_activate" msgid="838764494319694754">"如要啟用手機服務,您必須撥打一個特別電話。\n\n按「啟用」 後,請聽取手機啟用說明。"</string>
+    <string name="ota_title_activate" msgid="4049645324841263423">"啟用你的手機"</string>
+    <string name="ota_touch_activate" msgid="838764494319694754">"如要啟用手機服務,你必須撥打一個特別電話。\n\n按「啟用」 後,請聽取手機啟用說明。"</string>
     <string name="ota_hfa_activation_title" msgid="3300556778212729671">"正在啟用…"</string>
     <string name="ota_hfa_activation_dialog_message" msgid="7921718445773342996">"手機正在啟用流動數據服務。\n\n這個程序最多需時 5 分鐘。"</string>
     <string name="ota_skip_activation_dialog_title" msgid="7666611236789203797">"是否略過啟用?"</string>
-    <string name="ota_skip_activation_dialog_message" msgid="6691722887019708713">"如果略過啟用程序,那麼您就無法撥打電話或是連上行動數據網絡 (雖然可連上 Wi-Fi 網絡)。除非您已啟用手機,否則每次開機時,系統都會要求您啟用手機。"</string>
+    <string name="ota_skip_activation_dialog_message" msgid="6691722887019708713">"如果略過啟用程序,那麼你就無法撥打電話或是連上行動數據網絡 (雖然可連上 Wi-Fi 網絡)。除非你已啟用手機,否則每次開機時,系統都會要求你啟用手機。"</string>
     <string name="ota_skip_activation_dialog_skip_label" msgid="5908029466817825633">"略過"</string>
     <string name="ota_activate" msgid="7939695753665438357">"啟用"</string>
     <string name="ota_title_activate_success" msgid="1272135024761004889">"手機已啟用。"</string>
     <string name="ota_title_problem_with_activation" msgid="7019745985413368726">"啟用時發生問題"</string>
-    <string name="ota_listen" msgid="2772252405488894280">"依照語音指示進行,直到您聽到啟用完成為止。"</string>
+    <string name="ota_listen" msgid="2772252405488894280">"依照語音指示進行,直到你聽到啟用完成為止。"</string>
     <string name="ota_speaker" msgid="1086766980329820528">"揚聲器"</string>
-    <string name="ota_progress" msgid="8837259285255700132">"正在為您的手機編程…"</string>
-    <string name="ota_failure" msgid="5674217489921481576">"無法為您的手機編程"</string>
-    <string name="ota_successful" msgid="1106825981548107774">"您的手機已啟用,大概需要 15 分鐘才能開始提供服務。"</string>
-    <string name="ota_unsuccessful" msgid="8531037653803955754">"您的手機未啟用。\n建議您移到接收較佳的地方 (例如窗邊或戶外)。\n\n請再試一次,或致電客戶服務中心查詢其他啟用方式。"</string>
+    <string name="ota_progress" msgid="8837259285255700132">"正在為你的手機編程…"</string>
+    <string name="ota_failure" msgid="5674217489921481576">"無法為你的手機編程"</string>
+    <string name="ota_successful" msgid="1106825981548107774">"你的手機已啟用,大概需要 15 分鐘才能開始提供服務。"</string>
+    <string name="ota_unsuccessful" msgid="8531037653803955754">"你的手機未啟用。\n建議你移到接收較佳的地方 (例如窗邊或戶外)。\n\n請再試一次,或致電客戶服務中心查詢其他啟用方式。"</string>
     <string name="ota_spc_failure" msgid="904092035241370080">"SPC 錯誤過多"</string>
     <string name="ota_call_end" msgid="8657746378290737034">"上一頁"</string>
     <string name="ota_try_again" msgid="6914781945599998550">"重試"</string>
@@ -637,16 +639,16 @@
     <string name="phone_in_ecm_notification_title" msgid="6825016389926367946">"緊急回撥模式"</string>
     <string name="phone_in_ecm_call_notification_text" msgid="653972232922670335">"數據連線已停用"</string>
     <string name="phone_in_ecm_notification_complete_time" msgid="7341624337163082759">"到<xliff:g id="COMPLETETIME">%s</xliff:g> 以前沒有數據連線"</string>
-    <string name="alert_dialog_exit_ecm" msgid="7661603870224398025">"{count,plural, =1{手機在接下來的 1 分鐘都將處於緊急回撥模式。在這個模式中,所有使用數據連線的應用程式皆無法使用。您要立即退出嗎?}other{手機在接下來的 %s 分鐘都將處於緊急回撥模式。在這個模式中,所有使用數據連線的應用程式皆無法使用。您要立即退出嗎?}}"</string>
-    <string name="alert_dialog_not_avaialble_in_ecm" msgid="8717711120099503279">"{count,plural, =1{緊急回撥模式不支援您所選取的操作。手機在接下來的 1 分鐘都將處於這個模式,您要立即退出嗎?}other{緊急回撥模式不支援您所選取的操作。手機在接下來的 %s 分鐘都將處於這個模式,您要立即退出嗎?}}"</string>
-    <string name="alert_dialog_in_ecm_call" msgid="1207545603149771978">"緊急電話模式不支援您所選取的操作。"</string>
+    <string name="alert_dialog_exit_ecm" msgid="7661603870224398025">"{count,plural, =1{手機在接下來的 1 分鐘都將處於緊急回撥模式。在這個模式中,所有使用數據連線的應用程式皆無法使用。你要立即退出嗎?}other{手機在接下來的 %s 分鐘都將處於緊急回撥模式。在這個模式中,所有使用數據連線的應用程式皆無法使用。你要立即退出嗎?}}"</string>
+    <string name="alert_dialog_not_avaialble_in_ecm" msgid="8717711120099503279">"{count,plural, =1{緊急回撥模式不支援你所選取的操作。手機在接下來的 1 分鐘都將處於這個模式,你要立即退出嗎?}other{緊急回撥模式不支援你所選取的操作。手機在接下來的 %s 分鐘都將處於這個模式,你要立即退出嗎?}}"</string>
+    <string name="alert_dialog_in_ecm_call" msgid="1207545603149771978">"緊急電話模式不支援你所選取的操作。"</string>
     <string name="progress_dialog_exiting_ecm" msgid="9159080081676927217">"正在退出緊急回撥模式"</string>
     <string name="alert_dialog_yes" msgid="3532525979632841417">"是"</string>
     <string name="alert_dialog_no" msgid="1075632654085988420">"否"</string>
     <string name="alert_dialog_dismiss" msgid="1336356286354517054">"關閉"</string>
     <string name="phone_in_ecm_call_notification_text_without_data_restriction_hint" msgid="3747860785153531225">"手機處於緊急回撥模式"</string>
     <string name="phone_in_ecm_notification_complete_time_without_data_restriction_hint" msgid="3690292264812050858">"直至<xliff:g id="COMPLETETIME">%s</xliff:g>"</string>
-    <string name="alert_dialog_exit_ecm_without_data_restriction_hint" msgid="7549850847524907932">"{count,plural, =1{手機在接下來的 1 分鐘都將處於緊急回撥模式。\n您要立即退出嗎?}other{手機在接下來的 %s 分鐘都將處於緊急回撥模式。\n您要立即退出嗎?}}"</string>
+    <string name="alert_dialog_exit_ecm_without_data_restriction_hint" msgid="7549850847524907932">"{count,plural, =1{手機在接下來的 1 分鐘都將處於緊急回撥模式。\n你要立即退出嗎?}other{手機在接下來的 %s 分鐘都將處於緊急回撥模式。\n你要立即退出嗎?}}"</string>
     <string name="voicemail_provider" msgid="4158806657253745294">"服務"</string>
     <string name="voicemail_settings" msgid="4451045613238972776">"設定"</string>
     <string name="voicemail_number_not_set" msgid="8831561283386938155">"&lt;未設定&gt;"</string>
@@ -665,7 +667,7 @@
     <string name="preference_category_ringtone" msgid="8787281191375434976">"鈴聲與震動"</string>
     <string name="pstn_connection_service_label" msgid="9200102709997537069">"內置 SIM 卡"</string>
     <string name="enable_video_calling_title" msgid="7246600931634161830">"開啟視像通話"</string>
-    <string name="enable_video_calling_dialog_msg" msgid="7141478720386203540">"如要開啟視像通話,您需要在網絡設定中啟用強化 4G LTE 模式。"</string>
+    <string name="enable_video_calling_dialog_msg" msgid="7141478720386203540">"如要開啟視像通話,你需要在網絡設定中啟用強化 4G LTE 模式。"</string>
     <string name="enable_video_calling_dialog_settings" msgid="8697890611305307110">"網絡設定"</string>
     <string name="enable_video_calling_dialog_close" msgid="4298929725917045270">"關閉"</string>
     <string name="sim_label_emergency_calls" msgid="9078241989421522310">"緊急通話"</string>
@@ -675,11 +677,11 @@
     <string name="status_hint_label_incoming_wifi_call" msgid="2606052595898044071">"Wi-Fi 通話來自"</string>
     <string name="status_hint_label_wifi_call" msgid="942993035689809853">"Wi-Fi 通話"</string>
     <string name="message_decode_error" msgid="1061856591500290887">"為訊息解碼時發生錯誤。"</string>
-    <string name="callFailed_cdma_activation" msgid="5392057031552253550">"SIM 卡已啟動您的服務,並更新了您的手機漫遊功能。"</string>
+    <string name="callFailed_cdma_activation" msgid="5392057031552253550">"SIM 卡已啟動你的服務,並更新了你的手機漫遊功能。"</string>
     <string name="callFailed_cdma_call_limit" msgid="1074219746093031412">"進行中的通話過多。請先結束或合併現有通話,再重新撥打。"</string>
     <string name="callFailed_imei_not_accepted" msgid="7257903653685147251">"無法連線,請插入有效的 SIM 卡。"</string>
     <string name="callFailed_wifi_lost" msgid="1788036730589163141">"已失去 Wi-Fi 連線。通話已結束。"</string>
-    <string name="dialFailed_low_battery" msgid="6857904237423407056">"電量過低,因此您無法撥打視像通話。"</string>
+    <string name="dialFailed_low_battery" msgid="6857904237423407056">"電量過低,因此你無法撥打視像通話。"</string>
     <string name="callFailed_low_battery" msgid="4056828320214416182">"電量過低,因此視像通話已結束。"</string>
     <string name="callFailed_emergency_call_over_wfc_not_available" msgid="5944309590693432042">"這個地區無法透過 Wi-Fi 撥打緊急電話。"</string>
     <string name="callFailed_wfc_service_not_available_in_this_location" msgid="3624536608369524988">"這個地區不支援 Wi-Fi 通話。"</string>
@@ -704,16 +706,17 @@
     <string name="mobile_data_activate_prepaid_summary" msgid="6846085278531605925">"透過「<xliff:g id="PROVIDER_NAME">%s</xliff:g>」增加流動數據"</string>
     <string name="mobile_data_activate_roaming_plan" msgid="922290995866269366">"沒有漫遊計劃"</string>
     <string name="mobile_data_activate_roaming_plan_summary" msgid="5379228493306235969">"透過「<xliff:g id="PROVIDER_NAME">%s</xliff:g>」增加漫遊計劃"</string>
-    <string name="mobile_data_activate_footer" msgid="7895874069807204548">"您可以透過您的流動網絡供應商「<xliff:g id="PROVIDER_NAME">%s</xliff:g>」增加流動數據或漫遊計劃。"</string>
+    <string name="mobile_data_activate_footer" msgid="7895874069807204548">"你可以透過你的流動網絡供應商「<xliff:g id="PROVIDER_NAME">%s</xliff:g>」增加流動數據或漫遊計劃。"</string>
     <string name="mobile_data_activate_diag_title" msgid="5401741936224757312">"要增加數據嗎?"</string>
-    <string name="mobile_data_activate_diag_message" msgid="3527260988020415441">"您可以透過「<xliff:g id="PROVIDER_NAME">%s</xliff:g>」增加數據"</string>
+    <string name="mobile_data_activate_diag_message" msgid="3527260988020415441">"你可以透過「<xliff:g id="PROVIDER_NAME">%s</xliff:g>」增加數據"</string>
     <string name="mobile_data_activate_button" msgid="1139792516354374612">"增加數據"</string>
     <string name="mobile_data_activate_cancel_button" msgid="3530174817572005860">"取消"</string>
     <string name="clh_card_title_call_ended_txt" msgid="5977978317527299698">"通話已結束"</string>
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"已開啟飛行模式"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"無法存取 SIM 卡"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"無法使用流動網絡"</string>
-    <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"您嘗試撥打的電話號碼有問題。錯誤碼 1。"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"衛星模式已開啟"</string>
+    <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"你嘗試撥打的電話號碼有問題。錯誤碼 1。"</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"無法完成通話。錯誤碼 3。"</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"無法完成通話。錯誤碼 6。"</string>
     <string name="clh_callFailed_operator_determined_barring_txt" msgid="4202077821465974286">"無法完成通話。錯誤碼 8。"</string>
@@ -795,7 +798,7 @@
     <string name="messageCallBarring" msgid="5537730400652466912">"輸入密碼"</string>
     <string name="call_barring_settings" msgid="4616607285790258919">"通話限制設定"</string>
     <string name="callFailed_NetworkBusy" msgid="5437103975842913681">"網絡忙碌中。請稍後再撥。"</string>
-    <string name="callFailed_NetworkCongested" msgid="6801283142342775380">"網絡壅塞。請通知您的流動網絡供應商提供協助。"</string>
+    <string name="callFailed_NetworkCongested" msgid="6801283142342775380">"網絡壅塞。請通知你的流動網絡供應商提供協助。"</string>
     <string name="supp_service_notification_call_deflected" msgid="4980942818105909813">"通話已轉向。"</string>
     <string name="supp_service_notification_call_forwarded" msgid="7102930311735433088">"通話已轉駁。"</string>
     <string name="supp_service_notification_call_waiting" msgid="4577403881609445324">"通話尚待接聽。"</string>
@@ -818,10 +821,10 @@
     <string name="callFailed_already_ringing" msgid="2376603543544289303">"由於目前有尚未接聽的來電,因此無法撥打電話。請先接聽或拒絕來電,然後再撥打電話。"</string>
     <string name="callFailed_calling_disabled" msgid="5010992739401206283">"致電功能已由 ro.telephony.disable-call 系統屬性停用,因此無法打電話。"</string>
     <string name="callFailed_too_many_calls" msgid="2761754044990799580">"目前已有兩個通話正在進行,因此無法撥打電話。請先結束其中一個通話,或將兩個通話合併為一個會議,才撥打電話。"</string>
-    <string name="supp_service_over_ut_precautions" msgid="2145018231396701311">"如要使用<xliff:g id="SUPP_SERVICE">%s</xliff:g>,請確保流動數據已開啟。您可以在流動網絡設定中變更此設定。"</string>
-    <string name="supp_service_over_ut_precautions_roaming" msgid="670342104569972327">"如要使用<xliff:g id="SUPP_SERVICE">%s</xliff:g>,請確保流動數據和數據漫遊已開啟。您可以在流動網絡設定中變更此設定。"</string>
-    <string name="supp_service_over_ut_precautions_dual_sim" msgid="5166866975550910474">"如要使用<xliff:g id="SUPP_SERVICE">%1$s</xliff:g>,請確保 SIM 卡 (<xliff:g id="SIM_NUMBER">%2$d</xliff:g>) 的流動數據已開啟。您可以在流動網絡設定中變更此設定。"</string>
-    <string name="supp_service_over_ut_precautions_roaming_dual_sim" msgid="6627654855191817965">"如要使用<xliff:g id="SUPP_SERVICE">%1$s</xliff:g>,請確保 SIM 卡 <xliff:g id="SIM_NUMBER">%2$d</xliff:g> 的流動數據和數據漫遊已開啟。您可以在流動網絡設定中變更此設定。"</string>
+    <string name="supp_service_over_ut_precautions" msgid="2145018231396701311">"如要使用<xliff:g id="SUPP_SERVICE">%s</xliff:g>,請確保流動數據已開啟。你可以在流動網絡設定中變更此設定。"</string>
+    <string name="supp_service_over_ut_precautions_roaming" msgid="670342104569972327">"如要使用<xliff:g id="SUPP_SERVICE">%s</xliff:g>,請確保流動數據和數據漫遊已開啟。你可以在流動網絡設定中變更此設定。"</string>
+    <string name="supp_service_over_ut_precautions_dual_sim" msgid="5166866975550910474">"如要使用<xliff:g id="SUPP_SERVICE">%1$s</xliff:g>,請確保 SIM 卡 (<xliff:g id="SIM_NUMBER">%2$d</xliff:g>) 的流動數據已開啟。你可以在流動網絡設定中變更此設定。"</string>
+    <string name="supp_service_over_ut_precautions_roaming_dual_sim" msgid="6627654855191817965">"如要使用<xliff:g id="SUPP_SERVICE">%1$s</xliff:g>,請確保 SIM 卡 <xliff:g id="SIM_NUMBER">%2$d</xliff:g> 的流動數據和數據漫遊已開啟。你可以在流動網絡設定中變更此設定。"</string>
     <string name="supp_service_over_ut_precautions_dialog_dismiss" msgid="5934541487903081652">"關閉"</string>
     <string name="radio_info_data_connection_enable" msgid="6183729739783252840">"啟用數據連線"</string>
     <string name="radio_info_data_connection_disable" msgid="6404751291511368706">"停用數據連線"</string>
@@ -832,7 +835,7 @@
     <string name="cbrs_data_switch_string" msgid="6060356430838077653">"CBRS 數據"</string>
     <string name="dsds_switch_string" msgid="7564769822086764796">"啟用 DSDS"</string>
     <string name="dsds_dialog_title" msgid="8494569893941847575">"要重新啟動裝置嗎?"</string>
-    <string name="dsds_dialog_message" msgid="4047480385678538850">"您需要重新啟動裝置,才可變更此設定。"</string>
+    <string name="dsds_dialog_message" msgid="4047480385678538850">"你需要重新啟動裝置,才可變更此設定。"</string>
     <string name="dsds_dialog_confirm" msgid="9032004888134129885">"重新啟動"</string>
     <string name="dsds_dialog_cancel" msgid="3245958947099586655">"取消"</string>
     <string name="removable_esim_string" msgid="7931369811671787649">"將可移除的 eSIM 卡設為預設值"</string>
@@ -850,7 +853,7 @@
     <string name="radio_info_ims_reg_status" msgid="25582845222446390">"IMS 註冊:<xliff:g id="STATUS">%1$s</xliff:g>\n語音 LTE:<xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\n語音 Wi-Fi:<xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\n視像通話:<xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT 介面:<xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
     <string name="radioInfo_service_in" msgid="45753418231446400">"服務中"</string>
     <string name="radioInfo_service_out" msgid="287972405416142312">"沒有服務"</string>
-    <string name="radioInfo_service_emergency" msgid="4763879891415016848">"只可撥打緊急電話"</string>
+    <string name="radioInfo_service_emergency" msgid="4763879891415016848">"只可致電緊急電話"</string>
     <string name="radioInfo_service_off" msgid="3456583511226783064">"收音機已關閉"</string>
     <string name="radioInfo_roaming_in" msgid="3156335577793145965">"漫遊"</string>
     <string name="radioInfo_roaming_not" msgid="1904547918725478110">"沒有使用漫遊"</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"預設數據 SIM 卡的子 ID:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"下載頻寬 (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"上載頻寬 (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE 實體渠道設定:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"實體頻道設定:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"發射站資料重新整理頻率:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"所有發射站量度資料:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"數據服務:"</string>
@@ -920,11 +923,12 @@
     <string name="phone_info_label" product="default" msgid="1784175881556791433">"手機資訊"</string>
     <string name="carrier_provisioning" msgid="2668065041869578376">"流動網絡供應商佈建資料"</string>
     <string name="trigger_carrier_provisioning" msgid="1301829588620638234">"觸發流動網絡供應商佈建程序"</string>
-    <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"您的藍牙訊號微弱。請改用擴音器。"</string>
+    <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"你的藍牙訊號微弱。請改用擴音器。"</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"通話品質通知"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"已停用的 SIP 帳戶"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"無法從此個人檔案傳送訊息"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"您的工作政策只允許透過工作設定檔傳送訊息"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"無法透過個人應用程式傳送訊息"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"你的機構只允許你透過工作應用程式傳送訊息"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"取消"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"切換至工作設定檔"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"安裝工作訊息應用程式"</string>
 </resources>
diff --git a/res/values-zh-rTW/strings.xml b/res/values-zh-rTW/strings.xml
index 8e378c4..c2aa76c 100644
--- a/res/values-zh-rTW/strings.xml
+++ b/res/values-zh-rTW/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"IMS 的 CDMA 來電等候功能已關閉"</string>
     <string name="updating_title" msgid="6130548922615719689">"通話設定"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"只有管理員使用者可以變更通話設定。"</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"只有管理員或公司內部使用者可以變更手機帳戶設定。"</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"設定 (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"通話設定錯誤"</string>
     <string name="reading_settings" msgid="1605904432450871183">"正在讀取設定…"</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"無法保留通話。"</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"連上無線網路即可撥打電話。"</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"請啟用 Wi-Fi 通話功能以撥打電話。"</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"如要撥打電話,請停用衛星模式。"</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"緊急救援資訊"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"擁有者"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"再次輕觸即可查看資訊"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"飛航模式已開啟"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"無法存取 SIM 卡"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"無法使用行動網路"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"衛星模式已開啟"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"你嘗試撥打的電話號碼有問題,錯誤代碼 1。"</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"無法完成通話,錯誤代碼 3。"</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"無法完成通話,錯誤代碼 6。"</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"預設資料 SIM 卡的子 ID:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"下行頻寬 (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"上行頻寬 (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE 實體通道設定:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"實體頻道設定:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"行動網路資訊重新整理頻率:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"所有行動網路測量資訊:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"數據服務:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"你的藍牙訊號微弱,建議你改用擴音模式。"</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"通話品質通知"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"不適用的 SIP 帳戶"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"無法透過這個資料夾傳送訊息"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"貴公司政策僅允許透過工作資料夾傳送訊息"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"無法透過個人應用程式傳送訊息"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"貴機構僅允許透過工作應用程式傳送訊息"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"取消"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"切換至工作資料夾"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"安裝工作訊息應用程式"</string>
 </resources>
diff --git a/res/values-zu/strings.xml b/res/values-zu/strings.xml
index 578e183..452a3c8 100644
--- a/res/values-zu/strings.xml
+++ b/res/values-zu/strings.xml
@@ -133,6 +133,7 @@
     <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"Ukulinda kwekholi ye-CDMA ngaphansi kwe-IMS kuvaliwe"</string>
     <string name="updating_title" msgid="6130548922615719689">"Izilungiselelo zekholi"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Izilungiselelo zekholi zingaguqulwa kuphela ngumsebenzisi oyinhloko."</string>
+    <string name="phone_account_settings_user_restriction" msgid="9142685151087208396">"Amasethingi e-akhawunti yefoni angashintshwa kuphela umphathi noma umsebenzisi wasemsebenzini."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Izilungiselelo (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="error_updating_title" msgid="2024290892676808965">"Iphutha lokulungiselela ikholi"</string>
     <string name="reading_settings" msgid="1605904432450871183">"Ifunda izilungiselelo..."</string>
@@ -556,6 +557,7 @@
     <string name="incall_error_supp_service_hold" msgid="8535056414643540997">"Ayikwazi ukubamba amakholi."</string>
     <string name="incall_error_wfc_only_no_wireless_network" msgid="5860742792811400109">"Xhumeka kunethiwekhi engenantambo ukuze wenze ikholi."</string>
     <string name="incall_error_promote_wfc" msgid="9164896813931363415">"Nika amandla ukushaya kwevoyisimeyili ukuze wenze ikholi."</string>
+    <string name="incall_error_satellite_enabled" msgid="1936541518147323016">"Khubaza umumo wesethelayithi ukuze wenze ikholi."</string>
     <string name="emergency_information_hint" msgid="9208897544917793012">"Ulwazi lwesimo esiphuthumayo"</string>
     <string name="emergency_information_owner_hint" msgid="6256909888049185316">"Umnikazi"</string>
     <string name="emergency_information_confirm_hint" msgid="5109017615894918914">"Thepha futhi ukuze ubuke ulwazi"</string>
@@ -713,6 +715,7 @@
     <string name="clh_callFailed_powerOff_txt" msgid="8279934912560765361">"Imodi yendiza ivuliwe"</string>
     <string name="clh_callFailed_simError_txt" msgid="5128538525762326413">"Ayikwazi ukufinyelela ku-SIM card"</string>
     <string name="clh_incall_error_out_of_service_txt" msgid="2736010617446749869">"Inethiwekhi yeselula ayitholakali"</string>
+    <string name="clh_callFailed_satelliteEnabled_txt" msgid="1675517238240377396">"Umumo wesethelayithi uvuliwe"</string>
     <string name="clh_callFailed_unassigned_number_txt" msgid="141967660286695682">"Inkinga nenombolo yefoni ozama ukuyishayela. Ikhodi yephutha ngu-1."</string>
     <string name="clh_callFailed_no_route_to_destination_txt" msgid="4805015149822352308">"Ayikwazanga ukuqedela ikholi. Ikhodi yephutha ngu-3."</string>
     <string name="clh_callFailed_channel_unacceptable_txt" msgid="4062754579408613021">"Ayikwazanga ukuqedela ikholi. Ikhodi yephutha ngu-6."</string>
@@ -873,7 +876,7 @@
     <string name="radio_info_dds" msgid="1122593144425697126">"I-SubId ye-SIM yedatha yokuzenzakalela:"</string>
     <string name="radio_info_dl_kbps" msgid="2382922659525318726">"Umkhawulokudonsa we-DL (kbps):"</string>
     <string name="radio_info_ul_kbps" msgid="2102225400904799036">"Umkhawulokudonsa we-UL (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"Ukulungiselelwa okuphathekayo kwesiteshi se-LTE:"</string>
+    <string name="radio_info_phy_chan_config" msgid="608045501232211303">"Ukucushwa Kwesiteshi Esiphathekayo:"</string>
     <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Isilinganiso sokuqalisa kabusha solwazi lweseli:"</string>
     <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"Ulwazi lwesilinganiso seseli:"</string>
     <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Isevisi yedatha:"</string>
@@ -923,8 +926,9 @@
     <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Isignali yakho ye-bluetooth ayiqinile. Zama ukushintshela kusipikhasefoni."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Isaziso Sekhwalithi"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Ama-akhawunti we-SIP ehlisiwe"</string>
-    <string name="send_from_work_profile_title" msgid="9201528838448432473">"Ayikwazi ukuthumela umyalezo kusukela kule phrofayela"</string>
-    <string name="send_from_work_profile_description" msgid="5002701841936861636">"Inqubomgomo yakho yomsebenzi ikuvumela ukuthi uthumele umyalezo kuphela usuka kuphrofayela yomsebenzi"</string>
+    <string name="send_from_work_profile_title" msgid="7044759579507604732">"Ayikwazi ukuthumela umlayezo kusuka ku-app yomuntu siqu"</string>
+    <string name="send_from_work_profile_description" msgid="2174402508727161974">"Inhlangano yakho ivumela kuphela wena ukuthumela imilayezo kusuka kuma-app womsebenzi"</string>
     <string name="send_from_work_profile_cancel" msgid="177746511030381711">"Khansela"</string>
     <string name="send_from_work_profile_action_str" msgid="6892775562934243337">"Shintshela kuphrofayela yomsebenzi"</string>
+    <string name="install_messages_on_work_profile_action_str" msgid="3773440996395152903">"Faka i-app yemilayezo yomsebenzi"</string>
 </resources>
diff --git a/res/values/config.xml b/res/values/config.xml
index ba65302..dcfa364 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -318,6 +318,25 @@
     <string-array name="thermal_mitigation_allowlisted_packages" translatable="false">
     </string-array>
 
+    <!-- Array of carriers that don't care about NGRAN's preference in the preferred emergency
+         network scan list after SIM is removed. -->
+    <integer-array name="config_carriers_ignore_ngran_preference_when_sim_removed">
+        <!-- 001-01 Test SIM -->
+        <item>1911</item>
+    </integer-array>
+
+    <!-- Array of countries that active SIM is needed for emergency calls. Values should be
+         ISO3166 country codes in lowercase. -->
+    <string-array name="config_countries_require_sim_for_emergency" translatable="false">
+        <!-- b/177967010 -->
+        <item>jp</item>
+        <!-- b/230443699 -->
+        <item>in</item>
+        <item>sg</item>
+        <!-- b/198393826 -->
+        <item>de</item>
+    </string-array>
+
     <!-- Flag specifying whether the AOSP domain selection is enabled or
          the device should fallback to the modem based domain selection architecture. -->
     <bool name="config_enable_aosp_domain_selection">false</bool>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index b32b030..61143c9 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2101,7 +2101,7 @@
     <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
     <string name="radio_info_ul_kbps">UL Bandwidth (kbps):</string>
     <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
-    <string name="radio_info_phy_chan_config">LTE Physical Channel Configuration:</string>
+    <string name="radio_info_phy_chan_config">Physical Channel Configurations:</string>
     <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
     <string name="radio_info_cell_info_refresh_rate">Cell Info Refresh Rate:</string>
     <!-- Radio Info screen. Label for a status item.  Used for diagnostic info screens, precise translation isn't needed -->
diff --git a/src/com/android/phone/CallNotifier.java b/src/com/android/phone/CallNotifier.java
index 73b61b6..daf3aa2 100644
--- a/src/com/android/phone/CallNotifier.java
+++ b/src/com/android/phone/CallNotifier.java
@@ -489,7 +489,7 @@
     public void updatePhoneStateListeners(boolean isRefresh, int updateType, int subIdToUpdate) {
         List<SubscriptionInfo> subInfos = SubscriptionManagerService.getInstance()
                 .getActiveSubscriptionInfoList(mApplication.getOpPackageName(),
-                        mApplication.getAttributionTag());
+                        mApplication.getAttributionTag(), true/*isForAllProfile*/);
 
         // Sort sub id list based on slot id, so that CFI/MWI notifications will be updated for
         // slot 0 first then slot 1. This is needed to ensure that when CFI or MWI is enabled for
diff --git a/src/com/android/phone/CarrierConfigLoader.java b/src/com/android/phone/CarrierConfigLoader.java
index ee73f6d..3eafb24 100644
--- a/src/com/android/phone/CarrierConfigLoader.java
+++ b/src/com/android/phone/CarrierConfigLoader.java
@@ -39,6 +39,7 @@
 import android.os.IBinder;
 import android.os.Looper;
 import android.os.Message;
+import android.os.PermissionEnforcer;
 import android.os.PersistableBundle;
 import android.os.Process;
 import android.os.RemoteException;
@@ -67,8 +68,8 @@
 import com.android.internal.telephony.TelephonyPermissions;
 import com.android.internal.telephony.subscription.SubscriptionManagerService;
 import com.android.internal.telephony.util.ArrayUtils;
+import com.android.internal.telephony.util.TelephonyUtils;
 import com.android.internal.util.IndentingPrintWriter;
-import com.android.telephony.Rlog;
 
 import java.io.File;
 import java.io.FileDescriptor;
@@ -78,12 +79,19 @@
 import java.io.FilenameFilter;
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.nio.file.attribute.BasicFileAttributes;
+import java.text.SimpleDateFormat;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.List;
+import java.util.Locale;
 import java.util.Objects;
 import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 /**
  * CarrierConfigLoader binds to privileged carrier apps to fetch carrier config overlays.
@@ -91,6 +99,9 @@
 public class CarrierConfigLoader extends ICarrierConfigLoader.Stub {
     private static final String LOG_TAG = "CarrierConfigLoader";
 
+    private static final SimpleDateFormat TIME_FORMAT =
+            new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.US);
+
     // Package name for platform carrier config app, bundled with system image.
     @NonNull private final String mPlatformCarrierConfigPackage;
 
@@ -129,7 +140,7 @@
     // Broadcast receiver for system events
     @NonNull
     private final BroadcastReceiver mSystemBroadcastReceiver = new ConfigLoaderBroadcastReceiver();
-    @NonNull private final LocalLog mCarrierConfigLoadingLog = new LocalLog(100);
+    @NonNull private final LocalLog mCarrierConfigLoadingLog = new LocalLog(256);
     // Number of phone instances (active modem count)
     private int mNumPhones;
 
@@ -228,7 +239,7 @@
         @Override
         public void handleMessage(@NonNull Message msg) {
             final int phoneId = msg.arg1;
-            logdWithLocalLog("mHandler: " + eventToString(msg.what) + " phoneId: " + phoneId);
+            logd(eventToString(msg.what) + " phoneId: " + phoneId);
             if (!SubscriptionManager.isValidPhoneId(phoneId)
                     && msg.what != EVENT_MULTI_SIM_CONFIG_CHANGED) {
                 return;
@@ -276,19 +287,11 @@
                     PersistableBundle config = restoreConfigFromXml(
                             mPlatformCarrierConfigPackage, OVERRIDE_PACKAGE_ADDITION, phoneId);
                     if (config != null) {
-                        logd("Loaded persistent override config from XML. package="
-                                + mPlatformCarrierConfigPackage
-                                + " phoneId=" + phoneId);
                         mPersistentOverrideConfigs[phoneId] = config;
                     }
 
                     config = restoreConfigFromXml(mPlatformCarrierConfigPackage, "", phoneId);
                     if (config != null) {
-                        logd(
-                                "Loaded config from XML. package="
-                                        + mPlatformCarrierConfigPackage
-                                        + " phoneId="
-                                        + phoneId);
                         mConfigFromDefaultApp[phoneId] = config;
                         Message newMsg = obtainMessage(EVENT_FETCH_DEFAULT_DONE, phoneId, -1);
                         newMsg.getData().putBoolean("loaded_from_xml", true);
@@ -363,10 +366,10 @@
                         carrierService.getCarrierConfig(phoneId, carrierId, resultReceiver);
                         logdWithLocalLog("Fetch config for default app: "
                                 + mPlatformCarrierConfigPackage
-                                + " carrierid: " + carrierId.toString());
+                                + ", carrierId=" + carrierId.getSpecificCarrierId());
                     } catch (RemoteException e) {
                         loge("Failed to get carrier config from default app: " +
-                                mPlatformCarrierConfigPackage + " err: " + e.toString());
+                                mPlatformCarrierConfigPackage + " err: " + e);
                         unbindIfBound(mContext, conn, phoneId);
                         break; // So we don't set a timeout.
                     }
@@ -418,11 +421,6 @@
                     final PersistableBundle config =
                             restoreConfigFromXml(carrierPackageName, "", phoneId);
                     if (config != null) {
-                        logd(
-                                "Loaded config from XML. package="
-                                        + carrierPackageName
-                                        + " phoneId="
-                                        + phoneId);
                         mConfigFromCarrierApp[phoneId] = config;
                         Message newMsg = obtainMessage(EVENT_FETCH_CARRIER_DONE, phoneId, -1);
                         newMsg.getData().putBoolean("loaded_from_xml", true);
@@ -503,9 +501,9 @@
                         carrierService.getCarrierConfig(phoneId, carrierId, resultReceiver);
                         logdWithLocalLog("Fetch config for carrier app: "
                                 + getCarrierPackageForPhoneId(phoneId)
-                                + " carrierid: " + carrierId.toString());
+                                + ", carrierId=" + carrierId.getSpecificCarrierId());
                     } catch (RemoteException e) {
-                        loge("Failed to get carrier config: " + e.toString());
+                        loge("Failed to get carrier config: " + e);
                         unbindIfBound(mContext, conn, phoneId);
                         break; // So we don't set a timeout.
                     }
@@ -577,8 +575,6 @@
                             restoreNoSimConfigFromXml(mPlatformCarrierConfigPackage);
 
                     if (config != null) {
-                        logd("Loaded no SIM config from XML. package="
-                                + mPlatformCarrierConfigPackage);
                         mNoSimConfig = config;
                         sendMessage(
                                 obtainMessage(
@@ -673,7 +669,7 @@
                                 + mPlatformCarrierConfigPackage);
                     } catch (RemoteException e) {
                         loge("Failed to get no sim carrier config from default app: " +
-                                mPlatformCarrierConfigPackage + " err: " + e.toString());
+                                mPlatformCarrierConfigPackage + " err: " + e);
                         unbindIfBoundForNoSimConfig(mContext, conn, phoneId);
                         break; // So we don't set a timeout.
                     }
@@ -695,6 +691,7 @@
      */
     @VisibleForTesting
     /* package */ CarrierConfigLoader(@NonNull Context context, @NonNull Looper looper) {
+        super(PermissionEnforcer.fromContext(context));
         mContext = context;
         mPlatformCarrierConfigPackage =
                 mContext.getString(R.string.platform_carrier_config_package);
@@ -1003,7 +1000,7 @@
             int phoneId, @Nullable CarrierIdentifier carrierId, @NonNull PersistableBundle config,
             boolean isNoSimConfig) {
         if (packageName == null) {
-            loge("Cannot save config with null packageName");
+            loge("Cannot save config with null packageName. phoneId=" + phoneId);
             return;
         }
 
@@ -1013,7 +1010,7 @@
         } else {
             if (TelephonyManager.getSimStateForSlotIndex(phoneId)
                     != TelephonyManager.SIM_STATE_LOADED) {
-                loge("Skip save config because SIM records are not loaded.");
+                loge("Skip saving config because SIM records are not loaded. phoneId=" + phoneId);
                 return;
             }
 
@@ -1021,7 +1018,7 @@
             final int cid = carrierId != null ? carrierId.getSpecificCarrierId()
                     : TelephonyManager.UNKNOWN_CARRIER_ID;
             if (iccid == null) {
-                loge("Cannot save config with null iccid.");
+                loge("Cannot save config with null iccid. phoneId=" + phoneId);
                 return;
             }
             fileName = getFilenameForConfig(packageName, extraString, iccid, cid);
@@ -1038,12 +1035,12 @@
 
         final String version = getPackageVersion(packageName);
         if (version == null) {
-            loge("Failed to get package version for: " + packageName);
+            loge("Failed to get package version for: " + packageName + ", phoneId=" + phoneId);
             return;
         }
 
-        logdWithLocalLog(
-                "Save config to xml, packagename: " + packageName + " phoneId: " + phoneId);
+        logdWithLocalLog("Save carrier config to cache. phoneId=" + phoneId
+                        + ", xml=" + getFilePathForLogging(fileName) + ", version=" + version);
 
         FileOutputStream outFile = null;
         try {
@@ -1104,14 +1101,14 @@
         } else {
             if (TelephonyManager.getSimStateForSlotIndex(phoneId)
                     != TelephonyManager.SIM_STATE_LOADED) {
-                loge("Skip restore config because SIM records are not loaded.");
+                loge("Skip restore config because SIM records are not loaded. phoneId=" + phoneId);
                 return null;
             }
 
             iccid = getIccIdForPhoneId(phoneId);
             final int cid = getSpecificCarrierIdForPhoneId(phoneId);
             if (iccid == null) {
-                loge("Cannot restore config with null iccid.");
+                loge("Cannot restore config with null iccid. phoneId=" + phoneId);
                 return null;
             }
             fileName = getFilenameForConfig(packageName, extraString, iccid, cid);
@@ -1119,30 +1116,37 @@
 
         PersistableBundle restoredBundle = null;
         File file = new File(mContext.getFilesDir(), fileName);
+        String filePath = file.getPath();
+        String savedVersion = null;
         try (FileInputStream inFile = new FileInputStream(file)) {
 
             restoredBundle = PersistableBundle.readFromStream(inFile);
-            String savedVersion = restoredBundle.getString(KEY_VERSION);
+            savedVersion = restoredBundle.getString(KEY_VERSION);
             restoredBundle.remove(KEY_VERSION);
 
             if (!version.equals(savedVersion)) {
-                loge("Saved version mismatch: " + version + " vs " + savedVersion);
+                loge("Saved version mismatch: " + version + " vs " + savedVersion
+                        + ", phoneId=" + phoneId);
                 restoredBundle = null;
             }
         } catch (FileNotFoundException e) {
             // Missing file is normal occurrence that might occur with a new sim or when restoring
             // an override file during boot and should not be treated as an error.
             if (isNoSimConfig) {
-                logd("File not found: " + file.getPath());
+                logd("File not found: " + file.getPath() + ", phoneId=" + phoneId);
             } else {
-                String filePath = file.getPath();
-                filePath = getFilePathForLogging(filePath, iccid);
-                logd("File not found : " + filePath);
+                logd("File not found : " + getFilePathForLogging(filePath, iccid)
+                        + ", phoneId=" + phoneId);
             }
         } catch (IOException e) {
             loge(e.toString());
         }
 
+        if (restoredBundle != null) {
+            logdWithLocalLog("Restored carrier config from cache. phoneId=" + phoneId + ", xml="
+                    + getFilePathForLogging(fileName) + ", version=" + savedVersion
+                    + ", modified time=" + getFileTime(filePath));
+        }
         return restoredBundle;
     }
 
@@ -1152,7 +1156,7 @@
     @NonNull
     private String getFilePathForLogging(@Nullable String filePath, @Nullable String iccid) {
         // If loggable then return with actual file path
-        if (Rlog.isLoggable(LOG_TAG, Log.VERBOSE)) {
+        if (TelephonyUtils.IS_DEBUGGABLE) {
             return filePath;
         }
         String path = filePath;
@@ -1196,7 +1200,7 @@
         });
         if (packageFiles == null || packageFiles.length < 1) return false;
         for (File f : packageFiles) {
-            logd("Deleting " + getFilePathForLogging(f.getName()));
+            logdWithLocalLog("Deleting " + getFilePathForLogging(f.getName()));
             f.delete();
         }
         return true;
@@ -1401,11 +1405,11 @@
         return configSubset;
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_PHONE_STATE)
     @Override
     public void overrideConfig(int subscriptionId, @Nullable PersistableBundle overrides,
             boolean persistent) {
-        mContext.enforceCallingOrSelfPermission(
-                android.Manifest.permission.MODIFY_PHONE_STATE, null);
+        overrideConfig_enforcePermission();
         int phoneId = SubscriptionManager.getPhoneId(subscriptionId);
         if (!SubscriptionManager.isValidPhoneId(phoneId)) {
             logd("Ignore invalid phoneId: " + phoneId + " for subId: " + subscriptionId);
@@ -1433,6 +1437,8 @@
                     fileToDelete.delete();
                 }
             }
+            logdWithLocalLog("overrideConfig: subId=" + subscriptionId + ", persistent="
+                    + persistent + ", overrides=" + overrides);
             updateSubscriptionDatabase(phoneId);
         });
     }
@@ -1462,6 +1468,9 @@
                     "Invalid phoneId " + phoneId + " for subId " + subscriptionId);
         }
 
+        logdWithLocalLog("Notified carrier config changed. phoneId=" + phoneId
+                + ", subId=" + subscriptionId);
+
         // This method should block until deleting has completed, so that an error which prevents us
         // from clearing the cache is passed back to the carrier app. With the files successfully
         // deleted, this can return and we will eventually bind to the carrier app.
@@ -1471,11 +1480,11 @@
         updateConfigForPhoneId(phoneId);
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_PHONE_STATE)
     @Override
     public void updateConfigForPhoneId(int phoneId, @NonNull String simState) {
-        mContext.enforceCallingOrSelfPermission(
-                android.Manifest.permission.MODIFY_PHONE_STATE, null);
-        logdWithLocalLog("Update config for phoneId: " + phoneId + " simState: " + simState);
+        updateConfigForPhoneId_enforcePermission();
+        logdWithLocalLog("Update config for phoneId=" + phoneId + " simState=" + simState);
         if (!SubscriptionManager.isValidPhoneId(phoneId)) {
             throw new IllegalArgumentException("Invalid phoneId: " + phoneId);
         }
@@ -1495,12 +1504,11 @@
         }
     }
 
+    @android.annotation.EnforcePermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
     @Override
     @NonNull
     public String getDefaultCarrierServicePackageName() {
-        mContext.enforceCallingOrSelfPermission(
-                android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE,
-                "getDefaultCarrierServicePackageName");
+        getDefaultCarrierServicePackageName_enforcePermission();
         return mPlatformCarrierConfigPackage;
     }
 
@@ -1566,6 +1574,27 @@
     }
 
     /**
+     * Get the file time in readable format.
+     *
+     * @param filePath The full file path.
+     *
+     * @return The time in string format.
+     */
+    @Nullable
+    private String getFileTime(@NonNull String filePath) {
+        String formattedModifiedTime = null;
+        try {
+            // Convert the modified time to a readable format
+            formattedModifiedTime = TIME_FORMAT.format(Files.readAttributes(Paths.get(filePath),
+                    BasicFileAttributes.class).lastModifiedTime().toMillis());
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return formattedModifiedTime;
+    }
+
+    /**
      * If {@code args} contains {@link #DUMP_ARG_REQUESTING_PACKAGE} and a following package name,
      * we'll also call {@link IBinder#dump} on the default carrier service (if bound) and the
      * specified carrier service (if bound). Typically, this is done for connectivity bug reports
@@ -1606,8 +1635,20 @@
         }
 
         printConfig(mNoSimConfig, indentPW, "mNoSimConfig");
-        indentPW.println("CarrierConfigLoadingLog=");
+        indentPW.println("mNumPhones=" + mNumPhones);
+        indentPW.println("mPlatformCarrierConfigPackage=" + mPlatformCarrierConfigPackage);
+        indentPW.println("mServiceConnection=[" + Stream.of(mServiceConnection)
+                .map(c -> c != null ? c.pkgName : null)
+                .collect(Collectors.joining(", ")) + "]");
+        indentPW.println("mServiceBoundForNoSimConfig="
+                + Arrays.toString(mServiceBoundForNoSimConfig));
+        indentPW.println("mHasSentConfigChange=" + Arrays.toString(mHasSentConfigChange));
+        indentPW.println("mFromSystemUnlocked=" + Arrays.toString(mFromSystemUnlocked));
+        indentPW.println();
+        indentPW.println("CarrierConfigLoader local log=");
+        indentPW.increaseIndent();
         mCarrierConfigLoadingLog.dump(fd, indentPW, args);
+        indentPW.decreaseIndent();
 
         if (requestingPackage != null) {
             logd("Including default and requesting package " + requestingPackage
@@ -1619,6 +1660,16 @@
             dumpCarrierServiceIfBound(fd, indentPW, "Requesting package", requestingPackage,
                     true /* considerCarrierPrivileges */);
         }
+
+        indentPW.println();
+        indentPW.println("Cached config files:");
+        indentPW.increaseIndent();
+        for (File f : mContext.getFilesDir().listFiles((FilenameFilter) (d, filename)
+                -> filename.startsWith("carrierconfig-"))) {
+            indentPW.println(getFilePathForLogging(f.getName()) + ", modified time="
+                    + getFileTime(f.getAbsolutePath()));
+        }
+        indentPW.decreaseIndent();
     }
 
     private void printConfig(@NonNull PersistableBundle configApp,
diff --git a/src/com/android/phone/CdmaCallOptions.java b/src/com/android/phone/CdmaCallOptions.java
index 6145870..4f94b58 100644
--- a/src/com/android/phone/CdmaCallOptions.java
+++ b/src/com/android/phone/CdmaCallOptions.java
@@ -16,8 +16,10 @@
 
 package com.android.phone;
 
+import android.content.Context;
 import android.os.Bundle;
 import android.os.PersistableBundle;
+import android.os.UserManager;
 import android.preference.Preference;
 import android.preference.PreferenceScreen;
 import android.telephony.CarrierConfigManager;
@@ -30,6 +32,7 @@
 import android.view.MenuItem;
 
 import com.android.internal.telephony.PhoneConstants;
+import com.android.internal.telephony.flags.Flags;
 
 public class CdmaCallOptions extends TimeConsumingPreferenceActivity {
     private static final String LOG_TAG = "CdmaCallOptions";
@@ -78,9 +81,21 @@
             buttonVoicePrivacy.setEnabled(false);
         }
 
+        // If mobile network configs are restricted, then hide the mCallForwardingPref and
+        // mCallWaitingPref.
+        UserManager userManager = (UserManager) getSystemService(Context.USER_SERVICE);
+        boolean mobileNetworkConfigsRestricted =
+                userManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS);
+        if (Flags.ensureAccessToCallSettingsIsRestricted() && mobileNetworkConfigsRestricted) {
+            Log.i(LOG_TAG, "Mobile network configs are restricted, hiding CDMA call forwarding "
+                    + "and CDMA call waiting options.");
+        }
+
         mCallForwardingPref = getPreferenceScreen().findPreference(CALL_FORWARDING_KEY);
         if (carrierConfig != null && carrierConfig.getBoolean(
-                CarrierConfigManager.KEY_CALL_FORWARDING_VISIBILITY_BOOL)) {
+                CarrierConfigManager.KEY_CALL_FORWARDING_VISIBILITY_BOOL) &&
+                (!mobileNetworkConfigsRestricted ||
+                        !Flags.ensureAccessToCallSettingsIsRestricted())) {
             mCallForwardingPref.setIntent(
                     subInfoHelper.getIntent(CdmaCallForwardOptions.class));
         } else {
@@ -91,7 +106,9 @@
         mCallWaitingPref = (CdmaCallWaitingPreference) getPreferenceScreen()
                 .findPreference(CALL_WAITING_KEY);
         if (carrierConfig == null || !carrierConfig.getBoolean(
-                CarrierConfigManager.KEY_ADDITIONAL_SETTINGS_CALL_WAITING_VISIBILITY_BOOL)) {
+                CarrierConfigManager.KEY_ADDITIONAL_SETTINGS_CALL_WAITING_VISIBILITY_BOOL) ||
+                (Flags.ensureAccessToCallSettingsIsRestricted() &&
+                        mobileNetworkConfigsRestricted)) {
             getPreferenceScreen().removePreference(mCallWaitingPref);
             mCallWaitingPref = null;
         }
diff --git a/src/com/android/phone/GsmUmtsCallOptions.java b/src/com/android/phone/GsmUmtsCallOptions.java
index 51d1b66..be5295d 100644
--- a/src/com/android/phone/GsmUmtsCallOptions.java
+++ b/src/com/android/phone/GsmUmtsCallOptions.java
@@ -16,16 +16,20 @@
 
 package com.android.phone;
 
+import android.content.Context;
 import android.os.Bundle;
 import android.os.PersistableBundle;
+import android.os.UserManager;
 import android.preference.Preference;
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceScreen;
 import android.provider.Settings;
 import android.telephony.CarrierConfigManager;
+import android.util.Log;
 import android.view.MenuItem;
 
 import com.android.internal.telephony.PhoneConstants;
+import com.android.internal.telephony.flags.Flags;
 
 public class GsmUmtsCallOptions extends PreferenceActivity {
     private static final String LOG_TAG = "GsmUmtsCallOptions";
@@ -79,10 +83,23 @@
             isAirplaneModeOff = PhoneGlobals.AIRPLANE_ON != airplaneMode;
         }
 
+        // If mobile network configs are restricted, then hide the GsmUmtsCallForwardOptions,
+        // GsmUmtsAdditionalCallOptions, and GsmUmtsCallBarringOptions.
+        UserManager userManager = (UserManager) subInfoHelper.getPhone().getContext()
+                .getSystemService(Context.USER_SERVICE);
+        boolean mobileNetworkConfigsRestricted =
+                userManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS);
+        if (Flags.ensureAccessToCallSettingsIsRestricted() && mobileNetworkConfigsRestricted) {
+            Log.i(LOG_TAG, "Mobile network configs are restricted, hiding GSM call "
+                    + "forwarding, additional call settings, and call options.");
+        }
+
         Preference callForwardingPref = prefScreen.findPreference(CALL_FORWARDING_KEY);
         if (callForwardingPref != null) {
             if (b != null && b.getBoolean(
-                    CarrierConfigManager.KEY_CALL_FORWARDING_VISIBILITY_BOOL)) {
+                    CarrierConfigManager.KEY_CALL_FORWARDING_VISIBILITY_BOOL) &&
+                    (!Flags.ensureAccessToCallSettingsIsRestricted() ||
+                            !mobileNetworkConfigsRestricted)) {
                 callForwardingPref.setIntent(
                         subInfoHelper.getIntent(GsmUmtsCallForwardOptions.class));
                 callForwardingPref.setEnabled(isAirplaneModeOff);
@@ -97,7 +114,9 @@
             if (b != null && (b.getBoolean(
                     CarrierConfigManager.KEY_ADDITIONAL_SETTINGS_CALL_WAITING_VISIBILITY_BOOL)
                     || b.getBoolean(
-                    CarrierConfigManager.KEY_ADDITIONAL_SETTINGS_CALLER_ID_VISIBILITY_BOOL))) {
+                    CarrierConfigManager.KEY_ADDITIONAL_SETTINGS_CALLER_ID_VISIBILITY_BOOL)) &&
+                    (!Flags.ensureAccessToCallSettingsIsRestricted() ||
+                            !mobileNetworkConfigsRestricted)) {
                 additionalGsmSettingsPref.setIntent(
                         subInfoHelper.getIntent(GsmUmtsAdditionalCallOptions.class));
                 additionalGsmSettingsPref.setEnabled(isAirplaneModeOff);
@@ -108,7 +127,9 @@
 
         Preference callBarringPref = prefScreen.findPreference(CALL_BARRING_KEY);
         if (callBarringPref != null) {
-            if (b != null && b.getBoolean(CarrierConfigManager.KEY_CALL_BARRING_VISIBILITY_BOOL)) {
+            if (b != null && b.getBoolean(CarrierConfigManager.KEY_CALL_BARRING_VISIBILITY_BOOL) &&
+                    (!Flags.ensureAccessToCallSettingsIsRestricted() ||
+                            !mobileNetworkConfigsRestricted)) {
                 callBarringPref.setIntent(subInfoHelper.getIntent(GsmUmtsCallBarringOptions.class));
                 callBarringPref.setEnabled(isAirplaneModeOff);
             } else {
diff --git a/src/com/android/phone/IccNetworkDepersonalizationPanel.java b/src/com/android/phone/IccNetworkDepersonalizationPanel.java
index a4ec8a4..7099476 100644
--- a/src/com/android/phone/IccNetworkDepersonalizationPanel.java
+++ b/src/com/android/phone/IccNetworkDepersonalizationPanel.java
@@ -112,7 +112,7 @@
     }
 
     public static void dialogDismiss(int phoneId) {
-        if (phoneId >= sShowingDialog.length) {
+        if (phoneId >= sShowingDialog.length || !SubscriptionManager.isValidPhoneId(phoneId)) {
             Log.e(TAG, "[IccNetworkDepersonalizationPanel] - dismiss; invalid phoneId " + phoneId);
             return;
         }
diff --git a/src/com/android/phone/ImsProvisioningController.java b/src/com/android/phone/ImsProvisioningController.java
index a62980e..b2e34ae 100644
--- a/src/com/android/phone/ImsProvisioningController.java
+++ b/src/com/android/phone/ImsProvisioningController.java
@@ -839,7 +839,7 @@
         mSubscriptionManager = mApp.getSystemService(SubscriptionManager.class);
         mTelephonyRegistryManager = mApp.getSystemService(TelephonyRegistryManager.class);
         mTelephonyRegistryManager.addOnSubscriptionsChangedListener(
-                mSubChangedListener, mSubChangedListener.getHandlerExecutor());
+                mSubChangedListener, mHandler::post);
         mImsProvisioningLoader = imsProvisioningLoader;
 
         PhoneConfigurationManager.registerForMultiSimConfigChange(mHandler,
diff --git a/src/com/android/phone/ImsStateCallbackController.java b/src/com/android/phone/ImsStateCallbackController.java
index edad754..019c1ca 100644
--- a/src/com/android/phone/ImsStateCallbackController.java
+++ b/src/com/android/phone/ImsStateCallbackController.java
@@ -739,7 +739,7 @@
         updateFeatureControllerSize(numSlots);
 
         mTelephonyRegistryManager.addOnSubscriptionsChangedListener(
-                mSubChangedListener, mSubChangedListener.getHandlerExecutor());
+                mSubChangedListener, mHandler::post);
 
         PhoneConfigurationManager.registerForMultiSimConfigChange(mHandler,
                 EVENT_MSIM_CONFIGURATION_CHANGE, null);
diff --git a/src/com/android/phone/NotificationMgr.java b/src/com/android/phone/NotificationMgr.java
index 11887bb..3cd9a8b 100644
--- a/src/com/android/phone/NotificationMgr.java
+++ b/src/com/android/phone/NotificationMgr.java
@@ -64,6 +64,8 @@
 import com.android.internal.telephony.PhoneFactory;
 import com.android.internal.telephony.RILConstants;
 import com.android.internal.telephony.TelephonyCapabilities;
+import com.android.internal.telephony.flags.FeatureFlags;
+import com.android.internal.telephony.flags.FeatureFlagsImpl;
 import com.android.internal.telephony.util.NotificationChannelController;
 import com.android.phone.settings.VoicemailSettingsActivity;
 
@@ -146,6 +148,9 @@
     // maps each subId to selected network operator name.
     private SparseArray<String> mSelectedNetworkOperatorName = new SparseArray<>();
 
+    // feature flags
+    private final FeatureFlags mFeatureFlags;
+
     private final Handler mHandler = new Handler() {
         @Override
         public void handleMessage(Message msg) {
@@ -177,6 +182,7 @@
         mSubscriptionManager = SubscriptionManager.from(mContext);
         mTelecomManager = app.getSystemService(TelecomManager.class);
         mTelephonyManager = (TelephonyManager) app.getSystemService(Context.TELEPHONY_SERVICE);
+        mFeatureFlags = new FeatureFlagsImpl();
     }
 
     /**
@@ -828,10 +834,73 @@
      * @param subId The subscription ID
      */
     void updateNetworkSelection(int serviceState, int subId) {
+        if (!mFeatureFlags.dismissNetworkSelectionNotificationOnSimDisable()) {
+            updateNetworkSelectionForFeatureDisabled(serviceState, subId);
+            return;
+        }
+
+        // for dismissNetworkSelectionNotificationOnSimDisable feature enabled.
         int phoneId = SubscriptionManager.getPhoneId(subId);
         Phone phone = SubscriptionManager.isValidPhoneId(phoneId) ?
                 PhoneFactory.getPhone(phoneId) : PhoneFactory.getDefaultPhone();
         if (TelephonyCapabilities.supportsNetworkSelection(phone)) {
+            if (SubscriptionManager.isValidSubscriptionId(subId)
+                    && mSubscriptionManager.isActiveSubId(subId)) {
+                SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mContext);
+                String selectedNetworkOperatorName =
+                        sp.getString(Phone.NETWORK_SELECTION_NAME_KEY + subId, "");
+                // get the shared preference of network_selection.
+                // empty is auto mode, otherwise it is the operator alpha name
+                // in case there is no operator name, check the operator numeric
+                if (TextUtils.isEmpty(selectedNetworkOperatorName)) {
+                    selectedNetworkOperatorName =
+                            sp.getString(Phone.NETWORK_SELECTION_KEY + subId, "");
+                }
+                boolean isManualSelection;
+                // if restoring manual selection is controlled by framework, then get network
+                // selection from shared preference, otherwise get from real network indicators.
+                boolean restoreSelection = !mContext.getResources().getBoolean(
+                        com.android.internal.R.bool.skip_restoring_network_selection);
+                if (restoreSelection) {
+                    isManualSelection = !TextUtils.isEmpty(selectedNetworkOperatorName);
+                } else {
+                    isManualSelection = phone.getServiceStateTracker().mSS.getIsManualSelection();
+                }
+
+                if (DBG) {
+                    log("updateNetworkSelection()..." + "state = " + serviceState + " new network "
+                            + (isManualSelection ? selectedNetworkOperatorName : ""));
+                }
+
+                if (isManualSelection) {
+                    mSelectedNetworkOperatorName.put(subId, selectedNetworkOperatorName);
+                    shouldShowNotification(serviceState, subId);
+                } else {
+                    dismissNetworkSelectionNotification(subId);
+                    clearUpNetworkSelectionNotificationParam(subId);
+                }
+            } else {
+                if (DBG) {
+                    log("updateNetworkSelection()... state = " + serviceState
+                            + " not updating network due to invalid subId " + subId);
+                }
+                dismissNetworkSelectionNotificationForInactiveSubId();
+            }
+        }
+    }
+
+    /**
+     * Update notification about no service of user selected operator.
+     * For dismissNetworkSelectionNotificationOnSimDisable feature disabled.
+     *
+     * @param serviceState Phone service state
+     * @param subId The subscription ID
+     */
+    private void updateNetworkSelectionForFeatureDisabled(int serviceState, int subId) {
+        int phoneId = SubscriptionManager.getPhoneId(subId);
+        Phone phone = SubscriptionManager.isValidPhoneId(phoneId)
+                ? PhoneFactory.getPhone(phoneId) : PhoneFactory.getDefaultPhone();
+        if (TelephonyCapabilities.supportsNetworkSelection(phone)) {
             if (SubscriptionManager.isValidSubscriptionId(subId)) {
                 SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mContext);
                 String selectedNetworkOperatorName =
diff --git a/src/com/android/phone/PhoneGlobals.java b/src/com/android/phone/PhoneGlobals.java
index 88fdf3a..f93b1e5 100644
--- a/src/com/android/phone/PhoneGlobals.java
+++ b/src/com/android/phone/PhoneGlobals.java
@@ -50,6 +50,7 @@
 import android.telephony.TelephonyCallback;
 import android.telephony.TelephonyLocalConnection;
 import android.telephony.TelephonyManager;
+import android.text.TextUtils;
 import android.util.ArraySet;
 import android.util.LocalLog;
 import android.util.Log;
@@ -71,6 +72,8 @@
 import com.android.internal.telephony.data.DataEvaluation.DataDisallowedReason;
 import com.android.internal.telephony.domainselection.DomainSelectionResolver;
 import com.android.internal.telephony.emergency.EmergencyStateTracker;
+import com.android.internal.telephony.flags.FeatureFlags;
+import com.android.internal.telephony.flags.FeatureFlagsImpl;
 import com.android.internal.telephony.ims.ImsResolver;
 import com.android.internal.telephony.imsphone.ImsPhone;
 import com.android.internal.telephony.imsphone.ImsPhoneCallTracker;
@@ -181,6 +184,22 @@
 
     /** @hide */
     @Retention(RetentionPolicy.SOURCE)
+    @IntDef(prefix = {"ROAMING_NOTIFICATION_REASON_"},
+            value = {
+                    ROAMING_NOTIFICATION_REASON_DATA_SETTING_CHANGED,
+                    ROAMING_NOTIFICATION_REASON_DATA_ROAMING_SETTING_CHANGED,
+                    ROAMING_NOTIFICATION_REASON_CARRIER_CONFIG_CHANGED,
+                    ROAMING_NOTIFICATION_REASON_SERVICE_STATE_CHANGED,
+                    ROAMING_NOTIFICATION_REASON_DEFAULT_DATA_SUBS_CHANGED})
+    public @interface RoamingNotificationReason {}
+    private static final int ROAMING_NOTIFICATION_REASON_DATA_SETTING_CHANGED = 0;
+    private static final int ROAMING_NOTIFICATION_REASON_DATA_ROAMING_SETTING_CHANGED = 1;
+    private static final int ROAMING_NOTIFICATION_REASON_CARRIER_CONFIG_CHANGED = 2;
+    private static final int ROAMING_NOTIFICATION_REASON_SERVICE_STATE_CHANGED = 3;
+    private static final int ROAMING_NOTIFICATION_REASON_DEFAULT_DATA_SUBS_CHANGED = 4;
+
+    /** @hide */
+    @Retention(RetentionPolicy.SOURCE)
     @IntDef(prefix = {"ROAMING_NOTIFICATION_"},
             value = {
                     ROAMING_NOTIFICATION_NO_NOTIFICATION,
@@ -193,8 +212,18 @@
     private static final int ROAMING_NOTIFICATION_DISCONNECTED    = 2;
 
     @RoamingNotification
+    private int mCurrentRoamingNotification = ROAMING_NOTIFICATION_NO_NOTIFICATION;
+
+    /**
+     * Reasons that have already shown notification to prevent duplicate shows for the same reason.
+     */
+    private ArraySet<String> mShownNotificationReasons = new ArraySet<>();
+
+    // For reorganize_roaming_notification feature disabled.
+    @RoamingNotification
     private int mPrevRoamingNotification = ROAMING_NOTIFICATION_NO_NOTIFICATION;
 
+    // For reorganize_roaming_notification feature disabled.
     /** Operator numerics for which we've shown is-roaming notifications. **/
     private ArraySet<String> mPrevRoamingOperatorNumerics = new ArraySet<>();
 
@@ -221,6 +250,8 @@
     // fine or coarse location since we only use ServiceState for
     private PhoneAppCallback[] mTelephonyCallbacks;
 
+    private FeatureFlags mFeatureFlags;
+
     private class PhoneAppCallback extends TelephonyCallback implements
             TelephonyCallback.ServiceStateListener {
         private final int mSubId;
@@ -366,8 +397,19 @@
                     //TODO: handle message here;
                     break;
                 case EVENT_DATA_ROAMING_SETTINGS_CHANGED:
+                    if (mFeatureFlags.reorganizeRoamingNotification()) {
+                        updateDataRoamingStatus(
+                                ROAMING_NOTIFICATION_REASON_DATA_ROAMING_SETTING_CHANGED);
+                    } else {
+                        updateDataRoamingStatusForFeatureDisabled(null);
+                    }
+                    break;
                 case EVENT_MOBILE_DATA_SETTINGS_CHANGED:
-                    updateDataRoamingStatus();
+                    if (mFeatureFlags.reorganizeRoamingNotification()) {
+                        updateDataRoamingStatus(ROAMING_NOTIFICATION_REASON_DATA_SETTING_CHANGED);
+                    } else {
+                        updateDataRoamingStatusForFeatureDisabled(null);
+                    }
                     break;
                 case EVENT_CARRIER_CONFIG_CHANGED:
                     int subId = (Integer) msg.obj;
@@ -458,7 +500,8 @@
                     getResources().getBoolean(R.bool.config_enable_aosp_domain_selection));
 
             // Initialize the telephony framework
-            PhoneFactory.makeDefaultPhones(this);
+            mFeatureFlags = new FeatureFlagsImpl();
+            PhoneFactory.makeDefaultPhones(this, mFeatureFlags);
 
             // Initialize the DomainSelectionResolver after creating the Phone instance
             // to check the Radio HAL version.
@@ -516,7 +559,7 @@
 
             // Create the SatelliteController singleton, which acts as a backend service for
             // {@link android.telephony.satellite.SatelliteManager}.
-            SatelliteController.make(this);
+            SatelliteController.make(this, mFeatureFlags);
 
             // Create an instance of CdmaPhoneCallState and initialize it to IDLE
             cdmaPhoneCallState = new CdmaPhoneCallState();
@@ -531,7 +574,7 @@
 
             mKeyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
 
-            phoneMgr = PhoneInterfaceManager.init(this);
+            phoneMgr = PhoneInterfaceManager.init(this, mFeatureFlags);
 
             imsRcsController = ImsRcsController.init(this);
 
@@ -576,6 +619,15 @@
             intentFilter.addAction(TelephonyIntents.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED);
             intentFilter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED);
             registerReceiver(mReceiver, intentFilter);
+            int defaultDataSubId = SubscriptionManager.getDefaultDataSubscriptionId();
+            if (SubscriptionManager.isValidSubscriptionId(defaultDataSubId)) {
+                if (VDBG) {
+                    Log.v(LOG_TAG, "Loaded initial default data sub: " + defaultDataSubId);
+                }
+                mDefaultDataSubId = defaultDataSubId;
+                registerSettingsObserver();
+                updateDataRoamingStatus(ROAMING_NOTIFICATION_REASON_DEFAULT_DATA_SUBS_CHANGED);
+            }
 
             PhoneConfigurationManager.registerForMultiSimConfigChange(
                     mHandler, EVENT_MULTI_SIM_CONFIG_CHANGED, null);
@@ -731,13 +783,14 @@
     }
 
     private void handleAirplaneModeChange(boolean isAirplaneNewlyOn) {
+        Log.i(LOG_TAG, "handleAirplaneModeChange: isAirplaneNewlyOn=" + isAirplaneNewlyOn);
         int cellState =
                 Settings.Global.getInt(
                         getContentResolver(), Settings.Global.CELL_ON, PhoneConstants.CELL_ON_FLAG);
         switch (cellState) {
             case PhoneConstants.CELL_OFF_FLAG:
-                // Airplane mode does not affect the cell radio if user
-                // has turned it off.
+                // Airplane mode does not affect the cell radio if user has turned it off.
+                Log.i(LOG_TAG, "Ignore airplane mode change due to cell off.");
                 break;
             case PhoneConstants.CELL_ON_FLAG:
                 maybeTurnCellOff(isAirplaneNewlyOn);
@@ -777,7 +830,11 @@
     /** Clear fields on power off radio **/
     private void clearCacheOnRadioOff() {
         // Re-show is-roaming notifications after APM mode
-        mPrevRoamingOperatorNumerics.clear();
+        if (mFeatureFlags.reorganizeRoamingNotification()) {
+            mShownNotificationReasons.clear();
+        } else {
+            mPrevRoamingOperatorNumerics.clear();
+        }
     }
 
     private void setRadioPowerOn() {
@@ -808,12 +865,16 @@
             } else {
                 Log.i(LOG_TAG, "Ignoring airplane mode: settings prevent cell radio power off");
             }
+        } else {
+            Log.i(LOG_TAG, "Ignoring airplane mode: not newly on");
         }
     }
 
     private void maybeTurnCellOn(boolean isAirplaneNewlyOn) {
         if (!isAirplaneNewlyOn) {
             setRadioPowerOn();
+        } else {
+            Log.i(LOG_TAG, "Ignoring airplane mode off: radio is already on.");
         }
     }
 
@@ -870,7 +931,11 @@
             } else if (action.equals(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED)) {
                 // Roaming status could be overridden by carrier config, so we need to update it.
                 if (VDBG) Log.v(LOG_TAG, "carrier config changed.");
-                updateDataRoamingStatus();
+                if (mFeatureFlags.reorganizeRoamingNotification()) {
+                    updateDataRoamingStatus(ROAMING_NOTIFICATION_REASON_CARRIER_CONFIG_CHANGED);
+                } else {
+                    updateDataRoamingStatusForFeatureDisabled(null);
+                }
                 updateLimitedSimFunctionForDualSim();
                 int subId = intent.getIntExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX,
                         SubscriptionManager.INVALID_SUBSCRIPTION_ID);
@@ -885,7 +950,12 @@
                 registerSettingsObserver();
                 Phone phone = getPhone(mDefaultDataSubId);
                 if (phone != null) {
-                    updateDataRoamingStatus();
+                    if (mFeatureFlags.reorganizeRoamingNotification()) {
+                        updateDataRoamingStatus(
+                                ROAMING_NOTIFICATION_REASON_DEFAULT_DATA_SUBS_CHANGED);
+                    } else {
+                        updateDataRoamingStatusForFeatureDisabled(null);
+                    }
                 }
             }
         }
@@ -901,7 +971,11 @@
                     + mDefaultDataSubId + ", ss roaming=" + serviceState.getDataRoaming());
         }
         if (subId == mDefaultDataSubId) {
-            updateDataRoamingStatus(serviceState.getOperatorNumeric());
+            if (mFeatureFlags.reorganizeRoamingNotification()) {
+                updateDataRoamingStatus(ROAMING_NOTIFICATION_REASON_SERVICE_STATE_CHANGED);
+            } else {
+                updateDataRoamingStatusForFeatureDisabled(serviceState.getOperatorNumeric());
+            }
         }
     }
 
@@ -909,11 +983,144 @@
      * When roaming, if mobile data cannot be established due to data roaming not enabled, we need
      * to notify the user so they can enable it through settings. Vise versa if the condition
      * changes, we need to dismiss the notification.
+     * @param reason to inform which event is called for notification update.
      */
-    private void updateDataRoamingStatus() {
-        updateDataRoamingStatus(null /*roamingOperatorNumeric*/);
+    private void updateDataRoamingStatus(@RoamingNotificationReason int reason) {
+        if (VDBG) Log.v(LOG_TAG, "updateDataRoamingStatus");
+        Phone phone = getPhone(mDefaultDataSubId);
+        if (phone == null) {
+            Log.w(LOG_TAG, "Can't get phone with sub id = " + mDefaultDataSubId);
+            return;
+        }
+
+        ServiceState serviceState = phone.getServiceState();
+        String roamingNumeric = serviceState.getOperatorNumeric();
+        String roamingNumericReason = "RoamingNumeric=" + roamingNumeric;
+        String callingReason = "CallingReason=" + reason;
+        boolean dataIsNowRoaming = serviceState.getDataRoaming();
+        boolean dataAllowed;
+        boolean notAllowedDueToRoamingOff;
+        List<DataDisallowedReason> reasons = phone.getDataNetworkController()
+                .getInternetDataDisallowedReasons();
+        dataAllowed = reasons.isEmpty();
+        notAllowedDueToRoamingOff = (reasons.size() == 1
+                && reasons.contains(DataDisallowedReason.ROAMING_DISABLED));
+        StringBuilder sb = new StringBuilder("updateDataRoamingStatus");
+        sb.append(" dataAllowed=").append(dataAllowed);
+        sb.append(", reasons=").append(reasons);
+        sb.append(", dataIsNowRoaming=").append(dataIsNowRoaming);
+        sb.append(", ").append(roamingNumericReason);
+        sb.append(", ").append(callingReason);
+        mDataRoamingNotifLog.log(sb.toString());
+        if (VDBG) {
+            Log.v(LOG_TAG, sb.toString());
+        }
+
+        // Determine if a given roaming numeric has never been shown.
+        boolean shownInThisNumeric = false;
+        if (reason == ROAMING_NOTIFICATION_REASON_CARRIER_CONFIG_CHANGED
+                || reason == ROAMING_NOTIFICATION_REASON_SERVICE_STATE_CHANGED) {
+            shownInThisNumeric = mShownNotificationReasons.contains(roamingNumericReason);
+        }
+        // Determine if a notification has never been shown by given calling reason.
+        boolean shownForThisReason = mShownNotificationReasons.contains(callingReason);
+
+        if (!dataAllowed && notAllowedDueToRoamingOff) {
+            if (!shownInThisNumeric && roamingNumeric != null) {
+                mShownNotificationReasons.add(roamingNumericReason);
+            }
+            if (!shownForThisReason
+                    && reason == ROAMING_NOTIFICATION_REASON_CARRIER_CONFIG_CHANGED) {
+                mShownNotificationReasons.add(callingReason);
+            }
+            // No need to show it again if we never cancelled it explicitly.
+            if (getCurrentRoamingNotification() == ROAMING_NOTIFICATION_DISCONNECTED) {
+                return;
+            }
+
+            // If the only reason of no data is data roaming disabled, then we notify the user
+            // so the user can turn on data roaming.
+            if (!shownInThisNumeric && !shownForThisReason) {
+                updateDataRoamingNotification(ROAMING_NOTIFICATION_DISCONNECTED);
+            } else {
+                // Don't show roaming notification if we've already shown for this MccMnc
+                Log.d(LOG_TAG, "Skip roaming disconnected notification since already"
+                        + " shownInThisNumeric=" + shownInThisNumeric
+                        + " shownForThisReason=" + shownForThisReason);
+                // Dismiss notification if the other notification is shown.
+                if (getCurrentRoamingNotification() != ROAMING_NOTIFICATION_NO_NOTIFICATION) {
+                    updateDataRoamingNotification(ROAMING_NOTIFICATION_NO_NOTIFICATION);
+                }
+            }
+        } else if (dataAllowed && dataIsNowRoaming) {
+            if (!shownInThisNumeric && roamingNumeric != null) {
+                mShownNotificationReasons.add(roamingNumericReason);
+            }
+            if (!shownForThisReason
+                    && reason == ROAMING_NOTIFICATION_REASON_CARRIER_CONFIG_CHANGED) {
+                mShownNotificationReasons.add(callingReason);
+            }
+            boolean shouldShowRoamingNotification = shouldShowRoamingNotification(roamingNumeric);
+            // No need to show it again if we never cancelled it explicitly.
+            if (getCurrentRoamingNotification() == ROAMING_NOTIFICATION_CONNECTED) {
+                return;
+            }
+
+            // Inform users that roaming charges may apply.
+            if (!shownInThisNumeric && !shownForThisReason && shouldShowRoamingNotification) {
+                updateDataRoamingNotification(ROAMING_NOTIFICATION_CONNECTED);
+            } else {
+                // Don't show roaming notification if we've already shown for this MccMnc or
+                // disabled from carrier config.
+                Log.d(LOG_TAG, "Skip roaming connected notification since already"
+                        + " shownInThisNumeric:" + shownInThisNumeric
+                        + " shownForThisReason:" + shownForThisReason
+                        + " shouldShowRoamingNotification:" + shouldShowRoamingNotification);
+                // Dismiss notification if the other notification is shown.
+                if (getCurrentRoamingNotification() != ROAMING_NOTIFICATION_NO_NOTIFICATION) {
+                    updateDataRoamingNotification(ROAMING_NOTIFICATION_NO_NOTIFICATION);
+                }
+            }
+        } else if (getCurrentRoamingNotification() != ROAMING_NOTIFICATION_NO_NOTIFICATION) {
+            // Otherwise we either 1) we are not roaming or 2) roaming is off but ROAMING_DISABLED
+            // is not the only data disable reason. In this case we dismiss the notification we
+            // showed earlier.
+            updateDataRoamingNotification(ROAMING_NOTIFICATION_NO_NOTIFICATION);
+        }
     }
 
+    private void updateDataRoamingNotification(@RoamingNotification int roamingNotification) {
+        int event;
+        switch (roamingNotification) {
+            case ROAMING_NOTIFICATION_NO_NOTIFICATION:
+                Log.d(LOG_TAG, "Dismiss roaming notification");
+                mDataRoamingNotifLog.log("Hide roaming.");
+                event = EVENT_DATA_ROAMING_OK;
+                break;
+            case ROAMING_NOTIFICATION_CONNECTED:
+                Log.d(LOG_TAG, "Show roaming connected notification");
+                mDataRoamingNotifLog.log("Show roaming on.");
+                event = EVENT_DATA_ROAMING_CONNECTED;
+                break;
+            case ROAMING_NOTIFICATION_DISCONNECTED:
+                Log.d(LOG_TAG, "Show roaming disconnected notification");
+                mDataRoamingNotifLog.log("Show roaming off.");
+                event = EVENT_DATA_ROAMING_DISCONNECTED;
+                break;
+            default:
+                Log.d(LOG_TAG, "Should never reach here.");
+                mDataRoamingNotifLog.log("Should never reach here.");
+                return;
+        }
+        mCurrentRoamingNotification = roamingNotification;
+        mHandler.obtainMessage(event, mDefaultDataSubId, 0).sendToTarget();
+    }
+
+    private @RoamingNotification int getCurrentRoamingNotification() {
+        return mCurrentRoamingNotification;
+    }
+
+    // For reorganize_roaming_notification feature disabled.
     /**
      * When roaming, if mobile data cannot be established due to data roaming not enabled, we need
      * to notify the user so they can enable it through settings. Vise versa if the condition
@@ -921,8 +1128,9 @@
      * @param roamingOperatorNumeric The operator numeric for the current roaming. {@code null} if
      *                               the current roaming operator numeric didn't change.
      */
-    private void updateDataRoamingStatus(@Nullable String roamingOperatorNumeric) {
-        if (VDBG) Log.v(LOG_TAG, "updateDataRoamingStatus");
+    private void updateDataRoamingStatusForFeatureDisabled(
+            @Nullable String roamingOperatorNumeric) {
+        if (VDBG) Log.v(LOG_TAG, "updateDataRoamingStatusForFeatureDisabled");
         Phone phone = getPhone(mDefaultDataSubId);
         if (phone == null) {
             Log.w(LOG_TAG, "Can't get phone with sub id = " + mDefaultDataSubId);
@@ -962,10 +1170,10 @@
             msg.arg1 = mDefaultDataSubId;
             msg.sendToTarget();
         } else if (dataAllowed && dataIsNowRoaming(mDefaultDataSubId)) {
-            boolean isShowRoamingNotificationEnabled = getCarrierConfigForSubId(mDefaultDataSubId)
-                    .getBoolean(CarrierConfigManager
-                            .KEY_SHOW_DATA_CONNECTED_ROAMING_NOTIFICATION_BOOL);
-            if (!isShowRoamingNotificationEnabled) return;
+            if (!shouldShowRoamingNotification(roamingOperatorNumeric)) {
+                Log.d(LOG_TAG, "Skip showing roaming connected notification.");
+                return;
+            }
             // Don't show roaming notification if we've already shown for this MccMnc
             if (roamingOperatorNumeric != null
                     && !mPrevRoamingOperatorNumerics.add(roamingOperatorNumeric)) {
@@ -1002,6 +1210,46 @@
         return getPhone(subId).getServiceState().getDataRoaming();
     }
 
+    private boolean shouldShowRoamingNotification(String roamingNumeric) {
+        PersistableBundle config = getCarrierConfigForSubId(mDefaultDataSubId);
+        boolean showRoamingNotification = config.getBoolean(
+                CarrierConfigManager.KEY_SHOW_DATA_CONNECTED_ROAMING_NOTIFICATION_BOOL);
+
+        if (TextUtils.isEmpty(roamingNumeric) || !mFeatureFlags.hideRoamingIcon()) {
+            Log.d(LOG_TAG, "shouldShowRoamingNotification: roamingNumeric=" + roamingNumeric
+                    + ", hideRoaming=" + mFeatureFlags.hideRoamingIcon());
+            return showRoamingNotification;
+        }
+
+        String[] includedMccMncs = config.getStringArray(CarrierConfigManager
+                .KEY_DATA_CONNECTED_ROAMING_NOTIFICATION_INCLUDED_MCC_MNCS_STRING_ARRAY);
+        if (includedMccMncs != null) {
+            for (String mccMnc : includedMccMncs) {
+                if (roamingNumeric.equals(mccMnc)) {
+                    Log.d(LOG_TAG, "shouldShowRoamingNotification: show for MCC/MNC " + mccMnc);
+                    return showRoamingNotification;
+                }
+            }
+        }
+
+        String[] excludedMccs = config.getStringArray(CarrierConfigManager
+                .KEY_DATA_CONNECTED_ROAMING_NOTIFICATION_EXCLUDED_MCCS_STRING_ARRAY);
+        String roamingMcc = roamingNumeric.length() < 3 ? "" : roamingNumeric.substring(0, 3);
+        if (excludedMccs != null && !TextUtils.isEmpty(roamingMcc)) {
+            for (String mcc : excludedMccs) {
+                if (roamingMcc.equals(mcc)) {
+                    Log.d(LOG_TAG, "shouldShowRoamingNotification: ignore for MCC " + mcc);
+                    return false;
+                }
+            }
+        }
+
+        if (showRoamingNotification) {
+            Log.d(LOG_TAG, "shouldShowRoamingNotification: show for numeric " + roamingNumeric);
+        }
+        return showRoamingNotification;
+    }
+
     private void updateLimitedSimFunctionForDualSim() {
         if (DBG) Log.d(LOG_TAG, "updateLimitedSimFunctionForDualSim");
         // check conditions to display limited SIM function notification under dual SIM
@@ -1089,10 +1337,21 @@
         IndentingPrintWriter pw = new IndentingPrintWriter(printWriter, "  ");
         pw.println("------- PhoneGlobals -------");
         pw.increaseIndent();
-        pw.println("mPrevRoamingNotification=" + mPrevRoamingNotification);
+        pw.println("FeatureFlags:");
+        pw.increaseIndent();
+        pw.println("reorganizeRoamingNotification="
+                + mFeatureFlags.reorganizeRoamingNotification());
+        pw.println("dismissNetworkSelectionNotificationOnSimDisable="
+                + mFeatureFlags.dismissNetworkSelectionNotificationOnSimDisable());
+        pw.decreaseIndent();
+        if (mFeatureFlags.reorganizeRoamingNotification()) {
+            pw.println("mCurrentRoamingNotification=" + mCurrentRoamingNotification);
+        } else {
+            pw.println("mPrevRoamingNotification=" + mPrevRoamingNotification);
+        }
         pw.println("mDefaultDataSubId=" + mDefaultDataSubId);
-        pw.println("mDataRoamingNotifLog:");
         pw.println("isSmsCapable=" + TelephonyManager.from(this).isSmsCapable());
+        pw.println("mDataRoamingNotifLog:");
         pw.increaseIndent();
         mDataRoamingNotifLog.dump(fd, pw, args);
         pw.decreaseIndent();
@@ -1130,7 +1389,11 @@
             mDomainSelectionService.dump(fd, pw, args);
         }
         pw.decreaseIndent();
-        pw.println("mPrevRoamingOperatorNumerics:" + mPrevRoamingOperatorNumerics);
+        if (mFeatureFlags.reorganizeRoamingNotification()) {
+            pw.println("mShownNotificationReasons=" + mShownNotificationReasons);
+        } else {
+            pw.println("mPrevRoamingOperatorNumerics:" + mPrevRoamingOperatorNumerics);
+        }
         pw.println("------- End PhoneGlobals -------");
     }
 }
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
index c7bc0b6..3bd29e3 100644
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -17,6 +17,7 @@
 package com.android.phone;
 
 import static android.content.pm.PackageManager.PERMISSION_GRANTED;
+import static android.permission.flags.Flags.opEnableMobileDataByUser;
 import static android.telephony.TelephonyManager.HAL_SERVICE_NETWORK;
 import static android.telephony.TelephonyManager.HAL_SERVICE_RADIO;
 
@@ -146,10 +147,14 @@
 import android.telephony.ims.feature.ImsFeature;
 import android.telephony.ims.stub.ImsConfigImplBase;
 import android.telephony.ims.stub.ImsRegistrationImplBase;
+import android.telephony.satellite.INtnSignalStrengthCallback;
+import android.telephony.satellite.ISatelliteCapabilitiesCallback;
 import android.telephony.satellite.ISatelliteDatagramCallback;
 import android.telephony.satellite.ISatelliteProvisionStateCallback;
 import android.telephony.satellite.ISatelliteStateCallback;
 import android.telephony.satellite.ISatelliteTransmissionUpdateCallback;
+import android.telephony.satellite.NtnSignalStrength;
+import android.telephony.satellite.NtnSignalStrengthCallback;
 import android.telephony.satellite.SatelliteCapabilities;
 import android.telephony.satellite.SatelliteDatagram;
 import android.telephony.satellite.SatelliteDatagramCallback;
@@ -208,6 +213,7 @@
 import com.android.internal.telephony.domainselection.DomainSelectionResolver;
 import com.android.internal.telephony.emergency.EmergencyNumberTracker;
 import com.android.internal.telephony.euicc.EuiccConnector;
+import com.android.internal.telephony.flags.FeatureFlags;
 import com.android.internal.telephony.ims.ImsResolver;
 import com.android.internal.telephony.imsphone.ImsPhone;
 import com.android.internal.telephony.imsphone.ImsPhoneCallTracker;
@@ -296,8 +302,6 @@
     private static final int EVENT_GET_ALLOWED_NETWORK_TYPES_BITMASK_DONE = 22;
     private static final int CMD_SEND_ENVELOPE = 25;
     private static final int EVENT_SEND_ENVELOPE_DONE = 26;
-    private static final int CMD_INVOKE_OEM_RIL_REQUEST_RAW = 27;
-    private static final int EVENT_INVOKE_OEM_RIL_REQUEST_RAW_DONE = 28;
     private static final int CMD_TRANSMIT_APDU_BASIC_CHANNEL = 29;
     private static final int EVENT_TRANSMIT_APDU_BASIC_CHANNEL_DONE = 30;
     private static final int CMD_EXCHANGE_SIM_IO = 31;
@@ -397,12 +401,15 @@
 
     // Toggling null cipher and integrity support was added in IRadioNetwork 2.1
     private static final int MIN_NULL_CIPHER_AND_INTEGRITY_VERSION = 201;
+    // Cellular identifier disclosure transparency was added in IRadioNetwork 2.2
+    private static final int MIN_IDENTIFIER_DISCLOSURE_VERSION = 202;
 
     /** The singleton instance. */
     private static PhoneInterfaceManager sInstance;
     private static List<String> sThermalMitigationAllowlistedPackages = new ArrayList<>();
 
     private final PhoneGlobals mApp;
+    private final FeatureFlags mFeatureFlags;
     private final CallManager mCM;
     private final ImsResolver mImsResolver;
 
@@ -1154,19 +1161,6 @@
                     handleNullReturnEvent(msg, "setAllowedNetworkTypesForReason");
                     break;
 
-                case CMD_INVOKE_OEM_RIL_REQUEST_RAW:
-                    request = (MainThreadRequest)msg.obj;
-                    onCompleted = obtainMessage(EVENT_INVOKE_OEM_RIL_REQUEST_RAW_DONE, request);
-                    defaultPhone.invokeOemRilRequestRaw((byte[]) request.argument, onCompleted);
-                    break;
-
-                case EVENT_INVOKE_OEM_RIL_REQUEST_RAW_DONE:
-                    ar = (AsyncResult)msg.obj;
-                    request = (MainThreadRequest)ar.userObj;
-                    request.result = ar;
-                    notifyRequester(request);
-                    break;
-
                 case CMD_SET_VOICEMAIL_NUMBER:
                     request = (MainThreadRequest) msg.obj;
                     onCompleted = obtainMessage(EVENT_SET_VOICEMAIL_NUMBER_DONE, request);
@@ -2226,8 +2220,8 @@
                     onCompleted = obtainMessage(EVENT_PURCHASE_PREMIUM_CAPABILITY_DONE, request);
                     PurchasePremiumCapabilityArgument arg =
                             (PurchasePremiumCapabilityArgument) request.argument;
-                    SlicePurchaseController.getInstance(request.phone).purchasePremiumCapability(
-                            arg.capability, onCompleted);
+                    SlicePurchaseController.getInstance(request.phone, mFeatureFlags)
+                            .purchasePremiumCapability(arg.capability, onCompleted);
                     break;
                 }
 
@@ -2440,10 +2434,10 @@
      * Initialize the singleton PhoneInterfaceManager instance.
      * This is only done once, at startup, from PhoneApp.onCreate().
      */
-    /* package */ static PhoneInterfaceManager init(PhoneGlobals app) {
+    /* package */ static PhoneInterfaceManager init(PhoneGlobals app, FeatureFlags featureFlags) {
         synchronized (PhoneInterfaceManager.class) {
             if (sInstance == null) {
-                sInstance = new PhoneInterfaceManager(app);
+                sInstance = new PhoneInterfaceManager(app, featureFlags);
             } else {
                 Log.wtf(LOG_TAG, "init() called multiple times!  sInstance = " + sInstance);
             }
@@ -2452,8 +2446,9 @@
     }
 
     /** Private constructor; @see init() */
-    private PhoneInterfaceManager(PhoneGlobals app) {
+    private PhoneInterfaceManager(PhoneGlobals app, FeatureFlags featureFlags) {
         mApp = app;
+        mFeatureFlags = featureFlags;
         mCM = PhoneGlobals.getInstance().mCM;
         mImsResolver = ImsResolver.getInstance();
         mSatelliteController = SatelliteController.getInstance();
@@ -3036,14 +3031,15 @@
                 + ",reason=" + reason + ",callingPackage=" + getCurrentPackageName());
         final long identity = Binder.clearCallingIdentity();
         try {
-            final Phone phone = getPhoneFromSubIdOrDefault(subId);
-            if (phone != null) {
+            boolean result = false;
+            for (Phone phone : PhoneFactory.getPhones()) {
+                result = true;
                 phone.setRadioPowerForReason(false, reason);
-                return true;
-            } else {
-                loge("requestRadioPowerOffForReason: phone is null");
-                return false;
             }
+            if (!result) {
+                loge("requestRadioPowerOffForReason: no phone exists");
+            }
+            return result;
         } finally {
             Binder.restoreCallingIdentity(identity);
         }
@@ -3063,14 +3059,15 @@
 
         final long identity = Binder.clearCallingIdentity();
         try {
-            final Phone phone = getPhoneFromSubIdOrDefault(subId);
-            if (phone != null) {
+            boolean result = false;
+            for (Phone phone : PhoneFactory.getPhones()) {
+                result = true;
                 phone.setRadioPowerForReason(true, reason);
-                return true;
-            } else {
-                loge("clearRadioPowerOffForReason: phone is null");
-                return false;
             }
+            if (!result) {
+                loge("clearRadioPowerOffForReason: no phone exists");
+            }
+            return result;
         } finally {
             Binder.restoreCallingIdentity(identity);
         }
@@ -7523,39 +7520,6 @@
     }
 
     @Override
-    @Deprecated
-    public int invokeOemRilRequestRaw(byte[] oemReq, byte[] oemResp) {
-        enforceModifyPermission();
-
-        int returnValue = 0;
-        try {
-            AsyncResult result = (AsyncResult) sendRequest(CMD_INVOKE_OEM_RIL_REQUEST_RAW, oemReq);
-            if(result.exception == null) {
-                if (result.result != null) {
-                    byte[] responseData = (byte[])(result.result);
-                    if(responseData.length > oemResp.length) {
-                        Log.w(LOG_TAG, "Buffer to copy response too small: Response length is " +
-                                responseData.length +  "bytes. Buffer Size is " +
-                                oemResp.length + "bytes.");
-                    }
-                    System.arraycopy(responseData, 0, oemResp, 0, responseData.length);
-                    returnValue = responseData.length;
-                }
-            } else {
-                CommandException ex = (CommandException) result.exception;
-                returnValue = ex.getCommandError().ordinal();
-                if(returnValue > 0) returnValue *= -1;
-            }
-        } catch (RuntimeException e) {
-            Log.w(LOG_TAG, "sendOemRilRequestRaw: Runtime Exception");
-            returnValue = (CommandException.Error.GENERIC_FAILURE.ordinal());
-            if(returnValue > 0) returnValue *= -1;
-        }
-
-        return returnValue;
-    }
-
-    @Override
     public int getRadioAccessFamily(int phoneId, String callingPackage) {
         int raf = RadioAccessFamily.RAF_UNKNOWN;
         Phone phone = PhoneFactory.getPhone(phoneId);
@@ -8091,7 +8055,7 @@
      */
     private List<SubscriptionInfo> getActiveSubscriptionInfoListPrivileged() {
         return getSubscriptionManagerService().getActiveSubscriptionInfoList(
-                mApp.getOpPackageName(), mApp.getAttributionTag());
+                mApp.getOpPackageName(), mApp.getAttributionTag(), true/*isForAllProfile*/);
     }
 
     private ActivityStatsTechSpecificInfo[] mLastModemActivitySpecificInfo = null;
@@ -8870,6 +8834,12 @@
             enforceModifyPermission();
         }
 
+        if (reason == TelephonyManager.DATA_ENABLED_REASON_USER && enabled
+                && null != callingPackage && opEnableMobileDataByUser()) {
+            mAppOps.noteOp(AppOpsManager.OPSTR_ENABLE_MOBILE_DATA_BY_USER, Binder.getCallingUid(),
+                    callingPackage, null, null);
+        }
+
         final long identity = Binder.clearCallingIdentity();
         try {
             Phone phone = getPhone(subId);
@@ -11587,7 +11557,7 @@
         }
         final long identity = Binder.clearCallingIdentity();
         try {
-            return SlicePurchaseController.getInstance(phone)
+            return SlicePurchaseController.getInstance(phone, mFeatureFlags)
                     .isPremiumCapabilityAvailableForPurchase(capability);
         } finally {
             Binder.restoreCallingIdentity(identity);
@@ -11970,6 +11940,18 @@
         }
     }
 
+    private void checkForIdentifierDisclosureNotificationSupport() {
+        if (getHalVersion(HAL_SERVICE_NETWORK) < MIN_IDENTIFIER_DISCLOSURE_VERSION) {
+            throw new UnsupportedOperationException(
+                    "Cellular identifier disclosure transparency operations require HAL 2.2 or "
+                            + "above");
+        }
+        if (!getDefaultPhone().isIdentifierDisclosureTransparencySupported()) {
+            throw new UnsupportedOperationException(
+                    "Cellular identifier disclosure transparency operations unsupported by modem");
+        }
+    }
+
     /**
      * Get the SIM state for the slot index.
      * For Remote-SIMs, this method returns {@link IccCardConstants.State#UNKNOWN}
@@ -12277,13 +12259,13 @@
      * @param subId The subId of the subscription to register for provision state changed.
      * @param callback The callback to handle the satellite provision state changed event.
      *
-     * @return The {@link SatelliteManager.SatelliteError} result of the operation.
+     * @return The {@link SatelliteManager.SatelliteResult} result of the operation.
      *
      * @throws SecurityException if the caller doesn't have the required permission.
      */
     @Override
-    @SatelliteManager.SatelliteError public int registerForSatelliteProvisionStateChanged(int subId,
-            @NonNull ISatelliteProvisionStateCallback callback) {
+    @SatelliteManager.SatelliteResult public int registerForSatelliteProvisionStateChanged(
+            int subId, @NonNull ISatelliteProvisionStateCallback callback) {
         enforceSatelliteCommunicationPermission("registerForSatelliteProvisionStateChanged");
         return mSatelliteController.registerForSatelliteProvisionStateChanged(subId, callback);
     }
@@ -12327,12 +12309,12 @@
      * @param subId The subId of the subscription to register for satellite modem state changed.
      * @param callback The callback to handle the satellite modem state changed event.
      *
-     * @return The {@link SatelliteManager.SatelliteError} result of the operation.
+     * @return The {@link SatelliteManager.SatelliteResult} result of the operation.
      *
      * @throws SecurityException if the caller doesn't have the required permission.
      */
     @Override
-    @SatelliteManager.SatelliteError public int registerForSatelliteModemStateChanged(int subId,
+    @SatelliteManager.SatelliteResult public int registerForSatelliteModemStateChanged(int subId,
             @NonNull ISatelliteStateCallback callback) {
         enforceSatelliteCommunicationPermission("registerForSatelliteModemStateChanged");
         return mSatelliteController.registerForSatelliteModemStateChanged(subId, callback);
@@ -12361,12 +12343,12 @@
      * @param subId The subId of the subscription to register for incoming satellite datagrams.
      * @param callback The callback to handle incoming datagrams over satellite.
      *
-     * @return The {@link SatelliteManager.SatelliteError} result of the operation.
+     * @return The {@link SatelliteManager.SatelliteResult} result of the operation.
      *
      * @throws SecurityException if the caller doesn't have the required permission.
      */
     @Override
-    @SatelliteManager.SatelliteError public int registerForSatelliteDatagram(int subId,
+    @SatelliteManager.SatelliteResult public int registerForSatelliteDatagram(int subId,
             @NonNull ISatelliteDatagramCallback callback) {
         enforceSatelliteCommunicationPermission("registerForSatelliteDatagram");
         return mSatelliteController.registerForSatelliteDatagram(subId, callback);
@@ -12397,7 +12379,7 @@
      * {@link SatelliteDatagramCallback#onSatelliteDatagramReceived(long, SatelliteDatagram, int, Consumer)})}
      *
      * @param subId The subId of the subscription used for receiving datagrams.
-     * @param callback The callback to get {@link SatelliteManager.SatelliteError} of the request.
+     * @param callback The callback to get {@link SatelliteManager.SatelliteResult} of the request.
      *
      * @throws SecurityException if the caller doesn't have required permission.
      */
@@ -12421,7 +12403,7 @@
      *                 Datagram will be passed down to modem without any encoding or encryption.
      * @param needFullScreenPointingUI this is used to indicate pointingUI app to open in
      *                                 full screen mode.
-     * @param callback The callback to get {@link SatelliteManager.SatelliteError} of the request.
+     * @param callback The callback to get {@link SatelliteManager.SatelliteResult} of the request.
      *
      * @throws SecurityException if the caller doesn't have required permission.
      */
@@ -12480,9 +12462,193 @@
      */
     @RequiresPermission(Manifest.permission.SATELLITE_COMMUNICATION)
 
-    public void onDeviceAlignedWithSatellite(int subId, @NonNull boolean isAligned) {
+    public void setDeviceAlignedWithSatellite(int subId, @NonNull boolean isAligned) {
         enforceSatelliteCommunicationPermission("informDeviceAlignedToSatellite");
-        mSatelliteController.onDeviceAlignedWithSatellite(subId, isAligned);
+        mSatelliteController.setDeviceAlignedWithSatellite(subId, isAligned);
+    }
+
+    /**
+     * Add a restriction reason for disallowing carrier supported satellite plmn scan and attach
+     * by modem.
+     *
+     * @param subId The subId of the subscription to request for.
+     * @param reason Reason for disallowing satellite communication for carrier.
+     * @param callback Listener for the {@link SatelliteManager.SatelliteError} result of the
+     * operation.
+     *
+     * @throws SecurityException if the caller doesn't have required permission.
+     */
+    public void addSatelliteAttachRestrictionForCarrier(int subId,
+            @SatelliteManager.SatelliteCommunicationRestrictionReason int reason,
+            @NonNull IIntegerConsumer callback) {
+        enforceSatelliteCommunicationPermission("addSatelliteAttachRestrictionForCarrier");
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            mSatelliteController.addSatelliteAttachRestrictionForCarrier(subId, reason, callback);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
+    }
+
+    /**
+     * Remove a restriction reason for disallowing carrier supported satellite plmn scan and attach
+     * by modem.
+     *
+     * @param subId The subId of the subscription to request for.
+     * @param reason Reason for disallowing satellite communication.
+     * @param callback Listener for the {@link SatelliteManager.SatelliteError} result of the
+     * operation.
+     *
+     * @throws SecurityException if the caller doesn't have required permission.
+     */
+    public void removeSatelliteAttachRestrictionForCarrier(int subId,
+            @SatelliteManager.SatelliteCommunicationRestrictionReason int reason,
+            @NonNull IIntegerConsumer callback) {
+        enforceSatelliteCommunicationPermission("removeSatelliteAttachRestrictionForCarrier");
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            mSatelliteController.removeSatelliteAttachRestrictionForCarrier(subId, reason,
+                    callback);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
+    }
+
+    /**
+     * Get reasons for disallowing satellite communication, as requested by
+     * {@link #addSatelliteAttachRestrictionForCarrier(int, int, IIntegerConsumer)}.
+     *
+     * @param subId The subId of the subscription to request for.
+     *
+     * @return Integer array of reasons for disallowing satellite communication.
+     *
+     * @throws SecurityException if the caller doesn't have the required permission.
+     */
+    public @NonNull int[] getSatelliteAttachRestrictionReasonsForCarrier(
+            int subId) {
+        enforceSatelliteCommunicationPermission("getSatelliteAttachRestrictionReasonsForCarrier");
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            Set<Integer> reasonSet =
+                    mSatelliteController.getSatelliteAttachRestrictionReasonsForCarrier(subId);
+            return reasonSet.stream().mapToInt(i->i).toArray();
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
+    }
+
+    /**
+     * Request to get the signal strength of the satellite connection.
+     *
+     * @param subId The subId of the subscription to request for.
+     * @param result Result receiver to get the error code of the request and the current signal
+     * strength of the satellite connection.
+     *
+     * @throws SecurityException if the caller doesn't have required permission.
+     */
+    @Override
+    public void requestNtnSignalStrength(int subId, @NonNull ResultReceiver result) {
+        enforceSatelliteCommunicationPermission("requestNtnSignalStrength");
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            mSatelliteController.requestNtnSignalStrength(subId, result);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
+    }
+
+    /**
+     * Registers for NTN signal strength changed from satellite modem. If the registration operation
+     * is not successful, a {@link ServiceSpecificException} that contains
+     * {@link SatelliteManager.SatelliteResult} will be thrown.
+     *
+     * @param subId The subId of the subscription to request for.
+     * @param callback The callback to handle the NTN signal strength changed event. If the
+     * operation is successful, {@link NtnSignalStrengthCallback#onNtnSignalStrengthChanged(
+     * NtnSignalStrength)} will return an instance of {@link NtnSignalStrength} with a value of
+     * {@link NtnSignalStrength.NtnSignalStrengthLevel} when the signal strength of non-terrestrial
+     * network has changed.
+     *
+     * @throws SecurityException If the caller doesn't have the required permission.
+     * @throws ServiceSpecificException If the callback registration operation fails.
+     */
+    @Override
+    public void registerForNtnSignalStrengthChanged(int subId,
+            @NonNull INtnSignalStrengthCallback callback) throws RemoteException {
+        enforceSatelliteCommunicationPermission("registerForNtnSignalStrengthChanged");
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            mSatelliteController.registerForNtnSignalStrengthChanged(subId, callback);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
+    }
+
+    /**
+     * Unregisters for NTN signal strength changed from satellite modem.
+     * If callback was not registered before, the request will be ignored.
+     *
+     * @param subId The subId of the subscription to unregister for listening NTN signal strength
+     * changed event.
+     * @param callback The callback that was passed to
+     * {@link #registerForNtnSignalStrengthChanged(int, INtnSignalStrengthCallback)}
+     *
+     * @throws SecurityException if the caller doesn't have the required permission.
+     */
+    @Override
+    public void unregisterForNtnSignalStrengthChanged(
+            int subId, @NonNull INtnSignalStrengthCallback callback) {
+        enforceSatelliteCommunicationPermission("unregisterForNtnSignalStrengthChanged");
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            mSatelliteController.unregisterForNtnSignalStrengthChanged(subId, callback);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
+    }
+
+    /**
+     * Registers for satellite capabilities change event from the satellite service.
+     *
+     * @param subId The subId of the subscription to request for.
+     * @param callback The callback to handle the satellite capabilities changed event.
+     *
+     * @return The {@link SatelliteManager.SatelliteResult} result of the operation.
+     *
+     * @throws SecurityException if the caller doesn't have required permission.
+     */
+    @Override
+    @SatelliteManager.SatelliteResult public int registerForSatelliteCapabilitiesChanged(
+            int subId, @NonNull ISatelliteCapabilitiesCallback callback) {
+        enforceSatelliteCommunicationPermission("registerForSatelliteCapabilitiesChanged");
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            return mSatelliteController.registerForSatelliteCapabilitiesChanged(subId, callback);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
+    }
+
+    /**
+     * Unregisters for satellite capabilities change event from the satellite service.
+     * If callback was not registered before, the request will be ignored.
+     *
+     * @param subId The subId of the subscription to unregister for satellite capabilities change.
+     * @param callback The callback that was passed to.
+     * {@link #registerForSatelliteCapabilitiesChanged(int, ISatelliteCapabilitiesCallback)}.
+     *
+     * @throws SecurityException if the caller doesn't have required permission.
+     */
+    @Override
+    public void unregisterForSatelliteCapabilitiesChanged(
+            int subId, @NonNull ISatelliteCapabilitiesCallback callback) {
+        enforceSatelliteCommunicationPermission("unregisterForSatelliteCapabilitiesChanged");
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            mSatelliteController.unregisterForSatelliteCapabilitiesChanged(subId, callback);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
     }
 
     /**
@@ -12575,6 +12741,96 @@
     }
 
     /**
+     * This API can be used in only testing to override connectivity status in monitoring emergency
+     * calls and sending EVENT_DISPLAY_EMERGENCY_MESSAGE to Dialer.
+     *
+     * @param handoverType The type of handover from emergency call to satellite messaging. Use one
+     *                     of the following values to enable the override:
+     *                     0 - EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_SOS
+     *                     1 - EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE_T911
+     *                     To disable the override, use -1 for handoverType.
+     * @param delaySeconds The event EVENT_DISPLAY_EMERGENCY_MESSAGE will be sent to Dialer
+     *                     delaySeconds after the emergency call starts.
+     * @return {@code true} if the handover type is set successfully, {@code false} otherwise.
+     */
+    public boolean setEmergencyCallToSatelliteHandoverType(int handoverType, int delaySeconds) {
+        Log.d(LOG_TAG, "setEmergencyCallToSatelliteHandoverType - " + handoverType);
+        TelephonyPermissions.enforceShellOnly(
+                Binder.getCallingUid(), "setEmergencyCallToSatelliteHandoverType");
+        TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(mApp,
+                SubscriptionManager.INVALID_SUBSCRIPTION_ID,
+                "setEmergencyCallToSatelliteHandoverType");
+        return mSatelliteController.setEmergencyCallToSatelliteHandoverType(
+                handoverType, delaySeconds);
+    }
+
+    /**
+     * This API can be used by only CTS to override the cached value for the device overlay config
+     * value : config_send_satellite_datagram_to_modem_in_demo_mode, which determines whether
+     * outgoing satellite datagrams should be sent to modem in demo mode.
+     *
+     * @param shouldSendToModemInDemoMode Whether send datagram in demo mode should be sent to
+     * satellite modem or not.
+     *
+     * @return {@code true} if the operation is successful, {@code false} otherwise.
+     */
+    public boolean setShouldSendDatagramToModemInDemoMode(boolean shouldSendToModemInDemoMode) {
+        if (!mFeatureFlags.oemEnabledSatelliteFlag()) {
+            Log.d(LOG_TAG, "shouldSendDatagramToModemInDemoMode: oemEnabledSatelliteFlag is "
+                    + "disabled");
+            return false;
+        }
+        Log.d(LOG_TAG, "setShouldSendDatagramToModemInDemoMode");
+        TelephonyPermissions.enforceShellOnly(
+                Binder.getCallingUid(), "setShouldSendDatagramToModemInDemoMode");
+        TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(mApp,
+                SubscriptionManager.INVALID_SUBSCRIPTION_ID,
+                "setShouldSendDatagramToModemInDemoMode");
+        return mSatelliteController.setShouldSendDatagramToModemInDemoMode(
+                shouldSendToModemInDemoMode);
+    }
+
+    /**
+     * Enable or disable notifications sent for cellular identifier disclosure events.
+     *
+     * Disclosure events are defined as instances where a device has sent a cellular identifier
+     * on the Non-access stratum (NAS) before a security context is established. As a result the
+     * identifier is sent in the clear, which has privacy implications for the user.
+     *
+     * @param enable if notifications about disclosure events should be enabled
+     * @throws SecurityException             if the caller does not have the required privileges
+     * @throws UnsupportedOperationException if the modem does not support this feature.
+     */
+    @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE)
+    public void enableCellularIdentifierDisclosureNotifications(boolean enable) {
+        enforceModifyPermission();
+        checkForIdentifierDisclosureNotificationSupport();
+
+        SharedPreferences.Editor editor = mTelephonySharedPreferences.edit();
+        editor.putBoolean(Phone.PREF_IDENTIFIER_DISCLOSURE_NOTIFICATIONS_ENABLED, enable);
+        editor.apply();
+
+        // Each phone instance is responsible for updating its respective modem immediately
+        // after we've made a preference change.
+        for (Phone phone : PhoneFactory.getPhones()) {
+            phone.handleIdentifierDisclosureNotificationPreferenceChange();
+        }
+    }
+
+    /**
+     * Get whether or not cellular identifier disclosure notifications are enabled.
+     *
+     * @throws SecurityException             if the caller does not have the required privileges
+     * @throws UnsupportedOperationException if the modem does not support this feature.
+     */
+    @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
+    public boolean isCellularIdentifierDisclosureNotificationEnabled() {
+        enforceReadPrivilegedPermission("isCellularIdentifierDisclosureNotificationEnabled");
+        checkForIdentifierDisclosureNotificationSupport();
+        return getDefaultPhone().getIdentifierDisclosureNotificationsPreferenceEnabled();
+    }
+
+    /**
      * Check whether the caller (or self, if not processing an IPC) can read device identifiers.
      *
      * <p>This method behaves in one of the following ways:
diff --git a/src/com/android/phone/PhoneUtils.java b/src/com/android/phone/PhoneUtils.java
index 4826d2b..0c8a9c7 100644
--- a/src/com/android/phone/PhoneUtils.java
+++ b/src/com/android/phone/PhoneUtils.java
@@ -703,8 +703,12 @@
     }
 
     public static PhoneAccountHandle makePstnPhoneAccountHandle(Phone phone) {
-        return makePstnPhoneAccountHandleWithPrefix(phone, "",
-                false, phone.getUserHandle());
+        if (phone == null) {
+            return null;
+        } else {
+            return makePstnPhoneAccountHandleWithPrefix(phone, "",
+                    false, phone.getUserHandle());
+        }
     }
 
     public static PhoneAccountHandle makePstnPhoneAccountHandleWithPrefix(
diff --git a/src/com/android/phone/RcsProvisioningMonitor.java b/src/com/android/phone/RcsProvisioningMonitor.java
index a948d08..87a2869 100644
--- a/src/com/android/phone/RcsProvisioningMonitor.java
+++ b/src/com/android/phone/RcsProvisioningMonitor.java
@@ -524,7 +524,7 @@
         filter.addAction(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED);
         mPhone.registerReceiver(mReceiver, filter);
         mTelephonyRegistryManager.addOnSubscriptionsChangedListener(
-                mSubChangedListener, mSubChangedListener.getHandlerExecutor());
+                mSubChangedListener, mHandler::post);
         mDmaChangedListener.register();
         //initialize configs for all active sub
         onSubChanged();
diff --git a/src/com/android/phone/SimPhonebookProvider.java b/src/com/android/phone/SimPhonebookProvider.java
index 8952865..3917d83 100644
--- a/src/com/android/phone/SimPhonebookProvider.java
+++ b/src/com/android/phone/SimPhonebookProvider.java
@@ -50,6 +50,7 @@
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.telephony.IIccPhoneBook;
+import com.android.internal.telephony.flags.Flags;
 import com.android.internal.telephony.uicc.AdnRecord;
 import com.android.internal.telephony.uicc.IccConstants;
 
@@ -173,17 +174,21 @@
     @Override
     public boolean onCreate() {
         ContentResolver resolver = getContext().getContentResolver();
-        return onCreate(getContext().getSystemService(SubscriptionManager.class),
+
+        SubscriptionManager sm = getContext().getSystemService(SubscriptionManager.class);
+        if (sm == null) {
+            return false;
+        } else if (Flags.workProfileApiSplit()) {
+            sm = sm.createForAllUserProfiles();
+        }
+        return onCreate(sm,
                 SimPhonebookProvider::getIccPhoneBook,
                 uri -> resolver.notifyChange(uri, null));
     }
 
     @TestApi
-    boolean onCreate(SubscriptionManager subscriptionManager,
+    boolean onCreate(@NonNull SubscriptionManager subscriptionManager,
             Supplier<IIccPhoneBook> iccPhoneBookSupplier, ContentNotifier notifier) {
-        if (subscriptionManager == null) {
-            return false;
-        }
         mSubscriptionManager = subscriptionManager;
         mIccPhoneBookSupplier = iccPhoneBookSupplier;
         mContentNotifier = notifier;
diff --git a/src/com/android/phone/SpecialCharSequenceMgr.java b/src/com/android/phone/SpecialCharSequenceMgr.java
index 3bf0e1a..8fe084b 100644
--- a/src/com/android/phone/SpecialCharSequenceMgr.java
+++ b/src/com/android/phone/SpecialCharSequenceMgr.java
@@ -33,6 +33,7 @@
 import com.android.internal.telephony.IccCardConstants;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.TelephonyCapabilities;
+import com.android.internal.telephony.flags.Flags;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -208,6 +209,9 @@
 
     private static int getNextSubIdForState(IccCardConstants.State state, Context context) {
         SubscriptionManager subscriptionManager = SubscriptionManager.from(context);
+        if (Flags.workProfileApiSplit()) {
+            subscriptionManager = subscriptionManager.createForAllUserProfiles();
+        }
         List<SubscriptionInfo> list = subscriptionManager.getActiveSubscriptionInfoList();
         if (list == null) {
             // getActiveSubscriptionInfoList was null callers expect an empty list.
diff --git a/src/com/android/phone/TelephonyShellCommand.java b/src/com/android/phone/TelephonyShellCommand.java
index 1ee48c4..5986a7c 100644
--- a/src/com/android/phone/TelephonyShellCommand.java
+++ b/src/com/android/phone/TelephonyShellCommand.java
@@ -189,6 +189,10 @@
             "set-satellite-pointing-ui-class-name";
     private static final String SET_SATELLITE_DEVICE_ALIGNED_TIMEOUT_DURATION =
             "set-satellite-device-aligned-timeout-duration";
+    private static final String SET_EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE =
+            "set-emergency-call-to-satellite-handover-type";
+    private static final String SET_SHOULD_SEND_DATAGRAM_TO_MODEM_IN_DEMO_MODE =
+            "set-should-send-datagram-to-modem-in-demo-mode";
 
     private static final String INVALID_ENTRY_ERROR = "An emergency number (only allow '0'-'9', "
             + "'*', '#' or '+') needs to be specified after -a in the command ";
@@ -380,6 +384,10 @@
                 return handleSetSatellitePointingUiClassNameCommand();
             case SET_SATELLITE_DEVICE_ALIGNED_TIMEOUT_DURATION:
                 return handleSettSatelliteDeviceAlignedTimeoutDuration();
+            case SET_EMERGENCY_CALL_TO_SATELLITE_HANDOVER_TYPE:
+                return handleSetEmergencyCallToSatelliteHandoverType();
+            case SET_SHOULD_SEND_DATAGRAM_TO_MODEM_IN_DEMO_MODE:
+                return handleSetShouldSendDatagramToModemInDemoMode();
             default: {
                 return handleDefaultCommands(cmd);
             }
@@ -779,6 +787,14 @@
         pw.println("           launch. If no option is specified, it will launch the default.");
         pw.println("      -c: the satellite pointing UI app class name that Telephony will");
         pw.println("           launch.");
+        pw.println("  set-emergency-call-to-satellite-handover-type [-t HANDOVER_TYPE ");
+        pw.println("    -d DELAY_SECONDS] Override connectivity status in monitoring emergency ");
+        pw.println("    call and sending EVENT_DISPLAY_EMERGENCY_MESSAGE to Dialer.");
+        pw.println("    Options are:");
+        pw.println("      -t: the emergency call to satellite handover type.");
+        pw.println("          If no option is specified, override is disabled.");
+        pw.println("      -d: the delay in seconds in sending EVENT_DISPLAY_EMERGENCY_MESSAGE.");
+        pw.println("          If no option is specified, there is no delay in sending the event.");
     }
 
     private void onHelpImei() {
@@ -3217,6 +3233,55 @@
         return 0;
     }
 
+    private int handleSetEmergencyCallToSatelliteHandoverType() {
+        PrintWriter errPw = getErrPrintWriter();
+        int handoverType = -1;
+        int delaySeconds = 0;
+
+        String opt;
+        while ((opt = getNextOption()) != null) {
+            switch (opt) {
+                case "-t": {
+                    try {
+                        handoverType = Integer.parseInt(getNextArgRequired());
+                    } catch (NumberFormatException e) {
+                        errPw.println("SetEmergencyCallToSatelliteHandoverType: require an integer"
+                                + " for handoverType");
+                        return -1;
+                    }
+                    break;
+                }
+                case "-d": {
+                    try {
+                        delaySeconds = Integer.parseInt(getNextArgRequired());
+                    } catch (NumberFormatException e) {
+                        errPw.println("SetEmergencyCallToSatelliteHandoverType: require an integer"
+                                + " for delaySeconds");
+                        return -1;
+                    }
+                    break;
+                }
+            }
+        }
+        Log.d(LOG_TAG, "handleSetEmergencyCallToSatelliteHandoverType: handoverType="
+                + handoverType + ", delaySeconds=" + delaySeconds);
+
+        try {
+            boolean result =
+                    mInterface.setEmergencyCallToSatelliteHandoverType(handoverType, delaySeconds);
+            if (VDBG) {
+                Log.v(LOG_TAG, "setEmergencyCallToSatelliteHandoverType result =" + result);
+            }
+            getOutPrintWriter().println(result);
+        } catch (RemoteException e) {
+            Log.e(LOG_TAG, "setEmergencyCallToSatelliteHandoverType: " + handoverType
+                    + ", error = " + e.getMessage());
+            errPw.println("Exception: " + e.getMessage());
+            return -1;
+        }
+        return 0;
+    }
+
     private int handleSetSatelliteListeningTimeoutDuration() {
         PrintWriter errPw = getErrPrintWriter();
         long timeoutMillis = 0;
@@ -3281,6 +3346,54 @@
         return 0;
     }
 
+    private int handleSetShouldSendDatagramToModemInDemoMode() {
+        PrintWriter errPw = getErrPrintWriter();
+        String opt;
+        boolean shouldSendToDemoMode;
+
+        if ((opt = getNextArg()) == null) {
+            errPw.println(
+                    "adb shell cmd phone set-should-send-datagram-to-modem-in-demo-mode :"
+                            + " Invalid Argument");
+            return -1;
+        } else {
+            switch (opt) {
+                case "true": {
+                    shouldSendToDemoMode = true;
+                    break;
+                }
+                case "false": {
+                    shouldSendToDemoMode = false;
+                    break;
+                }
+                default:
+                    errPw.println(
+                            "adb shell cmd phone set-should-send-datagram-to-modem-in-demo-mode :"
+                                    + " Invalid Argument");
+                    return -1;
+            }
+        }
+
+        Log.d(LOG_TAG,
+                "handleSetShouldSendDatagramToModemInDemoMode(" + shouldSendToDemoMode + ")");
+
+        try {
+            boolean result = mInterface.setShouldSendDatagramToModemInDemoMode(
+                    shouldSendToDemoMode);
+            if (VDBG) {
+                Log.v(LOG_TAG, "handleSetShouldSendDatagramToModemInDemoMode returns: "
+                        + result);
+            }
+            getOutPrintWriter().println(false);
+        } catch (RemoteException e) {
+            Log.w(LOG_TAG, "setShouldSendDatagramToModemInDemoMode(" + shouldSendToDemoMode
+                    + "), error = " + e.getMessage());
+            errPw.println("Exception: " + e.getMessage());
+            return -1;
+        }
+        return 0;
+    }
+
     private int handleCarrierRestrictionStatusCommand() {
         try {
             String MOCK_MODEM_SERVICE_NAME = "android.telephony.mockmodem.MockModemService";
diff --git a/src/com/android/phone/satellite/accesscontrol/S2RangeSatelliteOnDeviceAccessController.java b/src/com/android/phone/satellite/accesscontrol/S2RangeSatelliteOnDeviceAccessController.java
new file mode 100644
index 0000000..62fbd18
--- /dev/null
+++ b/src/com/android/phone/satellite/accesscontrol/S2RangeSatelliteOnDeviceAccessController.java
@@ -0,0 +1,156 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.phone.satellite.accesscontrol;
+
+import android.annotation.NonNull;
+import android.telephony.Rlog;
+
+import com.android.storage.s2.S2LevelRange;
+import com.android.telephony.sats2range.read.SatS2RangeFileReader;
+
+import com.google.common.geometry.S2CellId;
+import com.google.common.geometry.S2LatLng;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Objects;
+
+/**
+ * An implementation of {@link SatelliteOnDeviceAccessController} that uses
+ * {@link SatS2RangeFileReader}.
+ */
+final class S2RangeSatelliteOnDeviceAccessController extends SatelliteOnDeviceAccessController {
+    private static final String TAG = "S2RangeSatelliteOnDeviceAccessController";
+    private static final boolean DBG = false;
+
+    @NonNull private final SatS2RangeFileReader mSatS2RangeFileReader;
+
+    private final int mS2Level;
+
+    private S2RangeSatelliteOnDeviceAccessController(
+            @NonNull SatS2RangeFileReader satS2RangeFileReader, int s2Level) {
+        mSatS2RangeFileReader = Objects.requireNonNull(satS2RangeFileReader);
+        mS2Level = s2Level;
+    }
+
+    /**
+     * Returns a new {@link S2RangeSatelliteOnDeviceAccessController} using the specified data file.
+     *
+     * @param file The input file that contains the S2-range-based access restriction information.
+     * @throws IOException in the event of a problem while reading the underlying file.
+     * @throws IllegalArgumentException if either the S2 level defined by
+     * {@code config_oem_enabled_satellite_s2cell_level} or the satellite access allow defined by
+     * {@code config_oem_enabled_satellite_access_allow} does not match the values included in the
+     * header of the input file.
+     */
+    public static S2RangeSatelliteOnDeviceAccessController create(
+            @NonNull File file) throws IOException, IllegalArgumentException {
+        SatS2RangeFileReader reader = SatS2RangeFileReader.open(file);
+        int s2Level = reader.getS2Level();
+        return new S2RangeSatelliteOnDeviceAccessController(reader, s2Level);
+    }
+
+    @Override
+    public LocationToken createLocationTokenForLatLng(double latDegrees, double lngDegrees) {
+        return new LocationTokenImpl(getS2CellId(latDegrees, lngDegrees).id());
+    }
+
+    @Override
+    public boolean isSatCommunicationAllowedAtLocation(LocationToken locationToken)
+            throws IOException {
+        if (!(locationToken instanceof LocationTokenImpl)) {
+            throw new IllegalArgumentException("Unknown locationToken=" + locationToken);
+        }
+        LocationTokenImpl locationTokenImpl = (LocationTokenImpl) locationToken;
+        return isSatCommunicationAllowedAtLocation(locationTokenImpl.getS2CellId());
+    }
+
+    private boolean isSatCommunicationAllowedAtLocation(long s2CellId) throws IOException {
+        S2LevelRange entry = mSatS2RangeFileReader.findEntryByCellId(s2CellId);
+        if (mSatS2RangeFileReader.isAllowedList()) {
+            // The file contains an allowed list of S2 cells. Thus, satellite is allowed if an
+            // entry is found
+            return (entry != null);
+        } else {
+            // The file contains a disallowed list of S2 cells. Thus, satellite is allowed if an
+            // entry is not found
+            return (entry == null);
+        }
+    }
+
+    private S2CellId getS2CellId(double latDegrees, double lngDegrees) {
+        // Create the leaf S2 cell containing the given S2LatLng
+        S2CellId cellId = S2CellId.fromLatLng(S2LatLng.fromDegrees(latDegrees, lngDegrees));
+
+        // Return the S2 cell at the expected S2 level
+        return cellId.parent(mS2Level);
+    }
+
+    @Override
+    public void close() throws IOException {
+        mSatS2RangeFileReader.close();
+    }
+
+    private static void logd(@NonNull String log) {
+        Rlog.d(TAG, log);
+    }
+
+    private static void loge(@NonNull String log) {
+        Rlog.e(TAG, log);
+    }
+
+    private static class LocationTokenImpl extends LocationToken {
+
+        private final long mS2CellId;
+
+        private LocationTokenImpl(long s2CellId) {
+            this.mS2CellId = s2CellId;
+        }
+
+        long getS2CellId() {
+            return mS2CellId;
+        }
+
+        @Override
+        public String toString() {
+            return DBG ? toPiiString() : "LocationToken{<redacted>}";
+        }
+
+        @Override
+        public String toPiiString() {
+            return "LocationToken{"
+                    + "mS2CellId=" + mS2CellId
+                    + '}';
+        }
+
+        @Override
+        public boolean equals(Object o) {
+            if (this == o) {
+                return true;
+            }
+            if (!(o instanceof LocationTokenImpl)) {
+                return false;
+            }
+            LocationTokenImpl that = (LocationTokenImpl) o;
+            return mS2CellId == that.mS2CellId;
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(mS2CellId);
+        }
+    }
+}
diff --git a/src/com/android/phone/satellite/accesscontrol/SatelliteAccessController.java b/src/com/android/phone/satellite/accesscontrol/SatelliteAccessController.java
new file mode 100644
index 0000000..7f9c1aa
--- /dev/null
+++ b/src/com/android/phone/satellite/accesscontrol/SatelliteAccessController.java
@@ -0,0 +1,116 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.phone.satellite.accesscontrol;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.os.ResultReceiver;
+import android.telephony.Rlog;
+import android.telephony.satellite.SatelliteManager;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.telephony.flags.FeatureFlags;
+
+/**
+ * This module is responsible for making sure that satellite communication can be used by devices
+ * in only regions allowed by OEMs.
+ */
+public class SatelliteAccessController extends Handler {
+    private static final String TAG = "SatelliteAccessController";
+
+    private static final int CMD_IS_SATELLITE_COMMUNICATION_ALLOWED = 1;
+
+    /** Feature flags to control behavior and errors. */
+    @NonNull private final FeatureFlags mFeatureFlags;
+    @Nullable private final SatelliteOnDeviceAccessController mSatelliteOnDeviceAccessController;
+
+    /**
+     * Create a SatelliteAccessController instance.
+     *
+     * @param featureFlags The FeatureFlags that are supported.
+     * @param looper The Looper to run the SatelliteAccessController on.
+     * @param satelliteOnDeviceAccessController The location-based satellite restriction lookup.
+     */
+    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
+    public SatelliteAccessController(@NonNull FeatureFlags featureFlags, @NonNull Looper looper,
+            @Nullable SatelliteOnDeviceAccessController satelliteOnDeviceAccessController) {
+        super(looper);
+        mFeatureFlags = featureFlags;
+        mSatelliteOnDeviceAccessController = satelliteOnDeviceAccessController;
+    }
+
+    @Override
+    public void handleMessage(Message msg) {
+        switch (msg.what) {
+            case CMD_IS_SATELLITE_COMMUNICATION_ALLOWED:
+                handleRequestIsSatelliteCommunicationAllowedForCurrentLocation(
+                        (ResultReceiver) msg.obj);
+                break;
+            default:
+                logw("SatelliteAccessControllerHandler: unexpected message code: " + msg.what);
+                break;
+        }
+    }
+
+    /**
+     * Request to get whether satellite communication is allowed for the current location.
+     *
+     * @param result The result receiver that returns whether satellite communication is allowed
+     *               for the current location if the request is successful or an error code
+     *               if the request failed.
+     */
+    public void requestIsSatelliteCommunicationAllowedForCurrentLocation(
+            @NonNull ResultReceiver result) {
+        if (!mFeatureFlags.oemEnabledSatelliteFlag()) {
+            logd("oemEnabledSatelliteFlag is disabled");
+            result.send(SatelliteManager.SATELLITE_RESULT_REQUEST_NOT_SUPPORTED, null);
+            return;
+        }
+        sendRequestAsync(CMD_IS_SATELLITE_COMMUNICATION_ALLOWED, result);
+    }
+
+    private void handleRequestIsSatelliteCommunicationAllowedForCurrentLocation(
+            @NonNull ResultReceiver result) {
+        // To be implemented
+    }
+
+    /**
+     * Posts the specified command to be executed on the main thread and returns immediately.
+     *
+     * @param command command to be executed on the main thread
+     * @param argument additional parameters required to perform of the operation
+     */
+    private void sendRequestAsync(int command, @NonNull Object argument) {
+        Message msg = this.obtainMessage(command, argument);
+        msg.sendToTarget();
+    }
+
+    private static void logd(@NonNull String log) {
+        Rlog.d(TAG, log);
+    }
+
+    private static void logw(@NonNull String log) {
+        Rlog.w(TAG, log);
+    }
+
+    private static void loge(@NonNull String log) {
+        Rlog.e(TAG, log);
+    }
+}
diff --git a/src/com/android/phone/satellite/accesscontrol/SatelliteOnDeviceAccessController.java b/src/com/android/phone/satellite/accesscontrol/SatelliteOnDeviceAccessController.java
new file mode 100644
index 0000000..9292f33
--- /dev/null
+++ b/src/com/android/phone/satellite/accesscontrol/SatelliteOnDeviceAccessController.java
@@ -0,0 +1,80 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.phone.satellite.accesscontrol;
+
+import android.annotation.NonNull;
+
+import java.io.Closeable;
+import java.io.File;
+import java.io.IOException;
+
+/**
+ * A class that performs location-based access control for satellite communication synchronously
+ * without exposing implementation details.
+ */
+public abstract class SatelliteOnDeviceAccessController implements Closeable {
+
+    /**
+     * Returns the default {@link SatelliteOnDeviceAccessController}. This method will open the
+     * underlying storage and may carry some CPU and I/O expense; callers may want to hold the
+     * {@link SatelliteOnDeviceAccessController} object for multiple lookups to amortize that cost
+     * but at the cost of some memory, or close it immediately after a single use.
+     *
+     * @param file The input file that contains the location-based access restriction information.
+     * @throws IOException in the unlikely event of errors when reading underlying file(s)
+     * @throws IllegalArgumentException if the input file format does not match the format defined
+     * by the device overlay configs.
+     */
+    public static SatelliteOnDeviceAccessController create(
+            @NonNull File file) throws IOException, IllegalArgumentException {
+        return S2RangeSatelliteOnDeviceAccessController.create(file);
+    }
+
+    /**
+     * Returns a token for a given location. See {@link LocationToken} for details.
+     *
+     * @throws IOException in the unlikely event of errors when reading the underlying file
+     */
+    public abstract LocationToken createLocationTokenForLatLng(double latDegrees, double lngDegrees)
+            throws IOException;
+
+    /**
+     * Returns {@code true} if the satellite communication is allowed at the provided location,
+     * {@code false} otherwise.
+     *
+     * @throws IOException in the unlikely event of errors when reading the underlying file
+     */
+    public abstract boolean isSatCommunicationAllowedAtLocation(LocationToken locationToken)
+            throws IOException;
+
+    /**
+     * A class that represents an area with the same value. Two locations with tokens that
+     * {@link #equals(Object) equal each other} will definitely return the same value.
+     *
+     * <p>Depending on the implementation, it may be cheaper to obtain a {@link LocationToken} than
+     * doing a full lookup.
+     */
+    public abstract static class LocationToken {
+        @Override
+        public abstract boolean equals(Object other);
+
+        @Override
+        public abstract int hashCode();
+
+        /** This will print out the location information */
+        public abstract String toPiiString();
+    }
+}
diff --git a/src/com/android/phone/settings/PhoneAccountSettingsFragment.java b/src/com/android/phone/settings/PhoneAccountSettingsFragment.java
index 7cc9235..976afd4 100644
--- a/src/com/android/phone/settings/PhoneAccountSettingsFragment.java
+++ b/src/com/android/phone/settings/PhoneAccountSettingsFragment.java
@@ -24,6 +24,7 @@
 import android.util.Log;
 
 import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.flags.Flags;
 import com.android.phone.PhoneUtils;
 import com.android.phone.R;
 import com.android.phone.SubscriptionInfoHelper;
@@ -94,6 +95,9 @@
         mTelecomManager = getActivity().getSystemService(TelecomManager.class);
         mTelephonyManager = TelephonyManager.from(getActivity());
         mSubscriptionManager = SubscriptionManager.from(getActivity());
+        if (Flags.workProfileApiSplit()) {
+            mSubscriptionManager = mSubscriptionManager.createForAllUserProfiles();
+        }
     }
 
     @Override
diff --git a/src/com/android/phone/settings/RadioInfo.java b/src/com/android/phone/settings/RadioInfo.java
index 59ff11d..f6cd0d1 100644
--- a/src/com/android/phone/settings/RadioInfo.java
+++ b/src/com/android/phone/settings/RadioInfo.java
@@ -44,6 +44,7 @@
 import android.os.Message;
 import android.os.PersistableBundle;
 import android.os.SystemProperties;
+import android.os.UserManager;
 import android.telephony.AccessNetworkConstants;
 import android.telephony.CarrierConfigManager;
 import android.telephony.CellIdentityCdma;
@@ -103,6 +104,8 @@
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneFactory;
 import com.android.internal.telephony.euicc.EuiccConnector;
+import com.android.internal.telephony.flags.FeatureFlags;
+import com.android.internal.telephony.flags.FeatureFlagsImpl;
 import com.android.internal.telephony.util.TelephonyUtils;
 import com.android.phone.R;
 
@@ -302,6 +305,8 @@
     private int mCellInfoRefreshRateIndex;
     private int mSelectedPhoneIndex;
 
+    private FeatureFlags mFeatureFlags;
+
     private final NetworkRequest mDefaultNetworkRequest = new NetworkRequest.Builder()
             .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR)
             .addCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
@@ -494,10 +499,21 @@
             return;
         }
 
+        UserManager userManager =
+                (UserManager) getApplicationContext().getSystemService(Context.USER_SERVICE);
+        if (userManager != null
+                && userManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS)) {
+            Log.w(TAG, "User is restricted from configuring mobile networks.");
+            finish();
+            return;
+        }
+
         setContentView(R.layout.radio_info);
 
         log("Started onCreate");
 
+        mFeatureFlags = new FeatureFlagsImpl();
+
         mQueuedWork = new ThreadPoolExecutor(1, 1, RUNNABLE_TIMEOUT_MS, TimeUnit.MICROSECONDS,
                 new LinkedBlockingDeque<Runnable>());
         mConnectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
@@ -847,7 +863,9 @@
     @Override
     protected void onDestroy() {
         super.onDestroy();
-        mQueuedWork.shutdown();
+        if (mQueuedWork != null) {
+            mQueuedWork.shutdown();
+        }
     }
 
     // returns array of string labels for each phone index. The array index is equal to the phone
@@ -1555,6 +1573,9 @@
     };
 
     private boolean isRadioOn() {
+        if (mFeatureFlags.radioInfoIsRadioOn()) {
+            return mTelephonyManager.getRadioPowerState() == TelephonyManager.RADIO_POWER_ON;
+        }
         //FIXME: Replace with a TelephonyManager call
         return mPhone.getServiceState().getState() != ServiceState.STATE_POWER_OFF;
     }
diff --git a/src/com/android/phone/settings/fdn/FdnSetting.java b/src/com/android/phone/settings/fdn/FdnSetting.java
index 8f46c85..e347dec 100644
--- a/src/com/android/phone/settings/fdn/FdnSetting.java
+++ b/src/com/android/phone/settings/fdn/FdnSetting.java
@@ -19,10 +19,12 @@
 import android.app.ActionBar;
 import android.app.FragmentManager;
 import android.app.FragmentTransaction;
+import android.content.Context;
 import android.os.AsyncResult;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Message;
+import android.os.UserManager;
 import android.preference.PreferenceActivity;
 import android.preference.PreferenceScreen;
 import android.util.Log;
diff --git a/src/com/android/phone/slice/SlicePurchaseController.java b/src/com/android/phone/slice/SlicePurchaseController.java
index 4984b23..9a42e16 100644
--- a/src/com/android/phone/slice/SlicePurchaseController.java
+++ b/src/com/android/phone/slice/SlicePurchaseController.java
@@ -58,6 +58,7 @@
 
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.flags.FeatureFlags;
 
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
@@ -309,6 +310,8 @@
 
     /** The Phone instance used to create the SlicePurchaseController. */
     @NonNull private final Phone mPhone;
+    /** Feature flags to control behavior and errors. */
+    @NonNull private final FeatureFlags mFeatureFlags;
     /** The set of capabilities that are pending network setup. */
     @NonNull private final Set<Integer> mPendingSetupCapabilities = new HashSet<>();
     /** The set of throttled capabilities. */
@@ -417,10 +420,11 @@
                     logd("Slice purchase application unable to show notification for capability: "
                             + TelephonyManager.convertPremiumCapabilityToString(capability)
                             + " because the user has disabled notifications.");
+                    int error = mFeatureFlags.slicingAdditionalErrorCodes()
+                            ? TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_USER_DISABLED
+                            : TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_USER_CANCELED;
                     SlicePurchaseController.getInstance(phoneId)
-                            .handlePurchaseResult(capability,
-                            TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_USER_DISABLED,
-                            true);
+                            .handlePurchaseResult(capability, error, true);
                     break;
                 }
                 case ACTION_SLICE_PURCHASE_APP_RESPONSE_SUCCESS: {
@@ -449,14 +453,16 @@
      * @param phone The Phone to get the SlicePurchaseController for.
      * @return The static SlicePurchaseController instance.
      */
-    @NonNull public static synchronized SlicePurchaseController getInstance(@NonNull Phone phone) {
+    @NonNull public static synchronized SlicePurchaseController getInstance(@NonNull Phone phone,
+            @NonNull FeatureFlags featureFlags) {
         // TODO: Add listeners for multi sim setting changed (maybe carrier config changed too)
         //  that dismiss notifications and update SlicePurchaseController instance
         int phoneId = phone.getPhoneId();
         if (sInstances.get(phoneId) == null) {
             HandlerThread handlerThread = new HandlerThread("SlicePurchaseController");
             handlerThread.start();
-            sInstances.put(phoneId, new SlicePurchaseController(phone, handlerThread.getLooper()));
+            sInstances.put(phoneId,
+                    new SlicePurchaseController(phone, featureFlags, handlerThread.getLooper()));
         }
         return sInstances.get(phoneId);
     }
@@ -476,18 +482,21 @@
      * Create a SlicePurchaseController for the given phone on the given looper.
      *
      * @param phone The Phone to create the SlicePurchaseController for.
+     * @param featureFlags The FeatureFlags that are supported.
      * @param looper The Looper to run the SlicePurchaseController on.
      */
     @VisibleForTesting
-    public SlicePurchaseController(@NonNull Phone phone, @NonNull Looper looper) {
+    public SlicePurchaseController(@NonNull Phone phone, @NonNull FeatureFlags featureFlags,
+            @NonNull Looper looper) {
         super(looper);
         mPhone = phone;
+        mFeatureFlags = featureFlags;
         // TODO: Create a cached value for slicing config in DataIndication and initialize here
         mPhone.mCi.registerForSlicingConfigChanged(this, EVENT_SLICING_CONFIG_CHANGED, null);
         mIsSlicingUpsellEnabled = DeviceConfig.getBoolean(
                 DeviceConfig.NAMESPACE_TELEPHONY, KEY_ENABLE_SLICING_UPSELL, false);
         DeviceConfig.addOnPropertiesChangedListener(
-                DeviceConfig.NAMESPACE_TELEPHONY, this::post,
+                DeviceConfig.NAMESPACE_TELEPHONY, Runnable::run,
                 properties -> {
                     if (TextUtils.equals(DeviceConfig.NAMESPACE_TELEPHONY,
                             properties.getNamespace())) {
diff --git a/src/com/android/services/telephony/DisconnectCauseUtil.java b/src/com/android/services/telephony/DisconnectCauseUtil.java
index d36f8be..adb07f9 100644
--- a/src/com/android/services/telephony/DisconnectCauseUtil.java
+++ b/src/com/android/services/telephony/DisconnectCauseUtil.java
@@ -72,7 +72,7 @@
     public static DisconnectCause toTelecomDisconnectCause(
             int telephonyDisconnectCause, int telephonyPreciseDisconnectCause, String reason) {
         return toTelecomDisconnectCause(telephonyDisconnectCause, telephonyPreciseDisconnectCause,
-                reason, SubscriptionManager.getDefaultVoicePhoneId(), null);
+                reason, SubscriptionManager.getDefaultVoicePhoneId(), null, new FlagsAdapterImpl());
     }
 
     /**
@@ -86,7 +86,7 @@
     public static DisconnectCause toTelecomDisconnectCause(int telephonyDisconnectCause,
             String reason, int phoneId) {
         return toTelecomDisconnectCause(telephonyDisconnectCause, CallFailCause.NOT_VALID,
-                reason, phoneId, null);
+                reason, phoneId, null, new FlagsAdapterImpl());
     }
 
    /**
@@ -101,9 +101,9 @@
     */
     public static DisconnectCause toTelecomDisconnectCause(
             int telephonyDisconnectCause, int telephonyPreciseDisconnectCause, String reason,
-            int phoneId, ImsReasonInfo imsReasonInfo) {
+            int phoneId, ImsReasonInfo imsReasonInfo, FlagsAdapter featureFlags) {
         return toTelecomDisconnectCause(telephonyDisconnectCause, telephonyPreciseDisconnectCause,
-                reason, phoneId, imsReasonInfo, getCarrierConfigBundle(phoneId));
+                reason, phoneId, imsReasonInfo, getCarrierConfigBundle(phoneId), featureFlags);
     }
 
     /**
@@ -115,16 +115,17 @@
     @VisibleForTesting
     static DisconnectCause toTelecomDisconnectCause(
             int telephonyDisconnectCause, int telephonyPreciseDisconnectCause, String reason,
-            int phoneId, ImsReasonInfo imsReasonInfo, PersistableBundle carrierConfig) {
+            int phoneId, ImsReasonInfo imsReasonInfo, PersistableBundle carrierConfig,
+            FlagsAdapter featureFlags) {
         Context context = PhoneGlobals.getInstance();
 
         return new DisconnectCause(
                 toTelecomDisconnectCauseCode(telephonyDisconnectCause, carrierConfig),
                 toTelecomDisconnectCauseLabel(context, telephonyDisconnectCause,
-                        telephonyPreciseDisconnectCause, carrierConfig),
+                        telephonyPreciseDisconnectCause, carrierConfig, featureFlags),
                 toTelecomDisconnectCauseDescription(context, telephonyDisconnectCause, phoneId),
                 toTelecomDisconnectReason(context, telephonyDisconnectCause, reason, phoneId),
-                toTelecomDisconnectCauseTone(telephonyDisconnectCause, carrierConfig),
+                toTelecomDisconnectCauseTone(telephonyDisconnectCause, carrierConfig, featureFlags),
                 telephonyDisconnectCause,
                 telephonyPreciseDisconnectCause,
                 imsReasonInfo);
@@ -264,20 +265,29 @@
      */
     private static CharSequence toTelecomDisconnectCauseLabel(
             Context context, int telephonyDisconnectCause, int telephonyPreciseDisconnectCause,
-            PersistableBundle carrierConfig) {
+            PersistableBundle carrierConfig, FlagsAdapter featureFlags) {
         CharSequence label;
-
-        // special case: some carriers determine what disconnect causes play the BUSY tone.
-        // hence, must adjust the disconnectCause LABEL to match the tone.
-        if (doesCarrierClassifyDisconnectCauseAsBusyCause(telephonyDisconnectCause,
-                carrierConfig)) {
-            return context.getResources().getString(R.string.callFailed_userBusy);
+        if (!featureFlags.doNotOverridePreciseLabel()) {
+            // special case: some carriers determine what disconnect causes play the BUSY tone.
+            // hence, must adjust the disconnectCause LABEL to match the tone.
+            if (doesCarrierClassifyDisconnectCauseAsBusyCause(telephonyDisconnectCause,
+                    carrierConfig)) {
+                return context.getResources().getString(R.string.callFailed_userBusy);
+            }
         }
 
         if (telephonyPreciseDisconnectCause != CallFailCause.NOT_VALID) {
             label = getLabelFromPreciseDisconnectCause(context, telephonyPreciseDisconnectCause,
                     telephonyDisconnectCause);
         } else {
+            if (featureFlags.doNotOverridePreciseLabel()) {
+                // special case: some carriers determine what disconnect causes play the BUSY tone.
+                // hence, must adjust the disconnectCause LABEL to match the tone.
+                if (doesCarrierClassifyDisconnectCauseAsBusyCause(telephonyDisconnectCause,
+                        carrierConfig)) {
+                    return context.getResources().getString(R.string.callFailed_userBusy);
+                }
+            }
             label = getLabelFromDisconnectCause(context, telephonyDisconnectCause);
         }
         return label;
@@ -889,7 +899,7 @@
      * Returns the tone to play for the disconnect cause, or UNKNOWN if none should be played.
      */
     private static int toTelecomDisconnectCauseTone(int telephonyDisconnectCause,
-            PersistableBundle carrierConfig) {
+            PersistableBundle carrierConfig, FlagsAdapter featureFlags) {
 
         // special case: some carriers determine what disconnect causes play the BUSY tone.
         if (doesCarrierClassifyDisconnectCauseAsBusyCause(telephonyDisconnectCause,
@@ -898,6 +908,10 @@
         }
 
         switch (telephonyDisconnectCause) {
+            case android.telephony.DisconnectCause.BUSY:
+                if (featureFlags.doNotOverridePreciseLabel()) {
+                    return ToneGenerator.TONE_SUP_BUSY;
+                }
             case android.telephony.DisconnectCause.CONGESTION:
                 return ToneGenerator.TONE_SUP_CONGESTION;
 
@@ -932,14 +946,21 @@
     /**
      * Helper method that examines the carrierConfig KEY_DISCONNECT_CAUSE_PLAY_BUSYTONE_INT_ARRAY
      * containing the DisconnectCauses that are classified as DisconnectCause.BUSY
-     * @param telephonyDisconnectCause
+     *
      * @param carrierConfig object that holds all the carrier specific settings
      * @return whether the cause is in the carrier config busy tone array
      */
-    private static boolean doesCarrierClassifyDisconnectCauseAsBusyCause(
+    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
+    public static boolean doesCarrierClassifyDisconnectCauseAsBusyCause(
             int telephonyDisconnectCause, PersistableBundle carrierConfig) {
+        if (carrierConfig == null) {
+            return false;
+        }
         int[] busyToneArray = carrierConfig.getIntArray(
                 CarrierConfigManager.KEY_DISCONNECT_CAUSE_PLAY_BUSYTONE_INT_ARRAY);
+        if (busyToneArray == null) {
+            return false;
+        }
         for (int busyTone : busyToneArray) {
             if (busyTone == telephonyDisconnectCause) {
                 return true;
diff --git a/src/com/android/services/telephony/FlagsAdapter.java b/src/com/android/services/telephony/FlagsAdapter.java
new file mode 100644
index 0000000..fdf00a5
--- /dev/null
+++ b/src/com/android/services/telephony/FlagsAdapter.java
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.services.telephony;
+
+/**
+ * FlagsAdapter can assist in testing flags that are "Fixed Read Only Flags"
+ * (is_fixed_read_only: true)
+ */
+public interface FlagsAdapter {
+    boolean doNotOverridePreciseLabel();
+}
diff --git a/src/com/android/services/telephony/FlagsAdapterImpl.java b/src/com/android/services/telephony/FlagsAdapterImpl.java
new file mode 100644
index 0000000..c935c59
--- /dev/null
+++ b/src/com/android/services/telephony/FlagsAdapterImpl.java
@@ -0,0 +1,30 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.services.telephony;
+
+import com.android.internal.telephony.flags.Flags;
+
+/**
+ * FlagsAdapterImpl should always be used in production when Telephony is checking a flag status.
+ * To help with testing, it may be necessary to have a different implementation
+ * (e.g. flag is read only).
+ */
+public class FlagsAdapterImpl implements FlagsAdapter {
+    public boolean doNotOverridePreciseLabel() {
+        return Flags.doNotOverridePreciseLabel();
+    }
+}
diff --git a/src/com/android/services/telephony/ImsConference.java b/src/com/android/services/telephony/ImsConference.java
index 755c85f..7f0c800 100644
--- a/src/com/android/services/telephony/ImsConference.java
+++ b/src/com/android/services/telephony/ImsConference.java
@@ -38,6 +38,7 @@
 import com.android.internal.telephony.CallStateException;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneConstants;
+import com.android.internal.telephony.flags.Flags;
 import com.android.phone.PhoneUtils;
 import com.android.phone.R;
 import com.android.telephony.Rlog;
@@ -700,7 +701,11 @@
         if (mConferenceHost == null) {
             return;
         }
-        mConferenceHost.performHold();
+        if (Flags.conferenceHoldUnholdChangedToSendMessage()) {
+            mConferenceHost.onHold();
+        } else {
+            mConferenceHost.performHold();
+        }
     }
 
     /**
@@ -711,7 +716,11 @@
         if (mConferenceHost == null) {
             return;
         }
-        mConferenceHost.performUnhold();
+        if (Flags.conferenceHoldUnholdChangedToSendMessage()) {
+            mConferenceHost.onUnhold();
+        } else {
+            mConferenceHost.performUnhold();
+        }
     }
 
     /**
diff --git a/src/com/android/services/telephony/TelephonyConference.java b/src/com/android/services/telephony/TelephonyConference.java
index 7e4693f..4a70e1c 100644
--- a/src/com/android/services/telephony/TelephonyConference.java
+++ b/src/com/android/services/telephony/TelephonyConference.java
@@ -23,6 +23,7 @@
 import com.android.internal.telephony.Call;
 import com.android.internal.telephony.CallStateException;
 import com.android.internal.telephony.Phone;
+import com.android.internal.telephony.flags.Flags;
 
 import java.util.List;
 
@@ -128,7 +129,11 @@
     public void onHold() {
         final TelephonyConnection connection = getFirstConnection();
         if (connection != null) {
-            connection.performHold();
+            if (Flags.conferenceHoldUnholdChangedToSendMessage()) {
+                connection.onHold();
+            } else {
+                connection.performHold();
+            }
         }
     }
 
@@ -139,7 +144,11 @@
     public void onUnhold() {
         final TelephonyConnection connection = getFirstConnection();
         if (connection != null) {
-            connection.performUnhold();
+            if (Flags.conferenceHoldUnholdChangedToSendMessage()) {
+                connection.onUnhold();
+            } else {
+                connection.performUnhold();
+            }
         }
     }
 
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
index 7aa0e7b..f96e6bd 100644
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -2523,8 +2523,8 @@
                             }
                         }
 
-                        if (mTelephonyConnectionService.maybeReselectDomain(this,
-                                  mOriginalConnection.getPreciseDisconnectCause(), reasonInfo)) {
+                        if (mTelephonyConnectionService.maybeReselectDomain(this, reasonInfo,
+                                mShowPreciseFailedCause, mHangupDisconnectCause)) {
                             clearOriginalConnection();
                             break;
                         }
@@ -2566,7 +2566,8 @@
                                         disconnectCause,
                                         preciseDisconnectCause,
                                         mOriginalConnection.getVendorDisconnectCause(),
-                                        getPhone().getPhoneId(), imsReasonInfo));
+                                        getPhone().getPhoneId(), imsReasonInfo,
+                                        new FlagsAdapterImpl()));
                         close();
                     }
                     break;
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index fcf9531..8ab2723 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -16,9 +16,13 @@
 
 package com.android.services.telephony;
 
+import static android.telephony.CarrierConfigManager.KEY_USE_ONLY_DIALED_SIM_ECC_LIST_BOOL;
 import static android.telephony.DomainSelectionService.SELECTOR_TYPE_CALLING;
 import static android.telephony.TelephonyManager.HAL_SERVICE_VOICE;
 
+import static com.android.internal.telephony.PhoneConstants.PHONE_TYPE_GSM;
+import static com.android.internal.telephony.flags.Flags.carrierEnabledSatelliteFlag;
+
 import android.annotation.NonNull;
 import android.app.AlertDialog;
 import android.app.Dialog;
@@ -32,6 +36,7 @@
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.ParcelUuid;
+import android.os.PersistableBundle;
 import android.provider.DeviceConfig;
 import android.telecom.Conference;
 import android.telecom.Conferenceable;
@@ -66,6 +71,7 @@
 import com.android.ims.ImsManager;
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.internal.telephony.Call;
+import com.android.internal.telephony.CallFailCause;
 import com.android.internal.telephony.CallStateException;
 import com.android.internal.telephony.GsmCdmaPhone;
 import com.android.internal.telephony.IccCard;
@@ -587,6 +593,24 @@
                         releaseEmergencyCallDomainSelection(false);
                     }
                 }
+
+                @Override
+                public void onConnectionPropertiesChanged(Connection connection,
+                        int connectionProperties) {
+                    if ((connection == null) || (mEmergencyStateTracker == null)) {
+                        return;
+                    }
+                    TelephonyConnection c = (TelephonyConnection) connection;
+                    com.android.internal.telephony.Connection origConn = c.getOriginalConnection();
+                    if ((origConn == null) || (!origConn.getState().isAlive())) {
+                        // ignore if there is no original connection alive
+                        Log.i(this, "onConnectionPropertiesChanged without orig connection alive");
+                        return;
+                    }
+                    Log.i(this, "onConnectionPropertiesChanged prop=" + connectionProperties);
+                    mEmergencyStateTracker.onEmergencyCallPropertiesChanged(connectionProperties,
+                            c.getTelecomCallId());
+                }
             };
 
     private final TelephonyConnection.TelephonyConnectionListener
@@ -726,35 +750,45 @@
                 public void onSelectionTerminated(@DisconnectCauses int cause) {
                     mDomainSelectionMainExecutor.execute(new Runnable() {
                         int mCause = cause;
+
                         @Override
                         public void run() {
                             Log.v(this, "Call domain selection terminated.");
                             if (mDomainSelectionConnection != null) {
-                                mDomainSelectionConnection = null;
-                            }
-                            if (mNormalCallConnection != null) {
-                                // TODO: To support ShowPreciseFailedCause, TelephonyConnection
-                                //  .getShowPreciseFailedCause API should be added.
+                                if (mNormalCallConnection != null) {
 
-                                // If cause is NOT_VALID then, it's a redial cancellation and
-                                // use cause code from original connection.
-                                com.android.internal.telephony.Connection connection =
-                                        mNormalCallConnection.getOriginalConnection();
-                                if (connection != null) {
+                                    NormalCallDomainSelectionConnection ncdsConn =
+                                            (NormalCallDomainSelectionConnection)
+                                                    mDomainSelectionConnection;
+
+                                    // If cause is NOT_VALID then, it's a redial cancellation
                                     if (mCause == android.telephony.DisconnectCause.NOT_VALID) {
-                                        mCause = connection.getDisconnectCause();
+                                        mCause = ncdsConn.getDisconnectCause();
                                     }
 
-                                    String reason = connection.getVendorDisconnectCause();
-                                    int phoneId = mNormalCallConnection.getPhone().getPhoneId();
+                                    Log.d(this, "Call connection closed. PreciseCause: "
+                                            + ncdsConn.getPreciseDisconnectCause()
+                                            + " DisconnectCause: " + ncdsConn.getDisconnectCause()
+                                            + " Reason: " + ncdsConn.getReasonMessage());
+
                                     mNormalCallConnection.setTelephonyConnectionDisconnected(
-                                            mDisconnectCauseFactory.toTelecomDisconnectCause(
-                                                    mCause, reason, phoneId));
-                                    Log.d(this, "Call connection closed. Cause: " + mCause
-                                            + " Reason: " + reason);
+                                            DisconnectCauseUtil.toTelecomDisconnectCause(mCause,
+                                                    ncdsConn.getPreciseDisconnectCause(),
+                                                    ncdsConn.getReasonMessage(),
+                                                    ncdsConn.getPhoneId(),
+                                                    ncdsConn.getImsReasonInfo(),
+                                                    new FlagsAdapterImpl()));
+
+                                    mNormalCallConnection.close();
+                                    mNormalCallConnection = null;
+                                } else {
+                                    Log.v(this, "NormalCallConnection is null.");
                                 }
-                                mNormalCallConnection.close();
-                                mNormalCallConnection = null;
+
+                                mDomainSelectionConnection = null;
+
+                            } else {
+                                Log.v(this, "DomainSelectionConnection is null.");
                             }
                         }
                     });
@@ -1062,8 +1096,6 @@
 
         final boolean isAirplaneModeOn = mDeviceState.isAirplaneModeOn(this);
 
-        boolean needToTurnOnRadio = (isEmergencyNumber && (!isRadioOn() || isAirplaneModeOn))
-                || isRadioPowerDownOnBluetooth();
         boolean needToTurnOffSatellite = isSatelliteBlockingCall(isEmergencyNumber);
 
         // Get the right phone object from the account data passed in.
@@ -1071,6 +1103,10 @@
                 /* Note: when not an emergency, handle can be null for unknown callers */
                 handle == null ? null : handle.getSchemeSpecificPart());
 
+        boolean isPhoneWifiCallingEnabled = phone != null && phone.isWifiCallingEnabled();
+        boolean needToTurnOnRadio = (isEmergencyNumber && (!isRadioOn() || isAirplaneModeOn))
+                || (isRadioPowerDownOnBluetooth() && !isPhoneWifiCallingEnabled);
+
         if (mDomainSelectionResolver.isDomainSelectionSupported()) {
             // Normal routing emergency number shall be handled by normal call domain selctor.
             if (isEmergencyNumber && !isNormalRouting(phone, number)) {
@@ -1084,7 +1120,7 @@
 
         if (needToTurnOnRadio || needToTurnOffSatellite) {
             final Uri resultHandle = handle;
-            final int originalPhoneType = phone.getPhoneType();
+            final int originalPhoneType = (phone == null) ? PHONE_TYPE_GSM : phone.getPhoneType();
             final Connection resultConnection = getTelephonyConnection(request, numberToDial,
                     isEmergencyNumber, resultHandle, phone);
             if (mRadioOnHelper == null) {
@@ -1364,7 +1400,7 @@
             // one and causing UI Jank.
             boolean noActiveSimCard = SubscriptionManagerService.getInstance()
                     .getActiveSubInfoCount(phone.getContext().getOpPackageName(),
-                            phone.getContext().getAttributionTag()) == 0;
+                            phone.getContext().getAttributionTag(), true/*isForAllProfile*/) == 0;
             // If there's no active sim card and the device is in emergency mode, use E account.
             addExistingConnection(mPhoneUtilsProxy.makePstnPhoneAccountHandleWithPrefix(
                     phone, "", isEmergencyNumber && noActiveSimCard), repConnection);
@@ -2251,8 +2287,7 @@
                                         .setVideoState(videoState)
                                         .setIntentExtras(extras)
                                         .setRttTextStream(mNormalCallConnection.getRttTextStream())
-                                        .setIsWpsCall(NormalCallDomainSelectionConnection
-                                                .isWpsCall(number))
+                                        .setIsWpsCall(PhoneNumberUtils.isWpsCallNumber(number))
                                         .build(),
                                 mNormalCallConnection::registerForCallEvents);
 
@@ -2313,7 +2348,7 @@
         // Check and select same domain as ongoing call on the same subscription (if exists)
         int activeCallDomain = getActiveCallDomain(phone.getSubId());
         if (activeCallDomain != NetworkRegistrationInfo.DOMAIN_UNKNOWN
-                && !NormalCallDomainSelectionConnection.isWpsCall(number)) {
+                && !PhoneNumberUtils.isWpsCallNumber(number)) {
             Log.d(LOG_TAG, "Selecting same domain as ongoing call on same subId");
             mNormalCallConnection = connection;
             handleOutgoingCallConnectionByCallDomainSelection(
@@ -2490,15 +2525,19 @@
     /**
      * Determine whether reselection of domain is required or not.
      * @param c the {@link Connection} instance.
-     * @param callFailCause the reason why CS call is disconnected. Allowed values are defined in
      * {@link com.android.internal.telephony.CallFailCause}.
      * @param reasonInfo the reason why PS call is disconnected.
+     * @param showPreciseCause Indicates whether this connection supports showing precise
+     *                         call failed cause.
+     * @param overrideCause Provides a DisconnectCause associated with a hang up request.
      * @return {@code true} if reselection of domain is required.
      */
-    public boolean maybeReselectDomain(final TelephonyConnection c,
-            int callFailCause, ImsReasonInfo reasonInfo) {
+    public boolean maybeReselectDomain(final TelephonyConnection c, ImsReasonInfo reasonInfo,
+                                       boolean showPreciseCause, int overrideCause) {
         if (!mDomainSelectionResolver.isDomainSelectionSupported()) return false;
 
+        int callFailCause = c.getOriginalConnection().getPreciseDisconnectCause();
+
         Log.i(this, "maybeReselectDomain csCause=" +  callFailCause + ", psCause=" + reasonInfo);
         if (TextUtils.equals(mEmergencyCallId, c.getTelecomCallId())) {
             if (mEmergencyCallDomainSelectionConnection != null) {
@@ -2530,7 +2569,7 @@
             }
         }
 
-        return maybeReselectDomainForNormalCall(c, callFailCause, reasonInfo);
+        return maybeReselectDomainForNormalCall(c, reasonInfo, showPreciseCause, overrideCause);
     }
 
     private boolean maybeReselectDomainForEmergencyCall(final TelephonyConnection c,
@@ -2575,7 +2614,36 @@
         return false;
     }
 
+    private boolean isEmergencyNumberAllowedOnDialedSim(Phone phone, String number) {
+        CarrierConfigManager cfgManager = (CarrierConfigManager)
+                phone.getContext().getSystemService(Context.CARRIER_CONFIG_SERVICE);
+        if (cfgManager != null) {
+            PersistableBundle b = cfgManager.getConfigForSubId(phone.getSubId(),
+                    KEY_USE_ONLY_DIALED_SIM_ECC_LIST_BOOL);
+            if (b == null) {
+                b = CarrierConfigManager.getDefaultConfig();
+            }
+            // We need to check only when KEY_USE_ONLY_DIALED_SIM_ECC_LIST_BOOL is true.
+            if (b.getBoolean(KEY_USE_ONLY_DIALED_SIM_ECC_LIST_BOOL, false)
+                      && (phone.getEmergencyNumberTracker() != null)) {
+                if (!phone.getEmergencyNumberTracker().isEmergencyNumber(number)) {
+                    Log.i(this, "isEmergencyNumberAllowedOnDialedSim false");
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
     private boolean isNormalRouting(Phone phone, String number) {
+        // Check isEmergencyNumberAllowedOnDialedSim(): some carriers do not want to handle
+        // dial requests for numbers which are in the emergency number list on another SIM,
+        // but not on their own. Such numbers shall be handled by normal call domain selector.
+        return (isNormalRoutingNumber(phone, number)
+                || !isEmergencyNumberAllowedOnDialedSim(phone, number));
+    }
+
+    private boolean isNormalRoutingNumber(Phone phone, String number) {
         if (phone.getEmergencyNumberTracker() != null) {
             // Note: There can potentially be multiple instances of EmergencyNumber found; if any of
             // them have normal routing, then use normal routing.
@@ -2597,7 +2665,7 @@
     public Phone getPhoneForNormalRoutedEmergencyCall(String number) {
         return Stream.of(mPhoneFactoryProxy.getPhones())
                 .filter(p -> p.shouldPreferInServiceSimForNormalRoutedEmergencyCall()
-                        && isNormalRouting(p, number)
+                        && isNormalRoutingNumber(p, number)
                         && isAvailableForEmergencyCalls(p,
                                 EmergencyNumber.EMERGENCY_CALL_ROUTING_NORMAL))
                 .findFirst().orElse(null);
@@ -2642,25 +2710,45 @@
     }
 
     private boolean maybeReselectDomainForNormalCall(
-            final TelephonyConnection c, int callFailCause, ImsReasonInfo reasonInfo) {
+            final TelephonyConnection c, ImsReasonInfo reasonInfo,
+            boolean showPreciseCause, int overrideCause) {
 
-        Log.i(LOG_TAG, "maybeReselectDomainForNormalCall " + "csCause:" +  callFailCause
-                + ", psCause:" + reasonInfo);
+        Log.i(LOG_TAG, "maybeReselectDomainForNormalCall");
 
-        if (mDomainSelectionConnection != null && c.getOriginalConnection() != null) {
+        com.android.internal.telephony.Connection originalConn = c.getOriginalConnection();
+        if (mDomainSelectionConnection != null && originalConn != null) {
             Phone phone = c.getPhone().getDefaultPhone();
             final String number = c.getAddress().getSchemeSpecificPart();
-            int videoState = c.getOriginalConnection().getVideoState();
+            int videoState = originalConn.getVideoState();
+
             SelectionAttributes selectionAttributes = NormalCallDomainSelectionConnection
                     .getSelectionAttributes(phone.getPhoneId(), phone.getSubId(),
                             c.getTelecomCallId(), number, VideoProfile.isVideo(videoState),
-                            callFailCause, reasonInfo);
+                            originalConn.getPreciseDisconnectCause(), reasonInfo);
 
-            Log.d(LOG_TAG, "Reselecting the domain for call");
-            mNormalCallConnection = c;
             CompletableFuture<Integer> future = mDomainSelectionConnection
                     .reselectDomain(selectionAttributes);
             if (future != null) {
+                int preciseDisconnectCause = CallFailCause.NOT_VALID;
+                if (showPreciseCause) {
+                    preciseDisconnectCause = originalConn.getPreciseDisconnectCause();
+                }
+
+                int disconnectCause = originalConn.getDisconnectCause();
+                if ((overrideCause != android.telephony.DisconnectCause.NOT_VALID)
+                        && (overrideCause != disconnectCause)) {
+                    Log.i(LOG_TAG, "setDisconnected: override cause: " + disconnectCause
+                            + " -> " + overrideCause);
+                    disconnectCause = overrideCause;
+                }
+
+                ((NormalCallDomainSelectionConnection) mDomainSelectionConnection)
+                        .setDisconnectCause(disconnectCause, preciseDisconnectCause,
+                                originalConn.getVendorDisconnectCause());
+
+                Log.d(LOG_TAG, "Reselecting the domain for call");
+                mNormalCallConnection = c;
+
                 future.thenAcceptAsync((result) -> {
                     onNormalCallRedial(c, phone, result, videoState);
                 }, mDomainSelectionMainExecutor);
@@ -3909,6 +3997,19 @@
                 });
     }
 
+    static boolean isStateActive(Conferenceable conferenceable) {
+        if (conferenceable instanceof Connection) {
+            Connection connection = (Connection) conferenceable;
+            return connection.getState() == Connection.STATE_ACTIVE;
+        } else if (conferenceable instanceof Conference) {
+            Conference conference = (Conference) conferenceable;
+            return conference.getState() == Connection.STATE_ACTIVE;
+        } else {
+            throw new IllegalArgumentException(
+                    "isStateActive(): Unexpected conferenceable! " + conferenceable);
+        }
+    }
+
     static void onHold(Conferenceable conferenceable) {
         if (conferenceable instanceof Connection) {
             Connection connection = (Connection) conferenceable;
@@ -4068,7 +4169,7 @@
             TelephonyManagerProxy telephonyManagerProxy) {
         Conferenceable c = maybeGetFirstConferenceableFromOtherSubscription(
                 connections, conferences, outgoingHandle, telephonyManagerProxy);
-        if (c != null) {
+        if (c != null && isStateActive(c)) {
             onHold(c);
             return c;
         }
@@ -4118,11 +4219,11 @@
     private void handleEmergencyCallStartedForSatelliteSOSMessageRecommender(
             @NonNull TelephonyConnection connection, @NonNull Phone phone) {
         if (mSatelliteSOSMessageRecommender == null) {
-            mSatelliteSOSMessageRecommender = new SatelliteSOSMessageRecommender(
+            mSatelliteSOSMessageRecommender = new SatelliteSOSMessageRecommender(phone.getContext(),
                     phone.getContext().getMainLooper());
         }
         connection.addTelephonyConnectionListener(mEmergencyConnectionSatelliteListener);
-        mSatelliteSOSMessageRecommender.onEmergencyCallStarted(connection, phone);
+        mSatelliteSOSMessageRecommender.onEmergencyCallStarted(connection);
     }
 
     /**
@@ -4132,6 +4233,10 @@
      * else {@code false}.
      */
     private boolean isCallDisallowedDueToSatellite(Phone phone) {
+        if (!carrierEnabledSatelliteFlag()) {
+            return false;
+        }
+
         if (phone == null) {
             return false;
         }
diff --git a/src/com/android/services/telephony/domainselection/CarrierConfigHelper.java b/src/com/android/services/telephony/domainselection/CarrierConfigHelper.java
new file mode 100644
index 0000000..d39a6b7
--- /dev/null
+++ b/src/com/android/services/telephony/domainselection/CarrierConfigHelper.java
@@ -0,0 +1,207 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.services.telephony.domainselection;
+
+import static android.telephony.AccessNetworkConstants.AccessNetworkType.NGRAN;
+import static android.telephony.CarrierConfigManager.ImsEmergency.KEY_EMERGENCY_OVER_IMS_SUPPORTED_3GPP_NETWORK_TYPES_INT_ARRAY;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.res.Resources;
+import android.os.Handler;
+import android.os.Looper;
+import android.os.Message;
+import android.os.PersistableBundle;
+import android.os.SystemProperties;
+import android.preference.PreferenceManager;
+import android.telephony.CarrierConfigManager;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
+import android.util.ArrayMap;
+import android.util.Log;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.phone.R;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/** Helper class to cache carrier configurations. */
+public class CarrierConfigHelper extends Handler {
+    private static final String TAG = "CarrierConfigHelper";
+    private static final boolean DBG = (SystemProperties.getInt("ro.debuggable", 0) == 1);
+
+    @VisibleForTesting
+    public static final String KEY_VONR_EMERGENCY_SUPPORT = "vonr_emergency_support";
+
+    private final Context mContext;
+    private final CarrierConfigManager mConfigManager;
+    private final TelephonyManager mTelephonyManager;
+    private final ArrayMap<Integer, Boolean> mVoNrSupported = new ArrayMap<>();
+
+    private final CarrierConfigManager.CarrierConfigChangeListener mCarrierConfigChangeListener =
+            (slotIndex, subId, carrierId, specificCarrierId) -> onCarrierConfigurationChanged(
+                    slotIndex, subId, carrierId);
+
+    // For test purpose only
+    private final SharedPreferences mSharedPreferences;
+
+    private List<Integer> mIgnoreNrWhenSimRemoved = null;
+
+    /**
+     * Creates an instance.
+     *
+     * @param context The Context this is associated with.
+     * @param looper The Looper to run the CarrierConfigHelper.
+     */
+    public CarrierConfigHelper(@NonNull Context context, @NonNull Looper looper) {
+        this(context, looper, null);
+    }
+
+    /**
+     * Creates an instance.
+     *
+     * @param context The Context this is associated with.
+     * @param looper The Looper to run the CarrierConfigHelper.
+     * @param sharedPreferences The SharedPreferences instance.
+     */
+    @VisibleForTesting
+    public CarrierConfigHelper(@NonNull Context context, @NonNull Looper looper,
+            @Nullable SharedPreferences sharedPreferences) {
+        super(looper);
+
+        mContext = context;
+        mTelephonyManager = context.getSystemService(TelephonyManager.class);
+        mConfigManager = context.getSystemService(CarrierConfigManager.class);
+        mConfigManager.registerCarrierConfigChangeListener(this::post,
+                mCarrierConfigChangeListener);
+        mSharedPreferences = sharedPreferences;
+
+        readFromSharedPreference();
+        readResourceConfiguration();
+    }
+
+    /**
+     * Returns whether VoNR emergency was supported with the last valid subscription.
+     *
+     * @param slotIndex The SIM slot index.
+     * @return true if VoNR emergency was supported with the last valid subscription.
+     *         Otherwise, false.
+     */
+    public boolean isVoNrEmergencySupported(int slotIndex) {
+        return mVoNrSupported.get(Integer.valueOf(slotIndex));
+    }
+
+    @Override
+    public void handleMessage(Message msg) {
+        switch(msg.what) {
+            default:
+                super.handleMessage(msg);
+                break;
+        }
+    }
+
+    private void readFromSharedPreference() {
+        mVoNrSupported.clear();
+        int modemCount = mTelephonyManager.getActiveModemCount();
+        SharedPreferences sp = (mSharedPreferences != null) ? mSharedPreferences
+                : PreferenceManager.getDefaultSharedPreferences(mContext);
+        for (int i = 0; i < modemCount; i++) {
+            Boolean savedConfig = Boolean.valueOf(
+                    sp.getBoolean(KEY_VONR_EMERGENCY_SUPPORT + i, false));
+            mVoNrSupported.put(Integer.valueOf(i), savedConfig);
+            Log.i(TAG, "readFromSharedPreference slot=" + i + ", " + savedConfig);
+        }
+    }
+
+    private void onCarrierConfigurationChanged(int slotIndex, int subId, int carrierId) {
+        Log.i(TAG, "onCarrierConfigurationChanged slotIndex=" + slotIndex
+                + ", subId=" + subId + ", carrierId=" + carrierId);
+
+        if (slotIndex < 0
+                || !SubscriptionManager.isValidSubscriptionId(subId)
+                || mTelephonyManager.getSimState(slotIndex) != TelephonyManager.SIM_STATE_READY) {
+            return;
+        }
+
+        PersistableBundle b = mConfigManager.getConfigForSubId(subId,
+                KEY_EMERGENCY_OVER_IMS_SUPPORTED_3GPP_NETWORK_TYPES_INT_ARRAY);
+        if (b.isEmpty()) {
+            Log.e(TAG, "onCarrierConfigurationChanged empty result");
+            return;
+        }
+
+        if (!CarrierConfigManager.isConfigForIdentifiedCarrier(b)) {
+            Log.i(TAG, "onCarrierConfigurationChanged not carrier specific configuration");
+            return;
+        }
+
+        int[] imsRatsConfig = b.getIntArray(
+                KEY_EMERGENCY_OVER_IMS_SUPPORTED_3GPP_NETWORK_TYPES_INT_ARRAY);
+        if (imsRatsConfig == null) imsRatsConfig = new int[0];
+        boolean carrierConfig = false;
+        for (int i = 0; i < imsRatsConfig.length; i++) {
+            if (imsRatsConfig[i] == NGRAN) {
+                carrierConfig = true;
+                break;
+            }
+        }
+        if (mIgnoreNrWhenSimRemoved.contains(carrierId)) carrierConfig = false;
+
+        Boolean savedConfig = mVoNrSupported.get(Integer.valueOf(slotIndex));
+        if (carrierConfig == savedConfig) {
+            return;
+        }
+
+        mVoNrSupported.put(Integer.valueOf(slotIndex), Boolean.valueOf(carrierConfig));
+
+        SharedPreferences sp = (mSharedPreferences != null) ? mSharedPreferences
+                : PreferenceManager.getDefaultSharedPreferences(mContext);
+        SharedPreferences.Editor editor = sp.edit();
+        editor.putBoolean(KEY_VONR_EMERGENCY_SUPPORT + slotIndex, carrierConfig);
+        editor.apply();
+
+        Log.i(TAG, "onCarrierConfigurationChanged preference updated slotIndex=" + slotIndex
+                + ", supported=" + carrierConfig);
+    }
+
+    private void readResourceConfiguration() {
+        try {
+            mIgnoreNrWhenSimRemoved = Arrays.stream(mContext.getResources().getIntArray(
+                    R.array.config_carriers_ignore_ngran_preference_when_sim_removed))
+                    .boxed().collect(Collectors.toList());
+        } catch (Resources.NotFoundException nfe) {
+            Log.e(TAG, "readResourceConfiguration exception=" + nfe);
+        } catch (NullPointerException npe) {
+            Log.e(TAG, "readResourceConfiguration exception=" + npe);
+        }
+        if (mIgnoreNrWhenSimRemoved == null) {
+            mIgnoreNrWhenSimRemoved = new ArrayList<Integer>();
+        }
+        Log.i(TAG, "readResourceConfiguration ignoreNrWhenSimRemoved=" + mIgnoreNrWhenSimRemoved);
+    }
+
+    /** Destroys the instance. */
+    public void destroy() {
+        if (DBG) Log.d(TAG, "destroy");
+        mConfigManager.unregisterCarrierConfigChangeListener(mCarrierConfigChangeListener);
+    }
+}
diff --git a/src/com/android/services/telephony/domainselection/CrossSimRedialingController.java b/src/com/android/services/telephony/domainselection/CrossSimRedialingController.java
index f1bb78c..44904f4 100644
--- a/src/com/android/services/telephony/domainselection/CrossSimRedialingController.java
+++ b/src/com/android/services/telephony/domainselection/CrossSimRedialingController.java
@@ -31,16 +31,19 @@
 import android.os.SystemProperties;
 import android.telephony.Annotation.PreciseDisconnectCauses;
 import android.telephony.CarrierConfigManager;
+import android.telephony.PhoneNumberUtils;
+import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
+import android.telephony.emergency.EmergencyNumber;
 import android.text.TextUtils;
 import android.util.LocalLog;
 import android.util.Log;
 
 import com.android.internal.annotations.VisibleForTesting;
-import com.android.internal.telephony.Phone;
-import com.android.internal.telephony.PhoneFactory;
 
 import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
 
 /** Controls the cross stack redialing. */
 public class CrossSimRedialingController extends Handler {
@@ -53,11 +56,11 @@
         /**
          * Returns whether the number is an emergency number in the given modem slot.
          *
-         * @param slotId The slot id to be checked.
+         * @param subId The sub id to be checked.
          * @param number The number.
          * @return {@code true} if the number is an emergency number in the given slot.
          */
-        boolean isEmergencyNumber(int slotId, String number);
+        boolean isEmergencyNumber(int subId, String number);
     }
 
     @VisibleForTesting
@@ -73,17 +76,23 @@
 
     private EmergencyNumberHelper mEmergencyNumberHelper = new EmergencyNumberHelper() {
         @Override
-        public boolean isEmergencyNumber(int slotId, String number) {
-            // TODO(b/258112541) Add System api to check emergency number per subscription.
+        public boolean isEmergencyNumber(int subId, String number) {
+            number = PhoneNumberUtils.stripSeparators(number);
+            if (TextUtils.isEmpty(number)) return false;
+            Map<Integer, List<EmergencyNumber>> lists = null;
             try {
-                Phone phone = PhoneFactory.getPhone(slotId);
-                if (phone != null
-                        && phone.getEmergencyNumberTracker() != null
-                        && phone.getEmergencyNumberTracker().isEmergencyNumber(number)) {
-                    return true;
-                }
-            } catch (IllegalStateException e) {
-                loge("isEmergencyNumber e=" + e);
+                lists = mTelephonyManager.getEmergencyNumberList();
+            } catch (IllegalStateException ise) {
+                loge("isEmergencyNumber ise=" + ise);
+            } catch (RuntimeException rte) {
+                loge("isEmergencyNumber rte=" + rte);
+            }
+            if (lists == null) return false;
+
+            List<EmergencyNumber> list = lists.get(subId);
+            if (list == null || list.isEmpty()) return false;
+            for (EmergencyNumber eNumber : list) {
+                if (number.equals(eNumber.getNumber())) return true;
             }
             return false;
         }
@@ -242,11 +251,12 @@
                 continue;
             }
 
-            if (mEmergencyNumberHelper.isEmergencyNumber(i, mNumber)) {
-                logi("isThereOtherSlot index=" + i + ", found");
+            int subId = SubscriptionManager.getSubscriptionId(i);
+            if (mEmergencyNumberHelper.isEmergencyNumber(subId, mNumber)) {
+                logi("isThereOtherSlot index=" + i + "(" + subId + "), found");
                 return true;
             } else {
-                logi("isThereOtherSlot index=" + i + ", not emergency number");
+                logi("isThereOtherSlot index=" + i + "(" + subId + "), not emergency number");
             }
         }
 
@@ -278,6 +288,12 @@
                 + ", startQuickTimerInService=" + mStartQuickCrossStackTimerWhenInService);
     }
 
+    /** Test purpose only. */
+    @VisibleForTesting
+    public EmergencyNumberHelper getEmergencyNumberHelper() {
+        return mEmergencyNumberHelper;
+    }
+
     /** Destroys the instance. */
     public void destroy() {
         if (DBG) logd("destroy");
diff --git a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
index 3388c97..3d6a4d1 100644
--- a/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
+++ b/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelector.java
@@ -53,9 +53,11 @@
 import static android.telephony.NetworkRegistrationInfo.REGISTRATION_STATE_ROAMING;
 import static android.telephony.PreciseDisconnectCause.EMERGENCY_PERM_FAILURE;
 import static android.telephony.PreciseDisconnectCause.EMERGENCY_TEMP_FAILURE;
+import static android.telephony.PreciseDisconnectCause.SERVICE_OPTION_NOT_AVAILABLE;
 
 import android.annotation.NonNull;
 import android.content.Context;
+import android.content.res.Resources;
 import android.net.ConnectivityManager;
 import android.net.Network;
 import android.net.NetworkCapabilities;
@@ -83,12 +85,12 @@
 import android.telephony.emergency.EmergencyNumber;
 import android.telephony.ims.ImsManager;
 import android.telephony.ims.ImsMmTelManager;
-import android.telephony.ims.ImsReasonInfo;
 import android.telephony.ims.ProvisioningManager;
 import android.text.TextUtils;
 import android.util.LocalLog;
 
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.phone.R;
 
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -117,17 +119,7 @@
 
     private static final LocalLog sLocalLog = new LocalLog(LOG_SIZE);
 
-    private static final ArrayList<String> sAllowOnlyWithSimReady = new ArrayList<>();
-
-    static {
-        // b/177967010, JP
-        sAllowOnlyWithSimReady.add("jp"); // Japan
-        // b/198393826, DE
-        sAllowOnlyWithSimReady.add("de"); // Germany
-        // b/230443699, IN and SG
-        sAllowOnlyWithSimReady.add("in"); // India
-        sAllowOnlyWithSimReady.add("sg"); // Singapore
-    }
+    private static List<String> sSimReadyAllowList;
 
     /**
      * Network callback used to determine whether Wi-Fi is connected or not.
@@ -171,6 +163,7 @@
 
     private CancellationSignal mCancelSignal;
 
+    // Members for carrier configuration
     private @RadioAccessNetworkType int[] mImsRatsConfig;
     private @RadioAccessNetworkType int[] mCsRatsConfig;
     private @RadioAccessNetworkType int[] mImsRoamRatsConfig;
@@ -180,8 +173,6 @@
     private List<String> mCdmaPreferredNumbers;
     private boolean mPreferImsWhenCallsOnCs;
     private int mVoWifiRequiresCondition;
-    private boolean mIsMonitoringConnectivity;
-    private boolean mWiFiAvailable;
     private int mScanTimeout;
     private int mMaxCellularTimeout;
     private int mMaxNumOfVoWifiTries;
@@ -191,6 +182,11 @@
     private boolean mRequiresImsRegistration;
     private boolean mRequiresVoLteEnabled;
     private boolean mLtePreferredAfterNrFailure;
+
+    // Members for states
+    private boolean mIsMonitoringConnectivity;
+    private boolean mWiFiAvailable;
+    private boolean mWasCsfbAfterPsFailure;
     private boolean mTryCsWhenPsFails;
     private boolean mTryEpsFallback;
     private int mModemCount;
@@ -214,12 +210,14 @@
 
     private final PowerManager.WakeLock mPartialWakeLock;
     private final CrossSimRedialingController mCrossSimRedialingController;
+    private final CarrierConfigHelper mCarrierConfigHelper;
 
     /** Constructor. */
     public EmergencyCallDomainSelector(Context context, int slotId, int subId,
             @NonNull Looper looper, @NonNull ImsStateTracker imsStateTracker,
             @NonNull DestroyListener destroyListener,
-            @NonNull CrossSimRedialingController csrController) {
+            @NonNull CrossSimRedialingController csrController,
+            @NonNull CarrierConfigHelper carrierConfigHelper) {
         super(context, slotId, subId, looper, imsStateTracker, destroyListener, TAG);
 
         mImsStateTracker.addBarringInfoListener(this);
@@ -229,6 +227,7 @@
         mPartialWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
 
         mCrossSimRedialingController = csrController;
+        mCarrierConfigHelper = carrierConfigHelper;
         acquireWakeLock();
     }
 
@@ -367,11 +366,21 @@
             // Dial CS for CSFB instead of scanning with CS preferred network list.
             logi("reselectDomain tryCs=" + accessNetworkTypeToString(mCsNetworkType));
             if (mCsNetworkType != UNKNOWN) {
+                mWasCsfbAfterPsFailure = true;
                 onWwanNetworkTypeSelected(mCsNetworkType);
                 return;
             }
         }
 
+        if (mWasCsfbAfterPsFailure) {
+            mWasCsfbAfterPsFailure = false;
+            if (cause == SERVICE_OPTION_NOT_AVAILABLE) {
+                // b/299875872, combined attach but EXTENDED_SERVICE_REQUEST failed.
+                // Try CS preferred scan instead of PS preferred scan.
+                mLastNetworkType = EUTRAN;
+            }
+        }
+
         if (mMaxCellularTimerExpired) {
             if (mLastTransportType == TRANSPORT_TYPE_WWAN
                     && maybeDialOverWlan()) {
@@ -435,6 +444,7 @@
 
     private void startDomainSelection() {
         logi("startDomainSelection modemCount=" + mModemCount);
+        readResourceConfiguration();
         updateCarrierConfiguration();
         mDomainSelectionRequested = true;
         startCrossStackTimer();
@@ -469,6 +479,12 @@
         selectDomain();
     }
 
+    private boolean isSimReady() {
+        if (!SubscriptionManager.isValidSubscriptionId(getSubId())) return false;
+        TelephonyManager tm = mContext.getSystemService(TelephonyManager.class);
+        return tm.getSimState(getSlotId()) == TelephonyManager.SIM_STATE_READY;
+    }
+
     /**
      * Caches the configuration.
      */
@@ -483,11 +499,7 @@
                 b.getIntArray(KEY_EMERGENCY_OVER_IMS_SUPPORTED_3GPP_NETWORK_TYPES_INT_ARRAY);
         mImsRoamRatsConfig = b.getIntArray(
                 KEY_EMERGENCY_OVER_IMS_ROAMING_SUPPORTED_3GPP_NETWORK_TYPES_INT_ARRAY);
-        if (!SubscriptionManager.isValidSubscriptionId(getSubId())) {
-            // Default configuration includes only EUTRAN . In case of no SIM, add NGRAN.
-            mImsRatsConfig = new int[] { EUTRAN, NGRAN };
-            mImsRoamRatsConfig = new int[] { EUTRAN, NGRAN };
-        }
+        maybeModifyImsRats();
 
         mCsRatsConfig =
                 b.getIntArray(KEY_EMERGENCY_OVER_CS_SUPPORTED_ACCESS_NETWORK_TYPES_INT_ARRAY);
@@ -557,22 +569,61 @@
         }
     }
 
+    /** Adds NGRAN if SIM is absent or locked and the last valid subscription supported NGRAN. */
+    private void maybeModifyImsRats() {
+        if (mCarrierConfigHelper.isVoNrEmergencySupported(getSlotId())
+                && !isSimReady() && mImsRatsConfig.length < 2) {
+            // Default configuration includes only EUTRAN.
+            mImsRatsConfig = new int[] { EUTRAN, NGRAN };
+            mImsRoamRatsConfig = new int[] { EUTRAN, NGRAN };
+        }
+    }
+
+    /**
+     * Caches the resource configuration.
+     */
+    private void readResourceConfiguration() {
+        if (sSimReadyAllowList != null) return;
+        try {
+            sSimReadyAllowList = Arrays.asList(mContext.getResources().getStringArray(
+                    R.array.config_countries_require_sim_for_emergency));
+        } catch (Resources.NotFoundException nfe) {
+            loge("readResourceConfiguration exception=" + nfe);
+        } catch (NullPointerException npe) {
+            loge("readResourceConfiguration exception=" + npe);
+        } finally {
+            if (sSimReadyAllowList == null) {
+                sSimReadyAllowList = new ArrayList<String>();
+            }
+        }
+        logi("readResourceConfiguration simReadyCountries=" + sSimReadyAllowList);
+    }
+
+    /** For test purpose only */
+    @VisibleForTesting
+    public void clearResourceConfiguration() {
+        sSimReadyAllowList = null;
+    }
+
     private void selectDomain() {
         // State updated right after creation.
         if (!mDomainSelectionRequested) return;
 
-        // Emergency network scan requested has not been completed.
-        if (mIsScanRequested) return;
-
-        // Domain selection completed, {@link #reselectDomain()} will restart domain selection.
-        if (mDomainSelected) return;
-
         if (!mBarringInfoReceived || !mImsRegStateReceived || !mMmTelCapabilitiesReceived) {
             logi("selectDomain not received"
                     + " BarringInfo, IMS registration state, or MMTEL capabilities");
             return;
         }
 
+        // The statements below should be executed only once to select domain from initial state.
+        // Next domain selection shall be triggered by reselectDomain().
+        // However, selectDomain() can be called by change of IMS service state and Barring status
+        // at any time. mIsScanRequested and mDomainSelected are not enough since there are cases
+        // when neither mIsScanRequested nor mDomainSelected is set though selectDomain() has been
+        // executed already.
+        // Reset mDomainSelectionRequested to avoid redundant execution of selectDomain().
+        mDomainSelectionRequested = false;
+
         if (!allowEmergencyCalls(mSelectionAttributes.getEmergencyRegResult())) {
             // Detected the country and found that emergency calls are not allowed with this slot.
             terminateSelectionPermanentlyForSlot();
@@ -694,8 +745,7 @@
         mCancelSignal = new CancellationSignal();
         // In case dialing over Wi-Fi has failed, do not the change the domain preference.
         if (!wifiFailed) {
-            mLastPreferredNetworks = getNextPreferredNetworks(csPreferred, mTryEpsFallback,
-                    !startVoWifiTimer);
+            mLastPreferredNetworks = getNextPreferredNetworks(csPreferred, mTryEpsFallback);
         }
         mTryEpsFallback = false;
 
@@ -733,13 +783,11 @@
      *
      * @param csPreferred Indicates whether CS preferred scan is requested.
      * @param tryEpsFallback Indicates whether scan requested for EPS fallback.
-     * @param lastScanFailed Indicates whether this a scan request due to the failure of last scan
-     *        request.
      * @return The list of preferred network types.
      */
     @VisibleForTesting
     public @RadioAccessNetworkType List<Integer> getNextPreferredNetworks(boolean csPreferred,
-            boolean tryEpsFallback, boolean lastScanFailed) {
+            boolean tryEpsFallback) {
         if (mRequiresVoLteEnabled && !isAdvancedCallingSettingEnabled()) {
             // Emergency call over IMS is not supported.
             logi("getNextPreferredNetworks VoLte setting is not enabled.");
@@ -809,21 +857,9 @@
             }
         }
 
-        // There can be cases that dialing IMS call failed but the modem doesn't know this
-        // situation with some vendor solutions. For example, dialing failure due to the
-        // emergency registration failure.
-        // Remove the current RAT from the scan list to avoid modem select current PLMN.
-        // If the scan fails, the next scan will include this RAT again.
-        //
-        // TODO (b/278183420) Replace this with a better solution by adding indication
-        // of call setup failure to the scan request.
-        ImsReasonInfo reasonInfo = mSelectionAttributes.getPsDisconnectCause();
-        if (!lastScanFailed && reasonInfo != null
-                && reasonInfo.getCode() == ImsReasonInfo.CODE_LOCAL_NOT_REGISTERED) {
-            logi("getNextPreferredNetworks remove " + mLastNetworkType);
-            if (preferredNetworks.size() > 1) {
-                preferredNetworks.remove(Integer.valueOf(mLastNetworkType));
-            }
+        // Adds NGRAN at the end of the list if SIM is absent or locked and NGRAN is not included.
+        if (!isSimReady() && !preferredNetworks.contains(NGRAN)) {
+            preferredNetworks.add(NGRAN);
         }
 
         return preferredNetworks;
@@ -1035,13 +1071,13 @@
      * @return {@code true} if emergency call over Wi-Fi allowed.
      */
     private boolean isEmcOverWifiSupported() {
-        if (SubscriptionManager.isValidSubscriptionId(getSubId())) {
+        if (isSimReady()) {
             List<Integer> domains = getDomainPreference();
             boolean ret = domains.contains(DOMAIN_PS_NON_3GPP);
             logi("isEmcOverWifiSupported " + ret);
             return ret;
         } else {
-            logi("isEmcOverWifiSupported invalid subId");
+            logi("isEmcOverWifiSupported invalid subId or lock state");
         }
         return false;
     }
@@ -1332,7 +1368,7 @@
         }
 
         String iso = regResult.getIso();
-        if (sAllowOnlyWithSimReady.contains(iso)) {
+        if (sSimReadyAllowList.contains(iso)) {
             TelephonyManager tm = mContext.getSystemService(TelephonyManager.class);
             int simState = tm.getSimState(getSlotId());
             if (simState != TelephonyManager.SIM_STATE_READY) {
diff --git a/src/com/android/services/telephony/domainselection/NormalCallDomainSelector.java b/src/com/android/services/telephony/domainselection/NormalCallDomainSelector.java
index f176d90..f85dabe 100644
--- a/src/com/android/services/telephony/domainselection/NormalCallDomainSelector.java
+++ b/src/com/android/services/telephony/domainselection/NormalCallDomainSelector.java
@@ -28,13 +28,12 @@
 import android.telephony.DisconnectCause;
 import android.telephony.DomainSelectionService.SelectionAttributes;
 import android.telephony.NetworkRegistrationInfo;
+import android.telephony.PhoneNumberUtils;
 import android.telephony.ServiceState;
 import android.telephony.SubscriptionManager;
 import android.telephony.TransportSelectorCallback;
 import android.telephony.ims.ImsReasonInfo;
 
-import com.android.internal.telephony.domainselection.NormalCallDomainSelectionConnection;
-
 /**
  * Implements domain selector for outgoing non-emergency calls.
  */
@@ -119,6 +118,12 @@
         mTransportSelectorCallback = null;
     }
 
+    @Override
+    public void destroy() {
+        finishSelection();
+        super.destroy();
+    }
+
     /**
      * Cancel an ongoing selection operation. It is up to the DomainSelectionService
      * to clean up all ongoing operations with the framework.
@@ -233,7 +238,8 @@
 
         PersistableBundle config = null;
         if (configManager != null) {
-            config = configManager.getConfigForSubId(mSelectionAttributes.getSubId());
+            config = configManager.getConfigForSubId(mSelectionAttributes.getSubId(),
+                    new String[] {CarrierConfigManager.KEY_SUPPORT_WPS_OVER_IMS_BOOL});
         }
 
         return (config != null)
@@ -260,7 +266,8 @@
 
         PersistableBundle config = null;
         if (configManager != null) {
-            config = configManager.getConfigForSubId(mSelectionAttributes.getSubId());
+            config = configManager.getConfigForSubId(mSelectionAttributes.getSubId(),
+                    new String[] {CarrierConfigManager.KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL});
         }
 
         return (config != null)
@@ -292,9 +299,9 @@
         // IMS -> CS
         ImsReasonInfo imsReasonInfo = mSelectionAttributes.getPsDisconnectCause();
         if (mReselectDomain && imsReasonInfo != null) {
-            logd("PsDisconnectCause:" + imsReasonInfo.mCode);
+            logd("PsDisconnectCause:" + imsReasonInfo.getCode());
             mReselectDomain = false;
-            if (imsReasonInfo.mCode == ImsReasonInfo.CODE_LOCAL_CALL_CS_RETRY_REQUIRED) {
+            if (imsReasonInfo.getCode() == ImsReasonInfo.CODE_LOCAL_CALL_CS_RETRY_REQUIRED) {
                 if (isOutOfService()) {
                     loge("Cannot place call in current ServiceState: " + mServiceState.getState());
                     notifySelectionTerminated(DisconnectCause.OUT_OF_SERVICE);
@@ -375,9 +382,7 @@
         // Handle voice call.
         if (mImsStateTracker.isImsVoiceCapable()) {
             logd("IMS is voice capable");
-            // TODO(b/266175810) Remove this dependency.
-            if (NormalCallDomainSelectionConnection
-                    .isWpsCall(mSelectionAttributes.getNumber())) {
+            if (PhoneNumberUtils.isWpsCallNumber(mSelectionAttributes.getNumber())) {
                 handleWpsCall();
             } else {
                 notifyPsSelected();
diff --git a/src/com/android/services/telephony/domainselection/TelephonyDomainSelectionService.java b/src/com/android/services/telephony/domainselection/TelephonyDomainSelectionService.java
index 3a8fc86..66894f7 100644
--- a/src/com/android/services/telephony/domainselection/TelephonyDomainSelectionService.java
+++ b/src/com/android/services/telephony/domainselection/TelephonyDomainSelectionService.java
@@ -17,6 +17,7 @@
 package com.android.services.telephony.domainselection;
 
 import android.annotation.NonNull;
+import android.annotation.Nullable;
 import android.annotation.SuppressLint;
 import android.content.Context;
 import android.os.Handler;
@@ -37,6 +38,7 @@
 import android.util.SparseArray;
 
 import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.telephony.flags.Flags;
 
 import java.io.FileDescriptor;
 import java.io.PrintWriter;
@@ -71,7 +73,8 @@
                 @SelectorType int selectorType, boolean isEmergency, @NonNull Looper looper,
                 @NonNull ImsStateTracker imsStateTracker,
                 @NonNull DomainSelectorBase.DestroyListener listener,
-                @NonNull CrossSimRedialingController crossSimRedialingController);
+                @NonNull CrossSimRedialingController crossSimRedialingController,
+                @NonNull CarrierConfigHelper carrierConfigHelper);
     }
 
     private static final class DefaultDomainSelectorFactory implements DomainSelectorFactory {
@@ -80,7 +83,8 @@
                 @SelectorType int selectorType, boolean isEmergency, @NonNull Looper looper,
                 @NonNull ImsStateTracker imsStateTracker,
                 @NonNull DomainSelectorBase.DestroyListener listener,
-                @NonNull CrossSimRedialingController crossSimRedialingController) {
+                @NonNull CrossSimRedialingController crossSimRedialingController,
+                @NonNull CarrierConfigHelper carrierConfigHelper) {
             DomainSelectorBase selector = null;
 
             logi("create-DomainSelector: slotId=" + slotId + ", subId=" + subId
@@ -91,7 +95,8 @@
                 case SELECTOR_TYPE_CALLING:
                     if (isEmergency) {
                         selector = new EmergencyCallDomainSelector(context, slotId, subId, looper,
-                                imsStateTracker, listener, crossSimRedialingController);
+                                imsStateTracker, listener, crossSimRedialingController,
+                                carrierConfigHelper);
                     } else {
                         selector = new NormalCallDomainSelector(context, slotId, subId, looper,
                                 imsStateTracker, listener);
@@ -195,15 +200,17 @@
     private final DomainSelectorFactory mDomainSelectorFactory;
     private Handler mServiceHandler;
     private CrossSimRedialingController mCrossSimRedialingController;
+    private CarrierConfigHelper mCarrierConfigHelper;
 
     public TelephonyDomainSelectionService(Context context) {
-        this(context, ImsStateTracker::new, new DefaultDomainSelectorFactory());
+        this(context, ImsStateTracker::new, new DefaultDomainSelectorFactory(), null);
     }
 
     @VisibleForTesting
     public TelephonyDomainSelectionService(Context context,
             @NonNull ImsStateTrackerFactory imsStateTrackerFactory,
-            @NonNull DomainSelectorFactory domainSelectorFactory) {
+            @NonNull DomainSelectorFactory domainSelectorFactory,
+            @Nullable CarrierConfigHelper carrierConfigHelper) {
         mContext = context;
         mImsStateTrackerFactory = imsStateTrackerFactory;
         mDomainSelectorFactory = domainSelectorFactory;
@@ -225,6 +232,8 @@
         }
 
         mCrossSimRedialingController = new CrossSimRedialingController(context, getLooper());
+        mCarrierConfigHelper = (carrierConfigHelper != null)
+                ? carrierConfigHelper : new CarrierConfigHelper(context, getLooper());
 
         logi("TelephonyDomainSelectionService created");
     }
@@ -268,6 +277,11 @@
             mCrossSimRedialingController = null;
         }
 
+        if (mCarrierConfigHelper != null) {
+            mCarrierConfigHelper.destroy();
+            mCarrierConfigHelper = null;
+        }
+
         if (mServiceHandler != null) {
             mServiceHandler.getLooper().quit();
             mServiceHandler = null;
@@ -290,7 +304,7 @@
         ImsStateTracker ist = getImsStateTracker(slotId);
         DomainSelectorBase selector = mDomainSelectorFactory.create(mContext, slotId, subId,
                 selectorType, isEmergency, getLooper(), ist, mDestroyListener,
-                mCrossSimRedialingController);
+                mCrossSimRedialingController, mCarrierConfigHelper);
 
         if (selector != null) {
             // Ensures that ImsStateTracker is started before selecting the domain if not started
@@ -371,6 +385,9 @@
      */
     private void handleSubscriptionsChanged() {
         SubscriptionManager sm = mContext.getSystemService(SubscriptionManager.class);
+        if (Flags.workProfileApiSplit()) {
+            sm = sm.createForAllUserProfiles();
+        }
         List<SubscriptionInfo> subsInfoList =
                 (sm != null) ? sm.getActiveSubscriptionInfoList() : null;
 
diff --git a/testapps/GbaTestApp/Android.bp b/testapps/GbaTestApp/Android.bp
index 76e02a0..72f7cc4 100644
--- a/testapps/GbaTestApp/Android.bp
+++ b/testapps/GbaTestApp/Android.bp
@@ -22,7 +22,6 @@
     static_libs: [
         "androidx.appcompat_appcompat",
 	"androidx-constraintlayout_constraintlayout",
-	"ub-uiautomator",
     ],
     srcs: ["src/**/*.java"],
     javacflags: ["-parameters"],
diff --git a/testapps/GbaTestApp/res/values-am/strings.xml b/testapps/GbaTestApp/res/values-am/strings.xml
index b78cd6c..b9be9d5 100644
--- a/testapps/GbaTestApp/res/values-am/strings.xml
+++ b/testapps/GbaTestApp/res/values-am/strings.xml
@@ -16,7 +16,7 @@
     <string name="title_activity_test_config" msgid="7585204485536359713">"TestConfigActivity"</string>
     <string name="service_package_name" msgid="7204809439090483315">"የGBA አገልግሎት የጥቅል ስም"</string>
     <string name="service_release_time" msgid="532937496122890892">"ጥሪ ከተደረገ በኋላ አገልግሎት የሚለቀቅበት ጊዜ"</string>
-    <string name="request_app_type" msgid="3975978141673475612">"UICC የመተግበሪያ አይነት"</string>
+    <string name="request_app_type" msgid="3975978141673475612">"UICC የመተግበሪያ ዓይነት"</string>
     <string name="request_naf_url" msgid="4487793541217737042">"የአውታረ መረብ የመተግበሪያ ተግባር (NAF) ዩአርኤል"</string>
     <string name="request_force_bootstrapping" msgid="206043602616214325">"በማስነሻ ተገዶ ይነሳ?"</string>
     <string name="request_org" msgid="8416693445448308975">"የድርጅት ኮድ"</string>
diff --git a/testapps/TestSatelliteApp/Android.bp b/testapps/TestSatelliteApp/Android.bp
new file mode 100644
index 0000000..78d125d
--- /dev/null
+++ b/testapps/TestSatelliteApp/Android.bp
@@ -0,0 +1,20 @@
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+android_app {
+    name: "SatelliteTestApp",
+    system_ext_specific: true,
+    platform_apis: true,
+    manifest: "AndroidManifest.xml",
+    srcs: [
+        "src/**/*.java",
+        "src/**/I*.aidl",
+    ],
+    static_libs: [
+        "SatelliteClient",
+    ],
+    owner: "google",
+    privileged: true,
+    certificate: "platform",
+}
diff --git a/testapps/TestSatelliteApp/AndroidManifest.xml b/testapps/TestSatelliteApp/AndroidManifest.xml
new file mode 100644
index 0000000..fb30bf3
--- /dev/null
+++ b/testapps/TestSatelliteApp/AndroidManifest.xml
@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2023 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.phone.testapps.satellitetestapp">
+    <uses-permission android:name="android.permission.BIND_SATELLITE_SERVICE"/>
+    <uses-permission android:name="android.permission.SATELLITE_COMMUNICATION"/>
+    <uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
+    <application android:label="SatelliteTestApp">
+        <activity android:name=".SatelliteTestApp"
+             android:label="SatelliteTestApp"
+             android:exported="true">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN"/>
+                <category android:name="android.intent.category.DEFAULT"/>
+                <category android:name="android.intent.category.LAUNCHER"/>
+            </intent-filter>
+        </activity>
+
+        <service android:name=".TestSatelliteService"
+             android:directBootAware="true"
+             android:persistent="true"
+             android:permission="android.permission.BIND_SATELLITE_SERVICE"
+             android:exported="true">
+            <intent-filter>
+                <action android:name="android.telephony.satellite.SatelliteService"/>
+            </intent-filter>
+        </service>
+
+        <activity android:name=".SatelliteControl" />
+        <activity android:name=".Datagram" />
+        <activity android:name=".Provisioning" />
+        <activity android:name=".MultipleSendReceive" />
+        <activity android:name=".SendReceive" />
+        <activity android:name=".TestSatelliteWrapper" />
+    </application>
+</manifest>
diff --git a/testapps/TestSatelliteApp/res/layout/activity_Datagram.xml b/testapps/TestSatelliteApp/res/layout/activity_Datagram.xml
new file mode 100644
index 0000000..9e53f41
--- /dev/null
+++ b/testapps/TestSatelliteApp/res/layout/activity_Datagram.xml
@@ -0,0 +1,128 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2023 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
+  -->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:gravity="center"
+    android:paddingLeft="4dp">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical" >
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="0"
+            android:textColor="@android:color/holo_blue_dark"
+            android:textSize="20dp"
+            android:text="Datagram APIs"/>
+        <Button
+            android:id="@+id/startSatelliteTransmissionUpdates"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/startSatelliteTransmissionUpdates"/>
+        <Button
+            android:id="@+id/stopSatelliteTransmissionUpdates"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/stopSatelliteTransmissionUpdates"/>
+        <Button
+            android:id="@+id/pollPendingSatelliteDatagrams"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/pollPendingSatelliteDatagrams"/>
+        <Button
+            android:id="@+id/sendSatelliteDatagram"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/sendSatelliteDatagram"/>
+        <Button
+            android:id="@+id/registerForSatelliteDatagram"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/registerForSatelliteDatagram"/>
+        <Button
+            android:id="@+id/unregisterForSatelliteDatagram"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/unregisterForSatelliteDatagram"/>
+        <Button
+            android:id="@+id/showDatagramSendStateTransition"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/showDatagramSendStateTransition"/>
+        <Button
+            android:id="@+id/showDatagramReceiveStateTransition"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/showDatagramReceiveStateTransition"/>
+        <Button
+            android:id="@+id/registerForSatelliteModemStateChanged"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/registerForSatelliteModemStateChanged"/>
+        <Button
+            android:id="@+id/unregisterForSatelliteModemStateChanged"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/unregisterForSatelliteModemStateChanged"/>
+        <Button
+            android:id="@+id/showSatelliteModemStateTransition"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/showSatelliteModemStateTransition"/>
+        <Button
+            android:id="@+id/Back"
+            android:onClick="Back"
+            android:textColor="@android:color/holo_blue_dark"
+            android:layout_marginTop="100dp"
+            android:layout_gravity="center"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/Back"/>
+        <TextView
+            android:id="@+id/text_id"
+            android:layout_width="400dp"
+            android:layout_height="50dp"
+            android:capitalize="characters"
+            android:textColor="@android:color/holo_blue_light"
+            android:textSize="15dp" />
+        <TextView
+            android:id="@+id/showErrorStatus"
+            android:layout_width="400dp"
+            android:layout_height="50dp"
+            android:capitalize="characters"
+            android:textColor="@android:color/holo_blue_light"
+            android:textSize="15dp" />
+    </LinearLayout>
+</LinearLayout>
diff --git a/testapps/TestSatelliteApp/res/layout/activity_MultipleSendReceive.xml b/testapps/TestSatelliteApp/res/layout/activity_MultipleSendReceive.xml
new file mode 100644
index 0000000..3632ecb
--- /dev/null
+++ b/testapps/TestSatelliteApp/res/layout/activity_MultipleSendReceive.xml
@@ -0,0 +1,98 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2023 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
+  -->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:gravity="center"
+    android:paddingLeft="4dp">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical" >
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="0"
+            android:textColor="@android:color/holo_blue_dark"
+            android:textSize="20dp"
+            android:text="Multiple Send and Receive APIs"/>
+        <Button
+            android:id="@+id/multiplePollPendingSatelliteDatagrams"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/multiplePollPendingSatelliteDatagrams"/>
+        <Button
+            android:id="@+id/multipleSendSatelliteDatagram"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/multipleSendSatelliteDatagram"/>
+        <Button
+            android:id="@+id/multipleSendReceiveSatelliteDatagram"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/multipleSendReceiveSatelliteDatagram"/>
+        <Button
+            android:id="@+id/Back"
+            android:onClick="Back"
+            android:textColor="@android:color/holo_blue_dark"
+            android:layout_marginTop="100dp"
+            android:layout_gravity="center"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/Back"/>
+        <TextView
+            android:id="@+id/text_id"
+            android:layout_width="400dp"
+            android:layout_height="50dp"
+            android:capitalize="characters"
+            android:textColor="@android:color/holo_blue_light"
+            android:textSize="15dp" />
+        <TextView
+            android:id="@+id/text_id1"
+            android:layout_width="400dp"
+            android:layout_height="65dp"
+            android:capitalize="characters"
+            android:textColor="@android:color/holo_blue_light"
+            android:layout_centerVertical="true"
+            android:textSize="15dp" />
+        <TextView
+            android:id="@+id/text_id2"
+            android:layout_width="400dp"
+            android:layout_height="65dp"
+            android:capitalize="characters"
+            android:textColor="@android:color/holo_blue_light"
+            android:layout_centerVertical="true"
+            android:textSize="15dp" />
+        <TextView
+            android:id="@+id/text_id3"
+            android:layout_width="400dp"
+            android:layout_height="65dp"
+            android:capitalize="characters"
+            android:textColor="@android:color/holo_blue_light"
+            android:layout_centerVertical="true"
+            android:textSize="15dp" />
+    </LinearLayout>
+</LinearLayout>
diff --git a/testapps/TestSatelliteApp/res/layout/activity_Provisioning.xml b/testapps/TestSatelliteApp/res/layout/activity_Provisioning.xml
new file mode 100644
index 0000000..da5105d
--- /dev/null
+++ b/testapps/TestSatelliteApp/res/layout/activity_Provisioning.xml
@@ -0,0 +1,93 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2023 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
+  -->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:gravity="center"
+    android:paddingLeft="4dp">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical" >
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="0"
+            android:textColor="@android:color/holo_blue_dark"
+            android:textSize="20dp"
+            android:text="Provisioning APIs"/>
+        <Button
+            android:id="@+id/provisionSatelliteService"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/provisionSatelliteService"/>
+        <Button
+            android:id="@+id/deprovisionSatelliteService"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/deprovisionSatelliteService"/>
+        <Button
+            android:id="@+id/requestIsSatelliteProvisioned"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/requestIsSatelliteProvisioned"/>
+         <Button
+            android:id="@+id/registerForSatelliteProvisionStateChanged"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/registerForSatelliteProvisionStateChanged"/>
+        <Button
+            android:id="@+id/unregisterForSatelliteProvisionStateChanged"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/unregisterForSatelliteProvisionStateChanged"/>
+        <Button
+            android:id="@+id/showCurrentSatelliteProvisionState"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/showCurrentSatelliteProvisionState"/>
+        <Button
+            android:id="@+id/Back"
+            android:onClick="Back"
+            android:textColor="@android:color/holo_blue_dark"
+            android:layout_marginTop="100dp"
+            android:layout_gravity="center"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/Back"/>
+        <TextView
+            android:id="@+id/text_id"
+            android:layout_width="300dp"
+            android:layout_height="200dp"
+            android:capitalize="characters"
+            android:textColor="@android:color/holo_blue_light"
+            android:layout_centerVertical="true"
+            android:textSize="15dp" />
+    </LinearLayout>
+</LinearLayout>
diff --git a/testapps/TestSatelliteApp/res/layout/activity_SatelliteControl.xml b/testapps/TestSatelliteApp/res/layout/activity_SatelliteControl.xml
new file mode 100644
index 0000000..40e3c69
--- /dev/null
+++ b/testapps/TestSatelliteApp/res/layout/activity_SatelliteControl.xml
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2023 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
+  -->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:gravity="center"
+    android:paddingLeft="4dp">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical" >
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="0"
+            android:textColor="@android:color/holo_blue_dark"
+            android:textSize="20dp"
+            android:text="Satellite Control APIs"/>
+        <Button
+            android:id="@+id/enableSatellite"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/enableSatellite"/>
+        <Button
+            android:id="@+id/disableSatellite"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/disableSatellite"/>
+         <Button
+            android:id="@+id/requestIsSatelliteEnabled"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/requestIsSatelliteEnabled"/>
+         <Button
+            android:id="@+id/requestIsDemoModeEnabled"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/requestIsDemoModeEnabled"/>
+          <Button
+            android:id="@+id/requestIsSatelliteSupported"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/requestIsSatelliteSupported"/>
+         <Button
+            android:id="@+id/requestSatelliteCapabilities"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/requestSatelliteCapabilities"/>
+         <Button
+            android:id="@+id/requestIsSatelliteCommunicationAllowedForCurrentLocation"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/requestIsSatelliteCommunicationAllowedForCurrentLocation"/>
+          <Button
+            android:id="@+id/requestTimeForNextSatelliteVisibility"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/requestTimeForNextSatelliteVisibility"/>
+         <Button
+            android:id="@+id/Back"
+            android:onClick="Back"
+            android:textColor="@android:color/holo_blue_dark"
+            android:layout_marginTop="100dp"
+            android:layout_gravity="center"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/Back"/>
+         <TextView
+            android:id="@+id/text_id"
+            android:layout_width="300dp"
+            android:layout_height="200dp"
+            android:capitalize="characters"
+            android:textColor="@android:color/holo_blue_light"
+            android:layout_centerVertical="true"
+            android:textSize="15dp" />
+    </LinearLayout>
+</LinearLayout>
diff --git a/testapps/TestSatelliteApp/res/layout/activity_SatelliteTestApp.xml b/testapps/TestSatelliteApp/res/layout/activity_SatelliteTestApp.xml
new file mode 100644
index 0000000..0753b82
--- /dev/null
+++ b/testapps/TestSatelliteApp/res/layout/activity_SatelliteTestApp.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2023 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
+  -->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:paddingLeft="4dp">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical" >
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_weight="0"
+            android:textColor="@android:color/holo_blue_dark"
+            android:textSize="20dp"
+            android:text="Available Satellite APIs"/>
+        <Button
+            android:id="@+id/SatelliteControl"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/SatelliteControl"/>
+        <Button
+            android:id="@+id/Datagram"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/Datagram"/>
+        <Button
+            android:id="@+id/Provisioning"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/Provisioning"/>
+        <Button
+            android:id="@+id/MultipleSendReceive"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/MultipleSendReceive"/>
+        <Button
+             android:id="@+id/SendReceive"
+             android:layout_width="match_parent"
+             android:layout_height="wrap_content"
+             android:paddingRight="4dp"
+             android:text="@string/SendReceive"/>
+        <Button
+            android:id="@+id/TestSatelliteWrapper"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingEnd="4dp"
+            android:text="@string/TestSatelliteWrapper"/>
+    </LinearLayout>
+</LinearLayout>
diff --git a/testapps/TestSatelliteApp/res/layout/activity_SendReceive.xml b/testapps/TestSatelliteApp/res/layout/activity_SendReceive.xml
new file mode 100644
index 0000000..6490e5d
--- /dev/null
+++ b/testapps/TestSatelliteApp/res/layout/activity_SendReceive.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2023 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
+  -->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:gravity="center"
+    android:paddingLeft="4dp">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical" >
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content" android:layout_weight="0"
+            android:textColor="@android:color/holo_blue_dark"
+            android:textSize="20dp"
+            android:text="Send and Receive APIs"/>
+        <Button
+            android:id="@+id/sendMessage"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/sendMessage"/>
+        <Button
+            android:id="@+id/receiveMessage"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/receiveMessage"/>
+        <EditText
+            android:id="@+id/enterText"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:hint="Enter message to send"
+            android:inputType="text" />
+        <Button
+            android:id="@+id/Back"
+            android:onClick="Back"
+            android:textColor="@android:color/holo_blue_dark"
+            android:layout_marginTop="100dp"
+            android:layout_gravity="center"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:paddingRight="4dp"
+            android:text="@string/Back"/>
+        <TextView
+            android:id="@+id/showErrorStatus"
+            android:layout_width="400dp"
+            android:layout_height="50dp"
+            android:capitalize="characters"
+            android:textColor="@android:color/holo_blue_light"
+            android:textSize="15dp" />
+        <TextView
+            android:id="@+id/devicePosition"
+            android:layout_width="400dp"
+            android:layout_height="65dp"
+            android:capitalize="characters"
+            android:textColor="@android:color/holo_blue_light"
+            android:layout_centerVertical="true"
+            android:textSize="15dp" />
+        <TextView
+            android:id="@+id/satellitePosition"
+            android:layout_width="400dp"
+            android:layout_height="65dp"
+            android:capitalize="characters"
+            android:textColor="@android:color/holo_blue_light"
+            android:layout_centerVertical="true"
+            android:textSize="15dp" />
+        <TextView
+            android:id="@+id/messageStatus"
+            android:layout_width="400dp"
+            android:layout_height="65dp"
+            android:capitalize="characters"
+            android:textColor="@android:color/holo_blue_light"
+            android:layout_centerVertical="true"
+            android:textSize="15dp" />
+    </LinearLayout>
+</LinearLayout>
diff --git a/testapps/TestSatelliteApp/res/layout/activity_TestSatelliteWrapper.xml b/testapps/TestSatelliteApp/res/layout/activity_TestSatelliteWrapper.xml
new file mode 100644
index 0000000..c136ce7
--- /dev/null
+++ b/testapps/TestSatelliteApp/res/layout/activity_TestSatelliteWrapper.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2023 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
+  -->
+
+<LinearLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:orientation="vertical"
+    android:gravity="center"
+    android:paddingStart="4dp">
+
+    <TextView
+        android:layout_width="wrap_content"
+        android:layout_height="0dp"
+        android:layout_weight="0"
+        android:textColor="@android:color/holo_blue_dark"
+        android:textSize="20dp"
+        android:text="Satellite Wrapper Test"/>
+    <Button
+        android:id="@+id/requestNtnSignalStrength"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingRight="4dp"
+        android:text="@string/requestNtnSignalStrength"/>
+    <Button
+        android:id="@+id/registerForNtnSignalStrengthChanged"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingRight="4dp"
+        android:text="@string/registerForNtnSignalStrengthChanged"/>
+    <Button
+        android:id="@+id/unregisterForNtnSignalStrengthChanged"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingRight="4dp"
+        android:text="@string/unregisterForNtnSignalStrengthChanged"/>
+    <Button
+        android:id="@+id/isOnlyNonTerrestrialNetworkSubscription"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingRight="4dp"
+        android:text="@string/isOnlyNonTerrestrialNetworkSubscription"/>
+    <Button
+        android:id="@+id/registerForSatelliteCapabilitiesChanged"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingRight="4dp"
+        android:text="@string/registerForSatelliteCapabilitiesChanged"/>
+    <Button
+        android:id="@+id/unregisterForSatelliteCapabilitiesChanged"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:paddingRight="4dp"
+        android:text="@string/unregisterForSatelliteCapabilitiesChanged"/>
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal">
+         <Button
+            android:id="@+id/Back"
+            android:onClick="Back"
+            android:textColor="@android:color/holo_blue_dark"
+            android:layout_marginTop="10dp"
+            android:layout_marginBottom="10dp"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:paddingRight="4dp"
+            android:text="@string/Back"/>
+        <Button
+            android:id="@+id/ClearLog"
+            android:onClick="ClearLog"
+            android:textColor="@android:color/holo_blue_dark"
+            android:layout_marginTop="10dp"
+            android:layout_marginBottom="10dp"
+            android:layout_width="0dp"
+            android:layout_height="wrap_content"
+            android:layout_weight="1"
+            android:paddingRight="4dp"
+            android:text="@string/ClearLog"/>
+    </LinearLayout>
+    <ListView
+        android:id="@+id/logListView"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:capitalize="characters"
+        android:textColor="@android:color/holo_blue_light"
+        android:layout_centerVertical="true"
+        android:textSize="8dp" />
+</LinearLayout>
diff --git a/testapps/TestSatelliteApp/res/layout/log_textview.xml b/testapps/TestSatelliteApp/res/layout/log_textview.xml
new file mode 100644
index 0000000..a44641b
--- /dev/null
+++ b/testapps/TestSatelliteApp/res/layout/log_textview.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2023 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.
+  -->
+
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:id="@+id/log_textview"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    android:textColor="@android:color/holo_blue_light"
+    android:padding="10dp"/>
diff --git a/testapps/TestSatelliteApp/res/values/donottranslate_strings.xml b/testapps/TestSatelliteApp/res/values/donottranslate_strings.xml
new file mode 100644
index 0000000..8ebe5f3
--- /dev/null
+++ b/testapps/TestSatelliteApp/res/values/donottranslate_strings.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+  ~ Copyright (C) 2023 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>
+    <string name="SatelliteControl">SatelliteControl APIs</string>
+    <string name="Datagram">Datagram APIs</string>
+    <string name="Provisioning">Provisioning APIs</string>
+    <string name="MultipleSendReceive">Test multiple poll and send</string>
+    <string name="SendReceive">Send and Receive datagrams</string>
+
+    <string name="enableSatellite">enableSatellite</string>
+    <string name="disableSatellite">disableSatellite</string>
+    <string name="requestIsSatelliteEnabled">requestIsSatelliteEnabled</string>
+    <string name="requestIsDemoModeEnabled">requestIsDemoModeEnabled</string>
+    <string name="requestIsSatelliteSupported">requestIsSatelliteSupported</string>
+    <string name="requestSatelliteCapabilities">requestSatelliteCapabilities</string>
+    <string name="requestIsSatelliteCommunicationAllowedForCurrentLocation">requestIsSatelliteCommunicationAllowedForCurrentLocation</string>
+    <string name="requestTimeForNextSatelliteVisibility">requestTimeForNextSatelliteVisibility</string>
+
+    <string name="pollPendingSatelliteDatagrams">pollPendingSatelliteDatagrams</string>
+    <string name="sendSatelliteDatagram">sendSatelliteDatagram</string>
+    <string name="registerForSatelliteDatagram">registerForSatelliteDatagram</string>
+    <string name="unregisterForSatelliteDatagram">unregisterForSatelliteDatagram</string>
+    <string name="registerForSatelliteModemStateChanged">registerForSatelliteModemStateChanged</string>
+    <string name="unregisterForSatelliteModemStateChanged">unregisterForSatelliteModemStateChanged</string>
+    <string name="showSatelliteModemStateTransition">showSatelliteModemStateTransition</string>
+    <string name="startSatelliteTransmissionUpdates">startSatelliteTransmissionUpdates</string>
+    <string name="stopSatelliteTransmissionUpdates">stopSatelliteTransmissionUpdates</string>
+    <string name="showDatagramSendStateTransition">showDatagramSendStateTransition</string>
+    <string name="showDatagramReceiveStateTransition">showDatagramReceiveStateTransition</string>
+
+    <string name="provisionSatelliteService">provisionSatelliteService</string>
+    <string name="deprovisionSatelliteService">deprovisionSatelliteService</string>
+    <string name="requestIsSatelliteProvisioned">requestIsSatelliteProvisioned</string>
+    <string name="registerForSatelliteProvisionStateChanged">registerForSatelliteProvisionStateChanged</string>
+    <string name="unregisterForSatelliteProvisionStateChanged">unregisterForSatelliteProvisionStateChanged</string>
+    <string name="showCurrentSatelliteProvisionState">showCurrentSatelliteProvisionState</string>
+
+    <string name="multiplePollPendingSatelliteDatagrams">multiplePollPendingSatelliteDatagrams</string>
+    <string name="multipleSendSatelliteDatagram">multipleSendSatelliteDatagram</string>
+    <string name="multipleSendReceiveSatelliteDatagram">multipleSendReceiveSatelliteDatagram</string>
+
+    <string name="sendMessage">sendMessage</string>
+    <string name="receiveMessage">receiveMessage</string>
+
+    <string name="TestSatelliteWrapper">Test Satellite Wrapper</string>
+    <string name="requestNtnSignalStrength">requestNtnSignalStrength</string>
+    <string name="registerForNtnSignalStrengthChanged">registerForNtnSignalStrengthChanged</string>
+    <string name="unregisterForNtnSignalStrengthChanged">unregisterForNtnSignalStrengthChanged</string>
+    <string name="isOnlyNonTerrestrialNetworkSubscription">isOnlyNonTerrestrialNetworkSubscription</string>
+    <string name="registerForSatelliteCapabilitiesChanged">registerForSatelliteCapabilitiesChanged</string>
+    <string name="unregisterForSatelliteCapabilitiesChanged">unregisterForSatelliteCapabilitiesChanged</string>
+
+    <string name="Back">Back</string>
+    <string name="ClearLog">Clear Log</string>
+</resources>
diff --git a/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/Datagram.java b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/Datagram.java
new file mode 100644
index 0000000..97f676f
--- /dev/null
+++ b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/Datagram.java
@@ -0,0 +1,440 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.phone.testapps.satellitetestapp;
+
+import static android.telephony.satellite.SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE;
+import static android.telephony.satellite.SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVE_FAILED;
+import static android.telephony.satellite.SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVE_NONE;
+import static android.telephony.satellite.SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVE_SUCCESS;
+import static android.telephony.satellite.SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVING;
+import static android.telephony.satellite.SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING;
+import static android.telephony.satellite.SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SEND_FAILED;
+import static android.telephony.satellite.SatelliteManager.SATELLITE_DATAGRAM_TRANSFER_STATE_SEND_SUCCESS;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.telephony.satellite.PointingInfo;
+import android.telephony.satellite.SatelliteDatagram;
+import android.telephony.satellite.SatelliteDatagramCallback;
+import android.telephony.satellite.SatelliteManager;
+import android.telephony.satellite.SatelliteStateCallback;
+import android.telephony.satellite.SatelliteTransmissionUpdateCallback;
+import android.telephony.satellite.stub.SatelliteResult;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.TextView;
+
+import java.util.LinkedList;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Consumer;
+
+/**
+ * Activity related to Datagram APIs.
+ */
+public class Datagram extends Activity {
+
+    private static final String TAG = "Datagram";
+    private static final int MAX_NUMBER_OF_STORED_STATES = 3;
+    private int mTransferState;
+    private int mModemState;
+    LinkedList<Integer> mModemStateQueue = new LinkedList<>();
+    LinkedList<Integer> mSendQueue = new LinkedList<>();
+    LinkedList<Integer> mReceiveQueue = new LinkedList<>();
+
+    private SatelliteManager mSatelliteManager;
+    private SatelliteDatagramCallbackTestApp mDatagramCallback;
+    private SatelliteStateCallbackTestApp mStateCallback;
+    private SatelliteTransmissionUpdateCallbackTestApp mCallback;
+    private android.telephony.satellite.stub.SatelliteDatagram mReceivedDatagram;
+
+    private String mShowSatelliteModemStateTransition;
+    private String mShowDatagramSendStateTransition;
+    private String mShowDatagramReceiveStateTransition;
+    private static final long TIMEOUT = 3000;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mSatelliteManager = getSystemService(SatelliteManager.class);
+        mDatagramCallback = new SatelliteDatagramCallbackTestApp();
+        mStateCallback = new SatelliteStateCallbackTestApp();
+        mCallback = new SatelliteTransmissionUpdateCallbackTestApp();
+
+        mReceivedDatagram = new android.telephony.satellite.stub.SatelliteDatagram();
+
+        setContentView(R.layout.activity_Datagram);
+        findViewById(R.id.startSatelliteTransmissionUpdates)
+                .setOnClickListener(this::startSatelliteTransmissionUpdatesApp);
+        findViewById(R.id.stopSatelliteTransmissionUpdates)
+                .setOnClickListener(this::stopSatelliteTransmissionUpdatesApp);
+        findViewById(R.id.pollPendingSatelliteDatagrams)
+                .setOnClickListener(this::pollPendingSatelliteDatagramsApp);
+        findViewById(R.id.sendSatelliteDatagram)
+                .setOnClickListener(this::sendSatelliteDatagramApp);
+        findViewById(R.id.registerForSatelliteDatagram)
+                .setOnClickListener(this::registerForSatelliteDatagramApp);
+        findViewById(R.id.unregisterForSatelliteDatagram)
+                .setOnClickListener(this::unregisterForSatelliteDatagramApp);
+        findViewById(R.id.showDatagramSendStateTransition)
+                .setOnClickListener(this::showDatagramSendStateTransitionApp);
+        findViewById(R.id.showDatagramReceiveStateTransition)
+                .setOnClickListener(this::showDatagramReceiveStateTransitionApp);
+        findViewById(R.id.registerForSatelliteModemStateChanged)
+                .setOnClickListener(this::registerForSatelliteModemStateChangedApp);
+        findViewById(R.id.unregisterForSatelliteModemStateChanged)
+                .setOnClickListener(this::unregisterForSatelliteModemStateChangedApp);
+        findViewById(R.id.showSatelliteModemStateTransition)
+                .setOnClickListener(this::showSatelliteModemStateTransitionApp);
+
+        findViewById(R.id.Back).setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                startActivity(new Intent(Datagram.this, SatelliteTestApp.class));
+            }
+        });
+    }
+
+    protected class SatelliteDatagramCallbackTestApp implements SatelliteDatagramCallback {
+        @Override
+        public void onSatelliteDatagramReceived(long datagramId, SatelliteDatagram datagram,
+                int pendingCount, Consumer<Void> callback) {
+            Log.d(TAG, "onSatelliteDatagramReceived in TestApp: datagramId =" + datagramId
+                    + ", datagram =" + datagram + ", pendingCount=" + pendingCount);
+        }
+    }
+
+    protected class SatelliteStateCallbackTestApp implements SatelliteStateCallback {
+        @Override
+        public void onSatelliteModemStateChanged(int state) {
+            mModemState = state;
+            mModemStateQueue.addLast(state);
+            if (mModemStateQueue.size() > MAX_NUMBER_OF_STORED_STATES) {
+                mModemStateQueue.removeFirst();
+            }
+            mShowSatelliteModemStateTransition = getSatelliteModemStateTransition(mModemStateQueue);
+            Log.d(TAG, "onSatelliteModemStateChanged in TestApp: state=" + mModemState);
+        }
+    }
+    protected class SatelliteTransmissionUpdateCallbackTestApp implements
+            SatelliteTransmissionUpdateCallback {
+        @Override
+        public void onSatellitePositionChanged(PointingInfo pointingInfo) {
+            Log.d(TAG, "onSatellitePositionChanged in TestApp: pointingInfo =" + pointingInfo);
+        }
+
+        @Override
+        public void onSendDatagramStateChanged(int state, int sendPendingCount, int errorCode) {
+            mTransferState = state;
+            mSendQueue.addLast(state);
+            if (mSendQueue.size() > MAX_NUMBER_OF_STORED_STATES) {
+                mSendQueue.removeFirst();
+            }
+            mShowDatagramSendStateTransition = getTransferStateTransition(mSendQueue);
+            Log.d(TAG, "onSendDatagramStateChanged in TestApp: state =" + mTransferState
+                    + ", sendPendingCount =" + sendPendingCount + ", errorCode=" + errorCode);
+        }
+
+        @Override
+        public void onReceiveDatagramStateChanged(
+                int state, int receivePendingCount, int errorCode) {
+            mTransferState = state;
+            mReceiveQueue.addLast(state);
+            if (mReceiveQueue.size() > MAX_NUMBER_OF_STORED_STATES) {
+                mReceiveQueue.removeFirst();
+            }
+            mShowDatagramReceiveStateTransition = getTransferStateTransition(mReceiveQueue);
+            Log.d(TAG, "onReceiveDatagramStateChanged in TestApp: state=" + mTransferState
+                    + ", receivePendingCount=" + receivePendingCount + ", errorCode=" + errorCode);
+        }
+    }
+
+    private void startSatelliteTransmissionUpdatesApp(View view) {
+        TextView textView = findViewById(R.id.text_id);
+        LinkedBlockingQueue<Integer> error = new LinkedBlockingQueue<>(1);
+        mSatelliteManager.requestSatelliteEnabled(true, true, Runnable::run, error::offer);
+        TextView showErrorStatusTextView = findViewById(R.id.showErrorStatus);
+        try {
+            Integer value = error.poll(TIMEOUT, TimeUnit.MILLISECONDS);
+            if (value == null) {
+                showErrorStatusTextView.setText("Timed out to enable the satellite");
+                return;
+            } else if (value != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+                showErrorStatusTextView.setText("Failed to enable satellite, error = "
+                        + SatelliteErrorUtils.mapError(value));
+                return;
+            }
+        } catch (InterruptedException e) {
+            showErrorStatusTextView.setText("Enable SatelliteService exception caught = " + e);
+            return;
+        }
+        error.clear();
+        mSatelliteManager.startSatelliteTransmissionUpdates(Runnable::run, error::offer, mCallback);
+        try {
+            Integer value = error.poll(TIMEOUT, TimeUnit.MILLISECONDS);
+            if (value == null) {
+                textView.setText("Timed out to startSatelliteTransmissionUpdates");
+            } else if (value != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+                textView.setText("Failed to startSatelliteTransmissionUpdates with error = "
+                        + SatelliteErrorUtils.mapError(value));
+            } else {
+                textView.setText("startSatelliteTransmissionUpdates is successful");
+            }
+        } catch (InterruptedException e) {
+            textView.setText("startSatelliteTransmissionUpdates exception caught =" + e);
+        }
+    }
+
+    private void stopSatelliteTransmissionUpdatesApp(View view) {
+        TextView textView = findViewById(R.id.text_id);
+        LinkedBlockingQueue<Integer> error = new LinkedBlockingQueue<>(1);
+        mSatelliteManager.stopSatelliteTransmissionUpdates(mCallback, Runnable::run, error::offer);
+        try {
+            Integer value = error.poll(TIMEOUT, TimeUnit.MILLISECONDS);
+            if (value == null) {
+                textView.setText("Timed out to stopSatelliteTransmissionUpdates");
+            } else if (value != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+                textView.setText("Failed to stopSatelliteTransmissionUpdates with error = "
+                        + SatelliteErrorUtils.mapError(value));
+            } else {
+                textView.setText("stopSatelliteTransmissionUpdates is successful");
+            }
+        } catch (InterruptedException e) {
+            textView.setText("stopSatelliteTransmissionUpdates exception caught =" + e);
+        }
+    }
+    private void pollPendingSatelliteDatagramsApp(View view) {
+        LinkedBlockingQueue<Integer> resultListener = new LinkedBlockingQueue<>(1);
+        TextView showErrorStatusTextView = findViewById(R.id.showErrorStatus);
+        TextView textView = findViewById(R.id.text_id);
+        mSatelliteManager.setDeviceAlignedWithSatellite(true);
+        if (SatelliteTestApp.getTestSatelliteService() != null) {
+            SatelliteTestApp.getTestSatelliteService().sendOnPendingDatagrams();
+        }
+        mSatelliteManager.requestSatelliteEnabled(true, true, Runnable::run, resultListener::offer);
+        try {
+            Integer value = resultListener.poll(TIMEOUT, TimeUnit.MILLISECONDS);
+            if (value == null) {
+                showErrorStatusTextView.setText("Timed out to enable the satellite");
+                return;
+            } else if (value != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+                showErrorStatusTextView.setText("Failed to enable satellite, error = "
+                        + SatelliteErrorUtils.mapError(value));
+                return;
+            }
+            resultListener.clear();
+            Log.d(TAG, "Poll to check queue is cleared = "
+                    + resultListener.poll(TIMEOUT, TimeUnit.MILLISECONDS));
+        } catch (InterruptedException e) {
+            showErrorStatusTextView.setText("Enable SatelliteService exception caught = " + e);
+            return;
+        }
+        mSatelliteManager.pollPendingSatelliteDatagrams(Runnable::run, resultListener::offer);
+        try {
+            Integer value = resultListener.poll(TIMEOUT, TimeUnit.MILLISECONDS);
+            if (value == null) {
+                textView.setText("Timed out for poll message");
+            } else if (value != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+                textView.setText("Failed to pollPendingSatelliteDatagrams with error = "
+                        + SatelliteErrorUtils.mapError(value));
+            } else {
+                textView.setText("pollPendingSatelliteDatagrams is successful");
+            }
+        } catch (InterruptedException e) {
+            textView.setText("pollPendingSatelliteDatagrams exception caught =" + e);
+        }
+    }
+
+    private void sendSatelliteDatagramApp(View view) {
+        TextView textView = findViewById(R.id.text_id);
+        mSatelliteManager.setDeviceAlignedWithSatellite(true);
+        LinkedBlockingQueue<Integer> resultListener = new LinkedBlockingQueue<>(1);
+        String mText = "This is a test datagram message";
+        SatelliteDatagram datagram = new SatelliteDatagram(mText.getBytes());
+        mSatelliteManager.sendSatelliteDatagram(SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE,
+                datagram, true, Runnable::run, resultListener::offer);
+        try {
+            Integer value = resultListener.poll(TIMEOUT, TimeUnit.MILLISECONDS);
+            if (value == null) {
+                textView.setText("Timed out for sendSatelliteDatagram");
+            } else if (value != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+                textView.setText("Failed to sendSatelliteDatagram with error = "
+                        + SatelliteErrorUtils.mapError(value));
+            } else {
+                textView.setText("sendSatelliteDatagram is successful");
+            }
+        } catch (InterruptedException e) {
+            textView.setText("sendSatelliteDatagram exception caught =" + e);
+        }
+    }
+
+    private void registerForSatelliteDatagramApp(View view) {
+        int result = mSatelliteManager.registerForSatelliteDatagram(Runnable::run,
+                mDatagramCallback);
+        TextView textView = findViewById(R.id.text_id);
+        if (result == 0) {
+            textView.setText("registerForSatelliteDatagram is successful");
+        } else {
+            textView.setText("Status for registerForSatelliteDatagram : "
+                    + SatelliteErrorUtils.mapError(result));
+        }
+    }
+
+    private void unregisterForSatelliteDatagramApp(View view) {
+        mSatelliteManager.unregisterForSatelliteDatagram(mDatagramCallback);
+        TextView textView = findViewById(R.id.text_id);
+        textView.setText("unregisterForSatelliteDatagram is successful");
+    }
+
+    private void showDatagramSendStateTransitionApp(View view) {
+        TextView textView = findViewById(R.id.text_id);
+        textView.setText("Last datagram send state transition is : "
+                + mShowDatagramSendStateTransition);
+    }
+
+    private void showDatagramReceiveStateTransitionApp(View view) {
+        TextView textView = findViewById(R.id.text_id);
+        textView.setText("Last datagram receive state transition is : "
+                + mShowDatagramReceiveStateTransition);
+    }
+
+    private void registerForSatelliteModemStateChangedApp(View view) {
+        int result = mSatelliteManager.registerForSatelliteModemStateChanged(Runnable::run,
+                mStateCallback);
+        TextView textView = findViewById(R.id.text_id);
+        if (result == 0) {
+            textView.setText("registerForSatelliteModemStateChanged is successful");
+        } else {
+            textView.setText("Status for registerForSatelliteModemStateChanged : "
+                    + SatelliteErrorUtils.mapError(result));
+        }
+    }
+
+    private void unregisterForSatelliteModemStateChangedApp(View view) {
+        mSatelliteManager.unregisterForSatelliteModemStateChanged(mStateCallback);
+        TextView textView = findViewById(R.id.text_id);
+        textView.setText("unregisterForSatelliteModemStateChanged is successful");
+    }
+
+    private void showSatelliteModemStateTransitionApp(View view) {
+        TextView textView = findViewById(R.id.text_id);
+        textView.setText(
+                    "Last modem transition state is: " + mShowSatelliteModemStateTransition);
+    }
+
+    private String getSatelliteModemStateName(@SatelliteManager.SatelliteModemState int state) {
+        switch (state) {
+            case SatelliteManager.SATELLITE_MODEM_STATE_IDLE:
+                return "IDLE";
+            case SatelliteManager.SATELLITE_MODEM_STATE_LISTENING:
+                return "LISTENING";
+            case SatelliteManager.SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING:
+                return "DATAGRAM_TRANSFERRING";
+            case SatelliteManager.SATELLITE_MODEM_STATE_DATAGRAM_RETRYING:
+                return "DATAGRAM_RETRYING";
+            case SatelliteManager.SATELLITE_MODEM_STATE_OFF:
+                return "OFF";
+            case SatelliteManager.SATELLITE_MODEM_STATE_UNAVAILABLE:
+                return "UNAVAILABLE";
+            default: return "UNKNOWN";
+        }
+    }
+
+    private String getSatelliteModemStateTransition(LinkedList<Integer> states) {
+        StringBuilder sb = new StringBuilder();
+        for (int state : states) {
+            sb.append(getSatelliteModemStateName(state));
+            sb.append("=>");
+        }
+        if (!sb.isEmpty()) {
+            sb.delete(sb.length() - 2, sb.length());
+        }
+        return sb.toString();
+    }
+
+    private String getDatagramTransferStateName(
+            @SatelliteManager.SatelliteDatagramTransferState int state) {
+        switch (state) {
+            case SATELLITE_DATAGRAM_TRANSFER_STATE_IDLE: return "IDLE";
+            case SATELLITE_DATAGRAM_TRANSFER_STATE_SENDING: return "SENDING";
+            case SATELLITE_DATAGRAM_TRANSFER_STATE_SEND_SUCCESS: return "SEND_SUCCESS";
+            case SATELLITE_DATAGRAM_TRANSFER_STATE_SEND_FAILED: return "SEND_FAILED";
+            case SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVING: return "RECEIVING";
+            case SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVE_SUCCESS: return "RECEIVE_SUCCESS";
+            case SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVE_NONE: return "RECEIVE_NONE";
+            case SATELLITE_DATAGRAM_TRANSFER_STATE_RECEIVE_FAILED: return "RECEIVE_FAILED";
+            default: return "UNKNOWN";
+        }
+    }
+
+    private String getTransferStateTransition(LinkedList<Integer> states) {
+        StringBuilder sb = new StringBuilder();
+        for (int state : states) {
+            sb.append(getDatagramTransferStateName(state));
+            sb.append("=>");
+        }
+        if (!sb.isEmpty()) {
+            sb.delete(sb.length() - 2, sb.length());
+        }
+        return sb.toString();
+    }
+
+    @Override
+    protected void onResume() {
+        super.onResume();
+        SharedPreferences sh = getSharedPreferences("TestSatelliteSharedPref", MODE_PRIVATE);
+        String modemStateTransition = sh.getString("modem_state",
+                mShowSatelliteModemStateTransition);
+        String datagramSendStateTransition = sh.getString("datagram_send_state",
+                mShowDatagramSendStateTransition);
+        String datagramReceiveStateTransition = sh.getString("datagram_receive_state",
+                mShowDatagramReceiveStateTransition);
+
+        // Setting the fetched data
+        mShowSatelliteModemStateTransition = modemStateTransition;
+        mShowDatagramSendStateTransition = datagramSendStateTransition;
+        mShowDatagramReceiveStateTransition = datagramReceiveStateTransition;
+    }
+
+    @Override
+    protected void onPause() {
+        super.onPause();
+        SharedPreferences sharedPreferences = getSharedPreferences("TestSatelliteSharedPref",
+                    MODE_PRIVATE);
+        SharedPreferences.Editor myEdit = sharedPreferences.edit();
+
+        myEdit.putString("modem_state", mShowSatelliteModemStateTransition);
+        myEdit.putString("datagram_send_state", mShowDatagramSendStateTransition);
+        myEdit.putString("datagram_receive_state", mShowDatagramReceiveStateTransition);
+        myEdit.apply();
+    }
+
+    protected void onDestroy() {
+        super.onDestroy();
+        SharedPreferences sharedPreferences = getSharedPreferences("TestSatelliteSharedPref",
+                    MODE_PRIVATE);
+        final SharedPreferences.Editor sharedPrefsEditor = sharedPreferences.edit();
+
+        sharedPrefsEditor.remove("modem_state");
+        sharedPrefsEditor.remove("datagram_send_state");
+        sharedPrefsEditor.remove("datagram_receive_state");
+        sharedPrefsEditor.commit();
+    }
+}
diff --git a/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/ILocalSatelliteListener.aidl b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/ILocalSatelliteListener.aidl
new file mode 100644
index 0000000..2c320c8
--- /dev/null
+++ b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/ILocalSatelliteListener.aidl
@@ -0,0 +1,67 @@
+
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.phone.testapps.satellitetestapp;
+
+import android.telephony.satellite.stub.SatelliteDatagram;
+
+/**
+ * {@hide}
+ */
+oneway interface ILocalSatelliteListener {
+    /**
+     * Indicates that the remote service - SatelliteModemInterface - has successfully connected to
+     * the TestSatelliteService.
+     */
+    void onRemoteServiceConnected();
+
+    /**
+     * Indicates that TestSatelliteService has just received the request
+     * startSendingSatellitePointingInfo from Telephony.
+     */
+    void onStartSendingSatellitePointingInfo();
+
+    /**
+     * Indicates that TestSatelliteService has just received the request
+     * stopSendingSatellitePointingInfo from Telephony.
+     */
+    void onStopSendingSatellitePointingInfo();
+
+    /**
+     * Indicates that TestSatelliteService has just received the request
+     * pollPendingSatelliteDatagrams from Telephony.
+     */
+    void onPollPendingSatelliteDatagrams();
+
+    /**
+     * Indicates that TestSatelliteService has just received the request
+     * sendSatelliteDatagram from Telephony.
+     */
+    void onSendSatelliteDatagram(in SatelliteDatagram datagram, in boolean isEmergency);
+
+    /**
+     * Indicates that TestSatelliteService has just received the request
+     * requestSatelliteListeningEnabled from Telephony.
+     */
+    void onSatelliteListeningEnabled(in boolean enabled);
+
+    /**
+     * Indicates that TestSatelliteService has just received the request
+     * enableCellularModemWhileSatelliteModeIsOn from Telephony.
+     */
+    void onEnableCellularModemWhileSatelliteModeIsOn(in boolean enable);
+}
diff --git a/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/MultipleSendReceive.java b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/MultipleSendReceive.java
new file mode 100644
index 0000000..3c0b2fd
--- /dev/null
+++ b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/MultipleSendReceive.java
@@ -0,0 +1,167 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.phone.testapps.satellitetestapp;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.telephony.satellite.SatelliteDatagram;
+import android.telephony.satellite.SatelliteManager;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.TextView;
+
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
+
+/**
+ * Activity related to Send and Receiving of message APIs for satellite.
+ */
+public class MultipleSendReceive extends Activity {
+
+    private static final String TAG = "MultipleSendReceive";
+
+    private SatelliteManager mSatelliteManager;
+    private android.telephony.satellite.stub.SatelliteDatagram mReceivedDatagram;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mSatelliteManager = getSystemService(SatelliteManager.class);
+        mReceivedDatagram = new android.telephony.satellite.stub.SatelliteDatagram();
+
+        setContentView(R.layout.activity_MultipleSendReceive);
+        findViewById(R.id.multiplePollPendingSatelliteDatagrams)
+                .setOnClickListener(this::multiplePollPendingSatelliteDatagramsApp);
+        findViewById(R.id.multipleSendSatelliteDatagram)
+                .setOnClickListener(this::multipleSendSatelliteDatagramApp);
+        findViewById(R.id.multipleSendReceiveSatelliteDatagram)
+                .setOnClickListener(this::multipleSendReceiveSatelliteDatagramApp);
+        findViewById(R.id.Back).setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                startActivity(new Intent(MultipleSendReceive.this, SatelliteTestApp.class));
+            }
+        });
+    }
+
+    private void multiplePollPendingSatelliteDatagramsApp(View view) {
+        mSatelliteManager.setDeviceAlignedWithSatellite(true);
+        SatelliteTestApp.getTestSatelliteService().sendOnPendingDatagrams();
+        SatelliteTestApp.getTestSatelliteService().sendOnSatelliteDatagramReceived(
+                mReceivedDatagram, 4);
+        LinkedBlockingQueue<Integer> resultListener = new LinkedBlockingQueue<>(1);
+        mSatelliteManager.requestSatelliteEnabled(true, true, Runnable::run, resultListener::offer);
+        mSatelliteManager.pollPendingSatelliteDatagrams(Runnable::run, resultListener::offer);
+        SatelliteTestApp.getTestSatelliteService().sendOnSatelliteDatagramReceived(
+                mReceivedDatagram, 3);
+        mSatelliteManager.pollPendingSatelliteDatagrams(Runnable::run, resultListener::offer);
+        SatelliteTestApp.getTestSatelliteService().sendOnSatelliteDatagramReceived(
+                mReceivedDatagram, 2);
+        mSatelliteManager.pollPendingSatelliteDatagrams(Runnable::run, resultListener::offer);
+        SatelliteTestApp.getTestSatelliteService().sendOnSatelliteDatagramReceived(
+                mReceivedDatagram, 1);
+        mSatelliteManager.pollPendingSatelliteDatagrams(Runnable::run, resultListener::offer);
+        SatelliteTestApp.getTestSatelliteService().sendOnSatelliteDatagramReceived(
+                mReceivedDatagram, 0);
+        mSatelliteManager.pollPendingSatelliteDatagrams(Runnable::run, resultListener::offer);
+        try {
+            Integer value = resultListener.poll(1000, TimeUnit.MILLISECONDS);
+            TextView textView = findViewById(R.id.text_id);
+            if (value == 0) {
+                textView.setText("multiplePollPendingSatelliteDatagrams is Successful");
+            } else {
+                textView.setText("Status for multiplePollPendingSatelliteDatagrams : "
+                        + SatelliteErrorUtils.mapError(value));
+            }
+        } catch (InterruptedException e) {
+            Log.e(TAG, "exception caught =" + e);
+        }
+    }
+
+
+    private void multipleSendSatelliteDatagramApp(View view) {
+        mSatelliteManager.setDeviceAlignedWithSatellite(true);
+        LinkedBlockingQueue<Integer> resultListener = new LinkedBlockingQueue<>(1);
+        String mText = "This is a test datagram message";
+        SatelliteDatagram datagram = new SatelliteDatagram(mText.getBytes());
+        mSatelliteManager.sendSatelliteDatagram(SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE,
+                datagram, true, Runnable::run, resultListener::offer);
+        mSatelliteManager.sendSatelliteDatagram(SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE,
+                datagram, true, Runnable::run, resultListener::offer);
+        mSatelliteManager.sendSatelliteDatagram(SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE,
+                datagram, true, Runnable::run, resultListener::offer);
+        mSatelliteManager.sendSatelliteDatagram(SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE,
+                datagram, true, Runnable::run, resultListener::offer);
+        mSatelliteManager.sendSatelliteDatagram(SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE,
+                datagram, true, Runnable::run, resultListener::offer);
+        try {
+            Integer value = resultListener.poll(1000, TimeUnit.MILLISECONDS);
+            TextView textView = findViewById(R.id.text_id);
+            if (value == 0) {
+                textView.setText("multipleSendSatelliteDatagram is Successful");
+            } else {
+                textView.setText("Status for multipleSendSatelliteDatagram : "
+                        + SatelliteErrorUtils.mapError(value));
+            }
+        } catch (InterruptedException e) {
+            Log.e(TAG, "exception caught =" + e);
+        }
+    }
+
+    private void multipleSendReceiveSatelliteDatagramApp(View view) {
+        mSatelliteManager.setDeviceAlignedWithSatellite(true);
+        LinkedBlockingQueue<Integer> resultListener = new LinkedBlockingQueue<>(1);
+        mSatelliteManager.requestSatelliteEnabled(true, true, Runnable::run, resultListener::offer);
+        String mText = "This is a test datagram message";
+        SatelliteDatagram datagram = new SatelliteDatagram(mText.getBytes());
+        mSatelliteManager.sendSatelliteDatagram(SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE,
+                datagram, true, Runnable::run, resultListener::offer);
+        SatelliteTestApp.getTestSatelliteService().sendOnSatelliteDatagramReceived(
+                mReceivedDatagram, 4);
+        mSatelliteManager.pollPendingSatelliteDatagrams(Runnable::run, resultListener::offer);
+        mSatelliteManager.sendSatelliteDatagram(SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE,
+                datagram, true, Runnable::run, resultListener::offer);
+        SatelliteTestApp.getTestSatelliteService().sendOnSatelliteDatagramReceived(
+                mReceivedDatagram, 3);
+        mSatelliteManager.sendSatelliteDatagram(SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE,
+                datagram, true, Runnable::run, resultListener::offer);
+        SatelliteTestApp.getTestSatelliteService().sendOnSatelliteDatagramReceived(
+                mReceivedDatagram, 2);
+        mSatelliteManager.sendSatelliteDatagram(SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE,
+                datagram, true, Runnable::run, resultListener::offer);
+        SatelliteTestApp.getTestSatelliteService().sendOnSatelliteDatagramReceived(
+                mReceivedDatagram, 1);
+        mSatelliteManager.sendSatelliteDatagram(SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE,
+                datagram, true, Runnable::run, resultListener::offer);
+        SatelliteTestApp.getTestSatelliteService().sendOnSatelliteDatagramReceived(
+                mReceivedDatagram, 0);
+        try {
+            Integer value = resultListener.poll(1000, TimeUnit.MILLISECONDS);
+            TextView textView = findViewById(R.id.text_id);
+            if (value == 0) {
+                textView.setText("multipleSendReceiveSatelliteDatagram is Successful");
+            } else {
+                textView.setText("Status for multipleSendReceiveSatelliteDatagram : "
+                        + SatelliteErrorUtils.mapError(value));
+            }
+        } catch (InterruptedException e) {
+            Log.e(TAG, "exception caught =" + e);
+        }
+    }
+}
diff --git a/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/Provisioning.java b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/Provisioning.java
new file mode 100644
index 0000000..940435e
--- /dev/null
+++ b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/Provisioning.java
@@ -0,0 +1,208 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.phone.testapps.satellitetestapp;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.os.CancellationSignal;
+import android.os.OutcomeReceiver;
+import android.telephony.satellite.SatelliteManager;
+import android.telephony.satellite.SatelliteProvisionStateCallback;
+import android.telephony.satellite.stub.SatelliteResult;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.TextView;
+
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * Activity related to Provisioning APIs.
+ */
+public class Provisioning extends Activity {
+
+    private static final String TAG = "Provisioning";
+
+    private boolean mProvisioned = false;
+
+    private SatelliteManager mSatelliteManager;
+    private SatelliteProvisionStateCallbackTestApp mCallback;
+    private static final long TIMEOUT = 3000;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mSatelliteManager = getSystemService(SatelliteManager.class);
+        mCallback = new SatelliteProvisionStateCallbackTestApp();
+
+        setContentView(R.layout.activity_Provisioning);
+        findViewById(R.id.provisionSatelliteService)
+                .setOnClickListener(this::provisionSatelliteServiceApp);
+        findViewById(R.id.deprovisionSatelliteService)
+                .setOnClickListener(this::deprovisionSatelliteServiceApp);
+        findViewById(R.id.requestIsSatelliteProvisioned)
+                .setOnClickListener(this::requestIsSatelliteProvisionedApp);
+        findViewById(R.id.registerForSatelliteProvisionStateChanged)
+                .setOnClickListener(this::registerForSatelliteProvisionStateChangedApp);
+        findViewById(R.id.unregisterForSatelliteProvisionStateChanged)
+                .setOnClickListener(this::unregisterForSatelliteProvisionStateChangedApp);
+        findViewById(R.id.showCurrentSatelliteProvisionState)
+                .setOnClickListener(this::showCurrentSatelliteProvisionStateApp);
+        findViewById(R.id.Back).setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                startActivity(new Intent(Provisioning.this, SatelliteTestApp.class));
+            }
+        });
+    }
+
+    protected class SatelliteProvisionStateCallbackTestApp implements
+            SatelliteProvisionStateCallback {
+        @Override
+        public void onSatelliteProvisionStateChanged(boolean provisioned) {
+            mProvisioned = provisioned;
+            Log.d(TAG, "onSatelliteProvisionStateChanged in SatelliteTestApp: provisioned="
+                    + mProvisioned);
+        }
+    }
+
+    private void provisionSatelliteServiceApp(View view) {
+        TextView textView = findViewById(R.id.text_id);
+        CancellationSignal cancellationSignal = new CancellationSignal();
+        LinkedBlockingQueue<Integer> error = new LinkedBlockingQueue<>(1);
+        String mText = "This is test provision data.";
+        byte[] testProvisionData = mText.getBytes();
+        mSatelliteManager.provisionSatelliteService("SATELLITE_TOKEN", testProvisionData,
+                cancellationSignal, Runnable::run, error::offer);
+        try {
+            Integer value = error.poll(TIMEOUT, TimeUnit.MILLISECONDS);
+            if (value == null) {
+                textView.setText("Timed out to provision the satellite");
+            } else if (value != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+                textView.setText("Failed to provision SatelliteService with error = "
+                        + SatelliteErrorUtils.mapError(value));
+            } else {
+                textView.setText("Successfully provisioned the satellite");
+            }
+        } catch (InterruptedException e) {
+            textView.setText("Provision SatelliteService exception caught =" + e);
+        }
+    }
+
+    private void deprovisionSatelliteServiceApp(View view) {
+        TextView textView = findViewById(R.id.text_id);
+        LinkedBlockingQueue<Integer> error = new LinkedBlockingQueue<>(1);
+        mSatelliteManager.deprovisionSatelliteService("SATELLITE_TOKEN", Runnable::run,
+                error::offer);
+        try {
+            Integer value = error.poll(TIMEOUT, TimeUnit.MILLISECONDS);
+            if (value == null) {
+                textView.setText("Timed out to deprovision the satellite");
+            } else if (value != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+                textView.setText("Failed to deprovision SatelliteService with error = "
+                        + SatelliteErrorUtils.mapError(value));
+            } else {
+                textView.setText("Successfully deprovisioned the satellite");
+            }
+        } catch (InterruptedException e) {
+            textView.setText("Deprovision SatelliteService exception caught =" + e);
+        }
+    }
+
+    private void requestIsSatelliteProvisionedApp(View view) {
+        final AtomicReference<Boolean> enabled = new AtomicReference<>();
+        final AtomicReference<Integer> errorCode = new AtomicReference<>();
+        OutcomeReceiver<Boolean, SatelliteManager.SatelliteException> mReceiver =
+                new OutcomeReceiver<>() {
+            @Override
+            public void onResult(Boolean result) {
+                enabled.set(result);
+                TextView textView = findViewById(R.id.text_id);
+                textView.setText("Status for requestIsSatelliteProvisioned result: "
+                        + enabled.get());
+            }
+
+            @Override
+            public void onError(SatelliteManager.SatelliteException exception) {
+                errorCode.set(exception.getErrorCode());
+                TextView textView = findViewById(R.id.text_id);
+                textView.setText("Status for requestIsSatelliteProvisioned error : "
+                        + SatelliteErrorUtils.mapError(errorCode.get()));
+            }
+        };
+        mSatelliteManager.requestIsSatelliteProvisioned(Runnable::run, mReceiver);
+    }
+
+    private void registerForSatelliteProvisionStateChangedApp(View view) {
+        int result = mSatelliteManager.registerForSatelliteProvisionStateChanged(Runnable::run,
+                mCallback);
+        TextView textView = findViewById(R.id.text_id);
+        textView.setText("Status for registerForSatelliteProvisionStateChanged : "
+                + SatelliteErrorUtils.mapError(result));
+    }
+
+    private void unregisterForSatelliteProvisionStateChangedApp(View view) {
+        mSatelliteManager.unregisterForSatelliteProvisionStateChanged(mCallback);
+        TextView textView = findViewById(R.id.text_id);
+        textView.setText("unregisterForSatelliteProvisionStateChanged is successful");
+    }
+
+    private void showCurrentSatelliteProvisionStateApp(View view) {
+        TextView textView = findViewById(R.id.text_id);
+        textView.setText("Current Provision State is " + mProvisioned);
+    }
+
+    // Fetch the stored data in onResume()
+    // Because this is what will be called when the app opens again
+    @Override
+    protected void onResume() {
+        super.onResume();
+        // Fetching the stored data from the SharedPreference
+        SharedPreferences sh = getSharedPreferences("MySharedPref", MODE_PRIVATE);
+        boolean isProvisioned = sh.getBoolean("provision_state", mProvisioned);
+
+        // Setting the fetched data
+        mProvisioned = isProvisioned;
+    }
+
+    // Store the data in the SharedPreference in the onPause() method
+    // When the user closes the application onPause() will be called and data will be stored
+    @Override
+    protected void onPause() {
+        super.onPause();
+        // Creating a shared pref object with a file name "MySharedPref" in private mode
+        SharedPreferences sharedPreferences = getSharedPreferences("MySharedPref", MODE_PRIVATE);
+        SharedPreferences.Editor myEdit = sharedPreferences.edit();
+
+        // write all the data entered by the user in SharedPreference and apply
+        myEdit.putBoolean("provision_state", mProvisioned);
+        myEdit.apply();
+    }
+
+    protected void onDestroy() {
+        super.onDestroy();
+        SharedPreferences sharedPreferences = getSharedPreferences("MySharedPref", MODE_PRIVATE);
+
+        final SharedPreferences.Editor sharedPrefsEditor = sharedPreferences.edit();
+        sharedPrefsEditor.remove("provision_state");
+        sharedPrefsEditor.commit();
+    }
+}
diff --git a/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/SatelliteControl.java b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/SatelliteControl.java
new file mode 100644
index 0000000..4e339a3
--- /dev/null
+++ b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/SatelliteControl.java
@@ -0,0 +1,274 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.phone.testapps.satellitetestapp;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.OutcomeReceiver;
+import android.telephony.satellite.SatelliteCapabilities;
+import android.telephony.satellite.SatelliteManager;
+import android.telephony.satellite.stub.SatelliteResult;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.TextView;
+
+import java.time.Duration;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
+
+/**
+ * Activity related to SatelliteControl APIs for satellite.
+ */
+public class SatelliteControl extends Activity {
+
+    private static final long TIMEOUT = 3000;
+
+    private SatelliteManager mSatelliteManager;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mSatelliteManager = getSystemService(SatelliteManager.class);
+
+        setContentView(R.layout.activity_SatelliteControl);
+        findViewById(R.id.enableSatellite)
+                .setOnClickListener(this::enableSatelliteApp);
+        findViewById(R.id.disableSatellite)
+                .setOnClickListener(this::disableSatelliteApp);
+        findViewById(R.id.requestIsSatelliteEnabled)
+                .setOnClickListener(this::requestIsSatelliteEnabledApp);
+        findViewById(R.id.requestIsDemoModeEnabled)
+                .setOnClickListener(this::requestIsDemoModeEnabledApp);
+        findViewById(R.id.requestIsSatelliteSupported)
+                .setOnClickListener(this::requestIsSatelliteSupportedApp);
+        findViewById(R.id.requestSatelliteCapabilities)
+                .setOnClickListener(this::requestSatelliteCapabilitiesApp);
+        findViewById(R.id.requestIsSatelliteCommunicationAllowedForCurrentLocation)
+                .setOnClickListener(
+                this::requestIsSatelliteCommunicationAllowedForCurrentLocationApp);
+        findViewById(R.id.requestTimeForNextSatelliteVisibility)
+                .setOnClickListener(this::requestTimeForNextSatelliteVisibilityApp);
+        findViewById(R.id.Back).setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                startActivity(new Intent(SatelliteControl.this, SatelliteTestApp.class));
+            }
+        });
+    }
+
+    private void enableSatelliteApp(View view) {
+        LinkedBlockingQueue<Integer> error = new LinkedBlockingQueue<>(1);
+        mSatelliteManager.requestSatelliteEnabled(true, true, Runnable::run, error::offer);
+        TextView textView = findViewById(R.id.text_id);
+        try {
+            Integer value = error.poll(TIMEOUT, TimeUnit.MILLISECONDS);
+            if (value == null) {
+                textView.setText("Timed out to enable the satellite");
+            } else if (value != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+                textView.setText("Failed to enable the satellite, error ="
+                        + SatelliteErrorUtils.mapError(value));
+            } else {
+                textView.setText("Successfully enabled the satellite");
+            }
+        } catch (InterruptedException e) {
+            textView.setText("Enable SatelliteService exception caught =" + e);
+        }
+    }
+
+    private void disableSatelliteApp(View view) {
+        LinkedBlockingQueue<Integer> error = new LinkedBlockingQueue<>(1);
+        mSatelliteManager.requestSatelliteEnabled(false, true, Runnable::run, error::offer);
+        TextView textView = findViewById(R.id.text_id);
+        try {
+            Integer value = error.poll(TIMEOUT, TimeUnit.MILLISECONDS);
+            if (value == null) {
+                textView.setText("Timed out to disable the satellite");
+            } else if (value != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+                textView.setText("Failed to disable the satellite, error ="
+                        + SatelliteErrorUtils.mapError(value));
+            } else {
+                textView.setText("Successfully disabled the satellite");
+            }
+        } catch (InterruptedException e) {
+            textView.setText("Disable SatelliteService exception caught =" + e);
+        }
+    }
+
+    private void requestIsSatelliteEnabledApp(View view) {
+        final AtomicReference<Boolean> enabled = new AtomicReference<>();
+        final AtomicReference<Integer> errorCode = new AtomicReference<>();
+        OutcomeReceiver<Boolean, SatelliteManager.SatelliteException> receiver =
+                new OutcomeReceiver<>() {
+            @Override
+            public void onResult(Boolean result) {
+                enabled.set(result);
+                TextView textView = findViewById(R.id.text_id);
+                if (enabled.get()) {
+                    textView.setText("requestIsSatelliteEnabled is true");
+                } else {
+                    textView.setText("Status for requestIsSatelliteEnabled result : "
+                            + enabled.get());
+                }
+            }
+
+            @Override
+            public void onError(SatelliteManager.SatelliteException exception) {
+                errorCode.set(exception.getErrorCode());
+                TextView textView = findViewById(R.id.text_id);
+                textView.setText("Status for requestIsSatelliteEnabled error : "
+                        + SatelliteErrorUtils.mapError(errorCode.get()));
+            }
+        };
+        mSatelliteManager.requestIsSatelliteEnabled(Runnable::run, receiver);
+    }
+
+    private void requestIsDemoModeEnabledApp(View view) {
+        final AtomicReference<Boolean> enabled = new AtomicReference<>();
+        final AtomicReference<Integer> errorCode = new AtomicReference<>();
+        OutcomeReceiver<Boolean, SatelliteManager.SatelliteException> receiver =
+                new OutcomeReceiver<>() {
+            @Override
+            public void onResult(Boolean result) {
+                enabled.set(result);
+                TextView textView = findViewById(R.id.text_id);
+                if (enabled.get()) {
+                    textView.setText("requestIsDemoModeEnabled is true");
+                } else {
+                    textView.setText("Status for requestIsDemoModeEnabled result : "
+                            + enabled.get());
+                }
+            }
+
+            @Override
+            public void onError(SatelliteManager.SatelliteException exception) {
+                errorCode.set(exception.getErrorCode());
+                TextView textView = findViewById(R.id.text_id);
+                textView.setText("Status for requestIsDemoModeEnabled error : "
+                        + SatelliteErrorUtils.mapError(errorCode.get()));
+            }
+        };
+        mSatelliteManager.requestIsDemoModeEnabled(Runnable::run, receiver);
+    }
+
+    private void requestIsSatelliteSupportedApp(View view) {
+        final AtomicReference<Boolean> enabled = new AtomicReference<>();
+        final AtomicReference<Integer> errorCode = new AtomicReference<>();
+        OutcomeReceiver<Boolean, SatelliteManager.SatelliteException> receiver =
+                new OutcomeReceiver<>() {
+            @Override
+            public void onResult(Boolean result) {
+                enabled.set(result);
+                TextView textView = findViewById(R.id.text_id);
+                if (enabled.get()) {
+                    textView.setText("requestIsSatelliteSupported is true");
+                } else {
+                    textView.setText("Status for requestIsSatelliteSupported result : "
+                            + enabled.get());
+                }
+            }
+
+            @Override
+            public void onError(SatelliteManager.SatelliteException exception) {
+                errorCode.set(exception.getErrorCode());
+                TextView textView = findViewById(R.id.text_id);
+                textView.setText("Status for requestIsSatelliteSupported error : "
+                        + SatelliteErrorUtils.mapError(errorCode.get()));
+            }
+        };
+        mSatelliteManager.requestIsSatelliteSupported(Runnable::run, receiver);
+    }
+
+    private void requestSatelliteCapabilitiesApp(View view) {
+        final AtomicReference<SatelliteCapabilities> capabilities = new AtomicReference<>();
+        final AtomicReference<Integer> errorCode = new AtomicReference<>();
+        OutcomeReceiver<SatelliteCapabilities, SatelliteManager.SatelliteException> receiver =
+                new OutcomeReceiver<>() {
+            @Override
+            public void onResult(SatelliteCapabilities result) {
+                capabilities.set(result);
+                TextView textView = findViewById(R.id.text_id);
+                textView.setText("Status for requestSatelliteCapabilities result: "
+                        + capabilities.get());
+            }
+
+            @Override
+            public void onError(SatelliteManager.SatelliteException exception) {
+                errorCode.set(exception.getErrorCode());
+                TextView textView = findViewById(R.id.text_id);
+                textView.setText("Status for requestSatelliteCapabilities error : "
+                        + SatelliteErrorUtils.mapError(errorCode.get()));
+            }
+        };
+        mSatelliteManager.requestSatelliteCapabilities(Runnable::run, receiver);
+    }
+
+    private void requestIsSatelliteCommunicationAllowedForCurrentLocationApp(View view) {
+        final AtomicReference<Boolean> enabled = new AtomicReference<>();
+        final AtomicReference<Integer> errorCode = new AtomicReference<>();
+        String display = "requestIsSatelliteCommunicationAllowedForCurrentLocation";
+        OutcomeReceiver<Boolean, SatelliteManager.SatelliteException> receiver =
+                new OutcomeReceiver<>() {
+            @Override
+            public void onResult(Boolean result) {
+                enabled.set(result);
+                TextView textView = findViewById(R.id.text_id);
+                if (enabled.get()) {
+                    textView.setText(display + "is true");
+                } else {
+                    textView.setText("Status for" + display + "result: " + enabled.get());
+                }
+
+            }
+
+            @Override
+            public void onError(SatelliteManager.SatelliteException exception) {
+                errorCode.set(exception.getErrorCode());
+                TextView textView = findViewById(R.id.text_id);
+                textView.setText("Status for"  + display + "error: "
+                        + SatelliteErrorUtils.mapError(errorCode.get()));
+            }
+        };
+        mSatelliteManager.requestIsSatelliteCommunicationAllowedForCurrentLocation(Runnable::run,
+                receiver);
+    }
+
+    private void requestTimeForNextSatelliteVisibilityApp(View view) {
+        final AtomicReference<Duration> nextVisibilityDuration = new AtomicReference<>();
+        final AtomicReference<Integer> errorCode = new AtomicReference<>();
+        OutcomeReceiver<Duration, SatelliteManager.SatelliteException> receiver =
+                new OutcomeReceiver<>() {
+            @Override
+            public void onResult(Duration result) {
+                nextVisibilityDuration.set(result);
+                TextView textView = findViewById(R.id.text_id);
+                textView.setText("Status for requestTimeForNextSatelliteVisibility result : "
+                        + result.getSeconds());
+            }
+
+            @Override
+            public void onError(SatelliteManager.SatelliteException exception) {
+                errorCode.set(exception.getErrorCode());
+                TextView textView = findViewById(R.id.text_id);
+                textView.setText("Status for requestTimeForNextSatelliteVisibility error : "
+                        + SatelliteErrorUtils.mapError(errorCode.get()));
+            }
+        };
+        mSatelliteManager.requestTimeForNextSatelliteVisibility(Runnable::run, receiver);
+    }
+}
diff --git a/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/SatelliteErrorUtils.java b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/SatelliteErrorUtils.java
new file mode 100644
index 0000000..ffdabdf
--- /dev/null
+++ b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/SatelliteErrorUtils.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.phone.testapps.satellitetestapp;
+
+import android.telephony.satellite.stub.SatelliteResult;
+import android.util.Log;
+
+/**
+ * Utils class for satellite error to display as string in SatelliteTestApp UI.
+ */
+public class SatelliteErrorUtils {
+    private static final String TAG = "SatelliteErrorUtils";
+
+   /**
+     * @param error int from the satellite manager.
+     * @return The converted SatelliteError for the testapp, result of the operation.
+     */
+    public static String mapError(int error) {
+        switch (error) {
+            case SatelliteResult.SATELLITE_RESULT_SUCCESS:
+                return "SATELLITE_RESULT_SUCCESS";
+            case SatelliteResult.SATELLITE_RESULT_ERROR:
+                return "SATELLITE_RESULT_ERROR";
+            case SatelliteResult.SATELLITE_RESULT_SERVER_ERROR:
+                return "SATELLITE_RESULT_SERVER_ERROR";
+            case SatelliteResult.SATELLITE_RESULT_SERVICE_ERROR:
+                return "SATELLITE_RESULT_SERVICE_ERROR";
+            case SatelliteResult.SATELLITE_RESULT_MODEM_ERROR:
+                return "SATELLITE_RESULT_MODEM_ERROR";
+            case SatelliteResult.SATELLITE_RESULT_NETWORK_ERROR:
+                return "SATELLITE_RESULT_NETWORK_ERROR";
+            case SatelliteResult.SATELLITE_RESULT_INVALID_MODEM_STATE:
+                return "SATELLITE_RESULT_INVALID_MODEM_STATE";
+            case SatelliteResult.SATELLITE_RESULT_INVALID_ARGUMENTS:
+                return "SATELLITE_RESULT_INVALID_ARGUMENTS";
+            case SatelliteResult.SATELLITE_RESULT_REQUEST_FAILED:
+                return "SATELLITE_RESULT_REQUEST_FAILED";
+            case SatelliteResult.SATELLITE_RESULT_RADIO_NOT_AVAILABLE:
+                return "SATELLITE_RESULT_RADIO_NOT_AVAILABLE";
+            case SatelliteResult.SATELLITE_RESULT_REQUEST_NOT_SUPPORTED:
+                return "SATELLITE_RESULT_REQUEST_NOT_SUPPORTED";
+            case SatelliteResult.SATELLITE_RESULT_NO_RESOURCES:
+                return "SATELLITE_RESULT_NO_RESOURCES";
+            case SatelliteResult.SATELLITE_RESULT_SERVICE_NOT_PROVISIONED:
+                return "SATELLITE_RESULT_SERVICE_NOT_PROVISIONED";
+            case SatelliteResult.SATELLITE_RESULT_SERVICE_PROVISION_IN_PROGRESS:
+                return "SATELLITE_RESULT_SERVICE_PROVISION_IN_PROGRESS";
+            case SatelliteResult.SATELLITE_RESULT_REQUEST_ABORTED:
+                return "SATELLITE_RESULT_REQUEST_ABORTED";
+            case SatelliteResult.SATELLITE_RESULT_ACCESS_BARRED:
+                return "SATELLITE_RESULT_ACCESS_BARRED";
+            case SatelliteResult.SATELLITE_RESULT_NETWORK_TIMEOUT:
+                return "SATELLITE_RESULT_NETWORK_TIMEOUT";
+            case SatelliteResult.SATELLITE_RESULT_NOT_REACHABLE:
+                return "SATELLITE_RESULT_NOT_REACHABLE";
+            case SatelliteResult.SATELLITE_RESULT_NOT_AUTHORIZED:
+                return "SATELLITE_RESULT_NOT_AUTHORIZED";
+        }
+        Log.d(TAG, "Received invalid satellite service error: " + error);
+        return "SATELLITE_RESULT_SERVICE_ERROR";
+    }
+}
diff --git a/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/SatelliteTestApp.java b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/SatelliteTestApp.java
new file mode 100644
index 0000000..ced9a06
--- /dev/null
+++ b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/SatelliteTestApp.java
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.phone.testapps.satellitetestapp;
+
+import android.app.Activity;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.ServiceConnection;
+import android.os.Bundle;
+import android.os.IBinder;
+import android.telephony.satellite.stub.SatelliteDatagram;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnClickListener;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * SatelliteTestApp main activity to navigate to other APIs related to satellite.
+ */
+public class SatelliteTestApp extends Activity {
+
+    private static final String TAG = "SatelliteTestApp";
+    public static TestSatelliteService sSatelliteService;
+    private final Object mSendDatagramLock = new Object();
+
+    private TestSatelliteServiceConnection mSatelliteServiceConn;
+    private List<SatelliteDatagram> mSentSatelliteDatagrams = new ArrayList<>();
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+
+        if (mSatelliteServiceConn == null) {
+            mSatelliteServiceConn = new TestSatelliteServiceConnection();
+            getBaseContext().bindService(new Intent(getBaseContext(),
+                    TestSatelliteService.class), mSatelliteServiceConn, Context.BIND_AUTO_CREATE);
+        }
+
+        setContentView(R.layout.activity_SatelliteTestApp);
+        findViewById(R.id.SatelliteControl).setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                Intent intent = new Intent(SatelliteTestApp.this, SatelliteControl.class);
+                startActivity(intent);
+            }
+        });
+        findViewById(R.id.Datagram).setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                Intent intent = new Intent(SatelliteTestApp.this, Datagram.class);
+                startActivity(intent);
+            }
+        });
+        findViewById(R.id.Provisioning).setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                Intent intent = new Intent(SatelliteTestApp.this, Provisioning.class);
+                startActivity(intent);
+            }
+        });
+        findViewById(R.id.MultipleSendReceive).setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                Intent intent = new Intent(SatelliteTestApp.this, MultipleSendReceive.class);
+                startActivity(intent);
+            }
+        });
+        findViewById(R.id.SendReceive).setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                Intent intent = new Intent(SatelliteTestApp.this, SendReceive.class);
+                startActivity(intent);
+            }
+        });
+        findViewById(R.id.TestSatelliteWrapper).setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                Intent intent = new Intent(SatelliteTestApp.this, TestSatelliteWrapper.class);
+                startActivity(intent);
+            }
+        });
+    }
+
+    private final ILocalSatelliteListener mSatelliteListener =
+            new ILocalSatelliteListener.Stub() {
+                @Override
+                public void onRemoteServiceConnected() {
+                    Log.d(TAG, "onRemoteServiceConnected");
+                }
+
+                @Override
+                public void onStartSendingSatellitePointingInfo() {
+                    Log.d(TAG, "onStartSendingSatellitePointingInfo");
+                }
+
+                @Override
+                public void onStopSendingSatellitePointingInfo() {
+                    Log.d(TAG, "onStopSendingSatellitePointingInfo");
+                }
+
+                @Override
+                public void onPollPendingSatelliteDatagrams() {
+                    Log.d(TAG, "onPollPendingSatelliteDatagrams");
+                }
+
+                @Override
+                public void onSendSatelliteDatagram(
+                        SatelliteDatagram datagram, boolean isEmergency) {
+                    Log.d(TAG, "onSendSatelliteDatagram");
+                    synchronized (mSendDatagramLock) {
+                        mSentSatelliteDatagrams.add(datagram);
+                    }
+                }
+
+                @Override
+                public void onSatelliteListeningEnabled(boolean enable) {
+                    Log.d(TAG, "onSatelliteListeningEnabled");
+                }
+
+                @Override
+                public void onEnableCellularModemWhileSatelliteModeIsOn(boolean enable) {
+                    Log.d(TAG, "onEnableCellularModemWhileSatelliteModeIsOn");
+                }
+            };
+
+    private class TestSatelliteServiceConnection implements ServiceConnection {
+        @Override
+        public void onServiceConnected(ComponentName name, IBinder service) {
+            Log.d(TAG, "onServiceConnected in SatelliteTestApp");
+            sSatelliteService = ((TestSatelliteService.LocalBinder) service).getService();
+            sSatelliteService.setLocalSatelliteListener(mSatelliteListener);
+        }
+
+        @Override
+        public void onServiceDisconnected(ComponentName name) {
+            Log.d(TAG, "onServiceDisconnected in SatelliteTestApp");
+            sSatelliteService = null;
+        }
+    }
+
+    public static TestSatelliteService getTestSatelliteService() {
+        return sSatelliteService;
+    }
+}
diff --git a/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/SendReceive.java b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/SendReceive.java
new file mode 100644
index 0000000..a64aa5d
--- /dev/null
+++ b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/SendReceive.java
@@ -0,0 +1,283 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.phone.testapps.satellitetestapp;
+
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.CancellationSignal;
+import android.os.OutcomeReceiver;
+import android.telephony.satellite.PointingInfo;
+import android.telephony.satellite.SatelliteCapabilities;
+import android.telephony.satellite.SatelliteDatagram;
+import android.telephony.satellite.SatelliteDatagramCallback;
+import android.telephony.satellite.SatelliteManager;
+import android.telephony.satellite.SatelliteTransmissionUpdateCallback;
+import android.telephony.satellite.stub.SatelliteResult;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.EditText;
+import android.widget.TextView;
+
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Consumer;
+
+/**
+ * Activity related to Send and Receiving of message APIs for satellite.
+ */
+public class SendReceive extends Activity {
+
+    private static final String TAG = "SendReceive";
+
+    private SatelliteManager mSatelliteManager;
+    private SendReceive.SatelliteDatagramCallbackTestApp mCallback;
+
+    private PointingInfo mPointingInfo;
+    private String mMessageInput = "";
+    private String mMessageOutput = "";
+    private static final long TIMEOUT = 3000;
+
+    private EditText mEnterMessage;
+    private TextView mMessageStatusTextView;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mSatelliteManager = getSystemService(SatelliteManager.class);
+        mCallback = new SendReceive.SatelliteDatagramCallbackTestApp();
+
+        setContentView(R.layout.activity_SendReceive);
+        findViewById(R.id.sendMessage).setOnClickListener(this::sendStatusApp);
+        findViewById(R.id.receiveMessage).setOnClickListener(this::receiveStatusApp);
+        mEnterMessage = (EditText) findViewById(R.id.enterText);
+        mMessageStatusTextView = findViewById(R.id.messageStatus);
+        findViewById(R.id.Back).setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                startActivity(new Intent(SendReceive.this, SatelliteTestApp.class));
+            }
+        });
+    }
+
+    protected class SatelliteDatagramCallbackTestApp implements SatelliteDatagramCallback {
+        @Override
+        public void onSatelliteDatagramReceived(long datagramId, SatelliteDatagram datagram,
+                int pendingCount, Consumer<Void> callback) {
+            Log.d(TAG, "onSatelliteDatagramReceived in TestApp: datagramId =" + datagramId
+                    + ", datagram =" + datagram + ", pendingCount=" + pendingCount);
+            mMessageStatusTextView.setText("Last received satellite message is = "
+                    + new String(datagram.getSatelliteDatagram()));
+        }
+    }
+
+    protected class SatelliteTransmissionUpdateCallbackTestApp implements
+            SatelliteTransmissionUpdateCallback {
+        @Override
+        public void onSatellitePositionChanged(PointingInfo pointingInfo) {
+            mPointingInfo = pointingInfo;
+            Log.d(TAG, "onSatellitePositionChanged in TestApp for sendReceive: pointingInfo = "
+                    + mPointingInfo);
+            TextView satellitePositionTextView = findViewById(R.id.satellitePosition);
+            satellitePositionTextView.setText("Successfully received the satellite position : "
+                    + mPointingInfo);
+        }
+
+        @Override
+        public void onSendDatagramStateChanged(int state, int sendPendingCount, int errorCode) {
+            Log.d(TAG, "onSendDatagramStateChanged in TestApp for sendReceive: state = "
+                    + state + ", sendPendingCount =" + sendPendingCount + ", errorCode="
+                    + errorCode);
+        }
+
+        @Override
+        public void onReceiveDatagramStateChanged(
+                int state, int receivePendingCount, int errorCode) {
+            Log.d(TAG, "onReceiveDatagramStateChanged in TestApp for sendReceive: state = "
+                    + state + ", " + "receivePendingCount=" + receivePendingCount + ", errorCode="
+                    + errorCode);
+        }
+    }
+
+    private void sendStatusApp(View view) {
+        LinkedBlockingQueue<Integer> error = new LinkedBlockingQueue<>(1);
+        mMessageInput = mEnterMessage.getText().toString();
+        mMessageOutput = mEnterMessage.getText().toString();
+        byte[] testProvisionData = mMessageInput.getBytes();
+        setupForTransferringDatagram(testProvisionData);
+
+        SatelliteDatagram datagram = new SatelliteDatagram(mMessageInput.getBytes());
+        //Sending Message
+        mSatelliteManager.sendSatelliteDatagram(SatelliteManager.DATAGRAM_TYPE_SOS_MESSAGE,
+                datagram, true, Runnable::run, error::offer);
+        TextView messageStatusTextView = findViewById(R.id.messageStatus);
+        try {
+            Integer value = error.poll(TIMEOUT, TimeUnit.MILLISECONDS);
+            if (value == null) {
+                messageStatusTextView.setText("Timed out to send the message");
+            } else if (value != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+                messageStatusTextView.setText("Failed to send the message, error ="
+                        + SatelliteErrorUtils.mapError(value));
+            } else {
+                messageStatusTextView.setText("Successfully sent the message = "
+                        + mEnterMessage.getText().toString());
+            }
+        } catch (InterruptedException e) {
+            messageStatusTextView.setText("sendSatelliteDatagram exception caught = " + e);
+        }
+    }
+
+    private void receiveStatusApp(View view) {
+        LinkedBlockingQueue<Integer> resultListener = new LinkedBlockingQueue<>(1);
+        byte[] testProvisionData = mMessageOutput.getBytes();
+        setupForTransferringDatagram(testProvisionData);
+
+        int result = mSatelliteManager.registerForSatelliteDatagram(Runnable::run, mCallback);
+        TextView showErrorStatusTextView = findViewById(R.id.showErrorStatus);
+        if (result != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+            showErrorStatusTextView.setText("Status for registerForSatelliteDatagram : "
+                    + SatelliteErrorUtils.mapError(result));
+        }
+        if (SatelliteTestApp.getTestSatelliteService() != null) {
+            SatelliteTestApp.getTestSatelliteService().sendOnPendingDatagrams();
+        }
+        mSatelliteManager.requestSatelliteEnabled(true, true, Runnable::run, resultListener::offer);
+        try {
+            Integer value = resultListener.poll(TIMEOUT, TimeUnit.MILLISECONDS);
+            if (value == null) {
+                showErrorStatusTextView.setText("Timed out to enable the satellite");
+            } else if (value != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+                showErrorStatusTextView.setText("Failed to enable satellite, error = "
+                        + SatelliteErrorUtils.mapError(value));
+                return;
+            }
+            resultListener.clear();
+        } catch (InterruptedException e) {
+            showErrorStatusTextView.setText("Enable SatelliteService exception caught = " + e);
+            return;
+        }
+
+        mSatelliteManager.pollPendingSatelliteDatagrams(Runnable::run, resultListener::offer);
+        try {
+            Integer value = resultListener.poll(TIMEOUT, TimeUnit.MILLISECONDS);
+            if (value == null) {
+                mMessageStatusTextView.setText("Timed out to poll pending messages");
+            } else if (value != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+                mMessageStatusTextView.setText("Failed to poll pending messages, error = "
+                        + SatelliteErrorUtils.mapError(value));
+            }  else {
+                mMessageStatusTextView.setText("Successfully polled pending messages");
+            }
+        } catch (InterruptedException e) {
+            mMessageStatusTextView.setText("pollPendingSatelliteDatagrams exception caught = " + e);
+        }
+    }
+
+    private void setupForTransferringDatagram(byte[] provisionData) {
+        TextView showErrorStatusTextView = findViewById(R.id.showErrorStatus);
+        CancellationSignal cancellationSignal = new CancellationSignal();
+        LinkedBlockingQueue<Integer> error = new LinkedBlockingQueue<>(1);
+
+        //Provisioning
+        mSatelliteManager.provisionSatelliteService("SATELLITE_TOKEN", provisionData,
+                cancellationSignal, Runnable::run, error::offer);
+        try {
+            Integer value = error.poll(TIMEOUT, TimeUnit.MILLISECONDS);
+            if (value == null) {
+                showErrorStatusTextView.setText("Timed out to provision the satellite");
+            } else if (value != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+                showErrorStatusTextView.setText("Failed to provision satellite, error = "
+                        + SatelliteErrorUtils.mapError(value));
+                return;
+            }
+        } catch (InterruptedException e) {
+            showErrorStatusTextView.setText("Provision SatelliteService exception caught = " + e);
+            return;
+        }
+        error.clear();
+
+        //Static position of device
+        final AtomicReference<SatelliteCapabilities> capabilities = new AtomicReference<>();
+        final AtomicReference<Integer> errorCode = new AtomicReference<>();
+        OutcomeReceiver<SatelliteCapabilities, SatelliteManager.SatelliteException> receiver =
+                new OutcomeReceiver<>() {
+                    @Override
+                    public void onResult(SatelliteCapabilities result) {
+                        capabilities.set(result);
+                        TextView devicePositionTextView = findViewById(R.id.devicePosition);
+                        devicePositionTextView.setText("Successfully receive the device position : "
+                                + capabilities.get().getAntennaPositionMap());
+                    }
+
+                    @Override
+                    public void onError(SatelliteManager.SatelliteException exception) {
+                        errorCode.set(exception.getErrorCode());
+                        TextView devicePositionTextView = findViewById(R.id.devicePosition);
+                        devicePositionTextView.setText("Unable to fetch device position error is : "
+                                + SatelliteErrorUtils.mapError(errorCode.get()));
+                    }
+                };
+        mSatelliteManager.requestSatelliteCapabilities(Runnable::run, receiver);
+
+        //Satellite Position
+        SatelliteTransmissionUpdateCallbackTestApp callback =
+                new SatelliteTransmissionUpdateCallbackTestApp();
+        mSatelliteManager.requestSatelliteEnabled(true, true, Runnable::run, error::offer);
+        try {
+            Integer value = error.poll(TIMEOUT, TimeUnit.MILLISECONDS);
+            if (value == null) {
+                showErrorStatusTextView.setText("Timed out to enable the satellite");
+            } else if (value != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+                showErrorStatusTextView.setText("Failed to enable satellite, error = "
+                        + SatelliteErrorUtils.mapError(value));
+                return;
+            }
+        } catch (InterruptedException e) {
+            showErrorStatusTextView.setText("Enable SatelliteService exception caught = " + e);
+            return;
+        }
+        error.clear();
+
+        mSatelliteManager.startSatelliteTransmissionUpdates(Runnable::run, error::offer, callback);
+        // Position update
+        android.telephony.satellite.stub.PointingInfo pointingInfo =
+                new android.telephony.satellite.stub.PointingInfo();
+        pointingInfo.satelliteAzimuth = 50.5f;
+        pointingInfo.satelliteElevation = 20.36f;
+        if (SatelliteTestApp.getTestSatelliteService() != null) {
+            SatelliteTestApp.getTestSatelliteService().sendOnSatellitePositionChanged(pointingInfo);
+        }
+        TextView satellitePositionTextView = findViewById(R.id.satellitePosition);
+        try {
+            Integer value = error.poll(TIMEOUT, TimeUnit.MILLISECONDS);
+            if (value == null) {
+                satellitePositionTextView.setText("Failed to register for satellite transmission"
+                        + "updates");
+            } else if (value != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+                satellitePositionTextView.setText("Failed to register for satellite transmission "
+                        + "updates, error = " + SatelliteErrorUtils.mapError(value));
+            }
+        } catch (InterruptedException e) {
+            satellitePositionTextView.setText("startSatelliteTransmissionUpdates exception caught ="
+                        + e);
+        }
+        //Device is aligned with the satellite for demo mode
+        mSatelliteManager.setDeviceAlignedWithSatellite(true);
+    }
+}
diff --git a/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/TestSatelliteService.java b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/TestSatelliteService.java
new file mode 100644
index 0000000..929a2e5
--- /dev/null
+++ b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/TestSatelliteService.java
@@ -0,0 +1,528 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.phone.testapps.satellitetestapp;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.Intent;
+import android.os.Binder;
+import android.os.IBinder;
+import android.telephony.IBooleanConsumer;
+import android.telephony.IIntegerConsumer;
+import android.telephony.satellite.AntennaDirection;
+import android.telephony.satellite.AntennaPosition;
+import android.telephony.satellite.SatelliteManager;
+import android.telephony.satellite.stub.ISatelliteCapabilitiesConsumer;
+import android.telephony.satellite.stub.ISatelliteListener;
+import android.telephony.satellite.stub.NTRadioTechnology;
+import android.telephony.satellite.stub.PointingInfo;
+import android.telephony.satellite.stub.SatelliteCapabilities;
+import android.telephony.satellite.stub.SatelliteDatagram;
+import android.telephony.satellite.stub.SatelliteImplBase;
+import android.telephony.satellite.stub.SatelliteModemState;
+import android.telephony.satellite.stub.SatelliteResult;
+import android.telephony.satellite.stub.SatelliteService;
+import android.util.Log;
+
+import com.android.internal.util.FunctionalUtils;
+import com.android.telephony.Rlog;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.concurrent.Executor;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+/**
+ * Test service for Satellite to verify end to end flow via testapp.
+ */
+public class TestSatelliteService extends SatelliteImplBase {
+    private static final String TAG = "TestSatelliteService";
+
+    // Hardcoded values below
+    private static final int SATELLITE_ALWAYS_VISIBLE = 0;
+    /** SatelliteCapabilities constant indicating that the radio technology is proprietary. */
+    private static final int[] SUPPORTED_RADIO_TECHNOLOGIES =
+            new int[]{NTRadioTechnology.PROPRIETARY};
+    /** SatelliteCapabilities constant indicating that pointing to satellite is required. */
+    private static final boolean POINTING_TO_SATELLITE_REQUIRED = true;
+    /** SatelliteCapabilities constant indicating the maximum number of characters per datagram. */
+    private static final int MAX_BYTES_PER_DATAGRAM = 339;
+    /** SatelliteCapabilities constant keys which are used to fill mAntennaPositionMap. */
+    private static final int[] ANTENNA_POSITION_KEYS = new int[]{
+            SatelliteManager.DISPLAY_MODE_OPENED, SatelliteManager.DISPLAY_MODE_CLOSED};
+    /** SatelliteCapabilities constant values which are used to fill mAntennaPositionMap. */
+    private static final AntennaPosition[] ANTENNA_POSITION_VALUES = new AntennaPosition[] {
+            new AntennaPosition(new AntennaDirection(1, 1, 1),
+                    SatelliteManager.DEVICE_HOLD_POSITION_PORTRAIT),
+            new AntennaPosition(new AntennaDirection(2, 2, 2),
+                    SatelliteManager.DEVICE_HOLD_POSITION_LANDSCAPE_LEFT)
+    };
+
+    @NonNull
+    private final Map<IBinder, ISatelliteListener> mRemoteListeners = new HashMap<>();
+    @Nullable private ILocalSatelliteListener mLocalListener;
+    private final LocalBinder mBinder = new LocalBinder();
+    @SatelliteResult
+    private int mErrorCode = SatelliteResult.SATELLITE_RESULT_SUCCESS;
+    private final AtomicBoolean mShouldNotifyRemoteServiceConnected =
+            new AtomicBoolean(false);
+
+    // For local access of this Service.
+    class LocalBinder extends Binder {
+        TestSatelliteService getService() {
+            return TestSatelliteService.this;
+        }
+    }
+
+    private boolean mIsCommunicationAllowedInLocation;
+    private boolean mIsEnabled;
+    private boolean mIsProvisioned;
+    private boolean mIsSupported;
+    private int mModemState;
+    private boolean mIsCellularModemEnabledMode;
+
+    /**
+     * Create TestSatelliteService using the Executor specified for methods being called from
+     * the framework.
+     *
+     * @param executor The executor for the framework to use when executing satellite methods.
+     */
+    public TestSatelliteService(@NonNull Executor executor) {
+        super(executor);
+        mIsCommunicationAllowedInLocation = true;
+        mIsEnabled = false;
+        mIsProvisioned = false;
+        mIsSupported = true;
+        mModemState = SatelliteModemState.SATELLITE_MODEM_STATE_OFF;
+        mIsCellularModemEnabledMode = false;
+    }
+
+    /**
+     * Zero-argument constructor to prevent service binding exception.
+     */
+    public TestSatelliteService() {
+        this(Runnable::run);
+    }
+
+    @Override
+    public IBinder onBind(Intent intent) {
+        if (SatelliteService.SERVICE_INTERFACE.equals(intent.getAction())) {
+            logd("Remote service bound");
+            return getBinder();
+        }
+        logd("Local service bound");
+        return mBinder;
+    }
+
+    @Override
+    public void onCreate() {
+        super.onCreate();
+        logd("onCreate");
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        logd("onDestroy");
+    }
+
+    @Override
+    public void setSatelliteListener(@NonNull ISatelliteListener listener) {
+        logd("setSatelliteListener");
+        mRemoteListeners.put(listener.asBinder(), listener);
+        notifyRemoteServiceConnected();
+    }
+
+    @Override
+    public void requestSatelliteListeningEnabled(boolean enabled, int timeout,
+            @NonNull IIntegerConsumer errorCallback) {
+        logd("requestSatelliteListeningEnabled: mErrorCode=" + mErrorCode);
+
+        if (mLocalListener != null) {
+            runWithExecutor(() -> mLocalListener.onSatelliteListeningEnabled(enabled));
+        } else {
+            loge("requestSatelliteListeningEnabled: mLocalListener is null");
+        }
+
+        if (!verifySatelliteModemState(errorCallback)) {
+            return;
+        }
+        if (mErrorCode != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+            runWithExecutor(() -> errorCallback.accept(mErrorCode));
+            return;
+        }
+
+        if (enabled) {
+            updateSatelliteModemState(SatelliteModemState.SATELLITE_MODEM_STATE_LISTENING);
+        } else {
+            updateSatelliteModemState(SatelliteModemState.SATELLITE_MODEM_STATE_IDLE);
+        }
+        runWithExecutor(() -> errorCallback.accept(SatelliteResult.SATELLITE_RESULT_SUCCESS));
+    }
+
+    @Override
+    public void requestSatelliteEnabled(boolean enableSatellite, boolean enableDemoMode,
+            @NonNull IIntegerConsumer errorCallback) {
+        logd("requestSatelliteEnabled: mErrorCode=" + mErrorCode + " enable = " + enableSatellite);
+        if (mErrorCode != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+            runWithExecutor(() -> errorCallback.accept(mErrorCode));
+            return;
+        }
+
+        if (enableSatellite) {
+            enableSatellite(errorCallback);
+        } else {
+            disableSatellite(errorCallback);
+        }
+    }
+
+    private void enableSatellite(@NonNull IIntegerConsumer errorCallback) {
+        mIsEnabled = true;
+        updateSatelliteModemState(SatelliteModemState.SATELLITE_MODEM_STATE_IDLE);
+        runWithExecutor(() -> errorCallback.accept(SatelliteResult.SATELLITE_RESULT_SUCCESS));
+    }
+
+    private void disableSatellite(@NonNull IIntegerConsumer errorCallback) {
+        mIsEnabled = false;
+        updateSatelliteModemState(SatelliteModemState.SATELLITE_MODEM_STATE_OFF);
+        runWithExecutor(() -> errorCallback.accept(SatelliteResult.SATELLITE_RESULT_SUCCESS));
+    }
+
+    @Override
+    public void requestIsSatelliteEnabled(@NonNull IIntegerConsumer errorCallback,
+            @NonNull IBooleanConsumer callback) {
+        logd("requestIsSatelliteEnabled: mErrorCode=" + mErrorCode);
+        if (mErrorCode != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+            runWithExecutor(() -> errorCallback.accept(mErrorCode));
+            return;
+        }
+        runWithExecutor(() -> callback.accept(mIsEnabled));
+    }
+
+    @Override
+    public void requestIsSatelliteSupported(@NonNull IIntegerConsumer errorCallback,
+            @NonNull IBooleanConsumer callback) {
+        logd("requestIsSatelliteSupported");
+        if (mErrorCode != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+            runWithExecutor(() -> errorCallback.accept(mErrorCode));
+            return;
+        }
+        runWithExecutor(() -> callback.accept(mIsSupported));
+    }
+
+    @Override
+    public void requestSatelliteCapabilities(@NonNull IIntegerConsumer errorCallback,
+            @NonNull ISatelliteCapabilitiesConsumer callback) {
+        logd("requestSatelliteCapabilities: mErrorCode=" + mErrorCode);
+        if (mErrorCode != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+            runWithExecutor(() -> errorCallback.accept(mErrorCode));
+            return;
+        }
+
+        SatelliteCapabilities capabilities = new SatelliteCapabilities();
+        capabilities.supportedRadioTechnologies = SUPPORTED_RADIO_TECHNOLOGIES;
+        capabilities.isPointingRequired = POINTING_TO_SATELLITE_REQUIRED;
+        capabilities.maxBytesPerOutgoingDatagram = MAX_BYTES_PER_DATAGRAM;
+        capabilities.antennaPositionKeys = ANTENNA_POSITION_KEYS;
+        capabilities.antennaPositionValues = ANTENNA_POSITION_VALUES;
+        runWithExecutor(() -> callback.accept(capabilities));
+    }
+
+    @Override
+    public void startSendingSatellitePointingInfo(@NonNull IIntegerConsumer errorCallback) {
+        logd("startSendingSatellitePointingInfo: mErrorCode=" + mErrorCode);
+        if (!verifySatelliteModemState(errorCallback)) {
+            if (mLocalListener != null) {
+                runWithExecutor(() -> mLocalListener.onStartSendingSatellitePointingInfo());
+            } else {
+                loge("startSendingSatellitePointingInfo: mLocalListener is null");
+            }
+            return;
+        }
+
+        if (mErrorCode != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+            runWithExecutor(() -> errorCallback.accept(mErrorCode));
+        } else {
+            runWithExecutor(() -> errorCallback.accept(SatelliteResult.SATELLITE_RESULT_SUCCESS));
+        }
+
+        if (mLocalListener != null) {
+            runWithExecutor(() -> mLocalListener.onStartSendingSatellitePointingInfo());
+        } else {
+            loge("startSendingSatellitePointingInfo: mLocalListener is null");
+        }
+    }
+
+    @Override
+    public void stopSendingSatellitePointingInfo(@NonNull IIntegerConsumer errorCallback) {
+        logd("stopSendingSatellitePointingInfo: mErrorCode=" + mErrorCode);
+        if (mErrorCode != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+            runWithExecutor(() -> errorCallback.accept(mErrorCode));
+        } else {
+            runWithExecutor(() -> errorCallback.accept(SatelliteResult.SATELLITE_RESULT_SUCCESS));
+        }
+
+        if (mLocalListener != null) {
+            runWithExecutor(() -> mLocalListener.onStopSendingSatellitePointingInfo());
+        } else {
+            loge("stopSendingSatellitePointingInfo: mLocalListener is null");
+        }
+    }
+
+    @Override
+    public void provisionSatelliteService(@NonNull String token, @NonNull byte[] provisionData,
+            @NonNull IIntegerConsumer errorCallback) {
+        logd("provisionSatelliteService: mErrorCode=" + mErrorCode);
+        if (mErrorCode != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+            runWithExecutor(() -> errorCallback.accept(mErrorCode));
+            return;
+        }
+        runWithExecutor(() -> errorCallback.accept(SatelliteResult.SATELLITE_RESULT_SUCCESS));
+        updateSatelliteProvisionState(true);
+    }
+
+    @Override
+    public void deprovisionSatelliteService(@NonNull String token,
+            @NonNull IIntegerConsumer errorCallback) {
+        logd("deprovisionSatelliteService: mErrorCode=" + mErrorCode);
+        if (mErrorCode != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+            runWithExecutor(() -> errorCallback.accept(mErrorCode));
+            return;
+        }
+        runWithExecutor(() -> errorCallback.accept(SatelliteResult.SATELLITE_RESULT_SUCCESS));
+        updateSatelliteProvisionState(false);
+    }
+
+    @Override
+    public void requestIsSatelliteProvisioned(@NonNull IIntegerConsumer errorCallback,
+            @NonNull IBooleanConsumer callback) {
+        logd("requestIsSatelliteProvisioned: mErrorCode=" + mErrorCode);
+        if (mErrorCode != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+            runWithExecutor(() -> errorCallback.accept(mErrorCode));
+            return;
+        }
+        runWithExecutor(() -> callback.accept(mIsProvisioned));
+    }
+
+    @Override
+    public void pollPendingSatelliteDatagrams(@NonNull IIntegerConsumer errorCallback) {
+        logd("pollPendingSatelliteDatagrams: mErrorCode=" + mErrorCode);
+        if (mErrorCode != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+            runWithExecutor(() -> errorCallback.accept(mErrorCode));
+        } else {
+            runWithExecutor(() -> errorCallback.accept(SatelliteResult.SATELLITE_RESULT_SUCCESS));
+        }
+
+        if (mLocalListener != null) {
+            runWithExecutor(() -> mLocalListener.onPollPendingSatelliteDatagrams());
+        } else {
+            loge("pollPendingSatelliteDatagrams: mLocalListener is null");
+        }
+    }
+
+    @Override
+    public void sendSatelliteDatagram(@NonNull SatelliteDatagram datagram, boolean isEmergency,
+            @NonNull IIntegerConsumer errorCallback) {
+        logd("sendSatelliteDatagram: mErrorCode=" + mErrorCode);
+        if (mErrorCode != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+            runWithExecutor(() -> errorCallback.accept(mErrorCode));
+        } else {
+            runWithExecutor(() -> errorCallback.accept(SatelliteResult.SATELLITE_RESULT_SUCCESS));
+        }
+
+        if (mLocalListener != null) {
+            runWithExecutor(() -> mLocalListener.onSendSatelliteDatagram(datagram, isEmergency));
+        } else {
+            loge("sendSatelliteDatagram: mLocalListener is null");
+        }
+    }
+
+    @Override
+    public void requestSatelliteModemState(@NonNull IIntegerConsumer errorCallback,
+            @NonNull IIntegerConsumer callback) {
+        logd("requestSatelliteModemState: mErrorCode=" + mErrorCode);
+        if (mErrorCode != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+            runWithExecutor(() -> errorCallback.accept(mErrorCode));
+            return;
+        }
+        runWithExecutor(() -> callback.accept(mModemState));
+    }
+
+    @Override
+    public void requestIsSatelliteCommunicationAllowedForCurrentLocation(
+            @NonNull IIntegerConsumer errorCallback, @NonNull IBooleanConsumer callback) {
+        logd("requestIsSatelliteCommunicationAllowedForCurrentLocation: mErrorCode=" + mErrorCode);
+        if (mErrorCode != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+            runWithExecutor(() -> errorCallback.accept(mErrorCode));
+            return;
+        }
+
+        if (mIsCommunicationAllowedInLocation) {
+            runWithExecutor(() -> callback.accept(true));
+        } else {
+            runWithExecutor(() -> callback.accept(false));
+        }
+    }
+
+    @Override
+    public void requestTimeForNextSatelliteVisibility(@NonNull IIntegerConsumer errorCallback,
+            @NonNull IIntegerConsumer callback) {
+        logd("requestTimeForNextSatelliteVisibility: mErrorCode=" + mErrorCode);
+        if (mErrorCode != SatelliteResult.SATELLITE_RESULT_SUCCESS) {
+            runWithExecutor(() -> errorCallback.accept(mErrorCode));
+            return;
+        }
+        runWithExecutor(() -> callback.accept(SATELLITE_ALWAYS_VISIBLE));
+    }
+
+    public void setLocalSatelliteListener(@NonNull ILocalSatelliteListener listener) {
+        logd("setLocalSatelliteListener: listener=" + listener);
+        mLocalListener = listener;
+        if (mShouldNotifyRemoteServiceConnected.get()) {
+            notifyRemoteServiceConnected();
+        }
+    }
+
+    public void setErrorCode(@SatelliteResult int errorCode) {
+        logd("setErrorCode: errorCode=" + errorCode);
+        mErrorCode = errorCode;
+    }
+
+    public void setSatelliteSupport(boolean supported) {
+        logd("setSatelliteSupport: supported=" + supported);
+        mIsSupported = supported;
+    }
+
+    public void sendOnSatelliteDatagramReceived(SatelliteDatagram datagram, int pendingCount) {
+        logd("sendOnSatelliteDatagramReceived");
+        mRemoteListeners.values().forEach(listener -> runWithExecutor(() ->
+                listener.onSatelliteDatagramReceived(datagram, pendingCount)));
+    }
+
+    public void sendOnPendingDatagrams() {
+        logd("sendOnPendingDatagrams");
+        mRemoteListeners.values().forEach(listener -> runWithExecutor(() ->
+                listener.onPendingDatagrams()));
+    }
+
+    public void sendOnSatellitePositionChanged(PointingInfo pointingInfo) {
+        logd("sendOnSatellitePositionChanged");
+        mRemoteListeners.values().forEach(listener -> runWithExecutor(() ->
+                listener.onSatellitePositionChanged(pointingInfo)));
+    }
+
+    /**
+     * Helper method to verify that the satellite modem is properly configured to receive
+     * requests.
+     *
+     * @param errorCallback The callback to notify of any errors preventing satellite requests.
+     * @return {@code true} if the satellite modem is configured to receive requests and
+     * {@code false} if it is not.
+     */
+    private boolean verifySatelliteModemState(@NonNull IIntegerConsumer errorCallback) {
+        if (!mIsSupported) {
+            runWithExecutor(() -> errorCallback.accept(
+                    SatelliteResult.SATELLITE_RESULT_REQUEST_NOT_SUPPORTED));
+            return false;
+        }
+        if (!mIsProvisioned) {
+            runWithExecutor(() -> errorCallback.accept(
+                    SatelliteResult.SATELLITE_RESULT_SERVICE_NOT_PROVISIONED));
+            return false;
+        }
+        if (!mIsEnabled) {
+            runWithExecutor(() -> errorCallback.accept(
+                    SatelliteResult.SATELLITE_RESULT_INVALID_MODEM_STATE));
+            return false;
+        }
+        return true;
+    }
+
+    /**
+     * Update the satellite modem state and notify listeners if it changed.
+     *
+     * @param modemState The {@link SatelliteModemState} to update.
+     */
+    private void updateSatelliteModemState(int modemState) {
+        if (modemState == mModemState) {
+            return;
+        }
+        if (mIsCellularModemEnabledMode
+                && modemState == SatelliteModemState.SATELLITE_MODEM_STATE_OFF) {
+            logd("Not updating the Modem state to Off as it is in CellularModemEnabledMode");
+            return;
+        }
+        mRemoteListeners.values().forEach(listener -> runWithExecutor(() ->
+                listener.onSatelliteModemStateChanged(modemState)));
+        mModemState = modemState;
+    }
+
+    /**
+     * Update the satellite provision state and notify listeners if it changed.
+     *
+     * @param isProvisioned {@code true} if the satellite is currently provisioned and
+     *                      {@code false} if it is not.
+     */
+    private void updateSatelliteProvisionState(boolean isProvisioned) {
+        logd("updateSatelliteProvisionState: isProvisioned=" + isProvisioned
+                + ", mIsProvisioned=" + mIsProvisioned);
+        if (isProvisioned == mIsProvisioned) {
+            return;
+        }
+        mIsProvisioned = isProvisioned;
+        logd("updateSatelliteProvisionState: mRemoteListeners.size=" + mRemoteListeners.size());
+        mRemoteListeners.values().forEach(listener -> runWithExecutor(() ->
+                listener.onSatelliteProvisionStateChanged(mIsProvisioned)));
+    }
+
+    /**
+     * Execute the given runnable using the executor that this service was created with.
+     *
+     * @param r A runnable that can throw an exception.
+     */
+    private void runWithExecutor(@NonNull FunctionalUtils.ThrowingRunnable r) {
+        mExecutor.execute(() -> Binder.withCleanCallingIdentity(r));
+    }
+
+    private void notifyRemoteServiceConnected() {
+        logd("notifyRemoteServiceConnected");
+        if (mLocalListener != null) {
+            runWithExecutor(() -> mLocalListener.onRemoteServiceConnected());
+            mShouldNotifyRemoteServiceConnected.set(false);
+        } else {
+            mShouldNotifyRemoteServiceConnected.set(true);
+        }
+    }
+
+    /**
+     * Log the message to the radio buffer with {@code DEBUG} priority.
+     *
+     * @param log The message to log.
+     */
+    private static void logd(@NonNull String log) {
+        Rlog.d(TAG, log);
+    }
+
+    /**
+     * Log with error attribute
+     *
+     * @param s is string log
+     */
+    protected void loge(@NonNull String s) {
+        Log.e(TAG, s);
+    }
+}
diff --git a/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/TestSatelliteWrapper.java b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/TestSatelliteWrapper.java
new file mode 100644
index 0000000..792c984
--- /dev/null
+++ b/testapps/TestSatelliteApp/src/com/android/phone/testapps/satellitetestapp/TestSatelliteWrapper.java
@@ -0,0 +1,330 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.phone.testapps.satellitetestapp;
+
+import android.annotation.NonNull;
+import android.app.Activity;
+import android.content.Intent;
+import android.os.Bundle;
+import android.os.OutcomeReceiver;
+import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
+import android.telephony.satellite.SatelliteManager;
+import android.telephony.satellite.wrapper.NtnSignalStrengthCallbackWrapper;
+import android.telephony.satellite.wrapper.NtnSignalStrengthWrapper;
+import android.telephony.satellite.wrapper.SatelliteCapabilitiesCallbackWrapper;
+import android.telephony.satellite.wrapper.SatelliteManagerWrapper;
+import android.util.Log;
+import android.view.View;
+import android.view.View.OnClickListener;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.stream.Collectors;
+
+
+/**
+ * Activity related to SatelliteControl APIs for satellite.
+ */
+public class TestSatelliteWrapper extends Activity {
+    private static final String TAG = "TestSatelliteWrapper";
+    ArrayList<String> mLogMessages = new ArrayList<>();
+    ArrayAdapter<String> mAdapter;
+
+    private final ExecutorService mExecutor = Executors.newSingleThreadExecutor();
+    private SatelliteManagerWrapper mSatelliteManagerWrapper;
+    private NtnSignalStrengthCallback mNtnSignalStrengthCallback = null;
+    private SatelliteCapabilitiesCallbackWrapper mSatelliteCapabilitiesCallback;
+    private SubscriptionManager mSubscriptionManager;
+
+    private ListView mLogListView;
+
+    @Override
+    public void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        mSatelliteManagerWrapper = SatelliteManagerWrapper.getInstance(this);
+        mSubscriptionManager = getSystemService(SubscriptionManager.class);
+
+        setContentView(R.layout.activity_TestSatelliteWrapper);
+        findViewById(R.id.requestNtnSignalStrength)
+                .setOnClickListener(this::requestNtnSignalStrength);
+        findViewById(R.id.registerForNtnSignalStrengthChanged)
+                .setOnClickListener(this::registerForNtnSignalStrengthChanged);
+        findViewById(R.id.unregisterForNtnSignalStrengthChanged)
+                .setOnClickListener(this::unregisterForNtnSignalStrengthChanged);
+        findViewById(R.id.isOnlyNonTerrestrialNetworkSubscription)
+                .setOnClickListener(this::isOnlyNonTerrestrialNetworkSubscription);
+        findViewById(R.id.registerForSatelliteCapabilitiesChanged)
+                .setOnClickListener(this::registerForSatelliteCapabilitiesChanged);
+        findViewById(R.id.unregisterForSatelliteCapabilitiesChanged)
+                .setOnClickListener(this::unregisterForSatelliteCapabilitiesChanged);
+        findViewById(R.id.Back).setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View view) {
+                startActivity(new Intent(TestSatelliteWrapper.this, SatelliteTestApp.class));
+            }
+        });
+        findViewById(R.id.ClearLog).setOnClickListener(new OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                clearListView();
+            }
+        });
+
+        mLogListView = findViewById(R.id.logListView);
+        mAdapter = new ArrayAdapter<>(this, R.layout.log_textview, mLogMessages);
+        mLogListView.setAdapter(mAdapter);
+
+        addLogMessage("TestSatelliteWrapper.onCreate()");
+    }
+
+
+    private void clearListView() {
+        mLogMessages.clear();
+        mAdapter.notifyDataSetChanged();
+    }
+
+    @Override
+    protected void onDestroy() {
+        super.onDestroy();
+
+        if (mSatelliteManagerWrapper != null) {
+            if (mNtnSignalStrengthCallback != null) {
+                Log.d(TAG, "unregisterForNtnSignalStrengthChanged()");
+                mSatelliteManagerWrapper.unregisterForNtnSignalStrengthChanged(
+                        mNtnSignalStrengthCallback);
+            }
+            if (mSatelliteCapabilitiesCallback != null) {
+                Log.d(TAG, "unregisterForSatelliteCapabilitiesChanged()");
+                mSatelliteManagerWrapper.unregisterForSatelliteCapabilitiesChanged(
+                        mSatelliteCapabilitiesCallback);
+            }
+        }
+    }
+
+    private void requestNtnSignalStrength(View view) {
+        addLogMessage("requestNtnSignalStrength");
+        Log.d(TAG, "requestNtnSignalStrength");
+        OutcomeReceiver<NtnSignalStrengthWrapper,
+                SatelliteManagerWrapper.SatelliteExceptionWrapper> receiver =
+                new OutcomeReceiver<>() {
+                    @Override
+                    public void onResult(NtnSignalStrengthWrapper level) {
+                        if (level != null) {
+                            addLogMessage("requestNtnSignalStrength level is " + level.getLevel());
+                        }
+                    }
+
+                    @Override
+                    public void onError(
+                            SatelliteManagerWrapper.SatelliteExceptionWrapper exception) {
+                        if (exception != null) {
+                            String onError = "requestNtnSignalStrength exception: "
+                                    + translateResultCodeToString(exception.getErrorCode());
+                            Log.d(TAG, onError);
+                            addLogMessage(onError);
+                        }
+                    }
+                };
+
+        try {
+            mSatelliteManagerWrapper.requestNtnSignalStrength(mExecutor, receiver);
+        } catch (SecurityException | IllegalStateException ex) {
+            String errorMessage = "requestNtnSignalStrength: " + ex.getMessage();
+            Log.d(TAG, errorMessage);
+            addLogMessage(errorMessage);
+        }
+    }
+
+    private void registerForNtnSignalStrengthChanged(View view) {
+        addLogMessage("registerForNtnSignalStrengthChanged");
+        Log.d(TAG, "registerForNtnSignalStrengthChanged()");
+        if (mNtnSignalStrengthCallback == null) {
+            Log.d(TAG, "create new NtnSignalStrengthCallback instance.");
+            mNtnSignalStrengthCallback = new NtnSignalStrengthCallback();
+        }
+
+        try {
+            mSatelliteManagerWrapper.registerForNtnSignalStrengthChanged(mExecutor,
+                    mNtnSignalStrengthCallback);
+        } catch (Exception ex) {
+            String errorMessage;
+            if (ex instanceof SatelliteManager.SatelliteException) {
+                errorMessage =
+                        "registerForNtnSignalStrengthChanged: " + translateResultCodeToString(
+                                ((SatelliteManager.SatelliteException) ex).getErrorCode());
+            } else {
+                errorMessage = "registerForNtnSignalStrengthChanged: " + ex.getMessage();
+            }
+            Log.d(TAG, errorMessage);
+            addLogMessage(errorMessage);
+            mNtnSignalStrengthCallback = null;
+
+        }
+    }
+
+    private void unregisterForNtnSignalStrengthChanged(View view) {
+        addLogMessage("unregisterForNtnSignalStrengthChanged");
+        Log.d(TAG, "unregisterForNtnSignalStrengthChanged()");
+        if (mNtnSignalStrengthCallback != null) {
+            mSatelliteManagerWrapper.unregisterForNtnSignalStrengthChanged(
+                    mNtnSignalStrengthCallback);
+            mNtnSignalStrengthCallback = null;
+            addLogMessage("mNtnSignalStrengthCallback was unregistered");
+        } else {
+            addLogMessage("mNtnSignalStrengthCallback is null, ignored.");
+        }
+    }
+
+    private void isOnlyNonTerrestrialNetworkSubscription(View view) {
+        addLogMessage("isOnlyNonTerrestrialNetworkSubscription");
+        Log.d(TAG, "isOnlyNonTerrestrialNetworkSubscription()");
+        List<SubscriptionInfo> infoList = mSubscriptionManager.getAvailableSubscriptionInfoList();
+        List<Integer> subIdList = infoList.stream()
+                .map(SubscriptionInfo::getSubscriptionId)
+                .toList();
+
+        Map<Integer, Boolean> resultMap = subIdList.stream().collect(
+                Collectors.toMap(
+                        id -> id,
+                        id -> {
+                            boolean result = mSatelliteManagerWrapper
+                                    .isOnlyNonTerrestrialNetworkSubscription(id);
+                            addLogMessage("SatelliteManagerWrapper"
+                                    + ".isOnlyNonTerrestrialNetworkSubscription(" + id + ")");
+                            return result;
+                        }
+                ));
+
+        for (Map.Entry<Integer, Boolean> entry : resultMap.entrySet()) {
+            int subId = entry.getKey();
+            boolean result = entry.getValue();
+            addLogMessage("Subscription ID: " + subId + ", Result: " + result);
+        }
+    }
+
+    private void registerForSatelliteCapabilitiesChanged(View view) {
+        addLogMessage("registerForSatelliteCapabilitiesChanged");
+        Log.d(TAG, "registerForSatelliteCapabilitiesChanged()");
+        if (mSatelliteCapabilitiesCallback == null) {
+            mSatelliteCapabilitiesCallback =
+                    SatelliteCapabilities -> {
+                        String message = "Received SatelliteCapabillities : "
+                                + SatelliteCapabilities;
+                        Log.d(TAG, message);
+                        runOnUiThread(() -> addLogMessage(message));
+                    };
+        }
+
+        int result = mSatelliteManagerWrapper.registerForSatelliteCapabilitiesChanged(mExecutor,
+                mSatelliteCapabilitiesCallback);
+        if (result != SatelliteManagerWrapper.SATELLITE_RESULT_SUCCESS) {
+            String onError = translateResultCodeToString(result);
+            Log.d(TAG, onError);
+            addLogMessage(onError);
+            mSatelliteCapabilitiesCallback = null;
+        }
+    }
+
+    private void unregisterForSatelliteCapabilitiesChanged(View view) {
+        addLogMessage("unregisterForSatelliteCapabilitiesChanged");
+        Log.d(TAG, "unregisterForSatelliteCapabilitiesChanged()");
+        if (mSatelliteCapabilitiesCallback != null) {
+            mSatelliteManagerWrapper.unregisterForSatelliteCapabilitiesChanged(
+                    mSatelliteCapabilitiesCallback);
+            mSatelliteCapabilitiesCallback = null;
+            addLogMessage("mSatelliteCapabilitiesCallback was unregistered");
+        } else {
+            addLogMessage("mSatelliteCapabilitiesCallback is null, ignored.");
+        }
+    }
+
+    public class NtnSignalStrengthCallback implements NtnSignalStrengthCallbackWrapper {
+        @Override
+        public void onNtnSignalStrengthChanged(
+                @NonNull NtnSignalStrengthWrapper ntnSignalStrength) {
+            String message = "Received NTN SignalStrength : " + ntnSignalStrength.getLevel();
+            Log.d(TAG, message);
+            runOnUiThread(() -> addLogMessage(message));
+        }
+    }
+
+    private String translateResultCodeToString(
+            @SatelliteManagerWrapper.SatelliteResult int result) {
+        switch (result) {
+            case SatelliteManagerWrapper.SATELLITE_RESULT_SUCCESS:
+                return "SATELLITE_RESULT_SUCCESS";
+            case SatelliteManagerWrapper.SATELLITE_RESULT_ERROR:
+                return "SATELLITE_RESULT_ERROR";
+            case SatelliteManagerWrapper.SATELLITE_RESULT_SERVER_ERROR:
+                return "SATELLITE_RESULT_SERVER_ERROR";
+            case SatelliteManagerWrapper.SATELLITE_RESULT_SERVICE_ERROR:
+                return "SATELLITE_RESULT_SERVICE_ERROR";
+            case SatelliteManagerWrapper.SATELLITE_RESULT_MODEM_ERROR:
+                return "SATELLITE_RESULT_MODEM_ERROR";
+            case SatelliteManagerWrapper.SATELLITE_RESULT_NETWORK_ERROR:
+                return "SATELLITE_RESULT_NETWORK_ERROR";
+            case SatelliteManagerWrapper.SATELLITE_RESULT_INVALID_TELEPHONY_STATE:
+                return "SATELLITE_RESULT_INVALID_TELEPHONY_STATE";
+            case SatelliteManagerWrapper.SATELLITE_RESULT_INVALID_MODEM_STATE:
+                return "SATELLITE_RESULT_INVALID_MODEM_STATE";
+            case SatelliteManagerWrapper.SATELLITE_RESULT_INVALID_ARGUMENTS:
+                return "SATELLITE_RESULT_INVALID_ARGUMENTS";
+            case SatelliteManagerWrapper.SATELLITE_RESULT_REQUEST_FAILED:
+                return "SATELLITE_RESULT_REQUEST_FAILED";
+            case SatelliteManagerWrapper.SATELLITE_RESULT_RADIO_NOT_AVAILABLE:
+                return "SATELLITE_RESULT_RADIO_NOT_AVAILABLE";
+            case SatelliteManagerWrapper.SATELLITE_RESULT_REQUEST_NOT_SUPPORTED:
+                return "SATELLITE_RESULT_REQUEST_NOT_SUPPORTED";
+            case SatelliteManagerWrapper.SATELLITE_RESULT_NO_RESOURCES:
+                return "SATELLITE_RESULT_NO_RESOURCES";
+            case SatelliteManagerWrapper.SATELLITE_RESULT_SERVICE_NOT_PROVISIONED:
+                return "SATELLITE_RESULT_SERVICE_NOT_PROVISIONED";
+            case SatelliteManagerWrapper.SATELLITE_RESULT_SERVICE_PROVISION_IN_PROGRESS:
+                return "SATELLITE_RESULT_SERVICE_PROVISION_IN_PROGRESS";
+            case SatelliteManagerWrapper.SATELLITE_RESULT_REQUEST_ABORTED:
+                return "SATELLITE_RESULT_REQUEST_ABORTED";
+            case SatelliteManagerWrapper.SATELLITE_RESULT_ACCESS_BARRED:
+                return "SATELLITE_RESULT_ACCESS_BARRED";
+            case SatelliteManagerWrapper.SATELLITE_RESULT_NETWORK_TIMEOUT:
+                return "SATELLITE_RESULT_NETWORK_TIMEOUT";
+            case SatelliteManagerWrapper.SATELLITE_RESULT_NOT_REACHABLE:
+                return "SATELLITE_RESULT_NOT_REACHABLE";
+            case SatelliteManagerWrapper.SATELLITE_RESULT_NOT_AUTHORIZED:
+                return "SATELLITE_RESULT_NOT_AUTHORIZED";
+            case SatelliteManagerWrapper.SATELLITE_RESULT_NOT_SUPPORTED:
+                return "SATELLITE_RESULT_NOT_SUPPORTED";
+            case SatelliteManagerWrapper.SATELLITE_RESULT_REQUEST_IN_PROGRESS:
+                return "SATELLITE_RESULT_REQUEST_IN_PROGRESS";
+            case SatelliteManagerWrapper.SATELLITE_RESULT_MODEM_BUSY:
+                return "SATELLITE_RESULT_MODEM_BUSY";
+            default:
+                return "INVALID CODE: " + result;
+        }
+    }
+
+    private void addLogMessage(String message) {
+        mLogMessages.add(message);
+        mAdapter.notifyDataSetChanged();
+        mLogListView.setSelection(mAdapter.getCount() - 1);
+    }
+}
diff --git a/tests/Android.bp b/tests/Android.bp
index 2b79631..3015f76 100644
--- a/tests/Android.bp
+++ b/tests/Android.bp
@@ -38,6 +38,7 @@
     instrumentation_for: "TeleService",
 
     static_libs: [
+        "frameworks-base-testutils",
         "androidx.test.core",
         "androidx.test.espresso.core",
         "androidx.test.ext.junit",
@@ -48,6 +49,11 @@
         "truth",
         "testables",
         "platform-compat-test-rules",
+        "flag-junit",
+        "satellite-s2storage-rw",
+        "satellite-s2storage-testutils",
+        "s2-geometry-library-java",
+        "telephony-satellite",
     ],
 
     test_suites: [
diff --git a/tests/src/com/android/phone/CarrierConfigLoaderTest.java b/tests/src/com/android/phone/CarrierConfigLoaderTest.java
index b6f8ed8..bd2e4f7 100644
--- a/tests/src/com/android/phone/CarrierConfigLoaderTest.java
+++ b/tests/src/com/android/phone/CarrierConfigLoaderTest.java
@@ -40,8 +40,10 @@
 import android.os.Build;
 import android.os.Handler;
 import android.os.HandlerThread;
+import android.os.PermissionEnforcer;
 import android.os.PersistableBundle;
 import android.os.UserHandle;
+import android.os.test.FakePermissionEnforcer;
 import android.service.carrier.CarrierIdentifier;
 import android.telephony.CarrierConfigManager;
 import android.telephony.SubscriptionManager;
@@ -97,10 +99,17 @@
     private HandlerThread mHandlerThread;
     private TestableLooper mTestableLooper;
 
+    // The AIDL stub will use PermissionEnforcer to check permission from the caller.
+    private FakePermissionEnforcer mFakePermissionEnforcer = new FakePermissionEnforcer();
+
     @Before
     public void setUp() throws Exception {
         super.setUp();
         MockitoAnnotations.initMocks(this);
+        doReturn(Context.PERMISSION_ENFORCER_SERVICE).when(mContext).getSystemServiceName(
+                eq(PermissionEnforcer.class));
+        doReturn(mFakePermissionEnforcer).when(mContext).getSystemService(
+                eq(Context.PERMISSION_ENFORCER_SERVICE));
         replaceInstance(SubscriptionManagerService.class, "sInstance", null,
                 mSubscriptionManagerService);
 
@@ -142,6 +151,9 @@
     @After
     public void tearDown() throws Exception {
         mContext.revokeAllPermissions();
+        mFakePermissionEnforcer.revoke(android.Manifest.permission.DUMP);
+        mFakePermissionEnforcer.revoke(android.Manifest.permission.MODIFY_PHONE_STATE);
+        mFakePermissionEnforcer.revoke(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE);
         mTestableLooper.destroy();
         mHandlerThread.quit();
         super.tearDown();
@@ -164,7 +176,7 @@
      */
     @Test
     public void testUpdateConfigForPhoneId_invalidPhoneId() throws Exception {
-        mContext.grantPermission(STUB_PERMISSION_ENABLE_ALL);
+        mFakePermissionEnforcer.grant(android.Manifest.permission.MODIFY_PHONE_STATE);
 
         assertThrows(IllegalArgumentException.class,
                 () -> mCarrierConfigLoader.updateConfigForPhoneId(
@@ -182,7 +194,7 @@
         if (!SubscriptionManager.isValidPhoneId(SubscriptionManager.getPhoneId(DEFAULT_SUB_ID))) {
             return;
         }
-        mContext.grantPermission(STUB_PERMISSION_ENABLE_ALL);
+        mFakePermissionEnforcer.grant(android.Manifest.permission.MODIFY_PHONE_STATE);
         doNothing().when(mContext).sendBroadcastAsUser(any(Intent.class), any(UserHandle.class));
 
         // Prepare a cached config to fetch from xml
@@ -215,7 +227,7 @@
         if (!SubscriptionManager.isValidPhoneId(SubscriptionManager.getPhoneId(DEFAULT_SUB_ID))) {
             return;
         }
-        mContext.grantPermission(STUB_PERMISSION_ENABLE_ALL);
+        mFakePermissionEnforcer.grant(android.Manifest.permission.MODIFY_PHONE_STATE);
 
         // Prepare to make sure we can save the config into the XML file which used as cache
         doReturn(PLATFORM_CARRIER_CONFIG_PACKAGE).when(mTelephonyManager)
@@ -252,7 +264,7 @@
      */
     @Test
     public void testOverrideConfig_invalidSubId() throws Exception {
-        mContext.grantPermission(STUB_PERMISSION_ENABLE_ALL);
+        mFakePermissionEnforcer.grant(android.Manifest.permission.MODIFY_PHONE_STATE);
 
         assertThrows(IllegalArgumentException.class, () -> mCarrierConfigLoader.overrideConfig(
                 SubscriptionManager.INVALID_SUBSCRIPTION_ID, new PersistableBundle(), false));
@@ -267,7 +279,7 @@
         if (!SubscriptionManager.isValidPhoneId(SubscriptionManager.getPhoneId(DEFAULT_SUB_ID))) {
             return;
         }
-        mContext.grantPermission(STUB_PERMISSION_ENABLE_ALL);
+        mFakePermissionEnforcer.grant(android.Manifest.permission.MODIFY_PHONE_STATE);
 
         mCarrierConfigLoader.overrideConfig(DEFAULT_SUB_ID, null /*overrides*/,
                 false/*persistent*/);
@@ -288,7 +300,7 @@
         if (!SubscriptionManager.isValidPhoneId(SubscriptionManager.getPhoneId(DEFAULT_SUB_ID))) {
             return;
         }
-        mContext.grantPermission(STUB_PERMISSION_ENABLE_ALL);
+        mFakePermissionEnforcer.grant(android.Manifest.permission.MODIFY_PHONE_STATE);
 
         PersistableBundle config = getTestConfig();
         mCarrierConfigLoader.overrideConfig(DEFAULT_SUB_ID, config /*overrides*/,
@@ -308,7 +320,7 @@
      */
     @Test
     public void testNotifyConfigChangedForSubId_invalidSubId() throws Exception {
-        mContext.grantPermission(STUB_PERMISSION_ENABLE_ALL);
+        mFakePermissionEnforcer.grant(STUB_PERMISSION_ENABLE_ALL);
 
         assertThrows(IllegalArgumentException.class,
                 () -> mCarrierConfigLoader.notifyConfigChangedForSubId(
@@ -346,7 +358,7 @@
      */
     @Test
     public void testGetDefaultCarrierServicePackageName_withPermission() {
-        mContext.grantPermission(STUB_PERMISSION_ENABLE_ALL);
+        mFakePermissionEnforcer.grant(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE);
 
         assertThat(mCarrierConfigLoader.getDefaultCarrierServicePackageName())
                 .isEqualTo(PLATFORM_CARRIER_CONFIG_PACKAGE);
@@ -417,7 +429,7 @@
     @Test
     public void testMultiSimConfigChanged() throws Exception {
         replaceInstance(TelephonyManager.class, "sInstance", null, mTelephonyManager);
-        mContext.grantPermission(STUB_PERMISSION_ENABLE_ALL);
+        mFakePermissionEnforcer.grant(android.Manifest.permission.MODIFY_PHONE_STATE);
 
         // Changed from 1 to 2.
         doReturn(2).when(mTelephonyManager).getActiveModemCount();
diff --git a/tests/src/com/android/phone/NotificationMgrTest.java b/tests/src/com/android/phone/NotificationMgrTest.java
index e009446..98c6a4a 100644
--- a/tests/src/com/android/phone/NotificationMgrTest.java
+++ b/tests/src/com/android/phone/NotificationMgrTest.java
@@ -631,6 +631,7 @@
                 MOBILE_NETWORK_SELECTION_PACKAGE);
         when(mApp.getString(R.string.mobile_network_settings_class)).thenReturn(
                 MOBILE_NETWORK_SELECTION_CLASS);
+        when(mSubscriptionManager.isActiveSubId(anyInt())).thenReturn(true);
     }
 
     private void moveTimeForward(long seconds) {
diff --git a/tests/src/com/android/phone/PhoneInterfaceManagerTest.java b/tests/src/com/android/phone/PhoneInterfaceManagerTest.java
index e702279..150703d 100644
--- a/tests/src/com/android/phone/PhoneInterfaceManagerTest.java
+++ b/tests/src/com/android/phone/PhoneInterfaceManagerTest.java
@@ -34,6 +34,8 @@
 import android.content.Context;
 import android.content.SharedPreferences;
 import android.content.res.Resources;
+import android.permission.flags.Flags;
+import android.platform.test.flag.junit.SetFlagsRule;
 import android.telephony.RadioAccessFamily;
 import android.telephony.TelephonyManager;
 
@@ -44,9 +46,11 @@
 import com.android.internal.telephony.IIntegerConsumer;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.RILConstants;
+import com.android.internal.telephony.flags.FeatureFlags;
 import com.android.internal.telephony.subscription.SubscriptionManagerService;
 
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
@@ -66,10 +70,14 @@
     PhoneGlobals mPhoneGlobals;
     @Mock
     Phone mPhone;
+    @Mock
+    FeatureFlags mFeatureFlags;
 
     @Mock
     private SubscriptionManagerService mSubscriptionManagerService;
 
+    @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
+
     @Before
     @UiThreadTest
     public void setUp() throws Exception {
@@ -78,7 +86,7 @@
         // global singleton, but the context that is passed in is unused if the phone app is already
         // alive on a test devices. You must use the spy to mock behavior. Mocks stemming from the
         // passed context will remain unused.
-        mPhoneInterfaceManager = spy(PhoneInterfaceManager.init(mPhoneGlobals));
+        mPhoneInterfaceManager = spy(PhoneInterfaceManager.init(mPhoneGlobals, mFeatureFlags));
         doReturn(mSubscriptionManagerService).when(mPhoneInterfaceManager)
                 .getSubscriptionManagerService();
         TelephonyManager.setupISubForTest(mSubscriptionManagerService);
@@ -283,4 +291,72 @@
         mPhoneInterfaceManager.getCarrierRestrictionStatus(mIIntegerConsumer,
                 "com.test.package");
     }
+
+    @Test
+    public void notifyEnableDataWithAppOps_enableByUser_doNoteOp() {
+        mSetFlagsRule.enableFlags(Flags.FLAG_OP_ENABLE_MOBILE_DATA_BY_USER);
+        String packageName = "INVALID_PACKAGE";
+        String error = "";
+        try {
+            mPhoneInterfaceManager.setDataEnabledForReason(1,
+                    TelephonyManager.DATA_ENABLED_REASON_USER, true, packageName);
+        } catch (SecurityException expected) {
+            // The test doesn't have access to note the op, but we're just interested that it makes
+            // the attempt.
+            error = expected.getMessage();
+        }
+
+        String appop = "ENABLE_MOBILE_DATA_BY_USER";
+        assertTrue("expected error to contain " + packageName + " but it didn't: " + error,
+                error.contains(packageName));
+        assertTrue("expected error to contain " + appop + " but it didn't: " + error,
+                error.contains(appop));
+    }
+
+    @Test
+    public void notifyEnableDataWithAppOps_enableByCarrier_doNotNoteOp() {
+        mSetFlagsRule.enableFlags(Flags.FLAG_OP_ENABLE_MOBILE_DATA_BY_USER);
+        String packageName = "INVALID_PACKAGE";
+        String error = "";
+        try {
+            mPhoneInterfaceManager.setDataEnabledForReason(1,
+                    TelephonyManager.DATA_ENABLED_REASON_CARRIER, true, packageName);
+        } catch (SecurityException expected) {
+            // The test doesn't have access to note the op, but we're just interested that it makes
+            // the attempt.
+            error = expected.getMessage();
+        }
+        assertEquals("Expected error to be empty, was " + error, error, "");
+    }
+
+    @Test
+    public void notifyEnableDataWithAppOps_disableByUser_doNotNoteOp() {
+        mSetFlagsRule.enableFlags(Flags.FLAG_OP_ENABLE_MOBILE_DATA_BY_USER);
+        String packageName = "INVALID_PACKAGE";
+        String error = "";
+        try {
+            mPhoneInterfaceManager.setDataEnabledForReason(1,
+                    TelephonyManager.DATA_ENABLED_REASON_USER, false, packageName);
+        } catch (SecurityException expected) {
+            // The test doesn't have access to note the op, but we're just interested that it makes
+            // the attempt.
+            error = expected.getMessage();
+        }
+        assertEquals("Expected error to be empty, was " + error, error, "");
+    }
+
+    @Test
+    public void notifyEnableDataWithAppOps_noPackageNameAndEnableByUser_doNotnoteOp() {
+        mSetFlagsRule.enableFlags(Flags.FLAG_OP_ENABLE_MOBILE_DATA_BY_USER);
+        String error = "";
+        try {
+            mPhoneInterfaceManager.setDataEnabledForReason(1,
+                    TelephonyManager.DATA_ENABLED_REASON_USER, false, null);
+        } catch (SecurityException expected) {
+            // The test doesn't have access to note the op, but we're just interested that it makes
+            // the attempt.
+            error = expected.getMessage();
+        }
+        assertEquals("Expected error to be empty, was " + error, error, "");
+    }
 }
diff --git a/tests/src/com/android/phone/satellite/accesscontrol/S2RangeSatelliteOnDeviceAccessControllerTest.java b/tests/src/com/android/phone/satellite/accesscontrol/S2RangeSatelliteOnDeviceAccessControllerTest.java
new file mode 100644
index 0000000..84c233a
--- /dev/null
+++ b/tests/src/com/android/phone/satellite/accesscontrol/S2RangeSatelliteOnDeviceAccessControllerTest.java
@@ -0,0 +1,194 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.phone.satellite.accesscontrol;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.storage.s2.S2LevelRange;
+import com.android.telephony.sats2range.read.SatS2RangeFileFormat;
+import com.android.telephony.sats2range.utils.TestUtils;
+import com.android.telephony.sats2range.write.SatS2RangeFileWriter;
+
+import com.google.common.geometry.S2CellId;
+import com.google.common.geometry.S2LatLng;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.MockitoAnnotations;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+@RunWith(AndroidJUnit4.class)
+public class S2RangeSatelliteOnDeviceAccessControllerTest {
+    private File mFile;
+
+    @Before
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+        mFile = File.createTempFile("test", ".data");
+        assertTrue(mFile.exists());
+    }
+
+    @After
+    public void tearDown() throws IOException {
+        if (mFile != null && mFile.exists()) {
+            assertTrue(mFile.delete());
+        }
+    }
+
+    @Test
+    public void testSatelliteAccessControl_AllowedList() throws Exception {
+        testSatelliteAccessControl(true);
+    }
+
+    @Test
+    public void testSatelliteAccessControl_DisallowedList() throws Exception {
+        testSatelliteAccessControl(false);
+    }
+
+    private void testSatelliteAccessControl(boolean isAllowedList) throws Exception {
+        SatS2RangeFileFormat fileFormat = null;
+        try {
+            fileFormat = createSatS2File(mFile, isAllowedList);
+        } catch (Exception ex) {
+            fail("Got unexpected exception in createSatS2File, ex=" + ex);
+        }
+
+        // Validate the output block file
+        SatelliteOnDeviceAccessController accessController = null;
+        try {
+            accessController = SatelliteOnDeviceAccessController.create(mFile);
+
+            // Verify an edge cell of range 1 not in the output file
+            S2CellId s2CellId = new S2CellId(TestUtils.createCellId(fileFormat, 1, 1000, 999));
+            S2LatLng s2LatLng = s2CellId.toLatLng();
+            SatelliteOnDeviceAccessController.LocationToken locationToken =
+                    accessController.createLocationTokenForLatLng(
+                            s2LatLng.latDegrees(), s2LatLng.lngDegrees());
+            boolean isAllowed = accessController.isSatCommunicationAllowedAtLocation(locationToken);
+            assertTrue(isAllowed != isAllowedList);
+
+            // Verify cells in range1 present in the output file
+            for (int suffix = 1000; suffix < 2000; suffix++) {
+                s2CellId = new S2CellId(TestUtils.createCellId(fileFormat, 1, 1000, suffix));
+                s2LatLng = s2CellId.toLatLng();
+
+                // Lookup using location token
+                locationToken = accessController.createLocationTokenForLatLng(
+                                s2LatLng.latDegrees(), s2LatLng.lngDegrees());
+                isAllowed = accessController.isSatCommunicationAllowedAtLocation(locationToken);
+                assertTrue(isAllowed == isAllowedList);
+            }
+
+            // Verify the middle cell not in the output file
+            s2CellId = new S2CellId(TestUtils.createCellId(fileFormat, 1, 1000, 2000));
+            s2LatLng = s2CellId.toLatLng();
+            locationToken = accessController.createLocationTokenForLatLng(
+                    s2LatLng.latDegrees(), s2LatLng.lngDegrees());
+            isAllowed = accessController.isSatCommunicationAllowedAtLocation(locationToken);
+            assertTrue(isAllowed != isAllowedList);
+
+            // Verify cells in range2 present in the output file
+            for (int suffix = 2001; suffix < 3000; suffix++) {
+                s2CellId = new S2CellId(TestUtils.createCellId(fileFormat, 1, 1000, suffix));
+                s2LatLng = s2CellId.toLatLng();
+                locationToken = accessController.createLocationTokenForLatLng(
+                        s2LatLng.latDegrees(), s2LatLng.lngDegrees());
+                isAllowed = accessController.isSatCommunicationAllowedAtLocation(locationToken);
+                assertTrue(isAllowed == isAllowedList);
+            }
+
+            // Verify an edge cell of range 2 not in the output file
+            s2CellId = new S2CellId(TestUtils.createCellId(fileFormat, 1, 1000, 3000));
+            s2LatLng = s2CellId.toLatLng();
+            locationToken = accessController.createLocationTokenForLatLng(
+                    s2LatLng.latDegrees(), s2LatLng.lngDegrees());
+            isAllowed = accessController.isSatCommunicationAllowedAtLocation(locationToken);
+            assertTrue(isAllowed != isAllowedList);
+
+            // Verify an edge cell of range 3 not in the output file
+            s2CellId = new S2CellId(TestUtils.createCellId(fileFormat, 1, 1001, 999));
+            s2LatLng = s2CellId.toLatLng();
+            locationToken = accessController.createLocationTokenForLatLng(
+                    s2LatLng.latDegrees(), s2LatLng.lngDegrees());
+            isAllowed = accessController.isSatCommunicationAllowedAtLocation(locationToken);
+            assertTrue(isAllowed != isAllowedList);
+
+            // Verify cells in range1 present in the output file
+            for (int suffix = 1000; suffix < 2000; suffix++) {
+                s2CellId = new S2CellId(TestUtils.createCellId(fileFormat, 1, 1001, suffix));
+                s2LatLng = s2CellId.toLatLng();
+                locationToken = accessController.createLocationTokenForLatLng(
+                        s2LatLng.latDegrees(), s2LatLng.lngDegrees());
+                isAllowed = accessController.isSatCommunicationAllowedAtLocation(locationToken);
+                assertTrue(isAllowed == isAllowedList);
+            }
+
+            // Verify an edge cell of range 3 not in the output file
+            s2CellId = new S2CellId(TestUtils.createCellId(fileFormat, 1, 1001, 2000));
+            s2LatLng = s2CellId.toLatLng();
+            locationToken = accessController.createLocationTokenForLatLng(
+                    s2LatLng.latDegrees(), s2LatLng.lngDegrees());
+            isAllowed = accessController.isSatCommunicationAllowedAtLocation(locationToken);
+            assertTrue(isAllowed != isAllowedList);
+        } catch (Exception ex) {
+            fail("Unexpected exception when validating the output ex=" + ex);
+        } finally {
+            if (accessController != null) {
+                accessController.close();
+            }
+        }
+    }
+
+    private SatS2RangeFileFormat createSatS2File(
+            File file, boolean isAllowedList) throws Exception {
+        SatS2RangeFileFormat fileFormat;
+        S2LevelRange range1, range2, range3;
+        try (SatS2RangeFileWriter satS2RangeFileWriter = SatS2RangeFileWriter.open(
+                file, TestUtils.createS2RangeFileFormat(isAllowedList))) {
+            fileFormat = satS2RangeFileWriter.getFileFormat();
+
+            // Two ranges that share a prefix.
+            range1 = new S2LevelRange(
+                    TestUtils.createCellId(fileFormat, 1, 1000, 1000),
+                    TestUtils.createCellId(fileFormat, 1, 1000, 2000));
+            range2 = new S2LevelRange(
+                    TestUtils.createCellId(fileFormat, 1, 1000, 2001),
+                    TestUtils.createCellId(fileFormat, 1, 1000, 3000));
+            // This range has a different prefix, so will be in a different suffix table.
+            range3 = new S2LevelRange(
+                    TestUtils.createCellId(fileFormat, 1, 1001, 1000),
+                    TestUtils.createCellId(fileFormat, 1, 1001, 2000));
+
+            List<S2LevelRange> ranges = new ArrayList<>();
+            ranges.add(range1);
+            ranges.add(range2);
+            ranges.add(range3);
+            satS2RangeFileWriter.createSortedSuffixBlocks(ranges.iterator());
+        }
+        assertTrue(file.length() > 0);
+        return fileFormat;
+    }
+}
diff --git a/tests/src/com/android/phone/slice/SlicePurchaseControllerTest.java b/tests/src/com/android/phone/slice/SlicePurchaseControllerTest.java
index ca67d63..5637c3a 100644
--- a/tests/src/com/android/phone/slice/SlicePurchaseControllerTest.java
+++ b/tests/src/com/android/phone/slice/SlicePurchaseControllerTest.java
@@ -62,6 +62,7 @@
 import com.android.internal.telephony.CommandsInterface;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.data.DataSettingsManager;
+import com.android.internal.telephony.flags.FeatureFlags;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -92,6 +93,7 @@
     private static final long THROTTLE_TIMEOUT = 4000;
 
     @Mock Phone mPhone;
+    @Mock FeatureFlags mFeatureFlags;
     @Mock CarrierConfigManager mCarrierConfigManager;
     @Mock CommandsInterface mCommandsInterface;
     @Mock ServiceState mServiceState;
@@ -153,7 +155,7 @@
 
         // create a spy to mock final PendingIntent methods
         SlicePurchaseController slicePurchaseController =
-                new SlicePurchaseController(mPhone, mHandler.getLooper());
+                new SlicePurchaseController(mPhone, mFeatureFlags, mHandler.getLooper());
         mSlicePurchaseController = spy(slicePurchaseController);
         doReturn(null).when(mSlicePurchaseController).createPendingIntent(
                 anyString(), anyInt(), anyBoolean());
@@ -644,6 +646,7 @@
 
     @Test
     public void testPurchasePremiumCapabilityResultNotificationsDisabled() {
+        doReturn(true).when(mFeatureFlags).slicingAdditionalErrorCodes();
         sendValidPurchaseRequest();
 
         // broadcast NOTIFICATIONS_DISABLED response from slice purchase application
diff --git a/tests/src/com/android/services/telephony/DisconnectCauseUtilTest.java b/tests/src/com/android/services/telephony/DisconnectCauseUtilTest.java
index 969622a..16a5cdb 100644
--- a/tests/src/com/android/services/telephony/DisconnectCauseUtilTest.java
+++ b/tests/src/com/android/services/telephony/DisconnectCauseUtilTest.java
@@ -22,6 +22,10 @@
 import static junit.framework.Assert.assertNotNull;
 import static junit.framework.TestCase.assertEquals;
 
+import static org.mockito.Mockito.mock;
+import static org.testng.Assert.assertFalse;
+import static org.testng.Assert.assertTrue;
+
 import android.content.Context;
 import android.content.res.Configuration;
 import android.content.res.Resources;
@@ -33,6 +37,7 @@
 import androidx.test.runner.AndroidJUnit4;
 
 import com.android.TelephonyTestBase;
+import com.android.internal.telephony.CallFailCause;
 import com.android.internal.telephony.GsmCdmaPhone;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneFactory;
@@ -42,7 +47,6 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.Mockito;
 
 import java.util.Locale;
 
@@ -60,11 +64,18 @@
     @Mock
     private GsmCdmaPhone mMockPhone;
 
+    private final FlagsAdapter mFeatureFlags = new FlagsAdapter(){
+        @Override
+        public boolean doNotOverridePreciseLabel() {
+            return true;
+        }
+    };
+
     @Before
     public void setUp() throws Exception {
         super.setUp();
         // objects that call static getInstance()
-        mMockPhone = Mockito.mock(GsmCdmaPhone.class);
+        mMockPhone = mock(GsmCdmaPhone.class);
         mContext = InstrumentationRegistry.getTargetContext();
         // set mocks
         setSinglePhone();
@@ -91,7 +102,7 @@
     @Test
     public void testDefaultDisconnectCauseBehaviorForCauseNotInCarrierBusyToneArray() {
         android.telecom.DisconnectCause tcCause = DisconnectCauseUtil.toTelecomDisconnectCause(
-                DisconnectCause.ERROR_UNSPECIFIED, EMPTY_STRING, PHONE_ID);
+                DisconnectCause.ERROR_UNSPECIFIED, -1, EMPTY_STRING, PHONE_ID, null, mFeatureFlags);
         // CODE
         assertEquals(android.telecom.DisconnectCause.ERROR, tcCause.getCode());
         // LABEL
@@ -101,29 +112,143 @@
     }
 
     /**
-     *  Simulate a Carrier classifying the DisconnectCause.ERROR_UNSPECIFIED as a
-     *  DisconnectCause.BUSY.  The code, label, and tone should match DisconnectCause.BUSY.
+     * verify that if a precise label is given Telephony, the label is not overridden by Telecom
      */
     @Test
-    public void testCarrierSetDisconnectCauseInBusyToneArray() {
-        int[] carrierBusyArr = {DisconnectCause.BUSY, DisconnectCause.ERROR_UNSPECIFIED};
+    public void testDefaultPhoneConfig_NoPreciseLabelGiven() {
+        android.telecom.DisconnectCause tcCause =
+                DisconnectCauseUtil.toTelecomDisconnectCause(DisconnectCause.BUSY,
+                        -1 /*  precise label is NOT given */,
+                        EMPTY_STRING, PHONE_ID, null /* carrier config is NOT set */,
+                        mFeatureFlags);
+        assertBusyCauseWithTargetLabel(R.string.callFailed_userBusy, tcCause);
+    }
+
+    /**
+     * verify that if a precise label is given Telephony, the label is not overridden by Telecom
+     */
+    @Test
+    public void testDefaultPhoneConfig_PreciseLabelProvided() {
+        android.telecom.DisconnectCause tcCause =
+                DisconnectCauseUtil.toTelecomDisconnectCause(DisconnectCause.BUSY,
+                        CallFailCause.USER_BUSY /* Telephony defined a precise label */,
+                        EMPTY_STRING, PHONE_ID, null /* carrier config is NOT set */,
+                        mFeatureFlags);
+        // Note: The precise label should not be overridden even though the carrier defined
+        // the cause to play a busy tone
+        assertBusyCauseWithTargetLabel(R.string.clh_callFailed_user_busy_txt, tcCause);
+    }
+
+    /**
+     * special case: The Carrier has re-defined a disconnect code that should play a busy tone.
+     * Thus, the code, label, and tone should be remapped.
+     * <p>
+     * <p>
+     * Verify that if the disconnect cause is in the carrier busy tone array that the expected
+     * label, tone, and code are returned.
+     */
+    @Test
+    public void testCarrierSetBusyToneArray_NoPreciseLabelGiven() {
+        android.telecom.DisconnectCause tcCause =
+                DisconnectCauseUtil.toTelecomDisconnectCause(
+                        DisconnectCause.BUSY, -1 /*  precise label is NOT given */,
+                        EMPTY_STRING, PHONE_ID, null, getBundleWithBusyToneArray(), mFeatureFlags);
+
+        assertBusyCauseWithTargetLabel(R.string.callFailed_userBusy, tcCause);
+    }
+
+    /**
+     * special case: The Carrier has re-defined a disconnect code that should play a busy tone.
+     * Thus, the code, label, and tone should be remapped.
+     * <p>
+     * <p>
+     * Verify that if the disconnect cause is in the carrier busy tone array and the Telephony
+     * stack has provided a precise label, the label is not overridden.
+     */
+    @Test
+    public void testCarrierSetBusyToneArray_PreciseLabelProvided() {
+        android.telecom.DisconnectCause tcCause =
+                DisconnectCauseUtil.toTelecomDisconnectCause(DisconnectCause.BUSY,
+                        CallFailCause.USER_BUSY /* Telephony defined a precise label */,
+                        EMPTY_STRING, PHONE_ID, null, getBundleWithBusyToneArray(), mFeatureFlags);
+        // Note: The precise label should not be overridden even though the carrier defined
+        // the cause to play a busy tone
+        assertBusyCauseWithTargetLabel(R.string.clh_callFailed_user_busy_txt, tcCause);
+    }
+
+    /**
+     * Ensure the helper doesCarrierClassifyDisconnectCauseAsBusyCause does not hit a NPE if a
+     * NULL carrier config is passed in.
+     */
+    @Test
+    public void testDoesCarrierClassifyDisconnectCauseAsBusyCause_nullConfig() {
+        assertFalse(DisconnectCauseUtil.doesCarrierClassifyDisconnectCauseAsBusyCause(-1, null));
+    }
+
+    /**
+     * Ensure the helper doesCarrierClassifyDisconnectCauseAsBusyCause does not hit a NPE if an
+     * EMPTY carrier config is passed in.
+     */
+    @Test
+    public void testDoesCarrierClassifyDisconnectCauseAsBusyCause_ConfigDoesNotDefineArray() {
         PersistableBundle config = new PersistableBundle();
+        assertFalse(DisconnectCauseUtil.doesCarrierClassifyDisconnectCauseAsBusyCause(-1, config));
+    }
+
+    /**
+     * Ensure the helper doesCarrierClassifyDisconnectCauseAsBusyCause does not hit a NPE if an
+     * EMPTY array is defined for KEY_DISCONNECT_CAUSE_PLAY_BUSYTONE_INT_ARRAY.
+     */
+    @Test
+    public void testDoesCarrierClassifyDisconnectCauseAsBusyCause_ConfigHasEmptyArray() {
+        PersistableBundle config = new PersistableBundle();
+        int[] carrierBusyArr = {}; // NOTE: This is intentionally let empty
 
         config.putIntArray(
                 CarrierConfigManager.KEY_DISCONNECT_CAUSE_PLAY_BUSYTONE_INT_ARRAY,
                 carrierBusyArr);
 
-        android.telecom.DisconnectCause tcCause =
-                DisconnectCauseUtil.toTelecomDisconnectCause(
-                        DisconnectCause.ERROR_UNSPECIFIED, -1,
-                        EMPTY_STRING, PHONE_ID, null, config);
+        assertFalse(DisconnectCauseUtil.doesCarrierClassifyDisconnectCauseAsBusyCause(-1, config));
+    }
 
-        // CODE
-        assertEquals(android.telecom.DisconnectCause.BUSY, tcCause.getCode());
-        // LABEL
-        safeAssertLabel(R.string.callFailed_userBusy, tcCause);
-        // TONE
-        assertEquals(TONE_SUP_BUSY, tcCause.getTone());
+    /**
+     * Ensure {@link DisconnectCauseUtil#doesCarrierClassifyDisconnectCauseAsBusyCause} returns
+     * FALSE is the passed in disconnect cause is NOT the busy tone array
+     */
+    @Test
+    public void testDoesCarrierClassifyDisconnectCauseAsBusyCause_ConfigHasBusyToneButNotMatch() {
+        assertFalse(DisconnectCauseUtil.doesCarrierClassifyDisconnectCauseAsBusyCause(-1,
+                getBundleWithBusyToneArray()));
+    }
+
+    /**
+     * Ensure {@link DisconnectCauseUtil#doesCarrierClassifyDisconnectCauseAsBusyCause} returns
+     * TRUE if the disconnect cause is defined in the busy tone array (by the Carrier)
+     */
+    @Test
+    public void testDoesCarrierClassifyDisconnectCauseAsBusyCause_ConfigHasBusyTone() {
+        assertTrue(DisconnectCauseUtil.doesCarrierClassifyDisconnectCauseAsBusyCause(
+                DisconnectCause.BUSY, getBundleWithBusyToneArray()));
+    }
+
+    private void assertBusyCauseWithTargetLabel(Integer targetLabel,
+            android.telecom.DisconnectCause disconnectCause) {
+        // CODE: Describes the cause of a disconnected call
+        assertEquals(android.telecom.DisconnectCause.BUSY, disconnectCause.getCode());
+        // LABEL: This is the label that the user sees
+        safeAssertLabel(targetLabel, disconnectCause);
+        // TONE: This is the DTMF tone being played to the user
+        assertEquals(TONE_SUP_BUSY, disconnectCause.getTone());
+    }
+
+    private PersistableBundle getBundleWithBusyToneArray() {
+        int[] carrierBusyArr = {DisconnectCause.BUSY};
+        PersistableBundle config = new PersistableBundle();
+
+        config.putIntArray(
+                CarrierConfigManager.KEY_DISCONNECT_CAUSE_PLAY_BUSYTONE_INT_ARRAY,
+                carrierBusyArr);
+        return config;
     }
 
     private void setSinglePhone() throws Exception {
diff --git a/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java b/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
index 090fc6e..f0a5220 100644
--- a/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
+++ b/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
@@ -16,6 +16,7 @@
 
 package com.android.services.telephony;
 
+import static android.telecom.Connection.PROPERTY_WIFI;
 import static android.telephony.DisconnectCause.EMERGENCY_PERM_FAILURE;
 import static android.telephony.DisconnectCause.EMERGENCY_TEMP_FAILURE;
 import static android.telephony.DisconnectCause.ERROR_UNSPECIFIED;
@@ -59,6 +60,7 @@
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
+import android.platform.test.flag.junit.SetFlagsRule;
 import android.telecom.Conference;
 import android.telecom.Conferenceable;
 import android.telecom.ConnectionRequest;
@@ -102,6 +104,7 @@
 import com.android.internal.telephony.emergency.EmergencyStateTracker;
 import com.android.internal.telephony.emergency.RadioOnHelper;
 import com.android.internal.telephony.emergency.RadioOnStateListener;
+import com.android.internal.telephony.flags.Flags;
 import com.android.internal.telephony.gsm.SuppServiceNotification;
 import com.android.internal.telephony.imsphone.ImsPhone;
 import com.android.internal.telephony.satellite.SatelliteController;
@@ -109,6 +112,7 @@
 
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.ArgumentCaptor;
@@ -132,6 +136,7 @@
 
 @RunWith(AndroidJUnit4.class)
 public class TelephonyConnectionServiceTest extends TelephonyTestBase {
+    @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
     private static final String NORMAL_ROUTED_EMERGENCY_NUMBER = "110";
     private static final String EMERGENCY_ROUTED_EMERGENCY_NUMBER = "911";
     private static final EmergencyNumber MOCK_NORMAL_NUMBER = new EmergencyNumber(
@@ -298,7 +303,7 @@
                 mTestConnectionService, mEmergencyStateTracker);
         replaceInstance(TelephonyConnectionService.class, "mSatelliteSOSMessageRecommender",
                 mTestConnectionService, mSatelliteSOSMessageRecommender);
-        doNothing().when(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any(), any());
+        doNothing().when(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any());
         doNothing().when(mSatelliteSOSMessageRecommender).onEmergencyCallConnectionStateChanged(
                 anyString(), anyInt());
         doReturn(CompletableFuture.completedFuture(NOT_DISCONNECTED))
@@ -312,6 +317,8 @@
         replaceInstance(TelephonyConnectionService.class,
                 "mSatelliteController", mTestConnectionService, mSatelliteController);
         mBinderStub = (IConnectionService.Stub) mTestConnectionService.onBind(null);
+        mSetFlagsRule.disableFlags(Flags.FLAG_CARRIER_ENABLED_SATELLITE_FLAG);
+        mSetFlagsRule.enableFlags(Flags.FLAG_DO_NOT_OVERRIDE_PRECISE_LABEL);
     }
 
     @After
@@ -1328,7 +1335,7 @@
             // This shouldn't happen
             fail();
         }
-        verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any(), any());
+        verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any());
     }
 
     /**
@@ -1440,7 +1447,107 @@
             // This shouldn't happen
             fail();
         }
-        verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any(), any());
+        verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any());
+    }
+
+    /**
+     * Test that the TelephonyConnectionService successfully turns radio on before placing the
+     * call when radio off because bluetooth on and wifi calling is not enabled
+     */
+    @Test
+    @SmallTest
+    public void testCreateOutgoingCall_turnOnRadio_bluetoothOn() {
+        doReturn(true).when(mDeviceState).isRadioPowerDownAllowedOnBluetooth(any());
+        doReturn(PhoneConstants.CELL_ON_FLAG).when(mDeviceState).getCellOnStatus(any());
+        Phone testPhone0 = makeTestPhone(0 /*phoneId*/, ServiceState.STATE_POWER_OFF,
+                false /*isEmergencyOnly*/);
+        Phone testPhone1 = makeTestPhone(1 /*phoneId*/, ServiceState.STATE_POWER_OFF,
+                false /*isEmergencyOnly*/);
+        doReturn(false).when(testPhone0).isRadioOn();
+        doReturn(false).when(testPhone0).isWifiCallingEnabled();
+        doReturn(false).when(testPhone1).isRadioOn();
+        doReturn(false).when(testPhone1).isWifiCallingEnabled();
+        List<Phone> phones = new ArrayList<>(2);
+        phones.add(testPhone0);
+        phones.add(testPhone1);
+        setPhones(phones);
+        setupHandleToPhoneMap(PHONE_ACCOUNT_HANDLE_1, testPhone0);
+        ConnectionRequest connectionRequest = new ConnectionRequest.Builder()
+                .setAccountHandle(PHONE_ACCOUNT_HANDLE_1)
+                .setAddress(TEST_ADDRESS)
+                .build();
+        mConnection = mTestConnectionService.onCreateOutgoingConnection(
+                PHONE_ACCOUNT_HANDLE_1, connectionRequest);
+
+        verify(mRadioOnHelper).triggerRadioOnAndListen(any(), eq(false),
+                eq(testPhone0), eq(false), eq(0));
+    }
+
+    /**
+     * Test that the TelephonyConnectionService successfully turns radio on before placing the
+     * call when phone is null, radio off because bluetooth on and wifi calling is not enabled
+     */
+    @Test
+    @SmallTest
+    public void testCreateOutgoingCall_forWearWatch_whenPhoneIsNull() {
+        doReturn(-1).when(mPhoneUtilsProxy).getSubIdForPhoneAccountHandle(any());
+        doReturn(true).when(mDeviceState).isRadioPowerDownAllowedOnBluetooth(any());
+        doReturn(PhoneConstants.CELL_ON_FLAG).when(mDeviceState).getCellOnStatus(any());
+        Phone testPhone0 = makeTestPhone(0 /*phoneId*/, ServiceState.STATE_POWER_OFF,
+                false /*isEmergencyOnly*/);
+        Phone testPhone1 = makeTestPhone(1 /*phoneId*/, ServiceState.STATE_POWER_OFF,
+                false /*isEmergencyOnly*/);
+        doReturn(false).when(testPhone0).isRadioOn();
+        doReturn(false).when(testPhone0).isWifiCallingEnabled();
+        doReturn(false).when(testPhone1).isRadioOn();
+        doReturn(false).when(testPhone1).isWifiCallingEnabled();
+        List<Phone> phones = new ArrayList<>(2);
+        phones.add(testPhone0);
+        phones.add(testPhone1);
+        setPhones(phones);
+        setupHandleToPhoneMap(PHONE_ACCOUNT_HANDLE_1, testPhone0);
+        ConnectionRequest connectionRequest = new ConnectionRequest.Builder()
+                .setAccountHandle(PHONE_ACCOUNT_HANDLE_1)
+                .setAddress(TEST_ADDRESS)
+                .build();
+        mConnection = mTestConnectionService.onCreateOutgoingConnection(
+                PHONE_ACCOUNT_HANDLE_1, connectionRequest);
+
+        verify(mRadioOnHelper).triggerRadioOnAndListen(any(), eq(false),
+                eq(testPhone0), eq(false), eq(0));
+    }
+
+    /**
+     * Test that the TelephonyConnectionService will not turns radio on before placing the
+     * call when radio off because bluetooth on and wifi calling is enabled
+     */
+    @Test
+    @SmallTest
+    public void testCreateOutgoingCall_notTurnOnRadio_bluetoothOnWifiCallingEnabled() {
+        doReturn(true).when(mDeviceState).isRadioPowerDownAllowedOnBluetooth(any());
+        doReturn(PhoneConstants.CELL_ON_FLAG).when(mDeviceState).getCellOnStatus(any());
+        Phone testPhone0 = makeTestPhone(0 /*phoneId*/, ServiceState.STATE_POWER_OFF,
+                false /*isEmergencyOnly*/);
+        Phone testPhone1 = makeTestPhone(1 /*phoneId*/, ServiceState.STATE_POWER_OFF,
+                false /*isEmergencyOnly*/);
+        doReturn(false).when(testPhone0).isRadioOn();
+        doReturn(true).when(testPhone0).isWifiCallingEnabled();
+        doReturn(false).when(testPhone1).isRadioOn();
+        doReturn(true).when(testPhone1).isWifiCallingEnabled();
+        List<Phone> phones = new ArrayList<>(2);
+        phones.add(testPhone0);
+        phones.add(testPhone1);
+        setPhones(phones);
+        setupHandleToPhoneMap(PHONE_ACCOUNT_HANDLE_1, testPhone0);
+        ConnectionRequest connectionRequest = new ConnectionRequest.Builder()
+                .setAccountHandle(PHONE_ACCOUNT_HANDLE_1)
+                .setAddress(TEST_ADDRESS)
+                .build();
+        mConnection = mTestConnectionService.onCreateOutgoingConnection(
+                PHONE_ACCOUNT_HANDLE_1, connectionRequest);
+
+        verify(mRadioOnHelper, times(0)).triggerRadioOnAndListen(any(),
+                eq(true), eq(testPhone0), eq(false), eq(0));
     }
 
     /**
@@ -1845,8 +1952,8 @@
     }
 
     /**
-     * For DSDA devices, placing an outgoing call on a 2nd sub will hold the existing connection on
-     * the first sub.
+     * For DSDA devices, placing an outgoing call on a 2nd sub will hold the existing ACTIVE
+     * connection on the first sub.
      */
     @Test
     @SmallTest
@@ -1855,13 +1962,34 @@
 
         ArrayList<android.telecom.Connection> tcs = new ArrayList<>();
         SimpleTelephonyConnection tc1 = createTestConnection(SUB1_HANDLE, 0, false);
+        tc1.setTelephonyConnectionActive();
         tcs.add(tc1);
+
         Conferenceable c = TelephonyConnectionService.maybeHoldCallsOnOtherSubs(
                 tcs, new ArrayList<>(), SUB2_HANDLE, mTelephonyManagerProxy);
         assertTrue(c.equals(tc1));
         assertTrue(tc1.wasHeld);
     }
 
+    /**
+     * For DSDA devices, if the existing connection was already held, placing an outgoing call on a
+     * 2nd sub will not attempt to hold the existing connection on the first sub.
+     */
+    @Test
+    @SmallTest
+    public void testNoHold_ifExistingConnectionAlreadyHeld_ForVirtualDsdaDevice() {
+        when(mTelephonyManagerProxy.isConcurrentCallsPossible()).thenReturn(true);
+
+        ArrayList<android.telecom.Connection> tcs = new ArrayList<>();
+        SimpleTelephonyConnection tc1 = createTestConnection(SUB1_HANDLE, 0, false);
+        tc1.setTelephonyConnectionOnHold();
+        tcs.add(tc1);
+
+        Conferenceable c = TelephonyConnectionService.maybeHoldCallsOnOtherSubs(
+                tcs, new ArrayList<>(), SUB2_HANDLE, mTelephonyManagerProxy);
+        assertNull(c);
+    }
+
     // For 'Virtual DSDA' devices, if there is an existing call on sub1, an outgoing call on sub2
     // will place the sub1 call on hold.
     @Test
@@ -2000,7 +2128,7 @@
                 .getDomainSelectionConnection(eq(mPhone0), eq(SELECTOR_TYPE_CALLING), eq(true));
         verify(mEmergencyStateTracker)
                 .startEmergencyCall(eq(mPhone0), eq(TELECOM_CALL_ID1), eq(false));
-        verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any(), eq(mPhone0));
+        verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any());
         verify(mEmergencyCallDomainSelectionConnection).createEmergencyConnection(any(), any());
 
         ArgumentCaptor<DialArgs> argsCaptor = ArgumentCaptor.forClass(DialArgs.class);
@@ -2030,7 +2158,7 @@
                 .getDomainSelectionConnection(eq(mPhone0), eq(SELECTOR_TYPE_CALLING), eq(true));
         verify(mEmergencyStateTracker)
                 .startEmergencyCall(eq(mPhone0), eq(TELECOM_CALL_ID1), eq(false));
-        verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any(), eq(mPhone0));
+        verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any());
         verify(mEmergencyCallDomainSelectionConnection).createEmergencyConnection(any(), any());
 
         ArgumentCaptor<DialArgs> argsCaptor = ArgumentCaptor.forClass(DialArgs.class);
@@ -2061,7 +2189,7 @@
 
         verify(mEmergencyStateTracker, times(1))
                 .startEmergencyCall(eq(mPhone0), eq(TELECOM_CALL_ID1), eq(false));
-        verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any(), eq(mPhone0));
+        verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any());
         verify(mDomainSelectionResolver, times(0))
                 .getDomainSelectionConnection(eq(mPhone0), eq(SELECTOR_TYPE_CALLING), eq(true));
         verify(mEmergencyCallDomainSelectionConnection, times(0))
@@ -2088,7 +2216,8 @@
         TestTelephonyConnection c = setupForReDialForDomainSelection(
                 mPhone0, selectedDomain, preciseDisconnectCause, disconnectCause, true);
 
-        assertTrue(mTestConnectionService.maybeReselectDomain(c, preciseDisconnectCause, null));
+        assertTrue(mTestConnectionService.maybeReselectDomain(c, null, true,
+                android.telephony.DisconnectCause.NOT_VALID));
         verify(mEmergencyCallDomainSelectionConnection).reselectDomain(any());
 
         ArgumentCaptor<DialArgs> argsCaptor = ArgumentCaptor.forClass(DialArgs.class);
@@ -2116,7 +2245,8 @@
         TestTelephonyConnection c = setupForReDialForDomainSelection(
                 mPhone0, selectedDomain, preciseDisconnectCause, disconnectCause, true);
 
-        assertTrue(mTestConnectionService.maybeReselectDomain(c, preciseDisconnectCause, null));
+        assertTrue(mTestConnectionService.maybeReselectDomain(c, null, true,
+                android.telephony.DisconnectCause.NOT_VALID));
         verify(mEmergencyCallDomainSelectionConnection).reselectDomain(any());
 
         ArgumentCaptor<DialArgs> argsCaptor = ArgumentCaptor.forClass(DialArgs.class);
@@ -2157,7 +2287,89 @@
         verify(mDomainSelectionResolver)
                 .getDomainSelectionConnection(eq(mPhone0), eq(SELECTOR_TYPE_CALLING), eq(false));
         verify(mNormalCallDomainSelectionConnection).createNormalConnection(any(), any());
-        verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any(), eq(mPhone0));
+        verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any());
+
+        ArgumentCaptor<DialArgs> argsCaptor = ArgumentCaptor.forClass(DialArgs.class);
+
+        verify(mPhone0).dial(anyString(), argsCaptor.capture(), any());
+        DialArgs dialArgs = argsCaptor.getValue();
+        assertNotNull("DialArgs param is null", dialArgs);
+        assertNotNull("intentExtras is null", dialArgs.intentExtras);
+        assertTrue(dialArgs.intentExtras.containsKey(PhoneConstants.EXTRA_DIAL_DOMAIN));
+        assertEquals(
+                selectedDomain, dialArgs.intentExtras.getInt(PhoneConstants.EXTRA_DIAL_DOMAIN, -1));
+    }
+
+    @Test
+    public void testDomainSelectionDialedSimEmergencyNumberOnlyFalse() throws Exception {
+        setupForCallTest();
+
+        int selectedDomain = DOMAIN_PS;
+
+        EmergencyNumber emergencyNumber = new EmergencyNumber(TEST_EMERGENCY_NUMBER, "", "",
+                EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED,
+                Collections.emptyList(),
+                EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE,
+                EmergencyNumber.EMERGENCY_CALL_ROUTING_EMERGENCY);
+
+        setupForDialForDomainSelection(mPhone0, selectedDomain, true);
+        doReturn(emergencyNumber).when(mEmergencyNumberTracker).getEmergencyNumber(anyString());
+        doReturn(Arrays.asList(emergencyNumber)).when(mEmergencyNumberTracker).getEmergencyNumbers(
+                anyString());
+        doReturn(false).when(mEmergencyNumberTracker).isEmergencyNumber(anyString());
+        getTestContext().getCarrierConfig(0 /*subId*/).putBoolean(
+                CarrierConfigManager.KEY_USE_ONLY_DIALED_SIM_ECC_LIST_BOOL, false);
+
+        mTestConnectionService.onCreateOutgoingConnection(PHONE_ACCOUNT_HANDLE_1,
+                createConnectionRequest(PHONE_ACCOUNT_HANDLE_1,
+                        TEST_EMERGENCY_NUMBER, TELECOM_CALL_ID1));
+
+        verify(mDomainSelectionResolver)
+                .getDomainSelectionConnection(eq(mPhone0), eq(SELECTOR_TYPE_CALLING), eq(true));
+        verify(mEmergencyStateTracker)
+                .startEmergencyCall(eq(mPhone0), eq(TELECOM_CALL_ID1), eq(false));
+        verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any());
+        verify(mEmergencyCallDomainSelectionConnection).createEmergencyConnection(any(), any());
+
+        ArgumentCaptor<DialArgs> argsCaptor = ArgumentCaptor.forClass(DialArgs.class);
+
+        verify(mPhone0).dial(anyString(), argsCaptor.capture(), any());
+        DialArgs dialArgs = argsCaptor.getValue();
+        assertNotNull("DialArgs param is null", dialArgs);
+        assertNotNull("intentExtras is null", dialArgs.intentExtras);
+        assertTrue(dialArgs.intentExtras.containsKey(PhoneConstants.EXTRA_DIAL_DOMAIN));
+        assertEquals(selectedDomain,
+                dialArgs.intentExtras.getInt(PhoneConstants.EXTRA_DIAL_DOMAIN, -1));
+    }
+
+    @Test
+    public void testDomainSelectionDialedSimEmergencyNumberOnlyTrue() throws Exception {
+        setupForCallTest();
+        int selectedDomain = DOMAIN_PS;
+
+        EmergencyNumber emergencyNumber = new EmergencyNumber(TEST_EMERGENCY_NUMBER, "", "",
+                EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_UNSPECIFIED,
+                Collections.emptyList(),
+                EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE,
+                EmergencyNumber.EMERGENCY_CALL_ROUTING_EMERGENCY);
+
+        setupForDialForDomainSelection(mPhone0, selectedDomain, false);
+        doReturn(true).when(mTelephonyManagerProxy).isCurrentEmergencyNumber(anyString());
+        doReturn(emergencyNumber).when(mEmergencyNumberTracker).getEmergencyNumber(anyString());
+        doReturn(Arrays.asList(emergencyNumber)).when(mEmergencyNumberTracker).getEmergencyNumbers(
+                anyString());
+        doReturn(false).when(mEmergencyNumberTracker).isEmergencyNumber(anyString());
+        getTestContext().getCarrierConfig(0 /*subId*/).putBoolean(
+                CarrierConfigManager.KEY_USE_ONLY_DIALED_SIM_ECC_LIST_BOOL, true);
+
+        mTestConnectionService.onCreateOutgoingConnection(PHONE_ACCOUNT_HANDLE_1,
+                createConnectionRequest(PHONE_ACCOUNT_HANDLE_1,
+                        TEST_EMERGENCY_NUMBER, TELECOM_CALL_ID1));
+
+        verify(mDomainSelectionResolver)
+                .getDomainSelectionConnection(eq(mPhone0), eq(SELECTOR_TYPE_CALLING), eq(false));
+        verify(mNormalCallDomainSelectionConnection).createNormalConnection(any(), any());
+        verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any());
 
         ArgumentCaptor<DialArgs> argsCaptor = ArgumentCaptor.forClass(DialArgs.class);
 
@@ -2447,14 +2659,14 @@
         c.setAddress(TEST_ADDRESS, TelecomManager.PRESENTATION_ALLOWED);
 
         ImsReasonInfo reasonInfo = new ImsReasonInfo(CODE_SIP_ALTERNATE_EMERGENCY_CALL, 0, null);
-        assertTrue(mTestConnectionService.maybeReselectDomain(c,
-                  preciseDisconnectCause, reasonInfo));
+        assertTrue(mTestConnectionService.maybeReselectDomain(c, reasonInfo, true,
+                android.telephony.DisconnectCause.NOT_VALID));
 
         verify(mDomainSelectionResolver)
                 .getDomainSelectionConnection(eq(mPhone0), eq(SELECTOR_TYPE_CALLING), eq(true));
         verify(mEmergencyStateTracker)
                 .startEmergencyCall(eq(mPhone0), eq(TELECOM_CALL_ID1), eq(false));
-        verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any(), eq(mPhone0));
+        verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any());
         verify(mEmergencyCallDomainSelectionConnection).createEmergencyConnection(any(), any());
 
         ArgumentCaptor<DialArgs> argsCaptor = ArgumentCaptor.forClass(DialArgs.class);
@@ -2488,14 +2700,14 @@
         c.setAddress(TEST_ADDRESS, TelecomManager.PRESENTATION_ALLOWED);
 
         ImsReasonInfo reasonInfo = new ImsReasonInfo(CODE_SIP_ALTERNATE_EMERGENCY_CALL, 0, null);
-        assertTrue(mTestConnectionService.maybeReselectDomain(c,
-                  preciseDisconnectCause, reasonInfo));
+        assertTrue(mTestConnectionService.maybeReselectDomain(c, reasonInfo, true,
+                android.telephony.DisconnectCause.NOT_VALID));
 
         verify(mDomainSelectionResolver)
                 .getDomainSelectionConnection(eq(mPhone0), eq(SELECTOR_TYPE_CALLING), eq(true));
         verify(mEmergencyStateTracker)
                 .startEmergencyCall(eq(mPhone0), eq(TELECOM_CALL_ID1), eq(false));
-        verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any(), eq(mPhone0));
+        verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any());
         verify(mEmergencyCallDomainSelectionConnection).createEmergencyConnection(any(), any());
 
         ArgumentCaptor<DialArgs> argsCaptor = ArgumentCaptor.forClass(DialArgs.class);
@@ -2717,7 +2929,8 @@
         doReturn(future).when(mEmergencyCallDomainSelectionConnection)
                 .reselectDomain(any());
 
-        assertTrue(mTestConnectionService.maybeReselectDomain(c, preciseDisconnectCause, null));
+        assertTrue(mTestConnectionService.maybeReselectDomain(c, null, true,
+                android.telephony.DisconnectCause.NOT_VALID));
         verify(mEmergencyCallDomainSelectionConnection).reselectDomain(any());
 
         // dialing is canceled
@@ -2754,12 +2967,12 @@
                 .startEmergencyCall(any(), anyString(), eq(false));
 
         ImsReasonInfo reasonInfo = new ImsReasonInfo(CODE_SIP_ALTERNATE_EMERGENCY_CALL, 0, null);
-        assertTrue(mTestConnectionService.maybeReselectDomain(c,
-                  preciseDisconnectCause, reasonInfo));
+        assertTrue(mTestConnectionService.maybeReselectDomain(c, reasonInfo, true,
+                android.telephony.DisconnectCause.NOT_VALID));
 
         verify(mEmergencyStateTracker)
                 .startEmergencyCall(eq(mPhone0), eq(TELECOM_CALL_ID1), eq(false));
-        verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any(), eq(mPhone0));
+        verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any());
 
         // dialing is canceled
         mTestConnectionService.onLocalHangup(c);
@@ -2796,8 +3009,8 @@
                 .createEmergencyConnection(any(), any());
 
         ImsReasonInfo reasonInfo = new ImsReasonInfo(CODE_SIP_ALTERNATE_EMERGENCY_CALL, 0, null);
-        assertTrue(mTestConnectionService.maybeReselectDomain(c,
-                  preciseDisconnectCause, reasonInfo));
+        assertTrue(mTestConnectionService.maybeReselectDomain(c, reasonInfo, true,
+                android.telephony.DisconnectCause.NOT_VALID));
 
         verify(mEmergencyCallDomainSelectionConnection).createEmergencyConnection(any(), any());
 
@@ -2827,7 +3040,7 @@
                 .getDomainSelectionConnection(eq(mPhone0), eq(SELECTOR_TYPE_CALLING), eq(true));
         verify(mEmergencyStateTracker)
                 .startEmergencyCall(eq(mPhone0), eq(TELECOM_CALL_ID1), eq(false));
-        verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any(), eq(mPhone0));
+        verify(mSatelliteSOSMessageRecommender).onEmergencyCallStarted(any());
         verify(mEmergencyCallDomainSelectionConnection).createEmergencyConnection(any(), any());
         verify(mPhone0).dial(anyString(), any(), any());
 
@@ -2912,6 +3125,52 @@
     }
 
     @Test
+    public void testDomainSelectionListenOriginalConnectionPropertiesChange() throws Exception {
+        setupForCallTest();
+
+        int selectedDomain = DOMAIN_PS;
+
+        setupForDialForDomainSelection(mPhone0, selectedDomain, true);
+
+        mTestConnectionService.onCreateOutgoingConnection(PHONE_ACCOUNT_HANDLE_1,
+                createConnectionRequest(PHONE_ACCOUNT_HANDLE_1,
+                        TEST_EMERGENCY_NUMBER, TELECOM_CALL_ID1));
+
+        verify(mDomainSelectionResolver)
+                .getDomainSelectionConnection(eq(mPhone0), eq(SELECTOR_TYPE_CALLING), eq(true));
+        verify(mEmergencyStateTracker)
+                .startEmergencyCall(eq(mPhone0), eq(TELECOM_CALL_ID1), eq(false));
+        verify(mEmergencyCallDomainSelectionConnection).createEmergencyConnection(any(), any());
+        verify(mPhone0).dial(anyString(), any(), any());
+
+        TestTelephonyConnection c = new TestTelephonyConnection();
+        c.setTelecomCallId(TELECOM_CALL_ID1);
+        c.setIsImsConnection(true);
+        Connection orgConn = c.getOriginalConnection();
+        doReturn(PhoneConstants.PHONE_TYPE_IMS).when(orgConn).getPhoneType();
+
+        TelephonyConnection.TelephonyConnectionListener connectionListener =
+                mTestConnectionService.getEmergencyConnectionListener();
+
+        doReturn(Call.State.DISCONNECTING).when(orgConn).getState();
+        connectionListener.onConnectionPropertiesChanged(c, PROPERTY_WIFI);
+
+        verify(mEmergencyStateTracker, times(0)).onEmergencyCallPropertiesChanged(
+                anyInt(), anyString());
+
+        doReturn(Call.State.ACTIVE).when(orgConn).getState();
+        connectionListener.onConnectionPropertiesChanged(c, PROPERTY_WIFI);
+
+        verify(mEmergencyStateTracker, times(1)).onEmergencyCallPropertiesChanged(
+                eq(PROPERTY_WIFI), eq(TELECOM_CALL_ID1));
+
+        connectionListener.onConnectionPropertiesChanged(c, 0);
+
+        verify(mEmergencyStateTracker, times(1)).onEmergencyCallPropertiesChanged(
+                eq(0), eq(TELECOM_CALL_ID1));
+    }
+
+    @Test
     public void testDomainSelectionTempFailure() throws Exception {
         setupForCallTest();
 
@@ -2926,7 +3185,8 @@
         doReturn(new CompletableFuture()).when(mEmergencyCallDomainSelectionConnection)
                 .reselectDomain(any());
 
-        assertTrue(mTestConnectionService.maybeReselectDomain(c, preciseDisconnectCause, null));
+        assertTrue(mTestConnectionService.maybeReselectDomain(c, null, true,
+                android.telephony.DisconnectCause.NOT_VALID));
         verify(mEmergencyCallDomainSelectionConnection).reselectDomain(any());
     }
 
@@ -2945,7 +3205,8 @@
         doReturn(new CompletableFuture()).when(mEmergencyCallDomainSelectionConnection)
                 .reselectDomain(any());
 
-        assertTrue(mTestConnectionService.maybeReselectDomain(c, preciseDisconnectCause, null));
+        assertTrue(mTestConnectionService.maybeReselectDomain(c, null, true,
+                android.telephony.DisconnectCause.NOT_VALID));
         verify(mEmergencyCallDomainSelectionConnection).reselectDomain(any());
     }
 
@@ -2973,7 +3234,7 @@
         verify(mDomainSelectionResolver)
                 .getDomainSelectionConnection(eq(mPhone0), eq(SELECTOR_TYPE_CALLING), eq(false));
         verify(mNormalCallDomainSelectionConnection).createNormalConnection(any(), any());
-        verify(mSatelliteSOSMessageRecommender, never()).onEmergencyCallStarted(any(), any());
+        verify(mSatelliteSOSMessageRecommender, never()).onEmergencyCallStarted(any());
 
         ArgumentCaptor<DialArgs> argsCaptor = ArgumentCaptor.forClass(DialArgs.class);
 
@@ -2998,7 +3259,7 @@
         verify(mDomainSelectionResolver)
                 .getDomainSelectionConnection(eq(mPhone0), eq(SELECTOR_TYPE_CALLING), eq(false));
         verify(mNormalCallDomainSelectionConnection).createNormalConnection(any(), any());
-        verify(mSatelliteSOSMessageRecommender, never()).onEmergencyCallStarted(any(), any());
+        verify(mSatelliteSOSMessageRecommender, never()).onEmergencyCallStarted(any());
 
         ArgumentCaptor<DialArgs> argsCaptor = ArgumentCaptor.forClass(DialArgs.class);
 
@@ -3023,7 +3284,9 @@
     }
 
     @Test
-    public void testNormalCallUsingNonTerrestrialNetwork() {
+    public void testNormalCallUsingNonTerrestrialNetwork_enableFlag() throws Exception {
+        mSetFlagsRule.enableFlags(Flags.FLAG_CARRIER_ENABLED_SATELLITE_FLAG);
+
         setupForCallTest();
         // Call is not supported while using satellite
         NetworkRegistrationInfo nri = new NetworkRegistrationInfo.Builder()
@@ -3053,6 +3316,26 @@
     }
 
     @Test
+    public void testNormalCallUsingNonTerrestrialNetwork_disableFlag() throws Exception {
+        mSetFlagsRule.disableFlags(Flags.FLAG_CARRIER_ENABLED_SATELLITE_FLAG);
+
+        setupForCallTest();
+        // Flag is disabled, so call is supported while using satellite
+        NetworkRegistrationInfo nri = new NetworkRegistrationInfo.Builder()
+                .setIsNonTerrestrialNetwork(true)
+                .setAvailableServices(List.of(NetworkRegistrationInfo.SERVICE_TYPE_DATA))
+                .build();
+        ServiceState ss = new ServiceState();
+        ss.addNetworkRegistrationInfo(nri);
+        when(mPhone0.getServiceState()).thenReturn(ss);
+        mConnection = mTestConnectionService.onCreateOutgoingConnection(PHONE_ACCOUNT_HANDLE_1,
+                createConnectionRequest(PHONE_ACCOUNT_HANDLE_1, "1234", TELECOM_CALL_ID1));
+        DisconnectCause disconnectCause = mConnection.getDisconnectCause();
+        assertNotEquals(android.telephony.DisconnectCause.SATELLITE_ENABLED,
+                disconnectCause.getTelephonyDisconnectCause());
+    }
+
+    @Test
     public void testIsAvailableForEmergencyCallsNotForCrossSim() {
         Phone mockPhone = Mockito.mock(Phone.class);
         when(mockPhone.getImsRegistrationTech()).thenReturn(
diff --git a/tests/src/com/android/services/telephony/TelephonyConnectionTest.java b/tests/src/com/android/services/telephony/TelephonyConnectionTest.java
index bf9fa01..c659d5e 100644
--- a/tests/src/com/android/services/telephony/TelephonyConnectionTest.java
+++ b/tests/src/com/android/services/telephony/TelephonyConnectionTest.java
@@ -14,6 +14,7 @@
 
 import static org.junit.Assert.assertNotEquals;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.eq;
 import static org.mockito.Mockito.doReturn;
@@ -280,7 +281,7 @@
         c.updateState();
 
         verify(mTelephonyConnectionService)
-                .maybeReselectDomain(any(), anyInt(), any());
+                .maybeReselectDomain(any(), any(), anyBoolean(), anyInt());
     }
 
     @Test
@@ -291,7 +292,7 @@
                 .getState();
         c.setTelephonyConnectionService(mTelephonyConnectionService);
         doReturn(false).when(mTelephonyConnectionService)
-                .maybeReselectDomain(any(), anyInt(), any());
+                .maybeReselectDomain(any(), any(), anyBoolean(), anyInt());
         c.updateState();
 
         assertEquals(STATE_DISCONNECTED, c.getState());
@@ -306,7 +307,7 @@
                 .getState();
         c.setTelephonyConnectionService(mTelephonyConnectionService);
         doReturn(true).when(mTelephonyConnectionService)
-                .maybeReselectDomain(any(), anyInt(), any());
+                .maybeReselectDomain(any(), any(), anyBoolean(), anyInt());
         c.resetOriginalConnectionCleared();
         c.updateState();
 
@@ -327,7 +328,7 @@
                 .when(mImsPhoneConnection).getEmergencyNumberInfo();
         c.setTelephonyConnectionService(mTelephonyConnectionService);
         doReturn(true).when(mTelephonyConnectionService)
-                .maybeReselectDomain(any(), anyInt(), any());
+                .maybeReselectDomain(any(), any(), anyBoolean(), anyInt());
         c.updateState();
 
         Integer serviceCategory = c.getEmergencyServiceCategory();
@@ -351,7 +352,7 @@
                 .when(mImsPhoneConnection).getEmergencyNumberInfo();
         c.setTelephonyConnectionService(mTelephonyConnectionService);
         doReturn(true).when(mTelephonyConnectionService)
-                .maybeReselectDomain(any(), anyInt(), any());
+                .maybeReselectDomain(any(), any(), anyBoolean(), anyInt());
         c.updateState();
 
         Integer serviceCategory = c.getEmergencyServiceCategory();
diff --git a/tests/src/com/android/services/telephony/domainselection/CarrierConfigHelperTest.java b/tests/src/com/android/services/telephony/domainselection/CarrierConfigHelperTest.java
new file mode 100644
index 0000000..5d4fe17
--- /dev/null
+++ b/tests/src/com/android/services/telephony/domainselection/CarrierConfigHelperTest.java
@@ -0,0 +1,277 @@
+/*
+ * Copyright (C) 2023 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.services.telephony.domainselection;
+
+import static android.telephony.AccessNetworkConstants.AccessNetworkType.EUTRAN;
+import static android.telephony.AccessNetworkConstants.AccessNetworkType.NGRAN;
+import static android.telephony.CarrierConfigManager.KEY_CARRIER_CONFIG_APPLIED_BOOL;
+import static android.telephony.CarrierConfigManager.ImsEmergency.KEY_EMERGENCY_OVER_IMS_SUPPORTED_3GPP_NETWORK_TYPES_INT_ARRAY;
+
+import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertTrue;
+import static junit.framework.Assert.assertNotNull;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyBoolean;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.ArgumentMatchers.anyString;
+import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.res.Resources;
+import android.os.HandlerThread;
+import android.os.Looper;
+import android.os.PersistableBundle;
+import android.telephony.CarrierConfigManager;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
+import android.testing.TestableLooper;
+import android.util.Log;
+
+import com.android.TestContext;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import java.util.concurrent.Executor;
+
+/**
+ * Unit tests for CarrierConfigHelper
+ */
+public class CarrierConfigHelperTest {
+    private static final String TAG = "CarrierConfigHelperTest";
+
+    private static final int SLOT_0 = 0;
+    private static final int SLOT_1 = 1;
+    private static final int SUB_1 = 1;
+    private static final int TEST_SIM_CARRIER_ID = 1911;
+
+    @Mock private Context mContext;
+    @Mock private SharedPreferences mSharedPreferences;
+    @Mock private SharedPreferences.Editor mEditor;
+    @Mock private Resources mResources;
+
+    private HandlerThread mHandlerThread;
+    private TestableLooper mLooper;
+    private CarrierConfigHelper mCarrierConfigHelper;
+    private CarrierConfigManager mCarrierConfigManager;
+    private TelephonyManager mTelephonyManager;
+
+    @Before
+    public void setUp() throws Exception {
+        MockitoAnnotations.initMocks(this);
+        mContext = new TestContext() {
+            @Override
+            public String getSystemServiceName(Class<?> serviceClass) {
+                if (serviceClass == TelephonyManager.class) {
+                    return Context.TELEPHONY_SERVICE;
+                } else if (serviceClass == CarrierConfigManager.class) {
+                    return Context.CARRIER_CONFIG_SERVICE;
+                }
+                return super.getSystemServiceName(serviceClass);
+            }
+
+            @Override
+            public String getOpPackageName() {
+                return "";
+            }
+
+            @Override
+            public Resources getResources() {
+                return mResources;
+            }
+        };
+
+        if (Looper.myLooper() == null) {
+            Looper.prepare();
+        }
+
+        mHandlerThread = new HandlerThread("CarrierConfigHelperTest");
+        mHandlerThread.start();
+
+        try {
+            mLooper = new TestableLooper(mHandlerThread.getLooper());
+        } catch (Exception e) {
+            logd("Unable to create looper from handler.");
+        }
+
+        doReturn(mEditor).when(mSharedPreferences).edit();
+
+        mCarrierConfigManager = mContext.getSystemService(CarrierConfigManager.class);
+        mTelephonyManager = mContext.getSystemService(TelephonyManager.class);
+        doReturn(2).when(mTelephonyManager).getActiveModemCount();
+        doReturn(TelephonyManager.SIM_STATE_READY)
+                .when(mTelephonyManager).getSimState(anyInt());
+
+        doReturn(new int[] { TEST_SIM_CARRIER_ID }).when(mResources).getIntArray(anyInt());
+
+        mCarrierConfigHelper = new CarrierConfigHelper(mContext, mHandlerThread.getLooper(),
+                mSharedPreferences);
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        if (mCarrierConfigHelper != null) {
+            mCarrierConfigHelper.destroy();
+            mCarrierConfigHelper = null;
+        }
+
+        if (mLooper != null) {
+            mLooper.destroy();
+            mLooper = null;
+        }
+    }
+
+    @Test
+    public void testInit() throws Exception {
+        ArgumentCaptor<CarrierConfigManager.CarrierConfigChangeListener> callbackCaptor =
+                ArgumentCaptor.forClass(CarrierConfigManager.CarrierConfigChangeListener.class);
+        ArgumentCaptor<Executor> executorCaptor = ArgumentCaptor.forClass(Executor.class);
+
+        verify(mCarrierConfigManager).registerCarrierConfigChangeListener(executorCaptor.capture(),
+                callbackCaptor.capture());
+        assertNotNull(executorCaptor.getValue());
+        assertNotNull(callbackCaptor.getValue());
+        assertFalse(mCarrierConfigHelper.isVoNrEmergencySupported(SLOT_0));
+    }
+
+    @Test
+    public void testCarrierConfigNotApplied() throws Exception {
+        ArgumentCaptor<CarrierConfigManager.CarrierConfigChangeListener> callbackCaptor =
+                ArgumentCaptor.forClass(CarrierConfigManager.CarrierConfigChangeListener.class);
+
+        verify(mCarrierConfigManager).registerCarrierConfigChangeListener(any(),
+                callbackCaptor.capture());
+
+        CarrierConfigManager.CarrierConfigChangeListener callback = callbackCaptor.getValue();
+
+        assertNotNull(callback);
+
+        // NR is included but carrier config is not applied.
+        PersistableBundle b = getPersistableBundle(new int[] { EUTRAN, NGRAN }, false);
+        doReturn(b).when(mCarrierConfigManager).getConfigForSubId(anyInt(), anyString());
+        callback.onCarrierConfigChanged(SLOT_0, SUB_1, 0, 0);
+
+        assertFalse(mCarrierConfigHelper.isVoNrEmergencySupported(SLOT_0));
+    }
+
+    @Test
+    public void testCarrierConfigApplied() throws Exception {
+        ArgumentCaptor<CarrierConfigManager.CarrierConfigChangeListener> callbackCaptor =
+                ArgumentCaptor.forClass(CarrierConfigManager.CarrierConfigChangeListener.class);
+
+        verify(mCarrierConfigManager).registerCarrierConfigChangeListener(any(),
+                callbackCaptor.capture());
+
+        CarrierConfigManager.CarrierConfigChangeListener callback = callbackCaptor.getValue();
+
+        assertNotNull(callback);
+
+        // NR is included and carrier config is applied.
+        PersistableBundle b = getPersistableBundle(new int[] { EUTRAN, NGRAN }, true);
+        doReturn(b).when(mCarrierConfigManager).getConfigForSubId(anyInt(), anyString());
+        callback.onCarrierConfigChanged(SLOT_0, SUB_1, 0, 0);
+
+        assertTrue(mCarrierConfigHelper.isVoNrEmergencySupported(SLOT_0));
+        assertFalse(mCarrierConfigHelper.isVoNrEmergencySupported(SLOT_1));
+
+        verify(mEditor).putBoolean(eq(CarrierConfigHelper.KEY_VONR_EMERGENCY_SUPPORT + SLOT_0),
+                eq(true));
+
+        // NR is not included and carrier config is applied.
+        b = getPersistableBundle(new int[] { EUTRAN }, true);
+        doReturn(b).when(mCarrierConfigManager).getConfigForSubId(anyInt(), anyString());
+        callback.onCarrierConfigChanged(SLOT_0, SUB_1, 0, 0);
+
+        assertFalse(mCarrierConfigHelper.isVoNrEmergencySupported(SLOT_0));
+
+        verify(mEditor).putBoolean(eq(CarrierConfigHelper.KEY_VONR_EMERGENCY_SUPPORT + SLOT_0),
+                eq(false));
+    }
+
+    @Test
+    public void testCarrierConfigInvalidSubId() throws Exception {
+        ArgumentCaptor<CarrierConfigManager.CarrierConfigChangeListener> callbackCaptor =
+                ArgumentCaptor.forClass(CarrierConfigManager.CarrierConfigChangeListener.class);
+
+        verify(mCarrierConfigManager).registerCarrierConfigChangeListener(any(),
+                callbackCaptor.capture());
+
+        CarrierConfigManager.CarrierConfigChangeListener callback = callbackCaptor.getValue();
+
+        assertNotNull(callback);
+
+        // NR is included and carrier config is applied.
+        PersistableBundle b = getPersistableBundle(new int[] { EUTRAN, NGRAN }, true);
+        doReturn(b).when(mCarrierConfigManager).getConfigForSubId(anyInt(), anyString());
+
+        // Invalid subscription
+        callback.onCarrierConfigChanged(SLOT_0, SubscriptionManager.INVALID_SUBSCRIPTION_ID, 0, 0);
+
+        assertFalse(mCarrierConfigHelper.isVoNrEmergencySupported(SLOT_0));
+    }
+
+    @Test
+    public void testRestoreFromSharedPreferences() throws Exception {
+        doReturn(true).when(mSharedPreferences).getBoolean(anyString(), anyBoolean());
+        mCarrierConfigHelper = new CarrierConfigHelper(mContext, mHandlerThread.getLooper(),
+                mSharedPreferences);
+
+        assertTrue(mCarrierConfigHelper.isVoNrEmergencySupported(SLOT_0));
+    }
+
+    @Test
+    public void testCarrierIgnoreNrWhenSimRemoved() throws Exception {
+        ArgumentCaptor<CarrierConfigManager.CarrierConfigChangeListener> callbackCaptor =
+                ArgumentCaptor.forClass(CarrierConfigManager.CarrierConfigChangeListener.class);
+
+        verify(mCarrierConfigManager).registerCarrierConfigChangeListener(any(),
+                callbackCaptor.capture());
+
+        CarrierConfigManager.CarrierConfigChangeListener callback = callbackCaptor.getValue();
+
+        assertNotNull(callback);
+
+        // NR is included and carrier config for TEST SIM is applied.
+        PersistableBundle b = getPersistableBundle(new int[] { EUTRAN, NGRAN }, true);
+        doReturn(b).when(mCarrierConfigManager).getConfigForSubId(anyInt(), anyString());
+        callback.onCarrierConfigChanged(SLOT_0, SUB_1, TEST_SIM_CARRIER_ID, 0);
+
+        // NR is ignored.
+        assertFalse(mCarrierConfigHelper.isVoNrEmergencySupported(SLOT_0));
+        assertFalse(mCarrierConfigHelper.isVoNrEmergencySupported(SLOT_1));
+    }
+
+    private static PersistableBundle getPersistableBundle(int[] imsRats, boolean applied) {
+        PersistableBundle bundle  = new PersistableBundle();
+        bundle.putIntArray(KEY_EMERGENCY_OVER_IMS_SUPPORTED_3GPP_NETWORK_TYPES_INT_ARRAY, imsRats);
+        bundle.putBoolean(KEY_CARRIER_CONFIG_APPLIED_BOOL, applied);
+        return bundle;
+    }
+
+    private static void logd(String str) {
+        Log.d(TAG, str);
+    }
+}
diff --git a/tests/src/com/android/services/telephony/domainselection/CrossSimRedialingControllerTest.java b/tests/src/com/android/services/telephony/domainselection/CrossSimRedialingControllerTest.java
index a32329d..2ed91b8 100644
--- a/tests/src/com/android/services/telephony/domainselection/CrossSimRedialingControllerTest.java
+++ b/tests/src/com/android/services/telephony/domainselection/CrossSimRedialingControllerTest.java
@@ -27,6 +27,7 @@
 import static com.android.services.telephony.domainselection.CrossSimRedialingController.MSG_QUICK_CROSS_STACK_TIMEOUT;
 
 import static junit.framework.Assert.assertFalse;
+import static junit.framework.Assert.assertNotNull;
 import static junit.framework.Assert.assertTrue;
 
 import static org.mockito.ArgumentMatchers.anyInt;
@@ -42,6 +43,7 @@
 import android.os.PersistableBundle;
 import android.telephony.CarrierConfigManager;
 import android.telephony.TelephonyManager;
+import android.telephony.emergency.EmergencyNumber;
 import android.testing.TestableLooper;
 import android.util.Log;
 
@@ -54,6 +56,11 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 /**
  * Unit tests for CrossSimRedialingController
  */
@@ -66,8 +73,6 @@
     private static final String TELECOM_CALL_ID1 = "TC1";
     private static final String TEST_EMERGENCY_NUMBER = "911";
 
-    @Mock private CarrierConfigManager mCarrierConfigManager;
-    @Mock private TelephonyManager mTelephonyManager;
     @Mock private EmergencyCallDomainSelector mEcds;
     @Mock private CrossSimRedialingController.EmergencyNumberHelper mEmergencyNumberHelper;
 
@@ -76,6 +81,8 @@
     private HandlerThread mHandlerThread;
     private TestableLooper mLooper;
     private CrossSimRedialingController mCsrController;
+    private CarrierConfigManager mCarrierConfigManager;
+    private TelephonyManager mTelephonyManager;
 
     @Before
     public void setUp() throws Exception {
@@ -462,6 +469,42 @@
         verify(mEcds, times(0)).notifyCrossStackTimerExpired();
     }
 
+    @Test
+    public void testEmergencyNumberHelper() throws Exception {
+        mCsrController = new CrossSimRedialingController(mContext,
+                mHandlerThread.getLooper());
+
+        CrossSimRedialingController.EmergencyNumberHelper helper =
+                mCsrController.getEmergencyNumberHelper();
+
+        assertNotNull(helper);
+
+        EmergencyNumber num1 = new EmergencyNumber(TEST_EMERGENCY_NUMBER, "us", "",
+                EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_POLICE, new ArrayList<String>(),
+                EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE,
+                EmergencyNumber.EMERGENCY_CALL_ROUTING_UNKNOWN);
+
+        EmergencyNumber num2 = new EmergencyNumber("119", "jp", "",
+                EmergencyNumber.EMERGENCY_SERVICE_CATEGORY_POLICE, new ArrayList<String>(),
+                EmergencyNumber.EMERGENCY_NUMBER_SOURCE_DATABASE,
+                EmergencyNumber.EMERGENCY_CALL_ROUTING_UNKNOWN);
+
+        Map<Integer, List<EmergencyNumber>> lists = new HashMap<>();
+        List<EmergencyNumber> list = new ArrayList<>();
+        list.add(num1);
+        lists.put(1, list);
+
+        list = new ArrayList<>();
+        list.add(num2);
+        lists.put(2, list);
+
+        doReturn(lists).when(mTelephonyManager).getEmergencyNumberList();
+
+        assertTrue(helper.isEmergencyNumber(1, TEST_EMERGENCY_NUMBER));
+        assertFalse(helper.isEmergencyNumber(2, TEST_EMERGENCY_NUMBER));
+        assertFalse(helper.isEmergencyNumber(3, TEST_EMERGENCY_NUMBER));
+    }
+
     private void createController() throws Exception {
         mCsrController = new CrossSimRedialingController(mContext,
                 mHandlerThread.getLooper(), mEmergencyNumberHelper);
diff --git a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
index 9be85ed..eab40f9 100644
--- a/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
+++ b/tests/src/com/android/services/telephony/domainselection/EmergencyCallDomainSelectorTest.java
@@ -52,6 +52,7 @@
 import static android.telephony.NetworkRegistrationInfo.DOMAIN_PS;
 import static android.telephony.NetworkRegistrationInfo.REGISTRATION_STATE_HOME;
 import static android.telephony.NetworkRegistrationInfo.REGISTRATION_STATE_UNKNOWN;
+import static android.telephony.PreciseDisconnectCause.SERVICE_OPTION_NOT_AVAILABLE;
 
 import static com.android.services.telephony.domainselection.EmergencyCallDomainSelector.MSG_MAX_CELLULAR_TIMEOUT;
 import static com.android.services.telephony.domainselection.EmergencyCallDomainSelector.MSG_NETWORK_SCAN_TIMEOUT;
@@ -75,6 +76,7 @@
 import android.annotation.NonNull;
 import android.annotation.Nullable;
 import android.content.Context;
+import android.content.res.Resources;
 import android.net.ConnectivityManager;
 import android.net.NetworkRequest;
 import android.os.Handler;
@@ -94,12 +96,12 @@
 import android.telephony.EmergencyRegResult;
 import android.telephony.NetworkRegistrationInfo;
 import android.telephony.PreciseDisconnectCause;
+import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
 import android.telephony.TransportSelectorCallback;
 import android.telephony.WwanSelectorCallback;
 import android.telephony.ims.ImsManager;
 import android.telephony.ims.ImsMmTelManager;
-import android.telephony.ims.ImsReasonInfo;
 import android.telephony.ims.ProvisioningManager;
 import android.test.suitebuilder.annotation.SmallTest;
 import android.testing.TestableLooper;
@@ -139,6 +141,8 @@
     @Mock private DomainSelectorBase.DestroyListener mDestroyListener;
     @Mock private ProvisioningManager mProvisioningManager;
     @Mock private CrossSimRedialingController mCsrdCtrl;
+    @Mock private CarrierConfigHelper mCarrierConfigHelper;
+    @Mock private Resources mResources;
 
     private Context mContext;
 
@@ -188,6 +192,11 @@
             public String getOpPackageName() {
                 return "";
             }
+
+            @Override
+            public Resources getResources() {
+                return mResources;
+            }
         };
 
         if (Looper.myLooper() == null) {
@@ -207,6 +216,8 @@
         when(mTelephonyManager.createForSubscriptionId(anyInt()))
                 .thenReturn(mTelephonyManager);
         when(mTelephonyManager.getNetworkCountryIso()).thenReturn("");
+        when(mTelephonyManager.getSimState(anyInt())).thenReturn(TelephonyManager.SIM_STATE_READY);
+        when(mTelephonyManager.getActiveModemCount()).thenReturn(1);
 
         mCarrierConfigManager = mContext.getSystemService(CarrierConfigManager.class);
         when(mCarrierConfigManager.getConfigForSubId(anyInt()))
@@ -253,6 +264,8 @@
             }
         }).when(mWwanSelectorCallback).onRequestEmergencyNetworkScan(
                 any(), anyInt(), any(), any());
+
+        when(mResources.getStringArray(anyInt())).thenReturn(null);
     }
 
     @After
@@ -279,6 +292,102 @@
     }
 
     @Test
+    public void testNoRedundantDomainSelectionFromInitialState() throws Exception {
+        createSelector(SLOT_0_SUB_ID);
+        unsolBarringInfoChanged(true);
+
+        EmergencyRegResult regResult = getEmergencyRegResult(EUTRAN, REGISTRATION_STATE_HOME,
+                NetworkRegistrationInfo.DOMAIN_CS | NetworkRegistrationInfo.DOMAIN_PS,
+                true, true, 0, 0, "", "");
+        SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
+        mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+        processAllMessages();
+
+        bindImsService();
+        unsolBarringInfoChanged(false);
+
+        processAllMessages();
+
+        verify(mTransportSelectorCallback, times(1)).onWwanSelected(any());
+        verify(mWwanSelectorCallback, times(1)).onDomainSelected(anyInt(), anyBoolean());
+    }
+
+    @Test
+    public void testNoUnexpectedTransportChangeFromInitialState() throws Exception {
+        PersistableBundle bundle = getDefaultPersistableBundle();
+        int[] domainPreference = new int[] {
+                CarrierConfigManager.ImsEmergency.DOMAIN_PS_NON_3GPP,
+                CarrierConfigManager.ImsEmergency.DOMAIN_PS_3GPP,
+                CarrierConfigManager.ImsEmergency.DOMAIN_CS
+                };
+        bundle.putIntArray(KEY_EMERGENCY_DOMAIN_PREFERENCE_INT_ARRAY, domainPreference);
+        when(mCarrierConfigManager.getConfigForSubId(anyInt())).thenReturn(bundle);
+
+        createSelector(SLOT_0_SUB_ID);
+        unsolBarringInfoChanged(true);
+
+        EmergencyRegResult regResult = getEmergencyRegResult(EUTRAN, REGISTRATION_STATE_HOME,
+                NetworkRegistrationInfo.DOMAIN_CS | NetworkRegistrationInfo.DOMAIN_PS,
+                true, true, 0, 0, "", "");
+        SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
+        mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+        processAllMessages();
+
+        bindImsServiceUnregistered();
+        bindImsService(true);
+
+        processAllMessages();
+
+        verify(mTransportSelectorCallback, times(1)).onWwanSelected(any());
+        verify(mTransportSelectorCallback, times(0)).onWlanSelected(anyBoolean());
+    }
+
+    @Test
+    public void testNoRedundantScanRequestFromInitialState() throws Exception {
+        createSelector(SLOT_0_SUB_ID);
+        unsolBarringInfoChanged(true);
+
+        EmergencyRegResult regResult = getEmergencyRegResult(
+                UNKNOWN, REGISTRATION_STATE_UNKNOWN, 0, false, false, 0, 0, "", "");
+        SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
+        mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+        processAllMessages();
+
+        bindImsService();
+        unsolBarringInfoChanged(false);
+
+        processAllMessages();
+
+        verify(mTransportSelectorCallback, times(1)).onWwanSelected(any());
+        verify(mWwanSelectorCallback, times(1)).onRequestEmergencyNetworkScan(
+                any(), anyInt(), any(), any());
+    }
+
+    @Test
+    public void testNoRedundantTerminationFromInitialState() throws Exception {
+        createSelector(SLOT_0_SUB_ID);
+        unsolBarringInfoChanged(true);
+        doReturn(2).when(mTelephonyManager).getActiveModemCount();
+        doReturn(TelephonyManager.SIM_STATE_PIN_REQUIRED)
+                .when(mTelephonyManager).getSimState(anyInt());
+        doReturn(true).when(mCsrdCtrl).isThereOtherSlot();
+        doReturn(new String[] {"jp"}).when(mResources).getStringArray(anyInt());
+
+        EmergencyRegResult regResult = getEmergencyRegResult(
+                UNKNOWN, REGISTRATION_STATE_UNKNOWN, 0, false, false, 0, 0, "", "", "jp");
+        SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
+        mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+        processAllMessages();
+
+        bindImsService();
+        unsolBarringInfoChanged(false);
+
+        verify(mTransportSelectorCallback, times(0)).onWlanSelected(anyBoolean());
+        verify(mTransportSelectorCallback, times(0)).onWwanSelected(any());
+        verify(mTransportSelectorCallback, times(1)).onSelectionTerminated(anyInt());
+    }
+
+    @Test
     public void testDefaultCombinedImsRegisteredBarredSelectCs() throws Exception {
         createSelector(SLOT_0_SUB_ID);
         unsolBarringInfoChanged(true);
@@ -335,6 +444,41 @@
     }
 
     @Test
+    public void testDefaultCombinedImsRegisteredSelectPsThenExtendedServiceRequestFails()
+            throws Exception {
+        createSelector(SLOT_0_SUB_ID);
+        unsolBarringInfoChanged(false);
+
+        EmergencyRegResult regResult = getEmergencyRegResult(EUTRAN, REGISTRATION_STATE_HOME,
+                NetworkRegistrationInfo.DOMAIN_CS | NetworkRegistrationInfo.DOMAIN_PS,
+                true, true, 0, 0, "", "");
+        SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
+        mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+        processAllMessages();
+
+        bindImsService();
+
+        verifyPsDialed();
+
+        mDomainSelector.reselectDomain(attr);
+        processAllMessages();
+
+        verifyCsDialed();
+
+        //Extended service request failed
+        SelectionAttributes.Builder builder =
+                new SelectionAttributes.Builder(SLOT_0, SLOT_0_SUB_ID, SELECTOR_TYPE_CALLING)
+                .setCsDisconnectCause(SERVICE_OPTION_NOT_AVAILABLE)
+                .setEmergency(true)
+                .setEmergencyRegResult(regResult);
+        attr = builder.build();
+        mDomainSelector.reselectDomain(attr);
+        processAllMessages();
+
+        verifyScanCsPreferred();
+    }
+
+    @Test
     public void testDefaultCombinedImsNotRegisteredSelectCs() throws Exception {
         createSelector(SLOT_0_SUB_ID);
         unsolBarringInfoChanged(false);
@@ -1000,6 +1144,31 @@
     }
 
     @Test
+    public void testSimLockEpsImsRegisteredBarredScanNoTimeoutWifi() throws Exception {
+        when(mTelephonyManager.getSimState(anyInt())).thenReturn(
+                TelephonyManager.SIM_STATE_PIN_REQUIRED);
+        PersistableBundle bundle = getDefaultPersistableBundle();
+        bundle.putBoolean(KEY_EMERGENCY_CALL_OVER_EMERGENCY_PDN_BOOL, true);
+        when(mCarrierConfigManager.getConfigForSubId(anyInt())).thenReturn(bundle);
+
+        createSelector(SLOT_0_SUB_ID);
+        unsolBarringInfoChanged(true);
+
+        EmergencyRegResult regResult = getEmergencyRegResult(EUTRAN, REGISTRATION_STATE_HOME,
+                NetworkRegistrationInfo.DOMAIN_PS,
+                true, true, 0, 0, "", "");
+        SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
+        mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+        processAllMessages();
+
+        bindImsService(true);
+
+        verifyScanPsPreferred();
+
+        assertFalse(mDomainSelector.hasMessages(MSG_NETWORK_SCAN_TIMEOUT));
+    }
+
+    @Test
     public void testVoWifiSosPdnRequiresSettingEnabled() throws Exception {
         PersistableBundle bundle = getDefaultPersistableBundle();
         bundle.putBoolean(KEY_EMERGENCY_CALL_OVER_EMERGENCY_PDN_BOOL, true);
@@ -1150,6 +1319,7 @@
         doReturn(TelephonyManager.SIM_STATE_PIN_REQUIRED)
                 .when(mTelephonyManager).getSimState(anyInt());
         doReturn(true).when(mCsrdCtrl).isThereOtherSlot();
+        doReturn(new String[] {"jp"}).when(mResources).getStringArray(anyInt());
 
         EmergencyRegResult regResult = getEmergencyRegResult(EUTRAN, REGISTRATION_STATE_UNKNOWN,
                 0, false, false, 0, 0, "", "", "jp");
@@ -1172,6 +1342,7 @@
         doReturn(TelephonyManager.SIM_STATE_PIN_REQUIRED)
                 .when(mTelephonyManager).getSimState(anyInt());
         doReturn(false).when(mCsrdCtrl).isThereOtherSlot();
+        doReturn(new String[] {"jp"}).when(mResources).getStringArray(anyInt());
 
         EmergencyRegResult regResult = getEmergencyRegResult(EUTRAN, REGISTRATION_STATE_UNKNOWN,
                 0, false, false, 0, 0, "", "", "jp");
@@ -1271,7 +1442,7 @@
 
         setupForScanListTest(bundle);
 
-        verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(false, false, false));
+        verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(false, false));
     }
 
     @Test
@@ -1285,7 +1456,7 @@
 
         setupForScanListTest(bundle);
 
-        verifyPsPreferredScanList(mDomainSelector.getNextPreferredNetworks(false, false, false));
+        verifyPsPreferredScanList(mDomainSelector.getNextPreferredNetworks(false, false));
     }
 
     @Test
@@ -1300,7 +1471,7 @@
 
         setupForScanListTest(bundle);
 
-        verifyPsOnlyScanList(mDomainSelector.getNextPreferredNetworks(false, false, false));
+        verifyPsOnlyScanList(mDomainSelector.getNextPreferredNetworks(false, false));
     }
 
     @Test
@@ -1315,7 +1486,7 @@
 
         setupForScanListTest(bundle);
 
-        verifyCsOnlyScanList(mDomainSelector.getNextPreferredNetworks(false, false, false));
+        verifyCsOnlyScanList(mDomainSelector.getNextPreferredNetworks(false, false));
 
     }
 
@@ -1330,7 +1501,7 @@
 
         setupForScanListTest(bundle);
 
-        verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(true, false, false));
+        verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(true, false));
     }
 
     @Test
@@ -1344,7 +1515,7 @@
 
         setupForScanListTest(bundle);
 
-        verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(true, false, false));
+        verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(true, false));
     }
 
     @Test
@@ -1360,7 +1531,7 @@
 
         setupForScanListTest(bundle);
 
-        verifyPsOnlyScanList(mDomainSelector.getNextPreferredNetworks(true, false, false));
+        verifyPsOnlyScanList(mDomainSelector.getNextPreferredNetworks(true, false));
     }
 
     @Test
@@ -1375,7 +1546,7 @@
 
         setupForScanListTest(bundle);
 
-        verifyCsOnlyScanList(mDomainSelector.getNextPreferredNetworks(true, false, false));
+        verifyCsOnlyScanList(mDomainSelector.getNextPreferredNetworks(true, false));
     }
 
     @Test
@@ -1392,7 +1563,7 @@
         bindImsService();
         processAllMessages();
 
-        verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(false, false, false));
+        verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(false, false));
     }
 
     @Test
@@ -1409,7 +1580,7 @@
         bindImsService();
         processAllMessages();
 
-        verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(false, false, false));
+        verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(false, false));
     }
 
     @Test
@@ -1427,7 +1598,7 @@
         bindImsService();
         processAllMessages();
 
-        verifyPsOnlyScanList(mDomainSelector.getNextPreferredNetworks(false, false, false));
+        verifyPsOnlyScanList(mDomainSelector.getNextPreferredNetworks(false, false));
     }
 
     @Test
@@ -1444,7 +1615,7 @@
         bindImsService();
         processAllMessages();
 
-        verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(true, false, false));
+        verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(true, false));
     }
 
     @Test
@@ -1461,7 +1632,7 @@
         bindImsService();
         processAllMessages();
 
-        verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(true, false, false));
+        verifyCsPreferredScanList(mDomainSelector.getNextPreferredNetworks(true, false));
     }
 
     @Test
@@ -1480,7 +1651,7 @@
         bindImsService();
         processAllMessages();
 
-        verifyPsOnlyScanList(mDomainSelector.getNextPreferredNetworks(true, false, false));
+        verifyPsOnlyScanList(mDomainSelector.getNextPreferredNetworks(true, false));
     }
 
     @Test
@@ -1496,7 +1667,7 @@
 
         setupForScanListTest(bundle);
 
-        List<Integer> networks = mDomainSelector.getNextPreferredNetworks(false, true, false);
+        List<Integer> networks = mDomainSelector.getNextPreferredNetworks(false, true);
 
         assertFalse(networks.isEmpty());
         assertTrue(networks.contains(EUTRAN));
@@ -1512,6 +1683,7 @@
     public void testStartCrossStackTimer() throws Exception {
         createSelector(SLOT_0_SUB_ID);
         unsolBarringInfoChanged(false);
+        doReturn(2).when(mTelephonyManager).getActiveModemCount();
 
         EmergencyRegResult regResult = getEmergencyRegResult(
                 UNKNOWN, REGISTRATION_STATE_UNKNOWN, 0, false, false, 0, 0, "", "");
@@ -1652,36 +1824,6 @@
     }
 
     @Test
-    public void testDefaultEpsImsRegisteredSelectPsEmergencyRegFailed() throws Exception {
-        createSelector(SLOT_0_SUB_ID);
-        unsolBarringInfoChanged(false);
-
-        EmergencyRegResult regResult = getEmergencyRegResult(EUTRAN, REGISTRATION_STATE_HOME,
-                NetworkRegistrationInfo.DOMAIN_PS,
-                true, true, 0, 0, "", "");
-        SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
-        mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
-        processAllMessages();
-
-        bindImsService();
-
-        verifyPsDialed();
-
-        attr = new SelectionAttributes.Builder(SLOT_0, SLOT_0_SUB_ID, SELECTOR_TYPE_CALLING)
-                .setEmergency(true)
-                .setEmergencyRegResult(regResult)
-                .setPsDisconnectCause(
-                        new ImsReasonInfo(ImsReasonInfo.CODE_LOCAL_NOT_REGISTERED, 0, null))
-                .build();
-        mDomainSelector.reselectDomain(attr);
-        processAllMessages();
-
-        verify(mWwanSelectorCallback, times(1)).onRequestEmergencyNetworkScan(
-                any(), anyInt(), any(), any());
-        assertFalse(mAccessNetwork.contains(EUTRAN));
-    }
-
-    @Test
     public void testMaxCellularTimeout() throws Exception {
         PersistableBundle bundle = getDefaultPersistableBundle();
         bundle.putBoolean(KEY_EMERGENCY_CALL_OVER_EMERGENCY_PDN_BOOL, true);
@@ -1706,6 +1848,20 @@
         verify(mTransportSelectorCallback, times(1)).onWlanSelected(anyBoolean());
     }
 
+    @Test
+    public void testSimLockNoMaxCellularTimeout() throws Exception {
+        when(mTelephonyManager.getSimState(anyInt())).thenReturn(
+                TelephonyManager.SIM_STATE_PIN_REQUIRED);
+        PersistableBundle bundle = getDefaultPersistableBundle();
+        bundle.putBoolean(KEY_EMERGENCY_CALL_OVER_EMERGENCY_PDN_BOOL, true);
+        bundle.putInt(KEY_MAXIMUM_CELLULAR_SEARCH_TIMER_SEC_INT, 20);
+        when(mCarrierConfigManager.getConfigForSubId(anyInt())).thenReturn(bundle);
+
+        setupForHandleScanResult();
+
+        assertFalse(mDomainSelector.hasMessages(MSG_NETWORK_SCAN_TIMEOUT));
+        assertFalse(mDomainSelector.hasMessages(MSG_MAX_CELLULAR_TIMEOUT));
+    }
 
     @Test
     public void testMaxCellularTimeoutScanTimeout() throws Exception {
@@ -1847,6 +2003,111 @@
         verify(mTransportSelectorCallback, times(2)).onWlanSelected(anyBoolean());
     }
 
+    @Test
+    public void testSimLockScanPsPreferredWithNr() throws Exception {
+        createSelector(SLOT_0_SUB_ID);
+        unsolBarringInfoChanged(false);
+
+        // The last valid subscription supported NR.
+        doReturn(true).when(mCarrierConfigHelper).isVoNrEmergencySupported(eq(SLOT_0));
+        when(mTelephonyManager.getSimState(anyInt())).thenReturn(
+                TelephonyManager.SIM_STATE_PIN_REQUIRED);
+
+        EmergencyRegResult regResult = getEmergencyRegResult(
+                UNKNOWN, REGISTRATION_STATE_UNKNOWN, 0, false, false, 0, 0, "", "");
+        SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
+        mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+        processAllMessages();
+
+        bindImsServiceUnregistered();
+        processAllMessages();
+
+        verify(mWwanSelectorCallback, times(1)).onRequestEmergencyNetworkScan(
+                any(), anyInt(), any(), any());
+        assertEquals(4, mAccessNetwork.size());
+        assertEquals(EUTRAN, (int) mAccessNetwork.get(0));
+        assertEquals(NGRAN, (int) mAccessNetwork.get(1));
+        assertEquals(UTRAN, (int) mAccessNetwork.get(2));
+        assertEquals(GERAN, (int) mAccessNetwork.get(3));
+    }
+
+    @Test
+    public void testSimLockScanPsPreferredWithNrAtTheEnd() throws Exception {
+        createSelector(SLOT_0_SUB_ID);
+        unsolBarringInfoChanged(false);
+
+        when(mTelephonyManager.getSimState(anyInt())).thenReturn(
+                TelephonyManager.SIM_STATE_PIN_REQUIRED);
+
+        EmergencyRegResult regResult = getEmergencyRegResult(
+                UNKNOWN, REGISTRATION_STATE_UNKNOWN, 0, false, false, 0, 0, "", "");
+        SelectionAttributes attr = getSelectionAttributes(SLOT_0, SLOT_0_SUB_ID, regResult);
+        mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+        processAllMessages();
+
+        bindImsServiceUnregistered();
+        processAllMessages();
+
+        verify(mWwanSelectorCallback, times(1)).onRequestEmergencyNetworkScan(
+                any(), anyInt(), any(), any());
+        assertEquals(4, mAccessNetwork.size());
+        assertEquals(EUTRAN, (int) mAccessNetwork.get(0));
+        assertEquals(UTRAN, (int) mAccessNetwork.get(1));
+        assertEquals(GERAN, (int) mAccessNetwork.get(2));
+        assertEquals(NGRAN, (int) mAccessNetwork.get(3));
+    }
+
+    @Test
+    public void testInvalidSubscriptionScanPsPreferredWithNrAtTheEnd() throws Exception {
+        createSelector(SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+        unsolBarringInfoChanged(false);
+
+        EmergencyRegResult regResult = getEmergencyRegResult(
+                UNKNOWN, REGISTRATION_STATE_UNKNOWN, 0, false, false, 0, 0, "", "");
+        SelectionAttributes attr = getSelectionAttributes(SLOT_0,
+                SubscriptionManager.INVALID_SUBSCRIPTION_ID, regResult);
+        mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+        processAllMessages();
+
+        bindImsServiceUnregistered();
+        processAllMessages();
+
+        verify(mWwanSelectorCallback, times(1)).onRequestEmergencyNetworkScan(
+                any(), anyInt(), any(), any());
+        assertEquals(4, mAccessNetwork.size());
+        assertEquals(EUTRAN, (int) mAccessNetwork.get(0));
+        assertEquals(UTRAN, (int) mAccessNetwork.get(1));
+        assertEquals(GERAN, (int) mAccessNetwork.get(2));
+        assertEquals(NGRAN, (int) mAccessNetwork.get(3));
+    }
+
+    @Test
+    public void testInvalidSubscriptionScanPsPreferredWithNr() throws Exception {
+        createSelector(SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+        unsolBarringInfoChanged(false);
+
+        // The last valid subscription supported NR.
+        doReturn(true).when(mCarrierConfigHelper).isVoNrEmergencySupported(eq(SLOT_0));
+
+        EmergencyRegResult regResult = getEmergencyRegResult(
+                UNKNOWN, REGISTRATION_STATE_UNKNOWN, 0, false, false, 0, 0, "", "");
+        SelectionAttributes attr = getSelectionAttributes(SLOT_0,
+                SubscriptionManager.INVALID_SUBSCRIPTION_ID, regResult);
+        mDomainSelector.selectDomain(attr, mTransportSelectorCallback);
+        processAllMessages();
+
+        bindImsServiceUnregistered();
+        processAllMessages();
+
+        verify(mWwanSelectorCallback, times(1)).onRequestEmergencyNetworkScan(
+                any(), anyInt(), any(), any());
+        assertEquals(4, mAccessNetwork.size());
+        assertEquals(EUTRAN, (int) mAccessNetwork.get(0));
+        assertEquals(NGRAN, (int) mAccessNetwork.get(1));
+        assertEquals(UTRAN, (int) mAccessNetwork.get(2));
+        assertEquals(GERAN, (int) mAccessNetwork.get(3));
+    }
+
     private void setupForScanListTest(PersistableBundle bundle) throws Exception {
         setupForScanListTest(bundle, false);
     }
@@ -1920,8 +2181,8 @@
     private void createSelector(int subId) throws Exception {
         mDomainSelector = new EmergencyCallDomainSelector(
                 mContext, SLOT_0, subId, mHandlerThread.getLooper(),
-                mImsStateTracker, mDestroyListener, mCsrdCtrl);
-
+                mImsStateTracker, mDestroyListener, mCsrdCtrl, mCarrierConfigHelper);
+        mDomainSelector.clearResourceConfiguration();
         replaceInstance(DomainSelectorBase.class,
                 "mWwanSelectorCallback", mDomainSelector, mWwanSelectorCallback);
     }
diff --git a/tests/src/com/android/services/telephony/domainselection/ImsStateTrackerTest.java b/tests/src/com/android/services/telephony/domainselection/ImsStateTrackerTest.java
index 430adea..6519835 100644
--- a/tests/src/com/android/services/telephony/domainselection/ImsStateTrackerTest.java
+++ b/tests/src/com/android/services/telephony/domainselection/ImsStateTrackerTest.java
@@ -33,6 +33,7 @@
 import android.os.Handler;
 import android.os.HandlerThread;
 import android.os.Looper;
+import android.os.SystemClock;
 import android.telephony.AccessNetworkConstants.AccessNetworkType;
 import android.telephony.BarringInfo;
 import android.telephony.ServiceState;
@@ -74,6 +75,7 @@
     private static final int SUB_1 = 1;
     private static final int SUB_2 = 2;
     private static final long TIMEOUT_MS = 100;
+    private static final long MSG_PROCESS_DELAY_MS = 10;
 
     @Mock private ImsMmTelManager mMmTelManager;
     @Mock private ImsMmTelManager mMmTelManager2;
@@ -262,6 +264,9 @@
     @Test
     @SmallTest
     public void testAddAndRemoveServiceStateListener() {
+        mImsStateTracker.getHandler().post(() -> {
+            SystemClock.sleep(MSG_PROCESS_DELAY_MS);
+        });
         mImsStateTracker.updateServiceState(mServiceState);
         mImsStateTracker.addServiceStateListener(mServiceStateListener);
         mImsStateTracker.removeServiceStateListener(mServiceStateListener);
@@ -307,6 +312,9 @@
     @Test
     @SmallTest
     public void testAddAndRemoveBarringInfoListener() {
+        mImsStateTracker.getHandler().post(() -> {
+            SystemClock.sleep(MSG_PROCESS_DELAY_MS);
+        });
         mImsStateTracker.updateBarringInfo(mBarringInfo);
         mImsStateTracker.addBarringInfoListener(mBarringInfoListener);
         mImsStateTracker.removeBarringInfoListener(mBarringInfoListener);
diff --git a/tests/src/com/android/services/telephony/domainselection/NormalCallDomainSelectorTest.java b/tests/src/com/android/services/telephony/domainselection/NormalCallDomainSelectorTest.java
index 4dd1f3c..002c7d5 100644
--- a/tests/src/com/android/services/telephony/domainselection/NormalCallDomainSelectorTest.java
+++ b/tests/src/com/android/services/telephony/domainselection/NormalCallDomainSelectorTest.java
@@ -344,7 +344,8 @@
         //Case 1: WPS not supported by IMS
         PersistableBundle config = new PersistableBundle();
         config.putBoolean(CarrierConfigManager.KEY_SUPPORT_WPS_OVER_IMS_BOOL, false);
-        doReturn(config).when(mMockCarrierConfigMgr).getConfigForSubId(SUB_ID_1);
+        doReturn(config).when(mMockCarrierConfigMgr).getConfigForSubId(SUB_ID_1,
+                new String[]{CarrierConfigManager.KEY_SUPPORT_WPS_OVER_IMS_BOOL});
         ServiceState serviceState = new ServiceState();
         serviceState.setState(ServiceState.STATE_IN_SERVICE);
         initialize(serviceState, true, true, true, true);
@@ -387,7 +388,8 @@
         doReturn(TelecomManager.TTY_MODE_FULL).when(mMockTelecomManager).getCurrentTtyMode();
         PersistableBundle config = new PersistableBundle();
         config.putBoolean(CarrierConfigManager.KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL, false);
-        doReturn(config).when(mMockCarrierConfigMgr).getConfigForSubId(SUB_ID_1);
+        doReturn(config).when(mMockCarrierConfigMgr).getConfigForSubId(SUB_ID_1,
+                new String[]{CarrierConfigManager.KEY_CARRIER_VOLTE_TTY_SUPPORTED_BOOL});
         ServiceState serviceState = new ServiceState();
         serviceState.setState(ServiceState.STATE_IN_SERVICE);
         initialize(serviceState, true, false, true, true);
diff --git a/tests/src/com/android/services/telephony/domainselection/TelephonyDomainSelectionServiceTest.java b/tests/src/com/android/services/telephony/domainselection/TelephonyDomainSelectionServiceTest.java
index f340e94..f4d2732 100644
--- a/tests/src/com/android/services/telephony/domainselection/TelephonyDomainSelectionServiceTest.java
+++ b/tests/src/com/android/services/telephony/domainselection/TelephonyDomainSelectionServiceTest.java
@@ -20,6 +20,7 @@
 import static org.mockito.ArgumentMatchers.any;
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.never;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
@@ -44,6 +45,7 @@
 import androidx.test.runner.AndroidJUnit4;
 
 import com.android.TestContext;
+import com.android.internal.telephony.flags.Flags;
 
 import org.junit.After;
 import org.junit.Before;
@@ -78,7 +80,8 @@
                         @SelectorType int selectorType, boolean isEmergency,
                         @NonNull Looper looper, @NonNull ImsStateTracker imsStateTracker,
                         @NonNull DomainSelectorBase.DestroyListener listener,
-                        @NonNull CrossSimRedialingController crossSimRedialingController) {
+                        @NonNull CrossSimRedialingController crossSimRedialingController,
+                        @NonNull CarrierConfigHelper carrierConfigHelper) {
                     switch (selectorType) {
                         case DomainSelectionService.SELECTOR_TYPE_CALLING: // fallthrough
                         case DomainSelectionService.SELECTOR_TYPE_SMS: // fallthrough
@@ -107,6 +110,7 @@
     @Mock private TransportSelectorCallback mSelectorCallback1;
     @Mock private TransportSelectorCallback mSelectorCallback2;
     @Mock private ImsStateTracker mImsStateTracker;
+    @Mock private CarrierConfigHelper mCarrierConfigHelper;
 
     private final ServiceState mServiceState = new ServiceState();
     private final BarringInfo mBarringInfo = new BarringInfo();
@@ -128,11 +132,14 @@
 
         mContext = new TestContext();
         mDomainSelectionService = new TelephonyDomainSelectionService(mContext,
-                mImsStateTrackerFactory, mDomainSelectorFactory);
+                mImsStateTrackerFactory, mDomainSelectorFactory, mCarrierConfigHelper);
         mServiceHandler = new Handler(mDomainSelectionService.getLooper());
         mTestableLooper = new TestableLooper(mDomainSelectionService.getLooper());
 
         mSubscriptionManager = mContext.getSystemService(SubscriptionManager.class);
+        if (Flags.workProfileApiSplit()) {
+            doReturn(mSubscriptionManager).when(mSubscriptionManager).createForAllUserProfiles();
+        }
         ArgumentCaptor<OnSubscriptionsChangedListener> listenerCaptor =
                 ArgumentCaptor.forClass(OnSubscriptionsChangedListener.class);
         verify(mSubscriptionManager).addOnSubscriptionsChangedListener(
diff --git a/utils/satellite/README.md b/utils/satellite/README.md
new file mode 100644
index 0000000..e219823
--- /dev/null
+++ b/utils/satellite/README.md
@@ -0,0 +1,62 @@
+This directory contains code and tools for generating and debugging binary
+satellite s2 file.
+
+Directory structure
+=
+
+`s2storage`
+- `src/write` S2 write code used by tools to write the s2 cells into a
+  binary file. This code is also used by `TeleServiceTests`.
+- `src/readonly` S2 read-only code used by the above read-write code and the class
+ `S2RangeFileBasedSatelliteLocationLookup`.
+
+`tools`
+- `src/main` Contains the tools for generating binary satellite s2 file, and tools
+  for dumping the binary file into human-readable format.
+- `src/test` Contains the test code for the tools.
+
+Run unit tests
+=
+- Build the tools and test code: Go to the tool directory (`packages/services/Telephony/tools/
+  satellite`) in the local workspace and run `mm`, e.g.,
+- Run unit tests: `$atest SatelliteToolsTests`
+
+Data file generate tools
+=
+
+`satellite_createsats2file`
+- Runs the `satellite_createsats2file` to create a binary satellite S2 file from a
+  list of S2 cells ID.
+- Command: `$satellite_createsats2file --input-file <s2cells.txt> --s2-level <12>
+  --is-allowed-list <true> --output-file <sats2.dat>`
+  - `--input-file` Each line in the file contains a `signed-64bit` number which represents
+    the ID of a S2 cell.
+  - `--s2-level` The S2 level of all the cells in the input file.
+  - `--is-allowed-list` Should be either `trrue` or `false`
+    - `true` The input file contains a list of S2 cells where satellite services are allowed.
+    - `false` The input file contains a list of S2 cells where satellite services are disallowed.
+  - `--output-file` The created binary satellite S2 file, which will be used by
+  the `SatelliteAccessController` module in determining if satellite communication
+  is allowed at a location.
+- Build the tools: Go to the tool directory (`packages/services/Telephony/tools/satellite`)
+  in the local workspace and run `mm`.
+- Example run command: `$satellite_createsats2file --input-file s2cells.txt --s2-level 12
+  --is-allowed-list true --output-file sats2.dat`
+
+Debug tools
+=
+
+`satellite_createsats2file_test`
+- Create a test binary satellite S2 file with the following ranges:
+  - [(prefix=0b100_11111111, suffix=1000), (prefix=0b100_11111111, suffix=2000))
+  - [(prefix=0b100_11111111, suffix=2000), (prefix=0b100_11111111, suffix=3000))
+  - [(prefix=0b101_11111111, suffix=1000), (prefix=0b101_11111111, suffix=2000))
+- Run the test tool: `$satellite_createtestsats2file /tmp/foo.dat`
+  - This command will generate the binary satellite S2 cell file `/tmp/foo.dat` with
+  the above S2 ranges.
+
+`satellite_dumpsats2file`
+- Dump the input binary satellite S2 cell file into human-readable text format.
+- Run the tool: `$satellite_dumpsats2file /tmp/foo.dat /tmp/foo`
+  - `/tmp/foo.dat` Input binary satellite S2 cell file.
+  - `/tmp/foo` Output directory which contains the output text files.
\ No newline at end of file
diff --git a/utils/satellite/s2storage/Android.bp b/utils/satellite/s2storage/Android.bp
new file mode 100644
index 0000000..64882ee
--- /dev/null
+++ b/utils/satellite/s2storage/Android.bp
@@ -0,0 +1,77 @@
+// Copyright (C) 2020 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.
+
+// Library for read-only access to Sat S2 data files.
+package {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+// Library for read-only access to satellite S2 data files.
+java_library {
+    name: "satellite-s2storage-ro",
+    host_supported: true,
+    srcs: [
+        "src/readonly/java/**/*.java",
+    ],
+    static_libs: [
+        "s2storage_ro",
+    ],
+}
+
+// Library for read/write access to satellite S2 data files.
+// This can be a java_library_host since it is used by satellite tools, which runs on host. However,
+//  it is also used by the unit test S2RangeFileBasedSatelliteLocationLookupTest, which runs on
+// device. Thus, we need to make it a java_library to support the device-side usage,
+// `host_supported: true` to support the host-side usage.
+java_library {
+    name: "satellite-s2storage-rw",
+    host_supported: true,
+    srcs: [
+        "src/write/java/**/*.java",
+    ],
+    static_libs: [
+        "satellite-s2storage-ro",
+        "s2storage_rw",
+    ],
+}
+
+// Library for access to satellite S2 utils.
+java_library {
+    name: "satellite-s2storage-testutils",
+    host_supported: true,
+    srcs: [
+        "src/testutils/java/**/*.java",
+    ],
+    static_libs: [
+        "junit",
+        "satellite-s2storage-ro",
+    ],
+}
+
+// Tests for the satellite S2 storage code.
+java_test_host {
+    name: "SatelliteS2StorageTests",
+    srcs: ["src/test/java/**/*.java"],
+    static_libs: [
+        "junit",
+        "mockito",
+        "objenesis",
+        "satellite-s2storage-rw",
+        "satellite-s2storage-testutils",
+    ],
+    test_options: {
+        unit_test: true,
+    },
+    test_suites: ["general-tests"],
+}
\ No newline at end of file
diff --git a/utils/satellite/s2storage/TEST_MAPPING b/utils/satellite/s2storage/TEST_MAPPING
new file mode 100644
index 0000000..7d0fba8
--- /dev/null
+++ b/utils/satellite/s2storage/TEST_MAPPING
@@ -0,0 +1,7 @@
+{
+    "postsubmit": [
+        {
+            "name": "SatelliteS2StorageTests"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/utils/satellite/s2storage/src/readonly/java/com/android/telephony/sats2range/read/HeaderBlock.java b/utils/satellite/s2storage/src/readonly/java/com/android/telephony/sats2range/read/HeaderBlock.java
new file mode 100644
index 0000000..9895d1a
--- /dev/null
+++ b/utils/satellite/s2storage/src/readonly/java/com/android/telephony/sats2range/read/HeaderBlock.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2023 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.telephony.sats2range.read;
+
+import com.android.storage.block.read.BlockData;
+import com.android.storage.util.Visitor;
+
+/**
+ * Wraps a {@link BlockData}, interpreting it as a satellite S2 data file header (block 0). This
+ * class provides typed access to the information held in the header for use when reading a
+ * satellite S2 data file.
+ */
+public final class HeaderBlock {
+    /** Used for converting from bool type to int type */
+    public static final int TRUE = 1;
+    public static final int FALSE = 0;
+
+    private final SatS2RangeFileFormat mFileFormat;
+
+    private HeaderBlock(BlockData blockData) {
+        int offset = 0;
+
+        // Read the format information.
+        int dataS2Level = blockData.getUnsignedByte(offset++);
+        int prefixBitCount = blockData.getUnsignedByte(offset++);
+        int suffixBitCount = blockData.getUnsignedByte(offset++);
+        int suffixRecordBitCount = blockData.getUnsignedByte(offset++);
+        int suffixTableBlockIdOffset = blockData.getUnsignedByte(offset++);
+        boolean isAllowedList = (blockData.getUnsignedByte(offset) == TRUE);
+        mFileFormat = new SatS2RangeFileFormat(
+                dataS2Level, prefixBitCount, suffixBitCount, suffixTableBlockIdOffset,
+                suffixRecordBitCount, isAllowedList);
+    }
+
+    /** Creates a {@link HeaderBlock} from low-level block data from a block file. */
+    public static HeaderBlock wrap(BlockData blockData) {
+        return new HeaderBlock(blockData);
+    }
+
+    /** Returns the {@link SatS2RangeFileFormat} for the file. */
+    public SatS2RangeFileFormat getFileFormat() {
+        return mFileFormat;
+    }
+
+    /** A {@link Visitor} for the {@link HeaderBlock}. See {@link #visit} */
+    public interface HeaderBlockVisitor extends Visitor {
+
+        /** Called after {@link #begin()}, once. */
+        void visitFileFormat(SatS2RangeFileFormat fileFormat);
+    }
+
+    /**
+     * Issues callbacks to the supplied {@link HeaderBlockVisitor} containing information from the
+     * header block.
+     */
+    public void visit(HeaderBlockVisitor visitor) throws Visitor.VisitException {
+        try {
+            visitor.begin();
+            visitor.visitFileFormat(mFileFormat);
+        } finally {
+            visitor.end();
+        }
+    }
+}
diff --git a/utils/satellite/s2storage/src/readonly/java/com/android/telephony/sats2range/read/PopulatedSuffixTableBlock.java b/utils/satellite/s2storage/src/readonly/java/com/android/telephony/sats2range/read/PopulatedSuffixTableBlock.java
new file mode 100644
index 0000000..9aa56b2
--- /dev/null
+++ b/utils/satellite/s2storage/src/readonly/java/com/android/telephony/sats2range/read/PopulatedSuffixTableBlock.java
@@ -0,0 +1,222 @@
+/*
+ * Copyright (C) 2023 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.telephony.sats2range.read;
+
+import static com.android.storage.s2.S2Support.MAX_FACE_ID;
+import static com.android.storage.s2.S2Support.cellIdToString;
+import static com.android.storage.util.Conditions.checkStateInRange;
+
+import com.android.storage.s2.S2LevelRange;
+import com.android.storage.table.packed.read.IntValueTypedPackedTable;
+import com.android.storage.table.reader.IntValueTable;
+
+import java.util.Objects;
+
+/**
+ * An implementation of {@link SuffixTableBlock.SuffixTableBlockDelegate} for tables that are backed
+ * by real block data, i.e. have one or more entries.
+ *
+ * <p>Logically, each populated suffix table block holds one or more entries for S2 ranges, e.g.:
+ * <pre>
+ *     startCellId=X, endCellId=Y
+ * </pre>
+ *
+ * <p>The storage of the range entries is as follows:
+ * <ul>
+ *     <li>The prefix bits are all the same so need not be stored in the individual entries. Only
+ *     the suffix bits of X are stored. The prefix determines the block ID when first locating the
+ *     suffix table, but it is also (redundantly) stored in the table's header for simplicity /
+ *     easy debugging.</li>
+ *     <li>Each range is expected to be relatively short, so Y is stored as a offset adjustment to
+ *     X, i.e. Y is calculated by advancing X by {length of range} cell IDs.</li>
+ * </ul>
+ */
+final class PopulatedSuffixTableBlock implements SuffixTableBlock.SuffixTableBlockDelegate {
+
+    private final SatS2RangeFileFormat mFileFormat;
+
+    private final IntValueTypedPackedTable mPackedTable;
+
+    private final SuffixTableSharedData mSuffixTableSharedData;
+
+    private final int mPrefix;
+
+    PopulatedSuffixTableBlock(
+            SatS2RangeFileFormat fileFormat, IntValueTypedPackedTable packedTable) {
+        mFileFormat = Objects.requireNonNull(fileFormat);
+        mPackedTable = Objects.requireNonNull(packedTable);
+        mSuffixTableSharedData = SuffixTableSharedData.fromBytes(packedTable.getSharedData());
+
+        // Obtain the prefix. All cellIds in this table will share the same prefix except for end
+        // range values (which are exclusive so can be for mPrefix + 1 with a suffix value of 0).
+        mPrefix = mSuffixTableSharedData.getTablePrefix();
+    }
+
+    @Override
+    public int getPrefix() {
+        return mPrefix;
+    }
+
+    @Override
+    public SuffixTableBlock.Entry findEntryByCellId(long cellId) {
+        int suffixValue = mFileFormat.extractSuffixValueFromCellId(cellId);
+        S2CellMatcher matcher = new S2CellMatcher(mFileFormat, suffixValue);
+        return findEntryWithMatcher(matcher);
+    }
+
+    @Override
+    public SuffixTableBlock.Entry findEntryByIndex(int i) {
+        return new Entry(mPackedTable.getEntryByIndex(i));
+    }
+
+    @Override
+    public int getEntryCount() {
+        return mPackedTable.getEntryCount();
+    }
+
+    /**
+     * Returns an entry that matches the supplied matcher. If multiple entries match, an arbitrary
+     * matching entry is returned. If no entries match then {@code null} is returned.
+     */
+    private SuffixTableBlock.Entry findEntryWithMatcher(
+            IntValueTable.IntValueEntryMatcher matcher) {
+        IntValueTable.TableEntry suffixTableEntry = mPackedTable.findEntry(matcher);
+        if (suffixTableEntry == null) {
+            return null;
+        }
+        return new Entry(suffixTableEntry);
+    }
+
+    /**
+     * An {@link IntValueTable.IntValueEntryMatcher} capable of interpreting and matching the
+     * key/value from the underlying table against a search suffix value.
+     */
+    private static final class S2CellMatcher implements IntValueTable.IntValueEntryMatcher {
+
+        private final SatS2RangeFileFormat mFileFormat;
+
+        private final int mSuffixSearchValue;
+
+        S2CellMatcher(SatS2RangeFileFormat fileFormat, int suffixSearchValue) {
+            mFileFormat = Objects.requireNonNull(fileFormat);
+            mSuffixSearchValue = suffixSearchValue;
+        }
+
+        @Override
+        public int compare(int key, int value) {
+            int rangeStartCellIdOffset = key;
+            if (mSuffixSearchValue < rangeStartCellIdOffset) {
+                return -1;
+            } else {
+                int rangeLength = mFileFormat.extractRangeLengthFromTableEntryValue(value);
+                int rangeEndCellIdOffset = rangeStartCellIdOffset + rangeLength;
+                if (mSuffixSearchValue >= rangeEndCellIdOffset) {
+                    return 1;
+                } else {
+                    return 0;
+                }
+            }
+        }
+    }
+
+    /**
+     * An entry from the {@link SuffixTableBlock}. Use {@link #getSuffixTableRange()} to get the
+     * full, interpreted entry data.
+     */
+    public final class Entry extends SuffixTableBlock.Entry {
+
+        private final IntValueTable.TableEntry mSuffixTableEntry;
+
+        private S2LevelRange mSuffixTableRange;
+
+        Entry(IntValueTable.TableEntry suffixTableEntry) {
+            mSuffixTableEntry = Objects.requireNonNull(suffixTableEntry);
+        }
+
+        @Override
+        public int getIndex() {
+            return mSuffixTableEntry.getIndex();
+        }
+
+        /** Returns the data for this entry. */
+        @Override
+        public S2LevelRange getSuffixTableRange() {
+            // Creating SuffixTableRange is relatively expensive so it is created lazily and
+            // memoized.
+            if (mSuffixTableRange == null) {
+                // Create the range to return.
+                int startCellIdSuffix = mSuffixTableEntry.getKey();
+                checkStateInRange("startCellIdSuffixBits", startCellIdSuffix,
+                        "minSuffixValue", 0, "maxSuffixValue", mFileFormat.getMaxSuffixValue());
+                long startCellId = mFileFormat.createCellId(mPrefix, startCellIdSuffix);
+
+                int tableEntryValue = mSuffixTableEntry.getValue();
+                int rangeLength =
+                        mFileFormat.extractRangeLengthFromTableEntryValue(tableEntryValue);
+                checkStateInRange("rangeLength", rangeLength, "minRangeLength", 0, "maxRangeLength",
+                        mFileFormat.getTableEntryMaxRangeLengthValue());
+                int endCellIdSuffix = startCellIdSuffix + rangeLength;
+
+                int endCellPrefixValue = mPrefix;
+                if (endCellIdSuffix > mFileFormat.getMaxSuffixValue()) {
+                    // Handle the special case where the range ends in the next prefix. This is
+                    // because the range end is exclusive, so the end value is allowed to be first
+                    // cell ID from the next prefix.
+                    if (endCellIdSuffix != mFileFormat.getMaxSuffixValue() + 1) {
+                        throw new IllegalStateException("Range exceeds allowable cell IDs:"
+                                + " startCellId=" + cellIdToString(startCellId)
+                                + ", rangeLength=" + rangeLength);
+                    }
+                    endCellPrefixValue += 1;
+
+                    // Check to see if the face ID has overflowed, and wrap to face zero if it has.
+                    if (mFileFormat.extractFaceIdFromPrefix(endCellPrefixValue) > MAX_FACE_ID) {
+                        endCellPrefixValue = 0;
+                    }
+                    endCellIdSuffix = 0;
+                }
+                long endCellId = mFileFormat.createCellId(endCellPrefixValue, endCellIdSuffix);
+                mSuffixTableRange = new S2LevelRange(startCellId, endCellId);
+            }
+            return mSuffixTableRange;
+        }
+
+        @Override
+        public boolean equals(Object o) {
+            if (this == o) {
+                return true;
+            }
+            if (o == null || getClass() != o.getClass()) {
+                return false;
+            }
+            Entry entry = (Entry) o;
+            return mSuffixTableEntry.equals(entry.mSuffixTableEntry);
+        }
+
+        @Override
+        public int hashCode() {
+            return Objects.hash(mSuffixTableEntry);
+        }
+
+        @Override
+        public String toString() {
+            return "Entry{"
+                    + "mSuffixTableEntry=" + mSuffixTableEntry
+                    + '}';
+        }
+    }
+}
diff --git a/utils/satellite/s2storage/src/readonly/java/com/android/telephony/sats2range/read/SatS2RangeFileFormat.java b/utils/satellite/s2storage/src/readonly/java/com/android/telephony/sats2range/read/SatS2RangeFileFormat.java
new file mode 100644
index 0000000..39507aa
--- /dev/null
+++ b/utils/satellite/s2storage/src/readonly/java/com/android/telephony/sats2range/read/SatS2RangeFileFormat.java
@@ -0,0 +1,401 @@
+/*
+ * Copyright (C) 2023 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.telephony.sats2range.read;
+
+import static com.android.storage.s2.S2Support.FACE_BIT_COUNT;
+import static com.android.storage.s2.S2Support.MAX_FACE_ID;
+import static com.android.storage.s2.S2Support.MAX_S2_LEVEL;
+
+import com.android.storage.s2.S2Support;
+import com.android.storage.util.BitwiseUtils;
+import com.android.storage.util.Conditions;
+
+import java.util.Objects;
+
+/**
+ * Holds information about the format of a satellite S2 data file, which is a type of block file
+ * (see {@link com.android.storage.block.read.BlockFileReader}).
+ * Some information is hardcoded and some is parameterized using information read from the file's
+ * header block. This class contains useful methods for validation, interpretation and storage of
+ * data in a file with the specified format.
+ */
+public final class SatS2RangeFileFormat {
+
+    /** The block type of the satellite S2 data file header (held in block 0). */
+    public static final int BLOCK_TYPE_HEADER = 1;
+
+    /**
+     * The block type used for padding between the header and suffix tables that allows for future
+     * expansion. See {@link #getSuffixTableBlockIdOffset()}.
+     */
+    public static final int BLOCK_TYPE_PADDING = 20;
+
+    /** The block type of a populated suffix table. */
+    public static final int BLOCK_TYPE_SUFFIX_TABLE = 10;
+
+    /** The expected magic value of a satellite S2 data file. */
+    public static final char MAGIC = 0xCFAF;
+
+    /** The format version of the satellite S2 data file, read and written. */
+    public static final int VERSION = 1;
+
+    private final int mDataS2Level;
+
+    private final int mPrefixBitCount;
+
+    private final int mMaxPrefixValue;
+
+    private final int mSuffixTableBlockIdOffset;
+
+    private final int mSuffixBitCount;
+
+    private final int mMaxSuffixValue;
+
+    private final int mTableEntryByteCount;
+
+    private final int mTableEntryBitCount;
+
+    private final int mTableEntryRangeLengthBitCount;
+
+    private final int mTableEntryMaxRangeLengthValue;
+
+    /**
+     * The number of bits in a cell ID of the data storage level that have fixed values, i.e. the
+     * final "1" followed by all zeros.
+     */
+    private final int mUnusedCellIdBitCount;
+
+    /**
+     * Whether the satellite S2 file contains an allowed list of S2 cells.
+     * {@code true} means allowed list.
+     * {@code false} means disallowed list.
+     */
+    private final boolean mIsAllowedList;
+
+    /**
+     * Creates a new file format. This constructor validates the values against various hard-coded
+     * constraints and will throw an {@link IllegalArgumentException} if they are not satisfied.
+     */
+    public SatS2RangeFileFormat(int s2Level, int prefixBitCount, int suffixBitCount,
+            int suffixTableBlockIdOffset, int tableEntryBitCount, boolean isAllowedList) {
+
+        Conditions.checkArgInRange("s2Level", s2Level, 0, MAX_S2_LEVEL);
+
+        // prefixBitCount must include at least the face bits and one more, it makes the logic
+        // for mMaxPrefixValue easier below. We also assume that prefix and suffix will be 31-bits
+        // as that makes sure they can be represented, unsigned in a Java int. A prefix / suffix
+        // of 31-bits (each) should be enough for anyone(TM). 31-bits = ~15 S2 levels.
+        // Anything more than level 18 for geo data (i.e. prefix PLUS suffix) will be very
+        // detailed, so it's unlikely this constraint will be a problem.
+        Conditions.checkArgInRange("prefixBitCount", prefixBitCount, 4, Integer.SIZE - 1);
+
+        // The suffix table uses fixed length records that are broken into a key and a value. The
+        // implementation requires the key is an unsigned int value, i.e. 31-bits, and the value can
+        // be held in an int value.
+
+        // The key of a suffix table entry is used to store the suffix for the cell ID at the start
+        // of a range of S2 cells (the prefix for that cell ID is implicit and the same for every
+        // entry in the table, see prefixBitCount).
+        int tableEntryKeyBitCount = suffixBitCount;
+        Conditions.checkArgInRange(
+                "tableEntryKeyBitCount", tableEntryKeyBitCount, 1, Integer.SIZE - 1);
+
+        // The value of a suffix table entry is used to hold both the range length and the entry
+        // value. See methods below that extract these components from an int. Hence, we check they
+        // will fit.
+        int tableEntryValueBitCount = tableEntryBitCount - tableEntryKeyBitCount;
+        Conditions.checkArgInRange(
+                "tableEntryValueBitCount", tableEntryValueBitCount, 1, Integer.SIZE);
+
+        if (S2Support.storageBitCountForLevel(s2Level) != prefixBitCount + suffixBitCount) {
+            // s2Level implies cellIds have a certain number of "storage bits", the prefix and
+            // suffix must consume all the bits.
+            throw new IllegalArgumentException("prefixBitCount=" + prefixBitCount
+                    + " + suffixBitCount=" + suffixBitCount + " must be correct for the s2Level ("
+                    + S2Support.storageBitCountForLevel(s2Level) + ")");
+        }
+        if (suffixTableBlockIdOffset < 1) {
+            // The format includes a header block, so there will always be an adjustment for at
+            // least that one block.
+            throw new IllegalArgumentException(
+                    "suffixTableBlockIdOffset=" + suffixTableBlockIdOffset + " must be >= 1");
+        }
+        if (tableEntryBitCount < 0 || tableEntryBitCount % Byte.SIZE != 0
+                || tableEntryBitCount > Long.SIZE) {
+            // The classes used to read suffix tables only support entries that are a multiples of
+            // a byte. They also restrict to up a maximum of 8-bytes per table entry.
+            throw new IllegalArgumentException(
+                    "suffixTableEntryBitCount=" + tableEntryBitCount
+                            + " must be >= 0, be divisible by 8, and be no more than 64 bits");
+        }
+
+        // Everything in a suffix table entry that isn't the suffix is the range length, so we can
+        // calculate it from the information given.
+        int entryRangeLengthBitCount = tableEntryBitCount - suffixBitCount;
+        // For simplicity below we ensure we can hold the maximum range length value in an unsigned
+        // Java int, so up to 31-bits.
+        Conditions.checkArgInRange(
+                "entryRangeLengthBitCount", entryRangeLengthBitCount, 2, Integer.SIZE - 1);
+
+        // Set all the fields. The fields are either set directly from parameters or derived from
+        // the values given.
+
+        mDataS2Level = s2Level;
+        mPrefixBitCount = prefixBitCount;
+
+        // Prefix value: contains the face ID plus one or more bits for the index.
+        int cellIdIndexBitCount = prefixBitCount - FACE_BIT_COUNT;
+        mMaxPrefixValue = (int)
+                ((((long) MAX_FACE_ID) << cellIdIndexBitCount)
+                        | BitwiseUtils.maxUnsignedValue(cellIdIndexBitCount));
+
+        mSuffixBitCount = suffixBitCount;
+        mMaxSuffixValue = (int) BitwiseUtils.maxUnsignedValue(suffixBitCount);
+
+        // prefixBitCount + suffixBitCount are all the "useful" bits. The remaining bits in a 64-bit
+        // cell ID are the trailing "1" (which we don't need to store) and the rest are zeros.
+        mUnusedCellIdBitCount = Long.SIZE - (prefixBitCount + suffixBitCount);
+
+        mTableEntryBitCount = tableEntryBitCount;
+        mTableEntryByteCount = tableEntryBitCount / 8;
+
+        mTableEntryRangeLengthBitCount = entryRangeLengthBitCount;
+        mTableEntryMaxRangeLengthValue =
+                (int) BitwiseUtils.maxUnsignedValue(entryRangeLengthBitCount);
+
+        mSuffixTableBlockIdOffset = suffixTableBlockIdOffset;
+
+        mIsAllowedList = isAllowedList;
+    }
+
+    /** Returns the S2 level of all geo data stored in the file. */
+    public int getS2Level() {
+        return mDataS2Level;
+    }
+
+    /**
+     * Returns the number of prefix bits from an S2 cell ID used to identify the block containing
+     * ranges.
+     */
+    public int getPrefixBitCount() {
+        return mPrefixBitCount;
+    }
+
+    /**
+     * Returns the maximum valid value that {@link #getPrefixBitCount()} can represent. Note: This
+     * is not just the number of bits: the prefix contains the face ID which can only be 0 - 5
+     * (inclusive).
+     */
+    public int getMaxPrefixValue() {
+        return mMaxPrefixValue;
+    }
+
+    /**
+     * Returns the number of "useful" bits of an S2 cell ID in the data after
+     * {@link #getPrefixBitCount()}, i.e. not including the trailing "1".
+     * Dependent on the {@link #getS2Level()}, which dictates the number of storage bits in every
+     * cell ID in a file, and {@link #getPrefixBitCount()}.
+     */
+    public int getSuffixBitCount() {
+        return mSuffixBitCount;
+    }
+
+    /**
+     * Returns the maximum value that {@link #getSuffixBitCount()} can represent.
+     */
+    public int getMaxSuffixValue() {
+        return mMaxSuffixValue;
+    }
+
+    /**
+     * Returns the number of bits in each suffix table entry. i.e.
+     * {@link #getTableEntryByteCount()} * 8
+     */
+    public int getTableEntryBitCount() {
+        return mTableEntryBitCount;
+    }
+
+    /** Returns the number of bytes in each suffix table entry. */
+    public int getTableEntryByteCount() {
+        return mTableEntryByteCount;
+    }
+
+    /** Return the number of bits in each suffix table entry used to store the length of a range. */
+    public int getTableEntryRangeLengthBitCount() {
+        return mTableEntryRangeLengthBitCount;
+    }
+
+    /** Returns the maximum value that {@link #getTableEntryRangeLengthBitCount()} can represent. */
+    public int getTableEntryMaxRangeLengthValue() {
+        return mTableEntryMaxRangeLengthValue;
+    }
+
+    /**
+     * Returns the offset to apply to the prefix value to compute the block ID holding the data for
+     * that prefix. Always &gt;= 1 to account for the header block.
+     */
+    public int getSuffixTableBlockIdOffset() {
+        return mSuffixTableBlockIdOffset;
+    }
+
+    /**
+     * @return {@code true} if the satellite S2 file contains an allowed list of S2 cells.
+     * {@code false} if the satellite S2 file contains a disallowed list of S2 cells.
+     */
+    public boolean isAllowedList() {
+        return mIsAllowedList;
+    }
+
+    /** Extracts the prefix bits from a cell ID and returns them as an unsigned int. */
+    public int extractPrefixValueFromCellId(long cellId) {
+        checkS2Level("cellId", cellId);
+        return (int) (cellId >>> (mSuffixBitCount + mUnusedCellIdBitCount));
+    }
+
+    /** Extracts the suffix bits from a cell ID and returns them as an unsigned int. */
+    public int extractSuffixValueFromCellId(long cellId) {
+        checkS2Level("cellId", cellId);
+        return (int) (cellId >>> (mUnusedCellIdBitCount)) & mMaxSuffixValue;
+    }
+
+    /** Extracts the range length from a table entry value. */
+    public int extractRangeLengthFromTableEntryValue(int value) {
+        long mask = BitwiseUtils.getLowBitsMask(mTableEntryRangeLengthBitCount);
+        return (int) (value & mask);
+    }
+
+    /** Creates a table entry value from a range length. */
+    public long createSuffixTableValue(int rangeLength) {
+        Conditions.checkArgInRange(
+                "rangeLength", rangeLength, 0, getTableEntryMaxRangeLengthValue());
+        return rangeLength;
+    }
+
+    /** Creates a cell ID from a prefix and a suffix component. */
+    public long createCellId(int prefixValue, int suffixValue) {
+        Conditions.checkArgInRange("prefixValue", prefixValue, 0, mMaxPrefixValue);
+        Conditions.checkArgInRange("suffixValue", suffixValue, 0, mMaxSuffixValue);
+        long cellId = prefixValue;
+        cellId <<= mSuffixBitCount;
+        cellId |= suffixValue;
+        cellId <<= 1;
+        cellId |= 1;
+        cellId <<= mUnusedCellIdBitCount - 1;
+
+        checkS2Level("cellId", cellId);
+        return cellId;
+    }
+
+    /** Extracts the face ID bits from a prefix value. */
+    public int extractFaceIdFromPrefix(int prefixValue) {
+        return prefixValue >>> (mPrefixBitCount - FACE_BIT_COUNT);
+    }
+
+    /**
+     * Calculates the number of cell IDs in the given range. Throws {@link IllegalArgumentException}
+     * if {@code rangeStartCellId} is "higher" than {@code rangeEndCellId} or the range length would
+     * be outside of the int range.
+     *
+     * @param rangeStartCellId the start of the range (inclusive)
+     * @param rangeEndCellId the end of the range (exclusive)
+     */
+    public int calculateRangeLength(long rangeStartCellId, long rangeEndCellId) {
+        checkS2Level("rangeStartCellId", rangeStartCellId);
+        checkS2Level("rangeEndCellId", rangeEndCellId);
+
+        // Convert to numeric values that can just be subtracted without worrying about sign
+        // issues.
+        long rangeEndCellIdNumeric = rangeEndCellId >>> mUnusedCellIdBitCount;
+        long rangeStartCellIdNumeric = rangeStartCellId >>> mUnusedCellIdBitCount;
+        if (rangeStartCellIdNumeric >= rangeEndCellIdNumeric) {
+            throw new IllegalArgumentException(
+                    "rangeStartCellId=" + cellIdToString(rangeStartCellId)
+                            + " is >= rangeEndCellId=" + cellIdToString(rangeEndCellId));
+        }
+        long differenceNumeric = rangeEndCellIdNumeric - rangeStartCellIdNumeric;
+        if (differenceNumeric < 0 || differenceNumeric > Integer.MAX_VALUE) {
+            throw new IllegalArgumentException("rangeLength=" + differenceNumeric
+                    + " is outside of expected range");
+        }
+        return (int) differenceNumeric;
+    }
+
+    /** Formats a cellId in terms of prefix and suffix values. */
+    public String cellIdToString(long cellId) {
+        int prefix = extractPrefixValueFromCellId(cellId);
+        int suffix = extractSuffixValueFromCellId(cellId);
+        String prefixBitsString = BitwiseUtils.toUnsignedString(mPrefixBitCount, prefix);
+        String suffixBitsString = BitwiseUtils.toUnsignedString(mSuffixBitCount, suffix);
+        return "cellId{prefix=" + prefix + " (" + prefixBitsString + ")"
+                + ", suffix=" + suffix + " (" + suffixBitsString + ")"
+                + "}";
+    }
+
+    @Override
+    public String toString() {
+        return "SatS2RangeFileFormat{"
+                + "mDataS2Level=" + mDataS2Level
+                + ", mPrefixBitCount=" + mPrefixBitCount
+                + ", mMaxPrefixValue=" + mMaxPrefixValue
+                + ", mSuffixBitCount=" + mSuffixBitCount
+                + ", mMaxSuffixValue=" + mMaxSuffixValue
+                + ", mTableEntryBitCount=" + mTableEntryBitCount
+                + ", mTableEntryRangeLengthBitCount=" + mTableEntryRangeLengthBitCount
+                + ", mTableEntryMaxRangeLengthValue=" + mTableEntryMaxRangeLengthValue
+                + ", mSuffixTableBlockIdOffset=" + mSuffixTableBlockIdOffset
+                + ", mUnusedCellIdBitCount=" + mUnusedCellIdBitCount
+                + ", mIsAllowedList=" + mIsAllowedList
+                + '}';
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        SatS2RangeFileFormat that = (SatS2RangeFileFormat) o;
+        return mDataS2Level == that.mDataS2Level
+                && mPrefixBitCount == that.mPrefixBitCount
+                && mMaxPrefixValue == that.mMaxPrefixValue
+                && mSuffixBitCount == that.mSuffixBitCount
+                && mMaxSuffixValue == that.mMaxSuffixValue
+                && mTableEntryBitCount == that.mTableEntryBitCount
+                && mTableEntryRangeLengthBitCount == that.mTableEntryRangeLengthBitCount
+                && mTableEntryMaxRangeLengthValue == that.mTableEntryMaxRangeLengthValue
+                && mSuffixTableBlockIdOffset == that.mSuffixTableBlockIdOffset
+                && mIsAllowedList == that.mIsAllowedList
+                && mUnusedCellIdBitCount == that.mUnusedCellIdBitCount;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(mDataS2Level, mPrefixBitCount, mMaxPrefixValue, mSuffixBitCount,
+                mMaxSuffixValue, mTableEntryBitCount, mTableEntryRangeLengthBitCount,
+                mTableEntryMaxRangeLengthValue, mSuffixTableBlockIdOffset, mIsAllowedList,
+                mUnusedCellIdBitCount);
+    }
+
+    private void checkS2Level(String name, long cellId) {
+        if (S2Support.getS2Level(cellId) != mDataS2Level) {
+            throw new IllegalArgumentException(
+                    name + "=" + S2Support.cellIdToString(cellId) + " is at the wrong level");
+        }
+    }
+}
diff --git a/utils/satellite/s2storage/src/readonly/java/com/android/telephony/sats2range/read/SatS2RangeFileReader.java b/utils/satellite/s2storage/src/readonly/java/com/android/telephony/sats2range/read/SatS2RangeFileReader.java
new file mode 100644
index 0000000..ecfa0a9
--- /dev/null
+++ b/utils/satellite/s2storage/src/readonly/java/com/android/telephony/sats2range/read/SatS2RangeFileReader.java
@@ -0,0 +1,218 @@
+/*
+ * Copyright (C) 2023 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.telephony.sats2range.read;
+
+import com.android.storage.block.read.Block;
+import com.android.storage.block.read.BlockFileReader;
+import com.android.storage.block.read.BlockInfo;
+import com.android.storage.s2.S2LevelRange;
+import com.android.storage.s2.S2Support;
+import com.android.storage.util.Conditions;
+import com.android.storage.util.Visitor;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.Objects;
+
+/** Provides access to the content of a satellite S2 data file. */
+public final class SatS2RangeFileReader implements AutoCloseable {
+
+    private final BlockFileReader mBlockFileReader;
+
+    private HeaderBlock mHeaderBlock;
+
+    private SuffixTableExtraInfo[] mSuffixTableExtraInfos;
+
+    /** Convenience field to avoid calling {@link HeaderBlock#getFileFormat()} repeatedly. */
+    private SatS2RangeFileFormat mFileFormat;
+
+    private boolean mClosed;
+
+    private SatS2RangeFileReader(BlockFileReader blockFileReader) {
+        mBlockFileReader = Objects.requireNonNull(blockFileReader);
+    }
+
+    /**
+     * Opens the specified file. Throws {@link IOException} in the event of a access problem reading
+     * the file. Throws {@link IllegalArgumentException} if the file has a format / syntax problem.
+     *
+     * <p>After open, use methods like {@link #findEntryByCellId(long)} to access the data.
+     */
+    public static SatS2RangeFileReader open(File file) throws IOException {
+        boolean memoryMapBlocks = false;
+        BlockFileReader blockFileReader = BlockFileReader.open(
+                memoryMapBlocks, file, SatS2RangeFileFormat.MAGIC, SatS2RangeFileFormat.VERSION);
+        SatS2RangeFileReader satS2RangeFileReader = new SatS2RangeFileReader(blockFileReader);
+        satS2RangeFileReader.initialize();
+        return satS2RangeFileReader;
+    }
+
+    private void initialize() throws IOException {
+        // Check the BlockInfo for the header block is what we expect.
+        int headerBlockId = 0;
+        BlockInfo firstBlockInfo = mBlockFileReader.getBlockInfo(headerBlockId);
+        if (firstBlockInfo.getType() != SatS2RangeFileFormat.BLOCK_TYPE_HEADER) {
+            throw new IllegalArgumentException("headerBlockInfo.getType()="
+                    + firstBlockInfo.getType() + " must be "
+                    + SatS2RangeFileFormat.BLOCK_TYPE_HEADER);
+        }
+
+        // So far so good. Open the header block itself and extract the information held there.
+        Block firstBlock = mBlockFileReader.getBlock(headerBlockId);
+        if (firstBlock.getType() != SatS2RangeFileFormat.BLOCK_TYPE_HEADER) {
+            throw new IllegalArgumentException("firstBlock.getType()=" + firstBlock.getType()
+                    + " must be " + SatS2RangeFileFormat.BLOCK_TYPE_HEADER);
+        }
+        mHeaderBlock = HeaderBlock.wrap(firstBlock.getData());
+
+        // Optimization: hold a direct reference to fileFormat since it is referenced often.
+        mFileFormat = mHeaderBlock.getFileFormat();
+
+        // Read all the BlockInfos for data blocks and precache the SuffixTableBlock.Info instances.
+        mSuffixTableExtraInfos = new SuffixTableExtraInfo[mFileFormat.getMaxPrefixValue() + 1];
+        for (int prefix = 0; prefix < mSuffixTableExtraInfos.length; prefix++) {
+            int blockId = prefix + mFileFormat.getSuffixTableBlockIdOffset();
+            BlockInfo blockInfo = mBlockFileReader.getBlockInfo(blockId);
+            int type = blockInfo.getType();
+            if (type == SatS2RangeFileFormat.BLOCK_TYPE_SUFFIX_TABLE) {
+                mSuffixTableExtraInfos[prefix] =
+                        SuffixTableExtraInfo.create(mFileFormat, blockInfo);
+            } else {
+                throw new IllegalStateException("Unknown block type=" + type);
+            }
+        }
+    }
+
+    /** A {@link Visitor} for the {@link SatS2RangeFileReader}. See {@link #visit} */
+    public interface SatS2RangeFileVisitor extends Visitor {
+
+        /** Called after {@link #begin()}, once only. */
+        void visitHeaderBlock(HeaderBlock headerBlock) throws VisitException;
+
+        /**
+         * Called after {@link #visitHeaderBlock(HeaderBlock)}}, once for each suffix table in the
+         * file.
+         */
+        void visitSuffixTableExtraInfo(SuffixTableExtraInfo suffixTableExtraInfo)
+                throws VisitException;
+
+        /**
+         * Called after {@link #visitHeaderBlock(HeaderBlock)}, once per suffix table in the file.
+         */
+        void visitSuffixTableBlock(SuffixTableBlock suffixTableBlock) throws VisitException;
+    }
+
+    /**
+     * Issues callbacks to the supplied {@link SatS2RangeFileVisitor} containing information from
+     * the satellite S2 data file.
+     */
+    public void visit(SatS2RangeFileVisitor visitor) throws Visitor.VisitException {
+        try {
+            visitor.begin();
+
+            visitor.visitHeaderBlock(mHeaderBlock);
+
+            for (int i = 0; i < mSuffixTableExtraInfos.length; i++) {
+                visitor.visitSuffixTableExtraInfo(mSuffixTableExtraInfos[i]);
+            }
+
+            try {
+                for (int i = 0; i < mSuffixTableExtraInfos.length; i++) {
+                    SuffixTableBlock suffixTableBlock = getSuffixTableBlockForPrefix(i);
+                    visitor.visitSuffixTableBlock(suffixTableBlock);
+                }
+            } catch (IOException e) {
+                throw new Visitor.VisitException(e);
+            }
+        } finally {
+            visitor.end();
+        }
+    }
+
+    /**
+     * Finds an {@link S2LevelRange} associated with a range covering {@code cellId}.
+     * Returns {@code null} if no range exists. Throws {@link IllegalArgumentException} if
+     * {@code cellId} is not the correct S2 level for the file. See {@link #getS2Level()}.
+     */
+    public S2LevelRange findEntryByCellId(long cellId) throws IOException {
+        checkNotClosed();
+        int dataS2Level = mFileFormat.getS2Level();
+        int searchS2Level = S2Support.getS2Level(cellId);
+        if (dataS2Level != searchS2Level) {
+            throw new IllegalArgumentException(
+                    "data S2 level=" + dataS2Level + ", search S2 level=" + searchS2Level);
+        }
+
+        int prefix = mFileFormat.extractPrefixValueFromCellId(cellId);
+        SuffixTableBlock suffixTableBlock = getSuffixTableBlockForPrefix(prefix);
+        SuffixTableBlock.Entry suffixTableEntry = suffixTableBlock.findEntryByCellId(cellId);
+        if (suffixTableEntry == null) {
+            return null;
+        }
+        return suffixTableEntry.getSuffixTableRange();
+    }
+
+    private SuffixTableExtraInfo getSuffixTableExtraInfoForPrefix(int prefixValue) {
+        Conditions.checkArgInRange(
+                "prefixValue", prefixValue, "minPrefixValue", 0, "maxPrefixValue",
+                mFileFormat.getMaxPrefixValue());
+
+        return mSuffixTableExtraInfos[prefixValue];
+    }
+
+    private SuffixTableBlock getSuffixTableBlockForPrefix(int prefix) throws IOException {
+        SuffixTableExtraInfo suffixTableExtraInfo = getSuffixTableExtraInfoForPrefix(prefix);
+        if (suffixTableExtraInfo.isEmpty()) {
+            return SuffixTableBlock.createEmpty(mFileFormat, prefix);
+        }
+        Block block = mBlockFileReader.getBlock(prefix + mFileFormat.getSuffixTableBlockIdOffset());
+        SuffixTableBlock suffixTableBlock =
+                SuffixTableBlock.createPopulated(mFileFormat, block.getData());
+        if (prefix != suffixTableBlock.getPrefix()) {
+            throw new IllegalArgumentException("prefixValue=" + prefix
+                    + " != suffixTableBlock.getPrefix()=" + suffixTableBlock.getPrefix());
+        }
+        return suffixTableBlock;
+    }
+
+    @Override
+    public void close() throws IOException {
+        mClosed = true;
+        mHeaderBlock = null;
+        mBlockFileReader.close();
+    }
+
+    private void checkNotClosed() throws IOException {
+        if (mClosed) {
+            throw new IOException("Closed");
+        }
+    }
+
+    /** Returns the S2 level for the file. See also {@link #findEntryByCellId(long)}. */
+    public int getS2Level() throws IOException {
+        checkNotClosed();
+        return mHeaderBlock.getFileFormat().getS2Level();
+    }
+
+    /**
+     * @return {@code true} if the satellite S2 file contains an allowed list of S2 cells.
+     * {@code false} if the satellite S2 file contains a disallowed list of S2 cells.
+     */
+    public boolean isAllowedList() {
+        return mFileFormat.isAllowedList();
+    }
+}
diff --git a/utils/satellite/s2storage/src/readonly/java/com/android/telephony/sats2range/read/SuffixTableBlock.java b/utils/satellite/s2storage/src/readonly/java/com/android/telephony/sats2range/read/SuffixTableBlock.java
new file mode 100644
index 0000000..1a6fad7
--- /dev/null
+++ b/utils/satellite/s2storage/src/readonly/java/com/android/telephony/sats2range/read/SuffixTableBlock.java
@@ -0,0 +1,185 @@
+/*
+ * Copyright (C) 2023 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.telephony.sats2range.read;
+
+import static com.android.storage.s2.S2Support.cellIdToString;
+import static com.android.storage.s2.S2Support.getS2Level;
+
+import com.android.storage.block.read.BlockData;
+import com.android.storage.s2.S2LevelRange;
+import com.android.storage.table.packed.read.IntValueTypedPackedTable;
+import com.android.storage.util.BitwiseUtils;
+import com.android.storage.util.Visitor;
+
+import java.util.Objects;
+
+/**
+ * The main type of block for a satellite S2 data file.
+ *
+ * <p>Logically, each suffix table block holds zero or more entries for S2 ranges, e.g.:
+ * <pre>
+ *     startCellId=X, endCellId=Y
+ * </pre>
+ *
+ * <p>Tables are generated so that all entries in the table have the same S2 level and "prefix
+ * bits" for the S2 cell IDs they describe, i.e. if the table's assigned prefix is "1011000", then
+ * every cell ID included in every range entry (i.e. from X to Y) must start with "1011000". The
+ * entries in the table are ordered by startCellId and ranges cannot overlap. There is only one
+ * block / suffix table for each possible prefix.
+ *
+ * <p>Note that because the endCellId is <em>exclusive</em>, the last entry's endCellId <em>can</em>
+ * refer the first S2 cell ID from the next prefix, or wrap around to face 0 for the last entry
+ * for face ID 5.
+ *
+ * <p>Any S2 cell id with a prefix that is not covered by a range entry in the associated table can
+ * be inferred to have a value of zero.
+ *
+ * <p>Entries can be obtained by called methods such as {@link #getEntryByIndex(int)},
+ * {@link #findEntryByCellId(long)}.
+ */
+public final class SuffixTableBlock {
+
+    private final SatS2RangeFileFormat mFileFormat;
+
+    private final SuffixTableBlockDelegate mDelegate;
+
+    private final int mPrefix;
+
+    /**
+     * The implementation of the suffix table block. Suffix table blocks have two main
+     * implementations: zero-length blocks used to represent empty tables, and blocks containing
+     * {@link IntValueTypedPackedTable} data. Since they are so different they are implemented
+     * independently.
+     */
+    interface SuffixTableBlockDelegate {
+
+        /** Returns the prefix for cell IDs in this table. */
+        int getPrefix();
+
+        /**
+         * Returns the entry containing the specified cell ID, or {@code null} if there isn't one.
+         */
+        Entry findEntryByCellId(long cellId);
+
+        /**
+         * Returns the entry with the specified index. Throws {@link IndexOutOfBoundsException} if
+         * the index is invalid.
+         */
+        Entry findEntryByIndex(int i);
+
+        /** Returns the number of entries in the table. */
+        int getEntryCount();
+    }
+
+    private SuffixTableBlock(SatS2RangeFileFormat fileFormat, SuffixTableBlockDelegate delegate) {
+        mFileFormat = Objects.requireNonNull(fileFormat);
+        mDelegate = Objects.requireNonNull(delegate);
+        mPrefix = delegate.getPrefix();
+    }
+
+    /**
+     * Creates a populated {@link SuffixTableBlock} by interpreting {@link BlockData} and using
+     * the supplied format information.
+     */
+    public static SuffixTableBlock createPopulated(
+            SatS2RangeFileFormat fileFormat, BlockData blockData) {
+        if (blockData.getSize() == 0) {
+            throw new IllegalArgumentException("blockData=" + blockData + ", is zero length");
+        }
+        IntValueTypedPackedTable packedTable = new IntValueTypedPackedTable(blockData);
+        PopulatedSuffixTableBlock delegate = new PopulatedSuffixTableBlock(fileFormat, packedTable);
+        return new SuffixTableBlock(fileFormat, delegate);
+    }
+
+    /**
+     * Creates an unpopulated {@link SuffixTableBlock} for the supplied prefix and using
+     * the supplied format information.
+     */
+    public static SuffixTableBlock createEmpty(SatS2RangeFileFormat fileFormat, int prefix) {
+        return new SuffixTableBlock(fileFormat, new UnpopulatedSuffixTableBlock(prefix));
+    }
+
+    /** Returns the prefix for this table. */
+    public int getPrefix() {
+        return mDelegate.getPrefix();
+    }
+
+    /**
+     * Returns the entry for a given cell ID or {@code null} if there isn't one. The
+     * {@code cellId} must be the same level as the table and have the same prefix otherwise an
+     * {@link IllegalArgumentException} is thrown.
+     */
+    public Entry findEntryByCellId(long cellId) {
+        if (getS2Level(cellId) != mFileFormat.getS2Level()) {
+            throw new IllegalArgumentException(
+                    cellIdToString(cellId) + " s2 level is not "
+                            + mFileFormat.getS2Level());
+        }
+        if (mFileFormat.extractPrefixValueFromCellId(cellId) != mPrefix) {
+            String prefixBitString =
+                    BitwiseUtils.toUnsignedString(mFileFormat.getPrefixBitCount(), mPrefix);
+            throw new IllegalArgumentException(
+                    cellId + "(" + mFileFormat.cellIdToString(cellId)
+                            + ") does not have prefix bits " + mPrefix
+                            + " (" + prefixBitString + ")");
+        }
+
+        return mDelegate.findEntryByCellId(cellId);
+    }
+
+    /** Returns the entry at the specified index. */
+    public Entry getEntryByIndex(int i) {
+        return mDelegate.findEntryByIndex(i);
+    }
+
+    /** Returns the number of entries in the table. */
+    public int getEntryCount() {
+        return mDelegate.getEntryCount();
+    }
+
+    /** A {@link Visitor} for the {@link SuffixTableBlock}. See {@link #visit} */
+    public interface SuffixTableBlockVisitor extends Visitor {
+
+        /** Called after {@link #begin()}, once. */
+        void visit(SuffixTableBlock suffixTableBlock) throws VisitException;
+    }
+
+    /**
+     * Issues callbacks to the supplied {@link SuffixTableBlockVisitor}.
+     */
+    public void visit(SuffixTableBlockVisitor visitor) throws Visitor.VisitException {
+        try {
+            visitor.begin();
+            visitor.visit(this);
+        } finally {
+            visitor.end();
+        }
+    }
+
+    /**
+     * An entry from the {@link SuffixTableBlock}. Use {@link #getSuffixTableRange()} to get the
+     * full, interpreted entry data.
+     */
+    public abstract static class Entry {
+
+        /** Returns the position of this entry in the table. */
+        public abstract int getIndex();
+
+        /** Returns the data for this entry. */
+        public abstract S2LevelRange getSuffixTableRange();
+    }
+}
diff --git a/utils/satellite/s2storage/src/readonly/java/com/android/telephony/sats2range/read/SuffixTableExtraInfo.java b/utils/satellite/s2storage/src/readonly/java/com/android/telephony/sats2range/read/SuffixTableExtraInfo.java
new file mode 100644
index 0000000..2b179fe
--- /dev/null
+++ b/utils/satellite/s2storage/src/readonly/java/com/android/telephony/sats2range/read/SuffixTableExtraInfo.java
@@ -0,0 +1,103 @@
+/*
+ * Copyright (C) 2023 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.telephony.sats2range.read;
+
+import com.android.storage.block.read.BlockInfo;
+import com.android.storage.io.read.TypedInputStream;
+import com.android.storage.util.Conditions;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+
+/**
+ * Information about a suffix table block held in the header of a satellite S2 data file. It can be
+ * used to work out whether to read the associated block data.
+ */
+public final class SuffixTableExtraInfo {
+
+    /**
+     * The suffix table's S2 cell ID prefix. This information is not stored in the block info
+     * directly; during file read it is calculated from the block ID, i.e.  {block id} - {suffix
+     * table block id offset}.
+     */
+    private final int mPrefix;
+
+    private final int mEntryCount;
+
+    /** Creates metadata about a suffix table. */
+    public SuffixTableExtraInfo(int prefix, int entryCount) {
+        if (prefix < 0) {
+            throw new IllegalArgumentException("prefix=" + prefix + " must be >= 0");
+        }
+        mPrefix = prefix;
+
+        if (entryCount < 0) {
+            throw new IllegalArgumentException("entryCount=" + entryCount + " must be >= 0");
+        }
+        mEntryCount = entryCount;
+    }
+
+    /**
+     * Creates a {@link SuffixTableExtraInfo} from a {@link BlockInfo}. Throws an
+     * {@link IllegalArgumentException} if the block info is the wrong type or malformed.
+     */
+    public static SuffixTableExtraInfo create(
+            SatS2RangeFileFormat fileFormat, BlockInfo blockInfo) {
+        if (blockInfo.getType() != SatS2RangeFileFormat.BLOCK_TYPE_SUFFIX_TABLE) {
+            throw new IllegalArgumentException("blockType=" + blockInfo.getType()
+                    + " is not of expected type=" + SatS2RangeFileFormat.BLOCK_TYPE_SUFFIX_TABLE);
+        }
+        int prefix = blockInfo.getId() - fileFormat.getSuffixTableBlockIdOffset();
+        if (blockInfo.getBlockSizeBytes() == 0) {
+            // Empty blocks have no data and no extra bytes but we know they have zero elements.
+            return new SuffixTableExtraInfo(prefix, 0 /* entryCount */);
+        }
+
+        byte[] extraBytes = blockInfo.getExtraBytes();
+        if (extraBytes == null || extraBytes.length == 0) {
+            throw new IllegalArgumentException(
+                    "Extra bytes null or empty in blockInfo=" + blockInfo);
+        }
+
+        try (TypedInputStream typedInputStream = new TypedInputStream(
+                new ByteArrayInputStream(extraBytes))) {
+            int entryCount = typedInputStream.readInt();
+            Conditions.checkStateInRange(
+                    "entryCount", entryCount, "minSuffixValue", 0, "maxSuffixValue",
+                    fileFormat.getMaxSuffixValue());
+            return new SuffixTableExtraInfo(prefix, entryCount);
+        } catch (IOException e) {
+            // This shouldn't happen with a byte[]
+            throw new IllegalStateException("Unexpected exception while reading a byte[]", e);
+        }
+    }
+
+    /** Returns the prefix of the associated suffix table. */
+    public int getPrefix() {
+        return mPrefix;
+    }
+
+    /** Returns the number of entries in the associated suffix table. */
+    public int getEntryCount() {
+        return mEntryCount;
+    }
+
+    /** Returns true if the number of entries in the associated suffix table is zero. */
+    public boolean isEmpty() {
+        return mEntryCount == 0;
+    }
+}
diff --git a/utils/satellite/s2storage/src/readonly/java/com/android/telephony/sats2range/read/SuffixTableSharedData.java b/utils/satellite/s2storage/src/readonly/java/com/android/telephony/sats2range/read/SuffixTableSharedData.java
new file mode 100644
index 0000000..2221b2c
--- /dev/null
+++ b/utils/satellite/s2storage/src/readonly/java/com/android/telephony/sats2range/read/SuffixTableSharedData.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2023 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.telephony.sats2range.read;
+
+import com.android.storage.io.read.TypedInputStream;
+import com.android.storage.table.reader.Table;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.Objects;
+
+/**
+ * Shared data for a suffix table held in a suffix table block: the information applies to all
+ * entries in the table and is required when interpreting the table's block data.
+ */
+public final class SuffixTableSharedData {
+
+    private final int mTablePrefix;
+
+    /**
+     * Creates a {@link SuffixTableSharedData}. See also {@link #fromBytes(byte[])}.
+     */
+    public SuffixTableSharedData(int tablePrefix) {
+        mTablePrefix = tablePrefix;
+    }
+
+    /**
+     * Returns the S2 cell ID prefix associated with the table. i.e. all S2 ranges in the table will
+     * have this prefix.
+     */
+    public int getTablePrefix() {
+        return mTablePrefix;
+    }
+
+    @Override
+    public boolean equals(Object o) {
+        if (this == o) {
+            return true;
+        }
+        if (o == null || getClass() != o.getClass()) {
+            return false;
+        }
+        SuffixTableSharedData that = (SuffixTableSharedData) o;
+        return mTablePrefix == that.mTablePrefix;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(mTablePrefix);
+    }
+
+    @Override
+    public String toString() {
+        return "SuffixTableSharedData{"
+                + "mTablePrefix=" + mTablePrefix
+                + '}';
+    }
+
+    /**
+     * Creates a {@link SuffixTableSharedData} using shared data from a {@link Table}.
+     */
+    public static SuffixTableSharedData fromBytes(byte[] bytes) {
+        try (ByteArrayInputStream bis = new ByteArrayInputStream(bytes);
+                TypedInputStream tis = new TypedInputStream(bis)) {
+            int tablePrefixValue = tis.readInt();
+            return new SuffixTableSharedData(tablePrefixValue);
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}
diff --git a/utils/satellite/s2storage/src/readonly/java/com/android/telephony/sats2range/read/UnpopulatedSuffixTableBlock.java b/utils/satellite/s2storage/src/readonly/java/com/android/telephony/sats2range/read/UnpopulatedSuffixTableBlock.java
new file mode 100644
index 0000000..56730c2
--- /dev/null
+++ b/utils/satellite/s2storage/src/readonly/java/com/android/telephony/sats2range/read/UnpopulatedSuffixTableBlock.java
@@ -0,0 +1,50 @@
+/*
+ * Copyright (C) 2023 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.telephony.sats2range.read;
+
+/**
+ * An implementation of {@link SuffixTableBlock.SuffixTableBlockDelegate} for tables that are not
+ * backed by real block data, i.e. have zero entries.
+ */
+final class UnpopulatedSuffixTableBlock implements SuffixTableBlock.SuffixTableBlockDelegate {
+
+    private final int mPrefix;
+
+    UnpopulatedSuffixTableBlock(int prefix) {
+        mPrefix = prefix;
+    }
+
+    @Override
+    public int getPrefix() {
+        return mPrefix;
+    }
+
+    @Override
+    public SuffixTableBlock.Entry findEntryByCellId(long cellId) {
+        return null;
+    }
+
+    @Override
+    public SuffixTableBlock.Entry findEntryByIndex(int i) {
+        throw new IndexOutOfBoundsException("Unpopulated table");
+    }
+
+    @Override
+    public int getEntryCount() {
+        return 0;
+    }
+}
diff --git a/utils/satellite/s2storage/src/test/java/com/android/telephony/sats2range/HeaderBlockTest.java b/utils/satellite/s2storage/src/test/java/com/android/telephony/sats2range/HeaderBlockTest.java
new file mode 100644
index 0000000..e7bad01
--- /dev/null
+++ b/utils/satellite/s2storage/src/test/java/com/android/telephony/sats2range/HeaderBlockTest.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2023 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.telephony.sats2range;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+
+import com.android.storage.block.write.BlockWriter;
+import com.android.telephony.sats2range.read.HeaderBlock;
+import com.android.telephony.sats2range.read.SatS2RangeFileFormat;
+import com.android.telephony.sats2range.utils.TestUtils;
+import com.android.telephony.sats2range.write.HeaderBlockWriter;
+
+import org.junit.Test;
+import org.mockito.InOrder;
+import org.mockito.Mockito;
+
+import java.io.IOException;
+
+/** Tests for {@link HeaderBlockWriter} and {@link HeaderBlock}. */
+public class HeaderBlockTest {
+    @Test
+    public void readWrite() throws IOException {
+        SatS2RangeFileFormat fileFormat = TestUtils.createS2RangeFileFormat(true);
+
+        // Create header data using HeaderBlockWriter.
+        HeaderBlockWriter headerBlockWriter = HeaderBlockWriter.create(fileFormat);
+        BlockWriter.ReadBack readBack = headerBlockWriter.close();
+        assertEquals(SatS2RangeFileFormat.BLOCK_TYPE_HEADER, readBack.getType());
+        assertArrayEquals(new byte[0], readBack.getExtraBytes());
+
+        // Read the data back and confirm it matches what we expected.
+        HeaderBlock headerBlock = HeaderBlock.wrap(readBack.getBlockData());
+        assertEquals(fileFormat, headerBlock.getFileFormat());
+    }
+
+    @Test
+    public void visit() throws Exception {
+        SatS2RangeFileFormat fileFormat = TestUtils.createS2RangeFileFormat(true);
+
+        // Create header data using HeaderBlockWriter.
+        HeaderBlockWriter headerBlockWriter = HeaderBlockWriter.create(fileFormat);
+        BlockWriter.ReadBack readBack = headerBlockWriter.close();
+
+        // Read the data back and confirm it matches what we expected.
+        HeaderBlock headerBlock = HeaderBlock.wrap(readBack.getBlockData());
+
+        HeaderBlock.HeaderBlockVisitor mockVisitor =
+                Mockito.mock(HeaderBlock.HeaderBlockVisitor.class);
+
+        headerBlock.visit(mockVisitor);
+
+        InOrder inOrder = Mockito.inOrder(mockVisitor);
+        inOrder.verify(mockVisitor).begin();
+        inOrder.verify(mockVisitor).visitFileFormat(fileFormat);
+        inOrder.verify(mockVisitor).end();
+    }
+}
diff --git a/utils/satellite/s2storage/src/test/java/com/android/telephony/sats2range/PushBackIteratorTest.java b/utils/satellite/s2storage/src/test/java/com/android/telephony/sats2range/PushBackIteratorTest.java
new file mode 100644
index 0000000..84a960a
--- /dev/null
+++ b/utils/satellite/s2storage/src/test/java/com/android/telephony/sats2range/PushBackIteratorTest.java
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2023 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.telephony.sats2range;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThrows;
+import static org.junit.Assert.assertTrue;
+
+import com.android.telephony.sats2range.write.PushBackIterator;
+
+import org.junit.Test;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.NoSuchElementException;
+
+/** Tests for {@link PushBackIterator}. */
+public class PushBackIteratorTest {
+
+    @Test
+    public void test() {
+        List<String> values = listOf("One", "Two", "Three", "Four");
+        PushBackIterator<String> iterator = new PushBackIterator<>(values.iterator());
+        assertTrue(iterator.hasNext());
+
+        // iterator = One, Two, Three, Four
+        iterator.pushBack("Zero");
+        assertTrue(iterator.hasNext());
+        assertEquals("Zero", iterator.next());
+
+        // iterator = One, Two, Three, Four
+        assertTrue(iterator.hasNext());
+        assertEquals("One", iterator.next());
+
+        // iterator = Two, Three, Four
+        iterator.pushBack("One");
+        iterator.pushBack("Zero");
+        assertTrue(iterator.hasNext());
+        assertEquals("Zero", iterator.next());
+        assertTrue(iterator.hasNext());
+        assertEquals("One", iterator.next());
+
+        // iterator = Two, Three, Four
+        assertTrue(iterator.hasNext());
+        assertEquals("Two", iterator.next());
+        assertTrue(iterator.hasNext());
+        assertEquals("Three", iterator.next());
+        assertTrue(iterator.hasNext());
+        assertEquals("Four", iterator.next());
+        assertFalse(iterator.hasNext());
+
+        assertThrows(NoSuchElementException.class, iterator::next);
+
+        // iterator = Empty
+        iterator.pushBack("Four");
+        assertTrue(iterator.hasNext());
+        assertEquals("Four", iterator.next());
+    }
+
+    @Test
+    public void removeNotSupported() {
+        List<String> values = listOf("One", "Two", "Three", "Four");
+        PushBackIterator<String> iterator = new PushBackIterator<>(values.iterator());
+        assertEquals("One", iterator.next());
+
+        assertThrows(UnsupportedOperationException.class, iterator::remove);
+
+        iterator.pushBack("One");
+        iterator.pushBack("Zero");
+
+        assertThrows(UnsupportedOperationException.class, iterator::remove);
+
+        assertEquals("Zero", iterator.next());
+        assertThrows(UnsupportedOperationException.class, iterator::remove);
+    }
+
+    /** Returns a list from a varargs param. */
+    @SafeVarargs
+    private static <E> List<E> listOf(E... values) {
+        return Arrays.asList(values);
+    }
+}
diff --git a/utils/satellite/s2storage/src/test/java/com/android/telephony/sats2range/SatS2RangeFileFormatTest.java b/utils/satellite/s2storage/src/test/java/com/android/telephony/sats2range/SatS2RangeFileFormatTest.java
new file mode 100644
index 0000000..80ef467
--- /dev/null
+++ b/utils/satellite/s2storage/src/test/java/com/android/telephony/sats2range/SatS2RangeFileFormatTest.java
@@ -0,0 +1,171 @@
+/*
+ * Copyright (C) 2023 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.telephony.sats2range;
+
+import static com.android.storage.s2.S2Support.cellId;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThrows;
+import static org.junit.Assert.assertTrue;
+
+import com.android.telephony.sats2range.read.SatS2RangeFileFormat;
+
+import org.junit.Test;
+
+/** Tests for {@link SatS2RangeFileFormat}. */
+public class SatS2RangeFileFormatTest {
+    @Test
+    public void accessors() {
+        int s2Level = 12;
+        int prefixBitCount = 11;
+        int suffixBitCount = 16;
+        int suffixTableBlockIdOffset = 5;
+        int tableEntryBitCount = 24;
+        int entryRangeLengthBitCount = 8;
+        boolean isAllowedList = true;
+        SatS2RangeFileFormat satS2RangeFileFormat = new SatS2RangeFileFormat(s2Level,
+                prefixBitCount, suffixBitCount, suffixTableBlockIdOffset, tableEntryBitCount,
+                isAllowedList);
+
+        assertEquals(s2Level, satS2RangeFileFormat.getS2Level());
+        assertEquals(prefixBitCount, satS2RangeFileFormat.getPrefixBitCount());
+        assertEquals(suffixBitCount, satS2RangeFileFormat.getSuffixBitCount());
+        assertEquals(suffixTableBlockIdOffset, satS2RangeFileFormat.getSuffixTableBlockIdOffset());
+        assertEquals(tableEntryBitCount, satS2RangeFileFormat.getTableEntryBitCount());
+        assertEquals(entryRangeLengthBitCount,
+                satS2RangeFileFormat.getTableEntryRangeLengthBitCount());
+
+        // Derived values
+        assertEquals((6 * intPow2(prefixBitCount - 3)) - 1,
+                satS2RangeFileFormat.getMaxPrefixValue());
+        assertEquals(maxValForBits(suffixBitCount), satS2RangeFileFormat.getMaxSuffixValue());
+        assertEquals(tableEntryBitCount / 8, satS2RangeFileFormat.getTableEntryByteCount());
+        assertEquals(maxValForBits(entryRangeLengthBitCount),
+                satS2RangeFileFormat.getTableEntryMaxRangeLengthValue());
+        assertTrue(satS2RangeFileFormat.isAllowedList());
+    }
+
+    @Test
+    public void calculateRangeLength() {
+        int s2Level = 12;
+        int prefixBitCount = 11;
+        int suffixBitCount = 16;
+        int suffixTableBlockIdOffset = 5;
+        int suffixTableEntryBitCount = 24;
+        boolean isAllowedList = false;
+        SatS2RangeFileFormat satS2RangeFileFormat = new SatS2RangeFileFormat(s2Level,
+                prefixBitCount, suffixBitCount, suffixTableBlockIdOffset, suffixTableEntryBitCount,
+                isAllowedList);
+
+        assertEquals(2, satS2RangeFileFormat.calculateRangeLength(
+                cellId(s2Level, 0, 0), cellId(s2Level, 0, 2)));
+        assertEquals(2, satS2RangeFileFormat.calculateRangeLength(
+                cellId(s2Level, 0, 2), cellId(s2Level, 0, 4)));
+
+        int cellsPerFace = intPow2(s2Level * 2);
+        assertEquals(cellsPerFace + 2,
+                satS2RangeFileFormat.calculateRangeLength(
+                        cellId(s2Level, 0, 2), cellId(s2Level, 1, 4)));
+        assertFalse(satS2RangeFileFormat.isAllowedList());
+    }
+
+    @Test
+    public void createCellId() {
+        int s2Level = 12;
+        int prefixBitCount = 11;
+        int suffixBitCount = 16;
+        int suffixTableBlockIdOffset = 5;
+        int suffixTableEntryBitCount = 24;
+        boolean isAllowedList = true;
+        SatS2RangeFileFormat satS2RangeFileFormat = new SatS2RangeFileFormat(s2Level,
+                prefixBitCount, suffixBitCount, suffixTableBlockIdOffset, suffixTableEntryBitCount,
+                isAllowedList);
+
+        // Too many bits for prefixValue
+        assertThrows(IllegalArgumentException.class,
+                () -> satS2RangeFileFormat.createCellId(0b1000_00000000, 0b10000000_00000000));
+
+        // Too many bits for suffixValue
+        assertThrows(IllegalArgumentException.class,
+                () -> satS2RangeFileFormat.createCellId(0b1000_00000000, 0b100000000_00000000));
+
+        // Some valid cases.
+        assertEquals(cellId(s2Level, 4, 0),
+                satS2RangeFileFormat.createCellId(0b100_00000000, 0b00000000_00000000));
+        assertEquals(cellId(s2Level, 4, 1),
+                satS2RangeFileFormat.createCellId(0b100_00000000, 0b00000000_00000001));
+
+        assertEquals(cellId(s2Level, 5, intPow2(0)),
+                satS2RangeFileFormat.createCellId(0b101_00000000, 0b00000000_00000001));
+        assertEquals(cellId(s2Level, 5, intPow2(8)),
+                satS2RangeFileFormat.createCellId(0b101_00000000, 0b00000001_00000000));
+        assertEquals(cellId(s2Level, 5, intPow2(16)),
+                satS2RangeFileFormat.createCellId(0b101_00000001, 0b00000000_00000000));
+        assertTrue(satS2RangeFileFormat.isAllowedList());
+    }
+
+    @Test
+    public void extractFaceIdFromPrefix() {
+        int s2Level = 12;
+        int prefixBitCount = 11;
+        int suffixBitCount = 16;
+        int suffixTableBlockIdOffset = 5;
+        int suffixTableEntryBitCount = 24;
+        boolean isAllowedList = true;
+        SatS2RangeFileFormat satS2RangeFileFormat = new SatS2RangeFileFormat(s2Level,
+                prefixBitCount, suffixBitCount, suffixTableBlockIdOffset, suffixTableEntryBitCount,
+                isAllowedList);
+
+        assertEquals(0, satS2RangeFileFormat.extractFaceIdFromPrefix(0b00000000000));
+        assertEquals(5, satS2RangeFileFormat.extractFaceIdFromPrefix(0b10100000000));
+        // We require this (invalid) face ID to work, since this method is used to detect face ID
+        // overflow.
+        assertEquals(6, satS2RangeFileFormat.extractFaceIdFromPrefix(0b11000000000));
+        assertTrue(satS2RangeFileFormat.isAllowedList());
+    }
+
+    @Test
+    public void createSuffixTableValue() {
+        int s2Level = 12;
+        int prefixBitCount = 11;
+        int suffixBitCount = 16;
+        int suffixTableBlockIdOffset = 5;
+        int suffixTableEntryBitCount = 24;
+        boolean isAllowedList = true;
+        SatS2RangeFileFormat satS2RangeFileFormat = new SatS2RangeFileFormat(s2Level,
+                prefixBitCount, suffixBitCount, suffixTableBlockIdOffset, suffixTableEntryBitCount,
+                isAllowedList);
+
+        // Too many bits for rangeLength
+        assertThrows(IllegalArgumentException.class,
+                () -> satS2RangeFileFormat.createSuffixTableValue(0b100000000));
+
+        // Some valid cases.
+        assertEquals(0b10101, satS2RangeFileFormat.createSuffixTableValue(0b10101));
+        assertEquals(0b00000, satS2RangeFileFormat.createSuffixTableValue(0b00000));
+        assertTrue(satS2RangeFileFormat.isAllowedList());
+    }
+
+    private static int maxValForBits(int bits) {
+        return intPow2(bits) - 1;
+    }
+
+    private static int intPow2(int value) {
+        return (int) Math.pow(2, value);
+    }
+}
diff --git a/utils/satellite/s2storage/src/test/java/com/android/telephony/sats2range/SatS2RangeFileReaderTest.java b/utils/satellite/s2storage/src/test/java/com/android/telephony/sats2range/SatS2RangeFileReaderTest.java
new file mode 100644
index 0000000..bbfaef7
--- /dev/null
+++ b/utils/satellite/s2storage/src/test/java/com/android/telephony/sats2range/SatS2RangeFileReaderTest.java
@@ -0,0 +1,81 @@
+/*
+ * Copyright (C) 2023 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.telephony.sats2range;
+
+import static org.junit.Assert.assertEquals;
+
+import com.android.storage.s2.S2LevelRange;
+import com.android.telephony.sats2range.read.SatS2RangeFileFormat;
+import com.android.telephony.sats2range.read.SatS2RangeFileReader;
+import com.android.telephony.sats2range.utils.TestUtils;
+import com.android.telephony.sats2range.write.SatS2RangeFileWriter;
+
+import org.junit.Test;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+
+public class SatS2RangeFileReaderTest {
+    @Test
+    public void findEntryByCellId() throws IOException {
+        File file = File.createTempFile("test", ".dat");
+
+        SatS2RangeFileFormat fileFormat;
+        boolean isAllowedList = true;
+        S2LevelRange expectedRange1, expectedRange2, expectedRange3;
+        try (SatS2RangeFileWriter satS2RangeFileWriter = SatS2RangeFileWriter.open(
+                file, TestUtils.createS2RangeFileFormat(isAllowedList))) {
+            fileFormat = satS2RangeFileWriter.getFileFormat();
+
+            // Two ranges that share a prefix.
+            expectedRange1 = new S2LevelRange(
+                    TestUtils.createCellId(fileFormat, 1, 1000, 1000),
+                    TestUtils.createCellId(fileFormat, 1, 1000, 2000));
+            expectedRange2 = new S2LevelRange(
+                    TestUtils.createCellId(fileFormat, 1, 1000, 2000),
+                    TestUtils.createCellId(fileFormat, 1, 1000, 3000));
+            // This range has a different prefix, so will be in a different suffix table.
+            expectedRange3 = new S2LevelRange(
+                    TestUtils.createCellId(fileFormat, 1, 1001, 1000),
+                    TestUtils.createCellId(fileFormat, 1, 1001, 2000));
+
+            List<S2LevelRange> ranges = new ArrayList<>();
+            ranges.add(expectedRange1);
+            ranges.add(expectedRange2);
+            ranges.add(expectedRange3);
+            satS2RangeFileWriter.createSortedSuffixBlocks(ranges.iterator());
+        }
+
+        try (SatS2RangeFileReader satS2RangeFileReader = SatS2RangeFileReader.open(file)) {
+            assertEquals(isAllowedList, satS2RangeFileReader.isAllowedList());
+
+            S2LevelRange range1 = satS2RangeFileReader.findEntryByCellId(
+                    TestUtils.createCellId(fileFormat, 1, 1000, 1500));
+            assertEquals(expectedRange1, range1);
+
+            S2LevelRange range2 = satS2RangeFileReader.findEntryByCellId(
+                    TestUtils.createCellId(fileFormat, 1, 1000, 2500));
+            assertEquals(expectedRange2, range2);
+
+            S2LevelRange range3 = satS2RangeFileReader.findEntryByCellId(
+                    TestUtils.createCellId(fileFormat, 1, 1001, 1500));
+            assertEquals(expectedRange3, range3);
+        }
+    }
+}
diff --git a/utils/satellite/s2storage/src/test/java/com/android/telephony/sats2range/SuffixTableBlockMatcher.java b/utils/satellite/s2storage/src/test/java/com/android/telephony/sats2range/SuffixTableBlockMatcher.java
new file mode 100644
index 0000000..483d5f5
--- /dev/null
+++ b/utils/satellite/s2storage/src/test/java/com/android/telephony/sats2range/SuffixTableBlockMatcher.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2023 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.telephony.sats2range;
+
+import com.android.telephony.sats2range.read.SuffixTableBlock;
+
+import org.mockito.ArgumentMatcher;
+
+import java.util.Objects;
+
+/** A matcher for {@link SuffixTableBlock} - checks all the various fields and content. */
+public class SuffixTableBlockMatcher implements ArgumentMatcher<SuffixTableBlock> {
+
+    private final SuffixTableBlock mSuffixTableBlock;
+
+    public SuffixTableBlockMatcher(SuffixTableBlock suffixTableBlock) {
+        mSuffixTableBlock = suffixTableBlock;
+    }
+
+    @Override
+    public boolean matches(SuffixTableBlock block) {
+        if (mSuffixTableBlock.getPrefix() != block.getPrefix()
+                || mSuffixTableBlock.getEntryCount() != block.getEntryCount()) {
+            return false;
+        }
+        for (int i = 0; i < mSuffixTableBlock.getEntryCount(); i++) {
+            SuffixTableBlock.Entry expectedEntry = mSuffixTableBlock.getEntryByIndex(i);
+            SuffixTableBlock.Entry actualEntry = block.getEntryByIndex(i);
+            if (!Objects.equals(expectedEntry, actualEntry)) {
+                return false;
+            }
+        }
+        return true;
+    }
+}
diff --git a/utils/satellite/s2storage/src/test/java/com/android/telephony/sats2range/SuffixTableBlockTest.java b/utils/satellite/s2storage/src/test/java/com/android/telephony/sats2range/SuffixTableBlockTest.java
new file mode 100644
index 0000000..04b915b
--- /dev/null
+++ b/utils/satellite/s2storage/src/test/java/com/android/telephony/sats2range/SuffixTableBlockTest.java
@@ -0,0 +1,311 @@
+/*
+ * Copyright (C) 2023 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.telephony.sats2range;
+
+import static org.junit.Assert.assertArrayEquals;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThrows;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.argThat;
+
+import com.android.storage.block.write.BlockWriter;
+import com.android.storage.s2.S2LevelRange;
+import com.android.telephony.sats2range.read.SatS2RangeFileFormat;
+import com.android.telephony.sats2range.read.SuffixTableBlock;
+import com.android.telephony.sats2range.read.SuffixTableSharedData;
+import com.android.telephony.sats2range.utils.TestUtils;
+import com.android.telephony.sats2range.write.SuffixTableWriter;
+
+import org.junit.Test;
+import org.mockito.InOrder;
+import org.mockito.Mockito;
+
+/** Tests for {@link SuffixTableWriter} and {@link SuffixTableBlock}. */
+public class SuffixTableBlockTest {
+    @Test
+    public void writer_createEmptyBlockWriter() throws Exception {
+        BlockWriter blockWriter = SuffixTableWriter.createEmptyBlockWriter();
+        BlockWriter.ReadBack readBack = blockWriter.close();
+        assertEquals(SatS2RangeFileFormat.BLOCK_TYPE_SUFFIX_TABLE, readBack.getType());
+        assertArrayEquals(new byte[0], readBack.getExtraBytes());
+        assertEquals(0, readBack.getBlockData().getSize());
+    }
+
+    @Test
+    public void writer_createPopulatedBlockWriter_noEntriesThrows() throws Exception {
+        SatS2RangeFileFormat fileFormat = TestUtils.createS2RangeFileFormat(true);
+        assertEquals(13, fileFormat.getPrefixBitCount());
+
+        int tablePrefixValue = 0b0010011_00110100;
+        SuffixTableSharedData suffixTableSharedData = new SuffixTableSharedData(tablePrefixValue);
+
+        SuffixTableWriter suffixTableWriter =
+                SuffixTableWriter.createPopulated(fileFormat, suffixTableSharedData);
+        // IllegalStateException is thrown because there is no entry in the block
+        assertThrows(IllegalStateException.class, suffixTableWriter::close);
+    }
+
+    @Test
+    public void writer_createPopulatedBlockWriter_addRange() throws Exception {
+        SatS2RangeFileFormat fileFormat = TestUtils.createS2RangeFileFormat(true);
+        assertEquals(13, fileFormat.getPrefixBitCount());
+        assertEquals(14, fileFormat.getSuffixBitCount());
+
+        int tablePrefixValue = 0b0010011_00110100;
+        int maxSuffixValue = 0b00111111_11111111;
+        SuffixTableSharedData suffixTableSharedData = new SuffixTableSharedData(tablePrefixValue);
+
+        SuffixTableWriter suffixTableWriter =
+                SuffixTableWriter.createPopulated(fileFormat, suffixTableSharedData);
+
+        long invalidStartCellId = fileFormat.createCellId(tablePrefixValue - 1, 0);
+        long validStartCellId = fileFormat.createCellId(tablePrefixValue, 0);
+        long invalidEndCellId = fileFormat.createCellId(tablePrefixValue + 1, maxSuffixValue);
+        long validEndCellId = fileFormat.createCellId(tablePrefixValue, maxSuffixValue);
+        {
+            S2LevelRange badStartCellId = new S2LevelRange(invalidStartCellId, validEndCellId);
+            assertThrows(IllegalArgumentException.class,
+                    () -> suffixTableWriter.addRange(badStartCellId));
+        }
+        {
+            S2LevelRange badEndCellId = new S2LevelRange(validStartCellId, invalidEndCellId);
+            assertThrows(IllegalArgumentException.class,
+                    () -> suffixTableWriter.addRange(badEndCellId));
+        }
+    }
+
+    @Test
+    public void writer_createPopulatedBlockWriter_rejectOverlappingRanges() throws Exception {
+        SatS2RangeFileFormat fileFormat = TestUtils.createS2RangeFileFormat(true);
+        assertEquals(13, fileFormat.getPrefixBitCount());
+        assertEquals(14, fileFormat.getSuffixBitCount());
+
+        int tablePrefixValue = 0b0010011_00110100;
+        int maxSuffixValue = 0b00111111_11111111;
+        SuffixTableSharedData suffixTableSharedData = new SuffixTableSharedData(tablePrefixValue);
+
+        SuffixTableWriter suffixTableWriter =
+                SuffixTableWriter.createPopulated(fileFormat, suffixTableSharedData);
+        S2LevelRange suffixTableRange1 = new S2LevelRange(
+                fileFormat.createCellId(tablePrefixValue, 1000),
+                fileFormat.createCellId(tablePrefixValue, 1001));
+        suffixTableWriter.addRange(suffixTableRange1);
+
+        // It's fine to add a range that starts adjacent to the last one.
+        S2LevelRange suffixTableRange2 = new S2LevelRange(
+                fileFormat.createCellId(tablePrefixValue, 1001),
+                fileFormat.createCellId(tablePrefixValue, 1002));
+        suffixTableWriter.addRange(suffixTableRange2);
+
+        // IllegalArgumentException is thrown because suffixTableRange2 already exists
+        assertThrows(IllegalArgumentException.class,
+                () -> suffixTableWriter.addRange(suffixTableRange2));
+
+        // Try similar checks at the top end of the table.
+        S2LevelRange suffixTableRange3 = new S2LevelRange(
+                fileFormat.createCellId(tablePrefixValue, maxSuffixValue - 1),
+                fileFormat.createCellId(tablePrefixValue, maxSuffixValue));
+        suffixTableWriter.addRange(suffixTableRange3);
+
+        // IllegalArgumentException is thrown because ranges already exist
+        assertThrows(IllegalArgumentException.class,
+                () -> suffixTableWriter.addRange(suffixTableRange1));
+        assertThrows(IllegalArgumentException.class,
+                () -> suffixTableWriter.addRange(suffixTableRange2));
+        assertThrows(IllegalArgumentException.class,
+                () -> suffixTableWriter.addRange(suffixTableRange3));
+
+        // Now "complete" the table: there can be no entry after this one.
+        S2LevelRange suffixTableRange4 = new S2LevelRange(
+                fileFormat.createCellId(tablePrefixValue, maxSuffixValue),
+                fileFormat.createCellId(tablePrefixValue + 1, 0));
+        suffixTableWriter.addRange(suffixTableRange4);
+
+        assertThrows(IllegalArgumentException.class,
+                () -> suffixTableWriter.addRange(suffixTableRange4));
+
+        assertThrows(IllegalArgumentException.class,
+                () -> suffixTableWriter.addRange(suffixTableRange1));
+        assertThrows(IllegalArgumentException.class,
+                () -> suffixTableWriter.addRange(suffixTableRange2));
+        assertThrows(IllegalArgumentException.class,
+                () -> suffixTableWriter.addRange(suffixTableRange3));
+        assertThrows(IllegalArgumentException.class,
+                () -> suffixTableWriter.addRange(suffixTableRange4));
+    }
+
+    @Test
+    public void suffixTableBlock_empty() {
+        SatS2RangeFileFormat fileFormat = TestUtils.createS2RangeFileFormat(true);
+        assertEquals(13, fileFormat.getPrefixBitCount());
+        int tablePrefix = 0b10011_00110100;
+
+        SuffixTableBlock suffixTableBlock = SuffixTableBlock.createEmpty(fileFormat, tablePrefix);
+        assertEquals(tablePrefix, suffixTableBlock.getPrefix());
+        assertNull(suffixTableBlock.findEntryByCellId(fileFormat.createCellId(tablePrefix, 1)));
+        assertEquals(0, suffixTableBlock.getEntryCount());
+        assertThrows(IndexOutOfBoundsException.class,
+                () -> suffixTableBlock.getEntryByIndex(0));
+        assertThrows(IndexOutOfBoundsException.class,
+                () -> suffixTableBlock.getEntryByIndex(1));
+    }
+
+    @Test
+    public void suffixTableBlock_populated_findEntryByCellId() throws Exception {
+        SatS2RangeFileFormat fileFormat = TestUtils.createS2RangeFileFormat(true);
+        assertEquals(13, fileFormat.getPrefixBitCount());
+        assertEquals(14, fileFormat.getSuffixBitCount());
+
+        int tablePrefix = 0b10011_00110100;
+        int maxSuffix = 0b111111_11111111;
+        SuffixTableSharedData suffixTableSharedData = new SuffixTableSharedData(tablePrefix);
+
+        SuffixTableWriter suffixTableWriter =
+                SuffixTableWriter.createPopulated(fileFormat, suffixTableSharedData);
+
+        long entry1StartCellId = fileFormat.createCellId(tablePrefix, 1000);
+        long entry1EndCellId = fileFormat.createCellId(tablePrefix, 2000);
+        S2LevelRange entry1 = new S2LevelRange(entry1StartCellId, entry1EndCellId);
+        suffixTableWriter.addRange(entry1);
+
+        long entry2StartCellId = fileFormat.createCellId(tablePrefix, 2000);
+        long entry2EndCellId = fileFormat.createCellId(tablePrefix, 3000);
+        S2LevelRange entry2 = new S2LevelRange(entry2StartCellId, entry2EndCellId);
+        suffixTableWriter.addRange(entry2);
+
+        // There is a deliberate gap here between entry2 and entry3.
+        long entry3StartCellId = fileFormat.createCellId(tablePrefix, 4000);
+        long entry3EndCellId = fileFormat.createCellId(tablePrefix, 5000);
+        S2LevelRange entry3 = new S2LevelRange(entry3StartCellId, entry3EndCellId);
+        suffixTableWriter.addRange(entry3);
+
+        long entry4StartCellId = fileFormat.createCellId(tablePrefix, maxSuffix - 999);
+        long entry4EndCellId = fileFormat.createCellId(tablePrefix + 1, 0);
+        S2LevelRange entry4 = new S2LevelRange(entry4StartCellId, entry4EndCellId);
+        suffixTableWriter.addRange(entry4);
+
+        BlockWriter.ReadBack blockReadback = suffixTableWriter.close();
+        SuffixTableBlock suffixTableBlock =
+                SuffixTableBlock.createPopulated(fileFormat, blockReadback.getBlockData());
+        assertEquals(tablePrefix, suffixTableBlock.getPrefix());
+
+        assertNull(findEntryByCellId(fileFormat, suffixTableBlock, tablePrefix, 999));
+        assertEquals(entry1, findEntryByCellId(fileFormat, suffixTableBlock, tablePrefix, 1000));
+        assertEquals(entry1, findEntryByCellId(fileFormat, suffixTableBlock, tablePrefix, 1001));
+        assertEquals(entry1, findEntryByCellId(fileFormat, suffixTableBlock, tablePrefix, 1999));
+        assertEquals(entry2, findEntryByCellId(fileFormat, suffixTableBlock, tablePrefix, 2000));
+        assertEquals(entry2, findEntryByCellId(fileFormat, suffixTableBlock, tablePrefix, 2001));
+        assertEquals(entry2, findEntryByCellId(fileFormat, suffixTableBlock, tablePrefix, 2999));
+        assertNull(findEntryByCellId(fileFormat, suffixTableBlock, tablePrefix, 3000));
+        assertNull(findEntryByCellId(fileFormat, suffixTableBlock, tablePrefix, 3999));
+        assertEquals(entry3, findEntryByCellId(fileFormat, suffixTableBlock, tablePrefix, 4000));
+        assertEquals(entry3, findEntryByCellId(fileFormat, suffixTableBlock, tablePrefix, 4999));
+        assertNull(findEntryByCellId(fileFormat, suffixTableBlock, tablePrefix, maxSuffix - 1000));
+        assertEquals(
+                entry4,
+                findEntryByCellId(fileFormat, suffixTableBlock, tablePrefix, maxSuffix - 999));
+        assertEquals(
+                entry4,
+                findEntryByCellId(fileFormat, suffixTableBlock, tablePrefix, maxSuffix));
+
+        assertEquals(4, suffixTableBlock.getEntryCount());
+        assertThrows(IndexOutOfBoundsException.class,
+                () -> suffixTableBlock.getEntryByIndex(-1));
+        assertThrows(IndexOutOfBoundsException.class,
+                () -> suffixTableBlock.getEntryByIndex(4));
+
+        assertEquals(entry1, suffixTableBlock.getEntryByIndex(0).getSuffixTableRange());
+        assertEquals(entry2, suffixTableBlock.getEntryByIndex(1).getSuffixTableRange());
+        assertEquals(entry3, suffixTableBlock.getEntryByIndex(2).getSuffixTableRange());
+        assertEquals(entry4, suffixTableBlock.getEntryByIndex(3).getSuffixTableRange());
+    }
+
+    @Test
+    public void suffixTableBlock_populated_findEntryByCellId_cellIdOutOfRange() throws Exception {
+        SatS2RangeFileFormat fileFormat = TestUtils.createS2RangeFileFormat(true);
+
+        int tablePrefix = 0b10011_00110100;
+        assertEquals(13, fileFormat.getPrefixBitCount());
+
+        int tzIdSetBankId = 5;
+        assertTrue(tzIdSetBankId <= fileFormat.getMaxPrefixValue());
+
+        SuffixTableSharedData suffixTableSharedData = new SuffixTableSharedData(tablePrefix);
+
+        SuffixTableWriter suffixTableWriter =
+                SuffixTableWriter.createPopulated(fileFormat, suffixTableSharedData);
+        long entry1StartCellId = fileFormat.createCellId(tablePrefix, 1000);
+        long entry1EndCellId = fileFormat.createCellId(tablePrefix, 2000);
+        S2LevelRange entry1 = new S2LevelRange(entry1StartCellId, entry1EndCellId);
+        suffixTableWriter.addRange(entry1);
+        BlockWriter.ReadBack blockReadback = suffixTableWriter.close();
+
+        SuffixTableBlock suffixTableBlock =
+                SuffixTableBlock.createPopulated(fileFormat, blockReadback.getBlockData());
+
+        assertThrows(IllegalArgumentException.class, () -> suffixTableBlock.findEntryByCellId(
+                fileFormat.createCellId(tablePrefix - 1, 0)));
+        assertThrows(IllegalArgumentException.class, () -> suffixTableBlock.findEntryByCellId(
+                fileFormat.createCellId(tablePrefix + 1, 0)));
+    }
+
+    @Test
+    public void suffixTableBlock_visit() throws Exception {
+        SatS2RangeFileFormat fileFormat = TestUtils.createS2RangeFileFormat(true);
+
+        int tablePrefix = 0b10011_00110100;
+        assertEquals(13, fileFormat.getPrefixBitCount());
+
+        SuffixTableSharedData sharedData = new SuffixTableSharedData(tablePrefix);
+
+        SuffixTableWriter suffixTableWriter =
+                SuffixTableWriter.createPopulated(fileFormat, sharedData);
+
+        S2LevelRange entry1 = new S2LevelRange(
+                fileFormat.createCellId(tablePrefix, 1001),
+                fileFormat.createCellId(tablePrefix, 1101));
+        suffixTableWriter.addRange(entry1);
+
+        S2LevelRange entry2 = new S2LevelRange(
+                fileFormat.createCellId(tablePrefix, 2001),
+                fileFormat.createCellId(tablePrefix, 2101));
+        suffixTableWriter.addRange(entry2);
+
+        BlockWriter.ReadBack readBack = suffixTableWriter.close();
+
+        // Read the data back and confirm it matches what we expected.
+        SuffixTableBlock suffixTableBlock =
+                SuffixTableBlock.createPopulated(fileFormat, readBack.getBlockData());
+        SuffixTableBlock.SuffixTableBlockVisitor mockVisitor =
+                Mockito.mock(SuffixTableBlock.SuffixTableBlockVisitor.class);
+
+        suffixTableBlock.visit(mockVisitor);
+
+        InOrder inOrder = Mockito.inOrder(mockVisitor);
+        inOrder.verify(mockVisitor).begin();
+        inOrder.verify(mockVisitor).visit(argThat(new SuffixTableBlockMatcher(suffixTableBlock)));
+        inOrder.verify(mockVisitor).end();
+    }
+
+    private S2LevelRange findEntryByCellId(SatS2RangeFileFormat fileFormat,
+            SuffixTableBlock suffixTableBlock, int prefix, int suffix) {
+        long cellId = fileFormat.createCellId(prefix, suffix);
+        SuffixTableBlock.Entry entry = suffixTableBlock.findEntryByCellId(cellId);
+        return entry == null ? null : entry.getSuffixTableRange();
+    }
+}
diff --git a/utils/satellite/s2storage/src/test/java/com/android/telephony/sats2range/SuffixTableExtraInfoTest.java b/utils/satellite/s2storage/src/test/java/com/android/telephony/sats2range/SuffixTableExtraInfoTest.java
new file mode 100644
index 0000000..f992ae7
--- /dev/null
+++ b/utils/satellite/s2storage/src/test/java/com/android/telephony/sats2range/SuffixTableExtraInfoTest.java
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2023 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.telephony.sats2range;
+
+import static org.junit.Assert.assertEquals;
+
+import com.android.storage.block.read.BlockInfo;
+import com.android.storage.block.write.BlockWriter;
+import com.android.storage.s2.S2LevelRange;
+import com.android.telephony.sats2range.read.SatS2RangeFileFormat;
+import com.android.telephony.sats2range.read.SuffixTableExtraInfo;
+import com.android.telephony.sats2range.read.SuffixTableSharedData;
+import com.android.telephony.sats2range.utils.TestUtils;
+import com.android.telephony.sats2range.write.SuffixTableWriter;
+
+import org.junit.Test;
+public class SuffixTableExtraInfoTest {
+
+    @Test
+    public void create_emptyBlock() throws Exception {
+        // Generate a real suffix table block info and an empty block.
+        SatS2RangeFileFormat fileFormat = TestUtils.createS2RangeFileFormat(true);
+        BlockWriter emptyBlockWriter =
+                SuffixTableWriter.createEmptyBlockWriter();
+        BlockWriter.ReadBack readBack = emptyBlockWriter.close();
+
+        // Read back the block info.
+        BlockInfo blockInfo = createBlockInfo(readBack);
+
+        SuffixTableExtraInfo extraInfo = SuffixTableExtraInfo.create(fileFormat, blockInfo);
+        assertEquals(0, extraInfo.getEntryCount());
+    }
+
+    @Test
+    public void create_nonEmptyBlock() throws Exception {
+        // Generate a real suffix table block info and block containing some elements.
+        SatS2RangeFileFormat fileFormat = TestUtils.createS2RangeFileFormat(true);
+        SuffixTableSharedData suffixTableSharedData = createSuffixTableSharedData();
+        SuffixTableWriter suffixTableWriter =
+                SuffixTableWriter.createPopulated(fileFormat, suffixTableSharedData);
+
+        int tablePrefix = suffixTableSharedData.getTablePrefix();
+        S2LevelRange range1 = new S2LevelRange(
+                fileFormat.createCellId(tablePrefix, 1000),
+                fileFormat.createCellId(tablePrefix, 1001));
+        S2LevelRange range2 = new S2LevelRange(
+                fileFormat.createCellId(tablePrefix, 1002),
+                fileFormat.createCellId(tablePrefix, 1003));
+        S2LevelRange range3 = new S2LevelRange(
+                fileFormat.createCellId(tablePrefix, 1004),
+                fileFormat.createCellId(tablePrefix, 1005));
+
+        suffixTableWriter.addRange(range1);
+        suffixTableWriter.addRange(range2);
+        suffixTableWriter.addRange(range3);
+        BlockWriter.ReadBack readBack = suffixTableWriter.close();
+
+        // Read back the block info.
+        BlockInfo blockInfo = createBlockInfo(readBack);
+
+        SuffixTableExtraInfo extraInfo = SuffixTableExtraInfo.create(fileFormat, blockInfo);
+        assertEquals(3, extraInfo.getEntryCount());
+    }
+
+    private static SuffixTableSharedData createSuffixTableSharedData() {
+        int arbitraryPrefixValue = 1111;
+        return new SuffixTableSharedData(arbitraryPrefixValue);
+    }
+
+    /** Creates a BlockInfo for a written block. */
+    private static BlockInfo createBlockInfo(BlockWriter.ReadBack readBack) {
+        int arbitraryBlockId = 2222;
+        long arbitraryByteOffset = 12345L;
+        return new BlockInfo(
+                arbitraryBlockId, readBack.getType(), arbitraryByteOffset,
+                readBack.getBlockData().getSize(), readBack.getExtraBytes());
+    }
+}
diff --git a/utils/satellite/s2storage/src/test/java/com/android/telephony/sats2range/SuffixTableSharedDataTest.java b/utils/satellite/s2storage/src/test/java/com/android/telephony/sats2range/SuffixTableSharedDataTest.java
new file mode 100644
index 0000000..2baefa9
--- /dev/null
+++ b/utils/satellite/s2storage/src/test/java/com/android/telephony/sats2range/SuffixTableSharedDataTest.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2023 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.telephony.sats2range;
+
+import static org.junit.Assert.assertEquals;
+
+import com.android.telephony.sats2range.read.SuffixTableSharedData;
+import com.android.telephony.sats2range.write.SuffixTableSharedDataWriter;
+
+import org.junit.Test;
+
+/** Tests for {@link SuffixTableSharedData} and {@link SuffixTableSharedDataWriter}. */
+public class SuffixTableSharedDataTest {
+    @Test
+    public void testSuffixTableSharedData() {
+        int prefix = 321;
+        SuffixTableSharedData sharedData = new SuffixTableSharedData(prefix);
+        byte[] bytes = SuffixTableSharedDataWriter.toBytes(sharedData);
+
+        assertEquals(sharedData, SuffixTableSharedData.fromBytes(bytes));
+    }
+}
+
diff --git a/utils/satellite/s2storage/src/testutils/java/com/android/telephony/sats2range/testutils/TestUtils.java b/utils/satellite/s2storage/src/testutils/java/com/android/telephony/sats2range/testutils/TestUtils.java
new file mode 100644
index 0000000..4b8a026
--- /dev/null
+++ b/utils/satellite/s2storage/src/testutils/java/com/android/telephony/sats2range/testutils/TestUtils.java
@@ -0,0 +1,144 @@
+/*
+ * Copyright (C) 2023 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.telephony.sats2range.utils;
+
+import static com.android.storage.s2.S2Support.FACE_BIT_COUNT;
+
+import static org.junit.Assert.assertFalse;
+
+import com.android.storage.util.BitwiseUtils;
+import com.android.telephony.sats2range.read.SatS2RangeFileFormat;
+
+import java.io.File;
+import java.io.IOException;
+import java.io.PrintStream;
+import java.nio.file.FileVisitResult;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.SimpleFileVisitor;
+import java.nio.file.attribute.BasicFileAttributes;
+
+/** A utility class for satellite tests */
+public class TestUtils {
+    public static final int TEST_S2_LEVEL = 12;
+
+    /** Returns a valid {@link SatS2RangeFileFormat}. */
+    public static SatS2RangeFileFormat createS2RangeFileFormat(boolean isAllowedList) {
+        int dataS2Level = TEST_S2_LEVEL;
+        int faceIdBits = 3;
+        int bitCountPerLevel = 2;
+        int s2LevelBitCount = (dataS2Level * bitCountPerLevel) + faceIdBits;
+        int prefixLevel = 5;
+        int prefixBitCount = faceIdBits + (prefixLevel * bitCountPerLevel);
+        int suffixBitCount = s2LevelBitCount - prefixBitCount;
+        int suffixTableEntryBitCount = 4 * Byte.SIZE;
+        int suffixTableBlockIdOffset = 5;
+        return new SatS2RangeFileFormat(dataS2Level, prefixBitCount, suffixBitCount,
+                suffixTableBlockIdOffset, suffixTableEntryBitCount, isAllowedList);
+    }
+
+    /** Create an S2 cell ID */
+    public static long createCellId(
+            SatS2RangeFileFormat fileFormat, int faceId, int otherPrefixBits, int suffixBits) {
+        int prefixBitCount = fileFormat.getPrefixBitCount();
+        int otherPrefixBitsCount = prefixBitCount - FACE_BIT_COUNT;
+        int maxOtherPrefixBits = (int) BitwiseUtils.getLowBitsMask(otherPrefixBitsCount);
+        if (otherPrefixBits > maxOtherPrefixBits) {
+            throw new IllegalArgumentException("otherPrefixBits=" + otherPrefixBits
+                    + " (" + Integer.toBinaryString(otherPrefixBits) + ")"
+                    + " has more bits than otherPrefixBitsCount=" + otherPrefixBitsCount
+                    + " allows");
+        }
+
+        int prefixValue = faceId;
+        prefixValue <<= otherPrefixBitsCount;
+        prefixValue |= otherPrefixBits;
+
+        int suffixBitCount = fileFormat.getSuffixBitCount();
+        if (suffixBits > BitwiseUtils.getLowBitsMask(suffixBitCount)) {
+            throw new IllegalArgumentException(
+                    "suffixBits=" + suffixBits + " (" + Integer.toBinaryString(suffixBits)
+                            + ") has more bits than " + suffixBitCount + " bits allows");
+        }
+        return fileFormat.createCellId(prefixValue, suffixBits);
+    }
+
+    /** Create a temporary directory */
+    public static Path createTempDir(Class<?> testClass) throws IOException {
+        return Files.createTempDirectory(testClass.getSimpleName());
+    }
+
+    /** Delete a directory */
+    public static void deleteDirectory(Path dir) throws IOException {
+        Files.walkFileTree(dir, new SimpleFileVisitor<>() {
+            @Override
+            public FileVisitResult visitFile(Path path, BasicFileAttributes basicFileAttributes)
+                    throws IOException {
+                Files.deleteIfExists(path);
+                return FileVisitResult.CONTINUE;
+            }
+
+            @Override
+            public FileVisitResult postVisitDirectory(Path path, IOException e) throws IOException {
+                Files.delete(path);
+                return FileVisitResult.CONTINUE;
+            }
+        });
+        assertFalse(Files.exists(dir));
+    }
+
+    /** Create a valid test satellite S2 cell file */
+    public static void createValidTestS2CellFile(
+            File outputFile, SatS2RangeFileFormat fileFormat) throws Exception {
+        try (PrintStream printer = new PrintStream(outputFile)) {
+            // Range 1
+            for (int suffix = 1000; suffix < 2000; suffix++) {
+                printer.println(String.valueOf(fileFormat.createCellId(0b100_11111111, suffix)));
+            }
+
+            // Range 2
+            for (int suffix = 2001; suffix < 3000; suffix++) {
+                printer.println(String.valueOf(fileFormat.createCellId(0b100_11111111, suffix)));
+            }
+
+            // Range 3
+            for (int suffix = 1000; suffix < 2000; suffix++) {
+                printer.println(String.valueOf(fileFormat.createCellId(0b101_11111111, suffix)));
+            }
+            printer.print(String.valueOf(fileFormat.createCellId(0b101_11111111, 2000)));
+
+            printer.close();
+        }
+    }
+
+    /** Create a invalid test satellite S2 cell file */
+    public static void createInvalidTestS2CellFile(
+            File outputFile, SatS2RangeFileFormat fileFormat) throws Exception {
+        try (PrintStream printer = new PrintStream(outputFile)) {
+            // Valid line
+            printer.println(String.valueOf(fileFormat.createCellId(0b100_11111111, 100)));
+
+            // Invalid line
+            printer.print("Invalid line");
+
+            // Another valid line
+            printer.println(String.valueOf(fileFormat.createCellId(0b100_11111111, 200)));
+
+            printer.close();
+        }
+    }
+}
diff --git a/utils/satellite/s2storage/src/write/java/com/android/telephony/sats2range/write/HeaderBlockWriter.java b/utils/satellite/s2storage/src/write/java/com/android/telephony/sats2range/write/HeaderBlockWriter.java
new file mode 100644
index 0000000..d4e9310
--- /dev/null
+++ b/utils/satellite/s2storage/src/write/java/com/android/telephony/sats2range/write/HeaderBlockWriter.java
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2023 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.telephony.sats2range.write;
+
+import com.android.storage.block.read.BlockData;
+import com.android.storage.block.write.BlockWriter;
+import com.android.storage.io.write.TypedOutputStream;
+import com.android.telephony.sats2range.read.HeaderBlock;
+import com.android.telephony.sats2range.read.SatS2RangeFileFormat;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.MappedByteBuffer;
+import java.nio.channels.FileChannel;
+import java.nio.file.StandardOpenOption;
+
+/** A {@link BlockWriter} that can generate a satellite S2 data file header block. */
+public final class HeaderBlockWriter implements BlockWriter {
+
+    private static final byte[] EMPTY_BYTE_ARRAY = new byte[0];
+
+    private final File mFile;
+
+    private final SatS2RangeFileFormat mFileFormat;
+
+    private boolean mIsOpen = true;
+
+    private HeaderBlockWriter(SatS2RangeFileFormat fileFormat, File file) {
+        mFileFormat = fileFormat;
+        mFile = file;
+    }
+
+    /** Creates a new {@link HeaderBlockWriter}. */
+    public static HeaderBlockWriter create(SatS2RangeFileFormat fileFormat) throws IOException {
+        return new HeaderBlockWriter(fileFormat, File.createTempFile("header", ".bin"));
+    }
+
+    @Override
+    public ReadBack close() throws IOException {
+        checkIsOpen();
+        mIsOpen = false;
+
+        try (TypedOutputStream tos = new TypedOutputStream(new FileOutputStream(mFile))) {
+            tos.writeUnsignedByte(mFileFormat.getS2Level());
+            tos.writeUnsignedByte(mFileFormat.getPrefixBitCount());
+            tos.writeUnsignedByte(mFileFormat.getSuffixBitCount());
+            tos.writeUnsignedByte(mFileFormat.getTableEntryBitCount());
+            tos.writeUnsignedByte(mFileFormat.getSuffixTableBlockIdOffset());
+            tos.writeUnsignedByte(mFileFormat.isAllowedList()
+                    ? HeaderBlock.TRUE : HeaderBlock.FALSE);
+        }
+
+        FileChannel fileChannel = FileChannel.open(mFile.toPath(), StandardOpenOption.READ);
+        MappedByteBuffer map = fileChannel.map(FileChannel.MapMode.READ_ONLY, 0, mFile.length());
+        fileChannel.close();
+        BlockData blockData = new BlockData(map);
+        return new ReadBack() {
+            @Override
+            public byte[] getExtraBytes() {
+                return EMPTY_BYTE_ARRAY;
+            }
+
+            @Override
+            public int getType() {
+                return SatS2RangeFileFormat.BLOCK_TYPE_HEADER;
+            }
+
+            @Override
+            public BlockData getBlockData() {
+                return blockData;
+            }
+        };
+    }
+
+    private void checkIsOpen() {
+        if (!mIsOpen) {
+            throw new IllegalStateException("Writer is closed.");
+        }
+    }
+}
diff --git a/utils/satellite/s2storage/src/write/java/com/android/telephony/sats2range/write/PushBackIterator.java b/utils/satellite/s2storage/src/write/java/com/android/telephony/sats2range/write/PushBackIterator.java
new file mode 100644
index 0000000..7bc375e
--- /dev/null
+++ b/utils/satellite/s2storage/src/write/java/com/android/telephony/sats2range/write/PushBackIterator.java
@@ -0,0 +1,56 @@
+/*
+ * Copyright (C) 2023 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.telephony.sats2range.write;
+
+import java.util.ArrayList;
+import java.util.Iterator;
+
+/**
+ * An iterator that can have elements pushed back onto it. {@link #remove()} is not supported.
+ *
+ * @param <E> The type of the element returned by this iterator
+ */
+public final class PushBackIterator<E> implements Iterator<E> {
+
+    private final ArrayList<E> mPushBackStack = new ArrayList<>();
+
+    private final Iterator<E> mIterator;
+
+    public PushBackIterator(Iterator<E> iterator) {
+        mIterator = iterator;
+    }
+
+    @Override
+    public boolean hasNext() {
+        return !mPushBackStack.isEmpty() || mIterator.hasNext();
+    }
+
+    @Override
+    public E next() {
+        if (!mPushBackStack.isEmpty()) {
+            return mPushBackStack.remove(mPushBackStack.size() - 1);
+        }
+        return mIterator.next();
+    }
+
+    /**
+     * Pushes the element to the front of the iterator again.
+     */
+    public void pushBack(E element) {
+        mPushBackStack.add(element);
+    }
+}
diff --git a/utils/satellite/s2storage/src/write/java/com/android/telephony/sats2range/write/SatS2RangeFileWriter.java b/utils/satellite/s2storage/src/write/java/com/android/telephony/sats2range/write/SatS2RangeFileWriter.java
new file mode 100644
index 0000000..9b3c20e
--- /dev/null
+++ b/utils/satellite/s2storage/src/write/java/com/android/telephony/sats2range/write/SatS2RangeFileWriter.java
@@ -0,0 +1,237 @@
+/*
+ * Copyright (C) 2023 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.telephony.sats2range.write;
+
+import com.android.storage.block.write.BlockFileWriter;
+import com.android.storage.block.write.BlockWriter;
+import com.android.storage.block.write.EmptyBlockWriter;
+import com.android.storage.s2.S2LevelRange;
+import com.android.storage.s2.S2Support;
+import com.android.telephony.sats2range.read.SatS2RangeFileFormat;
+import com.android.telephony.sats2range.read.SuffixTableSharedData;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayDeque;
+import java.util.ArrayList;
+import java.util.Deque;
+import java.util.Iterator;
+import java.util.List;
+
+/** Writes a satellite S2 data file. */
+public final class SatS2RangeFileWriter implements AutoCloseable {
+
+    private final HeaderBlockWriter mHeaderBlockWriter;
+
+    private final List<BlockWriter> mSuffixTableBlockWriters = new ArrayList<>();
+
+    private final BlockFileWriter mBlockFileWriter;
+
+    private final SatS2RangeFileFormat mFileFormat;
+
+    private SatS2RangeFileWriter(SatS2RangeFileFormat fileFormat, BlockFileWriter blockFileWriter)
+            throws IOException {
+        mBlockFileWriter = blockFileWriter;
+        mFileFormat = fileFormat;
+
+        mHeaderBlockWriter = HeaderBlockWriter.create(fileFormat);
+    }
+
+    /** Opens a file for writing with the specified format. */
+    public static SatS2RangeFileWriter open(File outFile, SatS2RangeFileFormat fileFormat)
+            throws IOException {
+        BlockFileWriter writer = BlockFileWriter.open(
+                SatS2RangeFileFormat.MAGIC, SatS2RangeFileFormat.VERSION, outFile);
+        return new SatS2RangeFileWriter(fileFormat, writer);
+    }
+
+    /**
+     * Group the sorted ranges into contiguous suffix blocks. Big ranges might get split as
+     * needed to fit them into suffix blocks. The ranges must be of the expected S2 level
+     * and ordered by cell ID.
+     */
+    public void createSortedSuffixBlocks(Iterator<S2LevelRange> ranges) throws IOException {
+        PushBackIterator<S2LevelRange> pushBackIterator = new PushBackIterator<>(ranges);
+
+        // For each prefix value, collect all the ranges that match.
+        for (int currentPrefix = 0;
+                currentPrefix <= mFileFormat.getMaxPrefixValue();
+                currentPrefix++) {
+
+            // Step 1:
+            // populate samePrefixRanges, which holds ranges that have a prefix of currentPrefix.
+            List<S2LevelRange> samePrefixRanges =
+                    collectSamePrefixRanges(pushBackIterator, currentPrefix);
+
+            // Step 2: Write samePrefixRanges to a suffix table.
+            BlockWriter blockWriter = writeSamePrefixRanges(currentPrefix, samePrefixRanges);
+            mSuffixTableBlockWriters.add(blockWriter);
+        }
+
+        // At this point there should be no data left.
+        if (pushBackIterator.hasNext()) {
+            throw new IllegalStateException("Unexpected ranges left at the end.");
+        }
+    }
+
+    private List<S2LevelRange> collectSamePrefixRanges(
+            PushBackIterator<S2LevelRange> pushBackIterator, int currentPrefix) {
+        List<S2LevelRange> samePrefixRanges = new ArrayList<>();
+        while (pushBackIterator.hasNext()) {
+            S2LevelRange currentRange = pushBackIterator.next();
+
+            long startCellId = currentRange.getStartCellId();
+            if (mFileFormat.getS2Level() != S2Support.getS2Level(startCellId)) {
+                throw new IllegalArgumentException(
+                        "Input data level does not match file format level");
+            }
+            int startCellPrefix = mFileFormat.extractPrefixValueFromCellId(startCellId);
+            if (startCellPrefix != currentPrefix) {
+                if (startCellPrefix < currentPrefix) {
+                    throw new IllegalStateException("Prefix out of order:"
+                            + " currentPrefixValue=" + currentPrefix
+                            + " startCellPrefixValue=" + startCellPrefix);
+                }
+                // The next range is for a later prefix. Put it back and move to step 2.
+                pushBackIterator.pushBack(currentRange);
+                break;
+            }
+
+            long endCellId = currentRange.getEndCellId();
+            if (mFileFormat.getS2Level() != S2Support.getS2Level(endCellId)) {
+                throw new IllegalArgumentException("endCellId in range " + currentRange
+                        + " has the wrong S2 level");
+            }
+
+            // Split ranges if they span a prefix.
+            int endCellPrefixValue = mFileFormat.extractPrefixValueFromCellId(endCellId);
+            if (startCellPrefix != endCellPrefixValue) {
+                // Create a range for the current prefix.
+                {
+                    long newEndCellId = mFileFormat.createCellId(startCellPrefix + 1, 0);
+                    S2LevelRange satS2Range = new S2LevelRange(startCellId, newEndCellId);
+                    samePrefixRanges.add(satS2Range);
+                }
+
+                Deque<S2LevelRange> otherRanges = new ArrayDeque<>();
+                // Intermediate prefixes.
+                startCellPrefix = startCellPrefix + 1;
+                while (startCellPrefix != endCellPrefixValue) {
+                    long newStartCellId = mFileFormat.createCellId(startCellPrefix, 0);
+                    long newEndCellId = mFileFormat.createCellId(startCellPrefix + 1, 0);
+                    S2LevelRange satS2Range = new S2LevelRange(newStartCellId, newEndCellId);
+                    otherRanges.add(satS2Range);
+                    startCellPrefix++;
+                }
+
+                // Final prefix.
+                {
+                    long newStartCellId = mFileFormat.createCellId(endCellPrefixValue, 0);
+                    if (newStartCellId != endCellId) {
+                        S2LevelRange satS2Range = new S2LevelRange(newStartCellId, endCellId);
+                        otherRanges.add(satS2Range);
+                    }
+                }
+
+                // Push back the ranges in reverse order so they come back out in sorted order.
+                while (!otherRanges.isEmpty()) {
+                    pushBackIterator.pushBack(otherRanges.removeLast());
+                }
+                break;
+            } else {
+                samePrefixRanges.add(currentRange);
+            }
+        }
+        return samePrefixRanges;
+    }
+
+    private BlockWriter writeSamePrefixRanges(
+            int currentPrefix, List<S2LevelRange> samePrefixRanges) throws IOException {
+        BlockWriter blockWriter;
+        if (samePrefixRanges.size() == 0) {
+            // Add an empty block.
+            blockWriter = SuffixTableWriter.createEmptyBlockWriter();
+        } else {
+            // Create a suffix table block.
+            SuffixTableSharedData sharedData = new SuffixTableSharedData(currentPrefix);
+            SuffixTableWriter suffixTableWriter =
+                    SuffixTableWriter.createPopulated(mFileFormat, sharedData);
+            S2LevelRange lastRange = null;
+            for (S2LevelRange currentRange : samePrefixRanges) {
+                // Validate ranges don't overlap.
+                if (lastRange != null) {
+                    if (lastRange.overlaps(currentRange)) {
+                        throw new IllegalStateException("lastRange=" + lastRange + " overlaps"
+                                + " currentRange=" + currentRange);
+                    }
+                }
+                lastRange = currentRange;
+
+                // Split the range so it fits.
+                final int maxRangeLength = mFileFormat.getTableEntryMaxRangeLengthValue();
+                long startCellId = currentRange.getStartCellId();
+                long endCellId = currentRange.getEndCellId();
+                int rangeLength = mFileFormat.calculateRangeLength(startCellId, endCellId);
+                while (rangeLength > maxRangeLength) {
+                    long newEndCellId = S2Support.offsetCellId(startCellId, maxRangeLength);
+                    S2LevelRange suffixTableRange = new S2LevelRange(startCellId, newEndCellId);
+                    suffixTableWriter.addRange(suffixTableRange);
+                    startCellId = newEndCellId;
+                    rangeLength = mFileFormat.calculateRangeLength(startCellId, endCellId);
+                }
+                S2LevelRange suffixTableRange = new S2LevelRange(startCellId, endCellId);
+                suffixTableWriter.addRange(suffixTableRange);
+            }
+            blockWriter = suffixTableWriter;
+        }
+        return blockWriter;
+    }
+
+    @Override
+    public void close() throws IOException {
+        try {
+            BlockWriter.ReadBack headerReadBack = mHeaderBlockWriter.close();
+            mBlockFileWriter.addBlock(headerReadBack.getType(), headerReadBack.getExtraBytes(),
+                    headerReadBack.getBlockData());
+
+            // Add empty blocks padding.
+            EmptyBlockWriter emptyBlockWriterHelper =
+                    new EmptyBlockWriter(SatS2RangeFileFormat.BLOCK_TYPE_PADDING);
+            BlockWriter.ReadBack emptyBlockReadBack = emptyBlockWriterHelper.close();
+            for (int i = 0; i < mFileFormat.getSuffixTableBlockIdOffset() - 1; i++) {
+                mBlockFileWriter.addBlock(
+                        emptyBlockReadBack.getType(), emptyBlockReadBack.getExtraBytes(),
+                        emptyBlockReadBack.getBlockData());
+            }
+
+            // Add the suffix tables.
+            for (BlockWriter blockWriter : mSuffixTableBlockWriters) {
+                BlockWriter.ReadBack readBack = blockWriter.close();
+
+                mBlockFileWriter.addBlock(readBack.getType(), readBack.getExtraBytes(),
+                        readBack.getBlockData());
+            }
+        } finally {
+            mBlockFileWriter.close();
+        }
+    }
+
+    /** Returns the{@link SatS2RangeFileFormat} for the file being written. */
+    public SatS2RangeFileFormat getFileFormat() {
+        return mFileFormat;
+    }
+}
diff --git a/utils/satellite/s2storage/src/write/java/com/android/telephony/sats2range/write/SuffixTableSharedDataWriter.java b/utils/satellite/s2storage/src/write/java/com/android/telephony/sats2range/write/SuffixTableSharedDataWriter.java
new file mode 100644
index 0000000..5499148
--- /dev/null
+++ b/utils/satellite/s2storage/src/write/java/com/android/telephony/sats2range/write/SuffixTableSharedDataWriter.java
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2023 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.telephony.sats2range.write;
+
+import com.android.storage.io.write.TypedOutputStream;
+import com.android.telephony.sats2range.read.SuffixTableSharedData;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+
+/**
+ * Converts a {@link SuffixTableSharedData} to a byte[] for writing.
+ * See also {@link SuffixTableSharedData#fromBytes(byte[])}.
+ */
+public final class SuffixTableSharedDataWriter {
+
+    private SuffixTableSharedDataWriter() {
+    }
+
+    /** Returns the byte[] for the supplied {@link SuffixTableSharedData} */
+    public static byte[] toBytes(SuffixTableSharedData suffixTableSharedData) {
+        try (ByteArrayOutputStream baos = new ByteArrayOutputStream();
+                TypedOutputStream tos = new TypedOutputStream(baos)) {
+            tos.writeInt(suffixTableSharedData.getTablePrefix());
+            tos.flush();
+            return baos.toByteArray();
+        } catch (IOException e) {
+            throw new RuntimeException(e);
+        }
+    }
+}
diff --git a/utils/satellite/s2storage/src/write/java/com/android/telephony/sats2range/write/SuffixTableWriter.java b/utils/satellite/s2storage/src/write/java/com/android/telephony/sats2range/write/SuffixTableWriter.java
new file mode 100644
index 0000000..d9e4575
--- /dev/null
+++ b/utils/satellite/s2storage/src/write/java/com/android/telephony/sats2range/write/SuffixTableWriter.java
@@ -0,0 +1,202 @@
+/*
+ * Copyright (C) 2023 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.telephony.sats2range.write;
+
+import static com.android.storage.s2.S2Support.cellIdToString;
+
+import com.android.storage.block.read.BlockData;
+import com.android.storage.block.write.BlockWriter;
+import com.android.storage.block.write.EmptyBlockWriter;
+import com.android.storage.io.write.TypedOutputStream;
+import com.android.storage.s2.S2LevelRange;
+import com.android.storage.s2.S2Support;
+import com.android.storage.table.packed.write.PackedTableWriter;
+import com.android.telephony.sats2range.read.SatS2RangeFileFormat;
+import com.android.telephony.sats2range.read.SuffixTableExtraInfo;
+import com.android.telephony.sats2range.read.SuffixTableSharedData;
+
+import java.io.ByteArrayOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.nio.MappedByteBuffer;
+import java.nio.channels.FileChannel;
+import java.nio.file.StandardOpenOption;
+
+/**
+ * A class used to generate suffix tables block info and block data.
+ * To write empty tables use {@link #createEmptyBlockWriter()}.
+ * To write populated tables use {@link
+ * #createPopulated(SatS2RangeFileFormat, SuffixTableSharedData)} and add entries with
+ * {@link #addRange(S2LevelRange)}
+ */
+public final class SuffixTableWriter implements BlockWriter {
+
+    private final SuffixTableSharedData mSharedData;
+
+    private final SatS2RangeFileFormat mFileFormat;
+
+    private final PackedTableWriter mPackedTableWriter;
+
+    private final File mFile;
+
+    private S2LevelRange mLastRangeAdded;
+
+    private SuffixTableWriter(SatS2RangeFileFormat fileFormat, SuffixTableSharedData sharedData)
+            throws IOException {
+        mFileFormat = fileFormat;
+        mSharedData = sharedData;
+
+        int keySizeBits = fileFormat.getSuffixBitCount();
+        int entrySizeByteCount = fileFormat.getTableEntryByteCount();
+        mFile = File.createTempFile("suffixtablewriter", ".packed");
+
+        byte[] blockSharedData = SuffixTableSharedDataWriter.toBytes(sharedData);
+        FileOutputStream fileOutputStream = new FileOutputStream(mFile);
+        boolean signedValue = false;
+        mPackedTableWriter = PackedTableWriter.create(
+                fileOutputStream, entrySizeByteCount, keySizeBits, signedValue, blockSharedData);
+    }
+
+    /** Returns a {@link BlockWriter} capable of generating the block data for an empty table. */
+    public static BlockWriter createEmptyBlockWriter() {
+        return new EmptyBlockWriter(SatS2RangeFileFormat.BLOCK_TYPE_SUFFIX_TABLE);
+    }
+
+    /** Returns a {@link BlockWriter} capable of generating the block data for a populated table. */
+    public static SuffixTableWriter createPopulated(
+            SatS2RangeFileFormat fileFormat, SuffixTableSharedData sharedData) throws IOException {
+        return new SuffixTableWriter(fileFormat, sharedData);
+    }
+
+    /**
+     * Adds the supplied range to the table. The range must start after any previously added range,
+     * no overlap is allowed. Gaps are permitted. The range must have the expected S2 cell ID
+     * prefix. Invalid ranges will cause {@link IllegalArgumentException}. This method must be
+     * called at least once. See {@link SuffixTableWriter#createEmptyBlockWriter()} for empty
+     * tables.
+     */
+    public void addRange(S2LevelRange suffixTableRange) throws IOException {
+        checkIsOpen();
+
+        long rangeStartCellId = suffixTableRange.getStartCellId();
+        long rangeEndCellId = suffixTableRange.getEndCellId();
+
+        // Check range belongs in this table.
+        int rangeStartPrefixValue = mFileFormat.extractPrefixValueFromCellId(rangeStartCellId);
+        int rangeStartSuffixValue = mFileFormat.extractSuffixValueFromCellId(rangeStartCellId);
+        if (rangeStartPrefixValue != mSharedData.getTablePrefix()) {
+            throw new IllegalArgumentException(
+                    "rangeStartCellId=" + cellIdToString(rangeStartCellId)
+                            + " has a different prefix=" + rangeStartPrefixValue
+                            + " than the table prefix=" + mSharedData.getTablePrefix());
+        }
+
+        long rangeEndCellIdInclusive = S2Support.offsetCellId(rangeEndCellId, -1);
+        int rangeEndPrefixValue = mFileFormat.extractPrefixValueFromCellId(rangeEndCellIdInclusive);
+        if (rangeEndPrefixValue != rangeStartPrefixValue) {
+            // Because SuffixTableRange has an exclusive end value, rangeEndPrefixValue is allowed
+            // to be the next prefix value if the rangeEndSuffixValue == 0.
+            int rangeEndSuffixValue = mFileFormat.extractSuffixValueFromCellId(rangeEndCellId);
+            if (!(rangeEndPrefixValue == rangeStartPrefixValue + 1 && rangeEndSuffixValue == 0)) {
+                throw new IllegalArgumentException("rangeEndPrefixValue=" + rangeEndPrefixValue
+                        + " != rangeStartPrefixValue=" + rangeStartPrefixValue);
+            }
+        }
+
+        // Confirm the new range starts after the end of the last one that was added, if any.
+        if (mLastRangeAdded != null) {
+            long lastRangeAddedEndCellId = mLastRangeAdded.getEndCellId();
+            int lastRangeEndPrefixValue =
+                    mFileFormat.extractPrefixValueFromCellId(lastRangeAddedEndCellId);
+            if (lastRangeEndPrefixValue != mSharedData.getTablePrefix()) {
+                // Deal with the special case where the last range added completed the table.
+                throw new IllegalArgumentException(
+                        "Suffix table is full: last range added=" + mLastRangeAdded);
+            } else {
+                int lastRangeEndSuffixValue =
+                        mFileFormat.extractSuffixValueFromCellId(lastRangeAddedEndCellId);
+                if (rangeStartSuffixValue < lastRangeEndSuffixValue) {
+                    throw new IllegalArgumentException("suffixTableRange=" + suffixTableRange
+                            + " overlaps with last range added=" + mLastRangeAdded);
+                }
+            }
+        }
+
+        int rangeLength = mFileFormat.calculateRangeLength(rangeStartCellId, rangeEndCellId);
+
+        long value = mFileFormat.createSuffixTableValue(rangeLength);
+        mPackedTableWriter.addEntry(rangeStartSuffixValue, value);
+        mLastRangeAdded = suffixTableRange;
+    }
+
+    @Override
+    public ReadBack close() throws IOException {
+        checkIsOpen();
+        mPackedTableWriter.close();
+        mLastRangeAdded = null;
+
+        int entryCount = mPackedTableWriter.getEntryCount();
+        if (entryCount == 0) {
+            throw new IllegalStateException("No ranges added. For an empty suffix table, use"
+                    + " createEmptySuffixTableBlockWriter()");
+        }
+
+        FileChannel fileChannel = FileChannel.open(mFile.toPath(), StandardOpenOption.READ);
+        MappedByteBuffer map = fileChannel.map(FileChannel.MapMode.READ_ONLY, 0, mFile.length());
+        fileChannel.close();
+
+        // Writes the number of entries into the extra bytes stored in the BlockInfo. This means the
+        // number of entries can be known without reading the block data at all.
+        SuffixTableExtraInfo suffixTableExtraInfo =
+                new SuffixTableExtraInfo(mSharedData.getTablePrefix(), entryCount);
+        byte[] blockInfoExtraBytes = generateBlockInfoExtraBytes(suffixTableExtraInfo);
+        BlockData blockData = new BlockData(map);
+        return new ReadBack() {
+            @Override
+            public byte[] getExtraBytes() {
+                return blockInfoExtraBytes;
+            }
+
+            @Override
+            public int getType() {
+                return SatS2RangeFileFormat.BLOCK_TYPE_SUFFIX_TABLE;
+            }
+
+            @Override
+            public BlockData getBlockData() {
+                return blockData;
+            }
+        };
+    }
+
+    private void checkIsOpen() {
+        if (!mPackedTableWriter.isOpen()) {
+            throw new IllegalStateException("Writer is closed.");
+        }
+    }
+
+    private static byte[] generateBlockInfoExtraBytes(SuffixTableExtraInfo suffixTableBlockInfo) {
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        try (TypedOutputStream tos = new TypedOutputStream(baos)) {
+            tos.writeInt(suffixTableBlockInfo.getEntryCount());
+        } catch (IOException e) {
+            throw new IllegalStateException("Unexpected IOException writing to byte array", e);
+        }
+        return baos.toByteArray();
+    }
+}
diff --git a/utils/satellite/tools/Android.bp b/utils/satellite/tools/Android.bp
new file mode 100644
index 0000000..9aacdd9
--- /dev/null
+++ b/utils/satellite/tools/Android.bp
@@ -0,0 +1,71 @@
+// Copyright (C) 2020 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 {
+    default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+java_library_host {
+    name: "satellite-s2storage-tools",
+    srcs: [
+        "src/main/java/**/*.java",
+    ],
+    static_libs: [
+        "jcommander",
+        "guava",
+        "satellite-s2storage-rw",
+        "s2storage_tools",
+        "s2-geometry-library-java",
+    ],
+}
+
+// A tool to create a binary satellite S2 file.
+java_binary_host {
+    name: "satellite_createsats2file",
+    main_class: "com.android.telephony.tools.sats2.CreateSatS2File",
+    static_libs: [
+        "satellite-s2storage-tools",
+    ],
+}
+
+// A tool to create a test satellite S2 file.
+java_binary_host {
+    name: "satellite_createsats2file_test",
+    main_class: "com.android.telephony.tools.sats2.CreateTestSatS2File",
+    static_libs: [
+        "satellite-s2storage-tools",
+    ],
+}
+
+// A tool to dump a satellite S2 file as text for debugging.
+java_binary_host {
+    name: "satellite_dumpsats2file",
+    main_class: "com.android.telephony.tools.sats2.DumpSatS2File",
+    static_libs: [
+        "satellite-s2storage-tools",
+    ],
+}
+
+// Tests for CreateSatS2File.
+java_test_host {
+    name: "SatelliteToolsTests",
+    srcs: ["src/test/java/**/*.java"],
+    static_libs: [
+        "junit",
+        "satellite-s2storage-tools",
+        "s2-geometry-library-java",
+        "satellite-s2storage-testutils"
+    ],
+    test_suites: ["general-tests"],
+}
\ No newline at end of file
diff --git a/utils/satellite/tools/TEST_MAPPING b/utils/satellite/tools/TEST_MAPPING
new file mode 100644
index 0000000..df9511a
--- /dev/null
+++ b/utils/satellite/tools/TEST_MAPPING
@@ -0,0 +1,7 @@
+{
+    "postsubmit": [
+        {
+            "name": "SatelliteToolsTests"
+        }
+    ]
+}
\ No newline at end of file
diff --git a/utils/satellite/tools/src/main/java/com/android/telephony/tools/sats2/CreateSatS2File.java b/utils/satellite/tools/src/main/java/com/android/telephony/tools/sats2/CreateSatS2File.java
new file mode 100644
index 0000000..f82cd5c
--- /dev/null
+++ b/utils/satellite/tools/src/main/java/com/android/telephony/tools/sats2/CreateSatS2File.java
@@ -0,0 +1,72 @@
+/*
+ * Copyright (C) 2023 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.telephony.tools.sats2;
+
+import com.beust.jcommander.JCommander;
+import com.beust.jcommander.Parameter;
+import com.beust.jcommander.ParameterException;
+
+/** Creates a Sat S2 file from the list of S2 cells. */
+public final class CreateSatS2File {
+    /**
+     * Usage:
+     * CreateSatS2File <[input] s2 cells file> <[input] s2 level of input data>
+     *     <[input] whether s2 cells is an allowed list> <[output] sat s2 file>
+     */
+    public static void main(String[] args) throws Exception {
+        Arguments arguments = new Arguments();
+        JCommander.newBuilder()
+                .addObject(arguments)
+                .build()
+                .parse(args);
+        String inputFile = arguments.inputFile;
+        int s2Level = arguments.s2Level;
+        String outputFile = arguments.outputFile;
+        boolean isAllowedList = Arguments.getBooleanValue(arguments.isAllowedList);
+        SatS2FileCreator.create(inputFile, s2Level, isAllowedList, outputFile);
+    }
+
+    private static class Arguments {
+        @Parameter(names = "--input-file",
+                description = "s2 cells file",
+                required = true)
+        public String inputFile;
+
+        @Parameter(names = "--s2-level",
+                description = "s2 level of input data",
+                required = true)
+        public int s2Level;
+
+        @Parameter(names = "--is-allowed-list",
+                description = "whether s2 cells file contains an allowed list of cells",
+                required = true)
+        public String isAllowedList;
+
+        @Parameter(names = "--output-file",
+                description = "sat s2 file",
+                required = true)
+        public String outputFile;
+
+        public static Boolean getBooleanValue(String value) {
+            if ("false".equalsIgnoreCase(value) || "true".equalsIgnoreCase(value)) {
+                return Boolean.parseBoolean(value);
+            } else {
+                throw new ParameterException("Invalid boolean string:" + value);
+            }
+        }
+    }
+}
diff --git a/utils/satellite/tools/src/main/java/com/android/telephony/tools/sats2/CreateTestSatS2File.java b/utils/satellite/tools/src/main/java/com/android/telephony/tools/sats2/CreateTestSatS2File.java
new file mode 100644
index 0000000..f9a9347
--- /dev/null
+++ b/utils/satellite/tools/src/main/java/com/android/telephony/tools/sats2/CreateTestSatS2File.java
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2023 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.telephony.tools.sats2;
+
+import com.android.storage.s2.S2LevelRange;
+import com.android.telephony.sats2range.read.SatS2RangeFileFormat;
+import com.android.telephony.sats2range.write.SatS2RangeFileWriter;
+
+import java.io.File;
+import java.util.Arrays;
+import java.util.List;
+
+/** Creates a Sat S2 file with a small amount of test data. Useful for testing other tools. */
+public final class CreateTestSatS2File {
+
+    /**
+     * Usage:
+     * CreateTestSatS2File &lt;file name&gt;
+     */
+    public static void main(String[] args) throws Exception {
+        File file = new File(args[0]);
+
+        SatS2RangeFileFormat fileFormat = FileFormats.getFileFormatForLevel(12, true);
+        if (fileFormat.getPrefixBitCount() != 11) {
+            throw new IllegalStateException("Fake data requires 11 prefix bits");
+        }
+
+        try (SatS2RangeFileWriter satS2RangeFileWriter =
+                     SatS2RangeFileWriter.open(file, fileFormat)) {
+            // Two ranges that share a prefix.
+            S2LevelRange range1 = new S2LevelRange(
+                    fileFormat.createCellId(0b100_11111111, 1000),
+                    fileFormat.createCellId(0b100_11111111, 2000));
+            S2LevelRange range2 = new S2LevelRange(
+                    fileFormat.createCellId(0b100_11111111, 2000),
+                    fileFormat.createCellId(0b100_11111111, 3000));
+            // This range has a different face, so a different prefix, and will be in a different
+            // suffix table.
+            S2LevelRange range3 = new S2LevelRange(
+                    fileFormat.createCellId(0b101_11111111, 1000),
+                    fileFormat.createCellId(0b101_11111111, 2000));
+            List<S2LevelRange> allRanges = listOf(range1, range2, range3);
+            satS2RangeFileWriter.createSortedSuffixBlocks(allRanges.iterator());
+        }
+    }
+
+    @SafeVarargs
+    private static <E> List<E> listOf(E... values) {
+        return Arrays.asList(values);
+    }
+}
diff --git a/utils/satellite/tools/src/main/java/com/android/telephony/tools/sats2/DumpSatS2File.java b/utils/satellite/tools/src/main/java/com/android/telephony/tools/sats2/DumpSatS2File.java
new file mode 100644
index 0000000..2a9ce37
--- /dev/null
+++ b/utils/satellite/tools/src/main/java/com/android/telephony/tools/sats2/DumpSatS2File.java
@@ -0,0 +1,47 @@
+/*
+ * Copyright (C) 2023 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.telephony.tools.sats2;
+
+import com.android.storage.tools.block.DumpBlockFile;
+import com.android.telephony.sats2range.read.SatS2RangeFileReader;
+import com.android.telephony.tools.sats2.dump.SatS2RangeFileDumper;
+
+import java.io.File;
+
+/**
+ * Dumps information about a Sat S2 data file. Like {@link DumpBlockFile} but it knows details about
+ * the Sat S2 format and can provide more detailed information.
+ */
+public final class DumpSatS2File {
+
+    /**
+     * Usage:
+     * DumpSatFile <[input] sat s2 file name> <[output] output directory name>
+     */
+    public static void main(String[] args) throws Exception {
+        String satS2FileName = args[0];
+        String outputDirName = args[1];
+
+        File outputDir = new File(outputDirName);
+        outputDir.mkdirs();
+
+        File satS2File = new File(satS2FileName);
+        try (SatS2RangeFileReader reader = SatS2RangeFileReader.open(satS2File)) {
+            reader.visit(new SatS2RangeFileDumper(outputDir));
+        }
+    }
+}
diff --git a/utils/satellite/tools/src/main/java/com/android/telephony/tools/sats2/FileFormats.java b/utils/satellite/tools/src/main/java/com/android/telephony/tools/sats2/FileFormats.java
new file mode 100644
index 0000000..b800897
--- /dev/null
+++ b/utils/satellite/tools/src/main/java/com/android/telephony/tools/sats2/FileFormats.java
@@ -0,0 +1,59 @@
+/*
+ * Copyright (C) 2023 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.telephony.tools.sats2;
+
+import com.android.telephony.sats2range.read.SatS2RangeFileFormat;
+
+/** Some sample file formats. */
+public final class FileFormats {
+
+    // level 12: 27 S2 cell ID bits split 11 + 16,
+    // suffix table: 24 bits, 16/24 for cell id suffix, 8/24 dedicated to range
+    private static final SatS2RangeFileFormat FILE_FORMAT_12_ALLOWED_LIST =
+            new SatS2RangeFileFormat(12, 11, 16, 1, 24, true);
+    private static final SatS2RangeFileFormat FILE_FORMAT_12_DISALLOWED_LIST =
+            new SatS2RangeFileFormat(12, 11, 16, 1, 24, false);
+
+    // level 14: 31 S2 cell ID bits split 13 + 18,
+    // suffix table: 32 bits, 18/32 for cell id suffix, 14/32 dedicated to range
+    private static final SatS2RangeFileFormat FILE_FORMAT_14_ALLOWED_LIST =
+            new SatS2RangeFileFormat(14, 13, 18, 1, 32, true);
+    private static final SatS2RangeFileFormat FILE_FORMAT_14_DISALLOWED_LIST =
+            new SatS2RangeFileFormat(14, 13, 18, 1, 32, false);
+
+    // level 16: 35 S2 cell ID bits split 13 + 22,
+    // suffix table: 32 bits, 22/32 for cell id suffix, 10/32 dedicated to range
+    private static final SatS2RangeFileFormat FILE_FORMAT_16_ALLOWED_LIST =
+            new SatS2RangeFileFormat(16, 13, 22, 1, 32, true);
+    private static final SatS2RangeFileFormat FILE_FORMAT_16_DISALLOWED_LIST =
+            new SatS2RangeFileFormat(16, 13, 22, 1, 32, false);
+
+    /** Maps an S2 level to one of the file format constants declared on by class. */
+    public static SatS2RangeFileFormat getFileFormatForLevel(int s2Level, boolean isAllowedList) {
+        switch (s2Level) {
+            case 12:
+                return isAllowedList ? FILE_FORMAT_12_ALLOWED_LIST : FILE_FORMAT_12_DISALLOWED_LIST;
+            case 14:
+                return isAllowedList ? FILE_FORMAT_14_ALLOWED_LIST : FILE_FORMAT_14_DISALLOWED_LIST;
+            case 16:
+                return isAllowedList ? FILE_FORMAT_16_ALLOWED_LIST : FILE_FORMAT_16_DISALLOWED_LIST;
+            default:
+                throw new IllegalArgumentException("s2Level=" + s2Level
+                        + ", isAllowedList=" + isAllowedList + " not mapped");
+        }
+    }
+}
diff --git a/utils/satellite/tools/src/main/java/com/android/telephony/tools/sats2/SatS2FileCreator.java b/utils/satellite/tools/src/main/java/com/android/telephony/tools/sats2/SatS2FileCreator.java
new file mode 100644
index 0000000..b701a7b
--- /dev/null
+++ b/utils/satellite/tools/src/main/java/com/android/telephony/tools/sats2/SatS2FileCreator.java
@@ -0,0 +1,246 @@
+/*
+ * Copyright (C) 2023 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.telephony.tools.sats2;
+
+import com.android.storage.s2.S2LevelRange;
+import com.android.telephony.sats2range.read.SatS2RangeFileFormat;
+import com.android.telephony.sats2range.read.SatS2RangeFileReader;
+import com.android.telephony.sats2range.write.SatS2RangeFileWriter;
+
+import com.google.common.base.Stopwatch;
+import com.google.common.geometry.S2CellId;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Objects;
+import java.util.Scanner;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
+
+/** A util class for creating a satellite S2 file from the list of S2 cells. */
+public final class SatS2FileCreator {
+    /**
+     * @param inputFile The input text file containing the list of S2 Cell IDs. Each line in the
+     *                  file contains a number in the range of a signed-64bit number which
+     *                  represents the ID of a S2 cell.
+     * @param s2Level The S2 level of all S2 cells in the input file.
+     * @param isAllowedList {@code true} means the input file contains an allowed list of S2 cells.
+     *                      {@code false} means the input file contains a disallowed list of S2
+     *                      cells.
+     * @param outputFile The output file to which the satellite S2 data in block format will be
+     *                   written.
+     */
+    public static void create(String inputFile, int s2Level, boolean isAllowedList,
+            String outputFile) throws Exception {
+        // Read a list of S2 cells from input file
+        List<Long> s2Cells = readS2CellsFromFile(inputFile);
+        System.out.println("Number of S2 cells read from file:" + s2Cells.size());
+
+        // Convert the input list of S2 Cells into the list of sorted S2CellId
+        List<S2CellId> sortedS2CellIds = s2Cells.stream()
+                .map(x -> new S2CellId(x))
+                .collect(Collectors.toList());
+        // IDs of S2CellId are converted to unsigned long numbers, which will be then used to
+        // compare S2CellId.
+        Collections.sort(sortedS2CellIds);
+
+        // Compress the list of S2CellId into S2 ranges
+        List<SatS2Range> satS2Ranges = createSatS2Ranges(sortedS2CellIds, s2Level);
+
+        // Write the S2 ranges into a block file
+        SatS2RangeFileFormat fileFormat =
+                FileFormats.getFileFormatForLevel(s2Level, isAllowedList);
+        try (SatS2RangeFileWriter satS2RangeFileWriter =
+                     SatS2RangeFileWriter.open(new File(outputFile), fileFormat)) {
+            Iterator<S2LevelRange> s2LevelRangeIterator = satS2Ranges
+                    .stream()
+                    .map(x -> new S2LevelRange(x.rangeStart.id(), x.rangeEnd.id()))
+                    .iterator();
+            /*
+             * Group the sorted ranges into contiguous suffix blocks. Big ranges might get split as
+             * needed to fit them into suffix blocks.
+             */
+            satS2RangeFileWriter.createSortedSuffixBlocks(s2LevelRangeIterator);
+        }
+
+        // Validate the output block file
+        System.out.println("Validating the output block file...");
+        try (SatS2RangeFileReader satS2RangeFileReader =
+                     SatS2RangeFileReader.open(new File(outputFile))) {
+            if (isAllowedList != satS2RangeFileReader.isAllowedList()) {
+                throw new IllegalStateException("isAllowedList="
+                        + satS2RangeFileReader.isAllowedList() + " does not match the input "
+                        + "argument=" + isAllowedList);
+            }
+
+            // Verify that all input S2 cells are present in the output block file
+            for (S2CellId s2CellId : sortedS2CellIds) {
+                if (satS2RangeFileReader.findEntryByCellId(s2CellId.id()) == null) {
+                    throw new IllegalStateException("s2CellId=" + s2CellId
+                            + " is not present in the output sat s2 file");
+                }
+            }
+
+            // Verify the cell right before the first cell in the sortedS2CellIds is not present in
+            // the output block file
+            S2CellId prevCell = sortedS2CellIds.get(0).prev();
+            if (!sortedS2CellIds.contains(prevCell)
+                    && satS2RangeFileReader.findEntryByCellId(prevCell.id()) != null) {
+                throw new IllegalStateException("The cell " + prevCell + ", which is right "
+                        + "before the first cell is unexpectedly present in the output sat s2"
+                        + " file");
+            } else {
+                System.out.println("prevCell=" + prevCell + " is in the sortedS2CellIds");
+            }
+
+            // Verify the cell right after the last cell in the sortedS2CellIds is not present in
+            // the output block file
+            S2CellId nextCell = sortedS2CellIds.get(sortedS2CellIds.size() - 1).next();
+            if (!sortedS2CellIds.contains(nextCell)
+                    && satS2RangeFileReader.findEntryByCellId(nextCell.id()) != null) {
+                throw new IllegalStateException("The cell " + nextCell + ", which is right "
+                        + "after the last cell is unexpectedly present in the output sat s2"
+                        + " file");
+            } else {
+                System.out.println("nextCell=" + nextCell + " is in the sortedS2CellIds");
+            }
+        }
+        System.out.println("Successfully validated the output block file");
+    }
+
+    /**
+     * Read a list of S2 cells from the inputFile.
+     *
+     * @param inputFile A file containing the list of S2 cells. Each line in the inputFile contains
+     *                  a long number - the ID of a S2 cell.
+     * @return A list of S2 cells.
+     */
+    private static List<Long> readS2CellsFromFile(String inputFile) throws Exception {
+        List<Long> s2Cells = new ArrayList();
+        InputStream inputStream = new FileInputStream(inputFile);
+        try (Scanner scanner = new Scanner(inputStream, StandardCharsets.UTF_8.name())) {
+            while (scanner.hasNextLong()) {
+                s2Cells.add(scanner.nextLong());
+            }
+            if (scanner.hasNextLine()) {
+                throw new IllegalStateException("Input s2 cell file has invalid format, "
+                        + "current line=" + scanner.nextLine());
+            }
+        }
+        return s2Cells;
+    }
+
+    /**
+     * Compress the list of sorted S2CellId into S2 ranges.
+     *
+     * @param sortedS2CellIds List of S2CellId sorted in ascending order.
+     * @param s2Level The level of all S2CellId.
+     * @return List of S2 ranges.
+     */
+    private static List<SatS2Range> createSatS2Ranges(List<S2CellId> sortedS2CellIds, int s2Level) {
+        Stopwatch stopwatch = Stopwatch.createStarted();
+        List<SatS2Range> ranges = new ArrayList<>();
+        if (sortedS2CellIds != null && sortedS2CellIds.size() > 0) {
+            S2CellId rangeStart = null;
+            S2CellId rangeEnd = null;
+            for (int i = 0; i < sortedS2CellIds.size(); i++) {
+                S2CellId currentS2CellId = sortedS2CellIds.get(i);
+                checkCellIdIsAtLevel(currentS2CellId, s2Level);
+
+                SatS2Range currentRange = createS2Range(currentS2CellId, s2Level);
+                S2CellId currentS2CellRangeStart = currentRange.rangeStart;
+                S2CellId currentS2CellRangeEnd = currentRange.rangeEnd;
+
+                if (rangeStart == null) {
+                    // First time round the loop initialize rangeStart / rangeEnd only.
+                    rangeStart = currentS2CellRangeStart;
+                } else if (rangeEnd.id() != currentS2CellRangeStart.id()) {
+                    // If there's a gap between cellIds, store the range we have so far and start a
+                    // new range.
+                    ranges.add(new SatS2Range(rangeStart, rangeEnd));
+                    rangeStart = currentS2CellRangeStart;
+                }
+                rangeEnd = currentS2CellRangeEnd;
+            }
+            ranges.add(new SatS2Range(rangeStart, rangeEnd));
+        }
+
+        // Sorting the ranges is not necessary. As the input is sorted , it will already be sorted.
+        System.out.printf("Created %s SatS2Ranges in %s milliseconds\n",
+                ranges.size(), stopwatch.elapsed(TimeUnit.MILLISECONDS));
+        return ranges;
+    }
+
+    /**
+     * @return A pair of S2CellId for the range [s2CellId, s2CellId's next sibling)
+     */
+    private static SatS2Range createS2Range(
+            S2CellId s2CellId, int s2Level) {
+        // Since s2CellId is at s2Level, s2CellId.childBegin(s2Level) returns itself.
+        S2CellId firstS2CellRangeStart = s2CellId.childBegin(s2Level);
+        // Get the immediate next sibling of s2CellId
+        S2CellId firstS2CellRangeEnd = s2CellId.childEnd(s2Level);
+
+        if (firstS2CellRangeEnd.face() < firstS2CellRangeStart.face()
+                || !firstS2CellRangeEnd.isValid()) {
+            // Fix this if it becomes an issue.
+            throw new IllegalStateException("firstS2CellId=" + s2CellId
+                    + ", childEnd(" + s2Level + ") produced an unsupported"
+                    + " value=" + firstS2CellRangeEnd);
+        }
+        return new SatS2Range(firstS2CellRangeStart, firstS2CellRangeEnd);
+    }
+
+    private static void checkCellIdIsAtLevel(S2CellId cellId, int s2Level) {
+        if (cellId.level() != s2Level) {
+            throw new IllegalStateException("Bad level for cellId=" + cellId
+                    + ". Must be s2Level=" + s2Level);
+        }
+    }
+
+    /**
+     * A range of S2 cell IDs at a fixed S2 level. The range is expressed as a start cell ID
+     * (inclusive) and an end cell ID (exclusive).
+     */
+    private static class SatS2Range {
+        public final S2CellId rangeStart;
+        public final S2CellId rangeEnd;
+
+        /**
+         * Creates an instance. If the range is invalid or the cell IDs are from different levels
+         * this method throws an {@link IllegalArgumentException}.
+         */
+        SatS2Range(S2CellId rangeStart, S2CellId rangeEnd) {
+            this.rangeStart = Objects.requireNonNull(rangeStart);
+            this.rangeEnd = Objects.requireNonNull(rangeEnd);
+            if (rangeStart.level() != rangeEnd.level()) {
+                throw new IllegalArgumentException(
+                        "Levels differ: rangeStart=" + rangeStart + ", rangeEnd=" + rangeEnd);
+            }
+            if (rangeStart.greaterOrEquals(rangeEnd)) {
+                throw new IllegalArgumentException(
+                        "Range start (" + rangeStart + " >= range end (" + rangeEnd + ")");
+            }
+        }
+    }
+}
diff --git a/utils/satellite/tools/src/main/java/com/android/telephony/tools/sats2/dump/HeaderBlockDumper.java b/utils/satellite/tools/src/main/java/com/android/telephony/tools/sats2/dump/HeaderBlockDumper.java
new file mode 100644
index 0000000..69a3f70
--- /dev/null
+++ b/utils/satellite/tools/src/main/java/com/android/telephony/tools/sats2/dump/HeaderBlockDumper.java
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2023 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.telephony.tools.sats2.dump;
+
+import com.android.storage.tools.block.dump.SingleFileDumper;
+import com.android.telephony.sats2range.read.HeaderBlock;
+import com.android.telephony.sats2range.read.SatS2RangeFileFormat;
+
+import java.io.File;
+
+/** A {@link HeaderBlock.HeaderBlockVisitor} that dumps information to a file. */
+final class HeaderBlockDumper extends SingleFileDumper implements HeaderBlock.HeaderBlockVisitor {
+
+    HeaderBlockDumper(File headerBlockFile) {
+        super(headerBlockFile);
+    }
+
+    @Override
+    public void visitFileFormat(SatS2RangeFileFormat fileFormat) {
+        println("File format");
+        println("===========");
+        println(fileFormat.toString());
+        println();
+    }
+}
+
diff --git a/utils/satellite/tools/src/main/java/com/android/telephony/tools/sats2/dump/SatS2RangeFileDumper.java b/utils/satellite/tools/src/main/java/com/android/telephony/tools/sats2/dump/SatS2RangeFileDumper.java
new file mode 100644
index 0000000..307275a
--- /dev/null
+++ b/utils/satellite/tools/src/main/java/com/android/telephony/tools/sats2/dump/SatS2RangeFileDumper.java
@@ -0,0 +1,85 @@
+/*
+ * Copyright (C) 2023 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.telephony.tools.sats2.dump;
+
+import static com.android.storage.tools.block.dump.DumpUtils.binaryStringLength;
+import static com.android.storage.tools.block.dump.DumpUtils.hexStringLength;
+import static com.android.storage.tools.block.dump.DumpUtils.zeroPadBinary;
+import static com.android.storage.tools.block.dump.DumpUtils.zeroPadHex;
+
+import com.android.storage.tools.block.dump.SingleFileDumper;
+import com.android.telephony.sats2range.read.HeaderBlock;
+import com.android.telephony.sats2range.read.SatS2RangeFileFormat;
+import com.android.telephony.sats2range.read.SatS2RangeFileReader;
+import com.android.telephony.sats2range.read.SuffixTableBlock;
+import com.android.telephony.sats2range.read.SuffixTableExtraInfo;
+
+import java.io.File;
+
+/** A {@link SatS2RangeFileReader.SatS2RangeFileVisitor} that dumps information to a file. */
+public final class SatS2RangeFileDumper implements SatS2RangeFileReader.SatS2RangeFileVisitor {
+
+    private final File mOutputDir;
+
+    private int mMaxPrefix;
+
+    private int mMaxPrefixBinaryLength;
+
+    private int mMaxPrefixHexLength;
+
+    private SingleFileDumper mExtraInfoDumper;
+
+    public SatS2RangeFileDumper(File outputDir) {
+        mOutputDir = outputDir;
+    }
+
+    @Override
+    public void begin() throws VisitException {
+        mExtraInfoDumper = new SingleFileDumper(new File(mOutputDir, "suffixtable_extrainfo.txt"));
+        mExtraInfoDumper.begin();
+    }
+
+    @Override
+    public void visitSuffixTableExtraInfo(SuffixTableExtraInfo suffixTableExtraInfo) {
+        int prefix = suffixTableExtraInfo.getPrefix();
+        mExtraInfoDumper.println("prefix=" + zeroPadBinary(mMaxPrefixBinaryLength, prefix)
+                + "(" + zeroPadHex(mMaxPrefixHexLength, prefix) + ")"
+                + ", entryCount=" + suffixTableExtraInfo.getEntryCount());
+    }
+
+    @Override
+    public void visitHeaderBlock(HeaderBlock headerBlock) throws VisitException {
+        File headerFile = new File(mOutputDir, "header.txt");
+        headerBlock.visit(new HeaderBlockDumper(headerFile));
+        SatS2RangeFileFormat fileFormat = headerBlock.getFileFormat();
+        mMaxPrefix = fileFormat.getMaxPrefixValue();
+        mMaxPrefixBinaryLength = binaryStringLength(mMaxPrefix);
+        mMaxPrefixHexLength = hexStringLength(mMaxPrefix);
+    }
+
+    @Override
+    public void visitSuffixTableBlock(SuffixTableBlock suffixTableBlock)
+            throws VisitException {
+        suffixTableBlock.visit(new SuffixTableBlockDumper(mOutputDir, mMaxPrefix));
+    }
+
+    @Override
+    public void end() throws VisitException {
+        mExtraInfoDumper.end();
+    }
+}
+
diff --git a/utils/satellite/tools/src/main/java/com/android/telephony/tools/sats2/dump/SuffixTableBlockDumper.java b/utils/satellite/tools/src/main/java/com/android/telephony/tools/sats2/dump/SuffixTableBlockDumper.java
new file mode 100644
index 0000000..a5d75b4
--- /dev/null
+++ b/utils/satellite/tools/src/main/java/com/android/telephony/tools/sats2/dump/SuffixTableBlockDumper.java
@@ -0,0 +1,66 @@
+/*
+ * Copyright (C) 2023 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.telephony.tools.sats2.dump;
+
+import static com.android.storage.tools.block.dump.DumpUtils.binaryStringLength;
+import static com.android.storage.tools.block.dump.DumpUtils.createPrintWriter;
+import static com.android.storage.tools.block.dump.DumpUtils.generateDumpFile;
+import static com.android.storage.tools.block.dump.DumpUtils.hexStringLength;
+import static com.android.storage.tools.block.dump.DumpUtils.zeroPadBinary;
+import static com.android.storage.tools.block.dump.DumpUtils.zeroPadHex;
+
+import com.android.telephony.sats2range.read.SuffixTableBlock;
+
+import java.io.File;
+import java.io.PrintWriter;
+import java.util.Objects;
+
+/** A {@link SuffixTableBlock.SuffixTableBlockVisitor} that dumps information to a file. */
+public final class SuffixTableBlockDumper implements SuffixTableBlock.SuffixTableBlockVisitor {
+
+    private final File mOutputDir;
+
+    private final int mMaxPrefix;
+
+    public SuffixTableBlockDumper(File outputDir, int maxPrefix) {
+        mOutputDir = Objects.requireNonNull(outputDir);
+        mMaxPrefix = maxPrefix;
+    }
+
+    @Override
+    public void visit(SuffixTableBlock suffixTableBlock) throws VisitException {
+        int tablePrefix = suffixTableBlock.getPrefix();
+        int prefixHexLength = hexStringLength(tablePrefix);
+        int prefixBinaryLength = binaryStringLength(tablePrefix);
+        File suffixTableFile =
+                generateDumpFile(mOutputDir, "suffixtable_", tablePrefix, mMaxPrefix);
+        try (PrintWriter writer = createPrintWriter(suffixTableFile)) {
+            writer.println("Prefix value=" + zeroPadBinary(prefixBinaryLength, tablePrefix)
+                    + " (" + zeroPadHex(prefixHexLength, tablePrefix) + ")");
+            int entryCount = suffixTableBlock.getEntryCount();
+            writer.println("Entry count=" + entryCount);
+            if (entryCount > 0) {
+                for (int i = 0; i < entryCount; i++) {
+                    writer.println(
+                            "[" + i + "]=" + suffixTableBlock.getEntryByIndex(i)
+                                    .getSuffixTableRange());
+                }
+            }
+        }
+    }
+}
+
diff --git a/utils/satellite/tools/src/test/java/com/android/telephony/tools/sats2/CreateSatS2FileTest.java b/utils/satellite/tools/src/test/java/com/android/telephony/tools/sats2/CreateSatS2FileTest.java
new file mode 100644
index 0000000..80c1807
--- /dev/null
+++ b/utils/satellite/tools/src/test/java/com/android/telephony/tools/sats2/CreateSatS2FileTest.java
@@ -0,0 +1,166 @@
+/*
+ * Copyright (C) 2023 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.telephony.tools.sats2;
+
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.fail;
+
+import com.android.telephony.sats2range.read.SatS2RangeFileFormat;
+import com.android.telephony.sats2range.read.SatS2RangeFileReader;
+import com.android.telephony.sats2range.utils.TestUtils;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+
+
+/** Tests for {@link CreateSatS2File} */
+public final class CreateSatS2FileTest {
+    private Path mTempDirPath;
+
+    @Before
+    public void setUp() throws IOException {
+        mTempDirPath = TestUtils.createTempDir(this.getClass());
+    }
+
+    @After
+    public void tearDown() throws IOException {
+        if (mTempDirPath != null) {
+            TestUtils.deleteDirectory(mTempDirPath);
+        }
+    }
+
+    @Test
+    public void testCreateSatS2FileWithValidInput_AllowedList() throws Exception {
+        testCreateSatS2FileWithValidInput(true);
+    }
+
+    @Test
+    public void testCreateSatS2FileWithValidInput_DisallowedList() throws Exception {
+        testCreateSatS2FileWithValidInput(false);
+    }
+
+    @Test
+    public void testCreateSatS2FileWithInvalidInput() throws Exception {
+        int s2Level = 12;
+        boolean isAllowedList = true;
+        Path inputDirPath = mTempDirPath.resolve("input");
+        Files.createDirectory(inputDirPath);
+        Path inputFilePath = inputDirPath.resolve("s2cells.txt");
+
+        Path outputDirPath = mTempDirPath.resolve("output");
+        Files.createDirectory(outputDirPath);
+        Path outputFilePath = outputDirPath.resolve("sats2.dat");
+
+        // Create test input S2 cell file
+        SatS2RangeFileFormat fileFormat = FileFormats.getFileFormatForLevel(s2Level, isAllowedList);
+        TestUtils.createInvalidTestS2CellFile(inputFilePath.toFile(), fileFormat);
+
+        // Commandline input arguments
+        String[] args = {
+                "--input-file", inputFilePath.toAbsolutePath().toString(),
+                "--s2-level", String.valueOf(s2Level),
+                "--is-allowed-list", isAllowedList ? "true" : "false",
+                "--output-file", outputFilePath.toAbsolutePath().toString()
+        };
+
+        // Execute the tool CreateSatS2File and expect exception
+        try {
+            CreateSatS2File.main(args);
+        } catch (Exception ex) {
+            // Expected exception
+            return;
+        }
+        fail("Exception should have been caught");
+    }
+
+    private void testCreateSatS2FileWithValidInput(boolean isAllowedList) throws Exception {
+        int s2Level = 12;
+        Path inputDirPath = mTempDirPath.resolve("input");
+        Files.createDirectory(inputDirPath);
+        Path inputFilePath = inputDirPath.resolve("s2cells.txt");
+
+        Path outputDirPath = mTempDirPath.resolve("output");
+        Files.createDirectory(outputDirPath);
+        Path outputFilePath = outputDirPath.resolve("sats2.dat");
+
+        /*
+         * Create test input S2 cell file with the following ranges:
+         * 1) [(prefix=0b100_11111111, suffix=1000), (prefix=0b100_11111111, suffix=2000))
+         * 2) [(prefix=0b100_11111111, suffix=2001), (prefix=0b100_11111111, suffix=3000))
+         * 3) [(prefix=0b101_11111111, suffix=1000), (prefix=0b101_11111111, suffix=2001))
+         */
+        SatS2RangeFileFormat fileFormat = FileFormats.getFileFormatForLevel(s2Level, isAllowedList);
+        TestUtils.createValidTestS2CellFile(inputFilePath.toFile(), fileFormat);
+
+        // Commandline input arguments
+        String[] args = {
+                "--input-file", inputFilePath.toAbsolutePath().toString(),
+                "--s2-level", String.valueOf(s2Level),
+                "--is-allowed-list", isAllowedList ? "true" : "false",
+                "--output-file", outputFilePath.toAbsolutePath().toString()
+        };
+
+        // Execute the tool CreateSatS2File and expect successful result
+        try {
+            CreateSatS2File.main(args);
+        } catch (Exception ex) {
+            fail("Unexpected exception when executing the tool ex=" + ex);
+        }
+
+        // Validate the output block file
+        try {
+            SatS2RangeFileReader satS2RangeFileReader =
+                         SatS2RangeFileReader.open(outputFilePath.toFile());
+            if (isAllowedList != satS2RangeFileReader.isAllowedList()) {
+                fail("isAllowedList="
+                        + satS2RangeFileReader.isAllowedList() + " does not match the input "
+                        + "argument=" + isAllowedList);
+            }
+
+            // Verify an edge cell (prefix=0b100_11111111, suffix=100)
+            long s2CellId = fileFormat.createCellId(0b100_11111111, 100);
+            assertNull(satS2RangeFileReader.findEntryByCellId(s2CellId));
+
+            // Verify a middle cell (prefix=0b100_11111111, suffix=2000)
+            s2CellId = fileFormat.createCellId(0b100_11111111, 2000);
+            assertNull(satS2RangeFileReader.findEntryByCellId(s2CellId));
+
+            // Verify an edge cell (prefix=0b100_11111111, suffix=4000)
+            s2CellId = fileFormat.createCellId(0b100_11111111, 4000);
+            assertNull(satS2RangeFileReader.findEntryByCellId(s2CellId));
+
+            // Verify an edge cell (prefix=0b101_11111111, suffix=500)
+            s2CellId = fileFormat.createCellId(0b101_11111111, 500);
+            assertNull(satS2RangeFileReader.findEntryByCellId(s2CellId));
+
+            // Verify an edge cell (prefix=0b101_11111111, suffix=2001)
+            s2CellId = fileFormat.createCellId(0b101_11111111, 2500);
+            assertNull(satS2RangeFileReader.findEntryByCellId(s2CellId));
+
+            // Verify an edge cell (prefix=0b101_11111111, suffix=2500)
+            s2CellId = fileFormat.createCellId(0b101_11111111, 2500);
+            assertNull(satS2RangeFileReader.findEntryByCellId(s2CellId));
+        } catch (Exception ex) {
+            fail("Unexpected exception when validating the output ex=" + ex);
+        }
+    }
+}