diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 31af599..85dad3c 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -139,7 +139,6 @@
     <uses-permission android:name="android.permission.CUSTOMIZE_SYSTEM_UI" />
     <uses-permission android:name="android.permission.REMAP_MODIFIER_KEYS" />
     <uses-permission android:name="android.permission.ACCESS_GPU_SERVICE" />
-    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
     <uses-permission android:name="android.permission.MANAGE_GAME_MODE" />
     <uses-permission android:name="android.permission.RESTART_PHONE_PROCESS" />
     <uses-permission android:name="android.permission.MANAGE_ENHANCED_CONFIRMATION_STATES" />
@@ -3970,6 +3969,9 @@
             </intent-filter>
         </receiver>
 
+        <service android:name=".sim.PrimarySubscriptionListChangedService"
+            android:permission="android.permission.BIND_JOB_SERVICE" />
+
         <provider
             android:name="androidx.core.content.FileProvider"
             android:authorities="${applicationId}.files"
diff --git a/res-product/values-af/strings.xml b/res-product/values-af/strings.xml
index 0705c3f..94417b0 100644
--- a/res-product/values-af/strings.xml
+++ b/res-product/values-af/strings.xml
@@ -269,7 +269,7 @@
     <string name="about_settings" product="default" msgid="2621311564780208250">"Meer oor foon"</string>
     <string name="about_settings" product="device" msgid="7595574154492383452">"Oor toestel"</string>
     <string name="about_settings" product="emulator" msgid="1099246296173401003">"Meer oor nagebootste toestel"</string>
-    <string name="install_all_warning" product="tablet" msgid="1732116924846572063">"Jou tablet en persoonlike data is meer kwesbaar vir aanvalle deur onbekende programme. Deur programme van hierdie bron af te installeer, stem jy in dat jy verantwoordelik is vir enige skade aan jou tablet of verlies van data wat uit hul gebruik kan spruit."</string>
+    <string name="install_all_warning" product="tablet" msgid="1732116924846572063">"Jou tablet en persoonlike data is meer kwesbaar vir aanvalle deur onbekende apps. Deur apps van hierdie bron af te installeer, stem jy in dat jy verantwoordelik is vir enige skade aan jou tablet of verlies van data wat uit hul gebruik kan spruit."</string>
     <string name="install_all_warning" product="default" msgid="4597256179485325694">"Jou foon en persoonlike data is meer kwesbaar vir aanvalle deur onbekende apps. Deur apps van hierdie bron af te installeer, stem jy in dat jy verantwoordelik is vir enige skade aan jou foon of verlies van data wat uit hul gebruik kan spruit."</string>
     <string name="install_all_warning" product="device" msgid="6293002353591632851">"Jou toestel en persoonlike data is meer kwesbaar vir aanvalle deur onbekende programme. Deur programme van hierdie bron af te installeer, stem jy in dat jy verantwoordelikheid aanvaar vir enige skade aan jou toestel of verlies van data wat uit die gebruik van hierdie programme kan spruit."</string>
     <string name="runningservicedetails_stop_dlg_text" product="tablet" msgid="6321057186549848774">"As jy hierdie diens stop sal sommige eienskappe van jou tablet dalk nie behoorlik werk nie totdat jy dit eers aan en af skakel."</string>
diff --git a/res-product/values-ar/strings.xml b/res-product/values-ar/strings.xml
index bd89f64..6ffafe8 100644
--- a/res-product/values-ar/strings.xml
+++ b/res-product/values-ar/strings.xml
@@ -277,7 +277,7 @@
     <string name="testing_phone_info" product="tablet" msgid="8267746802132630741">"معلومات الجهاز اللوحي"</string>
     <string name="testing_phone_info" product="default" msgid="7507506297352160191">"معلومات الهاتف"</string>
     <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="1773409172676594981">"ستتم إعادة ضبط إعداداتك المفضّلة لحجم الشاشة والنص على الإعدادات الأصلية للهاتف."</string>
-    <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="2547948891207211388">"ستتم إعادة ضبط إعداداتك المفضّلة لحجم الشاشة والنص على الإعدادات الأصلية للجهاز اللوحي."</string>
+    <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="2547948891207211388">"ستتم إعادة ضبط إعداداتك المفضّلة لحجم الشاشة والنص على الإعدادات الأصلية للجهاز اللوحي"</string>
     <string name="accessibility_daltonizer_about_intro_text" product="default" msgid="5234458848997942613">"يمكنك تعديل كيفية عرض الألوان على هاتفك"</string>
     <string name="accessibility_daltonizer_about_intro_text" product="tablet" msgid="5300401841391736534">"يمكنك تعديل كيفية عرض الألوان على جهازك اللوحي."</string>
     <string name="reduce_bright_colors_preference_summary" product="default" msgid="2025941326724094318">"يمكنك ضبط تعتيم الشاشة على مستوى أقلّ من الحد الأدنى لسطوع هاتفك"</string>
diff --git a/res-product/values-cs/strings.xml b/res-product/values-cs/strings.xml
index 0d12728..c07793d 100644
--- a/res-product/values-cs/strings.xml
+++ b/res-product/values-cs/strings.xml
@@ -276,8 +276,8 @@
     <string name="runningservicedetails_stop_dlg_text" product="default" msgid="6869998550403667737">"Pokud tuto službu zastavíte, může se stát, že některé funkce tabletu nebudou fungovat správně, dokud telefon nevypnete a opět nezapnete."</string>
     <string name="testing_phone_info" product="tablet" msgid="8267746802132630741">"Informace o tabletu"</string>
     <string name="testing_phone_info" product="default" msgid="7507506297352160191">"Informace o telefonu"</string>
-    <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="1773409172676594981">"Předvolby velikosti obrazovky a textu se resetují na původní nastavení telefonu"</string>
-    <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="2547948891207211388">"Předvolby velikosti obrazovky a textu se resetují na původní nastavení tabletu"</string>
+    <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="1773409172676594981">"Předvolby velikosti zobrazovaných prvků a textu se resetují na původní nastavení telefonu"</string>
+    <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="2547948891207211388">"Předvolby velikosti zobrazovaných prvků a textu se resetují na původní nastavení tabletu"</string>
     <string name="accessibility_daltonizer_about_intro_text" product="default" msgid="5234458848997942613">"Můžete si upravit, jak se budou v telefonu zobrazovat barvy."</string>
     <string name="accessibility_daltonizer_about_intro_text" product="tablet" msgid="5300401841391736534">"Upravte si zobrazování barev v tabletu"</string>
     <string name="reduce_bright_colors_preference_summary" product="default" msgid="2025941326724094318">"Ztmavit obrazovku více, než je minimální nastavení jasu na telefonu"</string>
diff --git a/res-product/values-es-rUS/strings.xml b/res-product/values-es-rUS/strings.xml
index c76b3da..143ffc9 100644
--- a/res-product/values-es-rUS/strings.xml
+++ b/res-product/values-es-rUS/strings.xml
@@ -277,7 +277,7 @@
     <string name="testing_phone_info" product="tablet" msgid="8267746802132630741">"Información del tablet"</string>
     <string name="testing_phone_info" product="default" msgid="7507506297352160191">"Información del dispositivo"</string>
     <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="1773409172676594981">"Se restablecerán las preferencias de tamaño de visualización y texto de la pantalla a las de la configuración original del teléfono"</string>
-    <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="2547948891207211388">"Se restablecerán las preferencias de texto y tamaño de la pantalla a los parámetros de configuración originales de la tablet"</string>
+    <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="2547948891207211388">"Se restablecerán las preferencias de tamaño de visualización y texto de la pantalla a las de la configuración original de la tablet."</string>
     <string name="accessibility_daltonizer_about_intro_text" product="default" msgid="5234458848997942613">"Ajusta cómo se muestran los colores en tu teléfono"</string>
     <string name="accessibility_daltonizer_about_intro_text" product="tablet" msgid="5300401841391736534">"Ajusta cómo se muestran los colores en tu tablet"</string>
     <string name="reduce_bright_colors_preference_summary" product="default" msgid="2025941326724094318">"Atenúa la pantalla por debajo del brillo mínimo del teléfono"</string>
diff --git a/res-product/values-eu/strings.xml b/res-product/values-eu/strings.xml
index c68348c..22c028c 100644
--- a/res-product/values-eu/strings.xml
+++ b/res-product/values-eu/strings.xml
@@ -188,8 +188,8 @@
     <string name="lock_screen_pin_skip_biometrics_message" product="default" msgid="2717938545326672010">"PIN bat behar da aurpegi bidez desblokeatzeko eginbidea eta hatz-marka bidez desblokeatzeko eginbidea konfiguratzeko.\n\nPINak babestu egiten du telefonoa, hura galtzen baduzu edo lapurtzen badizute."</string>
     <string name="lock_screen_pattern_skip_biometrics_message" product="default" msgid="6067309080610183546">"Pasahitz bat behar da aurpegi bidez desblokeatzeko eginbidea eta hatz-marka bidez desblokeatzeko eginbidea konfiguratzeko.\n\nEreduak babestu egiten du telefonoa, hura galtzen baduzu edo lapurtzen badizute."</string>
     <string name="lock_screen_password_skip_biometrics_message" product="default" msgid="4739690336878613804">"Pasahitz bat behar da aurpegi bidez desblokeatzeko eginbidea eta hatz-marka bidez desblokeatzeko eginbidea konfiguratzeko.\n\nPasahitzak babestu egiten du telefonoa, hura galtzen baduzu edo lapurtzen badizute."</string>
-    <string name="fingerprint_v2_delete_message" product="default" msgid="8723083814238510088">"Telefonoan \"<xliff:g id="FINGERPRINT_ID">%1$s</xliff:g>\" izenarekin gordetako hatz-markaren irudiak eta eredua ezabatuko dira"</string>
-    <string name="fingerprint_v2_delete_message" product="tablet" msgid="527375244730792698">"Tabletan \"<xliff:g id="FINGERPRINT_ID">%1$s</xliff:g>\" izenarekin gordetako hatz-markaren irudiak eta eredua ezabatuko dira"</string>
+    <string name="fingerprint_v2_delete_message" product="default" msgid="8723083814238510088">"Telefonoan \"<xliff:g id="FINGERPRINT_ID">%1$s</xliff:g>\" izenarekin gordetako hatz-markaren irudiak eta eredua ezabatuko dira."</string>
+    <string name="fingerprint_v2_delete_message" product="tablet" msgid="527375244730792698">"Tabletan \"<xliff:g id="FINGERPRINT_ID">%1$s</xliff:g>\" izenarekin gordetako hatz-markaren irudiak eta eredua ezabatuko dira."</string>
     <string name="fingerprint_v2_delete_message" product="device" msgid="4549780655045100171">"Ezabatu egingo dira gailuan \"<xliff:g id="FINGERPRINT_ID">%1$s</xliff:g>\" izenarekin gordetako hatz-markaren irudiak eta eredua"</string>
     <string name="fingerprint_last_delete_message" product="default" msgid="3187410175262625294">"Ezingo duzu erabili hatz-marka telefonoa desblokeatzeko edo aplikazioetan zeu zarela egiaztatzeko."</string>
     <string name="fingerprint_last_delete_message" product="tablet" msgid="8618307419148004587">"Ezingo duzu erabili hatz-marka tableta desblokeatzeko edo aplikazioetan zeu zarela egiaztatzeko."</string>
diff --git a/res-product/values-hr/strings.xml b/res-product/values-hr/strings.xml
index 0f23982..2008875 100644
--- a/res-product/values-hr/strings.xml
+++ b/res-product/values-hr/strings.xml
@@ -277,7 +277,7 @@
     <string name="testing_phone_info" product="tablet" msgid="8267746802132630741">"Informacije o tabletnom uređaju"</string>
     <string name="testing_phone_info" product="default" msgid="7507506297352160191">"Telefonske informacije"</string>
     <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="1773409172676594981">"Vaše postavke veličine prikaza i teksta vratit će se na izvorne postavke telefona."</string>
-    <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="2547948891207211388">"Vaše postavke veličine prikaza i teksta vratit će se na izvorne postavke tableta."</string>
+    <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="2547948891207211388">"Vaše postavke veličine prikaza i teksta vratit će se na izvorne postavke tableta"</string>
     <string name="accessibility_daltonizer_about_intro_text" product="default" msgid="5234458848997942613">"Prilagodite način prikazivanja boja na telefonu"</string>
     <string name="accessibility_daltonizer_about_intro_text" product="tablet" msgid="5300401841391736534">"Prilagodite način prikazivanja boja na svojem tabletu."</string>
     <string name="reduce_bright_colors_preference_summary" product="default" msgid="2025941326724094318">"Zatamnite zaslon više od minimalne svjetline telefona"</string>
diff --git a/res-product/values-iw/strings.xml b/res-product/values-iw/strings.xml
index 60e3988..17b360f 100644
--- a/res-product/values-iw/strings.xml
+++ b/res-product/values-iw/strings.xml
@@ -269,7 +269,7 @@
     <string name="about_settings" product="default" msgid="2621311564780208250">"מידע על הטלפון"</string>
     <string name="about_settings" product="device" msgid="7595574154492383452">"מידע על המכשיר"</string>
     <string name="about_settings" product="emulator" msgid="1099246296173401003">"מידע על מכשיר בגרסת האמולטור"</string>
-    <string name="install_all_warning" product="tablet" msgid="1732116924846572063">"הטאבלט והנתונים האישיים שלך פגיעים יותר להתקפות של אפליקציות לא מוכרות. על ידי התקנת אפליקציות ממקור זה, מקובל עליך שתחול עליך האחריות לכל נזק לטאבלט או לכל אובדן של נתונים שעשויים להיגרם כתוצאה מהשימוש באפליקציות אלה."</string>
+    <string name="install_all_warning" product="tablet" msgid="1732116924846572063">"הטאבלט והנתונים האישיים שלך פגיעים יותר להתקפות של אפליקציות לא מוכרות. על ידי התקנת אפליקציות מהמקור הזה, מקובל עליך שתחול עליך האחריות לכל נזק לטאבלט או לכל אובדן של נתונים שעשויים להיגרם כתוצאה מהשימוש באפליקציות אלה."</string>
     <string name="install_all_warning" product="default" msgid="4597256179485325694">"הטלפון והנתונים האישיים שלך פגיעים יותר להתקפות של אפליקציות לא מוכרות. התקנת אפליקציות מהמקור הזה מהווה את הסכמתך לכך שהאחריות היא שלך לכל נזק לטלפון או לכל אובדן של נתונים שעשויים להיגרם כתוצאה מהשימוש באפליקציות האלה."</string>
     <string name="install_all_warning" product="device" msgid="6293002353591632851">"המכשיר והנתונים האישיים שלך פגיעים יותר להתקפות של אפליקציות לא מוכרות. התקנת אפליקציות מהמקור הזה מבטאת את הסכמתך לכך שהאחריות לכל נזק למכשיר או לכל אובדן של נתונים שעשויים להיגרם כתוצאה מהשימוש באפליקציות אלה היא שלך בלבד."</string>
     <string name="runningservicedetails_stop_dlg_text" product="tablet" msgid="6321057186549848774">"אם תפסיק שירות זה, תכונות מסוימות של הטאבלט עלולות להפסיק לפעול כהלכה עד לכיבוי המכשיר והפעלתו מחדש."</string>
diff --git a/res-product/values-ja/strings.xml b/res-product/values-ja/strings.xml
index 613f41a..52277df 100644
--- a/res-product/values-ja/strings.xml
+++ b/res-product/values-ja/strings.xml
@@ -225,8 +225,8 @@
     <string name="wifi_add_app_single_network_summary" product="tablet" msgid="93466057231937113">"<xliff:g id="APPNAME">%1$s</xliff:g> がタブレットにネットワークを保存しようとしています"</string>
     <string name="wifi_add_app_networks_summary" product="default" msgid="7014504084783236696">"<xliff:g id="APPNAME">%1$s</xliff:g> がスマートフォンにこれらのネットワークを保存しようとしています"</string>
     <string name="wifi_add_app_networks_summary" product="tablet" msgid="6433255556506891439">"<xliff:g id="APPNAME">%1$s</xliff:g> がタブレットにこれらのネットワークを保存しようとしています"</string>
-    <string name="auto_rotate_screen_summary" product="default" msgid="5562937346878935483">"スマートフォンを縦向きや横向きに動かすと、画面の向きが自動的に調整されます"</string>
-    <string name="auto_rotate_screen_summary" product="tablet" msgid="3163709742477804994">"タブレットを縦向きや横向きに動かすと、画面の向きが自動的に調整されます"</string>
+    <string name="auto_rotate_screen_summary" product="default" msgid="5562937346878935483">"スマートフォンの縦横の向きに合わせて、画面の向きを自動的に調整します"</string>
+    <string name="auto_rotate_screen_summary" product="tablet" msgid="3163709742477804994">"タブレットの縦横の向きに合わせて、画面の向きを自動的に調整します"</string>
     <string name="sim_lock_on" product="tablet" msgid="227481196121403470">"タブレット使用時にPIN入力が必要になります"</string>
     <string name="sim_lock_on" product="default" msgid="6896034657274595838">"デバイスでの使用時に PIN 入力が要求されます"</string>
     <string name="sim_lock_off" product="tablet" msgid="4619320846576958981">"タブレット使用時にPIN入力が必要になります"</string>
diff --git a/res-product/values-km/strings.xml b/res-product/values-km/strings.xml
index 61fe64f..a67ed18 100644
--- a/res-product/values-km/strings.xml
+++ b/res-product/values-km/strings.xml
@@ -269,7 +269,7 @@
     <string name="about_settings" product="default" msgid="2621311564780208250">"អំពី​ទូរសព្ទ"</string>
     <string name="about_settings" product="device" msgid="7595574154492383452">"អំពីឧបករណ៍"</string>
     <string name="about_settings" product="emulator" msgid="1099246296173401003">"អំពីឧបករណ៍ត្រាប់តាម"</string>
-    <string name="install_all_warning" product="tablet" msgid="1732116924846572063">"ថេប្លេត និងទិន្នន័យផ្ទាល់ខ្លួនរបស់អ្នកងាយនឹងរងគ្រោះពីការវាយប្រហារពីកម្មវិធីដែលមិនស្គាល់។ ប្រសិនបើដំឡើងកម្មវិធីពីប្រភពនេះ មានន័យថាអ្នកទទួលខុសត្រូវលើការខូចខាតណាមួយចំពោះទូរសព្ទ ឬការបាត់បង់ទិន្នន័យ ដែលអាចបណ្តាលមកពីការប្រើប្រាស់កម្មវិធីទាំងនោះ។"</string>
+    <string name="install_all_warning" product="tablet" msgid="1732116924846572063">"ថេប្លេត និងទិន្នន័យផ្ទាល់ខ្លួនរបស់អ្នកងាយនឹងរងគ្រោះពីការវាយប្រហារពីកម្មវិធីដែលមិនស្គាល់។ ប្រសិនបើដំឡើងកម្មវិធីពីប្រភពនេះ មានន័យថាអ្នកទទួលខុសត្រូវលើការខូចខាតណាមួយចំពោះថេប្លេត ឬការបាត់បង់ទិន្នន័យ ដែលអាចបណ្តាលមកពីការប្រើប្រាស់កម្មវិធីទាំងនោះ។"</string>
     <string name="install_all_warning" product="default" msgid="4597256179485325694">"ទូរសព្ទ និងទិន្នន័យផ្ទាល់ខ្លួនរបស់អ្នកកាន់តែងាយនឹងរងគ្រោះពីការវាយប្រហារពីកម្មវិធីដែលមិនស្គាល់។ ប្រសិនបើដំឡើងកម្មវិធីពីប្រភពនេះ អ្នកយល់ព្រមថា អ្នកទទួលខុសត្រូវលើការខូចខាតទាំងឡាយមកលើទូរសព្ទរបស់អ្នក ឬការបាត់បង់ទិន្នន័យ ដែលអាចបណ្ដាលមកពីការប្រើប្រាស់កម្មវិធីទាំងនោះ។"</string>
     <string name="install_all_warning" product="device" msgid="6293002353591632851">"ឧបករណ៍ និងទិន្នន័យផ្ទាល់ខ្លួនរបស់អ្នកងាយនឹងរងគ្រោះពីការវាយប្រហារពីកម្មវិធីដែលមិនស្គាល់។ ប្រសិនបើដំឡើងកម្មវិធីពីប្រភពនេះ មានន័យថាអ្នកទទួលខុសត្រូវលើការខូចខាតទាំងឡាយចំពោះឧបករណ៍ ឬការបាត់បង់ទិន្នន័យ ដែលអាចបណ្តាលមកពីការប្រើប្រាស់កម្មវិធីទាំងនោះ។"</string>
     <string name="runningservicedetails_stop_dlg_text" product="tablet" msgid="6321057186549848774">"បើ​អ្នក​បញ្ឈប់​សេវាកម្ម​នេះ លក្ខណៈ​មួយ​ចំនួន​នៃ​កុំព្យូទ័រ​បន្ទះ​របស់​អ្នក​អាច​មិន​ដំណើរការ​ត្រឹមត្រូវ លុះ​ត្រា​តែ​អ្នក​បិទ ហើយ​បើក​វា​ឡើងវិញ។"</string>
diff --git a/res-product/values-ms/strings.xml b/res-product/values-ms/strings.xml
index 51d8f4f..590634d 100644
--- a/res-product/values-ms/strings.xml
+++ b/res-product/values-ms/strings.xml
@@ -276,8 +276,8 @@
     <string name="runningservicedetails_stop_dlg_text" product="default" msgid="6869998550403667737">"Jika anda menghentikan perkhidmatan ini, beberapa ciri telefon anda boleh berhenti berfungsi dengan betul sehingga anda mematikannya dan kemudian menghidupkannya semula."</string>
     <string name="testing_phone_info" product="tablet" msgid="8267746802132630741">"Maklumat tablet"</string>
     <string name="testing_phone_info" product="default" msgid="7507506297352160191">"Maklumat telefon"</string>
-    <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="1773409172676594981">"Saiz paparan dan pilihan teks anda akan ditetapkan semula kepada tetapan asal telefon"</string>
-    <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="2547948891207211388">"Saiz paparan dan pilihan teks anda akan ditetapkan semula kepada tetapan asal tablet"</string>
+    <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="1773409172676594981">"Pilihan saiz paparan dan teks akan ditetapkan semula kepada tetapan asal telefon"</string>
+    <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="2547948891207211388">"Pilihan saiz paparan dan teks akan ditetapkan semula kepada tetapan asal tablet"</string>
     <string name="accessibility_daltonizer_about_intro_text" product="default" msgid="5234458848997942613">"Laraskan cara warna dipaparkan pada telefon anda"</string>
     <string name="accessibility_daltonizer_about_intro_text" product="tablet" msgid="5300401841391736534">"Laraskan cara warna dipaparkan pada tablet anda"</string>
     <string name="reduce_bright_colors_preference_summary" product="default" msgid="2025941326724094318">"Malapkan skrin melebihi kecerahan minimum telefon anda"</string>
diff --git a/res-product/values-ne/strings.xml b/res-product/values-ne/strings.xml
index 41c33f6..309f2ef 100644
--- a/res-product/values-ne/strings.xml
+++ b/res-product/values-ne/strings.xml
@@ -225,8 +225,8 @@
     <string name="wifi_add_app_single_network_summary" product="tablet" msgid="93466057231937113">"<xliff:g id="APPNAME">%1$s</xliff:g> तपाईंको ट्याब्लेटमा कुनै नेटवर्क सुरक्षित गर्न चाहन्छ"</string>
     <string name="wifi_add_app_networks_summary" product="default" msgid="7014504084783236696">"<xliff:g id="APPNAME">%1$s</xliff:g> तपाईंको फोनमा यी नेटवर्कहरू सुरक्षित गर्न चाहन्छ"</string>
     <string name="wifi_add_app_networks_summary" product="tablet" msgid="6433255556506891439">"<xliff:g id="APPNAME">%1$s</xliff:g> तपाईंको ट्याब्लेटमा यी नेटवर्कहरू सुरक्षित गर्न चाहन्छ"</string>
-    <string name="auto_rotate_screen_summary" product="default" msgid="5562937346878935483">"फोन पोर्ट्रेट र ल्यान्डस्केपबिच अदलबदल गर्दा स्क्रिनको ओरियन्टेसन स्वतः मिलाइयोस्"</string>
-    <string name="auto_rotate_screen_summary" product="tablet" msgid="3163709742477804994">"ट्याब्लेट पोर्ट्रेट र ल्यान्डस्केपबिच अदलबदल गर्दा स्क्रिनको ओरियन्टेसन स्वतः मिलाइयोस्"</string>
+    <string name="auto_rotate_screen_summary" product="default" msgid="5562937346878935483">"फोन पोर्ट्रेट र ल्यान्डस्केपबिच अदलबदल गर्दा स्क्रिनको ओरियन्टेसन स्वतः मिलाउनुहोस्"</string>
+    <string name="auto_rotate_screen_summary" product="tablet" msgid="3163709742477804994">"ट्याब्लेट पोर्ट्रेट र ल्यान्डस्केपबिच अदलबदल गर्दा स्क्रिनको ओरियन्टेसन स्वतः मिलाउनुहोस्"</string>
     <string name="sim_lock_on" product="tablet" msgid="227481196121403470">"ट्याब्लेट प्रयोग गर्न PIN आवश्यक हुन्छ"</string>
     <string name="sim_lock_on" product="default" msgid="6896034657274595838">"फोन प्रयोग गर्नको लागि PIN को आवश्यकता हुन्छ"</string>
     <string name="sim_lock_off" product="tablet" msgid="4619320846576958981">"ट्याब्लेट प्रयोग गर्नको लागि PIN को आवश्यकता हुन्छ"</string>
diff --git a/res-product/values-pt-rBR/strings.xml b/res-product/values-pt-rBR/strings.xml
index cc4d882..052f41f 100644
--- a/res-product/values-pt-rBR/strings.xml
+++ b/res-product/values-pt-rBR/strings.xml
@@ -269,7 +269,7 @@
     <string name="about_settings" product="default" msgid="2621311564780208250">"Sobre o dispositivo"</string>
     <string name="about_settings" product="device" msgid="7595574154492383452">"Sobre o dispositivo"</string>
     <string name="about_settings" product="emulator" msgid="1099246296173401003">"Sobre o dispositivo emulado"</string>
-    <string name="install_all_warning" product="tablet" msgid="1732116924846572063">"Seu tablet e seus dados pessoais estão mais vulneráveis a ataques de apps desconhecidos. Ao instalar apps dessa fonte, você concorda que é responsável por qualquer perda de dados ou dano ao dispositivo causados pelo uso desses apps."</string>
+    <string name="install_all_warning" product="tablet" msgid="1732116924846572063">"Seu tablet e seus dados pessoais estão mais vulneráveis a ataques de apps desconhecidos. Ao instalar apps dessa fonte, você concorda que é responsável por qualquer perda de dados ou danos ao dispositivo causados pelo uso desses apps."</string>
     <string name="install_all_warning" product="default" msgid="4597256179485325694">"Seu smartphone e seus dados pessoais estão mais vulneráveis a ataques de apps desconhecidos. Ao instalar apps dessa fonte, você concorda que é responsável por qualquer perda de dados ou dano ao dispositivo causados pelo uso desses apps."</string>
     <string name="install_all_warning" product="device" msgid="6293002353591632851">"Seus dados pessoais e do seu dispositivo são mais vulneráveis a ataques de apps desconhecidos. Ao instalar apps dessa fonte, você concorda que é responsável por qualquer perda de dados ou dano ao dispositivo causados pelo uso desses apps."</string>
     <string name="runningservicedetails_stop_dlg_text" product="tablet" msgid="6321057186549848774">"Se você interromper este serviço, alguns recursos de seu tablet podem parar de funcionar corretamente até que você o desligue e ligue novamente."</string>
diff --git a/res-product/values-pt-rPT/strings.xml b/res-product/values-pt-rPT/strings.xml
index 72acef7..e3edde3 100644
--- a/res-product/values-pt-rPT/strings.xml
+++ b/res-product/values-pt-rPT/strings.xml
@@ -269,7 +269,7 @@
     <string name="about_settings" product="default" msgid="2621311564780208250">"Acerca do telefone"</string>
     <string name="about_settings" product="device" msgid="7595574154492383452">"Acerca do dispositivo"</string>
     <string name="about_settings" product="emulator" msgid="1099246296173401003">"Acerca do dispositivo emulado"</string>
-    <string name="install_all_warning" product="tablet" msgid="1732116924846572063">"O seu tablet e os dados pessoais são mais vulneráveis a ataques de aplicações desconhecidas. Ao instalar aplicações desta fonte, aceita ser responsável por quaisquer danos no tablet ou perdas de dados que possam resultar da utilização do mesmo."</string>
+    <string name="install_all_warning" product="tablet" msgid="1732116924846572063">"O seu tablet e os dados pessoais são mais vulneráveis a ataques de apps desconhecidas. Ao instalar apps desta fonte, aceita ser responsável por quaisquer danos no tablet ou perdas de dados que possam resultar da utilização do mesmo."</string>
     <string name="install_all_warning" product="default" msgid="4597256179485325694">"O seu telemóvel e dados pessoais são mais vulneráveis a ataques de apps desconhecidas. Ao instalar apps desta fonte, assume a responsabilidade por quaisquer danos no telemóvel ou perdas de dados que possam resultar da utilização do mesmo."</string>
     <string name="install_all_warning" product="device" msgid="6293002353591632851">"O dispositivo e os dados pessoais são mais vulneráveis a ataques de aplicações desconhecidas. Ao instalar aplicações desta fonte, aceita ser responsável por quaisquer danos no dispositivo ou perdas de dados que possam resultar da utilização do mesmo."</string>
     <string name="runningservicedetails_stop_dlg_text" product="tablet" msgid="6321057186549848774">"Se interromper este serviço, algumas funcionalidades do tablet podem deixar de funcionar corretamente até ser desligado e ligado novamente."</string>
diff --git a/res-product/values-pt/strings.xml b/res-product/values-pt/strings.xml
index cc4d882..052f41f 100644
--- a/res-product/values-pt/strings.xml
+++ b/res-product/values-pt/strings.xml
@@ -269,7 +269,7 @@
     <string name="about_settings" product="default" msgid="2621311564780208250">"Sobre o dispositivo"</string>
     <string name="about_settings" product="device" msgid="7595574154492383452">"Sobre o dispositivo"</string>
     <string name="about_settings" product="emulator" msgid="1099246296173401003">"Sobre o dispositivo emulado"</string>
-    <string name="install_all_warning" product="tablet" msgid="1732116924846572063">"Seu tablet e seus dados pessoais estão mais vulneráveis a ataques de apps desconhecidos. Ao instalar apps dessa fonte, você concorda que é responsável por qualquer perda de dados ou dano ao dispositivo causados pelo uso desses apps."</string>
+    <string name="install_all_warning" product="tablet" msgid="1732116924846572063">"Seu tablet e seus dados pessoais estão mais vulneráveis a ataques de apps desconhecidos. Ao instalar apps dessa fonte, você concorda que é responsável por qualquer perda de dados ou danos ao dispositivo causados pelo uso desses apps."</string>
     <string name="install_all_warning" product="default" msgid="4597256179485325694">"Seu smartphone e seus dados pessoais estão mais vulneráveis a ataques de apps desconhecidos. Ao instalar apps dessa fonte, você concorda que é responsável por qualquer perda de dados ou dano ao dispositivo causados pelo uso desses apps."</string>
     <string name="install_all_warning" product="device" msgid="6293002353591632851">"Seus dados pessoais e do seu dispositivo são mais vulneráveis a ataques de apps desconhecidos. Ao instalar apps dessa fonte, você concorda que é responsável por qualquer perda de dados ou dano ao dispositivo causados pelo uso desses apps."</string>
     <string name="runningservicedetails_stop_dlg_text" product="tablet" msgid="6321057186549848774">"Se você interromper este serviço, alguns recursos de seu tablet podem parar de funcionar corretamente até que você o desligue e ligue novamente."</string>
diff --git a/res-product/values-sw/strings.xml b/res-product/values-sw/strings.xml
index abc8926..5b9fb4e 100644
--- a/res-product/values-sw/strings.xml
+++ b/res-product/values-sw/strings.xml
@@ -226,7 +226,7 @@
     <string name="wifi_add_app_networks_summary" product="default" msgid="7014504084783236696">"<xliff:g id="APPNAME">%1$s</xliff:g> inataka kuhifadhi mitandao hii kwenye simu yako"</string>
     <string name="wifi_add_app_networks_summary" product="tablet" msgid="6433255556506891439">"<xliff:g id="APPNAME">%1$s</xliff:g> inataka kuhifadhi mitandao hii kwenye kompyuta yako kibao"</string>
     <string name="auto_rotate_screen_summary" product="default" msgid="5562937346878935483">"Rekebisha mkao wa skrini kiotomatiki unaposogeza simu yako kati ya mkao wima na mlalo"</string>
-    <string name="auto_rotate_screen_summary" product="tablet" msgid="3163709742477804994">"Rekebisha kiotomatiki mkao wa skrini unapobadili kompyuta kibao yako kati ya mkao wima na mlalo"</string>
+    <string name="auto_rotate_screen_summary" product="tablet" msgid="3163709742477804994">"Rekebisha kiotomatiki mkao wa skrini unapobadili kishikwambi chako kati ya mkao wima na mlalo"</string>
     <string name="sim_lock_on" product="tablet" msgid="227481196121403470">"Inahitaji PIN ili kutumia kompyuta kibao"</string>
     <string name="sim_lock_on" product="default" msgid="6896034657274595838">"Unahitaji PIN ili utumie simu"</string>
     <string name="sim_lock_off" product="tablet" msgid="4619320846576958981">"Itisha PIN ili kutumia kompyuta kibao"</string>
@@ -269,7 +269,7 @@
     <string name="about_settings" product="default" msgid="2621311564780208250">"Kuhusu simu"</string>
     <string name="about_settings" product="device" msgid="7595574154492383452">"Kuhusu kifaa"</string>
     <string name="about_settings" product="emulator" msgid="1099246296173401003">"Kuhusu kifaa kinachoigwa"</string>
-    <string name="install_all_warning" product="tablet" msgid="1732116924846572063">"Data yako binafsi na ya kompyuta kibao yako zinaweza kuathiriwa na programu ambazo hazijulikani. Kwa kusakinisha programu kutoka chanzo hiki, unakubali kuwajibikia kila wakati uharibifu wowote kwenye kompyuta kibao yako au kupotea kwa data kutokana na matumizi yake."</string>
+    <string name="install_all_warning" product="tablet" msgid="1732116924846572063">"Data yako binafsi na ya kishikwambi chako zinaweza kuathiriwa na programu ambazo hazijulikani. Kwa kusakinisha programu kutoka chanzo hiki, unakubali kuwajibikia kila wakati uharibifu wowote kwenye kishikwambi chako au kupotea kwa data kutokana na matumizi yake."</string>
     <string name="install_all_warning" product="default" msgid="4597256179485325694">"Data yako binafsi na ya simu yako zinaweza kuathiriwa na programu ambazo hazijulikani. Kwa kusakinisha programu kutoka chanzo hiki, unakubali kuwajibikia kila wakati uharibifu wowote kwenye simu yako au kupotea kwa data kutokana na matumizi yake."</string>
     <string name="install_all_warning" product="device" msgid="6293002353591632851">"Data yako ya binafsi na ya kifaa chako inaweza kuathiriwa na programu ambazo hazijulikani. Kwa kusakinisha programu kutoka chanzo hiki, unakubali kuwajibikia uharibifu wowote kwenye kifaa chako au kupotea kwa data kutokana na matumizi ya programu hizo."</string>
     <string name="runningservicedetails_stop_dlg_text" product="tablet" msgid="6321057186549848774">"Ukisitisha huduma hii, baadhi ya vipengele vya kompyuta yako ndogo vinaweza kuwacha kufanya kazi kwa usahihi mpaka uizime na kisha uwashe tena."</string>
@@ -277,7 +277,7 @@
     <string name="testing_phone_info" product="tablet" msgid="8267746802132630741">"Maelezo ya kompyuta kibao"</string>
     <string name="testing_phone_info" product="default" msgid="7507506297352160191">"Maelezo ya simu"</string>
     <string name="accessibility_text_reading_confirm_dialog_message" product="default" msgid="1773409172676594981">"Mapendeleo yako ya ukubwa wa vipengee na maandishi yatarejeshwa kuwa mipangilio halisi ya simu"</string>
-    <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="2547948891207211388">"Mapendeleo yako ya maandishi na ukubwa wa skrini yatarejeshwa katika mipangilio halisi ya kompyuta kibao"</string>
+    <string name="accessibility_text_reading_confirm_dialog_message" product="tablet" msgid="2547948891207211388">"Mapendeleo yako ya maandishi na ukubwa wa skrini yatarejeshwa katika mipangilio halisi ya kishikwambi"</string>
     <string name="accessibility_daltonizer_about_intro_text" product="default" msgid="5234458848997942613">"Rekebisha jinsi rangi zinavyoonekana kwenye simu yako"</string>
     <string name="accessibility_daltonizer_about_intro_text" product="tablet" msgid="5300401841391736534">"Badilisha jinsi rangi zinavyoonekana kwenye kompyuta kibao yako"</string>
     <string name="reduce_bright_colors_preference_summary" product="default" msgid="2025941326724094318">"Punguza mwangaza wa skrini zaidi ya kiwango cha chini cha ung\'aavu wa simu yako"</string>
diff --git a/res-product/values-te/strings.xml b/res-product/values-te/strings.xml
index f8687b6..eb265d1 100644
--- a/res-product/values-te/strings.xml
+++ b/res-product/values-te/strings.xml
@@ -269,7 +269,7 @@
     <string name="about_settings" product="default" msgid="2621311564780208250">"ఫోన్ వివరాలు"</string>
     <string name="about_settings" product="device" msgid="7595574154492383452">"పరికరం గురించి"</string>
     <string name="about_settings" product="emulator" msgid="1099246296173401003">"ఎమ్యులేటర్ పరికరం గురించి"</string>
-    <string name="install_all_warning" product="tablet" msgid="1732116924846572063">"మీ టాబ్లెట్ మరియు వ్యక్తిగత డేటా తెలియని మూలాల్లోని యాప్‌ల ద్వారా దాడికి గురి కావడానికి ఎక్కువ అవకాశం ఉంటుంది. ఈ మూలం నుండి యాప్‌లను ఇన్‌స్టాల్ చేయడం ద్వారా, ఈ యాప్‌లను ఉపయోగించడం ద్వారా మీ టాబ్లెట్‌కు సంభవించే ఏదైనా నష్టానికి లేదా కోల్పోయే డేటాకి బాధ్యత వహించడానికి మీరు అంగీకరిస్తున్నారు."</string>
+    <string name="install_all_warning" product="tablet" msgid="1732116924846572063">"తెలియని (అన్‌నోన్) యాప్‌ల వల్ల మీ టాబ్లెట్‌తో పాటు వ్యక్తిగత డేటా దాడికి గురి అయ్యే అవకాశం ఎక్కువగా ఉంటుంది. ఈ సోర్స్ నుండి యాప్‌లను ఇన్‌స్టాల్ చేస్తే, వాటి వినియోగం వల్ల మీ టాబ్లెట్‌కు జరిగే ఏదైనా నష్టానికి లేదా కోల్పోయే డేటాకు మీరే బాధ్యత వహిస్తారని అంగీకరిస్తున్నారు."</string>
     <string name="install_all_warning" product="default" msgid="4597256179485325694">"తెలియని యాప్‌లు మీ ఫోన్ పైన, వ్యక్తిగత డేటా పైన దాడి చేయడానికి ఎక్కువగా అవకాశం ఉంటుంది. ఈ సోర్స్ నుండి యాప్‌లను ఇన్‌స్టాల్ చేయడం ద్వారా, వాటి వినియోగంతో మీ ఫోన్‌కు ఏదైనా నష్టం జరిగితే లేదా మీ డేటాను కోల్పోతే అందుకు మీరే బాధ్యత వహిస్తారని అంగీకరిస్తున్నారు."</string>
     <string name="install_all_warning" product="device" msgid="6293002353591632851">"మీ పరికరం మరియు వ్యక్తిగత డేటాపై తెలియని మూలాధారాల నుండి పొందిన యాప్‌లు దాడి చేసే అవకాశం ఎక్కువగా ఉంది. ఈ మూలాధారం నుండి పొందిన యాప్‌లను ఇన్‌స్టాల్ చేయడం ద్వారా, వాటి ఉపయోగం కారణంగా మీ పరికరానికి జరిగే హాని లేదా డేటాను కోల్పోవడం వంటి వాటికి మీరే పూర్తి బాధ్యత వహించడానికి మీరు అంగీకరించాలి."</string>
     <string name="runningservicedetails_stop_dlg_text" product="tablet" msgid="6321057186549848774">"మీరు ఈ సేవను ఆపివేస్తే, మీ టాబ్లెట్‌ను పవర్ ఆఫ్ చేసి, ఆపై మళ్లీ ఆన్ చేసే వరకు దీనిలో కొన్ని లక్షణాలు సరిగ్గా పని చేయకుండాపోవచ్చు."</string>
diff --git a/res/values/integers.xml b/res/values/integers.xml
index 7fb2afd..f62ccae 100644
--- a/res/values/integers.xml
+++ b/res/values/integers.xml
@@ -23,6 +23,7 @@
     <integer name="sim_notification_send">104</integer>
     <integer name="sim_slot_changed">105</integer>
     <integer name="power_monitor_receiver">106</integer>
+    <integer name="primary_subscription_list_changed">107</integer>
 
     <!-- Controls the maximum number of faces enrollable during SUW -->
     <integer name="suw_max_faces_enrollable">1</integer>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 2e796a2..8483e6c 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -6283,18 +6283,21 @@
 
     <!-- Cellular security related strings -->
     <!-- Title of Cellular security tile in Network & Internet settings page. [CHAR LIMIT=60]-->
-    <string name="cellular_security_title">Cellular network security</string>
+    <string name="cellular_security_title">Mobile network security</string>
     <!-- Summary of Cellular security tile in Network & Internet settings page. [CHAR LIMIT=NONE]-->
     <string name="cellular_security_summary">Network type, encryption, notification controls</string>
 
+    <!-- Summary of Cellular network security settings page in Network & Internet. [CHAR LIMIT=NONE]-->
+    <string name="cellular_security_top_intro">These settings help protect your calls, messages, and data from outdated or unencrypted networks that could expose you to data theft or surveillance</string>
+
     <!-- Title of cellular security settings page [CHAR LIMIT=60]-->
-    <string name="cellular_security_settings_title">Cellular network security</string>
+    <string name="cellular_security_settings_title">Mobile network security</string>
     <!-- Title of Cellular security notifications section [CHAR LIMIT=60]-->
     <string name="cellular_security_notifications">Notifications</string>
     <!-- Title of Cellular security notifications toggle [CHAR LIMIT=60]-->
-    <string name="cellular_security_notifications_controller_title">Security notifications</string>
+    <string name="cellular_security_notifications_controller_title">Network notifications</string>
     <!-- Summary of Cellular security notifications toggle [CHAR LIMIT=NONE]-->
-    <string name="cellular_security_notifications_controller_summary">Receive notifications in case the cellular network you are connected to is insecure due to lack of encryption, or if the cellular network records your unique decive or SIM identifiers (IMEI &amp; IMSI)</string>
+    <string name="cellular_security_notifications_controller_summary">Get notified when your device connects to an unencrypted network, or when a network records your unique device or SIM ID</string>
 
     <!--Cellular encryption -->
     <!--Cellular encryption title [CHAR LIMIT=60] -->
@@ -12480,9 +12483,9 @@
     <string name="enable_2g_summary_disabled_carrier"><xliff:g id="carrier_name_2g" example="Google Fi">%1$s</xliff:g> requires 2G to be available</string>
 
     <!-- Title for toggle if user wants to require cellular encryption [CHAR LIMIT=40] -->
-    <string name="require_cellular_encryption_title">Require encryption</string>
+    <string name="require_cellular_encryption_title">Allow only encrypted networks</string>
     <!-- Summary for if the user wants to require cellular encryption [CHAR LIMIT=NONE] -->
-    <string name="require_cellular_encryption_summary">Encryption is more secure, but you might not be able to connect in some locations. For emergency calls, encryption is never required</string>
+    <string name="require_cellular_encryption_summary">This is more secure but may limit your mobile network connection in some locations. Emergency calling is always allowed.</string>
 
     <!-- Label for All services preference in App info settings [CHAR LIMIT=40] -->
     <string name="app_info_all_services_label">All services</string>
diff --git a/res/xml/cellular_security.xml b/res/xml/cellular_security.xml
index e5fee15..8e96bbd 100644
--- a/res/xml/cellular_security.xml
+++ b/res/xml/cellular_security.xml
@@ -18,6 +18,10 @@
     xmlns:settings="http://schemas.android.com/apk/res-auto"
     android:key="cellular_security_settings_screen"
     android:title="@string/cellular_security_settings_title">
+
+    <com.android.settingslib.widget.TopIntroPreference
+	android:key="cellular_security_prefs_top_intro"
+        android:title="@string/cellular_security_top_intro"/>
     <PreferenceCategory
         android:key="cellular_security_notifications_category"
         android:title="@string/cellular_security_notifications"
diff --git a/src/com/android/settings/ResetNetwork.java b/src/com/android/settings/ResetNetwork.java
index 98dbbde..c91ef5c 100644
--- a/src/com/android/settings/ResetNetwork.java
+++ b/src/com/android/settings/ResetNetwork.java
@@ -158,7 +158,7 @@
                         .setTitleRes(R.string.reset_mobile_network_settings_confirm_title)
                         .setSourceMetricsCategory(getMetricsCategory());
 
-        if (resetSims && SubscriptionUtil.shouldShowRacDialog(context)) {
+        if (resetSims && SubscriptionUtil.shouldShowRacDialogWhenErasingAllEsims(context)) {
             context.startActivity(
                     EuiccRacConnectivityDialogActivity.getIntent(context, launcher.toIntent()));
         } else {
diff --git a/src/com/android/settings/biometrics/face/FaceEnrollEnrolling.java b/src/com/android/settings/biometrics/face/FaceEnrollEnrolling.java
index da3689a..32d2a11 100644
--- a/src/com/android/settings/biometrics/face/FaceEnrollEnrolling.java
+++ b/src/com/android/settings/biometrics/face/FaceEnrollEnrolling.java
@@ -17,10 +17,12 @@
 package com.android.settings.biometrics.face;
 
 import static android.hardware.biometrics.BiometricAuthenticator.TYPE_FACE;
+import static android.hardware.biometrics.BiometricFaceConstants.FACE_ERROR_TIMEOUT;
+import static android.hardware.biometrics.BiometricFaceConstants.FEATURE_REQUIRE_ATTENTION;
+import static android.hardware.biometrics.BiometricFaceConstants.FEATURE_REQUIRE_REQUIRE_DIVERSITY;
 
 import android.app.settings.SettingsEnums;
 import android.content.Intent;
-import android.hardware.face.FaceManager;
 import android.os.Bundle;
 import android.text.TextUtils;
 import android.util.Log;
@@ -112,10 +114,10 @@
         );
 
         if (!getIntent().getBooleanExtra(BiometricEnrollBase.EXTRA_KEY_REQUIRE_DIVERSITY, true)) {
-            mDisabledFeatures.add(FaceManager.FEATURE_REQUIRE_REQUIRE_DIVERSITY);
+            mDisabledFeatures.add(FEATURE_REQUIRE_REQUIRE_DIVERSITY);
         }
         if (!getIntent().getBooleanExtra(BiometricEnrollBase.EXTRA_KEY_REQUIRE_VISION, true)) {
-            mDisabledFeatures.add(FaceManager.FEATURE_REQUIRE_ATTENTION);
+            mDisabledFeatures.add(FEATURE_REQUIRE_ATTENTION);
         }
 
         startEnrollment();
@@ -190,7 +192,7 @@
     public void onEnrollmentError(int errMsgId, CharSequence errString) {
         int msgId;
         switch (errMsgId) {
-            case FaceManager.FACE_ERROR_TIMEOUT:
+            case FACE_ERROR_TIMEOUT:
                 msgId = R.string.security_settings_face_enroll_error_timeout_dialog_message;
                 break;
             default:
diff --git a/src/com/android/settings/biometrics/face/FaceSettingsAttentionPreferenceController.java b/src/com/android/settings/biometrics/face/FaceSettingsAttentionPreferenceController.java
index b5e9908..1902bc4 100644
--- a/src/com/android/settings/biometrics/face/FaceSettingsAttentionPreferenceController.java
+++ b/src/com/android/settings/biometrics/face/FaceSettingsAttentionPreferenceController.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.biometrics.face;
 
+import static android.hardware.biometrics.BiometricFaceConstants.FEATURE_REQUIRE_ATTENTION;
+
 import android.content.Context;
 import android.hardware.face.FaceManager;
 import android.hardware.face.FaceManager.GetFeatureCallback;
@@ -42,7 +44,7 @@
     private final SetFeatureCallback mSetFeatureCallback = new SetFeatureCallback() {
         @Override
         public void onCompleted(boolean success, int feature) {
-            if (feature == FaceManager.FEATURE_REQUIRE_ATTENTION) {
+            if (feature == FEATURE_REQUIRE_ATTENTION) {
                 mPreference.setEnabled(true);
                 if (!success) {
                     mPreference.setChecked(!mPreference.isChecked());
@@ -60,7 +62,7 @@
         public void onCompleted(boolean success, int[] features, boolean[] featureState) {
             boolean requireAttentionEnabled = false;
             for (int i = 0; i < features.length; i++) {
-                if (features[i] == FaceManager.FEATURE_REQUIRE_ATTENTION) {
+                if (features[i] == FEATURE_REQUIRE_ATTENTION) {
                     requireAttentionEnabled = featureState[i];
                 }
             }
@@ -98,7 +100,7 @@
         }
         // Set to disabled until we know the true value.
         mPreference.setEnabled(false);
-        mFaceManager.getFeature(getUserId(), FaceManager.FEATURE_REQUIRE_ATTENTION,
+        mFaceManager.getFeature(getUserId(), FEATURE_REQUIRE_ATTENTION,
                 mGetFeatureCallback);
 
         // Ideally returns a cached value.
@@ -111,8 +113,8 @@
         mPreference.setEnabled(false);
         mPreference.setChecked(isChecked);
 
-        mFaceManager.setFeature(getUserId(), FaceManager.FEATURE_REQUIRE_ATTENTION, isChecked,
-                mToken, mSetFeatureCallback);
+        mFaceManager.setFeature(getUserId(), FEATURE_REQUIRE_ATTENTION,
+                isChecked, mToken, mSetFeatureCallback);
         return true;
     }
 
diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
index dd30e69..f63b649 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProvider.java
@@ -151,4 +151,7 @@
 
     /** Whether the app optimization mode is valid to restore */
     boolean isValidToRestoreOptimizationMode(ArrayMap<String, String> deviceInfoMap);
+
+    /** Whether the device is under the battery defender mode */
+    boolean isBatteryDefend(BatteryInfo info);
 }
diff --git a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
index 5c66dbc..cc6659a 100644
--- a/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
+++ b/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImpl.java
@@ -235,4 +235,9 @@
     public boolean isValidToRestoreOptimizationMode(ArrayMap<String, String> deviceInfoMap) {
         return false;
     }
+
+    @Override
+    public boolean isBatteryDefend(BatteryInfo info) {
+        return info.isBatteryDefender && !isExtraDefend();
+    }
 }
diff --git a/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetector.java b/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetector.java
index db572cd..639b3c7 100644
--- a/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetector.java
+++ b/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetector.java
@@ -36,10 +36,9 @@
     @Override
     public BatteryTip detect() {
         final boolean isBasicBatteryDefend =
-                mBatteryInfo.isBatteryDefender
-                        && !FeatureFactory.getFeatureFactory()
-                                .getPowerUsageFeatureProvider()
-                                .isExtraDefend();
+                FeatureFactory.getFeatureFactory()
+                        .getPowerUsageFeatureProvider()
+                        .isBatteryDefend(mBatteryInfo);
         final int state =
                 isBasicBatteryDefend ? BatteryTip.StateType.NEW : BatteryTip.StateType.INVISIBLE;
         final boolean isPluggedIn = mBatteryInfo.pluggedStatus != 0;
diff --git a/src/com/android/settings/homepage/SettingsHomepageActivity.java b/src/com/android/settings/homepage/SettingsHomepageActivity.java
index a2ca9ae..48d918c 100644
--- a/src/com/android/settings/homepage/SettingsHomepageActivity.java
+++ b/src/com/android/settings/homepage/SettingsHomepageActivity.java
@@ -204,7 +204,7 @@
         if (mIsEmbeddingActivityEnabled) {
             final UserManager um = getSystemService(UserManager.class);
             final UserInfo userInfo = um.getUserInfo(getUserId());
-            if (!userInfo.isMain()) {
+            if (userInfo.isManagedProfile()) {
                 final Intent intent = new Intent(getIntent())
                         .addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT)
                         .putExtra(EXTRA_USER_HANDLE, getUser())
diff --git a/src/com/android/settings/network/EraseEuiccDataController.java b/src/com/android/settings/network/EraseEuiccDataController.java
index 4e89da0..a12d853 100644
--- a/src/com/android/settings/network/EraseEuiccDataController.java
+++ b/src/com/android/settings/network/EraseEuiccDataController.java
@@ -50,7 +50,7 @@
         if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) {
             return false;
         }
-        if (SubscriptionUtil.shouldShowRacDialog(mContext)) {
+        if (SubscriptionUtil.shouldShowRacDialogWhenErasingAllEsims(mContext)) {
             EuiccRacConnectivityDialogFragment.show(mHostFragment);
         } else {
             EraseEuiccDataDialogFragment.show(mHostFragment);
diff --git a/src/com/android/settings/network/EraseEuiccDataDialogFragment.java b/src/com/android/settings/network/EraseEuiccDataDialogFragment.java
index 01ced4e..b8e18b3 100644
--- a/src/com/android/settings/network/EraseEuiccDataDialogFragment.java
+++ b/src/com/android/settings/network/EraseEuiccDataDialogFragment.java
@@ -33,7 +33,7 @@
 import com.android.settings.R;
 import com.android.settings.core.instrumentation.InstrumentedDialogFragment;
 import com.android.settings.system.ResetDashboardFragment;
-import com.android.settings.wifi.dpp.WifiDppUtils;
+import com.android.settings.network.telephony.MobileNetworkUtils;
 
 public class EraseEuiccDataDialogFragment extends InstrumentedDialogFragment implements
         DialogInterface.OnClickListener {
@@ -78,7 +78,7 @@
 
         if (which == DialogInterface.BUTTON_POSITIVE) {
             Context context = getContext();
-            WifiDppUtils.showLockScreen(context, () -> runAsyncWipe(context));
+            MobileNetworkUtils.showLockScreen(context, () -> runAsyncWipe(context));
         }
     }
 
diff --git a/src/com/android/settings/network/SatelliteRepository.kt b/src/com/android/settings/network/SatelliteRepository.kt
index cca502a..565fbf3 100644
--- a/src/com/android/settings/network/SatelliteRepository.kt
+++ b/src/com/android/settings/network/SatelliteRepository.kt
@@ -33,6 +33,7 @@
 import kotlinx.coroutines.flow.callbackFlow
 import kotlinx.coroutines.flow.flowOf
 import java.util.concurrent.Executor
+import kotlinx.coroutines.flow.flowOn
 
 /**
  * A repository class for interacting with the SatelliteManager API.
@@ -82,6 +83,8 @@
      *         `false` otherwise.
      */
     fun requestIsSessionStarted(executor: Executor): ListenableFuture<Boolean> {
+        isSessionStarted?.let { return immediateFuture(it) }
+
         val satelliteManager: SatelliteManager? =
             context.getSystemService(SatelliteManager::class.java)
         if (satelliteManager == null) {
@@ -110,13 +113,13 @@
     }
 
     /**
-     * Provides a Flow that emits the enabled state of the satellite modem. Updates are triggered
+     * Provides a Flow that emits the session state of the satellite modem. Updates are triggered
      * when the modem state changes.
      *
      * @param defaultDispatcher The CoroutineDispatcher to use (Defaults to `Dispatchers.Default`).
-     * @return A Flow emitting `true` when the modem is enabled and `false` otherwise.
+     * @return A Flow emitting `true` when the session is started and `false` otherwise.
      */
-    fun getIsModemEnabledFlow(
+    fun getIsSessionStartedFlow(
         defaultDispatcher: CoroutineDispatcher = Dispatchers.Default,
     ): Flow<Boolean> {
         val satelliteManager: SatelliteManager? =
@@ -128,46 +131,27 @@
 
         return callbackFlow {
             val callback = SatelliteModemStateCallback { state ->
-                val isEnabled = convertSatelliteModemStateToEnabledState(state)
-                Log.i(TAG, "Satellite modem state changed: state=$state, isEnabled=$isEnabled")
-                trySend(isEnabled)
+                val isSessionStarted = isSatelliteSessionStarted(state)
+                Log.i(TAG, "Satellite modem state changed: state=$state"
+                    + ", isSessionStarted=$isSessionStarted")
+                trySend(isSessionStarted)
             }
 
-            val result = satelliteManager.registerForModemStateChanged(
+            val registerResult = satelliteManager.registerForModemStateChanged(
                 defaultDispatcher.asExecutor(),
                 callback
             )
-            Log.i(TAG, "Call registerForModemStateChanged: result=$result")
+
+            if (registerResult != SatelliteManager.SATELLITE_RESULT_SUCCESS) {
+                // If the registration failed (e.g., device doesn't support satellite),
+                // SatelliteManager will not emit the current state by callback.
+                // We send `false` value by ourself to make sure the flow has initial value.
+                Log.w(TAG, "Failed to register for satellite modem state change: $registerResult")
+                trySend(false)
+            }
 
             awaitClose { satelliteManager.unregisterForModemStateChanged(callback) }
-        }
-    }
-
-    /**
-     * Converts a [SatelliteManager.SatelliteModemState] to a boolean representing whether the modem
-     * is enabled.
-     *
-     * @param state The SatelliteModemState provided by the SatelliteManager.
-     * @return `true` if the modem is enabled, `false` otherwise.
-     */
-    @VisibleForTesting
-    fun convertSatelliteModemStateToEnabledState(
-        @SatelliteManager.SatelliteModemState state: Int,
-    ): Boolean {
-        // Mapping table based on logic from b/315928920#comment24
-        return when (state) {
-            SatelliteManager.SATELLITE_MODEM_STATE_IDLE,
-            SatelliteManager.SATELLITE_MODEM_STATE_LISTENING,
-            SatelliteManager.SATELLITE_MODEM_STATE_DATAGRAM_TRANSFERRING,
-            SatelliteManager.SATELLITE_MODEM_STATE_DATAGRAM_RETRYING,
-            SatelliteManager.SATELLITE_MODEM_STATE_NOT_CONNECTED,
-            SatelliteManager.SATELLITE_MODEM_STATE_CONNECTED -> true
-            else -> false
-        }
-    }
-
-    companion object {
-        private const val TAG: String = "SatelliteRepository"
+        }.flowOn(Dispatchers.Default)
     }
 
     /**
@@ -184,4 +168,15 @@
             else -> true
         }
     }
+
+    companion object {
+        private const val TAG: String = "SatelliteRepository"
+
+        private var isSessionStarted: Boolean? = null
+
+        @VisibleForTesting
+        fun setIsSessionStartedForTesting(isEnabled: Boolean) {
+            this.isSessionStarted = isEnabled
+        }
+    }
 }
diff --git a/src/com/android/settings/network/SubscriptionUtil.java b/src/com/android/settings/network/SubscriptionUtil.java
index 682d154..6b2a8d3 100644
--- a/src/com/android/settings/network/SubscriptionUtil.java
+++ b/src/com/android/settings/network/SubscriptionUtil.java
@@ -543,9 +543,7 @@
             return;
         }
 
-        if (isCarrierRac(context, carrierId)
-                && (!isConnectedToWifi(context)
-                        || isConnectedToMobileDataWithDifferentSubId(context, subId))) {
+        if (shouldShowRacDialogWhenErasingEsim(context, subId, carrierId)) {
             context.startActivity(EuiccRacConnectivityDialogActivity.getIntent(context, subId));
         } else {
             context.startActivity(DeleteEuiccSubscriptionDialogActivity.getIntent(context, subId));
@@ -884,19 +882,36 @@
     }
 
     /**
-     * Check if warning dialog should be presented when erasing all eSIMS.
+     * Check if warning dialog should be presented when erasing all eSIMs.
      *
      * @param context Context to check if any sim carrier use RAC and device Wi-Fi connection.
      * @return {@code true} if dialog should be presented to the user.
      */
-    public static boolean shouldShowRacDialog(@NonNull Context context) {
+    public static boolean shouldShowRacDialogWhenErasingAllEsims(@NonNull Context context) {
         if (sEnableRacDialogForTesting != null) {
             return sEnableRacDialogForTesting;
         }
+
         return !isConnectedToWifi(context) && hasSubscriptionWithRacCarrier(context);
     }
 
     /**
+     * Check if warning dialog should be presented when erasing eSIM.
+     *
+     * @param context Context to check if any sim carrier use RAC and device Wi-Fi connection.
+     * @param subId Subscription ID for the single eSIM.
+     * @param carrierId Carrier ID for the single eSIM.
+     * @return {@code true} if dialog should be presented to the user.
+     */
+    @VisibleForTesting
+    static boolean shouldShowRacDialogWhenErasingEsim(
+            @NonNull Context context, int subId, int carrierId) {
+        return isCarrierRac(context, carrierId)
+                && !isConnectedToWifi(context)
+                && !isConnectedToMobileDataWithDifferentSubId(context, subId);
+    }
+
+    /**
      * Retrieves NetworkCapabilities for the active network.
      *
      * @param context context
diff --git a/src/com/android/settings/network/telephony/MobileNetworkSwitchController.kt b/src/com/android/settings/network/telephony/MobileNetworkSwitchController.kt
index 41cef50..447909e 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkSwitchController.kt
+++ b/src/com/android/settings/network/telephony/MobileNetworkSwitchController.kt
@@ -59,7 +59,7 @@
         val changeable by remember {
             combine(
                 context.callStateFlow(subId).map { it == TelephonyManager.CALL_STATE_IDLE },
-                satelliteRepository.getIsModemEnabledFlow()
+                satelliteRepository.getIsSessionStartedFlow()
             ) { isCallStateIdle, isSatelliteModemEnabled ->
                 isCallStateIdle && !isSatelliteModemEnabled
             }
diff --git a/src/com/android/settings/privatespace/PrivateSpaceSetLockFragment.java b/src/com/android/settings/privatespace/PrivateSpaceSetLockFragment.java
index 830b45e..28ac97f 100644
--- a/src/com/android/settings/privatespace/PrivateSpaceSetLockFragment.java
+++ b/src/com/android/settings/privatespace/PrivateSpaceSetLockFragment.java
@@ -16,6 +16,8 @@
 
 package com.android.settings.privatespace;
 
+import static android.text.Layout.BREAK_STRATEGY_SIMPLE;
+
 import static com.android.settings.privatespace.PrivateSpaceSetupActivity.EXTRA_ACTION_TYPE;
 import static com.android.settings.privatespace.PrivateSpaceSetupActivity.SET_LOCK_ACTION;
 
@@ -47,6 +49,7 @@
  */
 public class PrivateSpaceSetLockFragment extends InstrumentedFragment {
     private static final String TAG = "PrivateSpaceSetLockFrag";
+    private static final int HEADER_TEXT_MAX_LINES = 4;
 
     @Override
     public View onCreateView(
@@ -60,6 +63,8 @@
         GlifLayout rootView =
                 (GlifLayout)
                         inflater.inflate(R.layout.private_space_setlock_screen, container, false);
+        rootView.getHeaderTextView().setBreakStrategy(BREAK_STRATEGY_SIMPLE);
+        rootView.getHeaderTextView().setMaxLines(HEADER_TEXT_MAX_LINES);
         final FooterBarMixin mixin = rootView.getMixin(FooterBarMixin.class);
         mixin.setPrimaryButton(
                 new FooterButton.Builder(getContext())
diff --git a/src/com/android/settings/sim/PrimarySubscriptionListChangedService.kt b/src/com/android/settings/sim/PrimarySubscriptionListChangedService.kt
new file mode 100644
index 0000000..51a910f
--- /dev/null
+++ b/src/com/android/settings/sim/PrimarySubscriptionListChangedService.kt
@@ -0,0 +1,82 @@
+/*
+ * Copyright (C) 2024 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.settings.sim
+
+import android.app.job.JobInfo
+import android.app.job.JobParameters
+import android.app.job.JobScheduler
+import android.app.job.JobService
+import android.content.ComponentName
+import android.content.Context
+import android.content.Intent
+import android.util.Log
+import com.android.settings.R
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.Job
+import kotlinx.coroutines.SupervisorJob
+import kotlinx.coroutines.launch
+
+/** A JobService work on primary subscription list changed. */
+class PrimarySubscriptionListChangedService : JobService() {
+    private var job: Job? = null
+
+    override fun onStartJob(params: JobParameters): Boolean {
+        job = CoroutineScope(Dispatchers.Default + SupervisorJob()).launch {
+            try {
+                val intent = Intent()
+                intent.putExtras(params.transientExtras)
+                SimSelectNotification.onPrimarySubscriptionListChanged(
+                    this@PrimarySubscriptionListChangedService,
+                    intent
+                )
+            } catch (exception: Throwable) {
+                Log.e(TAG, "Exception running job", exception)
+            }
+            jobFinished(params, false)
+        }
+        return true
+    }
+
+    override fun onStopJob(params: JobParameters): Boolean {
+        job?.cancel()
+        return false
+    }
+
+    companion object {
+        private const val TAG = "PrimarySubscriptionListChangedService"
+
+        /**
+         * Schedules a service to work on primary subscription changed.
+         *
+         * @param context is the caller context.
+         */
+        @JvmStatic
+        fun scheduleJob(context: Context, intent: Intent) {
+            val component =
+                ComponentName(context, PrimarySubscriptionListChangedService::class.java)
+            val jobScheduler = context.getSystemService(JobScheduler::class.java)!!
+
+            val jobInfoBuilder =
+                JobInfo.Builder(R.integer.primary_subscription_list_changed, component)
+            intent.extras?.let {
+                jobInfoBuilder.setTransientExtras(it)
+            }
+            jobScheduler.schedule(jobInfoBuilder.build())
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/settings/sim/SimSelectNotification.java b/src/com/android/settings/sim/SimSelectNotification.java
index 2a05105..3d9d41c 100644
--- a/src/com/android/settings/sim/SimSelectNotification.java
+++ b/src/com/android/settings/sim/SimSelectNotification.java
@@ -48,13 +48,28 @@
 import android.telephony.TelephonyManager;
 import android.util.Log;
 
+import androidx.annotation.NonNull;
+import androidx.annotation.WorkerThread;
+
 import com.android.internal.annotations.VisibleForTesting;
 import com.android.settings.HelpTrampoline;
 import com.android.settings.R;
+import com.android.settings.network.SatelliteRepository;
 import com.android.settings.network.SubscriptionUtil;
 
+import com.google.common.util.concurrent.ListenableFuture;
+
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
+import java.util.concurrent.TimeoutException;
+
 public class SimSelectNotification extends BroadcastReceiver {
     private static final String TAG = "SimSelectNotification";
+
+    private static final int DEFAULT_TIMEOUT_MS = 1000;
+
     @VisibleForTesting
     public static final int SIM_SELECT_NOTIFICATION_ID = 1;
     @VisibleForTesting
@@ -89,7 +104,7 @@
 
         switch (action) {
             case TelephonyManager.ACTION_PRIMARY_SUBSCRIPTION_LIST_CHANGED:
-                onPrimarySubscriptionListChanged(context, intent);
+                PrimarySubscriptionListChangedService.scheduleJob(context, intent);
                 break;
             case Settings.ACTION_ENABLE_MMS_DATA_REQUEST:
                 onEnableMmsDataRequest(context, intent);
@@ -149,12 +164,41 @@
         createEnableMmsNotification(context, notificationTitle, notificationSummary, subId);
     }
 
-    private void onPrimarySubscriptionListChanged(Context context, Intent intent) {
-        startSimSelectDialogIfNeeded(context, intent);
-        sendSimCombinationWarningIfNeeded(context, intent);
+    /**
+     * Handles changes to the primary subscription list, performing actions only
+     * if the device is not currently in a satellite session. This method is
+     * intended to be executed on a worker thread.
+     *
+     * @param context The application context
+     * @param intent  The intent signaling a primary subscription change
+     */
+    @WorkerThread
+    public static void onPrimarySubscriptionListChanged(@NonNull Context context,
+            @NonNull Intent intent) {
+        Log.d(TAG, "Checking satellite enabled status");
+        Executor executor = Executors.newSingleThreadExecutor();
+        ListenableFuture<Boolean> isSatelliteSessionStartedFuture =
+                new SatelliteRepository(context).requestIsSessionStarted(executor);
+        boolean isSatelliteSessionStarted = false;
+        try {
+            isSatelliteSessionStarted =
+                    isSatelliteSessionStartedFuture.get(DEFAULT_TIMEOUT_MS, TimeUnit.MILLISECONDS);
+        } catch (InterruptedException | ExecutionException | TimeoutException e) {
+            Log.w(TAG, "Can't get satellite session status", e);
+        } finally {
+            if (isSatelliteSessionStarted) {
+                Log.i(TAG, "Device is in a satellite session.g Unable to handle primary"
+                        + " subscription list changes");
+            } else {
+                Log.i(TAG, "Device is not in a satellite session. Handle primary"
+                        + " subscription list changes");
+                startSimSelectDialogIfNeeded(context, intent);
+                sendSimCombinationWarningIfNeeded(context, intent);
+            }
+        }
     }
 
-    private void startSimSelectDialogIfNeeded(Context context, Intent intent) {
+    private static void startSimSelectDialogIfNeeded(Context context, Intent intent) {
         int dialogType = intent.getIntExtra(EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE,
                 EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_NONE);
 
@@ -194,7 +238,7 @@
         }
     }
 
-    private void sendSimCombinationWarningIfNeeded(Context context, Intent intent) {
+    private static void sendSimCombinationWarningIfNeeded(Context context, Intent intent) {
         final int warningType = intent.getIntExtra(EXTRA_SIM_COMBINATION_WARNING_TYPE,
                 EXTRA_SIM_COMBINATION_WARNING_TYPE_NONE);
 
@@ -207,7 +251,7 @@
         }
     }
 
-    private void createSimSelectNotification(Context context){
+    private static void createSimSelectNotification(Context context) {
         final Resources resources = context.getResources();
 
         NotificationChannel notificationChannel = new NotificationChannel(
@@ -217,11 +261,11 @@
 
         Notification.Builder builder =
                 new Notification.Builder(context, SIM_SELECT_NOTIFICATION_CHANNEL)
-                .setSmallIcon(R.drawable.ic_sim_alert)
-                .setColor(context.getColor(R.color.sim_noitification))
-                .setContentTitle(resources.getText(R.string.sim_notification_title))
-                .setContentText(resources.getText(R.string.sim_notification_summary))
-                .setAutoCancel(true);
+                        .setSmallIcon(R.drawable.ic_sim_alert)
+                        .setColor(context.getColor(R.color.sim_noitification))
+                        .setContentTitle(resources.getText(R.string.sim_notification_title))
+                        .setContentText(resources.getText(R.string.sim_notification_summary))
+                        .setAutoCancel(true);
         Intent resultIntent = new Intent(Settings.ACTION_WIRELESS_SETTINGS);
         resultIntent.setPackage(SETTINGS_PACKAGE_NAME);
         resultIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
@@ -279,7 +323,7 @@
         notificationManager.cancel(ENABLE_MMS_NOTIFICATION_ID);
     }
 
-    private void createSimCombinationWarningNotification(Context context, Intent intent){
+    private static void createSimCombinationWarningNotification(Context context, Intent intent) {
         final Resources resources = context.getResources();
         final String simNames = intent.getStringExtra(EXTRA_SIM_COMBINATION_NAMES);
 
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java
index 3158688..354afd0 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/PowerUsageFeatureProviderImplTest.java
@@ -18,6 +18,8 @@
 
 import static com.google.common.truth.Truth.assertThat;
 
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 
 import android.content.Context;
@@ -48,6 +50,8 @@
     private Context mContext;
 
     @Mock private PackageManager mPackageManager;
+    @Mock private BatteryInfo mBatteryInfo;
+
     private PowerUsageFeatureProviderImpl mPowerFeatureProvider;
 
     @Before
@@ -55,73 +59,74 @@
         MockitoAnnotations.initMocks(this);
 
         when(mContext.getApplicationContext()).thenReturn(mContext);
-        mPowerFeatureProvider = new PowerUsageFeatureProviderImpl(mContext);
+        mPowerFeatureProvider = spy(new PowerUsageFeatureProviderImpl(mContext));
         when(mPackageManager.getPackagesForUid(UID_CALENDAR)).thenReturn(PACKAGES_CALENDAR);
         when(mPackageManager.getPackagesForUid(UID_MEDIA)).thenReturn(PACKAGES_MEDIA);
         when(mPackageManager.getPackagesForUid(UID_SYSTEMUI)).thenReturn(PACKAGES_SYSTEMUI);
         mPowerFeatureProvider.mPackageManager = mPackageManager;
+        mBatteryInfo.discharging = false;
     }
 
     @Test
-    public void testIsBatteryUsageEnabled_returnFalse() {
+    public void isBatteryUsageEnabled_returnFalse() {
         assertThat(mPowerFeatureProvider.isBatteryUsageEnabled()).isTrue();
     }
 
     @Test
-    public void testIsBatteryTipsEnabled_returnFalse() {
+    public void isBatteryTipsEnabled_returnFalse() {
         assertThat(mPowerFeatureProvider.isBatteryTipsEnabled()).isFalse();
     }
 
     @Test
-    public void testIsAppOptimizationModeLogged_returnFalse() {
+    public void isAppOptimizationModeLogged_returnFalse() {
         assertThat(mPowerFeatureProvider.isAppOptimizationModeLogged()).isFalse();
     }
 
     @Test
-    public void testGetBatteryUsageListConsumePowerThreshold_return0() {
+    public void getBatteryUsageListConsumePowerThreshold_return0() {
         assertThat(mPowerFeatureProvider.getBatteryUsageListConsumePowerThreshold()).isEqualTo(0.0);
     }
 
     @Test
-    public void testIsTypeSystem_uidRoot_returnTrue() {
+    public void isTypeSystem_uidRoot_returnTrue() {
         assertThat(mPowerFeatureProvider.isTypeSystem(Process.ROOT_UID, null)).isTrue();
     }
 
     @Test
-    public void testIsTypeSystem_uidSystem_returnTrue() {
+    public void isTypeSystem_uidSystem_returnTrue() {
         assertThat(mPowerFeatureProvider.isTypeSystem(Process.SYSTEM_UID, null)).isTrue();
     }
 
     @Test
-    public void testIsTypeSystem_uidMedia_returnTrue() {
+    public void isTypeSystem_uidMedia_returnTrue() {
         assertThat(mPowerFeatureProvider.isTypeSystem(Process.MEDIA_UID, null)).isTrue();
     }
 
     @Test
     @Ignore
-    public void testIsTypeSystem_appCalendar_returnTrue() {
+    public void isTypeSystem_appCalendar_returnTrue() {
         assertThat(mPowerFeatureProvider.isTypeSystem(UID_CALENDAR, null)).isTrue();
     }
 
     @Test
     @Ignore
-    public void testIsTypeSystem_appMedia_returnTrue() {
+    public void isTypeSystem_appMedia_returnTrue() {
         assertThat(mPowerFeatureProvider.isTypeSystem(UID_MEDIA, null)).isTrue();
     }
 
     @Test
     @Ignore
-    public void testIsTypeSystem_appSystemUi_returnTrue() {
+    public void isTypeSystem_appSystemUi_returnTrue() {
         assertThat(mPowerFeatureProvider.isTypeSystem(UID_SYSTEMUI, null)).isTrue();
     }
 
     @Test
-    public void testIsTypeSystem_uidOther_returnFalse() {
+    public void isTypeSystem_uidOther_returnFalse() {
         assertThat(mPowerFeatureProvider.isTypeSystem(UID_OTHER, null)).isFalse();
     }
 
     @Test
-    public void testIsSmartBatterySupported_smartBatterySupported_returnTrue() {
+    public void isSmartBatterySupported_smartBatterySupported_returnTrue() {
         when(mContext.getResources()
                         .getBoolean(com.android.internal.R.bool.config_smart_battery_available))
                 .thenReturn(true);
@@ -130,7 +135,7 @@
     }
 
     @Test
-    public void testIsSmartBatterySupported_smartBatteryNotSupported_returnFalse() {
+    public void isSmartBatterySupported_smartBatteryNotSupported_returnFalse() {
         when(mContext.getResources()
                         .getBoolean(com.android.internal.R.bool.config_smart_battery_available))
                 .thenReturn(false);
@@ -139,17 +144,49 @@
     }
 
     @Test
-    public void testIsAdaptiveChargingSupported_returnFalse() {
+    public void isAdaptiveChargingSupported_returnFalse() {
         assertThat(mPowerFeatureProvider.isAdaptiveChargingSupported()).isFalse();
     }
 
     @Test
-    public void testGetResumeChargeIntentWithoutDockDefender_returnNull() {
+    public void getResumeChargeIntentWithoutDockDefender_returnNull() {
         assertThat(mPowerFeatureProvider.getResumeChargeIntent(false)).isNull();
     }
 
     @Test
-    public void testGetResumeChargeIntentWithDockDefender_returnNull() {
+    public void getResumeChargeIntentWithDockDefender_returnNull() {
         assertThat(mPowerFeatureProvider.getResumeChargeIntent(true)).isNull();
     }
+
+    @Test
+    public void isBatteryDefend_defenderModeAndExtraDefendAreFalse_returnFalse() {
+        mBatteryInfo.isBatteryDefender = false;
+        doReturn(false).when(mPowerFeatureProvider).isExtraDefend();
+
+        assertThat(mPowerFeatureProvider.isBatteryDefend(mBatteryInfo)).isFalse();
+    }
+
+    @Test
+    public void isBatteryDefend_defenderModeIsFalse_returnFalse() {
+        mBatteryInfo.isBatteryDefender = false;
+        doReturn(true).when(mPowerFeatureProvider).isExtraDefend();
+
+        assertThat(mPowerFeatureProvider.isBatteryDefend(mBatteryInfo)).isFalse();
+    }
+
+    @Test
+    public void isBatteryDefend_defenderModeAndExtraDefendAreTrue_returnFalse() {
+        mBatteryInfo.isBatteryDefender = true;
+        doReturn(true).when(mPowerFeatureProvider).isExtraDefend();
+
+        assertThat(mPowerFeatureProvider.isBatteryDefend(mBatteryInfo)).isFalse();
+    }
+
+    @Test
+    public void isBatteryDefend_extraDefendIsFalse_returnTrue() {
+        mBatteryInfo.isBatteryDefender = true;
+        doReturn(false).when(mPowerFeatureProvider).isExtraDefend();
+
+        assertThat(mPowerFeatureProvider.isBatteryDefend(mBatteryInfo)).isTrue();
+    }
 }
diff --git a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetectorTest.java b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetectorTest.java
index 0a63ba2..ab1ceb5 100644
--- a/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetectorTest.java
+++ b/tests/robotests/src/com/android/settings/fuelgauge/batterytip/detectors/BatteryDefenderDetectorTest.java
@@ -40,53 +40,32 @@
 
     @Mock private BatteryInfo mBatteryInfo;
     private BatteryDefenderDetector mBatteryDefenderDetector;
-    private Context mContext;
 
     private FakeFeatureFactory mFakeFeatureFactory;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
-
-        mBatteryInfo.discharging = false;
-
-        mContext = ApplicationProvider.getApplicationContext();
-
-        mBatteryDefenderDetector = new BatteryDefenderDetector(mBatteryInfo, mContext);
-
+        final Context context = ApplicationProvider.getApplicationContext();
+        mBatteryDefenderDetector = new BatteryDefenderDetector(mBatteryInfo, context);
         mFakeFeatureFactory = FakeFeatureFactory.setupForTest();
     }
 
     @Test
-    public void testDetect_notDefenderNotExtraDefend_tipInvisible() {
-        mBatteryInfo.isBatteryDefender = false;
-        when(mFakeFeatureFactory.powerUsageFeatureProvider.isExtraDefend()).thenReturn(false);
+    public void detect_notBatteryDefend_tipInvisible() {
+        when(mFakeFeatureFactory.powerUsageFeatureProvider.isBatteryDefend(mBatteryInfo))
+                .thenReturn(false);
 
         assertThat(mBatteryDefenderDetector.detect().isVisible()).isFalse();
     }
 
     @Test
-    public void testDetect_notDefenderIsExtraDefend_tipInvisible() {
-        mBatteryInfo.isBatteryDefender = false;
-        when(mFakeFeatureFactory.powerUsageFeatureProvider.isExtraDefend()).thenReturn(true);
-
-        assertThat(mBatteryDefenderDetector.detect().isVisible()).isFalse();
-    }
-
-    @Test
-    public void testDetect_isDefenderIsExtraDefend_tipInvisible() {
-        mBatteryInfo.isBatteryDefender = false;
-        when(mFakeFeatureFactory.powerUsageFeatureProvider.isExtraDefend()).thenReturn(true);
-
-        assertThat(mBatteryDefenderDetector.detect().isVisible()).isFalse();
-    }
-
-    @Test
-    public void testDetect_isDefenderNotExtraDefend_tipNew() {
-        mBatteryInfo.isBatteryDefender = true;
-        when(mFakeFeatureFactory.powerUsageFeatureProvider.isExtraDefend()).thenReturn(false);
+    public void detect_isBatteryDefend_tipNew() {
+        when(mFakeFeatureFactory.powerUsageFeatureProvider.isBatteryDefend(mBatteryInfo))
+                .thenReturn(true);
 
         assertThat(mBatteryDefenderDetector.detect().getState())
                 .isEqualTo(BatteryTip.StateType.NEW);
+        assertThat(mBatteryDefenderDetector.detect().isVisible()).isTrue();
     }
 }
diff --git a/tests/robotests/src/com/android/settings/network/SatelliteRepositoryTest.kt b/tests/robotests/src/com/android/settings/network/SatelliteRepositoryTest.kt
index 3c947ab..62fd10a 100644
--- a/tests/robotests/src/com/android/settings/network/SatelliteRepositoryTest.kt
+++ b/tests/robotests/src/com/android/settings/network/SatelliteRepositoryTest.kt
@@ -120,7 +120,7 @@
     @Test
     fun requestIsSessionStarted_registerFailed() = runBlocking {
         `when`(mockSatelliteManager.registerForModemStateChanged(any(), any())
-        ).thenAnswer { invocation ->
+        ).thenAnswer {
             SatelliteManager.SATELLITE_RESULT_ERROR
         }
 
@@ -187,7 +187,7 @@
     }
 
     @Test
-    fun getIsModemEnabledFlow_isSatelliteEnabledState() = runBlocking {
+    fun getIsSessionStartedFlow_isSatelliteEnabledState() = runBlocking {
         `when`(
             mockSatelliteManager.registerForModemStateChanged(
                 any(),
@@ -199,13 +199,13 @@
             SatelliteManager.SATELLITE_RESULT_SUCCESS
         }
 
-        val flow = repository.getIsModemEnabledFlow()
+        val flow = repository.getIsSessionStartedFlow()
 
         assertThat(flow.first()).isTrue()
     }
 
     @Test
-    fun getIsModemEnabledFlow_isSatelliteDisabledState() = runBlocking {
+    fun getIsSessionStartedFlow_isSatelliteDisabledState() = runBlocking {
         `when`(
             mockSatelliteManager.registerForModemStateChanged(
                 any(),
@@ -217,16 +217,28 @@
             SatelliteManager.SATELLITE_RESULT_SUCCESS
         }
 
-        val flow = repository.getIsModemEnabledFlow()
+        val flow = repository.getIsSessionStartedFlow()
 
         assertThat(flow.first()).isFalse()
     }
 
     @Test
-    fun getIsModemEnabledFlow_nullSatelliteManager() = runBlocking {
+    fun getIsSessionStartedFlow_nullSatelliteManager() = runBlocking {
         `when`(spyContext.getSystemService(SatelliteManager::class.java)).thenReturn(null)
 
-        val flow = repository.getIsModemEnabledFlow()
+        val flow = repository.getIsSessionStartedFlow()
+        assertThat(flow.first()).isFalse()
+    }
+
+    @Test
+    fun getIsSessionStartedFlow_registerFailed() = runBlocking {
+        `when`(mockSatelliteManager.registerForModemStateChanged(any(), any())
+        ).thenAnswer {
+            SatelliteManager.SATELLITE_RESULT_ERROR
+        }
+
+        val flow = repository.getIsSessionStartedFlow()
+
         assertThat(flow.first()).isFalse()
     }
 }
\ No newline at end of file
diff --git a/tests/robotests/src/com/android/settings/network/SubscriptionUtilRoboTest.java b/tests/robotests/src/com/android/settings/network/SubscriptionUtilRoboTest.java
index ae504be..a6c9ef6 100644
--- a/tests/robotests/src/com/android/settings/network/SubscriptionUtilRoboTest.java
+++ b/tests/robotests/src/com/android/settings/network/SubscriptionUtilRoboTest.java
@@ -19,11 +19,13 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
 import static org.robolectric.Shadows.shadowOf;
 
 import android.content.Context;
+import android.content.res.Resources;
 import android.net.ConnectivityManager;
 import android.net.NetworkCapabilities;
 import android.telephony.SubscriptionManager;
@@ -42,6 +44,8 @@
 public class SubscriptionUtilRoboTest {
     private static final int SUBID_1 = 1;
     private static final int SUBID_2 = 2;
+    private static final int RAC_CARRIER_ID = 1;
+    private static final int CARRIER_ID = 2;
 
     private Context mContext;
     private NetworkCapabilities mNetworkCapabilities;
@@ -49,13 +53,16 @@
 
     @Mock
     private ConnectivityManager mConnectivityManager;
+    @Mock private Resources mResources;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = spy(ApplicationProvider.getApplicationContext());
         mShadowSubscriptionManager = shadowOf(mContext.getSystemService(SubscriptionManager.class));
+        when(mContext.getResources()).thenReturn(mResources);
         when(mContext.getSystemService(ConnectivityManager.class)).thenReturn(mConnectivityManager);
+        when(mResources.getIntArray(anyInt())).thenReturn(new int[] {RAC_CARRIER_ID});
     }
 
     @Test
@@ -74,6 +81,58 @@
         assertFalse(SubscriptionUtil.isConnectedToMobileDataWithDifferentSubId(mContext, SUBID_1));
     }
 
+    @Test
+    public void carrierIsNotRAC_showRacDialogForEsim_returnFalse() {
+        assertFalse(
+                SubscriptionUtil.shouldShowRacDialogWhenErasingEsim(mContext, SUBID_1, CARRIER_ID));
+    }
+
+    @Test
+    public void carrierIsNotRAC_noWifi_noDataConnection_showRacDialogForEsimreturnFalse() {
+        addNetworkTransportType(NetworkCapabilities.TRANSPORT_BLUETOOTH);
+
+        assertFalse(
+                SubscriptionUtil.shouldShowRacDialogWhenErasingEsim(mContext, SUBID_1, CARRIER_ID));
+    }
+
+    @Test
+    public void carrierIsRAC_isConnectedToDataOnSubId2_showRacDialogForEsim_returnFalse() {
+        addNetworkTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
+        mShadowSubscriptionManager.setActiveDataSubscriptionId(SUBID_2);
+
+        assertFalse(
+                SubscriptionUtil.shouldShowRacDialogWhenErasingEsim(
+                        mContext, SUBID_1, RAC_CARRIER_ID));
+    }
+
+    @Test
+    public void carrierIsRAC_hasWifi_showRacDialogForEsim_returnFalse() {
+        addNetworkTransportType(NetworkCapabilities.TRANSPORT_WIFI);
+
+        assertFalse(
+                SubscriptionUtil.shouldShowRacDialogWhenErasingEsim(
+                        mContext, SUBID_1, RAC_CARRIER_ID));
+    }
+
+    @Test
+    public void carrierIsRAC_isConnectedToDataOnSubId1_noWifi_showRacDialogForEsim_returnTrue() {
+        addNetworkTransportType(NetworkCapabilities.TRANSPORT_CELLULAR);
+        mShadowSubscriptionManager.setActiveDataSubscriptionId(SUBID_1);
+
+        assertTrue(
+                SubscriptionUtil.shouldShowRacDialogWhenErasingEsim(
+                        mContext, SUBID_1, RAC_CARRIER_ID));
+    }
+
+    @Test
+    public void carrierIsRAC_noData_noWifi_showRacDialogForEsim_returnTrue() {
+        addNetworkTransportType(NetworkCapabilities.TRANSPORT_BLUETOOTH);
+
+        assertTrue(
+                SubscriptionUtil.shouldShowRacDialogWhenErasingEsim(
+                        mContext, SUBID_1, RAC_CARRIER_ID));
+    }
+
     private void addNetworkTransportType(int networkType) {
         mNetworkCapabilities =
                 new NetworkCapabilities.Builder().addTransportType(networkType).build();
diff --git a/tests/robotests/src/com/android/settings/sim/PrimarySubscriptionListChangedServiceTest.java b/tests/robotests/src/com/android/settings/sim/PrimarySubscriptionListChangedServiceTest.java
new file mode 100644
index 0000000..3e868e4
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/sim/PrimarySubscriptionListChangedServiceTest.java
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2024 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.settings.sim;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.ArgumentMatchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.app.job.JobInfo;
+import android.app.job.JobScheduler;
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+
+import androidx.test.core.app.ApplicationProvider;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.Robolectric;
+import org.robolectric.RobolectricTestRunner;
+
+import java.util.List;
+import java.util.Objects;
+
+@RunWith(RobolectricTestRunner.class)
+public class PrimarySubscriptionListChangedServiceTest {
+
+    @Test
+    public void schedulePrimarySubscriptionChanged_addSchedule_intentPassToJobInfo() {
+        Robolectric.setupService(PrimarySubscriptionListChangedService.class);
+        Context context = ApplicationProvider.getApplicationContext();
+        Intent intent = new Intent();
+        intent.putExtra("int", 1);
+        intent.putExtra("string", "foo");
+
+        PrimarySubscriptionListChangedService.scheduleJob(context, intent);
+
+        List<JobInfo> jobs = Objects.requireNonNull(context.getSystemService(JobScheduler.class))
+                .getAllPendingJobs();
+        assertThat(jobs).hasSize(1);
+        JobInfo job = jobs.get(0);
+        assertThat(job.isPersisted()).isFalse();
+        Bundle bundle = job.getTransientExtras();
+        assertThat(bundle.getInt("int")).isEqualTo(1);
+        assertThat(bundle.getString("string")).isEqualTo("foo");
+    }
+
+    @Test
+    public void schedulePrimarySubscriptionChanged_addSchedule_whenInvoked() {
+        Context context = spy(ApplicationProvider.getApplicationContext());
+        JobScheduler jobScheduler = mock(JobScheduler.class);
+        when(context.getSystemService(JobScheduler.class)).thenReturn(jobScheduler);
+
+        PrimarySubscriptionListChangedService.scheduleJob(context, new Intent());
+
+        verify(jobScheduler).schedule(any());
+    }
+}
diff --git a/tests/robotests/src/com/android/settings/sim/SimSelectNotificationTest.java b/tests/robotests/src/com/android/settings/sim/SimSelectNotificationTest.java
index cbdcf3c..36f6cd4 100644
--- a/tests/robotests/src/com/android/settings/sim/SimSelectNotificationTest.java
+++ b/tests/robotests/src/com/android/settings/sim/SimSelectNotificationTest.java
@@ -63,6 +63,7 @@
 import androidx.test.core.app.ApplicationProvider;
 
 import com.android.settings.R;
+import com.android.settings.network.SatelliteRepository;
 import com.android.settings.network.SubscriptionUtil;
 import com.android.settings.testutils.shadow.ShadowAlertDialogCompat;
 
@@ -141,6 +142,8 @@
         SubscriptionUtil.setActiveSubscriptionsForTesting(Arrays.asList(mSubInfo));
         when(mSubscriptionManager.isActiveSubscriptionId(mSubId)).thenReturn(true);
         when(mSubscriptionManager.getActiveSubscriptionInfo(mSubId)).thenReturn(mSubInfo);
+        SatelliteRepository.Companion.setIsSessionStartedForTesting(false);
+
         when(mSubInfo.getSubscriptionId()).thenReturn(mSubId);
         when(mSubInfo.getDisplayName()).thenReturn(mFakeDisplayName);
         when(mContext.getResources()).thenReturn(mResources);
@@ -219,17 +222,30 @@
         Intent intent = new Intent(TelephonyManager.ACTION_PRIMARY_SUBSCRIPTION_LIST_CHANGED);
 
         // EXTRA_SUB_ID and EXTRA_ENABLE_MMS_DATA_REQUEST_REASON are required.
-        mSimSelectNotification.onReceive(mContext, intent);
+        SimSelectNotification.onPrimarySubscriptionListChanged(mContext, intent);
         verify(mNotificationManager, never()).createNotificationChannel(any());
     }
 
     @Test
+    public void onReceivePrimarySubListChange_isSatelliteEnabled_activityShouldNotStart() {
+        SatelliteRepository.Companion.setIsSessionStartedForTesting(true);
+
+        Intent intent = new Intent(TelephonyManager.ACTION_PRIMARY_SUBSCRIPTION_LIST_CHANGED);
+        intent.putExtra(EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE,
+                EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_DATA);
+
+        SimSelectNotification.onPrimarySubscriptionListChanged(mContext, intent);
+
+        verify(mContext, never()).startActivity(any());
+    }
+
+    @Test
     public void onReceivePrimarySubListChange_WithDataPickExtra_shouldStartActivity() {
         Intent intent = new Intent(TelephonyManager.ACTION_PRIMARY_SUBSCRIPTION_LIST_CHANGED);
         intent.putExtra(EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE,
                 EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_DATA);
 
-        mSimSelectNotification.onReceive(mContext, intent);
+        SimSelectNotification.onPrimarySubscriptionListChanged(mContext, intent);
 
         ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
         verify(mContext).startActivity(intentCaptor.capture());
@@ -252,12 +268,13 @@
         intent.putExtra(EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE,
                 EXTRA_DEFAULT_SUBSCRIPTION_SELECT_TYPE_DISMISS);
 
-        mSimSelectNotification.onReceive(mContext, intent);
+        SimSelectNotification.onPrimarySubscriptionListChanged(mContext, intent);
         clearInvocations(mContext);
 
         // Dismiss.
         verify(mExecutor).execute(any());
     }
+
     @Test
     public void onReceivePrimarySubListChange_DualCdmaWarning_notificationShouldSend() {
         Intent intent = new Intent(TelephonyManager.ACTION_PRIMARY_SUBSCRIPTION_LIST_CHANGED);
@@ -266,7 +283,7 @@
         intent.putExtra(EXTRA_SIM_COMBINATION_WARNING_TYPE,
                 EXTRA_SIM_COMBINATION_WARNING_TYPE_DUAL_CDMA);
 
-        mSimSelectNotification.onReceive(mContext, intent);
+        SimSelectNotification.onPrimarySubscriptionListChanged(mContext, intent);
 
         // Capture the notification channel created and verify its fields.
         ArgumentCaptor<NotificationChannel> nc = ArgumentCaptor.forClass(NotificationChannel.class);
diff --git a/tests/robotests/src/com/android/settings/sound/MediaOutputPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/sound/MediaOutputPreferenceControllerTest.java
index 5dc602a..cd64225 100644
--- a/tests/robotests/src/com/android/settings/sound/MediaOutputPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/sound/MediaOutputPreferenceControllerTest.java
@@ -241,8 +241,6 @@
         mScreen.addPreference(mPreference);
         mController.displayPreference(mScreen);
         mController.setCallback(mAudioSwitchPreferenceCallback);
-
-        mSetFlagsRule.initAllFlagsToReleaseConfigDefault();
     }
 
     @After
diff --git a/tests/robotests/src/com/android/settings/uwb/UwbPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/uwb/UwbPreferenceControllerTest.java
index 23aca51..941aa3f 100644
--- a/tests/robotests/src/com/android/settings/uwb/UwbPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/uwb/UwbPreferenceControllerTest.java
@@ -49,6 +49,7 @@
 import com.android.settings.core.BasePreferenceController;
 
 import org.junit.Before;
+import org.junit.Ignore;
 import org.junit.Rule;
 import org.junit.Test;
 import org.junit.runner.RunWith;
@@ -60,6 +61,7 @@
 
 /** Unit tests for UWB preference toggle. */
 @RunWith(RobolectricTestRunner.class)
+@Ignore("b/337171922")
 public class UwbPreferenceControllerTest {
     private static final String TEST_SUMMARY = "uwb";
     private static final String TEST_AIRPLANE_SUMMARY = "apm_uwb";
diff --git a/tests/robotests/src/com/android/settings/wallpaper/FallbackHomeActivityTest.java b/tests/robotests/src/com/android/settings/wallpaper/FallbackHomeActivityTest.java
index c1debb5..6c656a1 100644
--- a/tests/robotests/src/com/android/settings/wallpaper/FallbackHomeActivityTest.java
+++ b/tests/robotests/src/com/android/settings/wallpaper/FallbackHomeActivityTest.java
@@ -44,7 +44,6 @@
 import org.robolectric.annotation.Config;
 import org.robolectric.annotation.Implementation;
 import org.robolectric.annotation.Implements;
-import org.robolectric.annotation.LooperMode;
 import org.robolectric.shadow.api.Shadow;
 import org.robolectric.shadows.ShadowApplication;
 
@@ -52,7 +51,6 @@
 import java.util.List;
 
 @RunWith(RobolectricTestRunner.class)
-@LooperMode(LooperMode.Mode.LEGACY)
 public class FallbackHomeActivityTest {
     public final MockitoRule mMockitoRule = MockitoJUnit.rule();
 
diff --git a/tests/robotests/src/com/android/settings/wallpaper/WallpaperSuggestionActivityTest.java b/tests/robotests/src/com/android/settings/wallpaper/WallpaperSuggestionActivityTest.java
index dd82714..3f6d785 100644
--- a/tests/robotests/src/com/android/settings/wallpaper/WallpaperSuggestionActivityTest.java
+++ b/tests/robotests/src/com/android/settings/wallpaper/WallpaperSuggestionActivityTest.java
@@ -42,12 +42,10 @@
 import org.robolectric.annotation.Config;
 import org.robolectric.annotation.Implementation;
 import org.robolectric.annotation.Implements;
-import org.robolectric.annotation.LooperMode;
 import org.robolectric.annotation.Resetter;
 import org.robolectric.shadows.ShadowApplication;
 
 @RunWith(RobolectricTestRunner.class)
-@LooperMode(LooperMode.Mode.LEGACY)
 public class WallpaperSuggestionActivityTest {
 
     @Mock
diff --git a/tests/robotests/src/com/android/settings/wallpaper/WallpaperTypePreferenceControllerTest.java b/tests/robotests/src/com/android/settings/wallpaper/WallpaperTypePreferenceControllerTest.java
index 995bac6..78a5712 100644
--- a/tests/robotests/src/com/android/settings/wallpaper/WallpaperTypePreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/wallpaper/WallpaperTypePreferenceControllerTest.java
@@ -33,10 +33,8 @@
 import org.mockito.junit.MockitoRule;
 import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
-import org.robolectric.annotation.LooperMode;
 
 @RunWith(RobolectricTestRunner.class)
-@LooperMode(LooperMode.Mode.LEGACY)
 public class WallpaperTypePreferenceControllerTest {
     public final MockitoRule mMockitoRule = MockitoJUnit.rule();
 
diff --git a/tests/robotests/src/com/android/settings/widget/RestrictedButtonTest.java b/tests/robotests/src/com/android/settings/widget/RestrictedButtonTest.java
index b3c7049..4b05b91 100644
--- a/tests/robotests/src/com/android/settings/widget/RestrictedButtonTest.java
+++ b/tests/robotests/src/com/android/settings/widget/RestrictedButtonTest.java
@@ -39,13 +39,11 @@
 import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.annotation.Config;
-import org.robolectric.annotation.LooperMode;
 
 import java.util.ArrayList;
 import java.util.List;
 
 @RunWith(RobolectricTestRunner.class)
-@LooperMode(LooperMode.Mode.LEGACY)
 @Config(shadows = {ShadowUserManager.class, ShadowDevicePolicyManager.class})
 public class RestrictedButtonTest {
 
diff --git a/tests/robotests/src/com/android/settings/widget/VideoPreferenceTest.java b/tests/robotests/src/com/android/settings/widget/VideoPreferenceTest.java
index 293c4e4..2492de1 100644
--- a/tests/robotests/src/com/android/settings/widget/VideoPreferenceTest.java
+++ b/tests/robotests/src/com/android/settings/widget/VideoPreferenceTest.java
@@ -47,7 +47,6 @@
 import org.robolectric.RobolectricTestRunner;
 import org.robolectric.RuntimeEnvironment;
 import org.robolectric.annotation.Config;
-import org.robolectric.annotation.LooperMode;
 import org.robolectric.shadows.androidx.fragment.FragmentController;
 
 @RunWith(RobolectricTestRunner.class)
@@ -141,7 +140,6 @@
         assertThat(mAnimationController.isPlaying()).isTrue();
     }
 
-    @LooperMode(LooperMode.Mode.LEGACY)
     @Test
     @Config(qualifiers = "mcc999")
     public void onViewVisible_createAnimationController() {
diff --git a/tests/robotests/src/com/android/settings/wifi/WifiDialogActivityTest.java b/tests/robotests/src/com/android/settings/wifi/WifiDialogActivityTest.java
index 886a4bc..d1cbd0e 100644
--- a/tests/robotests/src/com/android/settings/wifi/WifiDialogActivityTest.java
+++ b/tests/robotests/src/com/android/settings/wifi/WifiDialogActivityTest.java
@@ -57,10 +57,8 @@
 import org.mockito.MockitoAnnotations;
 import org.robolectric.Robolectric;
 import org.robolectric.RobolectricTestRunner;
-import org.robolectric.annotation.LooperMode;
 
 @RunWith(RobolectricTestRunner.class)
-@LooperMode(LooperMode.Mode.LEGACY)
 public class WifiDialogActivityTest {
 
     static final String CALLING_PACKAGE = "calling_package";
diff --git a/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java b/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java
index 46c281f..0de0907 100644
--- a/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java
+++ b/tests/unit/src/com/android/settings/network/SubscriptionUtilTest.java
@@ -658,36 +658,36 @@
     }
 
     @Test
-    public void hasSubscriptionWithRacCarrier_hasNoWifi_showRacDialog_returnTrue() {
+    public void hasSubscriptionWithRacCarrier_hasNoWifi_showRacDialogForAllEsims_returnTrue() {
         when(mResources.getIntArray(anyInt())).thenReturn(CARRIERS_THAT_USE_RAC);
         final SubscriptionInfo info = mock(SubscriptionInfo.class);
         when(info.getCarrierId()).thenReturn(RAC_CARRIER_ID);
         when(mSubMgr.getAvailableSubscriptionInfoList()).thenReturn(Arrays.asList(info));
         addNetworkTransportType(NetworkCapabilities.TRANSPORT_BLUETOOTH);
 
-        assertTrue(SubscriptionUtil.shouldShowRacDialog(mContext));
+        assertTrue(SubscriptionUtil.shouldShowRacDialogWhenErasingAllEsims(mContext));
     }
 
     @Test
-    public void hasSubscriptionWithRacCarrier_hasWifi_showRacDialog_returnFalse() {
+    public void hasSubscriptionWithRacCarrier_hasWifi_showRacDialogForAllEsims_returnFalse() {
         when(mResources.getIntArray(anyInt())).thenReturn(CARRIERS_THAT_USE_RAC);
         final SubscriptionInfo info = mock(SubscriptionInfo.class);
         when(info.getCarrierId()).thenReturn(RAC_CARRIER_ID);
         when(mSubMgr.getAvailableSubscriptionInfoList()).thenReturn(Arrays.asList(info));
         addNetworkTransportType(NetworkCapabilities.TRANSPORT_WIFI);
 
-        assertFalse(SubscriptionUtil.shouldShowRacDialog(mContext));
+        assertFalse(SubscriptionUtil.shouldShowRacDialogWhenErasingAllEsims(mContext));
     }
 
     @Test
-    public void hasNoSubscriptionWithRacCarrier_hasNoWifi_showRacDialog_returnFalse() {
+    public void hasNoSubscriptionWithRacCarrier_hasNoWifi_showRacDialogForAllEsims_returnFalse() {
         when(mResources.getIntArray(anyInt())).thenReturn(CARRIERS_THAT_USE_RAC);
         final SubscriptionInfo info = mock(SubscriptionInfo.class);
         when(info.getCarrierId()).thenReturn(NO_RAC_CARRIER_ID);
         when(mSubMgr.getAvailableSubscriptionInfoList()).thenReturn(Arrays.asList(info));
         addNetworkTransportType(NetworkCapabilities.TRANSPORT_WIFI);
 
-        assertFalse(SubscriptionUtil.shouldShowRacDialog(mContext));
+        assertFalse(SubscriptionUtil.shouldShowRacDialogWhenErasingAllEsims(mContext));
     }
 
     private void addNetworkTransportType(int networkType) {
