Merge "Modify ImsRegistrationUpdate"
diff --git a/Android.bp b/Android.bp
index 0a7ccdc..dc35c5d 100644
--- a/Android.bp
+++ b/Android.bp
@@ -43,6 +43,7 @@
         "PlatformProperties",
         "modules-utils-os",
         "nist-sip",
+        "service-entitlement"
     ],
 
     srcs: [
@@ -79,11 +80,14 @@
     },
 }
 
-// Allow other applications to use public constants from SliceStore
+// Allow other applications to use public constants from SlicePurchaseController
 java_library {
-    name: "SliceStore",
-    srcs: ["src/com/android/phone/slicestore/SliceStore.java",],
-    libs: ["telephony-common"],
+    name: "SlicePurchaseController",
+    srcs: ["src/com/android/phone/slice/*.java",],
+    libs: [
+        "telephony-common",
+        "service-entitlement"
+        ],
 }
 
 platform_compat_config {
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 5599a50..0e32e40 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -21,9 +21,9 @@
         android:sharedUserId="android.uid.phone"
         android:sharedUserLabel="@string/phoneAppLabel">
 
-    <!-- Allows broadcasting for SliceStore events. -->
-    <protected-broadcast android:name="com.android.phone.slicestore.action.START_SLICE_STORE" />
-    <protected-broadcast android:name="com.android.phone.slicestore.action.SLICE_STORE_RESPONSE_TIMEOUT" />
+    <!-- Allows broadcasting for SlicePurchaseController events. -->
+    <protected-broadcast android:name="com.android.phone.slice.action.START_SLICE_PURCHASE_APP" />
+    <protected-broadcast android:name="com.android.phone.slice.action.SLICE_PURCHASE_APP_RESPONSE_TIMEOUT" />
 
     <original-package android:name="com.android.phone" />
     <!-- Allows granting runtime permissions to telephony related components. -->
@@ -159,6 +159,9 @@
     <!-- Needed to block unwanted malicious pop up overlays -->
     <uses-permission android:name="android.permission.HIDE_NON_SYSTEM_OVERLAY_WINDOWS"/>
 
+    <!-- Needed to set user association to a certain sim -->
+    <uses-permission android:name="android.permission.MANAGE_SUBSCRIPTION_USER_ASSOCIATION"/>
+
     <permission android:name="com.android.phone.permission.ACCESS_LAST_KNOWN_CELL_ID"
                 android:label="Access last known cell identity."
                 android:protectionLevel="signature"/>
@@ -196,6 +199,7 @@
             android:label="@string/emergencyDialerIconLabel"
             android:theme="@style/EmergencyDialerTheme"
             android:screenOrientation="portrait"
+            android:showWhenLocked="true"
             android:exported="true"
             android:resizeableActivity="false">
             <intent-filter>
diff --git a/ecc/conversion_toolset_v1/proto/protobuf_ecc_data.proto b/ecc/conversion_toolset_v1/proto/protobuf_ecc_data.proto
index 528e4b0..088b5b7 100644
--- a/ecc/conversion_toolset_v1/proto/protobuf_ecc_data.proto
+++ b/ecc/conversion_toolset_v1/proto/protobuf_ecc_data.proto
@@ -19,6 +19,12 @@
         AIEC = 7;
     }
 
+    enum Routing {
+        UNKNOWN = 0;
+        EMERGENCY = 1;
+        NORMAL= 2;
+    }
+
     // Required: Every EccInfo shall contain a phone number.
     optional string phone_number = 1;
 
@@ -26,11 +32,11 @@
     repeated Type types = 2 [packed=true];
 
 
-    //Optional: By default, the emergency number is assumed to be 'emergency routed'
-    optional bool is_normal_routed = 3 [default = false];
+    //Optional: By default, routing is assumed to be 'UNKNOWN'
+    optional Routing routing = 3 [default = UNKNOWN];
 
-    //Optional: This field is evaluated only if is_normal_routed is set to true
-    //If the field is empty, normal routing is used for all MNCs
+    //Optional: This field is evaluated only if routing is set to NORMAL
+    //If the field is empty, NORMAL routing is used for all MNCs
     //Else normal routing is used only for list of MNCs specified
     repeated string normal_routing_mncs = 4;
 
diff --git a/ecc/input/OWNERS b/ecc/input/OWNERS
index d9ecbb7..5685875 100644
--- a/ecc/input/OWNERS
+++ b/ecc/input/OWNERS
@@ -1,5 +1,4 @@
 set noparent
 
-djkrause@google.com
-satk@google.com
-somakala@google.com
\ No newline at end of file
+tgunn@google.com
+chinmayd@google.com
\ No newline at end of file
diff --git a/ecc/input/eccdata.txt b/ecc/input/eccdata.txt
index a8b021e..ddf3505 100644
--- a/ecc/input/eccdata.txt
+++ b/ecc/input/eccdata.txt
@@ -627,6 +627,7 @@
     types: POLICE
     types: AMBULANCE
     types: FIRE
+    routing: EMERGENCY
   }
   ecc_fallback: "112"
 }
@@ -739,6 +740,7 @@
     types: POLICE
     types: AMBULANCE
     types: FIRE
+    routing: EMERGENCY
   }
   ecc_fallback: "112"
 }
@@ -792,26 +794,32 @@
     types: POLICE
     types: AMBULANCE
     types: FIRE
+    routing: EMERGENCY
   }
   eccs {
     phone_number: "15"
     types: AMBULANCE
+    routing: NORMAL
   }
   eccs {
     phone_number: "17"
     types: POLICE
+    routing: NORMAL
   }
   eccs {
     phone_number: "18"
     types: FIRE
+    routing:NORMAL
   }
   eccs {
     phone_number: "115"
     types: TYPE_UNSPECIFIED
+    routing: NORMAL
   }
   eccs {
     phone_number: "116000"
     types: TYPE_UNSPECIFIED
+    routing: NORMAL
   }
   eccs {
     phone_number: "114"
@@ -819,27 +827,28 @@
   }
   eccs {
     phone_number: "191"
-    types: TYPE_UNSPECIFIED
+    types: MOUNTAIN_RESCUE
+    routing: NORMAL
   }
   eccs {
     phone_number: "196"
     types: MARINE_GUARD
+    routing: NORMAL
   }
   eccs {
     phone_number: "197"
     types: TYPE_UNSPECIFIED
+    routing: NORMAL
   }
   eccs {
     phone_number: "116117"
     types: TYPE_UNSPECIFIED
-  }
-  eccs {
-    phone_number: "116111"
-    types: TYPE_UNSPECIFIED
+    routing: NORMAL
   }
   eccs {
     phone_number: "119"
     types: TYPE_UNSPECIFIED
+    routing: NORMAL
   }
   ecc_fallback: "112"
 }
@@ -1252,11 +1261,18 @@
   eccs {
     phone_number: "110"
     types: POLICE
+    routing: EMERGENCY
+  }
+  eccs {
+    phone_number: "118"
+    types: MARINE_GUARD
+    routing: EMERGENCY
   }
   eccs {
     phone_number: "119"
     types: AMBULANCE
     types: FIRE
+    routing: EMERGENCY
   }
   ecc_fallback: "112"
 }
@@ -1955,6 +1971,21 @@
     types: POLICE
     types: AMBULANCE
     types: FIRE
+    routing: EMERGENCY
+  }
+  eccs {
+    phone_number: "112"
+    types: POLICE
+    types: AMBULANCE
+    types: FIRE
+    routing: EMERGENCY
+  }
+  eccs {
+    phone_number: "911"
+    types: POLICE
+    types: AMBULANCE
+    types: FIRE
+    routing: EMERGENCY
   }
   ecc_fallback: "112"
 }
@@ -2114,6 +2145,14 @@
     types: POLICE
     types: AMBULANCE
     types: FIRE
+    routing: EMERGENCY
+  }
+  eccs {
+    phone_number: "911"
+    types: POLICE
+    types: AMBULANCE
+    types: FIRE
+    routing: EMERGENCY
   }
   ecc_fallback: "112"
 }
@@ -2274,6 +2313,7 @@
     types: POLICE
     types: AMBULANCE
     types: FIRE
+    routing: EMERGENCY
   }
   ecc_fallback: "112"
 }
@@ -2694,6 +2734,7 @@
     types: POLICE
     types: AMBULANCE
     types: FIRE
+    routing: EMERGENCY
   }
   ecc_fallback: "911"
 }
diff --git a/ecc/output/OWNERS b/ecc/output/OWNERS
index d9ecbb7..5685875 100644
--- a/ecc/output/OWNERS
+++ b/ecc/output/OWNERS
@@ -1,5 +1,4 @@
 set noparent
 
-djkrause@google.com
-satk@google.com
-somakala@google.com
\ No newline at end of file
+tgunn@google.com
+chinmayd@google.com
\ No newline at end of file
diff --git a/ecc/output/eccdata b/ecc/output/eccdata
index 8427603..c916c77 100644
--- a/ecc/output/eccdata
+++ b/ecc/output/eccdata
Binary files differ
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 01799a9..24e634f 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -566,7 +566,7 @@
     <string name="emergency_enable_radio_dialog_message" msgid="1695305158151408629">"جارٍ تفعيل اللاسلكي..."</string>
     <string name="emergency_enable_radio_dialog_retry" msgid="4329131876852608587">"لا تتوفر خدمة. جارٍ إعادة المحاولة…"</string>
     <string name="radio_off_during_emergency_call" msgid="8011154134040481609">"لا يمكن دخول وضع الطيران أثناء إجراء مكالمة طوارئ."</string>
-    <string name="dial_emergency_error" msgid="825822413209026039">"يتعذر الاتصال. لا يعد <xliff:g id="NON_EMERGENCY_NUMBER">%s</xliff:g> رقم طوارئ."</string>
+    <string name="dial_emergency_error" msgid="825822413209026039">"يتعذر الاتصال. <xliff:g id="NON_EMERGENCY_NUMBER">%s</xliff:g> ليس رقم طوارئ."</string>
     <string name="dial_emergency_empty_error" msgid="2785803395047793634">"يتعذر الاتصال. يمكنك طلب رقم طوارئ."</string>
     <string name="dial_emergency_calling_not_available" msgid="6485846193794727823">"مكالمة الطوارئ غير متوفرة"</string>
     <string name="pin_puk_system_user_only" msgid="1045147220686867922">"‏يمكن لمالك الجهاز فقط إدخال رمزَي PIN/PUK."</string>
diff --git a/res/values-en-rCA/arrays.xml b/res/values-en-rCA/arrays.xml
index 08bac75..d8479e7 100644
--- a/res/values-en-rCA/arrays.xml
+++ b/res/values-en-rCA/arrays.xml
@@ -19,8 +19,8 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
   <string-array name="preferred_network_mode_choices_world_mode">
     <item msgid="8359756926680194770">"Global"</item>
-    <item msgid="7497128470871581354">"LTE/CDMA"</item>
-    <item msgid="1732367262765147258">"LTE/GSM/UMTS"</item>
+    <item msgid="7497128470871581354">"LTE / CDMA"</item>
+    <item msgid="1732367262765147258">"LTE / GSM / UMTS"</item>
   </string-array>
   <string-array name="preferred_network_mode_values_world_mode">
     <item msgid="7956157363792248686">"10"</item>
diff --git a/res/values-en-rCA/strings.xml b/res/values-en-rCA/strings.xml
index b861ae4..e605117 100644
--- a/res/values-en-rCA/strings.xml
+++ b/res/values-en-rCA/strings.xml
@@ -18,7 +18,7 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="phoneAppLabel" product="tablet" msgid="1916019789885839910">"Mobile Data"</string>
     <string name="phoneAppLabel" product="default" msgid="130465039375347763">"Phone Services"</string>
-    <string name="emergencyDialerIconLabel" msgid="8668005772339436680">"Emergency Dialler"</string>
+    <string name="emergencyDialerIconLabel" msgid="8668005772339436680">"Emergency Dialer"</string>
     <string name="phoneIconLabel" msgid="3015941229249651419">"Phone"</string>
     <string name="fdnListLabel" msgid="4119121875004244097">"FDN list"</string>
     <string name="unknown" msgid="8279698889921830815">"Unknown"</string>
@@ -26,10 +26,10 @@
     <string name="payphone" msgid="7936735771836716941">"Payphone"</string>
     <string name="onHold" msgid="6132725550015899006">"On hold"</string>
     <string name="carrier_mmi_msg_title" msgid="6050165242447507034">"<xliff:g id="MMICARRIER">%s</xliff:g> Message"</string>
-    <string name="default_carrier_mmi_msg_title" msgid="7754317179938537213">"Operator message"</string>
+    <string name="default_carrier_mmi_msg_title" msgid="7754317179938537213">"Carrier Message"</string>
     <string name="mmiStarted" msgid="9212975136944568623">"MMI code started"</string>
     <string name="ussdRunning" msgid="1163586813106772717">"USSD code running…"</string>
-    <string name="mmiCancelled" msgid="5339191899200678272">"MMI code cancelled"</string>
+    <string name="mmiCancelled" msgid="5339191899200678272">"MMI code canceled"</string>
     <string name="cancel" msgid="8984206397635155197">"Cancel"</string>
     <string name="enter_input" msgid="6193628663039958990">"USSD message must be between <xliff:g id="MIN_LEN">%1$d</xliff:g> and <xliff:g id="MAX_LEN">%2$d</xliff:g> characters. Please try again."</string>
     <string name="manageConferenceLabel" msgid="8415044818156353233">"Manage conference call"</string>
@@ -47,7 +47,7 @@
     <string name="no_vm_number" msgid="6623853880546176930">"Missing voicemail number"</string>
     <string name="no_vm_number_msg" msgid="5165161462411372504">"No voicemail number is stored on the SIM card."</string>
     <string name="add_vm_number_str" msgid="7368168964435881637">"Add number"</string>
-    <string name="voice_number_setting_primary_user_only" msgid="3394706575741912843">"Voicemail settings can only be modified by the primary user."</string>
+    <string name="voice_number_setting_primary_user_only" msgid="3394706575741912843">"Voicemail Settings can only be modified by the Primary User."</string>
     <string name="puk_unlocked" msgid="4627340655215746511">"Your SIM card has been unblocked. Your phone is unlocking…"</string>
     <string name="label_ndp" msgid="7617392683877410341">"SIM network unlock PIN"</string>
     <string name="label_phoneid" msgid="8775611434123577808">"SIM locked for operator"</string>
@@ -61,7 +61,7 @@
     <string name="labelGsmMore_with_label" msgid="3206015314393246224">"GSM call settings (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="labelCDMAMore" msgid="7937441382611224632">"CDMA call settings"</string>
     <string name="labelCdmaMore_with_label" msgid="7759692829160238152">"CDMA call settings (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
-    <string name="apn_settings" msgid="1978652203074756623">"Access point names"</string>
+    <string name="apn_settings" msgid="1978652203074756623">"Access Point Names"</string>
     <string name="settings_label" msgid="9101778088412567956">"Network settings"</string>
     <string name="phone_accounts" msgid="1216879437523774604">"Calling accounts"</string>
     <string name="phone_accounts_make_calls_with" msgid="16747814788918145">"Make calls with"</string>
@@ -81,16 +81,16 @@
     <string name="voicemail_settings_with_label" msgid="4228431668214894138">"Voicemail (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="voicemail_abbreviated" msgid="7746778673131551185">"VM:"</string>
     <string name="make_and_receive_calls" msgid="4868913166494621109">"Make &amp; receive calls"</string>
-    <string name="smart_forwarding_settings_menu" msgid="8850429887958938540">"Smart forwarding"</string>
+    <string name="smart_forwarding_settings_menu" msgid="8850429887958938540">"Smart Forwarding"</string>
     <string name="smart_forwarding_settings_menu_summary" msgid="5096947726032885325">"When one number isn\'t reachable, always forward calls to your other number"</string>
     <string name="voicemail_notifications_preference_title" msgid="7829238858063382977">"Notifications"</string>
     <string name="cell_broadcast_settings" msgid="8135324242541809924">"Emergency broadcasts"</string>
     <string name="call_settings" msgid="3677282690157603818">"Call settings"</string>
     <string name="additional_gsm_call_settings" msgid="1561980168685658846">"Additional settings"</string>
     <string name="additional_gsm_call_settings_with_label" msgid="7973920539979524908">"Additional settings (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
-    <string name="sum_gsm_call_settings" msgid="7964692601608878138">"Additional GSM-only call settings"</string>
+    <string name="sum_gsm_call_settings" msgid="7964692601608878138">"Additional GSM only call settings"</string>
     <string name="additional_cdma_call_settings" msgid="2178016561980611304">"Additional CDMA call settings"</string>
-    <string name="sum_cdma_call_settings" msgid="3185825305136993636">"Additional CDMA-only call settings"</string>
+    <string name="sum_cdma_call_settings" msgid="3185825305136993636">"Additional CDMA only call settings"</string>
     <string name="labelNwService" msgid="6015891883487125120">"Network service settings"</string>
     <string name="labelCallerId" msgid="2090540744550903172">"Caller ID"</string>
     <string name="sum_loading_settings" msgid="434063780286688775">"Loading settings…"</string>
@@ -100,7 +100,7 @@
     <string name="labelCW" msgid="8449327023861428622">"Call waiting"</string>
     <string name="sum_cw_enabled" msgid="3977308526187139996">"During a call, notify me of incoming calls"</string>
     <string name="sum_cw_disabled" msgid="3658094589461768637">"During a call, notify me of incoming calls"</string>
-    <string name="call_forwarding_settings" msgid="8937130467468257671">"Call-forwarding settings"</string>
+    <string name="call_forwarding_settings" msgid="8937130467468257671">"Call forwarding settings"</string>
     <string name="call_forwarding_settings_with_label" msgid="2345432813399564272">"Call forwarding settings (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="labelCF" msgid="3578719437928476078">"Call forwarding"</string>
     <string name="labelCFU" msgid="8870170873036279706">"Always forward"</string>
@@ -123,14 +123,14 @@
     <string name="messageCFNRc" msgid="6980340731313007250">"Number when unreachable"</string>
     <string name="sum_cfnrc_enabled" msgid="1799069234006073477">"Forwarding to <xliff:g id="PHONENUMBER">{0}</xliff:g>"</string>
     <string name="sum_cfnrc_disabled" msgid="739289696796917683">"Off"</string>
-    <string name="disable_cfnrc_forbidden" msgid="775348748084726890">"Your operator doesn\'t support disabling call forwarding when your phone is unreachable."</string>
-    <string name="registration_cf_forbidden" msgid="4386482610771190420">"Your operator doesn\'t support call forwarding."</string>
+    <string name="disable_cfnrc_forbidden" msgid="775348748084726890">"Your carrier doesn\'t support disabling call forwarding when your phone is unreachable."</string>
+    <string name="registration_cf_forbidden" msgid="4386482610771190420">"Your carrier doesn\'t support call forwarding."</string>
     <string name="cdma_call_waiting" msgid="4565070960879673216">"Turn on call waiting?"</string>
     <string name="enable_cdma_call_waiting_setting" msgid="5906811747921744307">"During a call, you\'ll be notified about incoming calls"</string>
     <string name="enable_cdma_cw" msgid="811047045863422232">"Turn on"</string>
     <string name="disable_cdma_cw" msgid="7119290446496301734">"Cancel"</string>
-    <string name="cdma_call_waiting_in_ims_on" msgid="6390979414188659218">"CDMA call waiting under IMS on"</string>
-    <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA call waiting under IMS off"</string>
+    <string name="cdma_call_waiting_in_ims_on" msgid="6390979414188659218">"CDMA Call Waiting under IMS On"</string>
+    <string name="cdma_call_waiting_in_ims_off" msgid="1099246114368636334">"CDMA Call Waiting under IMS Off"</string>
     <string name="updating_title" msgid="6130548922615719689">"Call settings"</string>
     <string name="call_settings_admin_user_only" msgid="7238947387649986286">"Call settings can only be changed by the admin user."</string>
     <string name="call_settings_with_label" msgid="8460230435361579511">"Settings (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
@@ -144,8 +144,8 @@
     <string name="stk_cc_ss_to_ussd_error" msgid="8330749347425752192">"SS request changed to USSD request"</string>
     <string name="stk_cc_ss_to_ss_error" msgid="8297155544652134278">"Changed to new SS request"</string>
     <string name="stk_cc_ss_to_dial_video_error" msgid="4255261231466032505">"SS request changed to video call"</string>
-    <string name="fdn_check_failure" msgid="1833769746374185247">"Your Phone app\'s fixed dialling numbers setting is turned on. As a result, some call-related features aren\'t working."</string>
-    <string name="radio_off_error" msgid="8321564164914232181">"Please turn on the radio before viewing these settings."</string>
+    <string name="fdn_check_failure" msgid="1833769746374185247">"Your Phone app\'s Fixed Dialing Numbers setting is turned on. As a result, some call-related features aren\'t working."</string>
+    <string name="radio_off_error" msgid="8321564164914232181">"Turn on the radio before viewing these settings."</string>
     <string name="close_dialog" msgid="1074977476136119408">"OK"</string>
     <string name="enable" msgid="2636552299455477603">"Turn on"</string>
     <string name="disable" msgid="1122698860799462116">"Turn off"</string>
@@ -156,22 +156,22 @@
     <item msgid="9150034130629852635">"Show number"</item>
   </string-array>
     <string name="vm_changed" msgid="4739599044379692505">"Voicemail number changed."</string>
-    <string name="vm_change_failed" msgid="7877733929455763566">"Couldn\'t change the voicemail number.\nContact your operator if this problem persists."</string>
-    <string name="fw_change_failed" msgid="9179241823460192148">"Couldn\'t change the forwarding number.\nContact your operator if this problem persists."</string>
+    <string name="vm_change_failed" msgid="7877733929455763566">"Couldn\'t change the voicemail number.\nContact your carrier if this problem persists."</string>
+    <string name="fw_change_failed" msgid="9179241823460192148">"Couldn\'t change the forwarding number.\nContact your carrier if this problem persists."</string>
     <string name="fw_get_in_vm_failed" msgid="2432678237218183844">"Couldn\'t retrieve and save current forwarding number settings.\nSwitch to the new provider anyway?"</string>
     <string name="no_change" msgid="3737264882821031892">"No changes were made."</string>
     <string name="sum_voicemail_choose_provider" msgid="6750824719081403773">"Choose voicemail service"</string>
-    <string name="voicemail_default" msgid="6427575113775462077">"Your operator"</string>
+    <string name="voicemail_default" msgid="6427575113775462077">"Your carrier"</string>
     <string name="vm_change_pin_old_pin" msgid="7154951790929009241">"Old PIN"</string>
     <string name="vm_change_pin_new_pin" msgid="2656200418481288069">"New PIN"</string>
     <string name="vm_change_pin_progress_message" msgid="626015184502739044">"Please wait."</string>
     <string name="vm_change_pin_error_too_short" msgid="1789139338449945483">"The new PIN is too short."</string>
     <string name="vm_change_pin_error_too_long" msgid="3634907034310018954">"The new PIN is too long."</string>
-    <string name="vm_change_pin_error_too_weak" msgid="8581892952627885719">"The new PIN is too weak. A strong password should not have a continuous sequence or repeated digits."</string>
-    <string name="vm_change_pin_error_mismatch" msgid="5364847280026257331">"The old PIN doesn\'t match."</string>
+    <string name="vm_change_pin_error_too_weak" msgid="8581892952627885719">"The new PIN is too weak. A strong password should not have continuous sequence or repeated digits."</string>
+    <string name="vm_change_pin_error_mismatch" msgid="5364847280026257331">"The old PIN does not match."</string>
     <string name="vm_change_pin_error_invalid" msgid="5230002671175580674">"The new PIN contains invalid characters."</string>
     <string name="vm_change_pin_error_system_error" msgid="9116483527909681791">"Unable to change PIN"</string>
-    <string name="vvm_unsupported_message_format" msgid="4206402558577739713">"Unsupported message type. Call <xliff:g id="NUMBER">%s</xliff:g> to listen."</string>
+    <string name="vvm_unsupported_message_format" msgid="4206402558577739713">"Unsupported message type, call <xliff:g id="NUMBER">%s</xliff:g> to listen."</string>
     <string name="network_settings_title" msgid="7560807107123171541">"Mobile network"</string>
     <string name="label_available" msgid="1316084116670821258">"Available networks"</string>
     <string name="load_networks_progress" msgid="4051433047717401683">"Searching…"</string>
@@ -179,13 +179,13 @@
     <string name="network_query_error" msgid="3862515805115145124">"Couldn\'t find networks. Try again."</string>
     <string name="register_on_network" msgid="4194770527833960423">"Registering on <xliff:g id="NETWORK">%s</xliff:g>…"</string>
     <string name="not_allowed" msgid="8541221928746104798">"Your SIM card doesn\'t allow a connection to this network."</string>
-    <string name="connect_later" msgid="1950138106010005425">"Can\'t connect to this network at the moment. Try again later."</string>
+    <string name="connect_later" msgid="1950138106010005425">"Can\'t connect to this network right now. Try again later."</string>
     <string name="registration_done" msgid="5337407023566953292">"Registered on network."</string>
     <string name="already_auto" msgid="8607068290733079336">"Already in automatic selection."</string>
     <string name="select_automatically" msgid="779750291257872651">"Automatically select network"</string>
     <string name="manual_mode_disallowed_summary" msgid="3970048592179890197">"Unavailable when connected to %1$s"</string>
     <string name="network_select_title" msgid="4117305053881611988">"Network"</string>
-    <string name="register_automatically" msgid="3907580547590554834">"Automatic registration..."</string>
+    <string name="register_automatically" msgid="3907580547590554834">"Automatic registration…"</string>
     <string name="preferred_network_mode_title" msgid="5253395265169539830">"Preferred network type"</string>
     <string name="preferred_network_mode_summary" msgid="3787989000044330064">"Change the network operating mode"</string>
     <string name="preferred_network_mode_dialogtitle" msgid="2781447433514459696">"Preferred network type"</string>
@@ -193,7 +193,7 @@
     <string name="choose_network_title" msgid="5335832663422653082">"Choose network"</string>
     <string name="network_disconnected" msgid="8844141106841160825">"Disconnected"</string>
     <string name="network_connected" msgid="2760235679963580224">"Connected"</string>
-    <string name="network_connecting" msgid="160901383582774987">"Connecting…"</string>
+    <string name="network_connecting" msgid="160901383582774987">"Connecting..."</string>
     <string name="network_could_not_connect" msgid="6547460848093727998">"Couldn’t connect"</string>
   <string-array name="preferred_network_mode_choices">
     <item msgid="4531933377509551889">"GSM/WCDMA preferred"</item>
@@ -208,7 +208,7 @@
     <item msgid="1694517610683571748">"GSM/WCDMA/LTE"</item>
     <item msgid="2431844716050955858">"Global"</item>
     <item msgid="8522859526931346931">"LTE"</item>
-    <item msgid="7852977970279215000">"LTE/WCDMA"</item>
+    <item msgid="7852977970279215000">"LTE / WCDMA"</item>
     <item msgid="5779210256161024981">"TDSCDMA only"</item>
     <item msgid="611913646308951205">"TDSCDMA/WCDMA"</item>
     <item msgid="1738977207573340604">"LTE/TDSCDMA"</item>
@@ -234,9 +234,9 @@
     <string name="preferred_network_mode_wcdma_perf_summary" msgid="7851493369130750126">"Preferred network mode: WCDMA preferred"</string>
     <string name="preferred_network_mode_gsm_only_summary" msgid="4323367929994392830">"Preferred network mode: GSM only"</string>
     <string name="preferred_network_mode_wcdma_only_summary" msgid="3585482191951442207">"Preferred network mode: WCDMA only"</string>
-    <string name="preferred_network_mode_gsm_wcdma_summary" msgid="2988950751948316810">"Preferred network mode: GSM/WCDMA"</string>
+    <string name="preferred_network_mode_gsm_wcdma_summary" msgid="2988950751948316810">"Preferred network mode: GSM / WCDMA"</string>
     <string name="preferred_network_mode_cdma_summary" msgid="9127141320343936911">"Preferred network mode: CDMA"</string>
-    <string name="preferred_network_mode_cdma_evdo_summary" msgid="3629440709757307077">"Preferred network mode: CDMA/EvDo"</string>
+    <string name="preferred_network_mode_cdma_evdo_summary" msgid="3629440709757307077">"Preferred network mode: CDMA / EvDo"</string>
     <string name="preferred_network_mode_cdma_only_summary" msgid="211164451887102568">"Preferred network mode: CDMA only"</string>
     <string name="preferred_network_mode_evdo_only_summary" msgid="939116631952132878">"Preferred network mode: EvDo only"</string>
     <string name="preferred_network_mode_cdma_evdo_gsm_wcdma_summary" msgid="7891131456022601976">"Preferred network mode: CDMA/EvDo/GSM/WCDMA"</string>
@@ -245,13 +245,13 @@
     <string name="preferred_network_mode_lte_cdma_evdo_summary" msgid="5559198623419981805">"Preferred network mode: CDMA+LTE/EVDO"</string>
     <string name="preferred_network_mode_lte_cdma_evdo_gsm_wcdma_summary" msgid="6707224437925495615">"Preferred network mode: LTE/CDMA/EvDo/GSM/WCDMA"</string>
     <string name="preferred_network_mode_global_summary" msgid="3847086258439582411">"Preferred network mode: Global"</string>
-    <string name="preferred_network_mode_lte_wcdma_summary" msgid="7001804022020813865">"Preferred network mode: LTE/WCDMA"</string>
-    <string name="preferred_network_mode_lte_gsm_umts_summary" msgid="6484203890156282179">"Preferred network mode: LTE/GSM/UMTS"</string>
-    <string name="preferred_network_mode_lte_cdma_summary" msgid="8187929456614068518">"Preferred network mode: LTE/CDMA"</string>
+    <string name="preferred_network_mode_lte_wcdma_summary" msgid="7001804022020813865">"Preferred network mode: LTE / WCDMA"</string>
+    <string name="preferred_network_mode_lte_gsm_umts_summary" msgid="6484203890156282179">"Preferred network mode: LTE / GSM / UMTS"</string>
+    <string name="preferred_network_mode_lte_cdma_summary" msgid="8187929456614068518">"Preferred network mode: LTE / CDMA"</string>
     <string name="preferred_network_mode_tdscdma_summary" msgid="3602127224234207206">"Preferred network mode: TDSCDMA"</string>
-    <string name="preferred_network_mode_tdscdma_wcdma_summary" msgid="7076968749402201123">"Preferred network mode: TDSCDMA/WCDMA"</string>
-    <string name="preferred_network_mode_lte_tdscdma_summary" msgid="3001058390866953624">"Preferred network mode: LTE/TDSCDMA"</string>
-    <string name="preferred_network_mode_tdscdma_gsm_summary" msgid="1716983444872465309">"Preferred network mode: TDSCDMA/GSM"</string>
+    <string name="preferred_network_mode_tdscdma_wcdma_summary" msgid="7076968749402201123">"Preferred network mode: TDSCDMA / WCDMA"</string>
+    <string name="preferred_network_mode_lte_tdscdma_summary" msgid="3001058390866953624">"Preferred network mode: LTE / TDSCDMA"</string>
+    <string name="preferred_network_mode_tdscdma_gsm_summary" msgid="1716983444872465309">"Preferred network mode: TDSCDMA / GSM"</string>
     <string name="preferred_network_mode_lte_tdscdma_gsm_summary" msgid="1349057007230669585">"Preferred network mode: LTE/GSM/TDSCDMA"</string>
     <string name="preferred_network_mode_tdscdma_gsm_wcdma_summary" msgid="2092262901885164194">"Preferred network mode: TDSCDMA/GSM/WCDMA"</string>
     <string name="preferred_network_mode_lte_tdscdma_wcdma_summary" msgid="56422129430744466">"Preferred network mode: LTE/TDSCDMA/WCDMA"</string>
@@ -259,7 +259,7 @@
     <string name="preferred_network_mode_tdscdma_cdma_evdo_gsm_wcdma_summary" msgid="2779089629254220257">"Preferred network mode: TDSCDMA/CDMA/EvDo/GSM/WCDMA"</string>
     <string name="preferred_network_mode_lte_tdscdma_cdma_evdo_gsm_wcdma_summary" msgid="9065672185435798587">"Preferred network mode: LTE/TDSCDMA/CDMA/EvDo/GSM/WCDMA"</string>
     <string name="preferred_network_mode_nr_only_summary" msgid="1467452233297987391">"Preferred network mode: NR only"</string>
-    <string name="preferred_network_mode_nr_lte_summary" msgid="5890170406507535976">"Preferred network mode: NR/LTE"</string>
+    <string name="preferred_network_mode_nr_lte_summary" msgid="5890170406507535976">"Preferred network mode: NR / LTE"</string>
     <string name="preferred_network_mode_nr_lte_cdma_evdo_summary" msgid="5507940227264296616">"Preferred network mode: NR/LTE/CDMA/EvDo"</string>
     <string name="preferred_network_mode_nr_lte_gsm_wcdma_summary" msgid="2811179121638665248">"Preferred network mode: NR/LTE/GSM/WCDMA"</string>
     <string name="preferred_network_mode_nr_lte_cdma_evdo_gsm_wcdma_summary" msgid="7631365223836621902">"Preferred network mode: NR/LTE/CDMA/EvDo/GSM/WCDMA"</string>
@@ -295,13 +295,13 @@
     <string name="limited_sim_function_with_phone_num_notification_message" msgid="5928988883403677610">"<xliff:g id="CARRIER_NAME">%1$s</xliff:g> calls and data services may be blocked while using <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>."</string>
     <string name="limited_sim_function_notification_message" msgid="5338638075496721160">"<xliff:g id="CARRIER_NAME">%1$s</xliff:g> calls and data services may be blocked while using another SIM."</string>
     <string name="sip_accounts_removed_notification_title" msgid="3528076957535736095">"Deprecated SIP accounts found and removed"</string>
-    <string name="sip_accounts_removed_notification_message" msgid="1916856744869791592">"SIP calling is no longer supported by the Android platform.\nYour existing SIP accounts <xliff:g id="REMOVED_SIP_ACCOUNTS">%s</xliff:g> have been removed.\nPlease confirm your default calling account setting."</string>
+    <string name="sip_accounts_removed_notification_message" msgid="1916856744869791592">"SIP calling is no longer supported by Android platform.\nYour existing SIP accounts <xliff:g id="REMOVED_SIP_ACCOUNTS">%s</xliff:g> have been removed.\nPlease confirm your default calling account setting."</string>
     <string name="sip_accounts_removed_notification_action" msgid="3772778402370555562">"Go to settings"</string>
     <string name="data_usage_title" msgid="8438592133893837464">"App data usage"</string>
     <string name="data_usage_template" msgid="6287906680674061783">"<xliff:g id="ID_1">%1$s</xliff:g> mobile data used <xliff:g id="ID_2">%2$s</xliff:g>"</string>
     <string name="advanced_options_title" msgid="9208195294513520934">"Advanced"</string>
     <string name="carrier_settings_euicc" msgid="1190237227261337749">"Carrier"</string>
-    <string name="keywords_carrier_settings_euicc" msgid="8540160967922063745">"operator, esim, sim, euicc, switch operators, add operator"</string>
+    <string name="keywords_carrier_settings_euicc" msgid="8540160967922063745">"carrier, esim, sim, euicc, switch carriers, add carrier"</string>
     <string name="carrier_settings_euicc_summary" msgid="2027941166597330117">"<xliff:g id="CARRIER_NAME">%1$s</xliff:g> — <xliff:g id="PHONE_NUMBER">%2$s</xliff:g>"</string>
     <string name="mobile_data_settings_title" msgid="7228249980933944101">"Mobile data"</string>
     <string name="mobile_data_settings_summary" msgid="5012570152029118471">"Access data using mobile network"</string>
@@ -315,20 +315,20 @@
     <string name="cdma_options" msgid="3669592472226145665">"CDMA Options"</string>
     <string name="throttle_data_usage" msgid="1944145350660420711">"Data usage"</string>
     <string name="throttle_current_usage" msgid="7483859109708658613">"Data used in current period"</string>
-    <string name="throttle_time_frame" msgid="1813452485948918791">"Data usage period"</string>
+    <string name="throttle_time_frame" msgid="1813452485948918791">"Data use period"</string>
     <string name="throttle_rate" msgid="7641913901133634905">"Data rate policy"</string>
     <string name="throttle_help" msgid="2624535757028809735">"Learn more"</string>
     <string name="throttle_status_subtext" msgid="1110276415078236687">"<xliff:g id="USED_0">%1$s</xliff:g> (<xliff:g id="USED_1">%2$d</xliff:g>٪) of <xliff:g id="USED_2">%3$s</xliff:g> period maximum\nNext period starts in <xliff:g id="USED_3">%4$d</xliff:g> days (<xliff:g id="USED_4">%5$s</xliff:g>)"</string>
     <string name="throttle_data_usage_subtext" msgid="3185429653996709840">"<xliff:g id="USED_0">%1$s</xliff:g> (<xliff:g id="USED_1">%2$d</xliff:g>٪) of <xliff:g id="USED_2">%3$s</xliff:g> period maximum"</string>
     <string name="throttle_data_rate_reduced_subtext" msgid="8369839346277847725">"<xliff:g id="USED_0">%1$s</xliff:g> maximum exceeded\nData rate reduced to <xliff:g id="USED_1">%2$d</xliff:g> Kb/s"</string>
     <string name="throttle_time_frame_subtext" msgid="6462089615392402127">"<xliff:g id="USED_0">%1$d</xliff:g>٪ of cycle elapsed\nNext period starts in <xliff:g id="USED_1">%2$d</xliff:g> days (<xliff:g id="USED_2">%3$s</xliff:g>)"</string>
-    <string name="throttle_rate_subtext" msgid="7221971817325779535">"Data rate reduced to <xliff:g id="USED">%1$d</xliff:g> Kb/s if data usage limit is exceeded"</string>
-    <string name="throttle_help_subtext" msgid="2817114897095534807">"More information about your operator\'s mobile network data usage policy"</string>
-    <string name="cell_broadcast_sms" msgid="4053449797289031063">"Mobile Broadcast SMS"</string>
-    <string name="enable_disable_cell_bc_sms" msgid="4759958924031721350">"Mobile Broadcast SMS"</string>
-    <string name="cell_bc_sms_enable" msgid="2019708772024632073">"Mobile Broadcast SMS enabled"</string>
-    <string name="cell_bc_sms_disable" msgid="1214238639910875347">"Mobile Broadcast SMS disabled"</string>
-    <string name="cb_sms_settings" msgid="6858093721831312036">"Mobile Broadcast SMS settings"</string>
+    <string name="throttle_rate_subtext" msgid="7221971817325779535">"Data rate reduced to <xliff:g id="USED">%1$d</xliff:g> Kb/s if data use limit is exceeded"</string>
+    <string name="throttle_help_subtext" msgid="2817114897095534807">"More information about your carrier\'s mobile network data use policy"</string>
+    <string name="cell_broadcast_sms" msgid="4053449797289031063">"Cell Broadcast SMS"</string>
+    <string name="enable_disable_cell_bc_sms" msgid="4759958924031721350">"Cell Broadcast SMS"</string>
+    <string name="cell_bc_sms_enable" msgid="2019708772024632073">"Cell Broadcast SMS enabled"</string>
+    <string name="cell_bc_sms_disable" msgid="1214238639910875347">"Cell Broadcast SMS disabled"</string>
+    <string name="cb_sms_settings" msgid="6858093721831312036">"Cell Broadcast SMS settings"</string>
     <string name="enable_disable_emergency_broadcast" msgid="6325655044472196496">"Emergency Broadcast"</string>
     <string name="emergency_broadcast_enable" msgid="5759610647771102442">"Emergency Broadcast enabled"</string>
     <string name="emergency_broadcast_disable" msgid="2844904734469323266">"Emergency Broadcast disabled"</string>
@@ -396,15 +396,15 @@
     <string name="enable_disable_advertisements" msgid="8704125663718797151">"Advertisements"</string>
     <string name="advertisements_enable" msgid="8651409664217899145">"Advertisements enabled"</string>
     <string name="advertisements_disable" msgid="2999957360508271492">"Advertisements disabled"</string>
-    <string name="enable_disable_stock_quotes" msgid="631498357725951825">"Share Quotes"</string>
-    <string name="stock_quotes_enable" msgid="5104318195579771947">"Share Quotes enabled"</string>
-    <string name="stock_quotes_disable" msgid="3126423481704498278">"Share Quotes disabled"</string>
+    <string name="enable_disable_stock_quotes" msgid="631498357725951825">"Stock Quotes"</string>
+    <string name="stock_quotes_enable" msgid="5104318195579771947">"Stock Quotes enabled"</string>
+    <string name="stock_quotes_disable" msgid="3126423481704498278">"Stock Quotes disabled"</string>
     <string name="enable_disable_eo" msgid="5730223317238970819">"Employment Opportunities"</string>
     <string name="eo_enable" msgid="107713355461019817">"Employment Opportunities enabled"</string>
     <string name="eo_disable" msgid="3955421278929647485">"Employment Opportunities disabled"</string>
-    <string name="enable_disable_mhh" msgid="715930476289202466">"Medical, Health and Hospital"</string>
-    <string name="mhh_enable" msgid="7224396815285147008">"Medical, Health and Hospital enabled"</string>
-    <string name="mhh_disable" msgid="5503643028885686265">"Medical, Health and Hospital disabled"</string>
+    <string name="enable_disable_mhh" msgid="715930476289202466">"Medical, Health, and Hospital"</string>
+    <string name="mhh_enable" msgid="7224396815285147008">"Medical, Health, and Hospital enabled"</string>
+    <string name="mhh_disable" msgid="5503643028885686265">"Medical, Health, and Hospital disabled"</string>
     <string name="enable_disable_technology_news" msgid="2794845609698078400">"Technology News"</string>
     <string name="technology_news_enable" msgid="1908991199492598311">"Technology News enabled"</string>
     <string name="technology_news_disable" msgid="8388582607149800889">"Technology News disabled"</string>
@@ -435,20 +435,20 @@
   </string-array>
     <string name="cdma_activate_device" msgid="5914720276140097632">"Activate device"</string>
     <string name="cdma_lte_data_service" msgid="359786441782404562">"Set up data service"</string>
-    <string name="carrier_settings_title" msgid="6292869148169850220">"Provider settings"</string>
-    <string name="fdn" msgid="2545904344666098749">"Fixed dialling numbers"</string>
-    <string name="fdn_with_label" msgid="6412087553365709494">"Fixed dialling numbers (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
+    <string name="carrier_settings_title" msgid="6292869148169850220">"Carrier settings"</string>
+    <string name="fdn" msgid="2545904344666098749">"Fixed Dialing Numbers"</string>
+    <string name="fdn_with_label" msgid="6412087553365709494">"Fixed Dialing Numbers (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="manage_fdn_list" msgid="3341716430375195441">"FDN list"</string>
     <string name="fdn_list_with_label" msgid="1409655283510382556">"FDN list (<xliff:g id="SUBSCRIPTIONLABEL">%s</xliff:g>)"</string>
     <string name="fdn_activation" msgid="2178637004710435895">"FDN activation"</string>
-    <string name="fdn_enabled" msgid="7017355494808056447">"Fixed dialling numbers are enabled"</string>
-    <string name="fdn_disabled" msgid="6696468878037736600">"Fixed dialling numbers are disabled"</string>
+    <string name="fdn_enabled" msgid="7017355494808056447">"Fixed Dialing Numbers are enabled"</string>
+    <string name="fdn_disabled" msgid="6696468878037736600">"Fixed Dialing Numbers are disabled"</string>
     <string name="enable_fdn" msgid="4830555730418033723">"Enable FDN"</string>
     <string name="disable_fdn" msgid="3918794950264647541">"Disable FDN"</string>
     <string name="change_pin2" msgid="3110844547237754871">"Change PIN2"</string>
     <string name="enable_fdn_ok" msgid="5080925177369329827">"Disable FDN"</string>
     <string name="disable_fdn_ok" msgid="3745475926874838676">"Enable FDN"</string>
-    <string name="sum_fdn" msgid="6152246141642323582">"Manage fixed dialling numbers"</string>
+    <string name="sum_fdn" msgid="6152246141642323582">"Manage Fixed Dialing Numbers"</string>
     <string name="sum_fdn_change_pin" msgid="3510994280557335727">"Change PIN for FDN access"</string>
     <string name="sum_fdn_manage_list" msgid="3311397063233992907">"Manage phone number list"</string>
     <string name="voice_privacy" msgid="7346935172372181951">"Voice privacy"</string>
@@ -466,18 +466,18 @@
     <string name="name" msgid="1347432469852527784">"Name"</string>
     <string name="number" msgid="1564053487748491000">"Number"</string>
     <string name="save" msgid="983805790346099749">"Save"</string>
-    <string name="add_fdn_contact" msgid="1169713422306640887">"Add fixed dialling number"</string>
-    <string name="adding_fdn_contact" msgid="3112531600824361259">"Adding fixed dialling number…"</string>
-    <string name="fdn_contact_added" msgid="2840016151693394596">"Fixed dialling number added."</string>
-    <string name="edit_fdn_contact" msgid="6030829994819587408">"Edit fixed dialling number"</string>
-    <string name="updating_fdn_contact" msgid="6989341376868227150">"Updating fixed dialling number…"</string>
-    <string name="fdn_contact_updated" msgid="6876330243323118937">"Fixed dialling number updated."</string>
-    <string name="delete_fdn_contact" msgid="7027405651994507077">"Delete fixed dialling number"</string>
-    <string name="deleting_fdn_contact" msgid="6872320570844460428">"Deleting fixed dialling number…"</string>
-    <string name="fdn_contact_deleted" msgid="1680714996763848838">"Fixed dialling number deleted."</string>
+    <string name="add_fdn_contact" msgid="1169713422306640887">"Add fixed dialing number"</string>
+    <string name="adding_fdn_contact" msgid="3112531600824361259">"Adding fixed dialing number…"</string>
+    <string name="fdn_contact_added" msgid="2840016151693394596">"Fixed dialing number added."</string>
+    <string name="edit_fdn_contact" msgid="6030829994819587408">"Edit fixed dialing number"</string>
+    <string name="updating_fdn_contact" msgid="6989341376868227150">"Updating fixed dialing number…"</string>
+    <string name="fdn_contact_updated" msgid="6876330243323118937">"Fixed dialing number updated."</string>
+    <string name="delete_fdn_contact" msgid="7027405651994507077">"Delete fixed dialing number"</string>
+    <string name="deleting_fdn_contact" msgid="6872320570844460428">"Deleting fixed dialing number…"</string>
+    <string name="fdn_contact_deleted" msgid="1680714996763848838">"Fixed dialing number deleted."</string>
     <string name="pin2_invalid" msgid="2313954262684494442">"FDN wasn\'t updated because you typed an incorrect PIN."</string>
     <string name="fdn_invalid_number" msgid="9067189814657840439">"FDN wasn\'t updated because the number exceeds <xliff:g id="FDN_NUMBER_LIMIT_LENGTH">%d</xliff:g> digits."</string>
-    <string name="pin2_or_fdn_invalid" msgid="7542639487955868181">"FDN wasn\'t updated. The PIN2 was incorrect or the phone number was rejected."</string>
+    <string name="pin2_or_fdn_invalid" msgid="7542639487955868181">"FDN wasn\'t updated. The PIN2 was incorrect, or the phone number was rejected."</string>
     <string name="fdn_failed" msgid="216592346853420250">"FDN operation failed."</string>
     <string name="simContacts_emptyLoading" msgid="4989040293858675483">"Reading from SIM card…"</string>
     <string name="simContacts_empty" msgid="1135632055473689521">"No contacts on your SIM card."</string>
@@ -489,8 +489,8 @@
     <string name="oldPinLabel" msgid="8618515202411987721">"Old PIN"</string>
     <string name="newPinLabel" msgid="3585899083055354732">"New PIN"</string>
     <string name="confirmPinLabel" msgid="7783531218662473778">"Confirm new PIN"</string>
-    <string name="badPin" msgid="4549286285015892321">"The old PIN that you typed isn\'t correct. Try again."</string>
-    <string name="mismatchPin" msgid="1467254768290323845">"The PINs that you typed don\'t match. Try again."</string>
+    <string name="badPin" msgid="4549286285015892321">"The old PIN you typed isn\'t correct. Try again."</string>
+    <string name="mismatchPin" msgid="1467254768290323845">"The PINs you typed don\'t match. Try again."</string>
     <string name="invalidPin" msgid="7363723429414001979">"Type a PIN that is 4 to 8 numbers."</string>
     <string name="disable_sim_pin" msgid="3112303905548613752">"Clear SIM PIN"</string>
     <string name="enable_sim_pin" msgid="445461050748318980">"Set SIM PIN"</string>
@@ -520,8 +520,8 @@
     <string name="pin2_error_exception" msgid="8116103864600823641">"Network or SIM card error"</string>
     <string name="doneButton" msgid="7371209609238460207">"Done"</string>
     <string name="voicemail_settings_number_label" msgid="1265118640154688162">"Voicemail number"</string>
-    <string name="card_title_dialing" msgid="8742182654254431781">"Dialling"</string>
-    <string name="card_title_redialing" msgid="18130232613559964">"Redialling"</string>
+    <string name="card_title_dialing" msgid="8742182654254431781">"Dialing"</string>
+    <string name="card_title_redialing" msgid="18130232613559964">"Redialing"</string>
     <string name="card_title_conf_call" msgid="901197309274457427">"Conference call"</string>
     <string name="card_title_incoming_call" msgid="881424648458792430">"Incoming call"</string>
     <string name="card_title_call_ended" msgid="650223980095026340">"Call ended"</string>
@@ -541,10 +541,10 @@
     <string name="incall_error_ecm_emergency_only" msgid="5622379058883722080">"Exit emergency callback mode to make a non-emergency call."</string>
     <string name="incall_error_emergency_only" msgid="8786127461027964653">"Not registered on network."</string>
     <string name="incall_error_out_of_service" msgid="1927265196942672791">"Mobile network not available."</string>
-    <string name="incall_error_out_of_service_wfc" msgid="4497663185857190885">"Mobile network isn\'t available. Connect to a wireless network to make a call."</string>
+    <string name="incall_error_out_of_service_wfc" msgid="4497663185857190885">"Mobile network is not available. Connect to a wireless network to make a call."</string>
     <string name="incall_error_no_phone_number_supplied" msgid="8680831089508851894">"To place a call, enter a valid number."</string>
     <string name="incall_error_call_failed" msgid="393508653582682539">"Call failed."</string>
-    <string name="incall_error_cannot_add_call" msgid="5425764862628655443">"Call cannot be added at this time. You can try to get in touch by sending a message."</string>
+    <string name="incall_error_cannot_add_call" msgid="5425764862628655443">"Call cannot be added at this time. You can try to reach out by sending a message."</string>
     <string name="incall_error_supp_service_unknown" msgid="8751177117194592623">"Service not supported"</string>
     <string name="incall_error_supp_service_switch" msgid="5272822448189448479">"Can\'t switch calls."</string>
     <string name="incall_error_supp_service_resume" msgid="1276861499306817035">"Can\'t resume call."</string>
@@ -577,7 +577,7 @@
     <string name="dialerKeyboardHintText" msgid="1115266533703764049">"Use keyboard to dial"</string>
     <string name="onscreenHoldText" msgid="4025348842151665191">"Hold"</string>
     <string name="onscreenEndCallText" msgid="6138725377654842757">"End"</string>
-    <string name="onscreenShowDialpadText" msgid="658465753816164079">"Dial pad"</string>
+    <string name="onscreenShowDialpadText" msgid="658465753816164079">"Dialpad"</string>
     <string name="onscreenMuteText" msgid="5470306116733843621">"Mute"</string>
     <string name="onscreenAddCallText" msgid="9075675082903611677">"Add call"</string>
     <string name="onscreenMergeCallsText" msgid="3692389519611225407">"Merge calls"</string>
@@ -593,14 +593,14 @@
     <string name="singleContactImportedMsg" msgid="3619804066300998934">"Imported contact"</string>
     <string name="failedToImportSingleContactMsg" msgid="228095510489830266">"Failed to import contact"</string>
     <string name="hac_mode_title" msgid="4127986689621125468">"Hearing aids"</string>
-    <string name="hac_mode_summary" msgid="7774989500136009881">"Turn on hearing-aid compatibility"</string>
+    <string name="hac_mode_summary" msgid="7774989500136009881">"Turn on hearing aid compatibility"</string>
     <string name="rtt_mode_title" msgid="3075948111362818043">"Real-time text (RTT) call"</string>
     <string name="rtt_mode_summary" msgid="8631541375609989562">"Allow messaging within a voice call"</string>
-    <string name="rtt_mode_more_information" msgid="587500128658756318">"RTT assists callers who are deaf, hard of hearing, have a speech disability or need more than voice alone.&lt;br&gt; &lt;a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>&gt;Learn more&lt;/a&gt;\n       &lt;br&gt;&lt;br&gt; – RTT calls are saved as a message transcript\n       &lt;br&gt; – RTT is not available for video calls"</string>
+    <string name="rtt_mode_more_information" msgid="587500128658756318">"RTT assists callers who are deaf, hard of hearing, have a speech disability, or need more than voice alone.&lt;br&gt; &lt;a href=<xliff:g id="URL">http://support.google.com/mobile?p=telephony_rtt</xliff:g>&gt;Learn more&lt;/a&gt;\n       &lt;br&gt;&lt;br&gt; - RTT calls are saved as a message transcript\n       &lt;br&gt; - RTT is not available for video calls"</string>
     <string name="no_rtt_when_roaming" msgid="5268008247378355389">"Note: RTT is not available while roaming"</string>
   <string-array name="tty_mode_entries">
-    <item msgid="3238070884803849303">"TTY off"</item>
-    <item msgid="1449091874731375214">"TTY full"</item>
+    <item msgid="3238070884803849303">"TTY Off"</item>
+    <item msgid="1449091874731375214">"TTY Full"</item>
     <item msgid="1044179293199519425">"TTY HCO"</item>
     <item msgid="2131559553795606483">"TTY VCO"</item>
   </string-array>
@@ -617,7 +617,7 @@
     <string name="ota_hfa_activation_title" msgid="3300556778212729671">"Activating..."</string>
     <string name="ota_hfa_activation_dialog_message" msgid="7921718445773342996">"The phone is activating your mobile data service.\n\nThis can take up to 5 minutes."</string>
     <string name="ota_skip_activation_dialog_title" msgid="7666611236789203797">"Skip activation?"</string>
-    <string name="ota_skip_activation_dialog_message" msgid="6691722887019708713">"If you skip activation, you can\'t place calls or connect to mobile data networks (though you can connect to Wi-Fi networks). Until you activate your phone, you are asked to activate it each time that you turn it on."</string>
+    <string name="ota_skip_activation_dialog_message" msgid="6691722887019708713">"If you skip activation, you can\'t place calls or connect to mobile data networks (though you can connect to Wi-Fi networks). Until you activate your phone, you are asked to activate it each time you turn it on."</string>
     <string name="ota_skip_activation_dialog_skip_label" msgid="5908029466817825633">"Skip"</string>
     <string name="ota_activate" msgid="7939695753665438357">"Activate"</string>
     <string name="ota_title_activate_success" msgid="1272135024761004889">"Phone is activated."</string>
@@ -625,9 +625,9 @@
     <string name="ota_listen" msgid="2772252405488894280">"Follow the spoken instructions until you hear that activation is complete."</string>
     <string name="ota_speaker" msgid="1086766980329820528">"Speaker"</string>
     <string name="ota_progress" msgid="8837259285255700132">"Programming your phone…"</string>
-    <string name="ota_failure" msgid="5674217489921481576">"Couldn\'t programme your phone"</string>
+    <string name="ota_failure" msgid="5674217489921481576">"Couldn\'t program your phone"</string>
     <string name="ota_successful" msgid="1106825981548107774">"Your phone is now activated. It may take up to 15 minutes for service to start."</string>
-    <string name="ota_unsuccessful" msgid="8531037653803955754">"Your phone didn\'t activate. \nYou may need to find an area with better coverage (near a window or outside). \n\nTry again or call customer service for more options."</string>
+    <string name="ota_unsuccessful" msgid="8531037653803955754">"Your phone didn\'t activate. \nYou may need to find an area with better coverage (near a window, or outside). \n\nTry again or call customer service for more options."</string>
     <string name="ota_spc_failure" msgid="904092035241370080">"EXCESS SPC FAILURES"</string>
     <string name="ota_call_end" msgid="8657746378290737034">"Back"</string>
     <string name="ota_try_again" msgid="6914781945599998550">"Try again"</string>
@@ -637,9 +637,9 @@
     <string name="phone_in_ecm_notification_title" msgid="6825016389926367946">"Emergency Callback Mode"</string>
     <string name="phone_in_ecm_call_notification_text" msgid="653972232922670335">"Data connection disabled"</string>
     <string name="phone_in_ecm_notification_complete_time" msgid="7341624337163082759">"No data connection until <xliff:g id="COMPLETETIME">%s</xliff:g>"</string>
-    <string name="alert_dialog_exit_ecm" msgid="7661603870224398025">"{count,plural, =1{The phone will be in emergency callback mode for one minute. While in this mode, no apps using a data connection can be used. Do you want to exit now?}other{The phone will be in emergency callback mode for %s minutes. While in this mode, no applications using a data connection can be used. Do you want to exit now?}}"</string>
-    <string name="alert_dialog_not_avaialble_in_ecm" msgid="8717711120099503279">"{count,plural, =1{The selected action isn\'t available while in the emergency callback mode. The phone will be in this mode for one minute. Do you want to exit now?}other{The selected action isn\'t available while in the emergency callback mode. The phone will be in this mode for %s minutes. Do you want to exit now?}}"</string>
-    <string name="alert_dialog_in_ecm_call" msgid="1207545603149771978">"The action selected isn\'t available during an emergency call."</string>
+    <string name="alert_dialog_exit_ecm" msgid="7661603870224398025">"{count,plural, =1{The phone will be in Emergency Callback mode for one minute. While in this mode no apps using a data connection can be used. Do you want to exit now?}other{The phone will be in Emergency Callback mode for %s minutes. While in this mode no applications using a data connection can be used. Do you want to exit now?}}"</string>
+    <string name="alert_dialog_not_avaialble_in_ecm" msgid="8717711120099503279">"{count,plural, =1{The selected action isn\'t available while in the Emergency Callback mode. The phone will be in this mode for one minute. Do you want to exit now?}other{The selected action isn\'t available while in the Emergency Callback mode. The phone will be in this mode for %s minutes. Do you want to exit now?}}"</string>
+    <string name="alert_dialog_in_ecm_call" msgid="1207545603149771978">"The selected action isn\'t available while in an emergency call."</string>
     <string name="progress_dialog_exiting_ecm" msgid="9159080081676927217">"Exiting Emergency Callback mode"</string>
     <string name="alert_dialog_yes" msgid="3532525979632841417">"Yes"</string>
     <string name="alert_dialog_no" msgid="1075632654085988420">"No"</string>
@@ -657,8 +657,8 @@
     <string name="selectContact" msgid="1527612842599767382">"select contact"</string>
     <string name="not_voice_capable" msgid="2819996734252084253">"Voice calling not supported"</string>
     <string name="description_dial_button" msgid="8614631902795087259">"dial"</string>
-    <string name="description_dialpad_button" msgid="7395114120463883623">"show dial pad"</string>
-    <string name="pane_title_emergency_dialpad" msgid="3627372514638694401">"Emergency dial pad"</string>
+    <string name="description_dialpad_button" msgid="7395114120463883623">"show dialpad"</string>
+    <string name="pane_title_emergency_dialpad" msgid="3627372514638694401">"Emergency Dialpad"</string>
     <string name="voicemail_visual_voicemail_switch_title" msgid="6610414098912832120">"Visual Voicemail"</string>
     <string name="voicemail_set_pin_dialog_title" msgid="7005128605986960003">"Set PIN"</string>
     <string name="voicemail_change_pin_dialog_title" msgid="4633077715231764435">"Change PIN"</string>
@@ -677,7 +677,7 @@
     <string name="message_decode_error" msgid="1061856591500290887">"There was an error while decoding the message."</string>
     <string name="callFailed_cdma_activation" msgid="5392057031552253550">"A SIM card has activated your service and updated your phone\'s roaming capabilities."</string>
     <string name="callFailed_cdma_call_limit" msgid="1074219746093031412">"There are too many active calls. Please end or merge existing calls before placing a new one."</string>
-    <string name="callFailed_imei_not_accepted" msgid="7257903653685147251">"Unable to connect. Please insert a valid SIM card."</string>
+    <string name="callFailed_imei_not_accepted" msgid="7257903653685147251">"Unable to connect, please insert a valid SIM card."</string>
     <string name="callFailed_wifi_lost" msgid="1788036730589163141">"Wi-Fi connection lost. Call ended."</string>
     <string name="dialFailed_low_battery" msgid="6857904237423407056">"Your video call cannot be placed due to low battery."</string>
     <string name="callFailed_low_battery" msgid="4056828320214416182">"Video call ended due to low battery."</string>
@@ -686,11 +686,11 @@
     <string name="change_pin_title" msgid="3564254326626797321">"Change Voicemail PIN"</string>
     <string name="change_pin_continue_label" msgid="5177011752453506371">"Continue"</string>
     <string name="change_pin_cancel_label" msgid="2301711566758827936">"Cancel"</string>
-    <string name="change_pin_ok_label" msgid="6861082678817785330">"OK"</string>
+    <string name="change_pin_ok_label" msgid="6861082678817785330">"Ok"</string>
     <string name="change_pin_enter_old_pin_header" msgid="853151335217594829">"Confirm your old PIN"</string>
     <string name="change_pin_enter_old_pin_hint" msgid="8801292976275169367">"Enter your voicemail PIN to continue."</string>
     <string name="change_pin_enter_new_pin_header" msgid="4739465616733486118">"Set a new PIN"</string>
-    <string name="change_pin_enter_new_pin_hint" msgid="2326038476516364210">"PIN must be <xliff:g id="MIN">%1$d</xliff:g>-<xliff:g id="MAX">%2$d</xliff:g> digits long."</string>
+    <string name="change_pin_enter_new_pin_hint" msgid="2326038476516364210">"PIN must be <xliff:g id="MIN">%1$d</xliff:g>-<xliff:g id="MAX">%2$d</xliff:g> digits."</string>
     <string name="change_pin_confirm_pin_header" msgid="2606303906320705726">"Confirm your PIN"</string>
     <string name="change_pin_confirm_pins_dont_match" msgid="305164501222587215">"PINs don\'t match"</string>
     <string name="change_pin_succeeded" msgid="2504705600693014403">"Voicemail PIN updated"</string>
@@ -787,14 +787,14 @@
     <string name="call_barring_change_pwd_description" msgid="1274245130382054227">"Change call barring password"</string>
     <string name="call_barring_change_pwd_description_disabled" msgid="2911647051915343920">"Cannot change call barring password"</string>
     <string name="call_barring_pwd_not_match" msgid="7638198747579019826">"Passwords do not match"</string>
-    <string name="call_barring_right_pwd_number" msgid="3860630926460851330">"Enter a password with four numbers"</string>
+    <string name="call_barring_right_pwd_number" msgid="3860630926460851330">"Enter a password with 4 numbers"</string>
     <string name="call_barring_change_pwd_success" msgid="1837437691277936903">"Password changed"</string>
     <string name="call_barring_old_pwd" msgid="5500085633281388281">"Old password"</string>
     <string name="call_barring_new_pwd" msgid="2515524903813227732">"New password"</string>
     <string name="call_barring_confirm_pwd" msgid="7552526161616461858">"Confirm password"</string>
     <string name="messageCallBarring" msgid="5537730400652466912">"Enter password"</string>
     <string name="call_barring_settings" msgid="4616607285790258919">"Call barring settings"</string>
-    <string name="callFailed_NetworkBusy" msgid="5437103975842913681">"Network is busy. Please try placing your call again later."</string>
+    <string name="callFailed_NetworkBusy" msgid="5437103975842913681">"Network is busy. Please try your call again later."</string>
     <string name="callFailed_NetworkCongested" msgid="6801283142342775380">"Network is congested. Contact your mobile operator for assistance."</string>
     <string name="supp_service_notification_call_deflected" msgid="4980942818105909813">"Call deflected."</string>
     <string name="supp_service_notification_call_forwarded" msgid="7102930311735433088">"Call forwarded."</string>
@@ -814,49 +814,49 @@
     <string name="supp_service_conference_call" msgid="4004193534408317148">"Joining conference call."</string>
     <string name="supp_service_held_call_released" msgid="2847835124639112410">"Held call has been released."</string>
     <string name="callFailed_otasp_provisioning_in_process" msgid="3345666183602879326">"Cannot place a call as the device is currently being provisioned."</string>
-    <string name="callFailed_already_dialing" msgid="7250591188960691086">"Cannot place a call as another outgoing call is already dialling."</string>
+    <string name="callFailed_already_dialing" msgid="7250591188960691086">"Cannot place a call as another outgoing call is already dialing."</string>
     <string name="callFailed_already_ringing" msgid="2376603543544289303">"Cannot place a call as there is an unanswered incoming call. Answer or reject the incoming call prior to placing a new call."</string>
     <string name="callFailed_calling_disabled" msgid="5010992739401206283">"Cannot place a call as calling has been disabled using the ro.telephony.disable-call system property."</string>
     <string name="callFailed_too_many_calls" msgid="2761754044990799580">"Cannot place a call as there are already two calls in progress. Disconnect one of the calls or merge them into a conference prior to placing a new call."</string>
-    <string name="supp_service_over_ut_precautions" msgid="2145018231396701311">"To use <xliff:g id="SUPP_SERVICE">%s</xliff:g>, make sure that mobile data is turned on. You can change this in mobile network settings."</string>
-    <string name="supp_service_over_ut_precautions_roaming" msgid="670342104569972327">"To use <xliff:g id="SUPP_SERVICE">%s</xliff:g>, make sure that mobile data and data roaming are turned on. You can change these in mobile network settings."</string>
-    <string name="supp_service_over_ut_precautions_dual_sim" msgid="5166866975550910474">"To use <xliff:g id="SUPP_SERVICE">%1$s</xliff:g>, make sure that mobile data is turned on for SIM <xliff:g id="SIM_NUMBER">%2$d</xliff:g>. You can change this in mobile network settings."</string>
-    <string name="supp_service_over_ut_precautions_roaming_dual_sim" msgid="6627654855191817965">"To use <xliff:g id="SUPP_SERVICE">%1$s</xliff:g>, make sure that mobile data and data roaming are turned on for SIM <xliff:g id="SIM_NUMBER">%2$d</xliff:g>. You can change these in mobile network settings."</string>
+    <string name="supp_service_over_ut_precautions" msgid="2145018231396701311">"To use <xliff:g id="SUPP_SERVICE">%s</xliff:g>, make sure mobile data is turned on. You can change this in mobile network settings."</string>
+    <string name="supp_service_over_ut_precautions_roaming" msgid="670342104569972327">"To use <xliff:g id="SUPP_SERVICE">%s</xliff:g>, make sure mobile data and data roaming are turned on. You can change these in mobile network settings."</string>
+    <string name="supp_service_over_ut_precautions_dual_sim" msgid="5166866975550910474">"To use <xliff:g id="SUPP_SERVICE">%1$s</xliff:g>, make sure mobile data is turned on for SIM <xliff:g id="SIM_NUMBER">%2$d</xliff:g>. You can change this in mobile network settings."</string>
+    <string name="supp_service_over_ut_precautions_roaming_dual_sim" msgid="6627654855191817965">"To use <xliff:g id="SUPP_SERVICE">%1$s</xliff:g>, make sure mobile data and data roaming are turned on for SIM <xliff:g id="SIM_NUMBER">%2$d</xliff:g>. You can change these in mobile network settings."</string>
     <string name="supp_service_over_ut_precautions_dialog_dismiss" msgid="5934541487903081652">"Dismiss"</string>
-    <string name="radio_info_data_connection_enable" msgid="6183729739783252840">"Enable data connection"</string>
-    <string name="radio_info_data_connection_disable" msgid="6404751291511368706">"Disable data connection"</string>
-    <string name="volte_provisioned_switch_string" msgid="4812874990480336178">"VoLTE provisioned"</string>
-    <string name="vt_provisioned_switch_string" msgid="8295542122512195979">"Video calling provisioned"</string>
-    <string name="wfc_provisioned_switch_string" msgid="3835004640321078988">"Wi-Fi calling provisioned"</string>
-    <string name="eab_provisioned_switch_string" msgid="4449676720736033035">"EAB/Presence provisioned"</string>
-    <string name="cbrs_data_switch_string" msgid="6060356430838077653">"CBRS data"</string>
+    <string name="radio_info_data_connection_enable" msgid="6183729739783252840">"Enable Data Connection"</string>
+    <string name="radio_info_data_connection_disable" msgid="6404751291511368706">"Disable Data Connection"</string>
+    <string name="volte_provisioned_switch_string" msgid="4812874990480336178">"VoLTE Provisioned"</string>
+    <string name="vt_provisioned_switch_string" msgid="8295542122512195979">"Video Calling Provisioned"</string>
+    <string name="wfc_provisioned_switch_string" msgid="3835004640321078988">"Wifi Calling Provisioned"</string>
+    <string name="eab_provisioned_switch_string" msgid="4449676720736033035">"EAB/Presence Provisioned"</string>
+    <string name="cbrs_data_switch_string" msgid="6060356430838077653">"Cbrs Data"</string>
     <string name="dsds_switch_string" msgid="7564769822086764796">"Enable DSDS"</string>
-    <string name="dsds_dialog_title" msgid="8494569893941847575">"Restart device?"</string>
+    <string name="dsds_dialog_title" msgid="8494569893941847575">"Restart Device?"</string>
     <string name="dsds_dialog_message" msgid="4047480385678538850">"You need to restart your device to change this setting."</string>
     <string name="dsds_dialog_confirm" msgid="9032004888134129885">"Restart"</string>
     <string name="dsds_dialog_cancel" msgid="3245958947099586655">"Cancel"</string>
-    <string name="removable_esim_string" msgid="7931369811671787649">"Set removable eSIM as default"</string>
-    <string name="radio_info_radio_power" msgid="8805595022160471587">"Mobile radio power"</string>
-    <string name="simulate_out_of_service_string" msgid="7787925611727597193">"Simulate out of service (debug build only)"</string>
-    <string name="radioInfo_menu_viewADN" msgid="4533179730908559846">"View SIM address book"</string>
-    <string name="radioInfo_menu_viewFDN" msgid="1847236480527032061">"View fixed dialling numbers"</string>
-    <string name="radioInfo_menu_viewSDN" msgid="2613431584522392842">"View service dialling numbers"</string>
-    <string name="radioInfo_menu_getIMS" msgid="1950869267853198232">"IMS service status"</string>
-    <string name="radio_info_ims_reg_status_title" msgid="6875885401313992007">"IMS status"</string>
+    <string name="removable_esim_string" msgid="7931369811671787649">"Set Removable eSIM as Default"</string>
+    <string name="radio_info_radio_power" msgid="8805595022160471587">"Mobile Radio Power"</string>
+    <string name="simulate_out_of_service_string" msgid="7787925611727597193">"Simulate Out of Service (Debug Build only)"</string>
+    <string name="radioInfo_menu_viewADN" msgid="4533179730908559846">"View SIM Address Book"</string>
+    <string name="radioInfo_menu_viewFDN" msgid="1847236480527032061">"View Fixed Dialing Numbers"</string>
+    <string name="radioInfo_menu_viewSDN" msgid="2613431584522392842">"View Service Dialing Numbers"</string>
+    <string name="radioInfo_menu_getIMS" msgid="1950869267853198232">"IMS Service Status"</string>
+    <string name="radio_info_ims_reg_status_title" msgid="6875885401313992007">"IMS Status"</string>
     <string name="radio_info_ims_reg_status_registered" msgid="7095182114078864326">"Registered"</string>
-    <string name="radio_info_ims_reg_status_not_registered" msgid="8045821447288876085">"Not registered"</string>
+    <string name="radio_info_ims_reg_status_not_registered" msgid="8045821447288876085">"Not Registered"</string>
     <string name="radio_info_ims_feature_status_available" msgid="6493200914756969292">"Available"</string>
     <string name="radio_info_ims_feature_status_unavailable" msgid="8930391136839759778">"Unavailable"</string>
-    <string name="radio_info_ims_reg_status" msgid="25582845222446390">"IMS registration: <xliff:g id="STATUS">%1$s</xliff:g>\nVoice over LTE: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nVoice over Wi-Fi: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nVideo calling: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT interface: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
-    <string name="radioInfo_service_in" msgid="45753418231446400">"In service"</string>
-    <string name="radioInfo_service_out" msgid="287972405416142312">"Out of service"</string>
-    <string name="radioInfo_service_emergency" msgid="4763879891415016848">"Emergency calls only"</string>
-    <string name="radioInfo_service_off" msgid="3456583511226783064">"Radio off"</string>
+    <string name="radio_info_ims_reg_status" msgid="25582845222446390">"IMS Registration: <xliff:g id="STATUS">%1$s</xliff:g>\nVoice over LTE: <xliff:g id="AVAILABILITY_0">%2$s</xliff:g>\nVoice over WiFi: <xliff:g id="AVAILABILITY_1">%3$s</xliff:g>\nVideo Calling: <xliff:g id="AVAILABILITY_2">%4$s</xliff:g>\nUT Interface: <xliff:g id="AVAILABILITY_3">%5$s</xliff:g>"</string>
+    <string name="radioInfo_service_in" msgid="45753418231446400">"In Service"</string>
+    <string name="radioInfo_service_out" msgid="287972405416142312">"Out of Service"</string>
+    <string name="radioInfo_service_emergency" msgid="4763879891415016848">"Emergency Calls Only"</string>
+    <string name="radioInfo_service_off" msgid="3456583511226783064">"Radio Off"</string>
     <string name="radioInfo_roaming_in" msgid="3156335577793145965">"Roaming"</string>
-    <string name="radioInfo_roaming_not" msgid="1904547918725478110">"Not roaming"</string>
+    <string name="radioInfo_roaming_not" msgid="1904547918725478110">"Not Roaming"</string>
     <string name="radioInfo_phone_idle" msgid="2191653783170757819">"Idle"</string>
     <string name="radioInfo_phone_ringing" msgid="8100354169567413370">"Ringing"</string>
-    <string name="radioInfo_phone_offhook" msgid="7564601639749936170">"Call in progress"</string>
+    <string name="radioInfo_phone_offhook" msgid="7564601639749936170">"Call in Progress"</string>
     <string name="radioInfo_data_disconnected" msgid="8085447971880814541">"Disconnected"</string>
     <string name="radioInfo_data_connecting" msgid="925092271092152472">"Connecting"</string>
     <string name="radioInfo_data_connected" msgid="7637335645634239508">"Connected"</string>
@@ -868,56 +868,56 @@
     <string name="radioInfo_display_asu" msgid="2247752203249646956">"asu"</string>
     <string name="radioInfo_lac" msgid="3892986460272607013">"LAC"</string>
     <string name="radioInfo_cid" msgid="1423185536264406705">"CID"</string>
-    <string name="radio_info_subid" msgid="6839966868621703203">"Current subID:"</string>
+    <string name="radio_info_subid" msgid="6839966868621703203">"Current subId:"</string>
     <string name="radio_info_dds" msgid="1122593144425697126">"SubId of default data SIM:"</string>
-    <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL bandwidth (kbps):"</string>
-    <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL bandwidth (kbps):"</string>
-    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE physical channel configuration:"</string>
-    <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Mobile info refresh rate:"</string>
-    <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"All mobile measurement info:"</string>
-    <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Data service:"</string>
+    <string name="radio_info_dl_kbps" msgid="2382922659525318726">"DL Bandwidth (kbps):"</string>
+    <string name="radio_info_ul_kbps" msgid="2102225400904799036">"UL Bandwidth (kbps):"</string>
+    <string name="radio_info_phy_chan_config" msgid="1277949603275436081">"LTE Physical Channel Configuration:"</string>
+    <string name="radio_info_cell_info_refresh_rate" msgid="670511448975997340">"Cell Info Refresh Rate:"</string>
+    <string name="radio_info_cellinfo_label" msgid="8199062974670377659">"All Cell Measurement Info:"</string>
+    <string name="radio_info_gprs_service_label" msgid="6819204246355412952">"Data Service:"</string>
     <string name="radio_info_roaming_label" msgid="6636932886446857120">"Roaming:"</string>
     <string name="radio_info_imei_label" msgid="8947899706930120368">"IMEI:"</string>
-    <string name="radio_info_call_redirect_label" msgid="4526480903023362276">"Call redirect:"</string>
-    <string name="radio_info_ppp_resets_label" msgid="9131901102339077661">"Number of PPP reset since boot:"</string>
-    <string name="radio_info_current_network_label" msgid="3052098695239642450">"Current network:"</string>
-    <string name="radio_info_ppp_received_label" msgid="5753592451640644889">"Data received:"</string>
-    <string name="radio_info_gsm_service_label" msgid="6443348321714241328">"Voice service:"</string>
-    <string name="radio_info_signal_strength_label" msgid="5545444702102543260">"Signal strength"</string>
-    <string name="radio_info_call_status_label" msgid="7693575431923095487">"Voice call status:"</string>
-    <string name="radio_info_ppp_sent_label" msgid="6542208429356199695">"Data sent"</string>
-    <string name="radio_info_message_waiting_label" msgid="1886549432566952078">"Message waiting:"</string>
-    <string name="radio_info_phone_number_label" msgid="2533852539562512203">"Phone number:"</string>
-    <string name="radio_info_band_mode_label" msgid="23480556225515290">"Select radio band"</string>
-    <string name="radio_info_voice_network_type_label" msgid="2395347336419593265">"Voice network type:"</string>
-    <string name="radio_info_data_network_type_label" msgid="8886597029237501929">"Data network type:"</string>
-    <string name="radio_info_override_network_type_label" msgid="4176280017221092005">"Override network type:"</string>
+    <string name="radio_info_call_redirect_label" msgid="4526480903023362276">"Call Redirect:"</string>
+    <string name="radio_info_ppp_resets_label" msgid="9131901102339077661">"Number of PPP Reset Since Boot:"</string>
+    <string name="radio_info_current_network_label" msgid="3052098695239642450">"Current Network:"</string>
+    <string name="radio_info_ppp_received_label" msgid="5753592451640644889">"Data Received:"</string>
+    <string name="radio_info_gsm_service_label" msgid="6443348321714241328">"Voice Service:"</string>
+    <string name="radio_info_signal_strength_label" msgid="5545444702102543260">"Signal Strength:"</string>
+    <string name="radio_info_call_status_label" msgid="7693575431923095487">"Voice Call Status:"</string>
+    <string name="radio_info_ppp_sent_label" msgid="6542208429356199695">"Data Sent:"</string>
+    <string name="radio_info_message_waiting_label" msgid="1886549432566952078">"Message Waiting:"</string>
+    <string name="radio_info_phone_number_label" msgid="2533852539562512203">"Phone Number:"</string>
+    <string name="radio_info_band_mode_label" msgid="23480556225515290">"Select Radio Band"</string>
+    <string name="radio_info_voice_network_type_label" msgid="2395347336419593265">"Voice Network Type:"</string>
+    <string name="radio_info_data_network_type_label" msgid="8886597029237501929">"Data Network Type:"</string>
+    <string name="radio_info_override_network_type_label" msgid="4176280017221092005">"Override Network Type:"</string>
     <string name="phone_index_label" msgid="6222406512768964268">"Select phone index"</string>
-    <string name="radio_info_set_perferred_label" msgid="7408131389363136210">"Set preferred network type:"</string>
-    <string name="radio_info_ping_hostname_v4" msgid="6951237885381284790">"Ping hostname(www.google.com) IPv4:"</string>
-    <string name="radio_info_ping_hostname_v6" msgid="2748637889486554603">"Ping hostname(www.google.com) IPv6:"</string>
-    <string name="radio_info_http_client_test" msgid="1329583721088428238">"HTTP client test:"</string>
-    <string name="ping_test_label" msgid="448617502935719694">"Run ping test"</string>
+    <string name="radio_info_set_perferred_label" msgid="7408131389363136210">"Set Preferred Network Type:"</string>
+    <string name="radio_info_ping_hostname_v4" msgid="6951237885381284790">"Ping Hostname(www.google.com) IPv4:"</string>
+    <string name="radio_info_ping_hostname_v6" msgid="2748637889486554603">"Ping Hostname(www.google.com) IPv6:"</string>
+    <string name="radio_info_http_client_test" msgid="1329583721088428238">"HTTP Client Test:"</string>
+    <string name="ping_test_label" msgid="448617502935719694">"Run Ping Test"</string>
     <string name="radio_info_smsc_label" msgid="3749927072726033763">"SMSC:"</string>
     <string name="radio_info_smsc_update_label" msgid="5141996256097115753">"Update"</string>
     <string name="radio_info_smsc_refresh_label" msgid="8409923721451604560">"Refresh"</string>
-    <string name="radio_info_toggle_dns_check_label" msgid="1394078554927787350">"Toggle DNS check"</string>
-    <string name="oem_radio_info_label" msgid="2914167475119997456">"OEM-specific info/settings"</string>
-    <string name="radio_info_endc_available" msgid="2983767110681230019">"EN-DC available (NSA):"</string>
-    <string name="radio_info_dcnr_restricted" msgid="7147511536420148173">"DCNR restricted (NSA):"</string>
-    <string name="radio_info_nr_available" msgid="3383388088451237182">"NR available (NSA):"</string>
-    <string name="radio_info_nr_state" msgid="4158805093187555149">"NR state (NSA):"</string>
-    <string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR frequency:"</string>
-    <string name="band_mode_title" msgid="7988822920724576842">"Set radio band mode"</string>
-    <string name="band_mode_loading" msgid="795923726636735967">"Loading band list…"</string>
+    <string name="radio_info_toggle_dns_check_label" msgid="1394078554927787350">"Toggle DNS Check"</string>
+    <string name="oem_radio_info_label" msgid="2914167475119997456">"OEM-specific Info/Settings"</string>
+    <string name="radio_info_endc_available" msgid="2983767110681230019">"EN-DC Available (NSA):"</string>
+    <string name="radio_info_dcnr_restricted" msgid="7147511536420148173">"DCNR Restricted (NSA):"</string>
+    <string name="radio_info_nr_available" msgid="3383388088451237182">"NR Available (NSA):"</string>
+    <string name="radio_info_nr_state" msgid="4158805093187555149">"NR State (NSA):"</string>
+    <string name="radio_info_nr_frequency" msgid="1201156032796584128">"NR Frequency:"</string>
+    <string name="band_mode_title" msgid="7988822920724576842">"Set Radio Band Mode"</string>
+    <string name="band_mode_loading" msgid="795923726636735967">"Loading Band List…"</string>
     <string name="band_mode_set" msgid="6657819412803771421">"Set"</string>
     <string name="band_mode_failed" msgid="1707488541847192924">"Unsuccessful"</string>
     <string name="band_mode_succeeded" msgid="2230018000534761063">"Successful"</string>
     <string name="phone_info_label" product="tablet" msgid="7477478709388477397">"Tablet info"</string>
     <string name="phone_info_label" product="default" msgid="1784175881556791433">"Phone info"</string>
-    <string name="carrier_provisioning" msgid="2668065041869578376">"Operator provisioning info"</string>
-    <string name="trigger_carrier_provisioning" msgid="1301829588620638234">"Trigger operator provisioning"</string>
-    <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Your Bluetooth signal is weak. Try switching to speakerphone."</string>
-    <string name="call_quality_notification_name" msgid="3476828289553948830">"Call quality notification"</string>
+    <string name="carrier_provisioning" msgid="2668065041869578376">"Carrier Provisioning Info"</string>
+    <string name="trigger_carrier_provisioning" msgid="1301829588620638234">"Trigger Carrier Provisioning"</string>
+    <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Your bluetooth signal is weak. Try switching to speakerphone."</string>
+    <string name="call_quality_notification_name" msgid="3476828289553948830">"Call Quality Notification"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Deprecated SIP accounts"</string>
 </resources>
diff --git a/res/values-es-rUS/strings.xml b/res/values-es-rUS/strings.xml
index f8e97eb..2ba08e9 100644
--- a/res/values-es-rUS/strings.xml
+++ b/res/values-es-rUS/strings.xml
@@ -34,7 +34,7 @@
     <string name="enter_input" msgid="6193628663039958990">"El mensaje USSD debe tener entre <xliff:g id="MIN_LEN">%1$d</xliff:g> y <xliff:g id="MAX_LEN">%2$d</xliff:g> caracteres. Vuelve a intentarlo."</string>
     <string name="manageConferenceLabel" msgid="8415044818156353233">"Administrar conferencia telefónica"</string>
     <string name="ok" msgid="7818974223666140165">"Aceptar"</string>
-    <string name="audio_mode_speaker" msgid="243689733219312360">"Altavoz"</string>
+    <string name="audio_mode_speaker" msgid="243689733219312360">"Bocina"</string>
     <string name="audio_mode_earpiece" msgid="2823700267171134282">"Auricular"</string>
     <string name="audio_mode_wired_headset" msgid="5028010823105817443">"Auriculares con cable"</string>
     <string name="audio_mode_bluetooth" msgid="25732183428018809">"Bluetooth"</string>
@@ -917,7 +917,7 @@
     <string name="phone_info_label" product="default" msgid="1784175881556791433">"Información del teléfono"</string>
     <string name="carrier_provisioning" msgid="2668065041869578376">"Información del aprovisionamiento del proveedor"</string>
     <string name="trigger_carrier_provisioning" msgid="1301829588620638234">"Activar aprovisionamiento del proveedor"</string>
-    <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Tu señal de Bluetooth es débil. Intenta cambiar al altavoz."</string>
+    <string name="call_quality_notification_bluetooth_details" msgid="8348950331707346711">"Tu señal de Bluetooth es débil. Intenta cambiar a la bocina."</string>
     <string name="call_quality_notification_name" msgid="3476828289553948830">"Notificación de calidad de llamada"</string>
     <string name="notification_channel_sip_account" msgid="1261816025156179637">"Cuentas SIP obsoletas"</string>
 </resources>
diff --git a/res/values-ja/strings.xml b/res/values-ja/strings.xml
index 98579aa..4d9f50d 100644
--- a/res/values-ja/strings.xml
+++ b/res/values-ja/strings.xml
@@ -662,7 +662,7 @@
     <string name="voicemail_visual_voicemail_switch_title" msgid="6610414098912832120">"ビジュアル留守番電話"</string>
     <string name="voicemail_set_pin_dialog_title" msgid="7005128605986960003">"PIN の設定"</string>
     <string name="voicemail_change_pin_dialog_title" msgid="4633077715231764435">"PIN の変更"</string>
-    <string name="preference_category_ringtone" msgid="8787281191375434976">"着信音とバイブレーション"</string>
+    <string name="preference_category_ringtone" msgid="8787281191375434976">"サウンドとバイブレーション"</string>
     <string name="pstn_connection_service_label" msgid="9200102709997537069">"内蔵のSIMカード"</string>
     <string name="enable_video_calling_title" msgid="7246600931634161830">"ビデオハングアウトを有効にする"</string>
     <string name="enable_video_calling_dialog_msg" msgid="7141478720386203540">"ビデオハングアウトをONにするには、ネットワーク設定で4G LTE拡張モードを有効にする必要があります。"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index fd8a7ee..6cbc051 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -579,7 +579,7 @@
     <string name="onscreenEndCallText" msgid="6138725377654842757">"Finalizar"</string>
     <string name="onscreenShowDialpadText" msgid="658465753816164079">"Teclado"</string>
     <string name="onscreenMuteText" msgid="5470306116733843621">"Desativar som"</string>
-    <string name="onscreenAddCallText" msgid="9075675082903611677">"Adicionar chamada"</string>
+    <string name="onscreenAddCallText" msgid="9075675082903611677">"Adicionar ligação"</string>
     <string name="onscreenMergeCallsText" msgid="3692389519611225407">"Juntar chamadas"</string>
     <string name="onscreenSwapCallsText" msgid="2682542150803377991">"Trocar"</string>
     <string name="onscreenManageCallsText" msgid="1162047856081836469">"Gerenciar chamadas"</string>
diff --git a/res/values-te/strings.xml b/res/values-te/strings.xml
index 85a8ded..9aa0800 100644
--- a/res/values-te/strings.xml
+++ b/res/values-te/strings.xml
@@ -582,8 +582,8 @@
     <string name="onscreenAddCallText" msgid="9075675082903611677">"కాల్‌ను జోడించు"</string>
     <string name="onscreenMergeCallsText" msgid="3692389519611225407">"కాల్స్‌ను విలీనం చేయి"</string>
     <string name="onscreenSwapCallsText" msgid="2682542150803377991">"స్వాప్ చేయి"</string>
-    <string name="onscreenManageCallsText" msgid="1162047856081836469">"కాల్స్‌ను నిర్వహించు"</string>
-    <string name="onscreenManageConferenceText" msgid="4700574060601755137">"కాన్ఫరెన్స్‌ను నిర్వహించు"</string>
+    <string name="onscreenManageCallsText" msgid="1162047856081836469">"కాల్స్‌ను మేనేజ్ చేయండి"</string>
+    <string name="onscreenManageConferenceText" msgid="4700574060601755137">"కాన్ఫరెన్స్‌ను మేనేజ్ చేయండి"</string>
     <string name="onscreenAudioText" msgid="7224226735052019986">"ఆడియో"</string>
     <string name="onscreenVideoCallText" msgid="1743992456126258698">"వీడియో కాల్"</string>
     <string name="importSimEntry" msgid="3892354284082689894">"దిగుమతి చేయండి"</string>
diff --git a/src/com/android/phone/CLIRListPreference.java b/src/com/android/phone/CLIRListPreference.java
old mode 100755
new mode 100644
diff --git a/src/com/android/phone/CallNotifier.java b/src/com/android/phone/CallNotifier.java
index 7f61f78..14db930 100644
--- a/src/com/android/phone/CallNotifier.java
+++ b/src/com/android/phone/CallNotifier.java
@@ -40,10 +40,12 @@
 import com.android.internal.telephony.CallManager;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneConstants;
+import com.android.internal.telephony.PhoneFactory;
 import com.android.internal.telephony.SubscriptionController;
 import com.android.internal.telephony.cdma.CdmaInformationRecords.CdmaDisplayInfoRec;
 import com.android.internal.telephony.cdma.CdmaInformationRecords.CdmaSignalInfoRec;
 import com.android.internal.telephony.cdma.SignalToneUtil;
+import com.android.internal.telephony.subscription.SubscriptionManagerService;
 
 import java.util.ArrayList;
 import java.util.Collections;
@@ -487,9 +489,16 @@
     }
 
     public void updatePhoneStateListeners(boolean isRefresh, int updateType, int subIdToUpdate) {
-        List<SubscriptionInfo> subInfos = SubscriptionController.getInstance()
-                .getActiveSubscriptionInfoList(mApplication.getOpPackageName(),
-                        mApplication.getAttributionTag());
+        List<SubscriptionInfo> subInfos;
+        if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
+            subInfos = SubscriptionManagerService.getInstance()
+                    .getActiveSubscriptionInfoList(mApplication.getOpPackageName(),
+                            mApplication.getAttributionTag());
+        } else {
+            subInfos = SubscriptionController.getInstance()
+                    .getActiveSubscriptionInfoList(mApplication.getOpPackageName(),
+                            mApplication.getAttributionTag());
+        }
 
         // Sort sub id list based on slot id, so that CFI/MWI notifications will be updated for
         // slot 0 first then slot 1. This is needed to ensure that when CFI or MWI is enabled for
@@ -498,8 +507,8 @@
         List<Integer> subIdList = new ArrayList<Integer>(mTelephonyCallback.keySet());
         Collections.sort(subIdList, new Comparator<Integer>() {
             public int compare(Integer sub1, Integer sub2) {
-                int slotId1 = SubscriptionController.getInstance().getSlotIndex(sub1);
-                int slotId2 = SubscriptionController.getInstance().getSlotIndex(sub2);
+                int slotId1 = SubscriptionManager.getSlotIndex(sub1);
+                int slotId2 = SubscriptionManager.getSlotIndex(sub2);
                 return slotId1 > slotId2 ? 0 : -1;
             }
         });
diff --git a/src/com/android/phone/CarrierConfigLoader.java b/src/com/android/phone/CarrierConfigLoader.java
index 5d9928e..44375bb 100644
--- a/src/com/android/phone/CarrierConfigLoader.java
+++ b/src/com/android/phone/CarrierConfigLoader.java
@@ -804,10 +804,10 @@
                 Intent.FLAG_RECEIVER_FOREGROUND);
         if (addSubIdExtra) {
             int simApplicationState = TelephonyManager.SIM_STATE_UNKNOWN;
-            int[] subIds = SubscriptionManager.getSubId(phoneId);
-            if (!ArrayUtils.isEmpty(subIds)) {
+            int subId = SubscriptionManager.getSubscriptionId(phoneId);
+            if (SubscriptionManager.isValidSubscriptionId(subId)) {
                 TelephonyManager telMgr = TelephonyManager.from(mContext)
-                        .createForSubscriptionId(subIds[0]);
+                        .createForSubscriptionId(subId);
                 simApplicationState = telMgr.getSimApplicationState();
             }
             logd("Broadcast CARRIER_CONFIG_CHANGED for phone " + phoneId
@@ -825,9 +825,9 @@
         intent.putExtra(CarrierConfigManager.EXTRA_REBROADCAST_ON_UNLOCK,
                 mFromSystemUnlocked[phoneId]);
         mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
-        int[] subIds = SubscriptionManager.getSubId(phoneId);
-        if (subIds != null && subIds.length > 0) {
-            logd("Broadcast CARRIER_CONFIG_CHANGED for phone " + phoneId + ", subId=" + subIds[0]);
+        int subId = SubscriptionManager.getSubscriptionId(phoneId);
+        if (SubscriptionManager.isValidSubscriptionId(subId)) {
+            logd("Broadcast CARRIER_CONFIG_CHANGED for phone " + phoneId + ", subId=" + subId);
         } else {
             logd("Broadcast CARRIER_CONFIG_CHANGED for phone " + phoneId);
         }
@@ -978,7 +978,7 @@
         if (isNoSimConfig) {
             fileName = getFilenameForNoSimConfig(packageName);
         } else {
-            if (SubscriptionManager.getSimStateForSlotIndex(phoneId)
+            if (TelephonyManager.getSimStateForSlotIndex(phoneId)
                     != TelephonyManager.SIM_STATE_LOADED) {
                 loge("Skip save config because SIM records are not loaded.");
                 return;
@@ -1069,7 +1069,7 @@
         if (isNoSimConfig) {
             fileName = getFilenameForNoSimConfig(packageName);
         } else {
-            if (SubscriptionManager.getSimStateForSlotIndex(phoneId)
+            if (TelephonyManager.getSimStateForSlotIndex(phoneId)
                     != TelephonyManager.SIM_STATE_LOADED) {
                 loge("Skip restore config because SIM records are not loaded.");
                 return null;
@@ -1686,12 +1686,12 @@
     }
 
     private boolean hasCarrierPrivileges(@NonNull String pkgName, int phoneId) {
-        int[] subIds = SubscriptionManager.getSubId(phoneId);
-        if (ArrayUtils.isEmpty(subIds)) {
+        int subId = SubscriptionManager.getSubscriptionId(phoneId);
+        if (!SubscriptionManager.isValidSubscriptionId(subId)) {
             return false;
         }
-        return TelephonyManager.from(mContext).createForSubscriptionId(
-                subIds[0]).checkCarrierPrivilegesForPackage(pkgName)
+        return TelephonyManager.from(mContext).createForSubscriptionId(subId)
+                .checkCarrierPrivilegesForPackage(pkgName)
                 == TelephonyManager.CARRIER_PRIVILEGE_STATUS_HAS_ACCESS;
     }
 
diff --git a/src/com/android/phone/EmergencyDialer.java b/src/com/android/phone/EmergencyDialer.java
index 9b7a43e..5fe8708 100644
--- a/src/com/android/phone/EmergencyDialer.java
+++ b/src/com/android/phone/EmergencyDialer.java
@@ -259,8 +259,6 @@
         mEntryType = getIntent().getIntExtra(EXTRA_ENTRY_TYPE, ENTRY_TYPE_UNKNOWN);
         Log.d(LOG_TAG, "Launched from " + entryTypeToString(mEntryType));
 
-        // Allow this activity to be displayed in front of the keyguard / lockscreen.
-        setShowWhenLocked(true);
         // Allow turning screen on
         setTurnScreenOn(true);
 
diff --git a/src/com/android/phone/ImsUtil.java b/src/com/android/phone/ImsUtil.java
index ba4ad38..d90c256 100644
--- a/src/com/android/phone/ImsUtil.java
+++ b/src/com/android/phone/ImsUtil.java
@@ -154,12 +154,7 @@
     }
 
     private static int getSubId(int phoneId) {
-        final int[] subIds = SubscriptionManager.getSubId(phoneId);
-        int subId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
-        if (subIds != null && subIds.length >= 1) {
-            subId = subIds[0];
-        }
-        return subId;
+        return SubscriptionManager.getSubscriptionId(phoneId);
     }
 
     private static boolean getLastKnownRoamingState(int phoneId) {
diff --git a/src/com/android/phone/PhoneGlobals.java b/src/com/android/phone/PhoneGlobals.java
index f18535c..bc6a7ae 100644
--- a/src/com/android/phone/PhoneGlobals.java
+++ b/src/com/android/phone/PhoneGlobals.java
@@ -17,6 +17,7 @@
 package com.android.phone;
 
 import android.annotation.IntDef;
+import android.annotation.Nullable;
 import android.app.Activity;
 import android.app.KeyguardManager;
 import android.app.ProgressDialog;
@@ -49,6 +50,7 @@
 import android.telephony.TelephonyCallback;
 import android.telephony.TelephonyLocalConnection;
 import android.telephony.TelephonyManager;
+import android.util.ArraySet;
 import android.util.LocalLog;
 import android.util.Log;
 import android.widget.Toast;
@@ -81,7 +83,6 @@
 import java.io.PrintWriter;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
-import java.util.ArrayList;
 import java.util.List;
 
 /**
@@ -189,6 +190,9 @@
     @RoamingNotification
     private int mPrevRoamingNotification = ROAMING_NOTIFICATION_NO_NOTIFICATION;
 
+    /** Operator numerics for which we've shown is-roaming notifications. **/
+    private ArraySet<String> mPrevRoamingOperatorNumerics = new ArraySet<>();
+
     private WakeState mWakeState = WakeState.SLEEP;
 
     private PowerManager mPowerManager;
@@ -376,7 +380,7 @@
                                 .unregisterTelephonyCallback(callback);
                         callback = new PhoneAppCallback(subId);
                         tm.createForSubscriptionId(subId).registerTelephonyCallback(
-                                TelephonyManager.INCLUDE_LOCATION_DATA_NONE, mHandler::post,
+                                TelephonyManager.INCLUDE_LOCATION_DATA_COARSE, mHandler::post,
                                 callback);
                         mTelephonyCallbacks[phone.getPhoneId()] = callback;
                     }
@@ -737,6 +741,13 @@
         Settings.Global.putInt(getContentResolver(), Settings.Global.ENABLE_CELLULAR_ON_BOOT, 0);
         TelephonyProperties.airplane_mode_on(true); // true means int value 1
         PhoneUtils.setRadioPower(false);
+        clearCacheOnRadioOff();
+    }
+
+    /** Clear fields on power off radio **/
+    private void clearCacheOnRadioOff() {
+        // Re-show is-roaming notifications after APM mode
+        mPrevRoamingOperatorNumerics.clear();
     }
 
     private void setRadioPowerOn() {
@@ -860,26 +871,27 @@
                     + mDefaultDataSubId + ", ss roaming=" + serviceState.getDataRoaming());
         }
         if (subId == mDefaultDataSubId) {
-            updateDataRoamingStatus();
+            updateDataRoamingStatus(serviceState.getOperatorNumeric());
         }
     }
 
     /**
-     * @return whether or not we should show a notification when connecting to data roaming if the
-     * user has data roaming enabled
-     */
-    private boolean shouldShowDataConnectedRoaming(int subId) {
-        PersistableBundle config = getCarrierConfigForSubId(subId);
-        return config.getBoolean(CarrierConfigManager
-                .KEY_SHOW_DATA_CONNECTED_ROAMING_NOTIFICATION_BOOL);
-    }
-
-    /**
      * When roaming, if mobile data cannot be established due to data roaming not enabled, we need
      * to notify the user so they can enable it through settings. Vise versa if the condition
      * changes, we need to dismiss the notification.
      */
     private void updateDataRoamingStatus() {
+        updateDataRoamingStatus(null /*roamingOperatorNumeric*/);
+    }
+
+    /**
+     * When roaming, if mobile data cannot be established due to data roaming not enabled, we need
+     * to notify the user so they can enable it through settings. Vise versa if the condition
+     * changes, we need to dismiss the notification.
+     * @param roamingOperatorNumeric The operator numeric for the current roaming. {@code null} if
+     *                               the current roaming operator numeric didn't change.
+     */
+    private void updateDataRoamingStatus(@Nullable String roamingOperatorNumeric) {
         if (VDBG) Log.v(LOG_TAG, "updateDataRoamingStatus");
         Phone phone = getPhone(mDefaultDataSubId);
         if (phone == null) {
@@ -889,17 +901,26 @@
 
         boolean dataAllowed;
         boolean notAllowedDueToRoamingOff;
-        List<DataDisallowedReason> reasons = new ArrayList<>();
-        if (phone.getDataNetworkController() != null) {
-            reasons = phone.getDataNetworkController().getInternetDataDisallowedReasons();
-        }
+        List<DataDisallowedReason> reasons = phone.getDataNetworkController()
+                .getInternetDataDisallowedReasons();
         dataAllowed = reasons.isEmpty();
         notAllowedDueToRoamingOff = (reasons.size() == 1
                 && reasons.contains(DataDisallowedReason.ROAMING_DISABLED));
-        mDataRoamingNotifLog.log("dataAllowed=" + dataAllowed + ", reasons=" + reasons);
-        if (VDBG) Log.v(LOG_TAG, "dataAllowed=" + dataAllowed + ", reasons=" + reasons);
+        mDataRoamingNotifLog.log("dataAllowed=" + dataAllowed + ", reasons=" + reasons
+                + ", roamingOperatorNumeric=" + roamingOperatorNumeric);
+        if (VDBG) {
+            Log.v(LOG_TAG, "dataAllowed=" + dataAllowed + ", reasons=" + reasons
+                    + ", roamingOperatorNumeric=" + roamingOperatorNumeric);
+        }
 
         if (!dataAllowed && notAllowedDueToRoamingOff) {
+            // Don't show roaming notification if we've already shown for this MccMnc
+            if (roamingOperatorNumeric != null
+                    && !mPrevRoamingOperatorNumerics.add(roamingOperatorNumeric)) {
+                Log.d(LOG_TAG, "Skip roaming disconnected notification since already shown in "
+                        + "MccMnc " + roamingOperatorNumeric);
+                return;
+            }
             // No need to show it again if we never cancelled it explicitly.
             if (mPrevRoamingNotification == ROAMING_NOTIFICATION_DISCONNECTED) return;
             // If the only reason of no data is data roaming disabled, then we notify the user
@@ -910,8 +931,18 @@
             Message msg = mHandler.obtainMessage(EVENT_DATA_ROAMING_DISCONNECTED);
             msg.arg1 = mDefaultDataSubId;
             msg.sendToTarget();
-        } else if (dataAllowed && dataIsNowRoaming(mDefaultDataSubId)
-                && shouldShowDataConnectedRoaming(mDefaultDataSubId)) {
+        } else if (dataAllowed && dataIsNowRoaming(mDefaultDataSubId)) {
+            boolean isShowRoamingNotificationEnabled = getCarrierConfigForSubId(mDefaultDataSubId)
+                    .getBoolean(CarrierConfigManager
+                            .KEY_SHOW_DATA_CONNECTED_ROAMING_NOTIFICATION_BOOL);
+            if (!isShowRoamingNotificationEnabled) return;
+            // Don't show roaming notification if we've already shown for this MccMnc
+            if (roamingOperatorNumeric != null
+                    && !mPrevRoamingOperatorNumerics.add(roamingOperatorNumeric)) {
+                Log.d(LOG_TAG, "Skip roaming connected notification since already shown in "
+                        + "MccMnc " + roamingOperatorNumeric);
+                return;
+            }
             // No need to show it again if we never cancelled it explicitly, or carrier config
             // indicates this is not needed.
             if (mPrevRoamingNotification == ROAMING_NOTIFICATION_CONNECTED) return;
@@ -938,11 +969,7 @@
      * @return whether we have transitioned to dataRoaming
      */
     private boolean dataIsNowRoaming(int subId) {
-        if (getPhone(subId).getServiceState() == null) {
-            return false;
-        } else {
-            return getPhone(subId).getServiceState().getDataRoaming();
-        }
+        return getPhone(subId).getServiceState().getDataRoaming();
     }
 
     private void updateLimitedSimFunctionForDualSim() {
@@ -1060,6 +1087,7 @@
             e.printStackTrace();
         }
         pw.decreaseIndent();
+        pw.println("mPrevRoamingOperatorNumerics:" + mPrevRoamingOperatorNumerics);
         pw.println("------- End PhoneGlobals -------");
     }
 }
diff --git a/src/com/android/phone/PhoneInterfaceManager.java b/src/com/android/phone/PhoneInterfaceManager.java
old mode 100755
new mode 100644
index 3f05f0a..0124ee1
--- a/src/com/android/phone/PhoneInterfaceManager.java
+++ b/src/com/android/phone/PhoneInterfaceManager.java
@@ -17,6 +17,8 @@
 package com.android.phone;
 
 import static android.content.pm.PackageManager.PERMISSION_GRANTED;
+import static android.telephony.TelephonyManager.HAL_SERVICE_NETWORK;
+import static android.telephony.TelephonyManager.HAL_SERVICE_RADIO;
 
 import static com.android.internal.telephony.PhoneConstants.PHONE_TYPE_CDMA;
 import static com.android.internal.telephony.PhoneConstants.PHONE_TYPE_GSM;
@@ -110,6 +112,7 @@
 import android.telephony.TelephonyFrameworkInitializer;
 import android.telephony.TelephonyHistogram;
 import android.telephony.TelephonyManager;
+import android.telephony.TelephonyManager.SimState;
 import android.telephony.TelephonyScanManager;
 import android.telephony.ThermalMitigationRequest;
 import android.telephony.UiccCardInfo;
@@ -166,6 +169,7 @@
 import com.android.internal.telephony.INumberVerificationCallback;
 import com.android.internal.telephony.ITelephony;
 import com.android.internal.telephony.IccCard;
+import com.android.internal.telephony.IccCardConstants;
 import com.android.internal.telephony.IccLogicalChannelRequest;
 import com.android.internal.telephony.LocaleTracker;
 import com.android.internal.telephony.NetworkScanRequestTracker;
@@ -180,6 +184,7 @@
 import com.android.internal.telephony.RILConstants;
 import com.android.internal.telephony.RadioInterfaceCapabilityController;
 import com.android.internal.telephony.ServiceStateTracker;
+import com.android.internal.telephony.SmsApplication;
 import com.android.internal.telephony.SmsController;
 import com.android.internal.telephony.SmsPermissions;
 import com.android.internal.telephony.SubscriptionController;
@@ -193,6 +198,8 @@
 import com.android.internal.telephony.imsphone.ImsPhoneCallTracker;
 import com.android.internal.telephony.metrics.RcsStats;
 import com.android.internal.telephony.metrics.TelephonyMetrics;
+import com.android.internal.telephony.subscription.SubscriptionInfoInternal;
+import com.android.internal.telephony.subscription.SubscriptionManagerService;
 import com.android.internal.telephony.uicc.IccCardApplicationStatus.AppType;
 import com.android.internal.telephony.uicc.IccIoResult;
 import com.android.internal.telephony.uicc.IccUtils;
@@ -204,6 +211,7 @@
 import com.android.internal.telephony.uicc.UiccProfile;
 import com.android.internal.telephony.uicc.UiccSlot;
 import com.android.internal.telephony.util.LocaleUtils;
+import com.android.internal.telephony.util.TelephonyUtils;
 import com.android.internal.telephony.util.VoicemailNotificationSettingsUtil;
 import com.android.internal.util.FunctionalUtils;
 import com.android.internal.util.HexDump;
@@ -211,7 +219,7 @@
 import com.android.phone.callcomposer.CallComposerPictureTransfer;
 import com.android.phone.callcomposer.ImageData;
 import com.android.phone.settings.PickSmsSubscriptionActivity;
-import com.android.phone.slicestore.SliceStore;
+import com.android.phone.slice.SlicePurchaseController;
 import com.android.phone.vvm.PhoneAccountHandleConverter;
 import com.android.phone.vvm.RemoteVvmTaskManager;
 import com.android.phone.vvm.VisualVoicemailSettingsUtil;
@@ -370,6 +378,9 @@
     private static final int SELECT_P2 = 0;
     private static final int SELECT_P3 = 0x10;
 
+    // Toggling null cipher and integrity support was added in IRadioNetwork 2.1
+    private static final int MIN_NULL_CIPHER_AND_INTEGRITY_VERSION = 201;
+
     /** The singleton instance. */
     private static PhoneInterfaceManager sInstance;
     private static List<String> sThermalMitigationAllowlistedPackages = new ArrayList<>();
@@ -385,6 +396,7 @@
     private SharedPreferences mTelephonySharedPreferences;
     private PhoneConfigurationManager mPhoneConfigurationManager;
     private final RadioInterfaceCapabilityController mRadioInterfaceCapabilities;
+    private final Telephony2gUpdater mTelephony2gUpdater;
 
     /** User Activity */
     private AtomicBoolean mNotifyUserActivity;
@@ -1435,6 +1447,7 @@
                     request = (MainThreadRequest) ar.userObj;
                     ResultReceiver result = (ResultReceiver) request.argument;
                     int error = 0;
+                    ModemActivityInfo ret = null;
                     if (mLastModemActivityInfo == null) {
                         mLastModemActivitySpecificInfo = new ActivityStatsTechSpecificInfo[1];
                         mLastModemActivitySpecificInfo[0] =
@@ -1453,12 +1466,14 @@
                         if (isModemActivityInfoValid(info)) {
                             mergeModemActivityInfo(info);
                         }
-                        mLastModemActivityInfo =
-                                new ModemActivityInfo(
-                                        mLastModemActivityInfo.getTimestampMillis(),
-                                        mLastModemActivityInfo.getSleepTimeMillis(),
-                                        mLastModemActivityInfo.getIdleTimeMillis(),
-                                        mLastModemActivitySpecificInfo);
+                        // This is needed to decouple ret from mLastModemActivityInfo
+                        // We don't want to return mLastModemActivityInfo which is updated
+                        // inside mergeModemActivityInfo()
+                        ret = new ModemActivityInfo(
+                                mLastModemActivityInfo.getTimestampMillis(),
+                                mLastModemActivityInfo.getSleepTimeMillis(),
+                                mLastModemActivityInfo.getIdleTimeMillis(),
+                                deepCopyModemActivitySpecificInfo(mLastModemActivitySpecificInfo));
 
                     } else {
                         if (ar.result == null) {
@@ -1476,10 +1491,10 @@
                         }
                     }
                     Bundle bundle = new Bundle();
-                    if (mLastModemActivityInfo != null) {
+                    if (ret != null) {
                         bundle.putParcelable(
                                 TelephonyManager.MODEM_ACTIVITY_RESULT_KEY,
-                                mLastModemActivityInfo);
+                                ret);
                     } else {
                         bundle.putInt(TelephonyManager.EXCEPTION_RESULT_KEY, error);
                     }
@@ -2159,7 +2174,7 @@
                     onCompleted = obtainMessage(EVENT_PURCHASE_PREMIUM_CAPABILITY_DONE, request);
                     PurchasePremiumCapabilityArgument arg =
                             (PurchasePremiumCapabilityArgument) request.argument;
-                    SliceStore.getInstance(request.phone).purchasePremiumCapability(
+                    SlicePurchaseController.getInstance(request.phone).purchasePremiumCapability(
                             arg.capability, arg.appName, onCompleted);
                     break;
                 }
@@ -2401,9 +2416,17 @@
         mRadioInterfaceCapabilities = RadioInterfaceCapabilityController.getInstance();
         mNotifyUserActivity = new AtomicBoolean(false);
         PropertyInvalidatedCache.invalidateCache(TelephonyManager.CACHE_KEY_PHONE_ACCOUNT_TO_SUBID);
+        mTelephony2gUpdater = new Telephony2gUpdater(
+                Executors.newSingleThreadExecutor(), mApp);
+        mTelephony2gUpdater.init();
         publish();
     }
 
+    @VisibleForTesting
+    public SharedPreferences getSharedPreferences() {
+        return mTelephonySharedPreferences;
+    }
+
     private Phone getDefaultPhone() {
         Phone thePhone = getPhone(getDefaultSubscription());
         return (thePhone != null) ? thePhone : PhoneFactory.getDefaultPhone();
@@ -2440,7 +2463,7 @@
 
     // returns phone associated with the subId.
     private Phone getPhone(int subId) {
-        return PhoneFactory.getPhone(mSubscriptionController.getPhoneId(subId));
+        return PhoneFactory.getPhone(SubscriptionManager.getPhoneId(subId));
     }
 
     private void sendEraseModemConfig(@NonNull Phone phone) {
@@ -3001,7 +3024,7 @@
 
         final long identity = Binder.clearCallingIdentity();
         try {
-            int subId = mSubscriptionController.getDefaultDataSubId();
+            int subId = SubscriptionManager.getDefaultDataSubscriptionId();
             final Phone phone = getPhone(subId);
             if (phone != null) {
                 phone.getDataSettingsManager().setDataEnabled(
@@ -3022,7 +3045,7 @@
 
         final long identity = Binder.clearCallingIdentity();
         try {
-            int subId = mSubscriptionController.getDefaultDataSubId();
+            int subId = SubscriptionManager.getDefaultDataSubscriptionId();
             final Phone phone = getPhone(subId);
             if (phone != null) {
                 phone.getDataSettingsManager().setDataEnabled(
@@ -3133,7 +3156,7 @@
 
     @Override
     public int getDataState() {
-        return getDataStateForSubId(mSubscriptionController.getDefaultDataSubId());
+        return getDataStateForSubId(SubscriptionManager.getDefaultDataSubscriptionId());
     }
 
     @Override
@@ -3154,7 +3177,7 @@
 
     @Override
     public @DataActivityType int getDataActivity() {
-        return getDataActivityForSubId(mSubscriptionController.getDefaultDataSubId());
+        return getDataActivityForSubId(SubscriptionManager.getDefaultDataSubscriptionId());
     }
 
     @Override
@@ -3200,7 +3223,7 @@
         final long identity = Binder.clearCallingIdentity();
         try {
             if (DBG_LOC) log("getCellLocation: is active user");
-            int subId = mSubscriptionController.getDefaultDataSubId();
+            int subId = SubscriptionManager.getDefaultDataSubscriptionId();
             return (CellIdentity) sendRequest(CMD_GET_CELL_LOCATION, workSource, subId);
         } finally {
             Binder.restoreCallingIdentity(identity);
@@ -3217,7 +3240,7 @@
                 // Get default phone in this case.
                 phoneId = SubscriptionManager.DEFAULT_PHONE_INDEX;
             }
-            final int subId = mSubscriptionController.getSubIdUsingPhoneId(phoneId);
+            final int subId = SubscriptionManager.getSubscriptionId(phoneId);
             Phone phone = PhoneFactory.getPhone(phoneId);
             if (phone == null) return "";
             ServiceStateTracker sst = phone.getServiceStateTracker();
@@ -3620,10 +3643,21 @@
      *
      * @throws SecurityException if the caller does not have the required permission
      */
-    private void enforceModifyPermission() {
+    @VisibleForTesting
+    public void enforceModifyPermission() {
         mApp.enforceCallingOrSelfPermission(android.Manifest.permission.MODIFY_PHONE_STATE, null);
     }
 
+    /**
+     * Make sure the caller has the MODIFY_PHONE_STATE permission.
+     *
+     * @throws SecurityException if the caller does not have the required permission
+     */
+    @VisibleForTesting
+    public void enforceReadPermission() {
+        mApp.enforceCallingOrSelfPermission(android.Manifest.permission.READ_PHONE_STATE, null);
+    }
+
     private void enforceActiveEmergencySessionPermission() {
         mApp.enforceCallingOrSelfPermission(
                 android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION, null);
@@ -5164,7 +5198,7 @@
      */
     @Override
     public int getDataNetworkType(String callingPackage, String callingFeatureId) {
-        return getDataNetworkTypeForSubscriber(mSubscriptionController.getDefaultDataSubId(),
+        return getDataNetworkTypeForSubscriber(SubscriptionManager.getDefaultDataSubscriptionId(),
                 callingPackage, callingFeatureId);
     }
 
@@ -5229,7 +5263,7 @@
      */
     public boolean hasIccCard() {
         // FIXME Make changes to pass defaultSimId of type int
-        return hasIccCardUsingSlotIndex(mSubscriptionController.getSlotIndex(
+        return hasIccCardUsingSlotIndex(SubscriptionManager.getSlotIndex(
                 getDefaultSubscription()));
     }
 
@@ -5294,18 +5328,22 @@
      * Returns Default subId, 0 in the case of single standby.
      */
     private int getDefaultSubscription() {
-        return mSubscriptionController.getDefaultSubId();
+        return SubscriptionManager.getDefaultSubscriptionId();
     }
 
     private int getSlotForDefaultSubscription() {
-        return mSubscriptionController.getPhoneId(getDefaultSubscription());
+        return SubscriptionManager.getPhoneId(getDefaultSubscription());
     }
 
     private int getPreferredVoiceSubscription() {
-        return mSubscriptionController.getDefaultVoiceSubId();
+        return SubscriptionManager.getDefaultVoiceSubscriptionId();
     }
 
     private boolean isActiveSubscription(int subId) {
+        if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
+            return SubscriptionManagerService.getInstance().isActiveSubId(subId,
+                    mApp.getOpPackageName(), mApp.getFeatureId());
+        }
         return mSubscriptionController.isActiveSubId(subId);
     }
 
@@ -5971,11 +6009,9 @@
      */
     public boolean setBoundImsServiceOverride(int slotIndex, boolean isCarrierService,
             int[] featureTypes, String packageName) {
-        int[] subIds = SubscriptionManager.getSubId(slotIndex);
         TelephonyPermissions.enforceShellOnly(Binder.getCallingUid(), "setBoundImsServiceOverride");
         TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(mApp,
-                (subIds != null ? subIds[0] : SubscriptionManager.INVALID_SUBSCRIPTION_ID),
-                "setBoundImsServiceOverride");
+                SubscriptionManager.getSubscriptionId(slotIndex), "setBoundImsServiceOverride");
 
         final long identity = Binder.clearCallingIdentity();
         try {
@@ -6005,12 +6041,10 @@
      */
     @Override
     public boolean clearCarrierImsServiceOverride(int slotIndex) {
-        int[] subIds = SubscriptionManager.getSubId(slotIndex);
         TelephonyPermissions.enforceShellOnly(Binder.getCallingUid(),
                 "clearCarrierImsServiceOverride");
         TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(mApp,
-                (subIds != null ? subIds[0] : SubscriptionManager.INVALID_SUBSCRIPTION_ID),
-                "clearCarrierImsServiceOverride");
+                SubscriptionManager.getSubscriptionId(slotIndex), "clearCarrierImsServiceOverride");
 
         final long identity = Binder.clearCallingIdentity();
         try {
@@ -6035,11 +6069,9 @@
      */
     public String getBoundImsServicePackage(int slotId, boolean isCarrierImsService,
             @ImsFeature.FeatureType int featureType) {
-        int[] subIds = SubscriptionManager.getSubId(slotId);
         TelephonyPermissions
-                .enforceCallingOrSelfReadPrivilegedPhoneStatePermissionOrCarrierPrivilege(
-                mApp, (subIds != null ? subIds[0] : SubscriptionManager.INVALID_SUBSCRIPTION_ID),
-                "getBoundImsServicePackage");
+                .enforceCallingOrSelfReadPrivilegedPhoneStatePermissionOrCarrierPrivilege(mApp,
+                        SubscriptionManager.getSubscriptionId(slotId), "getBoundImsServicePackage");
 
         final long identity = Binder.clearCallingIdentity();
         try {
@@ -6150,11 +6182,11 @@
         TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(
                 mApp, subId, "setNetworkSelectionModeManual");
 
+        final long identity = Binder.clearCallingIdentity();
         if (!isActiveSubscription(subId)) {
             return false;
         }
 
-        final long identity = Binder.clearCallingIdentity();
         try {
             ManualNetworkSelectionArgument arg = new ManualNetworkSelectionArgument(operatorInfo,
                     persistSelection);
@@ -6656,6 +6688,17 @@
             @TelephonyManager.NetworkTypeBitMask long allowedNetworkTypes) {
         TelephonyPermissions.enforceCallingOrSelfModifyPermissionOrCarrierPrivilege(
                 mApp, subId, "setAllowedNetworkTypesForReason");
+        // If the caller only has carrier privileges, then they should not be able to override
+        // any network types which were set for security reasons.
+        if (mApp.checkCallingOrSelfPermission(Manifest.permission.MODIFY_PHONE_STATE)
+                != PERMISSION_GRANTED
+                && (reason == TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_ENABLE_2G
+                || reason == TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER_RESTRICTIONS)) {
+            throw new SecurityException(
+                    "setAllowedNetworkTypesForReason cannot be called with carrier privileges for"
+                            + " reason "
+                            + reason);
+        }
         if (!TelephonyManager.isValidAllowedNetworkTypesReason(reason)) {
             loge("setAllowedNetworkTypesForReason: Invalid allowed network type reason: " + reason);
             return false;
@@ -6754,7 +6797,7 @@
 
         final long identity = Binder.clearCallingIdentity();
         try {
-            int phoneId = mSubscriptionController.getPhoneId(subId);
+            int phoneId = SubscriptionManager.getPhoneId(subId);
             if (DBG) log("isUserDataEnabled: subId=" + subId + " phoneId=" + phoneId);
             Phone phone = PhoneFactory.getPhone(phoneId);
             if (phone != null) {
@@ -6801,15 +6844,10 @@
 
         final long identity = Binder.clearCallingIdentity();
         try {
-            int phoneId = mSubscriptionController.getPhoneId(subId);
+            int phoneId = SubscriptionManager.getPhoneId(subId);
             Phone phone = PhoneFactory.getPhone(phoneId);
             if (phone != null) {
-                boolean retVal;
-                if (phone.getDataSettingsManager() == null) {
-                    retVal = false;
-                } else {
-                    retVal = phone.getDataSettingsManager().isDataEnabled();
-                }
+                boolean retVal = phone.getDataSettingsManager().isDataEnabled();
                 if (DBG) log("isDataEnabled: " + retVal + ", subId=" + subId);
                 return retVal;
             } else {
@@ -6853,7 +6891,7 @@
 
         final long identity = Binder.clearCallingIdentity();
         try {
-            int phoneId = mSubscriptionController.getPhoneId(subId);
+            int phoneId = SubscriptionManager.getPhoneId(subId);
             if (DBG) {
                 log("isDataEnabledForReason: subId=" + subId + " phoneId=" + phoneId
                         + " reason=" + reason);
@@ -7265,9 +7303,16 @@
                 return null;
             }
 
-            final SubscriptionInfo info = SubscriptionController.getInstance()
-                    .getSubscriptionInfo(subId);
-            final ParcelUuid groupUuid = info.getGroupUuid();
+            ParcelUuid groupUuid;
+            if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
+                final SubscriptionInfo info = SubscriptionManagerService.getInstance()
+                        .getSubscriptionInfo(subId);
+                groupUuid = info.getGroupUuid();
+            } else {
+                final SubscriptionInfo info = mSubscriptionController
+                        .getSubscriptionInfo(subId);
+                groupUuid = info.getGroupUuid();
+            }
             // If it doesn't belong to any group, return just subscriberId of itself.
             if (groupUuid == null) {
                 return new String[]{subscriberId};
@@ -7275,9 +7320,16 @@
 
             // Get all subscriberIds from the group.
             final List<String> mergedSubscriberIds = new ArrayList<>();
-            final List<SubscriptionInfo> groupInfos = SubscriptionController.getInstance()
-                    .getSubscriptionsInGroup(groupUuid, mApp.getOpPackageName(),
-                            mApp.getAttributionTag());
+            List<SubscriptionInfo> groupInfos;
+            if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
+                groupInfos = SubscriptionManagerService.getInstance()
+                        .getSubscriptionsInGroup(groupUuid, mApp.getOpPackageName(),
+                                mApp.getAttributionTag());
+            } else {
+                groupInfos = mSubscriptionController
+                        .getSubscriptionsInGroup(groupUuid, mApp.getOpPackageName(),
+                                mApp.getAttributionTag());
+            }
             for (SubscriptionInfo subInfo : groupInfos) {
                 subscriberId = telephonyManager.getSubscriberId(subInfo.getSubscriptionId());
                 if (subscriberId != null) {
@@ -7837,11 +7889,23 @@
         }
         final long identity = Binder.clearCallingIdentity();
         try {
-            final SubscriptionInfo info = mSubscriptionController.getActiveSubscriptionInfo(subId,
-                    phone.getContext().getOpPackageName(), phone.getContext().getAttributionTag());
-            if (info == null) {
-                log("getSimLocaleForSubscriber, inactive subId: " + subId);
-                return null;
+            SubscriptionInfo info;
+            if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
+                info = SubscriptionManagerService.getInstance().getActiveSubscriptionInfo(subId,
+                        phone.getContext().getOpPackageName(),
+                        phone.getContext().getAttributionTag());
+                if (info == null) {
+                    log("getSimLocaleForSubscriber, inactive subId: " + subId);
+                    return null;
+                }
+            } else {
+                info = mSubscriptionController.getActiveSubscriptionInfo(subId,
+                        phone.getContext().getOpPackageName(),
+                        phone.getContext().getAttributionTag());
+                if (info == null) {
+                    log("getSimLocaleForSubscriber, inactive subId: " + subId);
+                    return null;
+                }
             }
             // Try and fetch the locale from the carrier properties or from the SIM language
             // preferences (EF-PL and EF-LI)...
@@ -7852,7 +7916,7 @@
                 if (!localeFromDefaultSim.getCountry().isEmpty()) {
                     if (DBG) log("Using locale from subId: " + subId + " locale: "
                             + localeFromDefaultSim);
-                    return matchLocaleFromSupportedLocaleList(localeFromDefaultSim);
+                    return matchLocaleFromSupportedLocaleList(phone, localeFromDefaultSim);
                 } else {
                     simLanguage = localeFromDefaultSim.getLanguage();
                 }
@@ -7865,7 +7929,7 @@
             final Locale mccLocale = LocaleUtils.getLocaleFromMcc(mApp, mcc, simLanguage);
             if (mccLocale != null) {
                 if (DBG) log("No locale from SIM, using mcc locale:" + mccLocale);
-                return matchLocaleFromSupportedLocaleList(mccLocale);
+                return matchLocaleFromSupportedLocaleList(phone, mccLocale);
             }
 
             if (DBG) log("No locale found - returning null");
@@ -7876,13 +7940,12 @@
     }
 
     @VisibleForTesting
-    String matchLocaleFromSupportedLocaleList(@NonNull Locale inputLocale) {
+    String matchLocaleFromSupportedLocaleList(Phone phone, @NonNull Locale inputLocale) {
         String[] supportedLocale = com.android.internal.app.LocalePicker.getSupportedLocales(
-                getDefaultPhone().getContext());
+                phone.getContext());
         for (String localeTag : supportedLocale) {
-            if (LocaleList.matchesLanguageAndScript(
-                    inputLocale, Locale.forLanguageTag(localeTag))
-                    && inputLocale.getCountry().equals(
+            if (LocaleList.matchesLanguageAndScript(inputLocale, Locale.forLanguageTag(localeTag))
+                    && TextUtils.equals(inputLocale.getCountry(),
                     Locale.forLanguageTag(localeTag).getCountry())) {
                 return localeTag;
             }
@@ -7890,15 +7953,14 @@
         return inputLocale.toLanguageTag();
     }
 
-    private List<SubscriptionInfo> getAllSubscriptionInfoList() {
-        return mSubscriptionController.getAllSubInfoList(mApp.getOpPackageName(),
-                mApp.getAttributionTag());
-    }
-
     /**
      * NOTE: this method assumes permission checks are done and caller identity has been cleared.
      */
     private List<SubscriptionInfo> getActiveSubscriptionInfoListPrivileged() {
+        if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
+            return SubscriptionManagerService.getInstance().getActiveSubscriptionInfoList(
+                    mApp.getOpPackageName(), mApp.getAttributionTag());
+        }
         return mSubscriptionController.getActiveSubscriptionInfoList(mApp.getOpPackageName(),
                 mApp.getAttributionTag());
     }
@@ -7981,7 +8043,7 @@
     */
     private void mergeModemActivityInfo(ModemActivityInfo info) {
         List<ActivityStatsTechSpecificInfo> merged = new ArrayList<>();
-        ActivityStatsTechSpecificInfo mDeltaSpecificInfo;
+        ActivityStatsTechSpecificInfo deltaSpecificInfo;
         boolean matched;
         for (int i = 0; i < info.getSpecificInfoLength(); i++) {
             matched = false;
@@ -8006,13 +8068,13 @@
             }
 
             if (!matched) {
-                mDeltaSpecificInfo =
+                deltaSpecificInfo =
                         new ActivityStatsTechSpecificInfo(
                                 rat,
                                 freq,
                                 info.getTransmitTimeMillis(rat, freq),
                                 (int) info.getReceiveTimeMillis(rat, freq));
-                merged.addAll(Arrays.asList(mDeltaSpecificInfo));
+                merged.addAll(Arrays.asList(deltaSpecificInfo));
             }
         }
         merged.addAll(Arrays.asList(mLastModemActivitySpecificInfo));
@@ -8027,6 +8089,26 @@
         mLastModemActivityInfo.setIdleTimeMillis(
                 info.getIdleTimeMillis()
                 + mLastModemActivityInfo.getIdleTimeMillis());
+
+        mLastModemActivityInfo =
+                 new ModemActivityInfo(
+                         mLastModemActivityInfo.getTimestampMillis(),
+                         mLastModemActivityInfo.getSleepTimeMillis(),
+                         mLastModemActivityInfo.getIdleTimeMillis(),
+                         mLastModemActivitySpecificInfo);
+    }
+
+    private ActivityStatsTechSpecificInfo[] deepCopyModemActivitySpecificInfo(
+            ActivityStatsTechSpecificInfo[] info) {
+        int infoSize = info.length;
+        ActivityStatsTechSpecificInfo[] ret = new ActivityStatsTechSpecificInfo[infoSize];
+        for (int i = 0; i < infoSize; i++) {
+            ret[i] = new ActivityStatsTechSpecificInfo(
+                    info[i].getRat(), info[i].getFrequencyRange(),
+                    info[i].getTransmitTimeMillis(),
+                    (int) info[i].getReceiveTimeMillis());
+        }
+        return ret;
     }
 
     /**
@@ -8090,10 +8172,21 @@
                 .contains(callingPackage);
         try {
             // isActiveSubId requires READ_PHONE_STATE, which we already check for above
-            if (!mSubscriptionController.isActiveSubId(subId, callingPackage, callingFeatureId)) {
-                Rlog.d(LOG_TAG,
-                        "getServiceStateForSubscriber returning null for inactive subId=" + subId);
-                return null;
+            if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
+                SubscriptionInfoInternal subInfo = SubscriptionManagerService.getInstance()
+                        .getSubscriptionInfoInternal(subId);
+                if (subInfo == null || !subInfo.isActive()) {
+                    Rlog.d(LOG_TAG, "getServiceStateForSubscriber returning null for inactive "
+                            + "subId=" + subId);
+                    return null;
+                }
+            } else {
+                if (!mSubscriptionController.isActiveSubId(subId, callingPackage,
+                        callingFeatureId)) {
+                    Rlog.d(LOG_TAG, "getServiceStateForSubscriber returning null for inactive "
+                            + "subId=" + subId);
+                    return null;
+                }
             }
 
             ServiceState ss = phone.getServiceState();
@@ -8244,6 +8337,16 @@
     }
 
     /**
+     * Make sure either called from same process as self (phone) or IPC caller has interact across
+     * users permission.
+     *
+     * @throws SecurityException if the caller does not have the required permission
+     */
+    private void enforceInteractAcrossUsersPermission(String message) {
+        mApp.enforceCallingOrSelfPermission(permission.INTERACT_ACROSS_USERS, message);
+    }
+
+    /**
      * Make sure called from the package in charge of visual voicemail.
      *
      * @throws SecurityException if the caller is not the visual voicemail package.
@@ -9232,7 +9335,7 @@
      */
     private int getDefaultNetworkType(int subId) {
         List<Integer> list = TelephonyProperties.default_network();
-        int phoneId = mSubscriptionController.getPhoneId(subId);
+        int phoneId = SubscriptionManager.getPhoneId(subId);
         if (phoneId >= 0 && phoneId < list.size() && list.get(phoneId) != null) {
             return list.get(phoneId);
         }
@@ -9781,12 +9884,22 @@
 
     /**
      * Get the IRadio HAL Version
+     * @deprecated use getHalVersion instead
      */
+    @Deprecated
     @Override
     public int getRadioHalVersion() {
+        return getHalVersion(HAL_SERVICE_RADIO);
+    }
+
+    /**
+     * Get the HAL Version of a specific service
+     */
+    @Override
+    public int getHalVersion(int service) {
         Phone phone = getDefaultPhone();
         if (phone == null) return -1;
-        HalVersion hv = phone.getHalVersion();
+        HalVersion hv = phone.getHalVersion(service);
         if (hv.equals(HalVersion.UNKNOWN)) return -1;
         return hv.major * 100 + hv.minor;
     }
@@ -11268,9 +11381,13 @@
         }
 
         Phone phone = getPhone(subId);
+        if (phone == null) {
+            loge("isPremiumCapabilityAvailableForPurchase: phone is null, subId=" + subId);
+            return false;
+        }
         final long identity = Binder.clearCallingIdentity();
         try {
-            return SliceStore.getInstance(phone)
+            return SlicePurchaseController.getInstance(phone)
                     .isPremiumCapabilityAvailableForPurchase(capability);
         } finally {
             Binder.restoreCallingIdentity(identity);
@@ -11300,6 +11417,21 @@
         }
 
         Phone phone = getPhone(subId);
+        if (phone == null) {
+            try {
+                int result = TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_REQUEST_FAILED;
+                callback.accept(result);
+                loge("purchasePremiumCapability: phone is null, subId=" + subId);
+            } catch (RemoteException e) {
+                String logStr = "Purchase premium capability "
+                        + TelephonyManager.convertPremiumCapabilityToString(capability)
+                        + " failed due to RemoteException handling null phone: " + e;
+                if (DBG) log(logStr);
+                AnomalyReporter.reportAnomaly(
+                        UUID.fromString(PURCHASE_PREMIUM_CAPABILITY_ERROR_UUID), logStr);
+            }
+            return;
+        }
         String appName;
         try {
             appName = mApp.getPackageManager().getApplicationLabel(mApp.getPackageManager()
@@ -11516,5 +11648,112 @@
         }
     }
 
+    /**
+     * Get the component name of the default app to direct respond-via-message intent for the
+     * user associated with this subscription, update the cache if there is no respond-via-message
+     * application currently configured for this user.
+     * @return component name of the app and class to direct Respond Via Message intent to, or
+     * {@code null} if the functionality is not supported.
+     * @hide
+     */
+    @Override
+    public @Nullable ComponentName getDefaultRespondViaMessageApplication(int subId,
+            boolean updateIfNeeded) {
+        enforceInteractAcrossUsersPermission("getDefaultRespondViaMessageApplication");
 
-}
+        Context context = getPhone(subId).getContext();
+        UserHandle userHandle = null;
+        final long identity = Binder.clearCallingIdentity();
+        try {
+            userHandle = TelephonyUtils.getSubscriptionUserHandle(context, subId);
+        } finally {
+            Binder.restoreCallingIdentity(identity);
+        }
+        return SmsApplication.getDefaultRespondViaMessageApplicationAsUser(context,
+                updateIfNeeded, userHandle);
+    }
+
+    /**
+     * Set whether the device is able to connect with null ciphering or integrity
+     * algorithms. This is a global setting and will apply to all active subscriptions
+     * and all new subscriptions after this.
+     *
+     * @param enabled when true, null  cipher and integrity algorithms are allowed.
+     * @hide
+     */
+    @Override
+    @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE)
+    public void setNullCipherAndIntegrityEnabled(boolean enabled) {
+        enforceModifyPermission();
+        checkForNullCipherAndIntegritySupport();
+
+        // Persist the state of our preference. Each GsmCdmaPhone instance is responsible
+        // for listening to these preference changes and applying them immediately.
+        SharedPreferences.Editor editor = mTelephonySharedPreferences.edit();
+        editor.putBoolean(Phone.PREF_NULL_CIPHER_AND_INTEGRITY_ENABLED, enabled);
+        editor.apply();
+
+        for (Phone phone: PhoneFactory.getPhones()) {
+            phone.handleNullCipherEnabledChange();
+        }
+    }
+
+
+    /**
+     * Get whether the device is able to connect with null ciphering or integrity
+     * algorithms. Note that this retrieves the phone-global preference and not
+     * the state of the radio.
+     *
+     * @throws SecurityException if {@link permission#MODIFY_PHONE_STATE} is not satisfied
+     * @throws UnsupportedOperationException if the device does not support the minimum HAL
+     * version for this feature.
+     * @hide
+     */
+    @Override
+    @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE)
+    public boolean isNullCipherAndIntegrityPreferenceEnabled() {
+        enforceReadPermission();
+        checkForNullCipherAndIntegritySupport();
+        return getDefaultPhone().getNullCipherAndIntegrityEnabledPreference();
+    }
+
+    private void checkForNullCipherAndIntegritySupport() {
+        if (getHalVersion(HAL_SERVICE_NETWORK) < MIN_NULL_CIPHER_AND_INTEGRITY_VERSION) {
+            throw new UnsupportedOperationException(
+                    "Null cipher and integrity operations require HAL 2.1 or above");
+        }
+    }
+
+    /**
+     * Get the SIM state for the slot index.
+     * For Remote-SIMs, this method returns {@link IccCardConstants.State#UNKNOWN}
+     *
+     * @return SIM state as the ordinal of {@link IccCardConstants.State}
+     */
+    @Override
+    @SimState
+    public int getSimStateForSlotIndex(int slotIndex) {
+        IccCardConstants.State simState;
+        if (slotIndex < 0) {
+            simState = IccCardConstants.State.UNKNOWN;
+        } else {
+            Phone phone = null;
+            try {
+                phone = PhoneFactory.getPhone(slotIndex);
+            } catch (IllegalStateException e) {
+                // ignore
+            }
+            if (phone == null) {
+                simState = IccCardConstants.State.UNKNOWN;
+            } else {
+                IccCard icc = phone.getIccCard();
+                if (icc == null) {
+                    simState = IccCardConstants.State.UNKNOWN;
+                } else {
+                    simState = icc.getState();
+                }
+            }
+        }
+        return simState.ordinal();
+    }
+}
\ No newline at end of file
diff --git a/src/com/android/phone/PhoneUtils.java b/src/com/android/phone/PhoneUtils.java
index d0aad4a..5f14387 100644
--- a/src/com/android/phone/PhoneUtils.java
+++ b/src/com/android/phone/PhoneUtils.java
@@ -31,6 +31,7 @@
 import android.os.Handler;
 import android.os.Message;
 import android.os.PersistableBundle;
+import android.os.UserHandle;
 import android.os.VibrationEffect;
 import android.os.Vibrator;
 import android.telecom.PhoneAccount;
@@ -701,31 +702,28 @@
         Log.d(LOG_TAG, msg);
     }
 
-    public static PhoneAccountHandle makePstnPhoneAccountHandle(String id) {
-        return makePstnPhoneAccountHandleWithPrefix(id, "", false);
-    }
-
-    public static PhoneAccountHandle makePstnPhoneAccountHandle(int phoneId) {
-        return makePstnPhoneAccountHandle(PhoneFactory.getPhone(phoneId));
-    }
-
     public static PhoneAccountHandle makePstnPhoneAccountHandle(Phone phone) {
-        return makePstnPhoneAccountHandleWithPrefix(phone, "", false);
+        return makePstnPhoneAccountHandleWithPrefix(phone, "",
+                false, phone.getUserHandle());
     }
 
     public static PhoneAccountHandle makePstnPhoneAccountHandleWithPrefix(
-            Phone phone, String prefix, boolean isEmergency) {
+            Phone phone, String prefix, boolean isEmergency, UserHandle userHandle) {
         // TODO: Should use some sort of special hidden flag to decorate this account as
         // an emergency-only account
         String id = isEmergency ? EMERGENCY_ACCOUNT_HANDLE_ID : prefix +
                 String.valueOf(phone.getSubId());
-        return makePstnPhoneAccountHandleWithPrefix(id, prefix, isEmergency);
+        return makePstnPhoneAccountHandleWithPrefix(id, prefix, isEmergency, userHandle);
     }
 
     public static PhoneAccountHandle makePstnPhoneAccountHandleWithPrefix(
-            String id, String prefix, boolean isEmergency) {
+            String id, String prefix, boolean isEmergency, UserHandle userHandle) {
         ComponentName pstnConnectionServiceName = getPstnConnectionServiceName();
-        return new PhoneAccountHandle(pstnConnectionServiceName, id);
+        // If user handle is null, resort to default constructor to use phone process's
+        // user handle
+        return userHandle == null
+                ? new PhoneAccountHandle(pstnConnectionServiceName, id)
+                : new PhoneAccountHandle(pstnConnectionServiceName, id, userHandle);
     }
 
     public static int getSubIdForPhoneAccount(PhoneAccount phoneAccount) {
diff --git a/src/com/android/phone/Telephony2gUpdater.java b/src/com/android/phone/Telephony2gUpdater.java
new file mode 100644
index 0000000..0919385
--- /dev/null
+++ b/src/com/android/phone/Telephony2gUpdater.java
@@ -0,0 +1,134 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.phone;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.UserManager;
+import android.telephony.RadioAccessFamily;
+import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
+import android.util.Log;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.telephony.RILConstants;
+
+import java.util.List;
+import java.util.concurrent.Executor;
+
+/**
+ * A {@link BroadcastReceiver} that ensures that user restrictions are correctly applied to
+ * telephony.
+ * This includes handling broadcasts from user restriction state changes, as well as ensuring that
+ * SIM-specific settings are correctly applied when new subscriptions become active.
+ *
+ * Callers are expected to call {@code init()} and keep an instance of this class alive.
+ */
+public class Telephony2gUpdater extends BroadcastReceiver {
+    private static final String TAG = "TelephonyUserManagerReceiver";
+
+    // We can't interact with the HAL on the main thread of the phone process (where
+    // receivers are run by default), so we execute our logic from a separate thread.
+    private final Executor mExecutor;
+    private final Context mContext;
+    private final long mBaseAllowedNetworks;
+
+    public Telephony2gUpdater(Executor executor, Context context) {
+        this(executor, context,
+                RadioAccessFamily.getRafFromNetworkType(RILConstants.PREFERRED_NETWORK_MODE));
+    }
+
+    public Telephony2gUpdater(Executor executor, Context context,
+            long baseAllowedNetworks) {
+        mExecutor = executor;
+        mContext = context;
+        mBaseAllowedNetworks = baseAllowedNetworks;
+    }
+
+    /**
+     * Register the given instance as a {@link BroadcastReceiver} and a {@link
+     * SubscriptionManager.OnSubscriptionsChangedListener}.
+     */
+    public void init() {
+        mContext.getSystemService(SubscriptionManager.class).addOnSubscriptionsChangedListener(
+                mExecutor, new SubscriptionListener());
+        IntentFilter filter = new IntentFilter();
+        filter.addAction(UserManager.ACTION_USER_RESTRICTIONS_CHANGED);
+        mContext.registerReceiver(this, filter);
+    }
+
+    @Override
+    public void onReceive(Context context, Intent intent) {
+        if (context == null || intent == null) return;
+        Log.i(TAG, "Received callback for action " + intent.getAction());
+        final PendingResult result = goAsync();
+        mExecutor.execute(() -> {
+            Log.i(TAG, "Running handler for action " + intent.getAction());
+            handleUserRestrictionsChanged(context);
+            result.finish();
+        });
+    }
+
+    /**
+     * Update all active subscriptions with allowed network types depending on the current state
+     * of the {@link UserManager.DISALLOW_2G}.
+     */
+    @VisibleForTesting
+    public void handleUserRestrictionsChanged(Context context) {
+        UserManager um = context.getSystemService(UserManager.class);
+        TelephonyManager tm = context.getSystemService(TelephonyManager.class);
+        SubscriptionManager sm = context.getSystemService(SubscriptionManager.class);
+        final long twoGBitmask = TelephonyManager.NETWORK_CLASS_BITMASK_2G;
+
+        boolean shouldDisable2g = um.hasUserRestriction(UserManager.DISALLOW_CELLULAR_2G);
+
+        // This is expected when subscription info cannot be determined. We'll get another
+        // callback in the future from our SubscriptionListener once we have valid subscriptions.
+        List<SubscriptionInfo> subscriptionInfoList = sm.getAvailableSubscriptionInfoList();
+        if (subscriptionInfoList == null) {
+            return;
+        }
+
+        long allowedNetworkTypes = mBaseAllowedNetworks;
+
+        // 2G device admin controls are global
+        for (SubscriptionInfo info : subscriptionInfoList) {
+            TelephonyManager telephonyManager = tm.createForSubscriptionId(
+                    info.getSubscriptionId());
+            if (shouldDisable2g) {
+                allowedNetworkTypes &= ~twoGBitmask;
+            } else {
+                allowedNetworkTypes |= twoGBitmask;
+            }
+            telephonyManager.setAllowedNetworkTypesForReason(
+                    TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER_RESTRICTIONS,
+                    allowedNetworkTypes);
+        }
+    }
+
+    private class SubscriptionListener extends SubscriptionManager.OnSubscriptionsChangedListener {
+        @Override
+        public void onSubscriptionsChanged() {
+            Log.i(TAG, "Running handler for subscription change.");
+            handleUserRestrictionsChanged(mContext);
+        }
+    }
+
+}
diff --git a/src/com/android/phone/TelephonyShellCommand.java b/src/com/android/phone/TelephonyShellCommand.java
index 0cf120a..fdaf1bb 100644
--- a/src/com/android/phone/TelephonyShellCommand.java
+++ b/src/com/android/phone/TelephonyShellCommand.java
@@ -1099,7 +1099,7 @@
     private int handleBarringSendCommand() {
         PrintWriter errPw = getErrPrintWriter();
         int slotId = getDefaultSlot();
-        int subId = SubscriptionManager.getSubId(slotId)[0];
+        int subId = SubscriptionManager.getSubscriptionId(slotId);
         @BarringInfo.BarringServiceInfo.BarringType int barringType =
                 BarringInfo.BarringServiceInfo.BARRING_TYPE_UNCONDITIONAL;
         boolean isConditionallyBarred = false;
@@ -1111,7 +1111,7 @@
                 case "-s": {
                     try {
                         slotId = Integer.parseInt(getNextArgRequired());
-                        subId = SubscriptionManager.getSubId(slotId)[0];
+                        subId = SubscriptionManager.getSubscriptionId(slotId);
                     } catch (NumberFormatException e) {
                         errPw.println("barring send requires an integer as a SLOT_ID.");
                         return -1;
@@ -2162,8 +2162,7 @@
                 return SubscriptionManager.INVALID_SUBSCRIPTION_ID;
             }
         }
-        int[] subIds = SubscriptionManager.getSubId(slotId);
-        return subIds[0];
+        return SubscriptionManager.getSubscriptionId(slotId);
     }
 
     private int handleGbaSetServiceCommand() {
diff --git a/src/com/android/phone/settings/AccessibilitySettingsFragment.java b/src/com/android/phone/settings/AccessibilitySettingsFragment.java
index 475d878..4c29e65 100644
--- a/src/com/android/phone/settings/AccessibilitySettingsFragment.java
+++ b/src/com/android/phone/settings/AccessibilitySettingsFragment.java
@@ -40,6 +40,7 @@
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneFactory;
 import com.android.internal.telephony.SubscriptionController;
+import com.android.internal.telephony.subscription.SubscriptionManagerService;
 import com.android.phone.PhoneGlobals;
 import com.android.phone.R;
 
@@ -183,10 +184,16 @@
             // Update RTT config with IMS Manager if the always-on carrier config isn't set to true.
             CarrierConfigManager configManager = (CarrierConfigManager) mContext.getSystemService(
                             Context.CARRIER_CONFIG_SERVICE);
-            for (int subId : SubscriptionController.getInstance().getActiveSubIdList(true)) {
+            int[] activeSubIds;
+            if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
+                activeSubIds = SubscriptionManagerService.getInstance().getActiveSubIdList(true);
+            } else {
+                activeSubIds = SubscriptionController.getInstance().getActiveSubIdList(true);
+            }
+            for (int subId : activeSubIds) {
                 if (!configManager.getConfigForSubId(subId).getBoolean(
                         CarrierConfigManager.KEY_IGNORE_RTT_MODE_SETTING_BOOL, false)) {
-                    int phoneId = SubscriptionController.getInstance().getPhoneId(subId);
+                    int phoneId = SubscriptionManager.getPhoneId(subId);
                     ImsManager imsManager = ImsManager.getInstance(getContext(), phoneId);
                     imsManager.setRttEnabled(mButtonRtt.isChecked());
                 }
@@ -264,6 +271,14 @@
     private boolean shouldShowRttSetting() {
         // Go through all the subs -- if we want to display the RTT setting for any of them, do
         // display it.
+        if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
+            for (int subId : SubscriptionManagerService.getInstance().getActiveSubIdList(true)) {
+                if (PhoneGlobals.getInstance().phoneMgr.isRttSupported(subId)) {
+                    return true;
+                }
+            }
+            return false;
+        }
         for (int subId : SubscriptionController.getInstance().getActiveSubIdList(true)) {
             if (PhoneGlobals.getInstance().phoneMgr.isRttSupported(subId)) {
                 return true;
diff --git a/src/com/android/phone/settings/PhoneAccountSettingsFragment.java b/src/com/android/phone/settings/PhoneAccountSettingsFragment.java
index 49e1379..7cc9235 100644
--- a/src/com/android/phone/settings/PhoneAccountSettingsFragment.java
+++ b/src/com/android/phone/settings/PhoneAccountSettingsFragment.java
@@ -6,7 +6,9 @@
 import android.content.pm.PackageManager;
 import android.content.pm.ResolveInfo;
 import android.graphics.drawable.Icon;
+import android.os.Binder;
 import android.os.Bundle;
+import android.os.UserHandle;
 import android.os.UserManager;
 import android.preference.Preference;
 import android.preference.PreferenceCategory;
@@ -364,6 +366,7 @@
                 mTelecomManager.getCallCapablePhoneAccounts(includeDisabledAccounts);
         for (Iterator<PhoneAccountHandle> i = accountHandles.iterator(); i.hasNext();) {
             PhoneAccountHandle handle = i.next();
+            UserHandle userHandle = handle.getUserHandle();
             if (handle.equals(emergencyAccountHandle)) {
                 // never include emergency call accounts in this piece of code.
                 i.remove();
@@ -376,6 +379,11 @@
             } else if (!includeSims &&
                     account.hasCapabilities(PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION)) {
                 i.remove();
+            } else if (!userHandle.equals(Binder.getCallingUserHandle())
+                    && !account.hasCapabilities(PhoneAccount.CAPABILITY_MULTI_USER)) {
+                // Only show accounts for the current user (unless account has
+                // CAPABILITY_MULTI_USER).
+                i.remove();
             }
         }
         return accountHandles;
@@ -387,7 +395,7 @@
 
     private PhoneAccountHandle getEmergencyPhoneAccount() {
         return PhoneUtils.makePstnPhoneAccountHandleWithPrefix(
-                (Phone) null, "" /* prefix */, true /* isEmergency */);
+                (Phone) null, "" /* prefix */, true /* isEmergency */, null /* userHandle */);
     }
 
     public static Intent buildPhoneAccountConfigureIntent(
diff --git a/src/com/android/phone/settings/RadioInfo.java b/src/com/android/phone/settings/RadioInfo.java
index c6dbfc6..ac3259a 100644
--- a/src/com/android/phone/settings/RadioInfo.java
+++ b/src/com/android/phone/settings/RadioInfo.java
@@ -72,6 +72,13 @@
 import android.telephony.TelephonyDisplayInfo;
 import android.telephony.TelephonyManager;
 import android.telephony.data.NetworkSlicingConfig;
+import android.telephony.ims.ImsException;
+import android.telephony.ims.ImsManager;
+import android.telephony.ims.ImsMmTelManager;
+import android.telephony.ims.ImsRcsManager;
+import android.telephony.ims.ProvisioningManager;
+import android.telephony.ims.feature.MmTelFeature;
+import android.telephony.ims.stub.ImsRegistrationImplBase;
 import android.text.TextUtils;
 import android.util.Log;
 import android.view.Menu;
@@ -92,9 +99,6 @@
 import androidx.appcompat.app.AlertDialog.Builder;
 import androidx.appcompat.app.AppCompatActivity;
 
-import com.android.ims.ImsConfig;
-import com.android.ims.ImsException;
-import com.android.ims.ImsManager;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneFactory;
 import com.android.internal.telephony.euicc.EuiccConnector;
@@ -177,18 +181,6 @@
      */
     private static final int ALWAYS_ON_DSDS_MODE = 1;
 
-    private static final int IMS_VOLTE_PROVISIONED_CONFIG_ID =
-            ImsConfig.ConfigConstants.VLT_SETTING_ENABLED;
-
-    private static final int IMS_VT_PROVISIONED_CONFIG_ID =
-            ImsConfig.ConfigConstants.LVC_SETTING_ENABLED;
-
-    private static final int IMS_WFC_PROVISIONED_CONFIG_ID =
-            ImsConfig.ConfigConstants.VOICE_OVER_WIFI_SETTING_ENABLED;
-
-    private static final int EAB_PROVISIONED_CONFIG_ID =
-            ImsConfig.ConfigConstants.EAB_SETTING_ENABLED;
-
     //Values in must match CELL_INFO_REFRESH_RATES
     private static final String[] CELL_INFO_REFRESH_RATE_LABELS = {
             "Disabled",
@@ -293,6 +285,7 @@
     private TelephonyManager mTelephonyManager;
     private ImsManager mImsManager = null;
     private Phone mPhone = null;
+    private ProvisioningManager mProvisioningManager = null;
 
     private String mPingHostnameResultV4;
     private String mPingHostnameResultV6;
@@ -422,12 +415,23 @@
         unregisterPhoneStateListener();
         mTelephonyManager.setCellInfoListRate(sCellInfoListRateDisabled, mPhone.getSubId());
 
+        if (phoneIndex == SubscriptionManager.INVALID_PHONE_INDEX) {
+            log("Invalid phone index " + phoneIndex + ", subscription ID " + subId);
+            return;
+        }
+
         // update the subId
         mTelephonyManager = mTelephonyManager.createForSubscriptionId(subId);
 
         // update the phoneId
-        mImsManager = ImsManager.getInstance(getApplicationContext(), phoneIndex);
         mPhone = PhoneFactory.getPhone(phoneIndex);
+        mImsManager = new ImsManager(mPhone.getContext());
+        try {
+            mProvisioningManager = ProvisioningManager.createForSubscriptionId(subId);
+        } catch (IllegalArgumentException e) {
+            log("updatePhoneIndex : IllegalArgumentException " + e.getMessage());
+            mProvisioningManager = null;
+        }
 
         updateAllFields();
     }
@@ -483,11 +487,17 @@
         mQueuedWork = new ThreadPoolExecutor(1, 1, RUNNABLE_TIMEOUT_MS, TimeUnit.MICROSECONDS,
                 new LinkedBlockingDeque<Runnable>());
         mConnectivityManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);
-        mPhone = PhoneFactory.getDefaultPhone();
+        mPhone = getPhone(SubscriptionManager.getDefaultSubscriptionId());
         mTelephonyManager = ((TelephonyManager) getSystemService(TELEPHONY_SERVICE))
                 .createForSubscriptionId(mPhone.getSubId());
 
-        mImsManager = ImsManager.getInstance(getApplicationContext(), mPhone.getPhoneId());
+        mImsManager = new ImsManager(mPhone.getContext());
+        try {
+            mProvisioningManager = ProvisioningManager.createForSubscriptionId(mPhone.getSubId());
+        } catch (IllegalArgumentException e) {
+            log("onCreate : IllegalArgumentException " + e.getMessage());
+            mProvisioningManager = null;
+        }
 
         sPhoneIndexLabels = getPhoneIndexLabels(mTelephonyManager);
 
@@ -555,7 +565,7 @@
         mImsWfcProvisionedSwitch = (Switch) findViewById(R.id.wfc_provisioned_switch);
         mEabProvisionedSwitch = (Switch) findViewById(R.id.eab_provisioned_switch);
 
-        if (!ImsManager.isImsSupportedOnDevice(mPhone.getContext())) {
+        if (!isImsSupportedOnDevice(mPhone.getContext())) {
             mImsVolteProvisionedSwitch.setVisibility(View.GONE);
             mImsVtProvisionedSwitch.setVisibility(View.GONE);
             mImsWfcProvisionedSwitch.setVisibility(View.GONE);
@@ -635,7 +645,7 @@
 
         mCellInfoRefreshRateIndex = 0; //disabled
         mPreferredNetworkTypeResult = PREFERRED_NETWORK_LABELS.length - 1; //Unknown
-        mSelectedPhoneIndex = 0; //phone 0
+        mSelectedPhoneIndex = mPhone.getPhoneId();
 
         new Thread(() -> {
             int networkType = (int) mTelephonyManager.getPreferredNetworkTypeBitmask();
@@ -786,7 +796,7 @@
                 R.string.radioInfo_menu_viewFDN).setOnMenuItemClickListener(mViewFDNCallback);
         menu.add(1, MENU_ITEM_VIEW_SDN, 0,
                 R.string.radioInfo_menu_viewSDN).setOnMenuItemClickListener(mViewSDNCallback);
-        if (ImsManager.isImsSupportedOnDevice(mPhone.getContext())) {
+        if (isImsSupportedOnDevice(mPhone.getContext())) {
             menu.add(1, MENU_ITEM_GET_IMS_STATUS,
                     0, R.string.radioInfo_menu_getIMS).setOnMenuItemClickListener(mGetImsStatus);
         }
@@ -1514,34 +1524,38 @@
         mRadioPowerOnSwitch.setOnCheckedChangeListener(mRadioPowerOnChangeListener);
     }
 
-    void setImsVolteProvisionedState(boolean state) {
+    private void setImsVolteProvisionedState(boolean state) {
         Log.d(TAG, "setImsVolteProvisioned state: " + ((state) ? "on" : "off"));
-        setImsConfigProvisionedState(IMS_VOLTE_PROVISIONED_CONFIG_ID, state);
+        setImsConfigProvisionedState(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
+                ImsRegistrationImplBase.REGISTRATION_TECH_LTE, state);
     }
 
-    void setImsVtProvisionedState(boolean state) {
+    private void setImsVtProvisionedState(boolean state) {
         Log.d(TAG, "setImsVtProvisioned() state: " + ((state) ? "on" : "off"));
-        setImsConfigProvisionedState(IMS_VT_PROVISIONED_CONFIG_ID, state);
+        setImsConfigProvisionedState(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VIDEO,
+                ImsRegistrationImplBase.REGISTRATION_TECH_LTE, state);
     }
 
-    void setImsWfcProvisionedState(boolean state) {
+    private void setImsWfcProvisionedState(boolean state) {
         Log.d(TAG, "setImsWfcProvisioned() state: " + ((state) ? "on" : "off"));
-        setImsConfigProvisionedState(IMS_WFC_PROVISIONED_CONFIG_ID, state);
+        setImsConfigProvisionedState(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
+                ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN, state);
     }
 
-    void setEabProvisionedState(boolean state) {
+    private void setEabProvisionedState(boolean state) {
         Log.d(TAG, "setEabProvisioned() state: " + ((state) ? "on" : "off"));
-        setImsConfigProvisionedState(EAB_PROVISIONED_CONFIG_ID, state);
+        setRcsConfigProvisionedState(ImsRcsManager.CAPABILITY_TYPE_PRESENCE_UCE,
+                ImsRegistrationImplBase.REGISTRATION_TECH_LTE, state);
     }
 
-    void setImsConfigProvisionedState(int configItem, boolean state) {
-        if (mPhone != null && mImsManager != null) {
+    private void setImsConfigProvisionedState(int capability, int tech, boolean state) {
+        if (mProvisioningManager != null) {
             mQueuedWork.execute(new Runnable() {
                 public void run() {
                     try {
-                        mImsManager.getConfigInterface().setProvisionedValue(
-                                configItem, state ? 1 : 0);
-                    } catch (ImsException e) {
+                        mProvisioningManager.setProvisioningStatusForCapability(
+                                capability, tech, state);
+                    } catch (RuntimeException e) {
                         Log.e(TAG, "setImsConfigProvisioned() exception:", e);
                     }
                 }
@@ -1549,6 +1563,71 @@
         }
     }
 
+    private void setRcsConfigProvisionedState(int capability, int tech, boolean state) {
+        if (mProvisioningManager != null) {
+            mQueuedWork.execute(new Runnable() {
+                public void run() {
+                    try {
+                        mProvisioningManager.setRcsProvisioningStatusForCapability(
+                                capability, tech, state);
+                    } catch (RuntimeException e) {
+                        Log.e(TAG, "setRcsConfigProvisioned() exception:", e);
+                    }
+                }
+            });
+        }
+    }
+
+    private boolean isImsVolteProvisioningRequired() {
+        return isImsConfigProvisioningRequired(
+                MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
+                ImsRegistrationImplBase.REGISTRATION_TECH_LTE);
+    }
+
+    private boolean isImsVtProvisioningRequired() {
+        return isImsConfigProvisioningRequired(
+                MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VIDEO,
+                ImsRegistrationImplBase.REGISTRATION_TECH_LTE);
+    }
+
+    private boolean isImsWfcProvisioningRequired() {
+        return isImsConfigProvisioningRequired(
+                MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
+                ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN);
+    }
+
+    private boolean isEabProvisioningRequired() {
+        return isRcsConfigProvisioningRequired(
+                ImsRcsManager.CAPABILITY_TYPE_PRESENCE_UCE,
+                ImsRegistrationImplBase.REGISTRATION_TECH_LTE);
+    }
+
+    private boolean isImsConfigProvisioningRequired(int capability, int tech) {
+        if (mProvisioningManager != null) {
+            try {
+                return mProvisioningManager.isProvisioningRequiredForCapability(
+                        capability, tech);
+            } catch (RuntimeException e) {
+                Log.e(TAG, "isImsConfigProvisioningRequired() exception:", e);
+            }
+        }
+
+        return false;
+    }
+
+    private boolean isRcsConfigProvisioningRequired(int capability, int tech) {
+        if (mProvisioningManager != null) {
+            try {
+                return mProvisioningManager.isRcsProvisioningRequiredForCapability(
+                        capability, tech);
+            } catch (RuntimeException e) {
+                Log.e(TAG, "isRcsConfigProvisioningRequired() exception:", e);
+            }
+        }
+
+        return false;
+    }
+
     OnCheckedChangeListener mRadioPowerOnChangeListener = new OnCheckedChangeListener() {
         @Override
         public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
@@ -1584,11 +1663,8 @@
     };
 
     private boolean isImsVolteProvisioned() {
-        if (mImsManager != null) {
-            return mImsManager.isVolteEnabledByPlatform()
-                && mImsManager.isVolteProvisionedOnDevice();
-        }
-        return false;
+        return getImsConfigProvisionedState(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
+                ImsRegistrationImplBase.REGISTRATION_TECH_LTE);
     }
 
     OnCheckedChangeListener mImsVolteCheckedChangeListener = new OnCheckedChangeListener() {
@@ -1599,11 +1675,8 @@
     };
 
     private boolean isImsVtProvisioned() {
-        if (mImsManager != null) {
-            return mImsManager.isVtEnabledByPlatform()
-                && mImsManager.isVtProvisionedOnDevice();
-        }
-        return false;
+        return getImsConfigProvisionedState(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VIDEO,
+                ImsRegistrationImplBase.REGISTRATION_TECH_LTE);
     }
 
     OnCheckedChangeListener mImsVtCheckedChangeListener = new OnCheckedChangeListener() {
@@ -1614,11 +1687,8 @@
     };
 
     private boolean isImsWfcProvisioned() {
-        if (mImsManager != null) {
-            return mImsManager.isWfcEnabledByPlatform()
-                && mImsManager.isWfcProvisionedOnDevice();
-        }
-        return false;
+        return getImsConfigProvisionedState(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
+                ImsRegistrationImplBase.REGISTRATION_TECH_IWLAN);
     }
 
     OnCheckedChangeListener mImsWfcCheckedChangeListener = new OnCheckedChangeListener() {
@@ -1629,7 +1699,8 @@
     };
 
     private boolean isEabProvisioned() {
-        return isFeatureProvisioned(EAB_PROVISIONED_CONFIG_ID, false);
+        return getRcsConfigProvisionedState(ImsRcsManager.CAPABILITY_TYPE_PRESENCE_UCE,
+                ImsRegistrationImplBase.REGISTRATION_TECH_LTE);
     }
 
     OnCheckedChangeListener mEabCheckedChangeListener = new OnCheckedChangeListener() {
@@ -1639,23 +1710,30 @@
         }
     };
 
-    private boolean isFeatureProvisioned(int featureId, boolean defaultValue) {
-        boolean provisioned = defaultValue;
-        if (mImsManager != null) {
+    private boolean getImsConfigProvisionedState(int capability, int tech) {
+        if (mProvisioningManager != null) {
             try {
-                ImsConfig imsConfig = mImsManager.getConfigInterface();
-                if (imsConfig != null) {
-                    provisioned =
-                            (imsConfig.getProvisionedValue(featureId)
-                                    == ImsConfig.FeatureValueConstants.ON);
-                }
-            } catch (ImsException ex) {
-                Log.e(TAG, "isFeatureProvisioned() exception:", ex);
+                return mProvisioningManager.getProvisioningStatusForCapability(
+                        capability, tech);
+            } catch (RuntimeException e) {
+                Log.e(TAG, "getImsConfigProvisionedState() exception:", e);
             }
         }
 
-        log("isFeatureProvisioned() featureId=" + featureId + " provisioned=" + provisioned);
-        return provisioned;
+        return false;
+    }
+
+    private boolean getRcsConfigProvisionedState(int capability, int tech) {
+        if (mProvisioningManager != null) {
+            try {
+                return mProvisioningManager.getRcsProvisioningStatusForCapability(
+                        capability, tech);
+            } catch (RuntimeException e) {
+                Log.e(TAG, "getRcsConfigProvisionedState() exception:", e);
+            }
+        }
+
+        return false;
     }
 
     private boolean isEabEnabledByPlatform() {
@@ -1674,35 +1752,56 @@
     }
 
     private void updateImsProvisionedState() {
-        if (!ImsManager.isImsSupportedOnDevice(mPhone.getContext())) {
+        if (!isImsSupportedOnDevice(mPhone.getContext())) {
             return;
         }
-        log("updateImsProvisionedState isImsVolteProvisioned()=" + isImsVolteProvisioned());
-        //delightful hack to prevent on-checked-changed calls from
-        //actually forcing the ims provisioning to its transient/current value.
+
+        updateServiceEnabledByPlatform();
+
+        updateEabProvisionedSwitch(isEabEnabledByPlatform());
+    }
+
+    private void updateVolteProvisionedSwitch(boolean isEnabledByPlatform) {
+        boolean isProvisioned = isEnabledByPlatform && isImsVolteProvisioned();
+        log("updateVolteProvisionedSwitch isProvisioned" + isProvisioned);
+
         mImsVolteProvisionedSwitch.setOnCheckedChangeListener(null);
-        mImsVolteProvisionedSwitch.setChecked(isImsVolteProvisioned());
+        mImsVolteProvisionedSwitch.setChecked(isProvisioned);
         mImsVolteProvisionedSwitch.setOnCheckedChangeListener(mImsVolteCheckedChangeListener);
         mImsVolteProvisionedSwitch.setEnabled(!IS_USER_BUILD
-                && mImsManager.isVolteEnabledByPlatform());
+                && isEnabledByPlatform && isImsVolteProvisioningRequired());
+    }
+
+    private void updateVtProvisionedSwitch(boolean isEnabledByPlatform) {
+        boolean isProvisioned = isEnabledByPlatform && isImsVtProvisioned();
+        log("updateVtProvisionedSwitch isProvisioned" + isProvisioned);
 
         mImsVtProvisionedSwitch.setOnCheckedChangeListener(null);
-        mImsVtProvisionedSwitch.setChecked(isImsVtProvisioned());
+        mImsVtProvisionedSwitch.setChecked(isProvisioned);
         mImsVtProvisionedSwitch.setOnCheckedChangeListener(mImsVtCheckedChangeListener);
         mImsVtProvisionedSwitch.setEnabled(!IS_USER_BUILD
-                && mImsManager.isVtEnabledByPlatform());
+                && isEnabledByPlatform && isImsVtProvisioningRequired());
+    }
+
+    private void updateWfcProvisionedSwitch(boolean isEnabledByPlatform) {
+        boolean isProvisioned = isEnabledByPlatform && isImsWfcProvisioned();
+        log("updateWfcProvisionedSwitch isProvisioned" + isProvisioned);
 
         mImsWfcProvisionedSwitch.setOnCheckedChangeListener(null);
-        mImsWfcProvisionedSwitch.setChecked(isImsWfcProvisioned());
+        mImsWfcProvisionedSwitch.setChecked(isProvisioned);
         mImsWfcProvisionedSwitch.setOnCheckedChangeListener(mImsWfcCheckedChangeListener);
         mImsWfcProvisionedSwitch.setEnabled(!IS_USER_BUILD
-                && mImsManager.isWfcEnabledByPlatform());
+                && isEnabledByPlatform && isImsWfcProvisioningRequired());
+    }
+
+    private void updateEabProvisionedSwitch(boolean isEnabledByPlatform) {
+        log("updateEabProvisionedSwitch isEabWfcProvisioned()=" + isEabProvisioned());
 
         mEabProvisionedSwitch.setOnCheckedChangeListener(null);
         mEabProvisionedSwitch.setChecked(isEabProvisioned());
         mEabProvisionedSwitch.setOnCheckedChangeListener(mEabCheckedChangeListener);
         mEabProvisionedSwitch.setEnabled(!IS_USER_BUILD
-                && isEabEnabledByPlatform());
+                && isEnabledByPlatform && isEabProvisioningRequired());
     }
 
     OnClickListener mDnsCheckButtonHandler = new OnClickListener() {
@@ -1803,14 +1902,8 @@
                     return;
                 }
                 // getSubId says it takes a slotIndex, but it actually takes a phone index
-                int subId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
-                int[] subIds = SubscriptionManager.getSubId(phoneIndex);
-                if (subIds != null && subIds.length > 0) {
-                    subId = subIds[0];
-                }
                 mSelectedPhoneIndex = phoneIndex;
-
-                updatePhoneIndex(phoneIndex, subId);
+                updatePhoneIndex(phoneIndex, SubscriptionManager.getSubscriptionId(phoneIndex));
             }
         }
 
@@ -1941,4 +2034,45 @@
         intent.putExtra("isDefault", isChecked);
         sendBroadcast(intent);
     }
+
+    private boolean isImsSupportedOnDevice(Context context) {
+        return context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_TELEPHONY_IMS);
+    }
+
+    private void updateServiceEnabledByPlatform() {
+        int subId = mPhone.getSubId();
+        if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
+            log("updateServiceEnabledByPlatform subscription ID is invalid");
+            return;
+        }
+
+        ImsMmTelManager imsMmTelManager = mImsManager.getImsMmTelManager(subId);
+        try {
+            imsMmTelManager.isSupported(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
+                    AccessNetworkConstants.TRANSPORT_TYPE_WWAN, getMainExecutor(), (result) -> {
+                        updateVolteProvisionedSwitch(result);
+                    });
+            imsMmTelManager.isSupported(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VIDEO,
+                    AccessNetworkConstants.TRANSPORT_TYPE_WWAN, getMainExecutor(), (result) -> {
+                        updateVtProvisionedSwitch(result);
+                    });
+            imsMmTelManager.isSupported(MmTelFeature.MmTelCapabilities.CAPABILITY_TYPE_VOICE,
+                    AccessNetworkConstants.TRANSPORT_TYPE_WLAN, getMainExecutor(), (result) -> {
+                        updateWfcProvisionedSwitch(result);
+                    });
+        } catch (ImsException e) {
+            e.printStackTrace();
+        }
+    }
+
+    private Phone getPhone(int subId) {
+        log("getPhone subId = " + subId);
+        Phone phone = PhoneFactory.getPhone(SubscriptionManager.getPhoneId(subId));
+        if (phone == null) {
+            log("return the default phone");
+            return PhoneFactory.getDefaultPhone();
+        }
+
+        return phone;
+    }
 }
diff --git a/src/com/android/phone/slice/PremiumNetworkEntitlementApi.java b/src/com/android/phone/slice/PremiumNetworkEntitlementApi.java
new file mode 100644
index 0000000..2546023
--- /dev/null
+++ b/src/com/android/phone/slice/PremiumNetworkEntitlementApi.java
@@ -0,0 +1,197 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.phone.slice;
+
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.os.PersistableBundle;
+import android.provider.DeviceConfig;
+import android.telephony.AnomalyReporter;
+import android.telephony.CarrierConfigManager;
+import android.telephony.TelephonyManager;
+import android.util.Log;
+
+import com.android.internal.telephony.Phone;
+import com.android.libraries.entitlement.CarrierConfig;
+import com.android.libraries.entitlement.ServiceEntitlement;
+import com.android.libraries.entitlement.ServiceEntitlementException;
+import com.android.libraries.entitlement.ServiceEntitlementRequest;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+import java.util.UUID;
+
+/**
+ * Premium network entitlement API class to check the premium network slice entitlement result
+ * from carrier API over the network.
+ */
+public class PremiumNetworkEntitlementApi {
+    private static final String TAG = "PremiumNwEntitlementApi";
+    private static final String ENTITLEMENT_STATUS_KEY = "EntitlementStatus";
+    private static final String PROVISION_STATUS_KEY = "ProvStatus";
+    private static final String SERVICE_FLOW_URL_KEY = "ServiceFlow_URL";
+    private static final String PROVISION_TIME_LEFT_KEY = "ProvisionTimeLeft";
+    private static final String DEFAULT_EAP_AKA_RESPONSE = "Default EAP AKA response";
+    /**
+     * UUID to report an anomaly if an unexpected error is received during entitlement check.
+     */
+    private static final String UUID_ENTITLEMENT_CHECK_UNEXPECTED_ERROR =
+            "f2b0661a-9114-4b1b-9add-a8d338f9c054";
+
+    /**
+     * Experiment flag to enable bypassing EAP-AKA authentication for Slice Purchase activities.
+     * The device will accept any challenge from the entitlement server and return a predefined
+     * string as a response.
+     *
+     * This flag should be enabled for testing only.
+     */
+    public static final String BYPASS_EAP_AKA_AUTH_FOR_SLICE_PURCHASE_ENABLED =
+            "bypass_eap_aka_auth_for_slice_purchase_enabled";
+
+    @NonNull private final Phone mPhone;
+    @NonNull private final ServiceEntitlement mServiceEntitlement;
+
+    public PremiumNetworkEntitlementApi(@NonNull Phone phone,
+            @NonNull PersistableBundle carrierConfig) {
+        mPhone = phone;
+        if (isBypassEapAkaAuthForSlicePurchaseEnabled()) {
+            mServiceEntitlement =
+                    new ServiceEntitlement(
+                            mPhone.getContext(),
+                            getEntitlementServerCarrierConfig(carrierConfig),
+                            mPhone.getSubId(),
+                            true,
+                            DEFAULT_EAP_AKA_RESPONSE);
+        } else {
+            mServiceEntitlement =
+                    new ServiceEntitlement(
+                            mPhone.getContext(),
+                            getEntitlementServerCarrierConfig(carrierConfig),
+                            mPhone.getSubId());
+        }
+    }
+
+    /**
+     * Returns premium network slice entitlement check result from carrier API (over network),
+     * or {@code null} on unrecoverable network issue or malformed server response.
+     * This is blocking call sending HTTP request and should not be called on main thread.
+     */
+    @Nullable public PremiumNetworkEntitlementResponse checkEntitlementStatus(
+            @TelephonyManager.PremiumCapability int capability) {
+        Log.d(TAG, "checkEntitlementStatus subId=" + mPhone.getSubId());
+        ServiceEntitlementRequest.Builder requestBuilder = ServiceEntitlementRequest.builder();
+        // Set fake device info to avoid leaking
+        requestBuilder.setTerminalVendor("vendorX");
+        requestBuilder.setTerminalModel("modelY");
+        requestBuilder.setTerminalSoftwareVersion("versionZ");
+        requestBuilder.setAcceptContentType(ServiceEntitlementRequest.ACCEPT_CONTENT_TYPE_JSON);
+        requestBuilder.setNetworkIdentifier(
+                TelephonyManager.convertPremiumCapabilityToString(capability));
+        ServiceEntitlementRequest request = requestBuilder.build();
+        PremiumNetworkEntitlementResponse premiumNetworkEntitlementResponse =
+                new PremiumNetworkEntitlementResponse();
+
+        String response = null;
+        try {
+            response = mServiceEntitlement.queryEntitlementStatus(
+                    ServiceEntitlement.APP_PREMIUM_NETWORK_SLICE,
+                    request);
+        } catch (ServiceEntitlementException e) {
+            Log.e(TAG, "queryEntitlementStatus failed", e);
+            reportAnomaly(UUID_ENTITLEMENT_CHECK_UNEXPECTED_ERROR,
+                    "checkEntitlementStatus failed with ServiceEntitlementException");
+        }
+        if (response == null) {
+            return null;
+        }
+        try {
+            JSONObject jsonAuthResponse = new JSONObject(response);
+            String entitlementStatus = null;
+            String provisionStatus = null;
+            String provisionTimeLeft = null;
+            if (jsonAuthResponse.has(ServiceEntitlement.APP_PREMIUM_NETWORK_SLICE)) {
+                JSONObject jsonToken = jsonAuthResponse.getJSONObject(
+                        ServiceEntitlement.APP_PREMIUM_NETWORK_SLICE);
+                if (jsonToken.has(ENTITLEMENT_STATUS_KEY)) {
+                    entitlementStatus = jsonToken.getString(ENTITLEMENT_STATUS_KEY);
+                    if (entitlementStatus == null) {
+                        return null;
+                    }
+                    premiumNetworkEntitlementResponse.mEntitlementStatus =
+                            Integer.parseInt(entitlementStatus);
+                }
+                if (jsonToken.has(PROVISION_STATUS_KEY)) {
+                    provisionStatus = jsonToken.getString(PROVISION_STATUS_KEY);
+                    if (provisionStatus != null) {
+                        premiumNetworkEntitlementResponse.mProvisionStatus =
+                                Integer.parseInt(provisionStatus);
+                    }
+                }
+                if (jsonToken.has(PROVISION_TIME_LEFT_KEY)) {
+                    provisionTimeLeft = jsonToken.getString(PROVISION_TIME_LEFT_KEY);
+                    if (provisionTimeLeft != null) {
+                        premiumNetworkEntitlementResponse.mProvisionTimeLeft =
+                                Integer.parseInt(provisionTimeLeft);
+                    }
+                }
+                if (jsonToken.has(SERVICE_FLOW_URL_KEY)) {
+                    premiumNetworkEntitlementResponse.mServiceFlowURL =
+                            jsonToken.getString(SERVICE_FLOW_URL_KEY);
+                }
+            }
+
+
+        } catch (JSONException e) {
+            Log.e(TAG, "queryEntitlementStatus failed", e);
+            reportAnomaly(UUID_ENTITLEMENT_CHECK_UNEXPECTED_ERROR,
+                    "checkEntitlementStatus failed with JSONException");
+        } catch (NumberFormatException e) {
+            Log.e(TAG, "queryEntitlementStatus failed", e);
+            reportAnomaly(UUID_ENTITLEMENT_CHECK_UNEXPECTED_ERROR,
+                    "checkEntitlementStatus failed with NumberFormatException");
+        }
+
+        return premiumNetworkEntitlementResponse;
+    }
+
+    private void reportAnomaly(@NonNull String uuid, @NonNull String log) {
+        AnomalyReporter.reportAnomaly(UUID.fromString(uuid), log);
+    }
+
+    /**
+     * Returns entitlement server url from the given carrier configs or a default empty string
+     * if it is not available.
+     */
+    @NonNull public static String getEntitlementServerUrl(
+            @NonNull PersistableBundle carrierConfig) {
+        return carrierConfig.getString(
+                CarrierConfigManager.ImsServiceEntitlement.KEY_ENTITLEMENT_SERVER_URL_STRING,
+                "");
+    }
+
+    @NonNull private CarrierConfig getEntitlementServerCarrierConfig(
+            @NonNull PersistableBundle carrierConfig) {
+        String entitlementServiceUrl = getEntitlementServerUrl(carrierConfig);
+        return CarrierConfig.builder().setServerUrl(entitlementServiceUrl).build();
+    }
+
+    private boolean isBypassEapAkaAuthForSlicePurchaseEnabled() {
+        return DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_TELEPHONY,
+                BYPASS_EAP_AKA_AUTH_FOR_SLICE_PURCHASE_ENABLED, false);
+    }
+}
diff --git a/src/com/android/phone/slice/PremiumNetworkEntitlementResponse.java b/src/com/android/phone/slice/PremiumNetworkEntitlementResponse.java
new file mode 100644
index 0000000..4e63e35
--- /dev/null
+++ b/src/com/android/phone/slice/PremiumNetworkEntitlementResponse.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.phone.slice;
+
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+
+/**
+ * Response class containing the entitlement status, provisioning status, and service flow URL
+ * for premium network entitlement checks.
+ */
+public class PremiumNetworkEntitlementResponse {
+    public static final int PREMIUM_NETWORK_ENTITLEMENT_STATUS_DISABLED = 0;
+    public static final int PREMIUM_NETWORK_ENTITLEMENT_STATUS_ENABLED = 1;
+    public static final int PREMIUM_NETWORK_ENTITLEMENT_STATUS_INCOMPATIBLE = 2;
+    public static final int PREMIUM_NETWORK_ENTITLEMENT_STATUS_PROVISIONING = 3;
+    public static final int PREMIUM_NETWORK_ENTITLEMENT_STATUS_INCLUDED = 4;
+
+    @IntDef(prefix = {"PREMIUM_NETWORK_ENTITLEMENT_STATUS_"},
+            value = {
+                    PREMIUM_NETWORK_ENTITLEMENT_STATUS_DISABLED,
+                    PREMIUM_NETWORK_ENTITLEMENT_STATUS_ENABLED,
+                    PREMIUM_NETWORK_ENTITLEMENT_STATUS_INCOMPATIBLE,
+                    PREMIUM_NETWORK_ENTITLEMENT_STATUS_PROVISIONING,
+                    PREMIUM_NETWORK_ENTITLEMENT_STATUS_INCLUDED
+            })
+    public @interface PremiumNetworkEntitlementStatus {}
+
+    public static final int PREMIUM_NETWORK_PROVISION_STATUS_NOT_PROVISIONED = 0;
+    public static final int PREMIUM_NETWORK_PROVISION_STATUS_PROVISIONED = 1;
+    public static final int PREMIUM_NETWORK_PROVISION_STATUS_NOT_REQUIRED = 2;
+    public static final int PREMIUM_NETWORK_PROVISION_STATUS_IN_PROGRESS = 3;
+
+    @IntDef(prefix = {"PREMIUM_NETWORK_PROVISION_STATUS_"},
+            value = {
+                    PREMIUM_NETWORK_PROVISION_STATUS_NOT_PROVISIONED,
+                    PREMIUM_NETWORK_PROVISION_STATUS_PROVISIONED,
+                    PREMIUM_NETWORK_PROVISION_STATUS_NOT_REQUIRED,
+                    PREMIUM_NETWORK_PROVISION_STATUS_IN_PROGRESS
+            })
+    public @interface PremiumNetworkProvisionStatus {}
+
+    @PremiumNetworkEntitlementStatus public int mEntitlementStatus;
+    @PremiumNetworkProvisionStatus public int mProvisionStatus;
+    public int mProvisionTimeLeft;
+    @NonNull public String mServiceFlowURL;
+
+    /**
+     * @return {@code true} if the premium network is provisioned and {@code false} otherwise.
+     */
+    public boolean isProvisioned() {
+        return mProvisionStatus == PREMIUM_NETWORK_PROVISION_STATUS_PROVISIONED
+                || mEntitlementStatus == PREMIUM_NETWORK_ENTITLEMENT_STATUS_INCLUDED;
+    }
+
+    /**
+     * @return {@code true} if provisioning the premium network is in progress and
+     *         {@code false} otherwise.
+     */
+    public boolean isProvisioningInProgress() {
+        return mProvisionStatus == PREMIUM_NETWORK_PROVISION_STATUS_IN_PROGRESS
+                || mEntitlementStatus == PREMIUM_NETWORK_ENTITLEMENT_STATUS_PROVISIONING;
+    }
+
+    /**
+     * @return {@code true} if the premium network capability is allowed and
+     *         {@code false} otherwise.
+     */
+    public boolean isPremiumNetworkCapabilityAllowed() {
+        switch (mEntitlementStatus) {
+            case PREMIUM_NETWORK_ENTITLEMENT_STATUS_INCOMPATIBLE:
+            case PREMIUM_NETWORK_ENTITLEMENT_STATUS_DISABLED:
+                return false;
+        }
+        return true;
+    }
+}
diff --git a/src/com/android/phone/slice/SlicePurchaseController.java b/src/com/android/phone/slice/SlicePurchaseController.java
new file mode 100644
index 0000000..ead6b8c
--- /dev/null
+++ b/src/com/android/phone/slice/SlicePurchaseController.java
@@ -0,0 +1,875 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.phone.slice;
+
+import static android.telephony.TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_IN_PROGRESS;
+import static android.telephony.TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED;
+import static android.telephony.TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_DISABLED;
+import static android.telephony.TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_ENTITLEMENT_CHECK_FAILED;
+import static android.telephony.TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_NOT_DEFAULT_DATA_SUBSCRIPTION;
+
+import android.annotation.IntDef;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.app.PendingIntent;
+import android.content.BroadcastReceiver;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.net.ConnectivityManager;
+import android.os.AsyncResult;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.Looper;
+import android.os.Message;
+import android.os.PersistableBundle;
+import android.telephony.AnomalyReporter;
+import android.telephony.CarrierConfigManager;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
+import android.telephony.data.NetworkSliceInfo;
+import android.telephony.data.NetworkSlicingConfig;
+import android.text.TextUtils;
+import android.util.Log;
+import android.webkit.URLUtil;
+import android.webkit.WebView;
+
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.telephony.Phone;
+
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.net.MalformedURLException;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+import java.util.concurrent.Executor;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Consumer;
+
+/**
+ * The SlicePurchaseController controls the purchase and availability of all cellular premium
+ * capabilities. Applications can check whether premium capabilities are available by calling
+ * {@link TelephonyManager#isPremiumCapabilityAvailableForPurchase(int)}. If this returns true,
+ * they can then call {@link TelephonyManager#purchasePremiumCapability(int, Executor, Consumer)}
+ * to purchase the premium capability. If all conditions are met, a notification will be displayed
+ * to the user prompting them to purchase the premium capability. If the user confirms on the
+ * notification, a {@link WebView} will open that allows the user to purchase the premium capability
+ * from the carrier. If the purchase is successful, the premium capability will be available for
+ * all applications to request through {@link ConnectivityManager#requestNetwork}.
+ */
+public class SlicePurchaseController extends Handler {
+    @NonNull private static final String TAG = "SlicePurchaseController";
+
+    /** Unknown failure code. */
+    public static final int FAILURE_CODE_UNKNOWN = 0;
+    /** Network boost purchase failed because the carrier URL is unavailable. */
+    public static final int FAILURE_CODE_CARRIER_URL_UNAVAILABLE = 1;
+    /** Network boost purchase failed because the server is unreachable. */
+    public static final int FAILURE_CODE_SERVER_UNREACHABLE = 2;
+    /** Network boost purchase failed because user authentication failed. */
+    public static final int FAILURE_CODE_AUTHENTICATION_FAILED = 3;
+    /** Network boost purchase failed because the payment failed. */
+    public static final int FAILURE_CODE_PAYMENT_FAILED = 4;
+
+    /**
+     * Failure codes that the carrier website can return when a premium capability purchase fails.
+     */
+    @Retention(RetentionPolicy.SOURCE)
+    @IntDef(prefix = { "FAILURE_CODE_" }, value = {
+            FAILURE_CODE_UNKNOWN,
+            FAILURE_CODE_CARRIER_URL_UNAVAILABLE,
+            FAILURE_CODE_SERVER_UNREACHABLE,
+            FAILURE_CODE_AUTHENTICATION_FAILED,
+            FAILURE_CODE_PAYMENT_FAILED})
+    public @interface FailureCode {}
+
+    /** Value for an invalid premium capability. */
+    public static final int PREMIUM_CAPABILITY_INVALID = -1;
+
+    /** Asset URL for the slice_purchase_test.html file. */
+    public static final String SLICE_PURCHASE_TEST_FILE =
+            "file:///android_asset/slice_purchase_test.html";
+
+    /** Purchasing the premium capability is no longer throttled. */
+    private static final int EVENT_PURCHASE_UNTHROTTLED = 1;
+    /** Slicing config changed. */
+    private static final int EVENT_SLICING_CONFIG_CHANGED = 2;
+    /** Display booster notification. */
+    private static final int EVENT_DISPLAY_BOOSTER_NOTIFICATION = 3;
+    /**
+     * Premium capability was not purchased within the timeout specified by
+     * {@link CarrierConfigManager#KEY_PREMIUM_CAPABILITY_NOTIFICATION_DISPLAY_TIMEOUT_MILLIS_LONG}.
+     */
+    private static final int EVENT_PURCHASE_TIMEOUT = 4;
+    /**
+     * Network did not set up the slicing configuration within the timeout specified by
+     * {@link CarrierConfigManager#KEY_PREMIUM_CAPABILITY_NETWORK_SETUP_TIME_MILLIS_LONG}.
+     */
+    private static final int EVENT_SETUP_TIMEOUT = 5;
+
+    /** UUID to report an anomaly when a premium capability is throttled twice in a row. */
+    private static final String UUID_CAPABILITY_THROTTLED_TWICE =
+            "15574927-e2e2-4593-99d4-2f340d22b383";
+    /** UUID to report an anomaly when receiving an invalid phone ID. */
+    private static final String UUID_INVALID_PHONE_ID = "ced79f1a-8ac0-4260-8cf3-08b54c0494f3";
+    /** UUID to report an anomaly when receiving an unknown action. */
+    private static final String UUID_UNKNOWN_ACTION = "0197efb0-dab1-4b0a-abaf-ac9336ec7923";
+    /** UUID to report an anomaly when receiving an unknown failure code with a non-empty reason. */
+    private static final String UUID_UNKNOWN_FAILURE_CODE = "76943b23-4415-400c-9855-b534fc4fc62c";
+    /**
+     * UUID to report an anomaly when the network fails to set up a slicing configuration after
+     * the user purchases a premium capability.
+     */
+    private static final String UUID_NETWORK_SETUP_FAILED = "12eeffbf-08f8-40ed-9a00-d344199552fc";
+
+    /**
+     * Action to start the slice purchase application and display the network boost notification.
+     */
+    public static final String ACTION_START_SLICE_PURCHASE_APP =
+            "com.android.phone.slice.action.START_SLICE_PURCHASE_APP";
+    /** Action indicating the premium capability purchase was not completed in time. */
+    public static final String ACTION_SLICE_PURCHASE_APP_RESPONSE_TIMEOUT =
+            "com.android.phone.slice.action.SLICE_PURCHASE_APP_RESPONSE_TIMEOUT";
+    /** Action indicating the network boost notification or WebView was canceled. */
+    private static final String ACTION_SLICE_PURCHASE_APP_RESPONSE_CANCELED =
+            "com.android.phone.slice.action.SLICE_PURCHASE_APP_RESPONSE_CANCELED";
+    /** Action indicating a carrier error prevented premium capability purchase. */
+    private static final String ACTION_SLICE_PURCHASE_APP_RESPONSE_CARRIER_ERROR =
+            "com.android.phone.slice.action.SLICE_PURCHASE_APP_RESPONSE_CARRIER_ERROR";
+    /**
+     * Action indicating a Telephony or slice purchase application error prevented premium
+     * capability purchase.
+     */
+    private static final String ACTION_SLICE_PURCHASE_APP_RESPONSE_REQUEST_FAILED =
+            "com.android.phone.slice.action.SLICE_PURCHASE_APP_RESPONSE_REQUEST_FAILED";
+    /** Action indicating the purchase request was not made on the default data subscription. */
+    private static final String ACTION_SLICE_PURCHASE_APP_RESPONSE_NOT_DEFAULT_DATA_SUBSCRIPTION =
+            "com.android.phone.slice.action."
+                    + "SLICE_PURCHASE_APP_RESPONSE_NOT_DEFAULT_DATA_SUBSCRIPTION";
+    /** Action indicating the purchase request was successful. */
+    private static final String ACTION_SLICE_PURCHASE_APP_RESPONSE_SUCCESS =
+            "com.android.phone.slice.action.SLICE_PURCHASE_APP_RESPONSE_SUCCESS";
+
+    /** Extra for the phone index to send to the slice purchase application. */
+    public static final String EXTRA_PHONE_ID = "com.android.phone.slice.extra.PHONE_ID";
+    /** Extra for the subscription ID to send to the slice purchase application. */
+    public static final String EXTRA_SUB_ID = "com.android.phone.slice.extra.SUB_ID";
+    /**
+     * Extra for the requested premium capability to purchase from the slice purchase application.
+     */
+    public static final String EXTRA_PREMIUM_CAPABILITY =
+            "com.android.phone.slice.extra.PREMIUM_CAPABILITY";
+    /** Extra for the duration of the purchased premium capability. */
+    public static final String EXTRA_PURCHASE_DURATION =
+            "com.android.phone.slice.extra.PURCHASE_DURATION";
+    /** Extra for the {@link FailureCode} why the premium capability purchase failed. */
+    public static final String EXTRA_FAILURE_CODE = "com.android.phone.slice.extra.FAILURE_CODE";
+    /** Extra for the human-readable reason why the premium capability purchase failed. */
+    public static final String EXTRA_FAILURE_REASON =
+            "com.android.phone.slice.extra.FAILURE_REASON";
+    /**
+     * Extra for the application name requesting to purchase the premium capability
+     * from the slice purchase application.
+     */
+    public static final String EXTRA_REQUESTING_APP_NAME =
+            "com.android.phone.slice.extra.REQUESTING_APP_NAME";
+    /**
+     * Extra for the canceled PendingIntent that the slice purchase application can send as a
+     * response if the network boost notification or WebView was canceled by the user.
+     * Sends {@link #ACTION_SLICE_PURCHASE_APP_RESPONSE_CANCELED}.
+     */
+    public static final String EXTRA_INTENT_CANCELED =
+            "com.android.phone.slice.extra.INTENT_CANCELED";
+    /**
+     * Extra for the carrier error PendingIntent that the slice purchase application can send as a
+     * response if the premium capability purchase request failed due to a carrier error.
+     * Sends {@link #ACTION_SLICE_PURCHASE_APP_RESPONSE_CARRIER_ERROR}.
+     * Sender can modify the intent to specify the failure code and reason for failure with
+     * {@link #EXTRA_FAILURE_CODE} and {@link #EXTRA_FAILURE_REASON}.
+     */
+    public static final String EXTRA_INTENT_CARRIER_ERROR =
+            "com.android.phone.slice.extra.INTENT_CARRIER_ERROR";
+    /**
+     * Extra for the request failed PendingIntent that the slice purchase application can send as a
+     * response if the premium capability purchase request failed due to an error in Telephony or
+     * the slice purchase application.
+     * Sends {@link #ACTION_SLICE_PURCHASE_APP_RESPONSE_REQUEST_FAILED}.
+     */
+    public static final String EXTRA_INTENT_REQUEST_FAILED =
+            "com.android.phone.slice.extra.INTENT_REQUEST_FAILED";
+    /**
+     * Extra for the not-default data subscription ID PendingIntent that the slice purchase
+     * application can send as a response if the premium capability purchase request failed because
+     * it was not requested on the default data subscription.
+     * Sends {@link #ACTION_SLICE_PURCHASE_APP_RESPONSE_NOT_DEFAULT_DATA_SUBSCRIPTION}.
+     */
+    public static final String EXTRA_INTENT_NOT_DEFAULT_DATA_SUBSCRIPTION =
+            "com.android.phone.slice.extra.INTENT_NOT_DEFAULT_DATA_SUBSCRIPTION";
+    /**
+     * Extra for the success PendingIntent that the slice purchase application can send as a
+     * response if the premium capability purchase request was successful.
+     * Sends {@link #ACTION_SLICE_PURCHASE_APP_RESPONSE_SUCCESS}.
+     * Sender can modify the intent to specify a purchase duration with
+     * {@link #EXTRA_PURCHASE_DURATION}.
+     */
+    public static final String EXTRA_INTENT_SUCCESS =
+            "com.android.phone.slice.extra.INTENT_SUCCESS";
+
+    /** Component name to send an explicit broadcast to SlicePurchaseBroadcastReceiver. */
+    private static final ComponentName SLICE_PURCHASE_APP_COMPONENT_NAME =
+            ComponentName.unflattenFromString(
+                    "com.android.carrierdefaultapp/.SlicePurchaseBroadcastReceiver");
+
+    /** Map of phone ID -> SlicePurchaseController instances. */
+    @NonNull private static final Map<Integer, SlicePurchaseController> sInstances =
+            new HashMap<>();
+
+    /** The Phone instance used to create the SlicePurchaseController. */
+    @NonNull private final Phone mPhone;
+    /** The set of capabilities that are pending network setup. */
+    @NonNull private final Set<Integer> mPendingSetupCapabilities = new HashSet<>();
+    /** The set of throttled capabilities. */
+    @NonNull private final Set<Integer> mThrottledCapabilities = new HashSet<>();
+    /** A map of pending capabilities to the onComplete message for the purchase request. */
+    @NonNull private final Map<Integer, Message> mPendingPurchaseCapabilities = new HashMap<>();
+    /**
+     * A map of capabilities to the SlicePurchaseControllerBroadcastReceiver to handle
+     * slice purchase application responses.
+     */
+    @NonNull private final Map<Integer, SlicePurchaseControllerBroadcastReceiver>
+            mSlicePurchaseControllerBroadcastReceivers = new HashMap<>();
+    /** The current network slicing configuration. */
+    @Nullable private NetworkSlicingConfig mSlicingConfig;
+    /** Premium network entitlement query API */
+    @NonNull private final PremiumNetworkEntitlementApi mPremiumNetworkEntitlementApi;
+
+    /**
+     * BroadcastReceiver to receive responses from the slice purchase application.
+     */
+    @VisibleForTesting
+    public class SlicePurchaseControllerBroadcastReceiver extends BroadcastReceiver {
+        @TelephonyManager.PremiumCapability private final int mCapability;
+
+        SlicePurchaseControllerBroadcastReceiver(
+                @TelephonyManager.PremiumCapability int capability) {
+            mCapability = capability;
+        }
+
+        @Override
+        public void onReceive(@NonNull Context context, @NonNull Intent intent) {
+            String action = intent.getAction();
+            logd("SlicePurchaseControllerBroadcastReceiver("
+                    + TelephonyManager.convertPremiumCapabilityToString(mCapability)
+                    + ") received action: " + action);
+            int phoneId = intent.getIntExtra(EXTRA_PHONE_ID,
+                    SubscriptionManager.INVALID_PHONE_INDEX);
+            int capability = intent.getIntExtra(EXTRA_PREMIUM_CAPABILITY,
+                    PREMIUM_CAPABILITY_INVALID);
+            if (SlicePurchaseController.getInstance(phoneId) == null) {
+                reportAnomaly(UUID_INVALID_PHONE_ID, "SlicePurchaseControllerBroadcastReceiver( "
+                        + TelephonyManager.convertPremiumCapabilityToString(mCapability)
+                        + ") received invalid phoneId: " + phoneId);
+                return;
+            } else if (capability != mCapability) {
+                logd("SlicePurchaseControllerBroadcastReceiver("
+                        + TelephonyManager.convertPremiumCapabilityToString(mCapability)
+                        + ") ignoring intent for capability "
+                        + TelephonyManager.convertPremiumCapabilityToString(capability));
+                return;
+            }
+            switch (action) {
+                case ACTION_SLICE_PURCHASE_APP_RESPONSE_CANCELED: {
+                    logd("Slice purchase application canceled for capability: "
+                            + TelephonyManager.convertPremiumCapabilityToString(capability));
+                    SlicePurchaseController.getInstance(phoneId)
+                            .handlePurchaseResult(capability,
+                            TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_USER_CANCELED,
+                            true);
+                    break;
+                }
+                case ACTION_SLICE_PURCHASE_APP_RESPONSE_CARRIER_ERROR: {
+                    int failureCode = intent.getIntExtra(EXTRA_FAILURE_CODE, FAILURE_CODE_UNKNOWN);
+                    String failureReason = intent.getStringExtra(EXTRA_FAILURE_REASON);
+                    SlicePurchaseController.getInstance(phoneId).onCarrierError(
+                            capability, failureCode, failureReason);
+                    break;
+                }
+                case ACTION_SLICE_PURCHASE_APP_RESPONSE_REQUEST_FAILED: {
+                    logd("Purchase premium capability request failed for capability: "
+                            + TelephonyManager.convertPremiumCapabilityToString(capability));
+                    SlicePurchaseController.getInstance(phoneId)
+                            .handlePurchaseResult(capability,
+                            TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_REQUEST_FAILED,
+                            false);
+                    break;
+                }
+                case ACTION_SLICE_PURCHASE_APP_RESPONSE_NOT_DEFAULT_DATA_SUBSCRIPTION: {
+                    logd("Purchase premium capability request was not made on the default data "
+                            + "subscription for capability: "
+                            + TelephonyManager.convertPremiumCapabilityToString(capability));
+                    SlicePurchaseController.getInstance(phoneId)
+                            .handlePurchaseResult(capability,
+                            PURCHASE_PREMIUM_CAPABILITY_RESULT_NOT_DEFAULT_DATA_SUBSCRIPTION,
+                            false);
+                    break;
+                }
+                case ACTION_SLICE_PURCHASE_APP_RESPONSE_SUCCESS: {
+                    long duration = intent.getLongExtra(EXTRA_PURCHASE_DURATION, 0);
+                    SlicePurchaseController.getInstance(phoneId).onCarrierSuccess(
+                            capability, duration);
+                    break;
+                }
+                default:
+                    reportAnomaly(UUID_UNKNOWN_ACTION, "SlicePurchaseControllerBroadcastReceiver("
+                            + TelephonyManager.convertPremiumCapabilityToString(mCapability)
+                            + ") received unknown action: " + action);
+                    break;
+            }
+        }
+    }
+
+    /**
+     * Get the static SlicePurchaseController instance for the given phone or create one if it
+     * doesn't exist.
+     *
+     * @param phone The Phone to get the SlicePurchaseController for.
+     * @return The static SlicePurchaseController instance.
+     */
+    @NonNull public static synchronized SlicePurchaseController getInstance(@NonNull Phone phone) {
+        // TODO: Add listeners for multi sim setting changed (maybe carrier config changed too)
+        //  that dismiss notifications and update SlicePurchaseController instance
+        int phoneId = phone.getPhoneId();
+        if (sInstances.get(phoneId) == null) {
+            HandlerThread handlerThread = new HandlerThread("SlicePurchaseController");
+            handlerThread.start();
+            sInstances.put(phoneId, new SlicePurchaseController(phone, handlerThread.getLooper()));
+        }
+        return sInstances.get(phoneId);
+    }
+
+    /**
+     * Get the static SlicePurchaseController instance for the given phone ID if it exists.
+     *
+     * @param phoneId The phone ID to get the SlicePurchaseController for.
+     * @return The static SlicePurchaseController instance or
+     *         {@code null} if it hasn't been created yet.
+     */
+    @Nullable private static SlicePurchaseController getInstance(int phoneId) {
+        return sInstances.get(phoneId);
+    }
+
+    /**
+     * Create a SlicePurchaseController for the given phone on the given looper.
+     * @param phone The Phone to create the SlicePurchaseController for.
+     * @param looper The Looper to run the SlicePurchaseController on.
+     */
+    @VisibleForTesting
+    public SlicePurchaseController(@NonNull Phone phone, @NonNull Looper looper) {
+        super(looper);
+        mPhone = phone;
+        // TODO: Create a cached value for slicing config in DataIndication and initialize here
+        mPhone.mCi.registerForSlicingConfigChanged(this, EVENT_SLICING_CONFIG_CHANGED, null);
+        mPremiumNetworkEntitlementApi = new PremiumNetworkEntitlementApi(mPhone,
+                getCarrierConfigs());
+    }
+
+    @Override
+    public void handleMessage(@NonNull Message msg) {
+        switch (msg.what) {
+            case EVENT_PURCHASE_UNTHROTTLED: {
+                int capability = (int) msg.obj;
+                logd("EVENT_PURCHASE_UNTHROTTLED: for capability "
+                        + TelephonyManager.convertPremiumCapabilityToString(capability));
+                mThrottledCapabilities.remove(capability);
+                break;
+            }
+            case EVENT_SLICING_CONFIG_CHANGED: {
+                AsyncResult ar = (AsyncResult) msg.obj;
+                NetworkSlicingConfig config = (NetworkSlicingConfig) ar.result;
+                logd("EVENT_SLICING_CONFIG_CHANGED: from " + mSlicingConfig + " to " + config);
+                mSlicingConfig = config;
+                onSlicingConfigChanged();
+                break;
+            }
+            case EVENT_DISPLAY_BOOSTER_NOTIFICATION: {
+                int capability = msg.arg1;
+                String appName = (String) msg.obj;
+                logd("EVENT_DISPLAY_BOOSTER_NOTIFICATION: " + appName + " requests capability "
+                        + TelephonyManager.convertPremiumCapabilityToString(capability));
+                onDisplayBoosterNotification(capability, appName);
+                break;
+            }
+            case EVENT_PURCHASE_TIMEOUT: {
+                int capability = (int) msg.obj;
+                logd("EVENT_PURCHASE_TIMEOUT: for capability "
+                        + TelephonyManager.convertPremiumCapabilityToString(capability));
+                onTimeout(capability);
+                break;
+            }
+            case EVENT_SETUP_TIMEOUT:
+                int capability = (int) msg.obj;
+                logd("EVENT_SETUP_TIMEOUT: for capability "
+                        + TelephonyManager.convertPremiumCapabilityToString(capability));
+                onSetupTimeout(capability);
+                break;
+            default:
+                loge("Unknown event: " + msg.obj);
+        }
+    }
+
+    /**
+     * Check whether the given premium capability is available for purchase from the carrier.
+     *
+     * @param capability The premium capability to check.
+     * @return Whether the given premium capability is available to purchase.
+     */
+    public boolean isPremiumCapabilityAvailableForPurchase(
+            @TelephonyManager.PremiumCapability int capability) {
+        if (!arePremiumCapabilitiesSupportedByDevice()) {
+            logd("Premium capabilities unsupported by the device.");
+            return false;
+        }
+        if (!isPremiumCapabilitySupportedByCarrier(capability)) {
+            logd("Premium capability "
+                    + TelephonyManager.convertPremiumCapabilityToString(capability)
+                    + " unsupported by the carrier.");
+            return false;
+        }
+        if (!isDefaultDataSub()) {
+            logd("Premium capability "
+                    + TelephonyManager.convertPremiumCapabilityToString(capability)
+                    + " unavailable on the non-default data subscription.");
+            return false;
+        }
+        logd("Premium capability "
+                + TelephonyManager.convertPremiumCapabilityToString(capability)
+                + " is available for purchase.");
+        return true;
+    }
+
+    /**
+     * Purchase the given premium capability from the carrier.
+     *
+     * @param capability The premium capability to purchase.
+     * @param appName The name of the application requesting premium capabilities.
+     * @param onComplete The callback message to send when the purchase request is complete.
+     */
+    public synchronized void purchasePremiumCapability(
+            @TelephonyManager.PremiumCapability int capability, @NonNull String appName,
+            @NonNull Message onComplete) {
+        logd("purchasePremiumCapability: " + appName + " requests capability "
+                + TelephonyManager.convertPremiumCapabilityToString(capability));
+        // Check whether the premium capability can be purchased.
+        if (!arePremiumCapabilitiesSupportedByDevice()) {
+            sendPurchaseResult(capability,
+                    TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_FEATURE_NOT_SUPPORTED,
+                    onComplete);
+            return;
+        }
+        if (!isPremiumCapabilitySupportedByCarrier(capability)) {
+            sendPurchaseResult(capability,
+                    PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_DISABLED,
+                    onComplete);
+            return;
+        }
+        if (!isDefaultDataSub()) {
+            sendPurchaseResult(capability,
+                    PURCHASE_PREMIUM_CAPABILITY_RESULT_NOT_DEFAULT_DATA_SUBSCRIPTION,
+                    onComplete);
+            return;
+        }
+        if (isSlicingConfigActive(capability)) {
+            sendPurchaseResult(capability,
+                    PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED,
+                    onComplete);
+            return;
+        }
+        if (mPendingSetupCapabilities.contains(capability)) {
+            sendPurchaseResult(capability,
+                    TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_PENDING_NETWORK_SETUP,
+                    onComplete);
+            return;
+        }
+        if (mThrottledCapabilities.contains(capability)) {
+            sendPurchaseResult(capability,
+                    TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED,
+                    onComplete);
+            return;
+        }
+        if (!isNetworkAvailable()) {
+            sendPurchaseResult(capability,
+                    TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_NETWORK_NOT_AVAILABLE,
+                    onComplete);
+            return;
+        }
+
+        if (mPendingPurchaseCapabilities.containsKey(capability)) {
+            sendPurchaseResult(capability,
+                    PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_IN_PROGRESS,
+                    onComplete);
+            return;
+        }
+
+        // All state checks passed. Mark purchase pending and display the booster notification to
+        // prompt user purchase. Process through the handler since this method is synchronized.
+        mPendingPurchaseCapabilities.put(capability, onComplete);
+        sendMessage(obtainMessage(EVENT_DISPLAY_BOOSTER_NOTIFICATION, capability, 0 /* unused */,
+                appName));
+    }
+
+    private void sendPurchaseResult(@TelephonyManager.PremiumCapability int capability,
+            @TelephonyManager.PurchasePremiumCapabilityResult int result,
+            @NonNull Message onComplete) {
+        // Send the onComplete message with the purchase result.
+        logd("Purchase result for capability "
+                + TelephonyManager.convertPremiumCapabilityToString(capability)
+                + ": " + TelephonyManager.convertPurchaseResultToString(result));
+        AsyncResult.forMessage(onComplete, result, null);
+        onComplete.sendToTarget();
+    }
+
+    private void handlePurchaseResult(
+            @TelephonyManager.PremiumCapability int capability,
+            @TelephonyManager.PurchasePremiumCapabilityResult int result, boolean throttle) {
+        SlicePurchaseControllerBroadcastReceiver receiver =
+                mSlicePurchaseControllerBroadcastReceivers.remove(capability);
+        if (receiver != null) {
+            mPhone.getContext().unregisterReceiver(receiver);
+        }
+        removeMessages(EVENT_PURCHASE_TIMEOUT, capability);
+        if (throttle) {
+            throttleCapability(capability, getThrottleDuration(result));
+        }
+        sendPurchaseResult(capability, result, mPendingPurchaseCapabilities.remove(capability));
+    }
+
+    private void throttleCapability(@TelephonyManager.PremiumCapability int capability,
+            long throttleDuration) {
+        // Throttle subsequent requests if necessary.
+        if (!mThrottledCapabilities.contains(capability)) {
+            if (throttleDuration > 0) {
+                logd("Throttle purchase requests for capability "
+                        + TelephonyManager.convertPremiumCapabilityToString(capability) + " for "
+                        + TimeUnit.MILLISECONDS.toMinutes(throttleDuration) + " minutes.");
+                mThrottledCapabilities.add(capability);
+                sendMessageDelayed(obtainMessage(EVENT_PURCHASE_UNTHROTTLED, capability),
+                        throttleDuration);
+            }
+        } else {
+            reportAnomaly(UUID_CAPABILITY_THROTTLED_TWICE,
+                    TelephonyManager.convertPremiumCapabilityToString(capability)
+                            + " is already throttled.");
+        }
+    }
+
+    private void onSlicingConfigChanged() {
+        for (int capability : new int[] {TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY}) {
+            if (isSlicingConfigActive(capability) && hasMessages(EVENT_SETUP_TIMEOUT, capability)) {
+                logd("Successfully set up slicing configuration for "
+                        + TelephonyManager.convertPremiumCapabilityToString(capability));
+                mPendingSetupCapabilities.remove(capability);
+                removeMessages(EVENT_SETUP_TIMEOUT, capability);
+            }
+        }
+    }
+
+    private void onDisplayBoosterNotification(@TelephonyManager.PremiumCapability int capability,
+            @NonNull String appName) {
+        PremiumNetworkEntitlementResponse premiumNetworkEntitlementResponse =
+                mPremiumNetworkEntitlementApi.checkEntitlementStatus(capability);
+
+        // invalid response for entitlement check
+        if (premiumNetworkEntitlementResponse == null) {
+            logd("Invalid response for entitlement check.");
+            handlePurchaseResult(capability,
+                    PURCHASE_PREMIUM_CAPABILITY_RESULT_ENTITLEMENT_CHECK_FAILED, true);
+            return;
+        }
+
+        if (premiumNetworkEntitlementResponse.isProvisioned()) {
+            logd("Entitlement Check: Already provisioned.");
+            handlePurchaseResult(capability,
+                    PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED, true);
+            return;
+        }
+
+        if (premiumNetworkEntitlementResponse.isProvisioningInProgress()) {
+            logd("Entitlement Check: In Progress");
+            handlePurchaseResult(capability,
+                    PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_IN_PROGRESS, true);
+            return;
+        }
+
+        if (!premiumNetworkEntitlementResponse.isPremiumNetworkCapabilityAllowed()) {
+            handlePurchaseResult(capability,
+                    PURCHASE_PREMIUM_CAPABILITY_RESULT_ENTITLEMENT_CHECK_FAILED, true);
+            return;
+        }
+
+        // Start timeout for purchase completion.
+        long timeout = getCarrierConfigs().getLong(CarrierConfigManager
+                .KEY_PREMIUM_CAPABILITY_NOTIFICATION_DISPLAY_TIMEOUT_MILLIS_LONG);
+        logd("Start purchase timeout for "
+                + TelephonyManager.convertPremiumCapabilityToString(capability) + " for "
+                + TimeUnit.MILLISECONDS.toMinutes(timeout) + " minutes.");
+        sendMessageDelayed(obtainMessage(EVENT_PURCHASE_TIMEOUT, capability), timeout);
+
+        // Broadcast start intent to start the slice purchase application
+        Intent intent = new Intent(ACTION_START_SLICE_PURCHASE_APP);
+        intent.setComponent(SLICE_PURCHASE_APP_COMPONENT_NAME);
+        intent.putExtra(EXTRA_PHONE_ID, mPhone.getPhoneId());
+        intent.putExtra(EXTRA_SUB_ID, mPhone.getSubId());
+        intent.putExtra(EXTRA_PREMIUM_CAPABILITY, capability);
+        intent.putExtra(EXTRA_REQUESTING_APP_NAME, appName);
+        intent.putExtra(EXTRA_INTENT_CANCELED, createPendingIntent(
+                ACTION_SLICE_PURCHASE_APP_RESPONSE_CANCELED, capability, false));
+        intent.putExtra(EXTRA_INTENT_CARRIER_ERROR, createPendingIntent(
+                ACTION_SLICE_PURCHASE_APP_RESPONSE_CARRIER_ERROR, capability, true));
+        intent.putExtra(EXTRA_INTENT_REQUEST_FAILED, createPendingIntent(
+                ACTION_SLICE_PURCHASE_APP_RESPONSE_REQUEST_FAILED, capability, false));
+        intent.putExtra(EXTRA_INTENT_NOT_DEFAULT_DATA_SUBSCRIPTION, createPendingIntent(
+                ACTION_SLICE_PURCHASE_APP_RESPONSE_NOT_DEFAULT_DATA_SUBSCRIPTION, capability,
+                false));
+        intent.putExtra(EXTRA_INTENT_SUCCESS, createPendingIntent(
+                ACTION_SLICE_PURCHASE_APP_RESPONSE_SUCCESS, capability, true));
+        logd("Broadcasting start intent to SlicePurchaseBroadcastReceiver.");
+        mPhone.getContext().sendBroadcast(intent);
+
+        // Listen for responses from the slice purchase application
+        mSlicePurchaseControllerBroadcastReceivers.put(capability,
+                new SlicePurchaseControllerBroadcastReceiver(capability));
+        IntentFilter filter = new IntentFilter();
+        filter.addAction(ACTION_SLICE_PURCHASE_APP_RESPONSE_CANCELED);
+        filter.addAction(ACTION_SLICE_PURCHASE_APP_RESPONSE_CARRIER_ERROR);
+        filter.addAction(ACTION_SLICE_PURCHASE_APP_RESPONSE_REQUEST_FAILED);
+        filter.addAction(ACTION_SLICE_PURCHASE_APP_RESPONSE_NOT_DEFAULT_DATA_SUBSCRIPTION);
+        filter.addAction(ACTION_SLICE_PURCHASE_APP_RESPONSE_SUCCESS);
+        mPhone.getContext().registerReceiver(
+                mSlicePurchaseControllerBroadcastReceivers.get(capability), filter);
+    }
+
+    /**
+     * Create the PendingIntent to allow the slice purchase application to send back responses.
+     *
+     * @param action The action that will be sent for this PendingIntent
+     * @param capability The premium capability that was requested.
+     * @param mutable {@code true} if the PendingIntent should be mutable and
+     *                {@code false} if it should be immutable.
+     * @return The PendingIntent for the given action and capability.
+     */
+    @VisibleForTesting
+    @NonNull public PendingIntent createPendingIntent(@NonNull String action,
+            @TelephonyManager.PremiumCapability int capability, boolean mutable) {
+        Intent intent = new Intent(action);
+        intent.putExtra(EXTRA_PHONE_ID, mPhone.getPhoneId());
+        intent.putExtra(EXTRA_PREMIUM_CAPABILITY, capability);
+        return PendingIntent.getBroadcast(mPhone.getContext(), capability, intent,
+                PendingIntent.FLAG_CANCEL_CURRENT
+                        | (mutable ? PendingIntent.FLAG_MUTABLE : PendingIntent.FLAG_IMMUTABLE));
+    }
+
+    private void onTimeout(@TelephonyManager.PremiumCapability int capability) {
+        logd("onTimeout: " + TelephonyManager.convertPremiumCapabilityToString(capability));
+        // Broadcast timeout intent to clean up the slice purchase notification and activity
+        Intent intent = new Intent(ACTION_SLICE_PURCHASE_APP_RESPONSE_TIMEOUT);
+        intent.setComponent(SLICE_PURCHASE_APP_COMPONENT_NAME);
+        intent.putExtra(EXTRA_PHONE_ID, mPhone.getPhoneId());
+        intent.putExtra(EXTRA_PREMIUM_CAPABILITY, capability);
+        logd("Broadcasting timeout intent to SlicePurchaseBroadcastReceiver.");
+        mPhone.getContext().sendBroadcast(intent);
+
+        handlePurchaseResult(
+                capability, TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_TIMEOUT, true);
+    }
+
+    private void onCarrierError(@TelephonyManager.PremiumCapability int capability,
+            @FailureCode int failureCode, @Nullable String failureReason) {
+        logd("Carrier error for capability: "
+                + TelephonyManager.convertPremiumCapabilityToString(capability) + " with code: "
+                + convertFailureCodeToString(failureCode) + " and reason: " + failureReason);
+        if (failureCode == FAILURE_CODE_UNKNOWN && !TextUtils.isEmpty(failureReason)) {
+            reportAnomaly(UUID_UNKNOWN_FAILURE_CODE,
+                    "Failure code needs to be added for: " + failureReason);
+        }
+        handlePurchaseResult(capability,
+                TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_ERROR, true);
+    }
+
+    private void onCarrierSuccess(@TelephonyManager.PremiumCapability int capability,
+            long duration) {
+        logd("Successfully purchased premium capability "
+                + TelephonyManager.convertPremiumCapabilityToString(capability) + (duration > 0
+                ? " for " + TimeUnit.MILLISECONDS.toMinutes(duration) + " minutes." : "."));
+        mPendingSetupCapabilities.add(capability);
+        long setupDuration = getCarrierConfigs().getLong(
+                CarrierConfigManager.KEY_PREMIUM_CAPABILITY_NETWORK_SETUP_TIME_MILLIS_LONG);
+        logd("Waiting " + TimeUnit.MILLISECONDS.toMinutes(setupDuration) + " minutes for the "
+                + "network to set up the slicing configuration.");
+        sendMessageDelayed(obtainMessage(EVENT_SETUP_TIMEOUT, capability), setupDuration);
+        handlePurchaseResult(
+                capability, TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS, false);
+    }
+
+    private void onSetupTimeout(@TelephonyManager.PremiumCapability int capability) {
+        logd("onSetupTimeout: " + TelephonyManager.convertPremiumCapabilityToString(capability));
+        mPendingSetupCapabilities.remove(capability);
+        if (!isSlicingConfigActive(capability)) {
+            reportAnomaly(UUID_NETWORK_SETUP_FAILED,
+                    "Failed to set up slicing configuration for capability "
+                            + TelephonyManager.convertPremiumCapabilityToString(capability)
+                            + " within the time specified.");
+        }
+    }
+
+    @Nullable private PersistableBundle getCarrierConfigs() {
+        return mPhone.getContext().getSystemService(CarrierConfigManager.class)
+                .getConfigForSubId(mPhone.getSubId());
+    }
+
+    private long getThrottleDuration(@TelephonyManager.PurchasePremiumCapabilityResult int result) {
+        if (result == TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_USER_CANCELED
+                || result == TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_TIMEOUT) {
+            return getCarrierConfigs().getLong(CarrierConfigManager
+                    .KEY_PREMIUM_CAPABILITY_NOTIFICATION_BACKOFF_HYSTERESIS_TIME_MILLIS_LONG);
+        }
+        if (result == TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_ENTITLEMENT_CHECK_FAILED
+                || result == TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_ERROR) {
+            return getCarrierConfigs().getLong(CarrierConfigManager
+                    .KEY_PREMIUM_CAPABILITY_PURCHASE_CONDITION_BACKOFF_HYSTERESIS_TIME_MILLIS_LONG);
+        }
+        return 0;
+    }
+
+    private boolean isPremiumCapabilitySupportedByCarrier(
+            @TelephonyManager.PremiumCapability int capability) {
+        String url = getCarrierConfigs().getString(
+                CarrierConfigManager.KEY_PREMIUM_CAPABILITY_PURCHASE_URL_STRING);
+        if (!isUrlValid(url)) {
+            return false;
+        }
+        int[] supportedCapabilities = getCarrierConfigs().getIntArray(
+                CarrierConfigManager.KEY_SUPPORTED_PREMIUM_CAPABILITIES_INT_ARRAY);
+        if (supportedCapabilities == null) {
+            return false;
+        }
+        return Arrays.stream(supportedCapabilities)
+                .anyMatch(supportedCapability -> supportedCapability == capability);
+    }
+
+    private boolean isUrlValid(@Nullable String url) {
+        if (!URLUtil.isValidUrl(url)) {
+            loge("Invalid URL: " + url);
+            return false;
+        }
+        if (URLUtil.isAssetUrl(url) && !url.equals(SLICE_PURCHASE_TEST_FILE)) {
+            loge("Invalid asset: " + url);
+            return false;
+        }
+        try {
+            new URL(url).toURI();
+        } catch (MalformedURLException | URISyntaxException e) {
+            loge("Invalid URI: " + url);
+            return false;
+        }
+        logd("Valid URL: " + url);
+        return true;
+    }
+
+    private boolean arePremiumCapabilitiesSupportedByDevice() {
+        // TODO: Add more checks?
+        //  Maybe device resource overlay to enable/disable in addition to carrier configs
+        return (mPhone.getCachedAllowedNetworkTypesBitmask()
+                & TelephonyManager.NETWORK_TYPE_BITMASK_NR) != 0;
+    }
+
+    private boolean isDefaultDataSub() {
+        return mPhone.getSubId() == SubscriptionManager.getDefaultDataSubscriptionId();
+    }
+
+    private boolean isSlicingConfigActive(@TelephonyManager.PremiumCapability int capability) {
+        if (mSlicingConfig == null) {
+            return false;
+        }
+        int capabilityServiceType = getSliceServiceType(capability);
+        for (NetworkSliceInfo sliceInfo : mSlicingConfig.getSliceInfo()) {
+            // TODO: check if TrafficDescriptor has realtime capability slice
+            if (sliceInfo.getSliceServiceType() == capabilityServiceType
+                    && sliceInfo.getStatus() == NetworkSliceInfo.SLICE_STATUS_ALLOWED) {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    @NetworkSliceInfo.SliceServiceType private int getSliceServiceType(
+            @TelephonyManager.PremiumCapability int capability) {
+        // TODO: Implement properly -- potentially need to add new slice service types?
+        return NetworkSliceInfo.SLICE_SERVICE_TYPE_NONE;
+    }
+
+    private boolean isNetworkAvailable() {
+        // TODO (b/251558673): Create a listener for data network type changed to dismiss
+        //  notification and activity when the network is no longer available.
+        switch (mPhone.getServiceState().getDataNetworkType()) {
+            case TelephonyManager.NETWORK_TYPE_NR:
+                return true;
+            case TelephonyManager.NETWORK_TYPE_LTE:
+            case TelephonyManager.NETWORK_TYPE_LTE_CA:
+                return getCarrierConfigs().getBoolean(
+                        CarrierConfigManager.KEY_PREMIUM_CAPABILITY_SUPPORTED_ON_LTE_BOOL);
+        }
+        return false;
+    }
+
+    /**
+     * Returns the failure code {@link FailureCode} as a String.
+     *
+     * @param failureCode The failure code.
+     * @return The failure code as a String.
+     */
+    @NonNull private static String convertFailureCodeToString(@FailureCode int failureCode) {
+        switch (failureCode) {
+            case FAILURE_CODE_UNKNOWN: return "UNKNOWN";
+            case FAILURE_CODE_CARRIER_URL_UNAVAILABLE: return "CARRIER_URL_UNAVAILABLE";
+            case FAILURE_CODE_SERVER_UNREACHABLE: return "SERVER_UNREACHABLE";
+            case FAILURE_CODE_AUTHENTICATION_FAILED: return "AUTHENTICATION_FAILED";
+            case FAILURE_CODE_PAYMENT_FAILED: return "PAYMENT_FAILED";
+            default:
+                return "UNKNOWN(" + failureCode + ")";
+        }
+    }
+
+    private void reportAnomaly(@NonNull String uuid, @NonNull String log) {
+        loge(log);
+        AnomalyReporter.reportAnomaly(UUID.fromString(uuid), log);
+    }
+
+    private void logd(String s) {
+        Log.d(TAG + "-" + mPhone.getPhoneId(), s);
+    }
+
+    private void loge(String s) {
+        Log.e(TAG + "-" + mPhone.getPhoneId(), s);
+    }
+}
diff --git a/src/com/android/phone/slicestore/SliceStore.java b/src/com/android/phone/slicestore/SliceStore.java
deleted file mode 100644
index 20245f6..0000000
--- a/src/com/android/phone/slicestore/SliceStore.java
+++ /dev/null
@@ -1,638 +0,0 @@
-/*
- * Copyright (C) 2022 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package com.android.phone.slicestore;
-
-import android.annotation.NonNull;
-import android.annotation.Nullable;
-import android.app.PendingIntent;
-import android.content.BroadcastReceiver;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IntentFilter;
-import android.net.ConnectivityManager;
-import android.os.AsyncResult;
-import android.os.Handler;
-import android.os.Looper;
-import android.os.Message;
-import android.os.PersistableBundle;
-import android.telephony.AnomalyReporter;
-import android.telephony.CarrierConfigManager;
-import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyManager;
-import android.telephony.data.NetworkSliceInfo;
-import android.telephony.data.NetworkSlicingConfig;
-import android.text.TextUtils;
-import android.util.Log;
-import android.webkit.WebView;
-
-import com.android.internal.telephony.Phone;
-
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-import java.util.concurrent.Executor;
-import java.util.concurrent.TimeUnit;
-import java.util.function.Consumer;
-
-/**
- * The SliceStore controls the purchase and availability of all cellular premium capabilities.
- * Applications can check whether premium capabilities are available by calling
- * {@link TelephonyManager#isPremiumCapabilityAvailableForPurchase(int)}. If this returns true,
- * they can then call {@link TelephonyManager#purchasePremiumCapability(int, Executor, Consumer)}
- * to purchase the premium capability. If all conditions are met, a notification will be displayed
- * to the user prompting them to purchase the premium capability. If the user confirms on the
- * notification, a {@link WebView} will open that allows the user to purchase the premium capability
- * from the carrier. If the purchase is successful, the premium capability will be available for
- * all applications to request through {@link ConnectivityManager#requestNetwork}.
- */
-public class SliceStore extends Handler {
-    @NonNull private static final String TAG = "SliceStore";
-
-    /** Value for an invalid premium capability. */
-    public static final int PREMIUM_CAPABILITY_INVALID = -1;
-
-    /** Purchasing the premium capability is no longer throttled. */
-    private static final int EVENT_PURCHASE_UNTHROTTLED = 1;
-    /** Slicing config changed. */
-    private static final int EVENT_SLICING_CONFIG_CHANGED = 2;
-    /** Display booster notification. */
-    private static final int EVENT_DISPLAY_BOOSTER_NOTIFICATION = 3;
-    /** Boost was not purchased within the timeout specified by carrier configs. */
-    private static final int EVENT_PURCHASE_TIMEOUT = 4;
-
-    /** UUID to report an anomaly when a premium capability is throttled twice in a row. */
-    private static final String UUID_CAPABILITY_THROTTLED_TWICE =
-            "15574927-e2e2-4593-99d4-2f340d22b383";
-    /** UUID to report an anomaly when receiving an invalid phone ID. */
-    private static final String UUID_INVALID_PHONE_ID = "ced79f1a-8ac0-4260-8cf3-08b54c0494f3";
-    /** UUID to report an anomaly when receiving an unknown action. */
-    private static final String UUID_UNKNOWN_ACTION = "0197efb0-dab1-4b0a-abaf-ac9336ec7923";
-
-    /** Action to start the SliceStore application and display the network boost notification. */
-    public static final String ACTION_START_SLICE_STORE =
-            "com.android.phone.slicestore.action.START_SLICE_STORE";
-    /** Action indicating the SliceStore purchase was not completed in time. */
-    public static final String ACTION_SLICE_STORE_RESPONSE_TIMEOUT =
-            "com.android.phone.slicestore.action.SLICE_STORE_RESPONSE_TIMEOUT";
-    /** Action indicating the network boost notification or WebView was canceled. */
-    private static final String ACTION_SLICE_STORE_RESPONSE_CANCELED =
-            "com.android.phone.slicestore.action.SLICE_STORE_RESPONSE_CANCELED";
-    /** Action indicating a carrier error prevented premium capability purchase. */
-    private static final String ACTION_SLICE_STORE_RESPONSE_CARRIER_ERROR =
-            "com.android.phone.slicestore.action.SLICE_STORE_RESPONSE_CARRIER_ERROR";
-    /** Action indicating a Telephony or SliceStore error prevented premium capability purchase. */
-    private static final String ACTION_SLICE_STORE_RESPONSE_REQUEST_FAILED =
-            "com.android.phone.slicestore.action.SLICE_STORE_RESPONSE_REQUEST_FAILED";
-    /** Action indicating the purchase request was not made on the default data subscription. */
-    private static final String ACTION_SLICE_STORE_RESPONSE_NOT_DEFAULT_DATA =
-            "com.android.phone.slicestore.action.SLICE_STORE_RESPONSE_NOT_DEFAULT_DATA";
-
-    /** Extra for the phone index to send to the SliceStore application. */
-    public static final String EXTRA_PHONE_ID = "com.android.phone.slicestore.extra.PHONE_ID";
-    /** Extra for the subscription ID to send to the SliceStore application. */
-    public static final String EXTRA_SUB_ID = "com.android.phone.slicestore.extra.SUB_ID";
-    /** Extra for the requested premium capability to purchase from the SliceStore application. */
-    public static final String EXTRA_PREMIUM_CAPABILITY =
-            "com.android.phone.slicestore.extra.PREMIUM_CAPABILITY";
-    /**
-     * Extra for the application name requesting to purchase the premium capability
-     * from the SliceStore application.
-     */
-    public static final String EXTRA_REQUESTING_APP_NAME =
-            "com.android.phone.slicestore.extra.REQUESTING_APP_NAME";
-    /**
-     * Extra for the canceled PendingIntent that the SliceStore application can send as a response
-     * if the network boost notification or WebView was canceled by the user.
-     * Sends {@link #ACTION_SLICE_STORE_RESPONSE_CANCELED}.
-     */
-    public static final String EXTRA_INTENT_CANCELED =
-            "com.android.phone.slicestore.extra.INTENT_CANCELED";
-    /**
-     * Extra for the carrier error PendingIntent that the SliceStore application can send as a
-     * response if the premium capability purchase request failed due to a carrier error.
-     * Sends {@link #ACTION_SLICE_STORE_RESPONSE_CARRIER_ERROR}.
-     */
-    public static final String EXTRA_INTENT_CARRIER_ERROR =
-            "com.android.phone.slicestore.extra.INTENT_CARRIER_ERROR";
-    /**
-     * Extra for the request failed PendingIntent that the SliceStore application can send as a
-     * response if the premium capability purchase request failed due to an error in Telephony or
-     * the SliceStore application.
-     * Sends {@link #ACTION_SLICE_STORE_RESPONSE_REQUEST_FAILED}.
-     */
-    public static final String EXTRA_INTENT_REQUEST_FAILED =
-            "com.android.phone.slicestore.extra.INTENT_REQUEST_FAILED";
-    /**
-     * Extra for the not-default data subscription ID PendingIntent that the SliceStore application
-     * can send as a response if the premium capability purchase request failed because it was not
-     * requested on the default data subscription.
-     * Sends {@link #ACTION_SLICE_STORE_RESPONSE_NOT_DEFAULT_DATA}.
-     */
-    public static final String EXTRA_INTENT_NOT_DEFAULT_DATA =
-            "com.android.phone.slicestore.extra.INTENT_NOT_DEFAULT_DATA";
-
-    /** Component name to send an explicit broadcast to SliceStoreBroadcastReceiver. */
-    private static final ComponentName SLICE_STORE_COMPONENT_NAME =
-            ComponentName.unflattenFromString(
-                    "com.android.carrierdefaultapp/.SliceStoreBroadcastReceiver");
-
-    /** Map of phone ID -> SliceStore instances. */
-    @NonNull private static final Map<Integer, SliceStore> sInstances = new HashMap<>();
-
-    /** The Phone instance used to create the SliceStore */
-    @NonNull private final Phone mPhone;
-    /** The set of purchased capabilities. */
-    @NonNull private final Set<Integer> mPurchasedCapabilities = new HashSet<>();
-    /** The set of throttled capabilities. */
-    @NonNull private final Set<Integer> mThrottledCapabilities = new HashSet<>();
-    /** A map of pending capabilities to the onComplete message for the purchase request. */
-    @NonNull private final Map<Integer, Message> mPendingPurchaseCapabilities = new HashMap<>();
-    /** A map of capabilities to the SliceStoreBroadcastReceiver for SliceStore responses. */
-    @NonNull private final Map<Integer, SliceStoreBroadcastReceiver> mSliceStoreBroadcastReceivers =
-            new HashMap<>();
-    /** The current network slicing configuration. */
-    @Nullable private NetworkSlicingConfig mSlicingConfig;
-
-    private class SliceStoreBroadcastReceiver extends BroadcastReceiver {
-        private final @TelephonyManager.PremiumCapability int mCapability;
-
-        SliceStoreBroadcastReceiver(@TelephonyManager.PremiumCapability int capability) {
-            mCapability = capability;
-        }
-
-        @Override
-        public void onReceive(@NonNull Context context, @NonNull Intent intent) {
-            String action = intent.getAction();
-            logd("SliceStoreBroadcastReceiver("
-                    + TelephonyManager.convertPremiumCapabilityToString(mCapability)
-                    + ") received action: " + action);
-            int phoneId = intent.getIntExtra(EXTRA_PHONE_ID,
-                    SubscriptionManager.INVALID_PHONE_INDEX);
-            int capability = intent.getIntExtra(EXTRA_PREMIUM_CAPABILITY,
-                    PREMIUM_CAPABILITY_INVALID);
-            if (SliceStore.getInstance(phoneId) == null) {
-                String logStr = "SliceStoreBroadcastReceiver( "
-                        + TelephonyManager.convertPremiumCapabilityToString(mCapability)
-                        + ") received invalid phoneId: " + phoneId;
-                loge(logStr);
-                AnomalyReporter.reportAnomaly(UUID.fromString(UUID_INVALID_PHONE_ID), logStr);
-                return;
-            } else if (capability != mCapability) {
-                logd("SliceStoreBroadcastReceiver("
-                        + TelephonyManager.convertPremiumCapabilityToString(mCapability)
-                        + ") ignoring intent for capability "
-                        + TelephonyManager.convertPremiumCapabilityToString(capability));
-                return;
-            }
-            switch (action) {
-                case ACTION_SLICE_STORE_RESPONSE_CANCELED: {
-                    logd("SliceStore canceled for capability: "
-                            + TelephonyManager.convertPremiumCapabilityToString(capability));
-                    SliceStore.getInstance(phoneId).sendPurchaseResultFromSliceStore(capability,
-                            TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_USER_CANCELED,
-                            true);
-                    break;
-                }
-                case ACTION_SLICE_STORE_RESPONSE_CARRIER_ERROR: {
-                    logd("Carrier error for capability: "
-                            + TelephonyManager.convertPremiumCapabilityToString(capability));
-                    SliceStore.getInstance(phoneId).sendPurchaseResultFromSliceStore(capability,
-                            TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_ERROR,
-                            true);
-                    break;
-                }
-                case ACTION_SLICE_STORE_RESPONSE_REQUEST_FAILED: {
-                    logd("Purchase premium capability request failed for capability: "
-                            + TelephonyManager.convertPremiumCapabilityToString(capability));
-                    SliceStore.getInstance(phoneId).sendPurchaseResultFromSliceStore(capability,
-                            TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_REQUEST_FAILED,
-                            false);
-                    break;
-                }
-                case ACTION_SLICE_STORE_RESPONSE_NOT_DEFAULT_DATA: {
-                    logd("Purchase premium capability request was not made on the default data "
-                            + "subscription for capability: "
-                            + TelephonyManager.convertPremiumCapabilityToString(capability));
-                    SliceStore.getInstance(phoneId).sendPurchaseResultFromSliceStore(capability,
-                            TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_NOT_DEFAULT_DATA,
-                            false);
-                    break;
-                }
-                default:
-                    String logStr = "SliceStoreBroadcastReceiver("
-                            + TelephonyManager.convertPremiumCapabilityToString(mCapability)
-                            + ") received unknown action: " + action;
-                    loge(logStr);
-                    AnomalyReporter.reportAnomaly(UUID.fromString(UUID_UNKNOWN_ACTION), logStr);
-                    break;
-            }
-        }
-    }
-
-    /**
-     * Get the static SliceStore instance for the given phone or create one if it doesn't exist.
-     *
-     * @param phone The Phone to get the SliceStore for.
-     * @return The static SliceStore instance.
-     */
-    @NonNull public static synchronized SliceStore getInstance(@NonNull Phone phone) {
-        // TODO: Add listeners for multi sim setting changed (maybe carrier config changed too)
-        //  that dismiss notifications and update SliceStore instance
-        int phoneId = phone.getPhoneId();
-        if (sInstances.get(phoneId) == null) {
-            sInstances.put(phoneId, new SliceStore(phone));
-        }
-        return sInstances.get(phoneId);
-    }
-
-    /**
-     * Get the static SliceStore instance for the given phone ID if it exists.
-     *
-     * @param phoneId The phone ID to get the SliceStore for.
-     * @return The static SliceStore instance or {@code null} if it hasn't been created yet.
-     */
-    @Nullable private static SliceStore getInstance(int phoneId) {
-        return sInstances.get(phoneId);
-    }
-
-    private SliceStore(@NonNull Phone phone) {
-        super(Looper.myLooper());
-        mPhone = phone;
-        // TODO: Create a cached value for slicing config in DataIndication and initialize here
-        mPhone.mCi.registerForSlicingConfigChanged(this, EVENT_SLICING_CONFIG_CHANGED, null);
-    }
-
-    @Override
-    public void handleMessage(@NonNull Message msg) {
-        switch (msg.what) {
-            case EVENT_PURCHASE_UNTHROTTLED: {
-                int capability = (int) msg.obj;
-                logd("EVENT_PURCHASE_UNTHROTTLED: for capability "
-                        + TelephonyManager.convertPremiumCapabilityToString(capability));
-                mThrottledCapabilities.remove(capability);
-                break;
-            }
-            case EVENT_SLICING_CONFIG_CHANGED: {
-                AsyncResult ar = (AsyncResult) msg.obj;
-                NetworkSlicingConfig config = (NetworkSlicingConfig) ar.result;
-                logd("EVENT_SLICING_CONFIG_CHANGED: from " + mSlicingConfig + " to " + config);
-                mSlicingConfig = config;
-                break;
-            }
-            case EVENT_DISPLAY_BOOSTER_NOTIFICATION: {
-                int capability = msg.arg1;
-                String appName = (String) msg.obj;
-                logd("EVENT_DISPLAY_BOOSTER_NOTIFICATION: " + appName + " requests capability "
-                        + TelephonyManager.convertPremiumCapabilityToString(capability));
-                onDisplayBoosterNotification(capability, appName);
-                break;
-            }
-            case EVENT_PURCHASE_TIMEOUT: {
-                int capability = (int) msg.obj;
-                logd("EVENT_PURCHASE_TIMEOUT: for capability "
-                        + TelephonyManager.convertPremiumCapabilityToString(capability));
-                onTimeout(capability);
-                break;
-            }
-            default:
-                loge("Unknown event: " + msg.obj);
-        }
-    }
-
-    /**
-     * Check whether the given premium capability is available for purchase from the carrier.
-     *
-     * @param capability The premium capability to check.
-     * @return Whether the given premium capability is available to purchase.
-     */
-    public boolean isPremiumCapabilityAvailableForPurchase(
-            @TelephonyManager.PremiumCapability int capability) {
-        if (!arePremiumCapabilitiesSupportedByDevice()) {
-            logd("Premium capabilities unsupported by the device.");
-            return false;
-        }
-        if (!isPremiumCapabilitySupportedByCarrier(capability)) {
-            logd("Premium capability "
-                    + TelephonyManager.convertPremiumCapabilityToString(capability)
-                    + " unsupported by the carrier.");
-            return false;
-        }
-        if (!isDefaultData()) {
-            logd("Premium capability "
-                    + TelephonyManager.convertPremiumCapabilityToString(capability)
-                    + " unavailable on the non-default data subscription.");
-            return false;
-        }
-        logd("Premium capability "
-                + TelephonyManager.convertPremiumCapabilityToString(capability)
-                + " is available for purchase.");
-        return true;
-    }
-
-    /**
-     * Purchase the given premium capability from the carrier.
-     *
-     * @param capability The premium capability to purchase.
-     * @param appName The name of the application requesting premium capabilities.
-     * @param onComplete The callback message to send when the purchase request is complete.
-     */
-    public synchronized void purchasePremiumCapability(
-            @TelephonyManager.PremiumCapability int capability, @NonNull String appName,
-            @NonNull Message onComplete) {
-        logd("purchasePremiumCapability: " + appName + " requests capability "
-                + TelephonyManager.convertPremiumCapabilityToString(capability));
-        // Check whether the premium capability can be purchased.
-        if (!arePremiumCapabilitiesSupportedByDevice()) {
-            sendPurchaseResult(capability,
-                    TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_FEATURE_NOT_SUPPORTED,
-                    onComplete);
-            return;
-        }
-        if (!isPremiumCapabilitySupportedByCarrier(capability)) {
-            sendPurchaseResult(capability,
-                    TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_DISABLED,
-                    onComplete);
-            return;
-        }
-        if (!isDefaultData()) {
-            sendPurchaseResult(capability,
-                    TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_NOT_DEFAULT_DATA,
-                    onComplete);
-            return;
-        }
-        if (mPurchasedCapabilities.contains(capability) || isSlicingConfigActive(capability)) {
-            // TODO (b/245882601): Handle capability expiry
-            sendPurchaseResult(capability,
-                    TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED,
-                    onComplete);
-            return;
-        }
-        if (mThrottledCapabilities.contains(capability)) {
-            sendPurchaseResult(capability,
-                    TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED,
-                    onComplete);
-            return;
-        }
-        if (!isNetworkAvailable()) {
-            sendPurchaseResult(capability,
-                    TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_NETWORK_NOT_AVAILABLE,
-                    onComplete);
-            return;
-        }
-        if (isNetworkCongested(capability)) {
-            throttleCapability(capability, getThrottleDuration(
-                    TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_NETWORK_CONGESTED));
-            sendPurchaseResult(capability,
-                    TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_NETWORK_CONGESTED,
-                    onComplete);
-            return;
-        }
-        if (mPendingPurchaseCapabilities.containsKey(capability)) {
-            sendPurchaseResult(capability,
-                    TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_IN_PROGRESS,
-                    onComplete);
-            return;
-        }
-
-        // All state checks passed. Mark purchase pending and display the booster notification to
-        // prompt user purchase. Process through the handler since this method is synchronized.
-        mPendingPurchaseCapabilities.put(capability, onComplete);
-        sendMessage(obtainMessage(EVENT_DISPLAY_BOOSTER_NOTIFICATION, capability, 0 /* unused */,
-                appName));
-    }
-
-    private void sendPurchaseResult(@TelephonyManager.PremiumCapability int capability,
-            @TelephonyManager.PurchasePremiumCapabilityResult int result,
-            @NonNull Message onComplete) {
-        // Send the onComplete message with the purchase result.
-        logd("Purchase result for capability "
-                + TelephonyManager.convertPremiumCapabilityToString(capability)
-                + ": " + TelephonyManager.convertPurchaseResultToString(result));
-        AsyncResult.forMessage(onComplete, result, null);
-        onComplete.sendToTarget();
-    }
-
-    private void sendPurchaseResultFromSliceStore(
-            @TelephonyManager.PremiumCapability int capability,
-            @TelephonyManager.PurchasePremiumCapabilityResult int result, boolean throttle) {
-        mPhone.getContext().unregisterReceiver(mSliceStoreBroadcastReceivers.remove(capability));
-        removeMessages(EVENT_PURCHASE_TIMEOUT, capability);
-        if (throttle) {
-            throttleCapability(capability, getThrottleDuration(result));
-        }
-        sendPurchaseResult(capability, result, mPendingPurchaseCapabilities.remove(capability));
-    }
-
-    private void throttleCapability(@TelephonyManager.PremiumCapability int capability,
-            long throttleDuration) {
-        // Throttle subsequent requests if necessary.
-        if (!mThrottledCapabilities.contains(capability)) {
-            if (throttleDuration > 0) {
-                logd("Throttle purchase requests for capability "
-                        + TelephonyManager.convertPremiumCapabilityToString(capability) + " for "
-                        + TimeUnit.MILLISECONDS.toMinutes(throttleDuration) + " minutes.");
-                mThrottledCapabilities.add(capability);
-                sendMessageDelayed(obtainMessage(EVENT_PURCHASE_UNTHROTTLED, capability),
-                        throttleDuration);
-            }
-        } else {
-            String logStr = TelephonyManager.convertPremiumCapabilityToString(capability)
-                    + " is already throttled.";
-            loge(logStr);
-            AnomalyReporter.reportAnomaly(UUID.fromString(UUID_CAPABILITY_THROTTLED_TWICE), logStr);
-        }
-    }
-
-    private void onDisplayBoosterNotification(@TelephonyManager.PremiumCapability int capability,
-            @NonNull String appName) {
-        // Start timeout for purchase completion.
-        long timeout = getCarrierConfigs().getLong(CarrierConfigManager
-                .KEY_PREMIUM_CAPABILITY_NOTIFICATION_DISPLAY_TIMEOUT_MILLIS_LONG);
-        logd("Start purchase timeout for "
-                + TelephonyManager.convertPremiumCapabilityToString(capability) + " for "
-                + TimeUnit.MILLISECONDS.toMinutes(timeout) + " minutes.");
-        sendMessageDelayed(obtainMessage(EVENT_PURCHASE_TIMEOUT, capability), timeout);
-
-        // Broadcast start intent to start the SliceStore application
-        Intent intent = new Intent(ACTION_START_SLICE_STORE);
-        intent.setComponent(SLICE_STORE_COMPONENT_NAME);
-        intent.putExtra(EXTRA_PHONE_ID, mPhone.getPhoneId());
-        intent.putExtra(EXTRA_SUB_ID, mPhone.getSubId());
-        intent.putExtra(EXTRA_PREMIUM_CAPABILITY, capability);
-        intent.putExtra(EXTRA_REQUESTING_APP_NAME, appName);
-        intent.putExtra(EXTRA_INTENT_CANCELED,
-                createPendingIntent(ACTION_SLICE_STORE_RESPONSE_CANCELED, capability));
-        intent.putExtra(EXTRA_INTENT_CARRIER_ERROR,
-                createPendingIntent(ACTION_SLICE_STORE_RESPONSE_CARRIER_ERROR, capability));
-        intent.putExtra(EXTRA_INTENT_REQUEST_FAILED,
-                createPendingIntent(ACTION_SLICE_STORE_RESPONSE_REQUEST_FAILED, capability));
-        intent.putExtra(EXTRA_INTENT_NOT_DEFAULT_DATA,
-                createPendingIntent(ACTION_SLICE_STORE_RESPONSE_NOT_DEFAULT_DATA, capability));
-        logd("Broadcasting start intent to SliceStoreBroadcastReceiver.");
-        mPhone.getContext().sendBroadcast(intent);
-
-        // Listen for responses from the SliceStore application
-        mSliceStoreBroadcastReceivers.put(capability, new SliceStoreBroadcastReceiver(capability));
-        IntentFilter filter = new IntentFilter();
-        filter.addAction(ACTION_SLICE_STORE_RESPONSE_CANCELED);
-        filter.addAction(ACTION_SLICE_STORE_RESPONSE_CARRIER_ERROR);
-        filter.addAction(ACTION_SLICE_STORE_RESPONSE_REQUEST_FAILED);
-        filter.addAction(ACTION_SLICE_STORE_RESPONSE_NOT_DEFAULT_DATA);
-        mPhone.getContext().registerReceiver(mSliceStoreBroadcastReceivers.get(capability), filter);
-    }
-
-    /**
-     * Create the PendingIntent to allow SliceStore to send back responses.
-     *
-     * @param action The action that will be sent for this PendingIntent
-     * @param capability The premium capability that was requested.
-     * @return The PendingIntent for the given action and capability.
-     */
-    @NonNull private PendingIntent createPendingIntent(@NonNull String action,
-            @TelephonyManager.PremiumCapability int capability) {
-        Intent intent = new Intent(action);
-        intent.putExtra(EXTRA_PHONE_ID, mPhone.getPhoneId());
-        intent.putExtra(EXTRA_PREMIUM_CAPABILITY, capability);
-        return PendingIntent.getBroadcast(mPhone.getContext(), 0, intent,
-                PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_MUTABLE);
-    }
-
-    private void onTimeout(@TelephonyManager.PremiumCapability int capability) {
-        logd("onTimeout: " + TelephonyManager.convertPremiumCapabilityToString(capability));
-        // Broadcast timeout intent to clean up the SliceStore notification and activity
-        Intent intent = new Intent(ACTION_SLICE_STORE_RESPONSE_TIMEOUT);
-        intent.setComponent(SLICE_STORE_COMPONENT_NAME);
-        intent.putExtra(EXTRA_PHONE_ID, mPhone.getPhoneId());
-        intent.putExtra(EXTRA_PREMIUM_CAPABILITY, capability);
-        logd("Broadcasting timeout intent to SliceStoreBroadcastReceiver.");
-        mPhone.getContext().sendBroadcast(intent);
-
-        sendPurchaseResultFromSliceStore(
-                capability, TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_TIMEOUT, true);
-    }
-
-    private void onCarrierSuccess(@TelephonyManager.PremiumCapability int capability) {
-        // TODO(b/245882601): Process and return success.
-        //  Probably need to handle capability expiry as well
-    }
-
-    @Nullable private PersistableBundle getCarrierConfigs() {
-        return mPhone.getContext().getSystemService(CarrierConfigManager.class)
-                .getConfigForSubId(mPhone.getSubId());
-    }
-
-    private long getThrottleDuration(@TelephonyManager.PurchasePremiumCapabilityResult int result) {
-        if (result == TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_USER_CANCELED
-                || result == TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_TIMEOUT) {
-            return getCarrierConfigs().getLong(CarrierConfigManager
-                    .KEY_PREMIUM_CAPABILITY_NOTIFICATION_BACKOFF_HYSTERESIS_TIME_MILLIS_LONG);
-        }
-        if (result == TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_NETWORK_CONGESTED
-                || result == TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_ERROR) {
-            return getCarrierConfigs().getLong(CarrierConfigManager
-                    .KEY_PREMIUM_CAPABILITY_PURCHASE_CONDITION_BACKOFF_HYSTERESIS_TIME_MILLIS_LONG);
-        }
-        return 0;
-    }
-
-    private boolean isPremiumCapabilitySupportedByCarrier(
-            @TelephonyManager.PremiumCapability int capability) {
-        String url = getCarrierConfigs().getString(
-                CarrierConfigManager.KEY_PREMIUM_CAPABILITY_PURCHASE_URL_STRING);
-        if (TextUtils.isEmpty(url)) {
-            return false;
-        } else {
-            try {
-                new URL(url);
-            } catch (MalformedURLException e) {
-                return false;
-            }
-        }
-        int[] supportedCapabilities = getCarrierConfigs().getIntArray(
-                CarrierConfigManager.KEY_SUPPORTED_PREMIUM_CAPABILITIES_INT_ARRAY);
-        if (supportedCapabilities == null) {
-            return false;
-        }
-        return Arrays.stream(supportedCapabilities)
-                .anyMatch(supportedCapability -> supportedCapability == capability);
-    }
-
-    private boolean arePremiumCapabilitiesSupportedByDevice() {
-        // TODO: Add more checks?
-        //  Maybe device resource overlay to enable/disable in addition to carrier configs
-        return (mPhone.getCachedAllowedNetworkTypesBitmask()
-                & TelephonyManager.NETWORK_TYPE_BITMASK_NR) != 0;
-    }
-
-    private boolean isDefaultData() {
-        return mPhone.getSubId() == SubscriptionManager.getDefaultDataSubscriptionId();
-    }
-
-    private boolean isSlicingConfigActive(@TelephonyManager.PremiumCapability int capability) {
-        if (mSlicingConfig == null) {
-            return false;
-        }
-        int capabilityServiceType = getSliceServiceType(capability);
-        for (NetworkSliceInfo sliceInfo : mSlicingConfig.getSliceInfo()) {
-            // TODO: check if TrafficDescriptor has realtime capability slice
-            if (sliceInfo.getSliceServiceType() == capabilityServiceType
-                    && sliceInfo.getStatus() == NetworkSliceInfo.SLICE_STATUS_ALLOWED) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    @NetworkSliceInfo.SliceServiceType private int getSliceServiceType(
-            @TelephonyManager.PremiumCapability int capability) {
-        // TODO: Implement properly -- potentially need to add new slice service types?
-        return NetworkSliceInfo.SLICE_SERVICE_TYPE_NONE;
-    }
-
-    private boolean isNetworkAvailable() {
-        // TODO (b/251558673): Create a listener for data network type changed to dismiss
-        //  notification and activity when the network is no longer available.
-        switch (mPhone.getServiceState().getDataNetworkType()) {
-            case TelephonyManager.NETWORK_TYPE_NR:
-                return true;
-            case TelephonyManager.NETWORK_TYPE_LTE:
-            case TelephonyManager.NETWORK_TYPE_LTE_CA:
-                return getCarrierConfigs().getBoolean(
-                        CarrierConfigManager.KEY_PREMIUM_CAPABILITY_SUPPORTED_ON_LTE_BOOL);
-        }
-        return false;
-    }
-
-    private boolean isNetworkCongested(@TelephonyManager.PremiumCapability int capability) {
-        // TODO: Implement TS43
-        return true;
-    }
-
-    private void logd(String s) {
-        Log.d(TAG + "-" + mPhone.getPhoneId(), s);
-    }
-
-    private void loge(String s) {
-        Log.e(TAG + "-" + mPhone.getPhoneId(), s);
-    }
-}
diff --git a/src/com/android/services/telephony/PstnIncomingCallNotifier.java b/src/com/android/services/telephony/PstnIncomingCallNotifier.java
index 8615325..f78a9b9 100644
--- a/src/com/android/services/telephony/PstnIncomingCallNotifier.java
+++ b/src/com/android/services/telephony/PstnIncomingCallNotifier.java
@@ -403,7 +403,8 @@
         // receives an MT call while in ECM. Use the Emergency PhoneAccount to receive the account
         // if it exists.
         PhoneAccountHandle emergencyHandle =
-                PhoneUtils.makePstnPhoneAccountHandleWithPrefix(mPhone, "", true);
+                PhoneUtils.makePstnPhoneAccountHandleWithPrefix(mPhone,
+                        "", true, mPhone.getUserHandle());
         if(telecomAccountRegistry.hasAccountEntryForPhoneAccount(emergencyHandle)) {
             Log.i(this, "Receiving MT call in ECM. Using Emergency PhoneAccount Instead.");
             return emergencyHandle;
diff --git a/src/com/android/services/telephony/TelecomAccountRegistry.java b/src/com/android/services/telephony/TelecomAccountRegistry.java
index 115c32b..d92b136 100644
--- a/src/com/android/services/telephony/TelecomAccountRegistry.java
+++ b/src/com/android/services/telephony/TelecomAccountRegistry.java
@@ -64,6 +64,7 @@
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneFactory;
 import com.android.internal.telephony.SubscriptionController;
+import com.android.internal.telephony.subscription.SubscriptionManagerService;
 import com.android.phone.PhoneGlobals;
 import com.android.phone.PhoneUtils;
 import com.android.phone.R;
@@ -285,13 +286,18 @@
         private PhoneAccount buildPstnPhoneAccount(boolean isEmergency, boolean isTestAccount) {
             String testPrefix = isTestAccount ? "Test " : "";
 
+            // Check if we are registering another user. If we are, ensure that the account
+            // is registered to that user handle.
+            int subId = mPhone.getSubId();
+            // Get user handle from phone's sub id (if we get null, then system user will be used)
+            UserHandle userToRegister = mPhone.getUserHandle();
+
             // Build the Phone account handle.
             PhoneAccountHandle phoneAccountHandle =
                     PhoneUtils.makePstnPhoneAccountHandleWithPrefix(
-                            mPhone, testPrefix, isEmergency);
+                            mPhone, testPrefix, isEmergency, userToRegister);
 
             // Populate the phone account data.
-            int subId = mPhone.getSubId();
             String subscriberId = mPhone.getSubscriberId();
             int color = PhoneAccount.NO_HIGHLIGHT_COLOR;
             int slotId = SubscriptionManager.INVALID_SIM_SLOT_INDEX;
@@ -304,8 +310,8 @@
                 subNumber = "";
             }
 
-            String label;
-            String description;
+            String label = "";
+            String description = "";
             Icon icon = null;
 
             // We can only get the real slotId from the SubInfoRecord, we can't calculate the
@@ -321,7 +327,9 @@
             } else if (mTelephonyManager.getPhoneCount() == 1) {
                 // For single-SIM devices, we show the label and description as whatever the name of
                 // the network is.
-                description = label = tm.getNetworkOperatorName();
+                if (record != null) {
+                    description = label = String.valueOf(record.getDisplayName());
+                }
             } else {
                 CharSequence subDisplayName = null;
 
@@ -355,8 +363,12 @@
 
             // By default all SIM phone accounts can place emergency calls.
             int capabilities = PhoneAccount.CAPABILITY_SIM_SUBSCRIPTION |
-                    PhoneAccount.CAPABILITY_CALL_PROVIDER |
-                    PhoneAccount.CAPABILITY_MULTI_USER;
+                    PhoneAccount.CAPABILITY_CALL_PROVIDER;
+
+            // This is enabled by default. To support work profiles, it should not be enabled.
+            if (userToRegister == null) {
+                capabilities |= PhoneAccount.CAPABILITY_MULTI_USER;
+            }
 
             if (mContext.getResources().getBoolean(R.bool.config_pstnCanPlaceEmergencyCalls)) {
                 capabilities |= PhoneAccount.CAPABILITY_PLACE_EMERGENCY_CALLS;
@@ -536,18 +548,37 @@
                 return false;
             }
 
-            SubscriptionController controller = SubscriptionController.getInstance();
-            if (controller == null) {
-                Log.d(this, "isEmergencyPreferredAccount: SubscriptionController not available.");
-                return false;
-            }
-            // Only set an emergency preference on devices with multiple active subscriptions
-            // (include opportunistic subscriptions) in this check.
-            // API says never null, but this can return null in testing.
-            int[] activeSubIds = controller.getActiveSubIdList(false);
-            if (activeSubIds == null || activeSubIds.length <= 1) {
-                Log.d(this, "isEmergencyPreferredAccount: one or less active subscriptions.");
-                return false;
+            if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
+                if (SubscriptionManagerService.getInstance() == null) {
+                    Log.d(this,
+                            "isEmergencyPreferredAccount: SubscriptionManagerService not "
+                                    + "available.");
+                    return false;
+                }
+                // Only set an emergency preference on devices with multiple active subscriptions
+                // (include opportunistic subscriptions) in this check.
+                // API says never null, but this can return null in testing.
+                int[] activeSubIds = SubscriptionManagerService.getInstance()
+                        .getActiveSubIdList(false);
+                if (activeSubIds == null || activeSubIds.length <= 1) {
+                    Log.d(this, "isEmergencyPreferredAccount: one or less active subscriptions.");
+                    return false;
+                }
+            } else {
+                SubscriptionController controller = SubscriptionController.getInstance();
+                if (controller == null) {
+                    Log.d(this,
+                            "isEmergencyPreferredAccount: SubscriptionController not available.");
+                    return false;
+                }
+                // Only set an emergency preference on devices with multiple active subscriptions
+                // (include opportunistic subscriptions) in this check.
+                // API says never null, but this can return null in testing.
+                int[] activeSubIds = controller.getActiveSubIdList(false);
+                if (activeSubIds == null || activeSubIds.length <= 1) {
+                    Log.d(this, "isEmergencyPreferredAccount: one or less active subscriptions.");
+                    return false;
+                }
             }
             // Check to see if this PhoneAccount is associated with the default Data subscription.
             if (!SubscriptionManager.isValidSubscriptionId(subId)) {
@@ -555,10 +586,21 @@
                         + "valid.");
                 return false;
             }
-            int userDefaultData = controller.getDefaultDataSubId();
+            int userDefaultData = SubscriptionManager.getDefaultDataSubscriptionId();
             boolean isActiveDataValid = SubscriptionManager.isValidSubscriptionId(activeDataSubId);
-            boolean isActiveDataOpportunistic = isActiveDataValid
-                    && controller.isOpportunistic(activeDataSubId);
+
+            boolean isActiveDataOpportunistic;
+            if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
+                SubscriptionInfo subInfo;
+                subInfo = SubscriptionManagerService.getInstance()
+                        .getSubscriptionInfo(activeDataSubId);
+                isActiveDataOpportunistic = isActiveDataValid && subInfo != null
+                        && subInfo.isOpportunistic();
+            } else {
+                isActiveDataOpportunistic = isActiveDataValid
+                        && SubscriptionController.getInstance().isOpportunistic(activeDataSubId);
+            }
+
             // compare the activeDataSubId to the subId specified only if it is valid and not an
             // opportunistic subscription (only supports data). If not, use the current default
             // defined by the user.
diff --git a/src/com/android/services/telephony/TelephonyConferenceController.java b/src/com/android/services/telephony/TelephonyConferenceController.java
index 9aa3dbe..f0aa641 100644
--- a/src/com/android/services/telephony/TelephonyConferenceController.java
+++ b/src/com/android/services/telephony/TelephonyConferenceController.java
@@ -20,6 +20,8 @@
 import android.telecom.Connection;
 import android.telecom.DisconnectCause;
 import android.telecom.PhoneAccountHandle;
+import android.text.TextUtils;
+import android.util.Patterns;
 
 import com.android.internal.telephony.Call;
 import com.android.phone.PhoneUtils;
@@ -40,7 +42,6 @@
  */
 final class TelephonyConferenceController {
     private static final int TELEPHONY_CONFERENCE_MAX_SIZE = 5;
-    private static final String RIL_REPORTED_CONFERENCE_CALL_STRING = "Conference Call";
 
     private final TelephonyConnection.TelephonyConnectionListener mTelephonyConnectionListener =
             new TelephonyConnection.TelephonyConnectionListener() {
@@ -271,13 +272,13 @@
                             // Remove all instances of PROPERTY_IS_DOWNGRADED_CONFERENCE. This
                             // property should only be set on the parent call (i.e. the newly
                             // created TelephonyConference.
-                            // This doesn't apply to a connection whose address is "Conference
-                            // Call", which may be updated by some modem to create a connection
-                            // to represent a merged conference connection in SRVCC.
+                            // This doesn't apply to a connection whose address is not an
+                            // identifiable phone number, which may be updated by some modem
+                            // to create a connection to represent a merged conference connection
+                            // in SRVCC.
                             if (connection.getAddress() == null
-                                    || !connection.getAddress().getSchemeSpecificPart()
-                                            .equalsIgnoreCase(
-                                                    RIL_REPORTED_CONFERENCE_CALL_STRING)) {
+                                    || isPhoneNumber(
+                                            connection.getAddress().getSchemeSpecificPart())) {
                                 Log.d(this, "Removing PROPERTY_IS_DOWNGRADED_CONFERENCE"
                                         + " from connection %s", connection);
                                 int newProperties = connection.getConnectionProperties()
@@ -320,4 +321,11 @@
             }
         }
     }
+
+    private boolean isPhoneNumber(String number) {
+        if (TextUtils.isEmpty(number)) {
+            return false;
+        }
+        return Patterns.PHONE.matcher(number).matches();
+    }
 }
diff --git a/src/com/android/services/telephony/TelephonyConnectionService.java b/src/com/android/services/telephony/TelephonyConnectionService.java
index da918ad..e86a1ae 100644
--- a/src/com/android/services/telephony/TelephonyConnectionService.java
+++ b/src/com/android/services/telephony/TelephonyConnectionService.java
@@ -16,6 +16,8 @@
 
 package com.android.services.telephony;
 
+import static android.telephony.TelephonyManager.HAL_SERVICE_VOICE;
+
 import android.annotation.NonNull;
 import android.app.AlertDialog;
 import android.app.Dialog;
@@ -65,6 +67,8 @@
 import com.android.internal.telephony.imsphone.ImsExternalCallTracker;
 import com.android.internal.telephony.imsphone.ImsPhone;
 import com.android.internal.telephony.imsphone.ImsPhoneConnection;
+import com.android.internal.telephony.subscription.SubscriptionInfoInternal;
+import com.android.internal.telephony.subscription.SubscriptionManagerService;
 import com.android.phone.FrameworksUtils;
 import com.android.phone.MMIDialogActivity;
 import com.android.phone.PhoneUtils;
@@ -211,6 +215,7 @@
     @VisibleForTesting
     public interface SubscriptionManagerProxy {
         int getDefaultVoicePhoneId();
+        int getDefaultDataPhoneId();
         int getSimStateForSlotIdx(int slotId);
         int getPhoneId(int subId);
     }
@@ -222,8 +227,13 @@
         }
 
         @Override
+        public int getDefaultDataPhoneId() {
+            return getPhoneId(SubscriptionManager.getDefaultDataSubscriptionId());
+        }
+
+        @Override
         public int getSimStateForSlotIdx(int slotId) {
-            return SubscriptionManager.getSimStateForSlotIndex(slotId);
+            return TelephonyManager.getSimStateForSlotIndex(slotId);
         }
 
         @Override
@@ -360,7 +370,8 @@
         @Override
         public PhoneAccountHandle makePstnPhoneAccountHandleWithPrefix(Phone phone, String prefix,
                 boolean isEmergency) {
-            return PhoneUtils.makePstnPhoneAccountHandleWithPrefix(phone, prefix, isEmergency);
+            return PhoneUtils.makePstnPhoneAccountHandleWithPrefix(
+                    phone, prefix, isEmergency, phone.getUserHandle());
         }
     };
 
@@ -823,7 +834,8 @@
                     // an isTesting parameter. For HAL 1.4+, do not wait for IN_SERVICE, this will
                     // be handled at the RIL/vendor level by emergencyDial(...).
                     boolean waitForInServiceToDialEmergency = isTestEmergencyNumber
-                            && phone.getHalVersion().less(RIL.RADIO_HAL_VERSION_1_4);
+                            && phone.getHalVersion(HAL_SERVICE_VOICE)
+                            .less(RIL.RADIO_HAL_VERSION_1_4);
                     if (isEmergencyNumber && !waitForInServiceToDialEmergency) {
                         // We currently only look to make sure that the radio is on before dialing.
                         // We should be able to make emergency calls at any time after the radio has
@@ -832,6 +844,19 @@
                         return (phone.getState() == PhoneConstants.State.OFFHOOK)
                             || phone.getServiceStateTracker().isRadioOn();
                     } else {
+                        if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
+                            SubscriptionInfoInternal subInfo = SubscriptionManagerService
+                                    .getInstance().getSubscriptionInfoInternal(phone.getSubId());
+                            // Wait until we are in service and ready to make calls. This can happen
+                            // when we power down the radio on bluetooth to save power on watches or
+                            // if it is a test emergency number and we have to wait for the device
+                            // to move IN_SERVICE before the call can take place over normal
+                            // routing.
+                            return (phone.getState() == PhoneConstants.State.OFFHOOK)
+                                    // Do not wait for voice in service on opportunistic SIMs.
+                                    || (subInfo != null && subInfo.isOpportunistic())
+                                    || serviceState == ServiceState.STATE_IN_SERVICE;
+                        }
                         // Wait until we are in service and ready to make calls. This can happen
                         // when we power down the radio on bluetooth to save power on watches or if
                         // it is a test emergency number and we have to wait for the device to move
@@ -992,9 +1017,16 @@
             // Notify Telecom of the new Connection type.
             // TODO: Switch out the underlying connection instead of creating a new
             // one and causing UI Jank.
-            boolean noActiveSimCard = SubscriptionController.getInstance()
-                    .getActiveSubInfoCount(phone.getContext().getOpPackageName(),
-                            phone.getContext().getAttributionTag()) == 0;
+            boolean noActiveSimCard;
+            if (PhoneFactory.isSubscriptionManagerServiceEnabled()) {
+                noActiveSimCard = SubscriptionManagerService.getInstance()
+                        .getActiveSubInfoCount(phone.getContext().getOpPackageName(),
+                                phone.getContext().getAttributionTag()) == 0;
+            } else {
+                noActiveSimCard = SubscriptionController.getInstance()
+                        .getActiveSubInfoCount(phone.getContext().getOpPackageName(),
+                                phone.getContext().getAttributionTag()) == 0;
+            }
             // If there's no active sim card and the device is in emergency mode, use E account.
             addExistingConnection(mPhoneUtilsProxy.makePstnPhoneAccountHandleWithPrefix(
                     phone, "", isEmergencyNumber && noActiveSimCard), repConnection);
@@ -1737,9 +1769,8 @@
         final com.android.internal.telephony.Connection originalConnection;
         try {
             if (phone != null) {
-                EmergencyNumber emergencyNumber =
-                        phone.getEmergencyNumberTracker().getEmergencyNumber(number);
-                if (emergencyNumber != null) {
+                boolean isEmergency = mTelephonyManagerProxy.isCurrentEmergencyNumber(number);
+                if (isEmergency) {
                     if (!getAllConnections().isEmpty()) {
                         if (!shouldHoldForEmergencyCall(phone)) {
                             // If we do not support holding ongoing calls for an outgoing
@@ -2165,39 +2196,57 @@
     /**
      * Retrieves the most sensible Phone to use for an emergency call using the following Priority
      *  list (for multi-SIM devices):
-     *  1) The User's SIM preference for Voice calling
-     *  2) The First Phone that is currently IN_SERVICE or is available for emergency calling
-     *  3) Prioritize phones that have the dialed emergency number as part of their emergency
+     *  1) The Phone that is in emergency SMS mode
+     *  2) The phone based on User's SIM preference of Voice calling or Data in order
+     *  3) The First Phone that is currently IN_SERVICE or is available for emergency calling
+     *  4) Prioritize phones that have the dialed emergency number as part of their emergency
      *     number list
-     *  4) If there is a PUK locked SIM, compare the SIMs that are not PUK locked. If all the SIMs
-     *     are locked, skip to condition 5).
-     *  5) The Phone with more Capabilities.
-     *  6) The First Phone that has a SIM card in it (Starting from Slot 0...N)
-     *  7) The Default Phone (Currently set as Slot 0)
+     *  5) If there is a PUK locked SIM, compare the SIMs that are not PUK locked. If all the SIMs
+     *     are locked, skip to condition 6).
+     *  6) The Phone with more Capabilities.
+     *  7) The First Phone that has a SIM card in it (Starting from Slot 0...N)
+     *  8) The Default Phone (Currently set as Slot 0)
      */
     @VisibleForTesting
+    @NonNull
     public Phone getFirstPhoneForEmergencyCall(List<Phone> phonesWithEmergencyNumber) {
-        // 1)
+        int phoneCount = mTelephonyManagerProxy.getPhoneCount();
+        for (int i = 0; i < phoneCount; i++) {
+            Phone phone = mPhoneFactoryProxy.getPhone(i);
+            // 1)
+            if (phone != null && phone.isInEmergencySmsMode()) {
+                if (isAvailableForEmergencyCalls(phone)) {
+                    if (phonesWithEmergencyNumber == null
+                            || phonesWithEmergencyNumber.contains(phone)) {
+                        return phone;
+                    }
+                }
+            }
+        }
+
+        // 2)
         int phoneId = mSubscriptionManagerProxy.getDefaultVoicePhoneId();
+        if (phoneId == SubscriptionManager.INVALID_PHONE_INDEX) {
+            phoneId = mSubscriptionManagerProxy.getDefaultDataPhoneId();
+        }
         if (phoneId != SubscriptionManager.INVALID_PHONE_INDEX) {
-            Phone defaultPhone = mPhoneFactoryProxy.getPhone(phoneId);
-            if (defaultPhone != null && isAvailableForEmergencyCalls(defaultPhone)) {
+            Phone selectedPhone = mPhoneFactoryProxy.getPhone(phoneId);
+            if (selectedPhone != null && isAvailableForEmergencyCalls(selectedPhone)) {
                 if (phonesWithEmergencyNumber == null
-                        || phonesWithEmergencyNumber.contains(defaultPhone)) {
-                    return defaultPhone;
+                        || phonesWithEmergencyNumber.contains(selectedPhone)) {
+                    return selectedPhone;
                 }
             }
         }
 
         Phone firstPhoneWithSim = null;
-        int phoneCount = mTelephonyManagerProxy.getPhoneCount();
         List<SlotStatus> phoneSlotStatus = new ArrayList<>(phoneCount);
         for (int i = 0; i < phoneCount; i++) {
             Phone phone = mPhoneFactoryProxy.getPhone(i);
             if (phone == null) {
                 continue;
             }
-            // 2)
+            // 3)
             if (isAvailableForEmergencyCalls(phone)) {
                 if (phonesWithEmergencyNumber == null
                         || phonesWithEmergencyNumber.contains(phone)) {
@@ -2207,7 +2256,7 @@
                     return phone;
                 }
             }
-            // 5)
+            // 6)
             // Store the RAF Capabilities for sorting later.
             int radioAccessFamily = phone.getRadioAccessFamily();
             SlotStatus status = new SlotStatus(i, radioAccessFamily, phone.getSubId());
@@ -2215,7 +2264,7 @@
             Log.i(this, "getFirstPhoneForEmergencyCall, RAF:" +
                 Integer.toHexString(radioAccessFamily) + " saved for Phone Id:" + i + " subId:"
                 + phone.getSubId());
-            // 4)
+            // 5)
             // Report Slot's PIN/PUK lock status for sorting later.
             int simState = mSubscriptionManagerProxy.getSimStateForSlotIdx(i);
             // Record SimState.
@@ -2225,7 +2274,7 @@
                 status.isLocked = true;
             }
 
-            // 3) Store if the Phone has the corresponding emergency number
+            // 4) Store if the Phone has the corresponding emergency number
             if (phonesWithEmergencyNumber != null) {
                 for (Phone phoneWithEmergencyNumber : phonesWithEmergencyNumber) {
                     if (phoneWithEmergencyNumber != null
@@ -2234,7 +2283,7 @@
                     }
                 }
             }
-            // 6)
+            // 7)
             if (firstPhoneWithSim == null &&
                 (phone.getSubId() != SubscriptionManager.INVALID_SIM_SLOT_INDEX)) {
                 // The slot has a SIM card inserted (and an active subscription), but is not in
@@ -2246,16 +2295,21 @@
                     firstPhoneWithSim.getPhoneId());
             }
         }
-        // 7)
+        // 8)
         if (firstPhoneWithSim == null && phoneSlotStatus.isEmpty()) {
-            if (phonesWithEmergencyNumber == null || phonesWithEmergencyNumber.isEmpty()) {
-                // No Phones available, get the default
-                Log.i(this, "getFirstPhoneForEmergencyCall, return default phone");
-                return  mPhoneFactoryProxy.getDefaultPhone();
+            if (phonesWithEmergencyNumber != null) {
+                for (Phone phoneWithEmergencyNumber : phonesWithEmergencyNumber) {
+                    if (phoneWithEmergencyNumber != null) {
+                        return phoneWithEmergencyNumber;
+                    }
+                }
             }
-            return phonesWithEmergencyNumber.get(0);
+
+            // No Phones available, get the default
+            Log.i(this, "getFirstPhoneForEmergencyCall, return default phone");
+            return  mPhoneFactoryProxy.getDefaultPhone();
         } else {
-            // 5)
+            // 6)
             final int defaultPhoneId = mPhoneFactoryProxy.getDefaultPhone().getPhoneId();
             final Phone firstOccupiedSlot = firstPhoneWithSim;
             if (!phoneSlotStatus.isEmpty()) {
@@ -2318,7 +2372,7 @@
                         "with highest capability");
                 return mPhoneFactoryProxy.getPhone(mostCapablePhoneId);
             } else {
-                // 6)
+                // 7)
                 return firstPhoneWithSim;
             }
         }
diff --git a/testapps/GbaTestApp/res/values-en-rCA/strings.xml b/testapps/GbaTestApp/res/values-en-rCA/strings.xml
index 6c4a199..0d5c727 100644
--- a/testapps/GbaTestApp/res/values-en-rCA/strings.xml
+++ b/testapps/GbaTestApp/res/values-en-rCA/strings.xml
@@ -3,12 +3,12 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="2922839697457005451">"GbaTestApp"</string>
     <string name="label_settings" msgid="8030871890526865502">"Settings"</string>
-    <string name="label_carrier" msgid="1470455313066422804">"Operator config"</string>
-    <string name="label_service" msgid="2668963955237345578">"Service config"</string>
-    <string name="label_test" msgid="8425079572898571918">"Test config"</string>
+    <string name="label_carrier" msgid="1470455313066422804">"Carrier Config"</string>
+    <string name="label_service" msgid="2668963955237345578">"Service Config"</string>
+    <string name="label_test" msgid="8425079572898571918">"Test Config"</string>
     <string name="button_name_running" msgid="4557363091224858010">"Running"</string>
     <string name="button_name_exit" msgid="8025683733431538975">"Exit"</string>
-    <string name="label_test_result" msgid="892984695972956196">"Test result"</string>
+    <string name="label_test_result" msgid="892984695972956196">"Test Result"</string>
     <string name="button_name_clear" msgid="436313515327318537">"Reset"</string>
     <string name="button_name_done" msgid="6030406534322497491">"Done"</string>
     <string name="title_activity_carrier_config" msgid="7807803900475957717">"CarrierConfigActivity"</string>
@@ -16,16 +16,16 @@
     <string name="title_activity_test_config" msgid="7585204485536359713">"TestConfigActivity"</string>
     <string name="service_package_name" msgid="7204809439090483315">"Package name of GBA service"</string>
     <string name="service_release_time" msgid="532937496122890892">"How long to release service after calling"</string>
-    <string name="request_app_type" msgid="3975978141673475612">"UICC app type"</string>
+    <string name="request_app_type" msgid="3975978141673475612">"UICC App Type"</string>
     <string name="request_naf_url" msgid="4487793541217737042">"Network application function (NAF) URL"</string>
-    <string name="request_force_bootstrapping" msgid="206043602616214325">"Force bootstrapping?"</string>
-    <string name="request_org" msgid="8416693445448308975">"Organisation code"</string>
-    <string name="request_security_protocol" msgid="1444164827561010482">"UA security protocol ID"</string>
-    <string name="request_tls_cipher_suite" msgid="6659854717595308404">"TLS cipher suite ID"</string>
-    <string name="response_success" msgid="2469204471244527663">"GBA auth success?"</string>
-    <string name="response_fail_reason" msgid="3401426967253202496">"Fail reason ID"</string>
-    <string name="response_key" msgid="8839847772051686309">"GBA key (CK + IK)"</string>
-    <string name="response_btid" msgid="2550216722679350756">"Bootstrapping transaction identifier (B-TID)"</string>
+    <string name="request_force_bootstrapping" msgid="206043602616214325">"Force Bootstrapping?"</string>
+    <string name="request_org" msgid="8416693445448308975">"Organization Code"</string>
+    <string name="request_security_protocol" msgid="1444164827561010482">"UA Security Protocol ID"</string>
+    <string name="request_tls_cipher_suite" msgid="6659854717595308404">"TLS Cipher Suite ID"</string>
+    <string name="response_success" msgid="2469204471244527663">"GBA Auth Success?"</string>
+    <string name="response_fail_reason" msgid="3401426967253202496">"Fail Reason ID"</string>
+    <string name="response_key" msgid="8839847772051686309">"GBA Key (CK + IK)"</string>
+    <string name="response_btid" msgid="2550216722679350756">"Bootstrapping Transaction Identifier (B-TID)"</string>
     <string name="sample_naf" msgid="255371174145881001">"3GPP-bootstrapping@naf1.operator.com"</string>
     <string name="sample_btid" msgid="6967620309576384966">"(B-TID)"</string>
     <string name="sample_key" msgid="3337589659405527482">"6629fae49393a05397450978507c4ef1"</string>
diff --git a/testapps/TestRcsApp/OWNERS b/testapps/TestRcsApp/OWNERS
index 1d0d52b..4261109 100644
--- a/testapps/TestRcsApp/OWNERS
+++ b/testapps/TestRcsApp/OWNERS
@@ -1,3 +1,5 @@
-allenwtsu@google.com
-calvinpan@google.com
-jamescflin@google.com
+breadley@google.com
+joonhunshin@google.com
+donaldahn@google.com
+hhshin@google.com
+schie@google.com
diff --git a/testapps/TestServerApp/app/src/main/res/values-am/strings.xml b/testapps/TestServerApp/app/src/main/res/values-am/strings.xml
new file mode 100644
index 0000000..8ec544c
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-am/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"ቅንብሮች"</string>
+    <string name="server_running" msgid="2780193626090379172">"አገልጋይ እያሄደ ነው..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"አገልጋይን አቁም"</string>
+    <string name="server_down" msgid="1030249207496490556">"አገልጋይ አይሰራም"</string>
+    <string name="start_server" msgid="3878573341408591975">"አገልጋይን አስጀምር"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"ተሰናክሏል"</item>
+    <item msgid="3193389681837907872">"ነቅቷል"</item>
+    <item msgid="3124590179479393815">"ተኳሃኝ አይደለም"</item>
+    <item msgid="1606753456265236910">"በማቅረብ ላይ"</item>
+    <item msgid="3930807209231347454">"ተካትቷል"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"አልቀረበም"</item>
+    <item msgid="7598231293776486217">"ቀርቧል"</item>
+    <item msgid="3720547957514534185">"አያስፈልግም"</item>
+    <item msgid="1264673582354896949">"በሂደት ላይ"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-ar/strings.xml b/testapps/TestServerApp/app/src/main/res/values-ar/strings.xml
new file mode 100644
index 0000000..c901917
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-ar/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"الإعدادات"</string>
+    <string name="server_running" msgid="2780193626090379172">"الخادم قيد التشغيل…"</string>
+    <string name="stop_server" msgid="6192029827529013598">"إيقاف الخادم"</string>
+    <string name="server_down" msgid="1030249207496490556">"الخادم معطّل"</string>
+    <string name="start_server" msgid="3878573341408591975">"بدء الخادم"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"غير مفعَّلة"</item>
+    <item msgid="3193389681837907872">"مفعّلة"</item>
+    <item msgid="3124590179479393815">"غير متوافق"</item>
+    <item msgid="1606753456265236910">"جارٍ توفير المتطلبات اللازمة"</item>
+    <item msgid="3930807209231347454">"متاحة"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"لم يتم توفير المتطلبات اللازمة"</item>
+    <item msgid="7598231293776486217">"توفير المتطلبات اللازمة"</item>
+    <item msgid="3720547957514534185">"غير مطلوب"</item>
+    <item msgid="1264673582354896949">"قيد التقدم"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-as/strings.xml b/testapps/TestServerApp/app/src/main/res/values-as/strings.xml
new file mode 100644
index 0000000..46ee915
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-as/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"ছেটিং"</string>
+    <string name="server_running" msgid="2780193626090379172">"ছাৰ্ভাৰটো চলি আছে..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"ছাৰ্ভাৰ বন্ধ কৰক"</string>
+    <string name="server_down" msgid="1030249207496490556">"ছাৰ্ভাৰটো কাৰ্যক্ষম হৈ থকা নাই"</string>
+    <string name="start_server" msgid="3878573341408591975">"ছাৰ্ভাৰ আৰম্ভ কৰক"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"অক্ষম কৰা আছে"</item>
+    <item msgid="3193389681837907872">"সক্ষম কৰা আছে"</item>
+    <item msgid="3124590179479393815">"অমিল"</item>
+    <item msgid="1606753456265236910">"প্ৰ’ভিজনিং"</item>
+    <item msgid="3930807209231347454">"অন্তৰ্ভুক্ত কৰা হ’ল"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"প্ৰ’ভিজন কৰা নাই"</item>
+    <item msgid="7598231293776486217">"প্ৰ’ভিজন কৰা হৈছে"</item>
+    <item msgid="3720547957514534185">"প্ৰয়োজনীয় নহয়"</item>
+    <item msgid="1264673582354896949">"চলি আছে"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-az/strings.xml b/testapps/TestServerApp/app/src/main/res/values-az/strings.xml
new file mode 100644
index 0000000..c7bdb24
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-az/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Ayarlar"</string>
+    <string name="server_running" msgid="2780193626090379172">"Server işləyir..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"Serveri dayandırın"</string>
+    <string name="server_down" msgid="1030249207496490556">"Server işləmir"</string>
+    <string name="start_server" msgid="3878573341408591975">"Serveri başladın"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Deaktiv"</item>
+    <item msgid="3193389681837907872">"Aktiv"</item>
+    <item msgid="3124590179479393815">"Uyğun deyil"</item>
+    <item msgid="1606753456265236910">"Təmin edilir"</item>
+    <item msgid="3930807209231347454">"Daxildir"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Təmin edilmir"</item>
+    <item msgid="7598231293776486217">"Təmin edilib"</item>
+    <item msgid="3720547957514534185">"Tələb olunmur"</item>
+    <item msgid="1264673582354896949">"Davam edir"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-b+sr+Latn/strings.xml b/testapps/TestServerApp/app/src/main/res/values-b+sr+Latn/strings.xml
new file mode 100644
index 0000000..62aeff1
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-b+sr+Latn/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Podešavanja"</string>
+    <string name="server_running" msgid="2780193626090379172">"Server je pokrenut…"</string>
+    <string name="stop_server" msgid="6192029827529013598">"Zaustavi server"</string>
+    <string name="server_down" msgid="1030249207496490556">"Server je pao"</string>
+    <string name="start_server" msgid="3878573341408591975">"Pokreni server"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Onemogućeno"</item>
+    <item msgid="3193389681837907872">"Omogućeno"</item>
+    <item msgid="3124590179479393815">"Nekompatibilno"</item>
+    <item msgid="1606753456265236910">"Dodeljuje se"</item>
+    <item msgid="3930807209231347454">"Uvršteno"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Nije dodeljeno"</item>
+    <item msgid="7598231293776486217">"Dodeljeno"</item>
+    <item msgid="3720547957514534185">"Nije obavezno"</item>
+    <item msgid="1264673582354896949">"U toku"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-be/strings.xml b/testapps/TestServerApp/app/src/main/res/values-be/strings.xml
new file mode 100644
index 0000000..5f1f581
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-be/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Налады"</string>
+    <string name="server_running" msgid="2780193626090379172">"Сервер працуе..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"Спыніць сервер"</string>
+    <string name="server_down" msgid="1030249207496490556">"Сервер не працуе"</string>
+    <string name="start_server" msgid="3878573341408591975">"Запусціць сервер"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Адключана"</item>
+    <item msgid="3193389681837907872">"Уключана"</item>
+    <item msgid="3124590179479393815">"Адсутнічае сумяшчальнасць"</item>
+    <item msgid="1606753456265236910">"Ініцыялізацыя"</item>
+    <item msgid="3930807209231347454">"Уключана"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Не ініцыялізавана"</item>
+    <item msgid="7598231293776486217">"Ініцыялізавана"</item>
+    <item msgid="3720547957514534185">"Не патрабуецца"</item>
+    <item msgid="1264673582354896949">"Выконваецца"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-bg/strings.xml b/testapps/TestServerApp/app/src/main/res/values-bg/strings.xml
new file mode 100644
index 0000000..542d0f7
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-bg/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Настройки"</string>
+    <string name="server_running" msgid="2780193626090379172">"Сървърът работи..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"Спиране на сървъра"</string>
+    <string name="server_down" msgid="1030249207496490556">"Сървърът не работи"</string>
+    <string name="start_server" msgid="3878573341408591975">"Стартиране на сървъра"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Деактивирано"</item>
+    <item msgid="3193389681837907872">"Активирано"</item>
+    <item msgid="3124590179479393815">"Несъвместимо"</item>
+    <item msgid="1606753456265236910">"Обезпечава се"</item>
+    <item msgid="3930807209231347454">"Включено"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Не е обезпечено"</item>
+    <item msgid="7598231293776486217">"Обезпечено"</item>
+    <item msgid="3720547957514534185">"Не е задължително"</item>
+    <item msgid="1264673582354896949">"В ход"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-bn/strings.xml b/testapps/TestServerApp/app/src/main/res/values-bn/strings.xml
new file mode 100644
index 0000000..7244308
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-bn/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"সেটিংস"</string>
+    <string name="server_running" msgid="2780193626090379172">"সার্ভার রান করছে..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"সার্ভার বন্ধ করুন"</string>
+    <string name="server_down" msgid="1030249207496490556">"সার্ভার কাজ করছে না"</string>
+    <string name="start_server" msgid="3878573341408591975">"সার্ভার চালু করুন"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"বন্ধ আছে"</item>
+    <item msgid="3193389681837907872">"চালু আছে"</item>
+    <item msgid="3124590179479393815">"মানানসই নয়"</item>
+    <item msgid="1606753456265236910">"প্রস্তুতি চলছে"</item>
+    <item msgid="3930807209231347454">"অন্তর্ভুক্ত আছে"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"প্রস্তুত নেই"</item>
+    <item msgid="7598231293776486217">"প্রস্তুত আছে"</item>
+    <item msgid="3720547957514534185">"প্রয়োজন নেই"</item>
+    <item msgid="1264673582354896949">"কাজ চলছে"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-cs/strings.xml b/testapps/TestServerApp/app/src/main/res/values-cs/strings.xml
new file mode 100644
index 0000000..c8dfd8d
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-cs/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Nastavení"</string>
+    <string name="server_running" msgid="2780193626090379172">"Server běží…"</string>
+    <string name="stop_server" msgid="6192029827529013598">"Zastavit server"</string>
+    <string name="server_down" msgid="1030249207496490556">"Server je nedostupný"</string>
+    <string name="start_server" msgid="3878573341408591975">"Spustit server"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Vypnuto"</item>
+    <item msgid="3193389681837907872">"Zapnuto"</item>
+    <item msgid="3124590179479393815">"Nekompatibilní"</item>
+    <item msgid="1606753456265236910">"Zajišťování"</item>
+    <item msgid="3930807209231347454">"Zahrnuto"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Nezajištěno"</item>
+    <item msgid="7598231293776486217">"Zajištěno"</item>
+    <item msgid="3720547957514534185">"Nepovinné"</item>
+    <item msgid="1264673582354896949">"Probíhá"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-da/strings.xml b/testapps/TestServerApp/app/src/main/res/values-da/strings.xml
new file mode 100644
index 0000000..1d8e029
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-da/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"Testserverapp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Indstillinger"</string>
+    <string name="server_running" msgid="2780193626090379172">"Serveren kører…"</string>
+    <string name="stop_server" msgid="6192029827529013598">"Stop server"</string>
+    <string name="server_down" msgid="1030249207496490556">"Serveren er nede"</string>
+    <string name="start_server" msgid="3878573341408591975">"Start server"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Deaktiveret"</item>
+    <item msgid="3193389681837907872">"Aktiveret"</item>
+    <item msgid="3124590179479393815">"Ikke kompatibel"</item>
+    <item msgid="1606753456265236910">"Provisionerer"</item>
+    <item msgid="3930807209231347454">"Inkluderet"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Ikke provisioneret"</item>
+    <item msgid="7598231293776486217">"Provisioneret"</item>
+    <item msgid="3720547957514534185">"Ikke påkrævet"</item>
+    <item msgid="1264673582354896949">"I gang"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-de/strings.xml b/testapps/TestServerApp/app/src/main/res/values-de/strings.xml
new file mode 100644
index 0000000..4adc332
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-de/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Einstellungen"</string>
+    <string name="server_running" msgid="2780193626090379172">"Server ist in Betrieb…"</string>
+    <string name="stop_server" msgid="6192029827529013598">"Server anhalten"</string>
+    <string name="server_down" msgid="1030249207496490556">"Server ist ausgefallen"</string>
+    <string name="start_server" msgid="3878573341408591975">"Server starten"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Deaktiviert"</item>
+    <item msgid="3193389681837907872">"Aktiviert"</item>
+    <item msgid="3124590179479393815">"Nicht kompatibel"</item>
+    <item msgid="1606753456265236910">"Nutzerverwaltung"</item>
+    <item msgid="3930807209231347454">"Enthalten"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Noch nicht von einem Nutzer verwaltet"</item>
+    <item msgid="7598231293776486217">"Von einem Nutzer verwaltet"</item>
+    <item msgid="3720547957514534185">"Nicht erforderlich"</item>
+    <item msgid="1264673582354896949">"In Bearbeitung"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-el/strings.xml b/testapps/TestServerApp/app/src/main/res/values-el/strings.xml
new file mode 100644
index 0000000..540500d
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-el/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Ρυθμίσεις"</string>
+    <string name="server_running" msgid="2780193626090379172">"Ο διακομιστής λειτουργεί…"</string>
+    <string name="stop_server" msgid="6192029827529013598">"Διακοπή διακομιστή"</string>
+    <string name="server_down" msgid="1030249207496490556">"Ο διακομιστής είναι εκτός λειτουργίας"</string>
+    <string name="start_server" msgid="3878573341408591975">"Έναρξη διακομιστή"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Ανενεργό"</item>
+    <item msgid="3193389681837907872">"Ενεργό"</item>
+    <item msgid="3124590179479393815">"Μη συμβατό"</item>
+    <item msgid="1606753456265236910">"Παροχή"</item>
+    <item msgid="3930807209231347454">"Περιλαμβάνεται"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Χωρίς παροχή"</item>
+    <item msgid="7598231293776486217">"Παρέχεται"</item>
+    <item msgid="3720547957514534185">"Δεν απαιτείται"</item>
+    <item msgid="1264673582354896949">"Σε εξέλιξη"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-es-rUS/strings.xml b/testapps/TestServerApp/app/src/main/res/values-es-rUS/strings.xml
new file mode 100644
index 0000000..50c9ff2
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-es-rUS/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Configuración"</string>
+    <string name="server_running" msgid="2780193626090379172">"El servidor se está ejecutando…"</string>
+    <string name="stop_server" msgid="6192029827529013598">"Detener el servidor"</string>
+    <string name="server_down" msgid="1030249207496490556">"El servidor se encuentra inactivo"</string>
+    <string name="start_server" msgid="3878573341408591975">"Iniciar el servidor"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Inhabilitado"</item>
+    <item msgid="3193389681837907872">"Habilitado"</item>
+    <item msgid="3124590179479393815">"Incompatible"</item>
+    <item msgid="1606753456265236910">"Aprovisionando"</item>
+    <item msgid="3930807209231347454">"Incluido"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"No aprovisionado"</item>
+    <item msgid="7598231293776486217">"Aprovisionado"</item>
+    <item msgid="3720547957514534185">"No se necesita"</item>
+    <item msgid="1264673582354896949">"En curso"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-es/strings.xml b/testapps/TestServerApp/app/src/main/res/values-es/strings.xml
new file mode 100644
index 0000000..002fca7
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-es/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Ajustes"</string>
+    <string name="server_running" msgid="2780193626090379172">"El servidor se está ejecutando..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"Detener servidor"</string>
+    <string name="server_down" msgid="1030249207496490556">"El servidor no está operativo"</string>
+    <string name="start_server" msgid="3878573341408591975">"Iniciar servidor"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Inhabilitado"</item>
+    <item msgid="3193389681837907872">"Habilitado"</item>
+    <item msgid="3124590179479393815">"No compatible"</item>
+    <item msgid="1606753456265236910">"En aprovisionamiento"</item>
+    <item msgid="3930807209231347454">"Incluido"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"No aprovisionado"</item>
+    <item msgid="7598231293776486217">"Aprovisionado"</item>
+    <item msgid="3720547957514534185">"No se requiere"</item>
+    <item msgid="1264673582354896949">"En curso"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-et/strings.xml b/testapps/TestServerApp/app/src/main/res/values-et/strings.xml
new file mode 100644
index 0000000..49c3209
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-et/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Seaded"</string>
+    <string name="server_running" msgid="2780193626090379172">"Server töötab ..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"Peata server"</string>
+    <string name="server_down" msgid="1030249207496490556">"Serveris on katkestus"</string>
+    <string name="start_server" msgid="3878573341408591975">"Käivita server"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Keelatud"</item>
+    <item msgid="3193389681837907872">"Lubatud"</item>
+    <item msgid="3124590179479393815">"Ühildumatu"</item>
+    <item msgid="1606753456265236910">"Ettevalmistamine"</item>
+    <item msgid="3930807209231347454">"Kaasas"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Ettevalmistamata"</item>
+    <item msgid="7598231293776486217">"Ettevalmistatud"</item>
+    <item msgid="3720547957514534185">"Pole nõutav"</item>
+    <item msgid="1264673582354896949">"Töötluses"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-eu/strings.xml b/testapps/TestServerApp/app/src/main/res/values-eu/strings.xml
new file mode 100644
index 0000000..70f5423
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-eu/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Ezarpenak"</string>
+    <string name="server_running" msgid="2780193626090379172">"Zerbitzaria abian da…"</string>
+    <string name="stop_server" msgid="6192029827529013598">"Gelditu zerbitzaria"</string>
+    <string name="server_down" msgid="1030249207496490556">"Zerbitzaria ez dabil"</string>
+    <string name="start_server" msgid="3878573341408591975">"Abiarazi zerbitzaria"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Desgaituta"</item>
+    <item msgid="3193389681837907872">"Gaituta"</item>
+    <item msgid="3124590179479393815">"Bateraezina"</item>
+    <item msgid="1606753456265236910">"Hornitzen"</item>
+    <item msgid="3930807209231347454">"Barne"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Hornitu gabe"</item>
+    <item msgid="7598231293776486217">"Hornituta"</item>
+    <item msgid="3720547957514534185">"Ez da beharrezkoa"</item>
+    <item msgid="1264673582354896949">"Abian"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-fi/strings.xml b/testapps/TestServerApp/app/src/main/res/values-fi/strings.xml
new file mode 100644
index 0000000..9117e0c
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-fi/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Asetukset"</string>
+    <string name="server_running" msgid="2780193626090379172">"Palvelin on käytössä..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"Keskeytä palvelin"</string>
+    <string name="server_down" msgid="1030249207496490556">"Palvelin on poissa käytöstä"</string>
+    <string name="start_server" msgid="3878573341408591975">"Käynnistä palvelin"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Ei käytössä"</item>
+    <item msgid="3193389681837907872">"Käytössä"</item>
+    <item msgid="3124590179479393815">"Yhteensopimaton"</item>
+    <item msgid="1606753456265236910">"Käsitellään"</item>
+    <item msgid="3930807209231347454">"Sisältyy"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Ei käsitelty"</item>
+    <item msgid="7598231293776486217">"Käsitelty"</item>
+    <item msgid="3720547957514534185">"Valinnainen"</item>
+    <item msgid="1264673582354896949">"Käynnissä"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-fr-rCA/strings.xml b/testapps/TestServerApp/app/src/main/res/values-fr-rCA/strings.xml
new file mode 100644
index 0000000..97fd06a
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-fr-rCA/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Paramètres"</string>
+    <string name="server_running" msgid="2780193626090379172">"Le serveur est en cours d\'exécution…"</string>
+    <string name="stop_server" msgid="6192029827529013598">"Arrêter le serveur"</string>
+    <string name="server_down" msgid="1030249207496490556">"Le serveur est en panne"</string>
+    <string name="start_server" msgid="3878573341408591975">"Démarrer le serveur"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Désactivé"</item>
+    <item msgid="3193389681837907872">"Activé"</item>
+    <item msgid="3124590179479393815">"Incompatible"</item>
+    <item msgid="1606753456265236910">"Approvisionnement en cours…"</item>
+    <item msgid="3930807209231347454">"Inclus"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Non approvisionné"</item>
+    <item msgid="7598231293776486217">"Approvisionné"</item>
+    <item msgid="3720547957514534185">"Facultatif"</item>
+    <item msgid="1264673582354896949">"En cours de traitement"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-fr/strings.xml b/testapps/TestServerApp/app/src/main/res/values-fr/strings.xml
new file mode 100644
index 0000000..be70c79
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-fr/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Paramètres"</string>
+    <string name="server_running" msgid="2780193626090379172">"Serveur en cours d\'exécution…"</string>
+    <string name="stop_server" msgid="6192029827529013598">"Arrêter le serveur"</string>
+    <string name="server_down" msgid="1030249207496490556">"Serveur en panne"</string>
+    <string name="start_server" msgid="3878573341408591975">"Démarrer le serveur"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Désactivé"</item>
+    <item msgid="3193389681837907872">"Activé"</item>
+    <item msgid="3124590179479393815">"Incompatible"</item>
+    <item msgid="1606753456265236910">"Provisionnement…"</item>
+    <item msgid="3930807209231347454">"Inclus"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Non provisionné"</item>
+    <item msgid="7598231293776486217">"Provisionné"</item>
+    <item msgid="3720547957514534185">"Facultatif"</item>
+    <item msgid="1264673582354896949">"En cours"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-gl/strings.xml b/testapps/TestServerApp/app/src/main/res/values-gl/strings.xml
new file mode 100644
index 0000000..9de1ceb
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-gl/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Configuración"</string>
+    <string name="server_running" msgid="2780193626090379172">"O servidor está executándose…"</string>
+    <string name="stop_server" msgid="6192029827529013598">"Deter servidor"</string>
+    <string name="server_down" msgid="1030249207496490556">"O servidor non está operativo"</string>
+    <string name="start_server" msgid="3878573341408591975">"Iniciar servidor"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Desactivado"</item>
+    <item msgid="3193389681837907872">"Activado"</item>
+    <item msgid="3124590179479393815">"Incompatible"</item>
+    <item msgid="1606753456265236910">"En aprovisionamento"</item>
+    <item msgid="3930807209231347454">"Incluído"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Non aprovisionado"</item>
+    <item msgid="7598231293776486217">"Aprovisionado"</item>
+    <item msgid="3720547957514534185">"Non obrigatorio"</item>
+    <item msgid="1264673582354896949">"En curso"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-gu/strings.xml b/testapps/TestServerApp/app/src/main/res/values-gu/strings.xml
new file mode 100644
index 0000000..d2fc1d0
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-gu/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"સેટિંગ"</string>
+    <string name="server_running" msgid="2780193626090379172">"સર્વર ચાલુ છે..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"સર્વર રોકો"</string>
+    <string name="server_down" msgid="1030249207496490556">"સર્વર ડાઉન છે"</string>
+    <string name="start_server" msgid="3878573341408591975">"સર્વર શરૂ કરો"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"બંધ છે"</item>
+    <item msgid="3193389681837907872">"ચાલુ છે"</item>
+    <item msgid="3124590179479393815">"અસંગત છે"</item>
+    <item msgid="1606753456265236910">"જોગવાઈ કરી રહ્યું છે"</item>
+    <item msgid="3930807209231347454">"શામેલ છે"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"કોઈ જોગવાઈ કરેલી નથી"</item>
+    <item msgid="7598231293776486217">"જોગવાઈ કરેલી છે"</item>
+    <item msgid="3720547957514534185">"આવશ્યક નથી"</item>
+    <item msgid="1264673582354896949">"પ્રક્રિયા ચાલુ છે"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-hi/strings.xml b/testapps/TestServerApp/app/src/main/res/values-hi/strings.xml
new file mode 100644
index 0000000..d5be924
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-hi/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"सेटिंग"</string>
+    <string name="server_running" msgid="2780193626090379172">"सर्वर काम कर रहा है..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"सर्वर बंद करें"</string>
+    <string name="server_down" msgid="1030249207496490556">"सर्वर काम नहीं कर रहा है"</string>
+    <string name="start_server" msgid="3878573341408591975">"सर्वर चालू करें"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"बंद है"</item>
+    <item msgid="3193389681837907872">"चालू है"</item>
+    <item msgid="3124590179479393815">"काम नहीं करता"</item>
+    <item msgid="1606753456265236910">"प्रावधान"</item>
+    <item msgid="3930807209231347454">"पहले से मौजूद है"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"प्रावधान नहीं किया गया है"</item>
+    <item msgid="7598231293776486217">"प्रावधान किया गया है"</item>
+    <item msgid="3720547957514534185">"ज़रूरी नहीं है"</item>
+    <item msgid="1264673582354896949">"प्रावधान किया जा रहा है"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-hr/strings.xml b/testapps/TestServerApp/app/src/main/res/values-hr/strings.xml
new file mode 100644
index 0000000..492f2cc
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-hr/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Postavke"</string>
+    <string name="server_running" msgid="2780193626090379172">"Poslužitelj je aktivan..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"Zaustavljanje poslužitelja"</string>
+    <string name="server_down" msgid="1030249207496490556">"Poslužitelj nije aktivan"</string>
+    <string name="start_server" msgid="3878573341408591975">"Pokretanje poslužitelja"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Onemogućeno"</item>
+    <item msgid="3193389681837907872">"Omogućeno"</item>
+    <item msgid="3124590179479393815">"Nije kompatibilno"</item>
+    <item msgid="1606753456265236910">"Omogućivanje"</item>
+    <item msgid="3930807209231347454">"Uključeno"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Nije omogućeno"</item>
+    <item msgid="7598231293776486217">"Omogućeno"</item>
+    <item msgid="3720547957514534185">"Nije obavezno"</item>
+    <item msgid="1264673582354896949">"U tijeku"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-hu/strings.xml b/testapps/TestServerApp/app/src/main/res/values-hu/strings.xml
new file mode 100644
index 0000000..286fae3
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-hu/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Beállítások"</string>
+    <string name="server_running" msgid="2780193626090379172">"A szerver fut..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"Szerver leállítása"</string>
+    <string name="server_down" msgid="1030249207496490556">"A szerver leállt"</string>
+    <string name="start_server" msgid="3878573341408591975">"Szerver indítása"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Kikapcsolva"</item>
+    <item msgid="3193389681837907872">"Engedélyezve"</item>
+    <item msgid="3124590179479393815">"Nem kompatibilis"</item>
+    <item msgid="1606753456265236910">"Kiépítés"</item>
+    <item msgid="3930807209231347454">"Tartalmazza"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Nincs kiépítve"</item>
+    <item msgid="7598231293776486217">"Kiépítve"</item>
+    <item msgid="3720547957514534185">"Nem kötelező"</item>
+    <item msgid="1264673582354896949">"Folyamatban"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-hy/strings.xml b/testapps/TestServerApp/app/src/main/res/values-hy/strings.xml
new file mode 100644
index 0000000..03a382b
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-hy/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Կարգավորումներ"</string>
+    <string name="server_running" msgid="2780193626090379172">"Սերվերն աշխատում է..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"Կանգնեցնել սերվերը"</string>
+    <string name="server_down" msgid="1030249207496490556">"Սերվերն անջատված է"</string>
+    <string name="start_server" msgid="3878573341408591975">"Գործարկել սերվերը"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Անջատված է"</item>
+    <item msgid="3193389681837907872">"Միացված է"</item>
+    <item msgid="3124590179479393815">"Անհամատեղելիություն"</item>
+    <item msgid="1606753456265236910">"Նախապատրաստում"</item>
+    <item msgid="3930807209231347454">"Ներառված է"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Նախապատրաստված չէ"</item>
+    <item msgid="7598231293776486217">"Նախապատրաստված է"</item>
+    <item msgid="3720547957514534185">"Ոչ պարտադիր"</item>
+    <item msgid="1264673582354896949">"Ընթացքում է"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-in/strings.xml b/testapps/TestServerApp/app/src/main/res/values-in/strings.xml
new file mode 100644
index 0000000..b918582
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-in/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Setelan"</string>
+    <string name="server_running" msgid="2780193626090379172">"Server sedang berjalan..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"Hentikan Server"</string>
+    <string name="server_down" msgid="1030249207496490556">"Server tidak berfungsi"</string>
+    <string name="start_server" msgid="3878573341408591975">"Mulai Server"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Nonaktif"</item>
+    <item msgid="3193389681837907872">"Aktif"</item>
+    <item msgid="3124590179479393815">"Tidak kompatibel"</item>
+    <item msgid="1606753456265236910">"Penyediaan"</item>
+    <item msgid="3930807209231347454">"Disertakan"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Tidak Disediakan"</item>
+    <item msgid="7598231293776486217">"Disediakan"</item>
+    <item msgid="3720547957514534185">"Tidak Wajib"</item>
+    <item msgid="1264673582354896949">"Dalam Proses"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-is/strings.xml b/testapps/TestServerApp/app/src/main/res/values-is/strings.xml
new file mode 100644
index 0000000..610755a
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-is/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Stillingar"</string>
+    <string name="server_running" msgid="2780193626090379172">"Þjónn er í gangi..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"Stöðva þjón"</string>
+    <string name="server_down" msgid="1030249207496490556">"Þjónn liggur niðri"</string>
+    <string name="start_server" msgid="3878573341408591975">"Ræsa þjón"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Slökkt"</item>
+    <item msgid="3193389681837907872">"Kveikt"</item>
+    <item msgid="3124590179479393815">"Ósamhæft"</item>
+    <item msgid="1606753456265236910">"Úthlutun"</item>
+    <item msgid="3930807209231347454">"Innifalið"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Ekki úthlutað"</item>
+    <item msgid="7598231293776486217">"Úthlutað"</item>
+    <item msgid="3720547957514534185">"Ekki áskilið"</item>
+    <item msgid="1264673582354896949">"Í vinnslu"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-it/strings.xml b/testapps/TestServerApp/app/src/main/res/values-it/strings.xml
new file mode 100644
index 0000000..6f4f3b1
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-it/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Settings"</string>
+    <string name="server_running" msgid="2780193626090379172">"Server is running..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"Stop Server"</string>
+    <string name="server_down" msgid="1030249207496490556">"Server is down"</string>
+    <string name="start_server" msgid="3878573341408591975">"Start Server"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Disabled"</item>
+    <item msgid="3193389681837907872">"Enabled"</item>
+    <item msgid="3124590179479393815">"Incompatible"</item>
+    <item msgid="1606753456265236910">"Provisioning"</item>
+    <item msgid="3930807209231347454">"Included"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Not Provisioned"</item>
+    <item msgid="7598231293776486217">"Provisioned"</item>
+    <item msgid="3720547957514534185">"Not Required"</item>
+    <item msgid="1264673582354896949">"In Progress"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-ja/strings.xml b/testapps/TestServerApp/app/src/main/res/values-ja/strings.xml
new file mode 100644
index 0000000..1b962e4
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-ja/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"設定"</string>
+    <string name="server_running" msgid="2780193626090379172">"サーバーが実行中です..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"サーバーを停止"</string>
+    <string name="server_down" msgid="1030249207496490556">"サーバーがダウンしています"</string>
+    <string name="start_server" msgid="3878573341408591975">"サーバーを起動"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"無効"</item>
+    <item msgid="3193389681837907872">"有効"</item>
+    <item msgid="3124590179479393815">"非対応"</item>
+    <item msgid="1606753456265236910">"プロビジョニング"</item>
+    <item msgid="3930807209231347454">"必須"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"未プロビジョニング"</item>
+    <item msgid="7598231293776486217">"プロビジョニング済み"</item>
+    <item msgid="3720547957514534185">"任意"</item>
+    <item msgid="1264673582354896949">"処理中"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-kk/strings.xml b/testapps/TestServerApp/app/src/main/res/values-kk/strings.xml
new file mode 100644
index 0000000..8a93c31
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-kk/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Параметрлер"</string>
+    <string name="server_running" msgid="2780193626090379172">"Сервер істеп тұр…"</string>
+    <string name="stop_server" msgid="6192029827529013598">"Серверді тоқтату"</string>
+    <string name="server_down" msgid="1030249207496490556">"Сервер істемей тұр"</string>
+    <string name="start_server" msgid="3878573341408591975">"Серверді іске қосу"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Өшірулі"</item>
+    <item msgid="3193389681837907872">"Қосулы"</item>
+    <item msgid="3124590179479393815">"Үйлеспейді"</item>
+    <item msgid="1606753456265236910">"Дайындау"</item>
+    <item msgid="3930807209231347454">"Қамтылды"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Дайындалмады"</item>
+    <item msgid="7598231293776486217">"Дайындалды"</item>
+    <item msgid="3720547957514534185">"Міндетті емес"</item>
+    <item msgid="1264673582354896949">"Орындалып жатыр"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-kn/strings.xml b/testapps/TestServerApp/app/src/main/res/values-kn/strings.xml
new file mode 100644
index 0000000..227d44b
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-kn/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"ಸೆಟ್ಟಿಂಗ್‌ಗಳು"</string>
+    <string name="server_running" msgid="2780193626090379172">"ಸರ್ವರ್ ರನ್ ಆಗುತ್ತಿದೆ..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"ಸರ್ವರ್ ನಿಲ್ಲಿಸಿ"</string>
+    <string name="server_down" msgid="1030249207496490556">"ಸರ್ವರ್ ಡೌನ್ ಆಗಿದೆ"</string>
+    <string name="start_server" msgid="3878573341408591975">"ಸರ್ವರ್ ಪ್ರಾರಂಭಿಸಿ"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</item>
+    <item msgid="3193389681837907872">"ಸಕ್ರಿಯಗೊಳಿಸಲಾಗಿದೆ"</item>
+    <item msgid="3124590179479393815">"ಹೊಂದಾಣಿಕೆಯಾಗುವುದಿಲ್ಲ"</item>
+    <item msgid="1606753456265236910">"ಒದಗಿಸಲಾಗುತ್ತಿದೆ"</item>
+    <item msgid="3930807209231347454">"ಒಳಗೊಂಡಿದೆ"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"ಒದಗಿಸಲಾಗಿಲ್ಲ"</item>
+    <item msgid="7598231293776486217">"ಒದಗಿಸಲಾಗಿದೆ"</item>
+    <item msgid="3720547957514534185">"ಅಗತ್ಯವಿಲ್ಲ"</item>
+    <item msgid="1264673582354896949">"ಪ್ರಗತಿಯಲ್ಲಿದೆ"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-ko/strings.xml b/testapps/TestServerApp/app/src/main/res/values-ko/strings.xml
new file mode 100644
index 0000000..ca9b15a
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-ko/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"설정"</string>
+    <string name="server_running" msgid="2780193626090379172">"서버 실행 중…"</string>
+    <string name="stop_server" msgid="6192029827529013598">"서버를 중지하시겠습니까?"</string>
+    <string name="server_down" msgid="1030249207496490556">"서버가 다운됨"</string>
+    <string name="start_server" msgid="3878573341408591975">"서버를 시작하시겠습니까?"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"사용 안함"</item>
+    <item msgid="3193389681837907872">"사용 설정됨"</item>
+    <item msgid="3124590179479393815">"호환되지 않음"</item>
+    <item msgid="1606753456265236910">"프로비저닝"</item>
+    <item msgid="3930807209231347454">"포함됨"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"프로비저닝되지 않음"</item>
+    <item msgid="7598231293776486217">"프로비저닝됨"</item>
+    <item msgid="3720547957514534185">"필요 없음"</item>
+    <item msgid="1264673582354896949">"진행 중"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-ky/strings.xml b/testapps/TestServerApp/app/src/main/res/values-ky/strings.xml
new file mode 100644
index 0000000..3d6c36f
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-ky/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Параметрлер"</string>
+    <string name="server_running" msgid="2780193626090379172">"Сервер иштеп жатат..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"Серверди токтотуу"</string>
+    <string name="server_down" msgid="1030249207496490556">"Сервер иштебей калды"</string>
+    <string name="start_server" msgid="3878573341408591975">"Серверди иштетип баштоо"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Өчүрүлдү"</item>
+    <item msgid="3193389681837907872">"Иштетилди"</item>
+    <item msgid="3124590179479393815">"Ылайык келбейт"</item>
+    <item msgid="1606753456265236910">"Камсыз кылууда"</item>
+    <item msgid="3930807209231347454">"Камтылган"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Камсыздалган эмес"</item>
+    <item msgid="7598231293776486217">"Камсыздалган"</item>
+    <item msgid="3720547957514534185">"Талап кылынбайт"</item>
+    <item msgid="1264673582354896949">"Аткарылууда"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-lt/strings.xml b/testapps/TestServerApp/app/src/main/res/values-lt/strings.xml
new file mode 100644
index 0000000..a7e79e9
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-lt/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Nustatymai"</string>
+    <string name="server_running" msgid="2780193626090379172">"Serveris veikia..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"Sustabdyti serverį"</string>
+    <string name="server_down" msgid="1030249207496490556">"Serveris neveikia"</string>
+    <string name="start_server" msgid="3878573341408591975">"Paleisti serverį"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Išjungta"</item>
+    <item msgid="3193389681837907872">"Įgalinta"</item>
+    <item msgid="3124590179479393815">"Nesuderinama"</item>
+    <item msgid="1606753456265236910">"Parengiama"</item>
+    <item msgid="3930807209231347454">"Įtraukta"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Neparengta"</item>
+    <item msgid="7598231293776486217">"Parengta"</item>
+    <item msgid="3720547957514534185">"Nebūtina"</item>
+    <item msgid="1264673582354896949">"Vykdoma"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-lv/strings.xml b/testapps/TestServerApp/app/src/main/res/values-lv/strings.xml
new file mode 100644
index 0000000..a7bff51
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-lv/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"ServeraLietotneTestēšanai"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Iestatījumi"</string>
+    <string name="server_running" msgid="2780193626090379172">"Serveris darbojas…"</string>
+    <string name="stop_server" msgid="6192029827529013598">"Apturēt servera darbību"</string>
+    <string name="server_down" msgid="1030249207496490556">"Serveris nedarbojas"</string>
+    <string name="start_server" msgid="3878573341408591975">"Palaist serveri"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Atspējots"</item>
+    <item msgid="3193389681837907872">"Iespējots"</item>
+    <item msgid="3124590179479393815">"Nav saderīgs"</item>
+    <item msgid="1606753456265236910">"Notiek nodrošināšana"</item>
+    <item msgid="3930807209231347454">"Iekļauts"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Nav nodrošināts"</item>
+    <item msgid="7598231293776486217">"Nodrošināts"</item>
+    <item msgid="3720547957514534185">"Nav nepieciešams"</item>
+    <item msgid="1264673582354896949">"Notiek apstrāde"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-mk/strings.xml b/testapps/TestServerApp/app/src/main/res/values-mk/strings.xml
new file mode 100644
index 0000000..44a255c
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-mk/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Поставки"</string>
+    <string name="server_running" msgid="2780193626090379172">"Серверот се извршува…"</string>
+    <string name="stop_server" msgid="6192029827529013598">"Сопри го серверот"</string>
+    <string name="server_down" msgid="1030249207496490556">"Серверот е паднат"</string>
+    <string name="start_server" msgid="3878573341408591975">"Стартувај го серверот"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Оневозможено"</item>
+    <item msgid="3193389681837907872">"Овозможено"</item>
+    <item msgid="3124590179479393815">"Некомпатибилно"</item>
+    <item msgid="1606753456265236910">"Се обезбедува"</item>
+    <item msgid="3930807209231347454">"Опфатено"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Необезбедено"</item>
+    <item msgid="7598231293776486217">"Обезбедено"</item>
+    <item msgid="3720547957514534185">"Незадолжително"</item>
+    <item msgid="1264673582354896949">"Во тек"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-ml/strings.xml b/testapps/TestServerApp/app/src/main/res/values-ml/strings.xml
new file mode 100644
index 0000000..32b305a
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-ml/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"ക്രമീകരണം"</string>
+    <string name="server_running" msgid="2780193626090379172">"സെർവർ പ്രവർത്തിക്കുന്നുണ്ട്..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"സെർവർ നിർത്തുക"</string>
+    <string name="server_down" msgid="1030249207496490556">"സെർവർ ലഭ്യമല്ല"</string>
+    <string name="start_server" msgid="3878573341408591975">"സെർവർ ആരംഭിക്കുക"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"പ്രവർത്തനരഹിതമാക്കി"</item>
+    <item msgid="3193389681837907872">"പ്രവർത്തനക്ഷമമാക്കി"</item>
+    <item msgid="3124590179479393815">"അനുയോജ്യമല്ല"</item>
+    <item msgid="1606753456265236910">"പ്രൊവിഷനിംഗ്"</item>
+    <item msgid="3930807209231347454">"ഉൾപ്പെടുത്തി"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"പ്രൊവിഷൻ ചെയ്തിട്ടില്ല"</item>
+    <item msgid="7598231293776486217">"പ്രൊവിഷൻ ചെയ്തു"</item>
+    <item msgid="3720547957514534185">"ആവശ്യമില്ല"</item>
+    <item msgid="1264673582354896949">"പുരോഗമിക്കുന്നു"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-mn/strings.xml b/testapps/TestServerApp/app/src/main/res/values-mn/strings.xml
new file mode 100644
index 0000000..6c131e2
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-mn/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Тохиргоо"</string>
+    <string name="server_running" msgid="2780193626090379172">"Сервер ажиллаж байна..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"Серверийг зогсоох"</string>
+    <string name="server_down" msgid="1030249207496490556">"Сервер унтарсан байна"</string>
+    <string name="start_server" msgid="3878573341408591975">"Серверийг эхлүүлэх"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Идэвхгүй болгосон"</item>
+    <item msgid="3193389681837907872">"Идэвхжүүлсэн"</item>
+    <item msgid="3124590179479393815">"Тохирохгүй"</item>
+    <item msgid="1606753456265236910">"Бэлтгэж байна"</item>
+    <item msgid="3930807209231347454">"Багтсан"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Бэлтгээгүй"</item>
+    <item msgid="7598231293776486217">"Бэлтгэсэн"</item>
+    <item msgid="3720547957514534185">"Заавал биш"</item>
+    <item msgid="1264673582354896949">"Үргэлжилж байна"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-mr/strings.xml b/testapps/TestServerApp/app/src/main/res/values-mr/strings.xml
new file mode 100644
index 0000000..74a0f56
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-mr/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"सेटिंग्ज"</string>
+    <string name="server_running" msgid="2780193626090379172">"सर्व्हर रन होत आहे..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"सर्व्हर थांबवा"</string>
+    <string name="server_down" msgid="1030249207496490556">"सर्व्हर बंद आहे"</string>
+    <string name="start_server" msgid="3878573341408591975">"सर्व्हर सुरू करा"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"बंद आहे"</item>
+    <item msgid="3193389681837907872">"सुरू आहे"</item>
+    <item msgid="3124590179479393815">"कंपॅटिबल नाही"</item>
+    <item msgid="1606753456265236910">"तरतूद"</item>
+    <item msgid="3930807209231347454">"समावेश आहे"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"तरतूद केलेली नाही"</item>
+    <item msgid="7598231293776486217">"तरतूद केली आहे"</item>
+    <item msgid="3720547957514534185">"आवश्यक नाही"</item>
+    <item msgid="1264673582354896949">"प्रगतीपथावर आहे"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-my/strings.xml b/testapps/TestServerApp/app/src/main/res/values-my/strings.xml
new file mode 100644
index 0000000..9a0dcdf
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-my/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"ဆက်တင်များ"</string>
+    <string name="server_running" msgid="2780193626090379172">"ဆာဗာ လုပ်ဆောင်နေသည်…"</string>
+    <string name="stop_server" msgid="6192029827529013598">"ဆာဗာ ရပ်ရန်"</string>
+    <string name="server_down" msgid="1030249207496490556">"ဆာဗာကျနေသည်"</string>
+    <string name="start_server" msgid="3878573341408591975">"ဆာဗာ စတင်ရန်"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"ပိတ်ထားသည်"</item>
+    <item msgid="3193389681837907872">"ဖွင့်ထားသည်"</item>
+    <item msgid="3124590179479393815">"တွဲဖက်မသုံးနိုင်ပါ"</item>
+    <item msgid="1606753456265236910">"ပံ့ပိုးပေးခြင်း"</item>
+    <item msgid="3930807209231347454">"ပါဝင်သည်"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"ပံ့ပိုးမထားပါ"</item>
+    <item msgid="7598231293776486217">"ပံ့ပိုးပေးထားသည်"</item>
+    <item msgid="3720547957514534185">"မလိုအပ်ပါ"</item>
+    <item msgid="1264673582354896949">"ဆောင်ရွက်နေဆဲ"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-nb/strings.xml b/testapps/TestServerApp/app/src/main/res/values-nb/strings.xml
new file mode 100644
index 0000000..d28a197
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-nb/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Innstillinger"</string>
+    <string name="server_running" msgid="2780193626090379172">"Tjeneren kjører …"</string>
+    <string name="stop_server" msgid="6192029827529013598">"Stopp tjeneren"</string>
+    <string name="server_down" msgid="1030249207496490556">"Tjeneren er nede"</string>
+    <string name="start_server" msgid="3878573341408591975">"Start tjeneren"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Slått av"</item>
+    <item msgid="3193389681837907872">"Slått på"</item>
+    <item msgid="3124590179479393815">"Inkompatibel"</item>
+    <item msgid="1606753456265236910">"Klargjøring"</item>
+    <item msgid="3930807209231347454">"Inkludert"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Ikke klargjort"</item>
+    <item msgid="7598231293776486217">"Klargjort"</item>
+    <item msgid="3720547957514534185">"Ikke obligatorisk"</item>
+    <item msgid="1264673582354896949">"Under behandling"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-ne/strings.xml b/testapps/TestServerApp/app/src/main/res/values-ne/strings.xml
new file mode 100644
index 0000000..fe1f119
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-ne/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"सेटिङ"</string>
+    <string name="server_running" msgid="2780193626090379172">"सर्भर चल्दै छ..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"सर्भर बन्द गर्नुहोस्"</string>
+    <string name="server_down" msgid="1030249207496490556">"सर्भर डाउन छ"</string>
+    <string name="start_server" msgid="3878573341408591975">"सर्भर प्रयोग गर्न थाल्नुहोस्"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"अफ गरिएको छ"</item>
+    <item msgid="3193389681837907872">"अन गरिएको छ"</item>
+    <item msgid="3124590179479393815">"नमिल्दो"</item>
+    <item msgid="1606753456265236910">"प्रावधान मिलाइँदै छ"</item>
+    <item msgid="3930807209231347454">"समावेश गरिएको छ"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"प्रावधान मिलाइएको छैन"</item>
+    <item msgid="7598231293776486217">"प्रावधान मिलाइएको छ"</item>
+    <item msgid="3720547957514534185">"आवश्यक छैन"</item>
+    <item msgid="1264673582354896949">"प्रक्रियामा छ"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-nl/strings.xml b/testapps/TestServerApp/app/src/main/res/values-nl/strings.xml
new file mode 100644
index 0000000..847dfca
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-nl/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Instellingen"</string>
+    <string name="server_running" msgid="2780193626090379172">"Server actief..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"Server stoppen"</string>
+    <string name="server_down" msgid="1030249207496490556">"Server offline"</string>
+    <string name="start_server" msgid="3878573341408591975">"Server starten"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Uit"</item>
+    <item msgid="3193389681837907872">"Aan"</item>
+    <item msgid="3124590179479393815">"Niet geschikt"</item>
+    <item msgid="1606753456265236910">"Registratie"</item>
+    <item msgid="3930807209231347454">"Opgenomen"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Niet geregistreerd"</item>
+    <item msgid="7598231293776486217">"Geregistreerd"</item>
+    <item msgid="3720547957514534185">"Niet vereist"</item>
+    <item msgid="1264673582354896949">"In behandeling"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-pa/strings.xml b/testapps/TestServerApp/app/src/main/res/values-pa/strings.xml
new file mode 100644
index 0000000..f4509fc
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-pa/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"ਸੈਟਿੰਗਾਂ"</string>
+    <string name="server_running" msgid="2780193626090379172">"ਸਰਵਰ ਚੱਲ ਰਿਹਾ ਹੈ..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"ਸਰਵਰ ਬੰਦ ਕਰੋ"</string>
+    <string name="server_down" msgid="1030249207496490556">"ਸਰਵਰ ਨਹੀਂ ਚੱਲ ਰਿਹਾ"</string>
+    <string name="start_server" msgid="3878573341408591975">"ਸਰਵਰ ਚਾਲੂ ਕਰੋ"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"ਬੰਦ"</item>
+    <item msgid="3193389681837907872">"ਚਾਲੂ"</item>
+    <item msgid="3124590179479393815">"ਗੈਰ-ਅਨੁਰੂਪ"</item>
+    <item msgid="1606753456265236910">"ਪ੍ਰਬੰਧਿਤ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ"</item>
+    <item msgid="3930807209231347454">"ਸ਼ਾਮਲ"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"ਪ੍ਰਬੰਧਿਤ ਨਹੀਂ ਹੈ"</item>
+    <item msgid="7598231293776486217">"ਪ੍ਰਬੰਧਿਤ ਹੈ"</item>
+    <item msgid="3720547957514534185">"ਲੋੜੀਂਦਾ ਨਹੀਂ"</item>
+    <item msgid="1264673582354896949">"ਜਾਰੀ ਹੈ"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-pl/strings.xml b/testapps/TestServerApp/app/src/main/res/values-pl/strings.xml
new file mode 100644
index 0000000..4a13003
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-pl/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Ustawienia"</string>
+    <string name="server_running" msgid="2780193626090379172">"Serwer działa…"</string>
+    <string name="stop_server" msgid="6192029827529013598">"ZatrzymaJ serwer"</string>
+    <string name="server_down" msgid="1030249207496490556">"Serwer nie działa"</string>
+    <string name="start_server" msgid="3878573341408591975">"Uruchom serwer"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Wyłączono"</item>
+    <item msgid="3193389681837907872">"Włączono"</item>
+    <item msgid="3124590179479393815">"Brak zgodności"</item>
+    <item msgid="1606753456265236910">"Obsługa administracyjna"</item>
+    <item msgid="3930807209231347454">"Dostępne"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Nieobsługiwane"</item>
+    <item msgid="7598231293776486217">"Obsługiwane"</item>
+    <item msgid="3720547957514534185">"Niewymagane"</item>
+    <item msgid="1264673582354896949">"W toku"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-pt-rPT/strings.xml b/testapps/TestServerApp/app/src/main/res/values-pt-rPT/strings.xml
new file mode 100644
index 0000000..e61c84d
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-pt-rPT/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Definições"</string>
+    <string name="server_running" msgid="2780193626090379172">"O servidor está em execução…"</string>
+    <string name="stop_server" msgid="6192029827529013598">"Parar servidor"</string>
+    <string name="server_down" msgid="1030249207496490556">"O servidor está indisponível"</string>
+    <string name="start_server" msgid="3878573341408591975">"Iniciar servidor"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Desativado"</item>
+    <item msgid="3193389681837907872">"Ativado"</item>
+    <item msgid="3124590179479393815">"Incompatível"</item>
+    <item msgid="1606753456265236910">"A aprovisionar"</item>
+    <item msgid="3930807209231347454">"Incluído"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Não aprovisionado"</item>
+    <item msgid="7598231293776486217">"Aprovisionado"</item>
+    <item msgid="3720547957514534185">"Não obrigatório"</item>
+    <item msgid="1264673582354896949">"Em curso"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-pt/strings.xml b/testapps/TestServerApp/app/src/main/res/values-pt/strings.xml
new file mode 100644
index 0000000..1d2310d
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-pt/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Configurações"</string>
+    <string name="server_running" msgid="2780193626090379172">"O servidor está em execução..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"Interromper servidor"</string>
+    <string name="server_down" msgid="1030249207496490556">"O servidor está fora do ar."</string>
+    <string name="start_server" msgid="3878573341408591975">"Iniciar servidor"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Desativado"</item>
+    <item msgid="3193389681837907872">"Ativado"</item>
+    <item msgid="3124590179479393815">"Incompatível"</item>
+    <item msgid="1606753456265236910">"Provisionando"</item>
+    <item msgid="3930807209231347454">"Incluso"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Não provisionado"</item>
+    <item msgid="7598231293776486217">"Provisionado"</item>
+    <item msgid="3720547957514534185">"Não obrigatório"</item>
+    <item msgid="1264673582354896949">"Em andamento"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-ro/strings.xml b/testapps/TestServerApp/app/src/main/res/values-ro/strings.xml
new file mode 100644
index 0000000..a84085a
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-ro/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Setări"</string>
+    <string name="server_running" msgid="2780193626090379172">"Serverul rulează..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"Oprește serverul"</string>
+    <string name="server_down" msgid="1030249207496490556">"Serverul nu funcționează"</string>
+    <string name="start_server" msgid="3878573341408591975">"Pornește serverul"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Dezactivat"</item>
+    <item msgid="3193389681837907872">"Activat"</item>
+    <item msgid="3124590179479393815">"Incompatibil"</item>
+    <item msgid="1606753456265236910">"Configurarea accesului pentru utilizatori"</item>
+    <item msgid="3930807209231347454">"Inclus"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Nu a fost configurat accesul"</item>
+    <item msgid="7598231293776486217">"A fost configurat accesul"</item>
+    <item msgid="3720547957514534185">"Nu este obligatoriu"</item>
+    <item msgid="1264673582354896949">"În desfășurare"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-ru/strings.xml b/testapps/TestServerApp/app/src/main/res/values-ru/strings.xml
new file mode 100644
index 0000000..1242f96
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-ru/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Настройки"</string>
+    <string name="server_running" msgid="2780193626090379172">"Сервер работает…"</string>
+    <string name="stop_server" msgid="6192029827529013598">"Остановить сервер"</string>
+    <string name="server_down" msgid="1030249207496490556">"Сервер не работает"</string>
+    <string name="start_server" msgid="3878573341408591975">"Запустить сервер"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Неактивно"</item>
+    <item msgid="3193389681837907872">"Активно"</item>
+    <item msgid="3124590179479393815">"Несовместимо"</item>
+    <item msgid="1606753456265236910">"Инициализация"</item>
+    <item msgid="3930807209231347454">"Включено"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Не подготовлено"</item>
+    <item msgid="7598231293776486217">"Подготовлено"</item>
+    <item msgid="3720547957514534185">"Необязательно"</item>
+    <item msgid="1264673582354896949">"На рассмотрении"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-si/strings.xml b/testapps/TestServerApp/app/src/main/res/values-si/strings.xml
new file mode 100644
index 0000000..47dba95
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-si/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"සැකසීම්"</string>
+    <string name="server_running" msgid="2780193626090379172">"සේවාදායකය ධාවනය වේ..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"සේවාදායකය නවත්වන්න"</string>
+    <string name="server_down" msgid="1030249207496490556">"සේවාදායකය බිඳ වැටී ඇත"</string>
+    <string name="start_server" msgid="3878573341408591975">"සේවාදායකය අරඹන්න"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"අබලයි"</item>
+    <item msgid="3193389681837907872">"සබලයි"</item>
+    <item msgid="3124590179479393815">"නොගැළපෙන"</item>
+    <item msgid="1606753456265236910">"ප්‍රතිපාදනය කරමින්"</item>
+    <item msgid="3930807209231347454">"ඇතුළත් වේ"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"ප්‍රතිපාදනය කර නැත"</item>
+    <item msgid="7598231293776486217">"ප්‍රතිපාදන ලත්"</item>
+    <item msgid="3720547957514534185">"අවශ්‍ය නැත"</item>
+    <item msgid="1264673582354896949">"ප්‍රගතියේ පවතී"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-sk/strings.xml b/testapps/TestServerApp/app/src/main/res/values-sk/strings.xml
new file mode 100644
index 0000000..ca4bd55
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-sk/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Nastavenia"</string>
+    <string name="server_running" msgid="2780193626090379172">"Server je spustený…"</string>
+    <string name="stop_server" msgid="6192029827529013598">"Zastaviť server"</string>
+    <string name="server_down" msgid="1030249207496490556">"Server je nedostupný"</string>
+    <string name="start_server" msgid="3878573341408591975">"Spustiť server"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Vypnuté"</item>
+    <item msgid="3193389681837907872">"Zapnuté"</item>
+    <item msgid="3124590179479393815">"Nekompatibilné"</item>
+    <item msgid="1606753456265236910">"Poskytovanie"</item>
+    <item msgid="3930807209231347454">"Zahrnuté"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Neposkytuje sa"</item>
+    <item msgid="7598231293776486217">"Poskytuje sa"</item>
+    <item msgid="3720547957514534185">"Nepovinné"</item>
+    <item msgid="1264673582354896949">"Spracúva sa"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-sl/strings.xml b/testapps/TestServerApp/app/src/main/res/values-sl/strings.xml
new file mode 100644
index 0000000..570e6e2
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-sl/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Nastavitve"</string>
+    <string name="server_running" msgid="2780193626090379172">"Strežnik se izvaja ..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"Ustavi strežnik"</string>
+    <string name="server_down" msgid="1030249207496490556">"Strežnik ne deluje"</string>
+    <string name="start_server" msgid="3878573341408591975">"Zaženi strežnik"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Onemogočeno"</item>
+    <item msgid="3193389681837907872">"Omogočeno"</item>
+    <item msgid="3124590179479393815">"Nezdružljivo"</item>
+    <item msgid="1606753456265236910">"Omogočanje uporabe"</item>
+    <item msgid="3930807209231347454">"Vključeno"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Uporaba ni omogočena"</item>
+    <item msgid="7598231293776486217">"Omogočeno"</item>
+    <item msgid="3720547957514534185">"Ni zahtevano"</item>
+    <item msgid="1264673582354896949">"Poteka"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-sq/strings.xml b/testapps/TestServerApp/app/src/main/res/values-sq/strings.xml
new file mode 100644
index 0000000..fbcd4da
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-sq/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Cilësimet"</string>
+    <string name="server_running" msgid="2780193626090379172">"Serveri është në ekzekutim..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"Ndalo serverin"</string>
+    <string name="server_down" msgid="1030249207496490556">"Serveri nuk po funksionon"</string>
+    <string name="start_server" msgid="3878573341408591975">"Nis serverin"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Çaktivizuar"</item>
+    <item msgid="3193389681837907872">"Aktivizuar"</item>
+    <item msgid="3124590179479393815">"I papërputhshëm"</item>
+    <item msgid="1606753456265236910">"Po përgatitet"</item>
+    <item msgid="3930807209231347454">"Përfshirë"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Nuk është përgatitur"</item>
+    <item msgid="7598231293776486217">"Përgatitur"</item>
+    <item msgid="3720547957514534185">"Nuk kërkohet"</item>
+    <item msgid="1264673582354896949">"Në vazhdim"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-sr/strings.xml b/testapps/TestServerApp/app/src/main/res/values-sr/strings.xml
new file mode 100644
index 0000000..e8fc322
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-sr/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Подешавања"</string>
+    <string name="server_running" msgid="2780193626090379172">"Сервер је покренут…"</string>
+    <string name="stop_server" msgid="6192029827529013598">"Заустави сервер"</string>
+    <string name="server_down" msgid="1030249207496490556">"Сервер је пао"</string>
+    <string name="start_server" msgid="3878573341408591975">"Покрени сервер"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Онемогућено"</item>
+    <item msgid="3193389681837907872">"Омогућено"</item>
+    <item msgid="3124590179479393815">"Некомпатибилно"</item>
+    <item msgid="1606753456265236910">"Додељује се"</item>
+    <item msgid="3930807209231347454">"Уврштено"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Није додељено"</item>
+    <item msgid="7598231293776486217">"Додељено"</item>
+    <item msgid="3720547957514534185">"Није обавезно"</item>
+    <item msgid="1264673582354896949">"У току"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-sv/strings.xml b/testapps/TestServerApp/app/src/main/res/values-sv/strings.xml
new file mode 100644
index 0000000..8470695
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-sv/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Inställningar"</string>
+    <string name="server_running" msgid="2780193626090379172">"Servern körs …"</string>
+    <string name="stop_server" msgid="6192029827529013598">"Stoppa servern"</string>
+    <string name="server_down" msgid="1030249207496490556">"Servern ligger nere"</string>
+    <string name="start_server" msgid="3878573341408591975">"Starta servern"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Inaktiverad"</item>
+    <item msgid="3193389681837907872">"Aktiverad"</item>
+    <item msgid="3124590179479393815">"Ej kompatibel"</item>
+    <item msgid="1606753456265236910">"Certifikaten installeras"</item>
+    <item msgid="3930807209231347454">"Inkluderat"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Ej administrerad"</item>
+    <item msgid="7598231293776486217">"Administrerad"</item>
+    <item msgid="3720547957514534185">"Ej obligatorisk"</item>
+    <item msgid="1264673582354896949">"Pågår"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-sw/strings.xml b/testapps/TestServerApp/app/src/main/res/values-sw/strings.xml
new file mode 100644
index 0000000..c1155b8
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-sw/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Mipangilio"</string>
+    <string name="server_running" msgid="2780193626090379172">"Seva inatekeleza..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"Sitisha Seva"</string>
+    <string name="server_down" msgid="1030249207496490556">"Seva iko chini"</string>
+    <string name="start_server" msgid="3878573341408591975">"Washa Seva"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Imezimwa"</item>
+    <item msgid="3193389681837907872">"Imewashwa"</item>
+    <item msgid="3124590179479393815">"Haioani"</item>
+    <item msgid="1606753456265236910">"Inaandaa"</item>
+    <item msgid="3930807209231347454">"Imejumuishwa"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Haijatolewa"</item>
+    <item msgid="7598231293776486217">"Imetolewa"</item>
+    <item msgid="3720547957514534185">"Haihitajiki"</item>
+    <item msgid="1264673582354896949">"Inaendelea"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-ta/strings.xml b/testapps/TestServerApp/app/src/main/res/values-ta/strings.xml
new file mode 100644
index 0000000..adad427
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-ta/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"அமைப்புகள்"</string>
+    <string name="server_running" msgid="2780193626090379172">"சேவையகம் இயக்கத்தில் உள்ளது..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"சேவையகத்தை நிறுத்து"</string>
+    <string name="server_down" msgid="1030249207496490556">"சேவையகம் இயங்கவில்லை"</string>
+    <string name="start_server" msgid="3878573341408591975">"சேவையகத்தைத் தொடங்கு"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"முடக்கப்பட்டது"</item>
+    <item msgid="3193389681837907872">"இயக்கப்பட்டது"</item>
+    <item msgid="3124590179479393815">"இணக்கமற்றது"</item>
+    <item msgid="1606753456265236910">"அமைக்கிறது"</item>
+    <item msgid="3930807209231347454">"சேர்க்கப்பட்டது"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"அமைக்கப்படவில்லை"</item>
+    <item msgid="7598231293776486217">"அமைக்கப்பட்டது"</item>
+    <item msgid="3720547957514534185">"அவசியமில்லை"</item>
+    <item msgid="1264673582354896949">"செயலிலுள்ளது"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-te/strings.xml b/testapps/TestServerApp/app/src/main/res/values-te/strings.xml
new file mode 100644
index 0000000..39cc2fe
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-te/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"టెస్ట్‌సర్వర్‌యాప్"</string>
+    <string name="action_settings" msgid="1335152369747372374">"సెట్టింగ్‌లు"</string>
+    <string name="server_running" msgid="2780193626090379172">"సర్వర్ రన్ అవుతోంది..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"సర్వర్‌ను ఆపివేయండి"</string>
+    <string name="server_down" msgid="1030249207496490556">"సర్వర్ డౌన్ అయింది"</string>
+    <string name="start_server" msgid="3878573341408591975">"సర్వర్‌ను ప్రారంభించండి"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"డిజేబుల్ చేయబడింది"</item>
+    <item msgid="3193389681837907872">"ఎనేబుల్ చేయబడింది"</item>
+    <item msgid="3124590179479393815">"అనుకూలంగా లేదు"</item>
+    <item msgid="1606753456265236910">"కేటాయిస్తోంది"</item>
+    <item msgid="3930807209231347454">"చేర్చబడింది"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"కేటాయించలేదు"</item>
+    <item msgid="7598231293776486217">"కేటాయించబడింది"</item>
+    <item msgid="3720547957514534185">"అవసరం లేదు"</item>
+    <item msgid="1264673582354896949">"ప్రోగ్రెస్‌లో ఉంది"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-th/strings.xml b/testapps/TestServerApp/app/src/main/res/values-th/strings.xml
new file mode 100644
index 0000000..78232ca
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-th/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"แอปเซิร์ฟเวอร์ทดสอบ"</string>
+    <string name="action_settings" msgid="1335152369747372374">"การตั้งค่า"</string>
+    <string name="server_running" msgid="2780193626090379172">"เซิร์ฟเวอร์กำลังทำงาน..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"หยุดเซิร์ฟเวอร์"</string>
+    <string name="server_down" msgid="1030249207496490556">"เซิร์ฟเวอร์ขัดข้อง"</string>
+    <string name="start_server" msgid="3878573341408591975">"เริ่มต้นเซิร์ฟเวอร์"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"ปิดใช้อยู่"</item>
+    <item msgid="3193389681837907872">"เปิดใช้อยู่"</item>
+    <item msgid="3124590179479393815">"ใช้งานร่วมกันไม่ได้"</item>
+    <item msgid="1606753456265236910">"การจัดสรร"</item>
+    <item msgid="3930807209231347454">"รวมอยู่ด้วย"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"ยังไม่ได้จัดสรร"</item>
+    <item msgid="7598231293776486217">"จัดสรรแล้ว"</item>
+    <item msgid="3720547957514534185">"ไม่บังคับ"</item>
+    <item msgid="1264673582354896949">"อยู่ในระหว่างดำเนินการ"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-ur/strings.xml b/testapps/TestServerApp/app/src/main/res/values-ur/strings.xml
new file mode 100644
index 0000000..5df75a7
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-ur/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"ترتیبات"</string>
+    <string name="server_running" msgid="2780193626090379172">"سرور چل رہا ہے..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"سرور روکیں"</string>
+    <string name="server_down" msgid="1030249207496490556">"سرور ڈاؤن ہے"</string>
+    <string name="start_server" msgid="3878573341408591975">"سرور شروع کریں"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"غیر فعال ہے"</item>
+    <item msgid="3193389681837907872">"فعال ہے"</item>
+    <item msgid="3124590179479393815">"غیر مطابقت پذیر"</item>
+    <item msgid="1606753456265236910">"فراہمی"</item>
+    <item msgid="3930807209231347454">"شامل ہے"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"فراہم نہیں کیا گا"</item>
+    <item msgid="7598231293776486217">"فراہم کیا گیا"</item>
+    <item msgid="3720547957514534185">"غیر مطلوب"</item>
+    <item msgid="1264673582354896949">"پیشرفت میں ہے"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-vi/strings.xml b/testapps/TestServerApp/app/src/main/res/values-vi/strings.xml
new file mode 100644
index 0000000..78bd3d8
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-vi/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Cài đặt"</string>
+    <string name="server_running" msgid="2780193626090379172">"Máy chủ đang chạy..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"Dừng máy chủ"</string>
+    <string name="server_down" msgid="1030249207496490556">"Máy chủ không hoạt động"</string>
+    <string name="start_server" msgid="3878573341408591975">"Khởi động máy chủ"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Đã tắt"</item>
+    <item msgid="3193389681837907872">"Đã bật"</item>
+    <item msgid="3124590179479393815">"Không tương thích"</item>
+    <item msgid="1606753456265236910">"Đang cung cấp"</item>
+    <item msgid="3930807209231347454">"Đã bao gồm"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Chưa được cung cấp"</item>
+    <item msgid="7598231293776486217">"Đã cung cấp"</item>
+    <item msgid="3720547957514534185">"Không bắt buộc"</item>
+    <item msgid="1264673582354896949">"Đang xử lý"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-zh-rCN/strings.xml b/testapps/TestServerApp/app/src/main/res/values-zh-rCN/strings.xml
new file mode 100644
index 0000000..6e26819
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-zh-rCN/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"设置"</string>
+    <string name="server_running" msgid="2780193626090379172">"服务器正在运行…"</string>
+    <string name="stop_server" msgid="6192029827529013598">"停止服务器"</string>
+    <string name="server_down" msgid="1030249207496490556">"服务器出现故障"</string>
+    <string name="start_server" msgid="3878573341408591975">"启动服务器"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"已停用"</item>
+    <item msgid="3193389681837907872">"已启用"</item>
+    <item msgid="3124590179479393815">"不兼容"</item>
+    <item msgid="1606753456265236910">"正在配置"</item>
+    <item msgid="3930807209231347454">"已包含"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"未配置"</item>
+    <item msgid="7598231293776486217">"已配置"</item>
+    <item msgid="3720547957514534185">"不需要"</item>
+    <item msgid="1264673582354896949">"进行中"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestServerApp/app/src/main/res/values-zu/strings.xml b/testapps/TestServerApp/app/src/main/res/values-zu/strings.xml
new file mode 100644
index 0000000..fbb6262
--- /dev/null
+++ b/testapps/TestServerApp/app/src/main/res/values-zu/strings.xml
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<resources xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+    <string name="app_name" msgid="2894617184221823208">"I-TestServerApp"</string>
+    <string name="action_settings" msgid="1335152369747372374">"Amasethingi"</string>
+    <string name="server_running" msgid="2780193626090379172">"Iseva iyaqhubeka..."</string>
+    <string name="stop_server" msgid="6192029827529013598">"Misa Iseva"</string>
+    <string name="server_down" msgid="1030249207496490556">"Iseva iphansi"</string>
+    <string name="start_server" msgid="3878573341408591975">"Qalisa Iseva"</string>
+  <string-array name="entitlement_status">
+    <item msgid="5560300387618996934">"Kukhutshaziwe"</item>
+    <item msgid="3193389681837907872">"Kunikwe amandla"</item>
+    <item msgid="3124590179479393815">"Ayisebenzisani"</item>
+    <item msgid="1606753456265236910">"Iyahlinzeka"</item>
+    <item msgid="3930807209231347454">"Kuhlanganisiwe"</item>
+  </string-array>
+  <string-array name="provision_status">
+    <item msgid="3486273747926710021">"Akulungiselelwanga"</item>
+    <item msgid="7598231293776486217">"Kulungiselelwe"</item>
+    <item msgid="3720547957514534185">"Akudingekile"</item>
+    <item msgid="1264673582354896949">"Kuyaqhubeka"</item>
+  </string-array>
+</resources>
diff --git a/testapps/TestSliceApp/.idea/.gitignore b/testapps/TestSliceApp/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/testapps/TestSliceApp/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/testapps/TestSliceApp/.idea/compiler.xml b/testapps/TestSliceApp/.idea/compiler.xml
new file mode 100644
index 0000000..fb7f4a8
--- /dev/null
+++ b/testapps/TestSliceApp/.idea/compiler.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <bytecodeTargetLevel target="11" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/testapps/TestSliceApp/.idea/gradle.xml b/testapps/TestSliceApp/.idea/gradle.xml
new file mode 100644
index 0000000..a2d7c21
--- /dev/null
+++ b/testapps/TestSliceApp/.idea/gradle.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="GradleMigrationSettings" migrationVersion="1" />
+  <component name="GradleSettings">
+    <option name="linkedExternalProjectsSettings">
+      <GradleProjectSettings>
+        <option name="testRunner" value="GRADLE" />
+        <option name="distributionType" value="DEFAULT_WRAPPED" />
+        <option name="externalProjectPath" value="$PROJECT_DIR$" />
+        <option name="modules">
+          <set>
+            <option value="$PROJECT_DIR$" />
+            <option value="$PROJECT_DIR$/app" />
+          </set>
+        </option>
+      </GradleProjectSettings>
+    </option>
+  </component>
+</project>
\ No newline at end of file
diff --git a/testapps/TestSliceApp/.idea/misc.xml b/testapps/TestSliceApp/.idea/misc.xml
new file mode 100644
index 0000000..7c85865
--- /dev/null
+++ b/testapps/TestSliceApp/.idea/misc.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ExternalStorageConfigurationManager" enabled="true" />
+  <component name="NullableNotNullManager">
+    <option name="myDefaultNullable" value="androidx.annotation.Nullable" />
+    <option name="myDefaultNotNull" value="androidx.annotation.NonNull" />
+    <option name="myNullables">
+      <value>
+        <list size="15">
+          <item index="0" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NullableDecl" />
+          <item index="1" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
+          <item index="2" class="java.lang.String" itemvalue="androidx.annotation.Nullable" />
+          <item index="3" class="java.lang.String" itemvalue="org.eclipse.jdt.annotation.Nullable" />
+          <item index="4" class="java.lang.String" itemvalue="com.android.annotations.Nullable" />
+          <item index="5" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
+          <item index="6" class="java.lang.String" itemvalue="androidx.annotation.RecentlyNullable" />
+          <item index="7" class="java.lang.String" itemvalue="android.support.annotation.Nullable" />
+          <item index="8" class="java.lang.String" itemvalue="javax.annotation.CheckForNull" />
+          <item index="9" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
+          <item index="10" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.qual.Nullable" />
+          <item index="11" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NullableType" />
+          <item index="12" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NullableDecl" />
+          <item index="13" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NullableType" />
+          <item index="14" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.qual.Nullable" />
+        </list>
+      </value>
+    </option>
+    <option name="myNotNulls">
+      <value>
+        <list size="14">
+          <item index="0" class="java.lang.String" itemvalue="androidx.annotation.RecentlyNonNull" />
+          <item index="1" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.qual.NonNull" />
+          <item index="2" class="java.lang.String" itemvalue="com.android.annotations.NonNull" />
+          <item index="3" class="java.lang.String" itemvalue="androidx.annotation.NonNull" />
+          <item index="4" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NonNullType" />
+          <item index="5" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
+          <item index="6" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NonNullDecl" />
+          <item index="7" class="java.lang.String" itemvalue="android.support.annotation.NonNull" />
+          <item index="8" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
+          <item index="9" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
+          <item index="10" class="java.lang.String" itemvalue="org.eclipse.jdt.annotation.NonNull" />
+          <item index="11" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NonNullDecl" />
+          <item index="12" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NonNullType" />
+          <item index="13" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.qual.NonNull" />
+        </list>
+      </value>
+    </option>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="JDK" project-jdk-type="JavaSDK">
+    <output url="file://$PROJECT_DIR$/build/classes" />
+  </component>
+  <component name="ProjectType">
+    <option name="id" value="Android" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/testapps/TestSliceApp/.idea/vcs.xml b/testapps/TestSliceApp/.idea/vcs.xml
new file mode 100644
index 0000000..498ba99
--- /dev/null
+++ b/testapps/TestSliceApp/.idea/vcs.xml
@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="IssueNavigationConfiguration">
+    <option name="links">
+      <list>
+        <IssueNavigationLink>
+          <option name="issueRegexp" value="\bb/(\d+)(#\w+)?\b" />
+          <option name="linkRegexp" value="https://buganizer.corp.google.com/issues/$1$2" />
+        </IssueNavigationLink>
+        <IssueNavigationLink>
+          <option name="issueRegexp" value="\b(?:BUG=|FIXED=)(\d+)\b" />
+          <option name="linkRegexp" value="https://buganizer.corp.google.com/issues/$1" />
+        </IssueNavigationLink>
+        <IssueNavigationLink>
+          <option name="issueRegexp" value="\b(?:cl/|cr/|OCL=|DIFFBASE=|ROLLBACK_OF=)(\d+)\b" />
+          <option name="linkRegexp" value="https://critique.corp.google.com/$1" />
+        </IssueNavigationLink>
+        <IssueNavigationLink>
+          <option name="issueRegexp" value="\bomg/(\d+)\b" />
+          <option name="linkRegexp" value="https://omg.corp.google.com/$1" />
+        </IssueNavigationLink>
+        <IssueNavigationLink>
+          <option name="issueRegexp" value="\b(?:go/|goto/)([^,.&lt;&gt;()&quot;\s]+(?:[.,][^,.&lt;&gt;()&quot;\s]+)*)" />
+          <option name="linkRegexp" value="https://goto.google.com/$1" />
+        </IssueNavigationLink>
+        <IssueNavigationLink>
+          <option name="issueRegexp" value="\bcs/([^\s]+[\w$])" />
+          <option name="linkRegexp" value="https://cs.corp.google.com/search/?q=$1" />
+        </IssueNavigationLink>
+        <IssueNavigationLink>
+          <option name="issueRegexp" value="(LINT\.IfChange)|(LINT\.ThenChange)" />
+          <option name="linkRegexp" value="https://goto.google.com/ifthisthenthatlint" />
+        </IssueNavigationLink>
+      </list>
+    </option>
+  </component>
+  <component name="VcsDirectoryMappings">
+    <mapping directory="$PROJECT_DIR$/../.." vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/testapps/TestSliceApp/app/src/main/AndroidManifest.xml b/testapps/TestSliceApp/app/src/main/AndroidManifest.xml
index a34c254..53754de 100644
--- a/testapps/TestSliceApp/app/src/main/AndroidManifest.xml
+++ b/testapps/TestSliceApp/app/src/main/AndroidManifest.xml
@@ -4,6 +4,7 @@
 
   <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
   <uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
+  <uses-permission android:name="android.permission.READ_BASIC_PHONE_STATE" />
   <uses-permission android:name="android.permission.INTERNET" />
   <application
       android:allowBackup="true"
diff --git a/testapps/TestSliceApp/app/src/main/java/com/google/android/sample/testsliceapp/PrioritizeLatency.java b/testapps/TestSliceApp/app/src/main/java/com/google/android/sample/testsliceapp/PrioritizeLatency.java
index 45ea666..0f120f4 100644
--- a/testapps/TestSliceApp/app/src/main/java/com/google/android/sample/testsliceapp/PrioritizeLatency.java
+++ b/testapps/TestSliceApp/app/src/main/java/com/google/android/sample/testsliceapp/PrioritizeLatency.java
@@ -15,32 +15,64 @@
  */
 package com.google.android.sample.testsliceapp;
 
+import static android.telephony.TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_IN_PROGRESS;
+import static android.telephony.TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED;
+import static android.telephony.TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_DISABLED;
+import static android.telephony.TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_ERROR;
+import static android.telephony.TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_ENTITLEMENT_CHECK_FAILED;
+import static android.telephony.TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_FEATURE_NOT_SUPPORTED;
+import static android.telephony.TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_NETWORK_NOT_AVAILABLE;
+import static android.telephony.TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_NOT_DEFAULT_DATA_SUBSCRIPTION;
+import static android.telephony.TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_OVERRIDDEN;
+import static android.telephony.TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_PENDING_NETWORK_SETUP;
+import static android.telephony.TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS;
+import static android.telephony.TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED;
+import static android.telephony.TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_TIMEOUT;
+import static android.telephony.TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_USER_CANCELED;
+
+import android.annotation.TargetApi;
+import android.content.Context;
 import android.net.ConnectivityManager;
 import android.net.ConnectivityManager.NetworkCallback;
 import android.net.Network;
 import android.net.NetworkCapabilities;
 import android.net.NetworkRequest;
 import android.os.Bundle;
+import android.telephony.TelephonyManager;
 import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
 import android.widget.Button;
+import android.widget.TextView;
 
 import androidx.fragment.app.Fragment;
 
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.LinkedBlockingQueue;
+import java.util.concurrent.TimeUnit;
+
 /**
  * A simple {@link Fragment} subclass. Use the {@link PrioritizeLatency#newInstance} factory method
  * to create an instance of this fragment.
  */
 public class PrioritizeLatency extends Fragment {
-    Button mRelease, mRequest, mPing;
-    Network mNetwork;
+    Button mPurchase, mNetworkRequestRelease, mPing;
+    TextView mResultTextView;
+    Network mNetwork = null;
     ConnectivityManager mConnectivityManager;
     NetworkCallback mProfileCheckNetworkCallback;
+    TelephonyManager mTelephonyManager;
+    Context mContext;
+    private final ExecutorService mFixedThreadPool = Executors.newFixedThreadPool(3);
+
+    private static final String LOG_TAG = "PrioritizeLatency";
+    private static final int TIMEOUT_FOR_PURCHASE = 5 * 60; // 5 minutes
+
     public PrioritizeLatency() {
-      // Required empty public constructor
+        // Required empty public constructor
     }
 
     /**
@@ -62,7 +94,9 @@
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        mConnectivityManager = getContext().getSystemService(ConnectivityManager.class);
+        mContext = getContext();
+        mConnectivityManager = mContext.getSystemService(ConnectivityManager.class);
+        mTelephonyManager = mContext.getSystemService(TelephonyManager.class);
     }
 
     @Override
@@ -70,56 +104,205 @@
             Bundle savedInstanceState) {
         // Inflate the layout for this fragment
         View view = inflater.inflate(R.layout.fragment_prioritize_latency, container, false);
-        mProfileCheckNetworkCallback =
-                new NetworkCallback() {
-            @Override
-            public void onAvailable(final Network network) {
-                mNetwork = network;
-            }
-        };
-        mRelease = view.findViewById(R.id.releaselatency);
-        mRelease.setOnClickListener(new OnClickListener() {
+        mResultTextView = view.findViewById(R.id.resultTextView);
+
+        mPurchase = view.findViewById(R.id.purchaseButton);
+        mPurchase.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View view) {
-                try {
-                    mConnectivityManager.unregisterNetworkCallback(
-                            mProfileCheckNetworkCallback);
-                } catch (Exception e) {
-                    Log.d("SliceTest", "Exception: " + e);
-                }
+                Log.d(LOG_TAG, "Clicking purchase button");
+                onPurchaseButtonClick();
             }
         });
-        mRequest = view.findViewById(R.id.requestlatency);
-        mRequest.setOnClickListener(new OnClickListener() {
+
+        mNetworkRequestRelease = view.findViewById(R.id.requestReleaseButton);
+        mNetworkRequestRelease.setEnabled(false);
+        mNetworkRequestRelease.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View view) {
-                mProfileCheckNetworkCallback = new NetworkCallback() {
-                    @Override
-                    public void onAvailable(final Network network) {
-                        Log.d("PrioritizeLatency", "onAvailable + " + network);
-                        mNetwork = network;
-                    }
-                };
-                NetworkRequest.Builder builder = new NetworkRequest.Builder();
-                builder.addCapability(NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_LATENCY);
-                mConnectivityManager.requestNetwork(builder.build(), mProfileCheckNetworkCallback);
-                Log.d("PrioritizeLatency", "onClick + " + builder.build());
+                Log.d(LOG_TAG, "Clicking Request/Release Network button");
+                onNetworkRequestReleaseClick();
             }
         });
+
         mPing = view.findViewById(R.id.pinglatency);
+        mPing.setEnabled(false);
         mPing.setOnClickListener(new OnClickListener() {
             @Override
             public void onClick(View view) {
+                Log.d(LOG_TAG, "Clicking Ping button");
                 if (mNetwork != null) {
-                    //mNetwork.
-                    try {
-                        new RequestTask().ping(mNetwork);
-                    } catch (Exception e) {
-                        Log.d("SliceTest", "Exception: " + e);
-                    }
+                    mFixedThreadPool.execute(() -> {
+                        try {
+                            RequestTask requestTask = new RequestTask();
+                            requestTask.ping(mNetwork);
+                            updateResultTextView("Result: Ping is done successfully!");
+                        } catch (Exception e) {
+                            Log.e(LOG_TAG, "Exception at ping: " + e);
+                            updateResultTextView("Result: Got exception with ping!!!");
+                        }
+                    });
                 }
             }
         });
         return view;
     }
+
+    private void onNetworkRequestReleaseClick() {
+        if (mNetwork == null) {
+            mProfileCheckNetworkCallback = new NetworkCallback() {
+                @Override
+                public void onAvailable(final Network network) {
+                    Log.d(LOG_TAG, "onAvailable + " + network);
+                    mNetwork = network;
+                    updateUIOnNetworkAvailable();
+                }
+            };
+            NetworkRequest.Builder builder = new NetworkRequest.Builder();
+            builder.addCapability(NetworkCapabilities.NET_CAPABILITY_PRIORITIZE_LATENCY);
+            mConnectivityManager.requestNetwork(builder.build(),
+                    mProfileCheckNetworkCallback);
+            Log.d(LOG_TAG, "Network Request/Release onClick + " + builder.build());
+            mResultTextView.setText(R.string.network_requested);
+        } else {
+            try {
+                mConnectivityManager.unregisterNetworkCallback(
+                        mProfileCheckNetworkCallback);
+                mNetwork = null;
+                mNetworkRequestRelease.setText(R.string.request_network);
+                mResultTextView.setText(R.string.network_released);
+            } catch (Exception e) {
+                Log.e(LOG_TAG, "Exception when releasing network: " + e);
+                mResultTextView.setText(R.string.network_release_failed);
+            }
+        }
+    }
+
+    @TargetApi(34)
+    private void onPurchaseButtonClick() {
+        try {
+            if (mTelephonyManager.isPremiumCapabilityAvailableForPurchase(
+                    TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY)) {
+                LinkedBlockingQueue<Integer> purchaseRequest = new LinkedBlockingQueue<>(1);
+
+                // Try to purchase the capability
+                mTelephonyManager.purchasePremiumCapability(
+                        TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY,
+                        mFixedThreadPool, purchaseRequest::offer);
+                mResultTextView.setText(R.string.purchase_in_progress);
+
+                mFixedThreadPool.execute(() -> {
+                    try {
+                        Integer result = purchaseRequest.poll(
+                                TIMEOUT_FOR_PURCHASE, TimeUnit.SECONDS);
+                        if (result == null) {
+                            updateResultTextView(R.string.purchase_empty_result);
+                            Log.d(LOG_TAG, "Got null result at purchasePremiumCapability");
+                            return;
+                        }
+
+                        String purchaseResultText = "Result: "
+                                + purchasePremiumResultToText(result.intValue());
+                        updateResultTextView(purchaseResultText);
+                        Log.d(LOG_TAG, purchaseResultText);
+
+                        if (isPremiumCapacityAvailableForUse(result.intValue())) {
+                            updateNetworkRequestReleaseButton(true);
+                        }
+                    } catch (InterruptedException e) {
+                        Log.e(LOG_TAG, "InterruptedException at onPurchaseButtonClick: " + e);
+                        updateResultTextView(R.string.purchase_exception);
+                    }
+                });
+            } else {
+                mResultTextView.setText(R.string.premium_not_available);
+            }
+        } catch (Exception e) {
+            Log.e(LOG_TAG, "Exception when purchasing network premium: " + e);
+            mResultTextView.setText(R.string.purchase_exception);
+        }
+    }
+
+    private void updateNetworkRequestReleaseButton(boolean enabled) {
+        getActivity().runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                mNetworkRequestRelease.setEnabled(enabled);
+            }
+        });
+    }
+
+    private void updateResultTextView(int status) {
+        getActivity().runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                mResultTextView.setText(status);
+            }
+        });
+    }
+
+    private void updateResultTextView(String status) {
+        getActivity().runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                mResultTextView.setText(status);
+            }
+        });
+    }
+
+    private void updateUIOnNetworkAvailable() {
+        getActivity().runOnUiThread(new Runnable() {
+            @Override
+            public void run() {
+                mPing.setEnabled(true);
+                mNetworkRequestRelease.setText(R.string.release_network);
+                mResultTextView.setText(R.string.network_available);
+            }
+        });
+    }
+
+    private String purchasePremiumResultToText(int result) {
+        switch (result) {
+            case PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS:
+                return "Success";
+            case PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED:
+                return "Throttled";
+            case PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED:
+                return "Already purchased";
+            case PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_IN_PROGRESS:
+                return "Already in progress";
+            case PURCHASE_PREMIUM_CAPABILITY_RESULT_OVERRIDDEN:
+                return "Overridden";
+            case PURCHASE_PREMIUM_CAPABILITY_RESULT_USER_CANCELED:
+                return "User canceled";
+            case PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_DISABLED:
+                return "Carrier disabled";
+            case PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_ERROR:
+                return "Carrier error";
+            case PURCHASE_PREMIUM_CAPABILITY_RESULT_TIMEOUT:
+                return "Timeout";
+            case PURCHASE_PREMIUM_CAPABILITY_RESULT_FEATURE_NOT_SUPPORTED:
+                return "Feature not supported";
+            case PURCHASE_PREMIUM_CAPABILITY_RESULT_NETWORK_NOT_AVAILABLE:
+                return "Network not available";
+            case PURCHASE_PREMIUM_CAPABILITY_RESULT_ENTITLEMENT_CHECK_FAILED:
+                return "Entitlement check failed";
+            case PURCHASE_PREMIUM_CAPABILITY_RESULT_NOT_DEFAULT_DATA_SUBSCRIPTION:
+                return "Not default data subscription";
+            case PURCHASE_PREMIUM_CAPABILITY_RESULT_PENDING_NETWORK_SETUP:
+                return "Pending network setup";
+            default:
+                String errorStr = "Unknown purchasing result " + result;
+                Log.e(LOG_TAG, errorStr);
+                return errorStr;
+        }
+    }
+
+    private boolean isPremiumCapacityAvailableForUse(int purchaseResult) {
+        if (purchaseResult == PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS
+                || purchaseResult == PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED) {
+            return true;
+        }
+        return false;
+    }
 }
diff --git a/testapps/TestSliceApp/app/src/main/java/com/google/android/sample/testsliceapp/RequestTask.java b/testapps/TestSliceApp/app/src/main/java/com/google/android/sample/testsliceapp/RequestTask.java
index 3849860..569c066 100644
--- a/testapps/TestSliceApp/app/src/main/java/com/google/android/sample/testsliceapp/RequestTask.java
+++ b/testapps/TestSliceApp/app/src/main/java/com/google/android/sample/testsliceapp/RequestTask.java
@@ -19,11 +19,11 @@
 import android.os.AsyncTask;
 import android.util.Log;
 
-import java.io.BufferedInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.HttpURLConnection;
 import java.net.URL;
+import java.util.Scanner;
 
 class RequestTask extends AsyncTask<Network, Integer, Integer> {
     protected Integer doInBackground(Network... network) {
@@ -35,6 +35,7 @@
         try {
             url = new URL("http://www.google.com");
         } catch (Exception e) {
+            Log.d("SliceTest", "exception: " + e);
         }
         if (url != null) {
             try {
@@ -58,7 +59,8 @@
         try {
             InputStream inputStream = connection.getInputStream();
             Log.d("httpGet", "httpUrl + " + httpUrl);
-            return new BufferedInputStream(inputStream).toString();
+            Scanner scanner = new Scanner(inputStream).useDelimiter("\\A");
+            return scanner.hasNext() ? scanner.next() : "";
         } finally {
             connection.disconnect();
         }
diff --git a/testapps/TestSliceApp/app/src/main/res/layout/activity_main.xml b/testapps/TestSliceApp/app/src/main/res/layout/activity_main.xml
index a723e6f..8a7d991 100644
--- a/testapps/TestSliceApp/app/src/main/res/layout/activity_main.xml
+++ b/testapps/TestSliceApp/app/src/main/res/layout/activity_main.xml
@@ -6,7 +6,6 @@
     android:layout_height="match_parent"
     tools:context=".MainActivity" >
   <androidx.fragment.app.FragmentContainerView
-      xmlns:android="http://schemas.android.com/apk/res/android"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:id="@+id/frameLayoutMainFrag"
diff --git a/testapps/TestSliceApp/app/src/main/res/layout/fragment_c_b_s.xml b/testapps/TestSliceApp/app/src/main/res/layout/fragment_c_b_s.xml
index 5305b53..eff68ac 100644
--- a/testapps/TestSliceApp/app/src/main/res/layout/fragment_c_b_s.xml
+++ b/testapps/TestSliceApp/app/src/main/res/layout/fragment_c_b_s.xml
@@ -17,7 +17,7 @@
       android:id="@+id/textView3"
       android:layout_width="342dp"
       android:layout_height="49dp"
-      android:text="CBS"
+      android:text="@string/cbs_title"
       tools:layout_editor_absoluteX="19dp"
       tools:layout_editor_absoluteY="7dp" />
   <Button
@@ -25,7 +25,7 @@
       android:layout_width="186dp"
       android:layout_height="57dp"
       android:layout_marginTop="164dp"
-      android:text="Request Network"
+      android:text="@string/request_network"
       app:layout_constraintTop_toTopOf="parent"
       tools:layout_editor_absoluteX="112dp" />
   <Button
@@ -33,14 +33,14 @@
       android:layout_width="187dp"
       android:layout_height="61dp"
       android:layout_marginTop="124dp"
-      android:text="Release Network"
+      android:text="@string/release_network"
       app:layout_constraintTop_toBottomOf="@+id/requestcbs"
       tools:layout_editor_absoluteX="119dp" />
   <Button
       android:id="@+id/pingcbs"
       android:layout_width="186dp"
       android:layout_height="55dp"
-      android:text="Ping"
+      android:text="@string/ping"
       app:layout_constraintBottom_toBottomOf="parent"
       app:layout_constraintTop_toBottomOf="@+id/releasecbs"
       tools:layout_editor_absoluteX="120dp" />
diff --git a/testapps/TestSliceApp/app/src/main/res/layout/fragment_main.xml b/testapps/TestSliceApp/app/src/main/res/layout/fragment_main.xml
index 11e95a8..5c12075 100644
--- a/testapps/TestSliceApp/app/src/main/res/layout/fragment_main.xml
+++ b/testapps/TestSliceApp/app/src/main/res/layout/fragment_main.xml
@@ -5,18 +5,17 @@
     android:layout_height="match_parent"
     tools:context=".MainFragment">
 
-  <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+  <androidx.constraintlayout.widget.ConstraintLayout
       xmlns:app="http://schemas.android.com/apk/res-auto"
-      xmlns:tools="http://schemas.android.com/tools"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:id="@+id/frameLayoutMain"
       tools:context=".MainActivity">
     <Button
         android:id="@+id/cbs"
-        android:layout_width="222dp"
-        android:layout_height="51dp"
-        android:text="CBS"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/cbs_title"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintHorizontal_bias="0.493"
@@ -25,9 +24,9 @@
         app:layout_constraintVertical_bias="0.751" />
     <Button
         android:id="@+id/latency"
-        android:layout_width="222dp"
-        android:layout_height="46dp"
-        android:text="PRIORITIZE LATENCY"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="@string/latency_title"
         app:layout_constraintBottom_toTopOf="@+id/cbs"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintHorizontal_bias="0.497"
@@ -38,7 +37,7 @@
         android:id="@+id/bw"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:text="PRIORITIZE BANDWIDTH"
+        android:text="@string/bw_title"
         app:layout_constraintBottom_toTopOf="@+id/latency"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintHorizontal_bias="0.497"
diff --git a/testapps/TestSliceApp/app/src/main/res/layout/fragment_prioritize_bandwidth.xml b/testapps/TestSliceApp/app/src/main/res/layout/fragment_prioritize_bandwidth.xml
index 8933e7a..412ec39 100644
--- a/testapps/TestSliceApp/app/src/main/res/layout/fragment_prioritize_bandwidth.xml
+++ b/testapps/TestSliceApp/app/src/main/res/layout/fragment_prioritize_bandwidth.xml
@@ -8,9 +8,7 @@
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:id="@+id/frameLayoutBW">
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:app="http://schemas.android.com/apk/res-auto"
-    xmlns:tools="http://schemas.android.com/tools"
+<androidx.constraintlayout.widget.ConstraintLayout
     android:id="@+id/frameLayout2"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
@@ -19,7 +17,7 @@
       android:id="@+id/textView2"
       android:layout_width="371dp"
       android:layout_height="52dp"
-      android:text="Prioritize Bandwidth"
+      android:text="@string/bw_title"
       tools:layout_editor_absoluteX="20dp"
       tools:layout_editor_absoluteY="4dp" />
   <Button
@@ -27,7 +25,7 @@
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_marginBottom="64dp"
-      android:text="Release Network"
+      android:text="@string/release_network"
       app:layout_constraintBottom_toTopOf="@+id/requestbw"
       app:layout_constraintEnd_toEndOf="parent"
       app:layout_constraintStart_toStartOf="parent"
@@ -38,7 +36,7 @@
       android:layout_width="182dp"
       android:layout_height="42dp"
       android:layout_marginBottom="228dp"
-      android:text="Ping"
+      android:text="@string/ping"
       app:layout_constraintBottom_toBottomOf="parent"
       app:layout_constraintEnd_toEndOf="parent"
       app:layout_constraintHorizontal_bias="0.493"
@@ -48,7 +46,7 @@
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_marginTop="308dp"
-      android:text="RequestNetwork"
+      android:text="@string/request_network"
       app:layout_constraintBottom_toTopOf="@+id/pingbw"
       app:layout_constraintEnd_toEndOf="parent"
       app:layout_constraintHorizontal_bias="0.495"
diff --git a/testapps/TestSliceApp/app/src/main/res/layout/fragment_prioritize_latency.xml b/testapps/TestSliceApp/app/src/main/res/layout/fragment_prioritize_latency.xml
index b040995..37a519f 100644
--- a/testapps/TestSliceApp/app/src/main/res/layout/fragment_prioritize_latency.xml
+++ b/testapps/TestSliceApp/app/src/main/res/layout/fragment_prioritize_latency.xml
@@ -14,44 +14,52 @@
         android:layout_height="match_parent"
         tools:context=".PrioritizeLatency">
       <Button
-          android:id="@+id/requestlatency"
-          android:layout_width="183dp"
+          android:id="@+id/purchaseButton"
+          android:layout_width="233dp"
           android:layout_height="50dp"
           android:layout_marginTop="176dp"
-          android:text="RequestNetwork"
-          app:layout_constraintBottom_toTopOf="@+id/button6"
+          android:text="@string/purchase"
           app:layout_constraintEnd_toEndOf="parent"
           app:layout_constraintHorizontal_bias="0.495"
           app:layout_constraintStart_toStartOf="parent"
           app:layout_constraintTop_toTopOf="parent"
           app:layout_constraintVertical_bias="0.717" />
       <Button
-          android:id="@+id/releaselatency"
+          android:id="@+id/requestReleaseButton"
           android:layout_width="183dp"
           android:layout_height="50dp"
           android:layout_marginTop="84dp"
-          android:text="ReleaseNetwork"
-          app:layout_constraintBottom_toTopOf="@+id/button6"
+          android:text="@string/request_network"
           app:layout_constraintEnd_toEndOf="parent"
           app:layout_constraintStart_toStartOf="parent"
-          app:layout_constraintTop_toBottomOf="@+id/requestlatency"
+          app:layout_constraintTop_toBottomOf="@+id/purchaseButton"
           app:layout_constraintVertical_bias="0.717" />
       <Button
           android:id="@+id/pinglatency"
           android:layout_width="182dp"
           android:layout_height="42dp"
           android:layout_marginBottom="92dp"
-          android:text="Ping"
+          android:text="@string/ping"
           app:layout_constraintBottom_toBottomOf="parent"
           app:layout_constraintEnd_toEndOf="parent"
           app:layout_constraintHorizontal_bias="0.493"
           app:layout_constraintStart_toStartOf="parent"
-          app:layout_constraintTop_toBottomOf="@+id/releaselatency" />
+          app:layout_constraintTop_toBottomOf="@+id/requestReleaseButton" />
+      <TextView
+          android:id="@+id/resultTextView"
+          android:layout_width="283dp"
+          android:layout_height="wrap_content"
+          android:layout_marginTop="84dp"
+          android:text="@string/result_prefix"
+          app:layout_constraintEnd_toEndOf="parent"
+          app:layout_constraintStart_toStartOf="parent"
+          app:layout_constraintTop_toBottomOf="@+id/pinglatency"
+          app:layout_constraintVertical_bias="0.717" />
       <TextView
           android:id="@+id/textView"
           android:layout_width="371dp"
           android:layout_height="52dp"
-          android:text="Prioritize Latency"
+          android:text="@string/latency_title"
           tools:layout_editor_absoluteX="16dp"
           tools:layout_editor_absoluteY="16dp" />
     </androidx.constraintlayout.widget.ConstraintLayout>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-af/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-af/strings.xml
index d172f0f..5e2a27f 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-af/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-af/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hallo leë fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Versoek netwerk"</string>
+    <string name="release_network" msgid="174252378593535238">"Stel netwerk vry"</string>
+    <string name="ping" msgid="7890607576220714932">"Pieng"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Resultaat:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Prioritiseer traagheid"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Prioritiseer bandwydte"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Koop netwerkpremium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Resultaat: Die netwerk wat versoek is, is nou beskikbaar!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Resultaat: Die netwerk is versoek!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Resultaat: Die netwerk is vrygestel!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Resultaat: Kon nie die netwerk vrystel nie!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Resultaat: Uitsondering wanneer netwerkpremium gekoop word!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Resultaat: Het leë resultaat gekry toe netwerkpremium gekoop is!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Resultaat: Die netwerkpremium kan nie gekoop word nie!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Resultaat: Die netwerkpremium word tans gekoop …"</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-am/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-am/strings.xml
index 229ff5d..ff5e8fa 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-am/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-am/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"አውታረ መረብ ይጠይቁ"</string>
+    <string name="release_network" msgid="174252378593535238">"አውታረ መረብ ይልቀቁ"</string>
+    <string name="ping" msgid="7890607576220714932">"ፒንግ"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"ውጤት፦"</string>
+    <string name="latency_title" msgid="963052613947017009">"ለስርዓተ ምላሽ ጊዜ ቅድሚያ ይስጡ"</string>
+    <string name="bw_title" msgid="3902162973688221344">"ለመተላለፊያ ይዘት ቅድሚያ ይስጡ"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"የአውታረ መረብ Premiumን ይግዙ"</string>
+    <string name="network_available" msgid="4780293262690730734">"ውጤት፦ የተጠየቀው አውታረ መረብ አሁን ይገኛል!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"ውጤት፦ አውታረ መረቡ ተጠይቋል!"</string>
+    <string name="network_released" msgid="2992280481133877025">"ውጤት፦ አውታረ መረቡ ተለቅቋል!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"ውጤት፦ አውታረ መረቡን መልቀቅ አልተሳካም!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"ውጤት፦የአውታረ መረብ premium በሚገዛበት ጊዜ ያለ ለየት ያለ!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"ውጤት፦የአውታረ መረብ premium በሚገዛበት ጊዜ ባዶ ውጤት ተገኝቷል!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"ውጤት፦የአውታረ መረቡ premium ለግዢ አይገኝም!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"ውጤት፦ የአውታረ መረብ premium ግዢ በሂደት ላይ ነው ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-ar/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-ar/strings.xml
index 0cadb81..25fa479 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-ar/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-ar/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"جزء فارغ للترحيب"</string>
+    <string name="request_network" msgid="8945235490804849914">"طلب الشبكة"</string>
+    <string name="release_network" msgid="174252378593535238">"إطلاق الإصدار"</string>
+    <string name="ping" msgid="7890607576220714932">"فحص الاتصال"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"النتيجة:"</string>
+    <string name="latency_title" msgid="963052613947017009">"منح الأولوية لوقت الاستجابة"</string>
+    <string name="bw_title" msgid="3902162973688221344">"منح الأولوية لمعدّل نقل البيانات"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"شراء الاشتراك المميّز في الشبكة"</string>
+    <string name="network_available" msgid="4780293262690730734">"النتيجة: الشبكة المطلوبة متاحة الآن."</string>
+    <string name="network_requested" msgid="5646123922691865991">"النتيجة: تم طلب الشبكة."</string>
+    <string name="network_released" msgid="2992280481133877025">"النتيجة: تم إطلاق الشبكة."</string>
+    <string name="network_release_failed" msgid="256471231420029151">"النتيجة: تعذَّر إطلاق الشبكة."</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"النتيجة: حدث استثناء عند شراء اشتراك مميّز في الشبكة."</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"النتيجة: لقد حصلْت على نتيجة فارغة عند شراء اشتراك مميّز في الشبكة."</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"النتيجة: لا تتوفّر إمكانية شراء الاشتراك المميّز في الشبكة."</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"النتيجة: عملية شراء الاشتراك المميّز في الشبكة جارية ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-as/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-as/strings.xml
index 229ff5d..350d8dd 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-as/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-as/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"নেটৱৰ্কৰ বাবে অনুৰোধ কৰক"</string>
+    <string name="release_network" msgid="174252378593535238">"নেটৱৰ্ক মুকলি কৰক"</string>
+    <string name="ping" msgid="7890607576220714932">"পিং"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"ফলাফল:"</string>
+    <string name="latency_title" msgid="963052613947017009">"বিলম্বতাক অগ্ৰাধিকাৰ দিয়ক"</string>
+    <string name="bw_title" msgid="3902162973688221344">"বেণ্ডৱিথক অগ্ৰাধিকাৰ দিয়ক"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"নেটৱৰ্ক প্ৰিমিয়াম ক্ৰয় কৰক"</string>
+    <string name="network_available" msgid="4780293262690730734">"ফলাফল: অনুৰোধ কৰা নেটৱৰ্কটো বৰ্তমান উপলব্ধ নহয়!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"ফলাফল: নেটৱৰ্কটোৰ বাবে অনুৰোধ কৰা হৈছে!"</string>
+    <string name="network_released" msgid="2992280481133877025">"ফলাফল: নেটৱৰ্কটো মুকলি কৰি দিয়া হৈছে!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"ফলাফল: নেটৱৰ্কটো মুকলি কৰি দিয়াত বিফল হৈছে!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"ফলাফল: নেটৱৰ্ক প্ৰিমিয়াম ক্ৰয় কৰাৰ সময়ত ব্যতিক্ৰম!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"ফলাফল: নেটৱৰ্ক প্ৰিমিয়াম ক্ৰয় কৰাৰ সময়ত খালী ফলাফল পোৱা গৈছে!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"ফলাফল: ক্ৰয় কৰিবলৈ নেটৱৰ্ক প্ৰিমিয়াম উপলব্ধ নহয়!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"ফলাফল: নেটৱৰ্ক প্ৰিমিয়াম ক্ৰয় কৰাৰ প্ৰক্ৰিয়া চলি আছে ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-az/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-az/strings.xml
index 3702d56..8d09fb9 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-az/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-az/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Boş salamlama fraqmenti"</string>
+    <string name="request_network" msgid="8945235490804849914">"Şəbəkə sorğusu göndərin"</string>
+    <string name="release_network" msgid="174252378593535238">"Şəbəkə ilə əlaqəni kəsin"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Nəticə:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Gecikməni prioritetləşdirin"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Ötürmə sürətini prioritetləşdirin"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Premium şəbəkə satın alın"</string>
+    <string name="network_available" msgid="4780293262690730734">"Nəticə: Tələb olunan şəbəkə indi əlçatandır!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Nəticə: Şəbəkə sorğusu göndərildi!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Nəticə: Şəbəkə ilə əlaqə kəsildi!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Nəticə: Şəbəkə ilə əlaqəni kəsmək alınmadı!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Nəticə: Premium şəbəkə satın alan zaman istisna baş verdi!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Nəticə: Premium şəbəkə satın alan zaman boş nəticə əldə edildi!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Nəticə: Premium şəbəkə satın almaq mümkün deyil!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Nəticə: Premium şəbəkə satın almaq prosesi davam edir ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-b+sr+Latn/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-b+sr+Latn/strings.xml
index 229ff5d..2ca99d3 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-b+sr+Latn/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-b+sr+Latn/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Zatražite mrežu"</string>
+    <string name="release_network" msgid="174252378593535238">"Objavite mrežu"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Rezultat:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Dajte prioritet kašnjenju"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Dajte prioritet propusnom opsegu"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Kupite Premium mrežu"</string>
+    <string name="network_available" msgid="4780293262690730734">"Rezultat: Zahtevana mreža je trenutno dostupna!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Rezultat: Mreža je zatražena!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Rezultat: Mreža je objavljena!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Rezultat: Objavljivanje mreže nije uspelo!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Rezultat: Izuzetak pri kupovini Premium mreže!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Rezultat: Rezultat je prazan kada kupujete Premium mrežu!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Rezultat: Premium mreža nije dostupna za kupovinu!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Rezultat: Kupovina Premium mreže je u toku..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-be/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-be/strings.xml
index 385f84e..4b8a613 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-be/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-be/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Вітаем,"</string>
+    <string name="request_network" msgid="8945235490804849914">"Запытаць сетку"</string>
+    <string name="release_network" msgid="174252378593535238">"Вызваліць сетку"</string>
+    <string name="ping" msgid="7890607576220714932">"Пінг"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Вынік:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Аддаванне прыярытэту затрымцы"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Аддаванне прыярытэту паласе прапускання"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Купіць прэміяльную падпіску на выкарыстанне сеткі"</string>
+    <string name="network_available" msgid="4780293262690730734">"Вынік: запытаная сетка даступная!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Вынік: сетка запытана!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Вынік: сетка вызвалена!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Вынік: не ўдалося вызваліць сетку!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Вынік: пры спробе купіць прэміяльную падпіску на выкарыстанне сеткі ўзнікла выключэнне!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Вынік: пры спробе купіць прэміяльную падпіску на выкарыстанне сеткі атрыманы пусты вынік!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Вынік: прэміяльная падпіска на выкарыстанне сеткі недаступная для куплі!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Вынік: выконваецца купля прэміяльнай падпіскі на выкарыстанне сеткі..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-bg/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-bg/strings.xml
index 943a70d..b2951f9 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-bg/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-bg/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Здравей, празен фрагмент"</string>
+    <string name="request_network" msgid="8945235490804849914">"Заявка за мрежа"</string>
+    <string name="release_network" msgid="174252378593535238">"Освобождаване на мрежата"</string>
+    <string name="ping" msgid="7890607576220714932">"Команда ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Резултат:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Даване на приоритет на забавянето"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Даване на приоритет на пропускателната способност"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Купете Network Premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Резултат: Заявената мрежа е достъпна сега!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Резултат: Мрежата е заявена!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Резултат: Мрежата е освободена!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Резултат: Мрежата не бе освободена!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Резултат: Изключение при покупка на Network Premium!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Резултат: При покупката на Network Premium получихте празен резултат."</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Резултат: Network Premium не е налице за покупка!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Резултат: Network Premium се купува..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-bn/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-bn/strings.xml
index 229ff5d..5280d16 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-bn/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-bn/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Network সংক্রান্ত অনুরোধ করুন"</string>
+    <string name="release_network" msgid="174252378593535238">"Network রিলিজ করুন"</string>
+    <string name="ping" msgid="7890607576220714932">"পিং"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"ফলাফল:"</string>
+    <string name="latency_title" msgid="963052613947017009">"লেটেন্সিকে অগ্রাধিকার দিন"</string>
+    <string name="bw_title" msgid="3902162973688221344">"ব্যান্ডউইথকে অগ্রাধিকার দিন"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Network Premium কিনুন"</string>
+    <string name="network_available" msgid="4780293262690730734">"ফলাফল: অনুরোধ করা নেটওয়ার্ক এখন উপলভ্য আছে!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"ফলাফল: নেটওয়ার্কের জন্য অনুরোধ জানানো হয়েছে!"</string>
+    <string name="network_released" msgid="2992280481133877025">"ফলাফলt: নেটওয়ার্ক রিলিজ করা হয়েছে!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"ফলাফল: নেটওয়ার্ক রিলিজ করা যায়নি!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"ফলাফল: Network Premium কেনার সময় ব্যতিক্রম!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"ফলাফল: Network Premium কেনার সময় কোনও ফলাফল পাওয়া যায়নি!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"ফলাফল: Network Premium কেনার জন্য উপলভ্য নেই!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"ফলাফল: Network Premium কেনার প্রক্রিয়া চলছে ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-bs/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-bs/strings.xml
index 229ff5d..e2ea203 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-bs/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-bs/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Zatraži mrežu"</string>
+    <string name="release_network" msgid="174252378593535238">"Otključaj mrežu"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Rezultat:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Dodijeli prioritet latentnosti"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Dodijeli prioritet propusnosti"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Kupite premium verziju mreže"</string>
+    <string name="network_available" msgid="4780293262690730734">"Rezultat: zatražena mreža je sada dostupna."</string>
+    <string name="network_requested" msgid="5646123922691865991">"Rezultat: mreža je zatražena."</string>
+    <string name="network_released" msgid="2992280481133877025">"Rezultat: mreža je otključana."</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Rezultat: otključavanje mreže nije uspjelo."</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Rezultat: izuzetak prilikom kupovine premium verzije mreže."</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Rezultat: dobijen je prazan rezultat prilikom kupovine premium verzije mreže."</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Rezultat: premium verzija mreže nije dostupna za kupovinu."</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Rezultat: kupovina premium verzije mreže je u toku…"</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-ca/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-ca/strings.xml
index 9799d39..05529e3 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-ca/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-ca/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Fragment de benvinguda en blanc"</string>
+    <string name="request_network" msgid="8945235490804849914">"Sol·licita la xarxa"</string>
+    <string name="release_network" msgid="174252378593535238">"Allibera la xarxa"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Resultat:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Prioritza la latència"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Prioritza l\'amplada de banda"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Compra la xarxa prèmium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Resultat: la xarxa sol·licitada ja està disponible."</string>
+    <string name="network_requested" msgid="5646123922691865991">"Resultat: s\'ha sol·licitat la xarxa."</string>
+    <string name="network_released" msgid="2992280481133877025">"Resultat: s\'ha alliberat la xarxa."</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Resultat: no s\'ha pogut alliberar la xarxa."</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Resultat: s\'ha produït una excepció en comprar la xarxa prèmium."</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Resultat: s\'ha obtingut un resultat buit en comprar la xarxa prèmium."</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Resultat: la xarxa prèmium no es pot comprar."</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Resultat: la compra de la xarxa prèmium està en curs..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-cs/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-cs/strings.xml
index 793ab6f..d25f77d 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-cs/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-cs/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Prázdný fragment pro pozdrav"</string>
+    <string name="request_network" msgid="8945235490804849914">"Odeslat požadavek na síť"</string>
+    <string name="release_network" msgid="174252378593535238">"Uvolnit síť"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Výsledek:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Upřednostnit latenci"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Upřednostnit rychlost připojení"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Pořiďte si bonus k síti"</string>
+    <string name="network_available" msgid="4780293262690730734">"Výsledek: Požadovaná síť je teď dostupná."</string>
+    <string name="network_requested" msgid="5646123922691865991">"Výsledek: Byl odeslán požadavek na síť."</string>
+    <string name="network_released" msgid="2992280481133877025">"Výsledek: Síť byla uvolněna."</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Výsledek: Síť se nepodařilo uvolnit."</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Výsledek: Výjimka při nákupu bonusu k síti."</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Výsledek: Při nákupu bonusu k síti se vrátil prázdný výsledek."</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Výsledek: Bonus k síti není k prodeji."</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Výsledek: Probíhá nákup bonusu k síti…"</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-da/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-da/strings.xml
index 229ff5d..6e074c2 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-da/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-da/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Anmod om tv-kanal"</string>
+    <string name="release_network" msgid="174252378593535238">"Udgiv tv-kanal"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Resultat:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Prioriter forsinkelse"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Prioriter båndbredde"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Køb Network Premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Resultat: Den tv-kanal, der blev anmodet om, er tilgængelig nu!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Resultat: Der blev anmodet om tv-kanalen!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Resultat: Tv-kanalen er blevet udgivet!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Resultat: Tv-kanalen kunne ikke udgives!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Resultat: Undtagen, når du køber Network Premium!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Resultat: Der blev vist et tomt resultat ved køb af Network Premium!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Resultat: Network Premium kan ikke købes!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Resultat: Købet af Network Premium er i gang…"</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-de/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-de/strings.xml
index 229ff5d..4ff4b5f 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-de/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-de/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Netzwerk anfragen"</string>
+    <string name="release_network" msgid="174252378593535238">"Netzwerk freigeben"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Ergebnis:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Latenz priorisieren"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Bandbreite priorisieren"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Premium-Netzwerk erwerben"</string>
+    <string name="network_available" msgid="4780293262690730734">"Ergebnis: Das gewünschte Netzwerk ist jetzt verfügbar."</string>
+    <string name="network_requested" msgid="5646123922691865991">"Ergebnis: Das Netzwerk wurde angefordert."</string>
+    <string name="network_released" msgid="2992280481133877025">"Ergebnis: Das Netzwerk wurde freigegeben."</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Ergebnis: Netzwerk konnte nicht freigegeben werden."</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Ergebnis: Ausnahme beim Kauf des Premium-Netzwerks."</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Ergebnis: Beim Kauf des Premium-Netzwerks wurde ein leeres Ergebnis zurückgegeben."</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Ergebnis: Premium-Netzwerk kann nicht erworben werden."</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Ergebnis: Der Kauf des Premium-Netzwerks läuft..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-el/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-el/strings.xml
index 229ff5d..0d39d8b 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-el/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-el/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Υποβολή αιτήματος για δίκτυο"</string>
+    <string name="release_network" msgid="174252378593535238">"Κυκλοφορία δικτύου"</string>
+    <string name="ping" msgid="7890607576220714932">"Εφαρμογή Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Αποτέλεσμα:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Προτεραιότητα λανθάνοντος χρόνου"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Προτεραιότητα εύρους ζώνης"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Αγορά επιπλέον χρέωσης δικτύου"</string>
+    <string name="network_available" msgid="4780293262690730734">"Αποτέλεσμα: Το δίκτυο που ζητήθηκε είναι πλέον διαθέσιμο!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Αποτέλεσμα: Υποβλήθηκε αίτημα για το δίκτυο!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Αποτέλεσμα: Το δίκτυο κυκλοφόρησε!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Αποτέλεσμα: Αποτυχία κυκλοφορίας του δικτύου!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Αποτέλεσμα: Εξαίρεση κατά την αγορά δικτύου με επιπλέον χρέωση!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Αποτέλεσμα: Εμφανίστηκε κενό αποτέλεσμα κατά την αγορά δικτύου με επιπλέον χρέωση!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Αποτέλεσμα: Η επιπλέον χρέωση του δικτύου δεν είναι διαθέσιμη για αγορά!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Αποτέλεσμα: Η αγορά δικτύου με επιπλέον χρέωση βρίσκεται σε εξέλιξη …"</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-en-rAU/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-en-rAU/strings.xml
index 229ff5d..fbb98d6 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-en-rAU/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-en-rAU/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Request network"</string>
+    <string name="release_network" msgid="174252378593535238">"Release network"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Result:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Prioritise latency"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Prioritise bandwidth"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Purchase network premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Result: The requested network is available now!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Result: The network has been requested!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Result: The network has been released!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Result: Failed to release the network!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Result: Exception when purchasing network premium!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Result: Got empty result when purchasing network premium!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Result: The network premium is not available for purchase!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Result: The network premium purchase is in progress..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-en-rCA/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-en-rCA/strings.xml
index 229ff5d..a5c81f6 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-en-rCA/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-en-rCA/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Request Network"</string>
+    <string name="release_network" msgid="174252378593535238">"Release Network"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Result:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Prioritize Latency"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Prioritize Bandwidth"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Purchase Network Premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Result: The requested network is available now!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Result: The network has been requested!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Result: The network has been released!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Result: Failed to release the network!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Result: Exception when purchasing network premium!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Result: Got empty result when purchasing network premium!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Result: The network premium is not available for purchase!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Result: The network premium purchase is in progress ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-en-rGB/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-en-rGB/strings.xml
index 229ff5d..fbb98d6 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-en-rGB/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-en-rGB/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Request network"</string>
+    <string name="release_network" msgid="174252378593535238">"Release network"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Result:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Prioritise latency"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Prioritise bandwidth"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Purchase network premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Result: The requested network is available now!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Result: The network has been requested!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Result: The network has been released!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Result: Failed to release the network!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Result: Exception when purchasing network premium!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Result: Got empty result when purchasing network premium!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Result: The network premium is not available for purchase!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Result: The network premium purchase is in progress..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-en-rIN/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-en-rIN/strings.xml
index 229ff5d..fbb98d6 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-en-rIN/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-en-rIN/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Request network"</string>
+    <string name="release_network" msgid="174252378593535238">"Release network"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Result:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Prioritise latency"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Prioritise bandwidth"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Purchase network premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Result: The requested network is available now!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Result: The network has been requested!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Result: The network has been released!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Result: Failed to release the network!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Result: Exception when purchasing network premium!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Result: Got empty result when purchasing network premium!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Result: The network premium is not available for purchase!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Result: The network premium purchase is in progress..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-en-rXC/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-en-rXC/strings.xml
index dafc7d2..a24b28a 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-en-rXC/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-en-rXC/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‎‏‏‎‎‎‏‏‎‎‎‏‏‏‏‏‏‎‎‏‎‎‎‎‏‏‏‎‎‏‏‎‏‏‎‏‏‎‎‏‏‎‏‏‏‎‏‏‎‏‏‎‏‎‎‏‎‎‎‏‎‏‎‎TestSliceApp‎‏‎‎‏‎"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‎‏‏‎‎‎‏‎‏‎‎‎‏‏‏‎‏‏‏‎‏‏‎‎‎‎‏‎‎‏‎‎‏‎‎‎‎‎‏‎‏‏‎‏‏‏‎‏‎‏‎‎‏‏‏‎‎‏‎‎‏‏‏‎Hello blank fragment‎‏‎‎‏‎"</string>
+    <string name="request_network" msgid="8945235490804849914">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‏‎‎‎‎‏‎‎‎‏‏‏‏‎‏‏‏‎‎‎‏‎‎‏‎‎‎‏‏‏‏‎‏‎‏‏‎‏‎‎‎‏‏‏‏‎‏‏‏‎‎‏‏‏‏‏‎‏‎‎Request Network‎‏‎‎‏‎"</string>
+    <string name="release_network" msgid="174252378593535238">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‎‏‎‏‎‎‏‏‎‏‎‏‏‎‎‎‏‎‎‎‏‏‎‎‏‏‏‎‏‎‏‏‏‎‏‏‏‎‏‎‏‎‏‎‏‏‎‏‎‎‏‎‏‎‎‎‎‎‏‏‎‎Release Network‎‏‎‎‏‎"</string>
+    <string name="ping" msgid="7890607576220714932">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‏‏‎‎‎‎‎‎‏‎‎‎‏‎‎‎‏‏‏‎‎‏‎‎‎‏‏‎‎‏‎‏‎‏‎‏‎‎‏‎‎‎‏‎‎‎‏‏‏‏‎‏‏‎‏‎‎‎Ping‎‏‎‎‏‎"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‎‏‏‎‎‎‎‏‏‏‎‎‎‏‏‎‏‏‏‏‏‎‎‎‏‏‏‎‏‏‏‏‎‎‎‏‏‎‎‎‎‎‏‏‏‎‎‏‎‏‎‏‎‏‏‎‏‎‏‎‏‏‏‎Result:‎‏‎‎‏‎"</string>
+    <string name="latency_title" msgid="963052613947017009">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‎‎‏‏‎‏‎‏‎‏‏‏‎‏‎‏‏‏‎‎‏‏‎‎‏‏‏‏‏‏‏‏‏‏‏‎‏‎‎‏‎‏‎‎‏‎‏‏‎‎‎‏‏‏‎‎‏‏‎‎‎‏‎Prioritize Latency‎‏‎‎‏‎"</string>
+    <string name="bw_title" msgid="3902162973688221344">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‎‏‏‎‏‏‎‎‎‏‎‎‏‏‏‎‏‎‎‎‏‎‎‏‎‎‎‏‏‎‎‏‏‎‎‏‏‏‎‎‏‎‏‏‏‏‎‎‏‎‎‏‏‏‎‏‎‏‎‎‎‎‎‎Prioritize Bandwidth‎‏‎‎‏‎"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‎‏‎‎‎‏‎‏‎‎‏‎‎‎‏‎‏‏‏‎‎‏‎‏‎‎‏‏‎‎‎‏‎‎‏‎‏‎‎‏‏‎‏‎‏‎‏‎‎‏‏‎‎‏‏‏‏‎‎‎‎‎CBS‎‏‎‎‏‎"</string>
+    <string name="purchase" msgid="7843181995697372128">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‏‏‎‎‎‏‎‎‏‎‏‎‎‎‏‏‏‏‎‎‎‎‏‎‏‏‎‏‎‎‏‎‎‎‏‏‏‏‏‏‏‏‎‏‏‏‏‏‎‎‎‎‎‎Purchase Network Premium‎‏‎‎‏‎"</string>
+    <string name="network_available" msgid="4780293262690730734">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‎‎‎‏‎‎‏‎‏‎‏‏‏‎‎‎‎‎‎‏‏‎‏‏‎‎‏‎‏‎‎‏‏‎‏‎‎‏‏‎‏‏‏‏‏‏‏‎‎‎‎‏‎‏‏‏‎‏‏‏‎‎Result: The requested network is available now!‎‏‎‎‏‎"</string>
+    <string name="network_requested" msgid="5646123922691865991">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‎‏‏‏‎‎‏‎‏‏‎‏‏‎‎‎‎‏‏‏‏‏‏‎‎‏‎‏‏‎‎‎‏‎‎‎‏‏‏‏‎‎‎‏‎‎‎‏‏‏‏‎‏‏‎‎‎‎‏‏‏‎Result: The network has been requested!‎‏‎‎‏‎"</string>
+    <string name="network_released" msgid="2992280481133877025">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‎‏‎‏‎‎‏‏‎‎‎‎‏‏‎‏‎‏‏‎‏‏‏‎‎‏‏‏‏‏‎‎‏‏‎‏‎‏‎‎‏‎‏‎‎‎‏‏‏‎‏‎‏‏‏‎‎‏‎‎‎‎‏‎Result: The network has been released!‎‏‎‎‏‎"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‎‏‎‏‏‏‎‎‎‏‏‏‏‎‎‏‎‏‎‏‏‎‎‏‏‏‎‎‏‏‏‏‎‎‎‏‏‏‏‏‎‎‏‎‏‏‏‎‏‏‎‎‎‏‏‎‏‏‏‏‏‎Result: Failed to release the network!!!‎‏‎‎‏‎"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‏‏‎‏‏‎‎‏‏‎‎‎‎‏‏‎‏‏‏‏‏‏‏‏‏‎‏‏‏‏‎‎‏‏‎‎‎‏‎‎‎‎‎‎‎‎‏‏‎‏‎‏‏‎‎‏‏‏‏‏‏‎Result: Exception when purchasing network premium!!!‎‏‎‎‏‎"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‎‏‎‎‎‎‎‎‎‏‏‎‏‏‎‎‏‏‏‏‏‎‏‏‎‎‎‎‎‏‎‎‎‏‎‏‏‏‎‏‎‎‎‎‎‏‎‎‎‎‏‏‎‏‎‏‎‏‎‎‎‎Result: Got empty result when purchasing network premium!!!‎‏‎‎‏‎"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‏‎‎‏‎‏‏‏‏‏‎‎‏‏‏‎‎‎‏‎‏‏‎‏‏‎‎‏‏‏‎‏‏‏‏‏‏‏‎‎‏‎‏‎‎‎‎‎‏‏‎‏‎‏‎‎‎‎‏‏‎‎‎Result: The network premium is not available for purchase!!!‎‏‎‎‏‎"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"‎‏‎‎‎‎‎‏‎‏‏‏‎‎‎‎‎‎‏‎‎‏‎‎‎‎‎‏‏‏‏‏‏‏‎‎‏‎‏‏‏‎‏‎‎‎‏‏‎‏‎‏‎‎‎‎‎‎‏‏‏‎‎‏‏‏‏‎‏‎‎‎‎‎‎‎‏‏‏‎‎‎‏‎‏‎‎‏‏‏‏‎‏‎‎‎‎Result: The network premium purchase is in progress ...‎‏‎‎‏‎"</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-es-rUS/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-es-rUS/strings.xml
index 229ff5d..39b1338 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-es-rUS/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-es-rUS/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Solicitar red"</string>
+    <string name="release_network" msgid="174252378593535238">"Publicar red"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Resultado:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Prioriza la latencia"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Prioriza el ancho de banda"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Comprar red premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Resultado: Ya está disponible la red solicitada."</string>
+    <string name="network_requested" msgid="5646123922691865991">"Resultado: Se solicitó la red."</string>
+    <string name="network_released" msgid="2992280481133877025">"Resultado: Se liberó la red."</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Resultado: No se pudo liberar la red."</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Resultado: Excepción cuando se compra la red premium."</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Resultado: Se obtuvo un resultado vacío durante la compra de la red premium."</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Resultado: La red premium no está disponible para comprarse."</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Resultado: La compra de la red premium está en curso…"</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-es/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-es/strings.xml
index 355b912..8f46501 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-es/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-es/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hola, (segmento en blanco):"</string>
+    <string name="request_network" msgid="8945235490804849914">"Solicitar red"</string>
+    <string name="release_network" msgid="174252378593535238">"Lanzar red"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Resultado:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Priorizar latencia"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Priorizar ancho de banda"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Comprar red premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Resultado: la red solicitada ya está disponible."</string>
+    <string name="network_requested" msgid="5646123922691865991">"Resultado: se ha solicitado la red."</string>
+    <string name="network_released" msgid="2992280481133877025">"Resultado: la red se ha lanzado."</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Resultado: no se ha podido lanzar la red."</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Resultado: excepción al comprar la red premium."</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Resultado: se ha obtenido un resultado vacío al comprar la red premium."</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Resultado: no se puede comprar la red premium."</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Resultado: la compra de la red premium está en curso..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-et/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-et/strings.xml
index 229ff5d..f5ff262 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-et/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-et/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Request Network"</string>
+    <string name="release_network" msgid="174252378593535238">"Release Network"</string>
+    <string name="ping" msgid="7890607576220714932">"Kõll"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Tulemus:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Prioritize Latency"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Prioritize Bandwidth"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Purchase Network Premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Result: The requested network is available now!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Result: The network has been requested!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Result: The network has been released!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Result: Failed to release the network!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Result: Exception when purchasing network premium!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Result: Got empty result when purchasing network premium!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Result: The network premium is not available for purchase!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Result: The network premium purchase is in progress ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-eu/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-eu/strings.xml
index 229ff5d..ce566a1 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-eu/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-eu/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Eskatu sarea"</string>
+    <string name="release_network" msgid="174252378593535238">"Askatu sarea"</string>
+    <string name="ping" msgid="7890607576220714932">"Egin ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Emaitza:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Eman lehentasuna latentziari"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Eman lehentasuna banda-zabalerari"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Erosi sarearen premium bertsioa"</string>
+    <string name="network_available" msgid="4780293262690730734">"Emaitza: eskatutako sarea erabilgarri dago orain!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Emaitza: eskatu da sarea!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Emaitza: askatu da sarea!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Emaitza: ezin izan da askatu sarea!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Emaitza: salbuespena sarearen premium bertsioa erostean!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Emaitza: hutsik dauden emaitzak lortu dira sarearen premium bertsioa erostean!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Emaitza: ezin da erosi sarearen premium bertsioa!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Emaitza: abian da sarearen premium bertsioa erosteko prozesua…"</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-fa/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-fa/strings.xml
index 6f35108..5a51eaa 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-fa/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-fa/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"سلام بخش خالی"</string>
+    <string name="request_network" msgid="8945235490804849914">"درخواست شبکه"</string>
+    <string name="release_network" msgid="174252378593535238">"انتشار شبکه"</string>
+    <string name="ping" msgid="7890607576220714932">"پینگ"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"نتیجه:"</string>
+    <string name="latency_title" msgid="963052613947017009">"اولویت‌بندی تأخیر"</string>
+    <string name="bw_title" msgid="3902162973688221344">"اولویت‌بندی پهنای باند"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"خرید حساب ممتاز شبکه"</string>
+    <string name="network_available" msgid="4780293262690730734">"نتیجه: شبکه درخواست‌شده اکنون دردسترس است!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"نتیجه: شبکه درخواست شد!"</string>
+    <string name="network_released" msgid="2992280481133877025">"نتیجه: شبکه منتشر شد!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"نتیجه: شبکه منتشر نشد!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"نتیجه: هنگام خرید حساب ممتاز شبکهْ استثنائی پیش می‌آید!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"نتیجه: هنگام تلاش برای خرید حساب ممتاز شبکه نتیجه خالی برگردانده می‌شود!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"نتیجه: حساب ممتاز شبکه برای خرید دردسترس نیست!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"نتیجه: خرید حساب ممتاز شبکه درحال انجام است…"</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-fi/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-fi/strings.xml
index 229ff5d..df8ce6b 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-fi/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-fi/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Pyydä verkkoa"</string>
+    <string name="release_network" msgid="174252378593535238">"Vapauta verkko"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Tulos:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Priorisoi viive"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Priorisoi kaistanleveys"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Osta Network Premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Tulos: Pyydetty verkko on nyt käytettävissä!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Tulos: Verkkoa on pyydetty!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Tulos: Verkko on vapautettu!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Tulos: Verkon vapautus epäonnistui!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Tulos: Poikkeus Network Premiumia ostettaessa!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Tulos: Tyhjä tulos Network Premiumia ostettaessa!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Tulos: Network Premium ei ole ostettavissa!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Tulos: Network Premiumin osto on käynnissä..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-fr-rCA/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-fr-rCA/strings.xml
index 229ff5d..70a891b 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-fr-rCA/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-fr-rCA/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Réseau de demande"</string>
+    <string name="release_network" msgid="174252378593535238">"Réseau de diffusion"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Résultat :"</string>
+    <string name="latency_title" msgid="963052613947017009">"Prioriser la latence"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Prioriser la bande passante"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Acheter le réseau Premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Résultat : Le réseau demandé est maintenant disponible!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Résultat : Le réseau a été demandé!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Résultat : Le réseau est publié!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Résultat : Échec de la publication du réseau!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Résultat : Exception lors de l\'achat du réseau premium!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Résultat : Aucun résultat lors de l\'achat du réseau Premium!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Résultat : Le réseau Premium n\'est pas offert à l\'achat!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Résultat : L\'achat du réseau Premium est en cours…"</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-fr/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-fr/strings.xml
index e9b3b45..96d996b 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-fr/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-fr/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Bonjour fragment vierge"</string>
+    <string name="request_network" msgid="8945235490804849914">"Demander le réseau"</string>
+    <string name="release_network" msgid="174252378593535238">"Libérer le réseau"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Résultat :"</string>
+    <string name="latency_title" msgid="963052613947017009">"Prioriser la latence"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Prioriser la bande passante"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Souscrire au réseau premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Résultat : le réseau demandé est disponible."</string>
+    <string name="network_requested" msgid="5646123922691865991">"Résultat : le réseau a été demandé."</string>
+    <string name="network_released" msgid="2992280481133877025">"Résultat : le réseau a été libéré."</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Résultat : échec de la libération du réseau."</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Résultat : une exception s\'est produite lors de la souscription au réseau premium."</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Résultat : un résultat vide s\'est affiché lors de la souscription au réseau premium."</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Résultat : le réseau premium n\'est pas disponible à l\'achat."</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Résultat : la souscription au réseau premium est en cours…"</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-gl/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-gl/strings.xml
index 229ff5d..c505b21 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-gl/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-gl/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Solicitar rede"</string>
+    <string name="release_network" msgid="174252378593535238">"Liberar rede"</string>
+    <string name="ping" msgid="7890607576220714932">"Facer ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Resultado:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Darlle prioridade á latencia"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Darlle prioridade á largura de banda"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Comprar rede premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Resultado: A rede solicitada está dispoñible neste momento"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Resultado: Solicitouse a rede"</string>
+    <string name="network_released" msgid="2992280481133877025">"Resultado: Liberouse a rede"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Resultado: Produciuse un erro ao liberar a rede"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Resultado: Excepción ao comprar a rede premium"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Resultado: Recibiuse un resultado baleiro ao comprar a rede premium"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Resultado: A rede premium non está á venda"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Resultado: A compra da rede premium está en curso…"</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-gu/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-gu/strings.xml
index 229ff5d..675ac46 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-gu/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-gu/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"નેટવર્કની વિનંતી કરો"</string>
+    <string name="release_network" msgid="174252378593535238">"નેટવર્ક રિલીઝ કરો"</string>
+    <string name="ping" msgid="7890607576220714932">"પિંગ"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"પરિણામ:"</string>
+    <string name="latency_title" msgid="963052613947017009">"વિલંબતાને પ્રાધાન્યતા આપો"</string>
+    <string name="bw_title" msgid="3902162973688221344">"બૅન્ડવિડ્થને પ્રાધાન્યતા આપો"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Network Premium ખરીદો"</string>
+    <string name="network_available" msgid="4780293262690730734">"પરિણામ: વિનંતી કરવામાં આવેલું નેટવર્ક હવે ઉપલબ્ધ છે!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"પરિણામ: નેટવર્કની વિનંતી કરવામાં આવી છે!"</string>
+    <string name="network_released" msgid="2992280481133877025">"પરિણામ: નેટવર્ક રિલીઝ કરવામાં આવ્યું છે!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"પરિણામ: નેટવર્ક રિલીઝ કરવામાં નિષ્ફળ રહ્યાં!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"પરિણામ: network premium ખરીદતી વખતે અપવાદ!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"પરિણામ: network premium ખરીદતી વખતે ખાલી પરિણામ મળ્યું!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"પરિણામ: ખરીદી કરવા માટે network premium ઉપલબ્ધ નથી!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"પરિણામ: network premiumની ખરીદીની પ્રક્રિયા ચાલુ છે ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-hi/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-hi/strings.xml
index 229ff5d..0f13f68 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-hi/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-hi/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"नेटवर्क का अनुरोध करें"</string>
+    <string name="release_network" msgid="174252378593535238">"नेटवर्क रिलीज़ करें"</string>
+    <string name="ping" msgid="7890607576220714932">"पिंग करें"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"नतीजा:"</string>
+    <string name="latency_title" msgid="963052613947017009">"इंतज़ार के समय को प्राथमिकता दें"</string>
+    <string name="bw_title" msgid="3902162973688221344">"बैंडविड्थ को प्राथमिकता दें"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"नेटवर्क प्रीमियम खरीदें"</string>
+    <string name="network_available" msgid="4780293262690730734">"नतीजा: अनुरोध किया गया नेटवर्क अब उपलब्ध है!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"नतीजा: नेटवर्क के लिए अनुरोध किया गया है!"</string>
+    <string name="network_released" msgid="2992280481133877025">"नतीजा: नेटवर्क रिलीज़ हो गया है!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"नतीजा: नेटवर्क रिलीज़ नहीं किया जा सका!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"नतीजा: नेटवर्क प्रीमियम खरीदते समय अपवाद!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"नतीजा: नेटवर्क प्रीमियम खरीदते समय खाली नतीजा मिला!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"नतीजा: नेटवर्क प्रीमियम खरीदारी के लिए उपलब्ध नहीं है!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"नतीजा: नेटवर्क प्रीमियम खरीदारी चल रही है ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-hr/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-hr/strings.xml
index 229ff5d..dd4f3f5 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-hr/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-hr/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Zahtjev za mrežu"</string>
+    <string name="release_network" msgid="174252378593535238">"Otkazivanje mreže"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Rezultat:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Prednost ima latencija"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Prednost ima propusnost"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Kupnja premium sadržaja mreže"</string>
+    <string name="network_available" msgid="4780293262690730734">"Rezultat: zatražena mreža sada je dostupna!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Rezultat: mreža je zatražena!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Rezultat: mreža je otkazana!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Rezultat: otkazivanje mreže nije uspjelo!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Rezultat: iznimka pri kupnji premium sadržaja mreže!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Rezultat: dobiven je prazni rezultat pri kupnji premium sadržaja mreže!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Rezultat: premium sadržaj mreže nije dostupan za kupnju!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Rezultat: u tijeku je kupnja premium sadržaja mreže..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-hu/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-hu/strings.xml
index 0e73dba..524b271 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-hu/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-hu/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Üres üdvözlő rész"</string>
+    <string name="request_network" msgid="8945235490804849914">"Hálózat kérése"</string>
+    <string name="release_network" msgid="174252378593535238">"Hálózat felszabadítása"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Eredmény:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Várakozási idő előnyben"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Sávszélesség előnyben"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"A hálózati prémium megvásárlása"</string>
+    <string name="network_available" msgid="4780293262690730734">"Eredmény: A kért hálózat már rendelkezésre áll."</string>
+    <string name="network_requested" msgid="5646123922691865991">"Eredmény: A hálózat igénylése megtörtént."</string>
+    <string name="network_released" msgid="2992280481133877025">"Eredmény: A hálózat felszabadult."</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Eredmény: Nem sikerült felszabadítani a hálózatot."</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Eredmény: Kivétel a hálózati prémium megvásárlásakor."</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Eredmény: Üres eredmény érkezett vissza a hálózati prémium megvásárlásakor."</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Eredmény: A hálózati prémium nem vásárolható meg."</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Eredmény: A hálózati prémium megvásárlása folyamatban van..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-hy/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-hy/strings.xml
index 31a60c6..77ef65f 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-hy/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-hy/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Դատարկ հատված"</string>
+    <string name="request_network" msgid="8945235490804849914">"Ցանցն ազատելու հայտ ուղարկել"</string>
+    <string name="release_network" msgid="174252378593535238">"Ազատել ցանցը"</string>
+    <string name="ping" msgid="7890607576220714932">"Փինգ"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Արդյունքը՝"</string>
+    <string name="latency_title" msgid="963052613947017009">"Առաջնահերթություն տալ հապաղմանը"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Առաջնահերթություն տալ թողունակությանը"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Գնել ցանցի օգտագործման պրեմիում բաժանորդագրություն"</string>
+    <string name="network_available" msgid="4780293262690730734">"Արդյունքը՝ պահանջվող ցանցն այժմ հասանելի է։"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Արդյունքը՝ ցանցն ազատելու հայտն ուղարկվեց։"</string>
+    <string name="network_released" msgid="2992280481133877025">"Արդյունքը՝ ցանցն ազատվեց։"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Արդյունքը՝ չհաջողվեց ազատել ցանցը։"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Արդյունքը՝ ցանցի օգտագործման պրեմիում բաժանորդագրություն գնելու փորձի ժամանակ բացառություն է առաջացել։"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Արդյունքը՝ ցանցի օգտագործման պրեմիում բաժանորդագրություն գնելու փորձի ժամանակ ստացվել է դատարկ արդյունք։"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Արդյունքը՝ ցանցի օգտագործման պրեմիում բաժանորդագրությունը հասանելի չէ գնման համար։"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Արդյունքը՝ կատարվում է ցանցի օգտագործման պրեմիում բաժանորդագրության գնում ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-in/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-in/strings.xml
index 229ff5d..9e1aa19 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-in/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-in/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Meminta Jaringan"</string>
+    <string name="release_network" msgid="174252378593535238">"Melepaskan Jaringan"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Hasil:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Memprioritaskan Latensi"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Memprioritaskan Bandwidth"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Membeli Jaringan Premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Hasil: Jaringan yang diminta kini tersedia."</string>
+    <string name="network_requested" msgid="5646123922691865991">"Hasil: Jaringan telah diminta."</string>
+    <string name="network_released" msgid="2992280481133877025">"Hasil: Jaringan telah dilepas."</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Hasil: Gagal melepaskan jaringan."</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Hasil: Pengecualian saat membeli jaringan premium."</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Hasil: Mendapatkan hasil kosong saat membeli jaringan premium."</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Hasil: Jaringan premium tidak dapat dibeli."</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Hasil: Pembelian jaringan premium sedang berlangsung."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-is/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-is/strings.xml
index 229ff5d..61772de 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-is/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-is/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Biðja um netkerfi"</string>
+    <string name="release_network" msgid="174252378593535238">"Gefa út netkerfi"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping-prófun"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Niðurstaða:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Forgangsraða biðtíma"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Forgangsraða bandvídd"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Kaupa úrvalsnetkerfi"</string>
+    <string name="network_available" msgid="4780293262690730734">"Niðurstaða: Netkerfið sem beðið var um er nú í boði!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Niðurstaða: Beiðni um netkerfið hefur verið send!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Niðurstaða: Útgáfa netkerfisins tókst!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Niðurstaða: Ekki tókst að gefa netkerfið út!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Niðurstaða: Undantekning við kaup á úrvalsnetkerfi!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Niðurstaða: Fékk tóma niðurstöðu við kaup á úrvalsnetkerfi!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Niðurstaða: Það er ekki hægt að kaupa úrvalsnetkerfið!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Niðurstaða: Kaup á úrvalsnetkerfi eru í vinnslu..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-it/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-it/strings.xml
index 229ff5d..0c7b5f0 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-it/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-it/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Request Network"</string>
+    <string name="release_network" msgid="174252378593535238">"Release Network"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Result:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Prioritize Latency"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Prioritize Bandwidth"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Purchase Network Premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Result: The requested network is available now!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Risultato: la rete è stata richiesta."</string>
+    <string name="network_released" msgid="2992280481133877025">"Result: The network has been released!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Result: Failed to release the network!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Result: Exception when purchasing network premium!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Result: Got empty result when purchasing network premium!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Result: The network premium is not available for purchase!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Result: The network premium purchase is in progress ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-iw/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-iw/strings.xml
index 4287a40..243e2c0 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-iw/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-iw/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"שלום קטע ריק"</string>
+    <string name="request_network" msgid="8945235490804849914">"שליחת בקשה לרשת"</string>
+    <string name="release_network" msgid="174252378593535238">"שחרור הרשת"</string>
+    <string name="ping" msgid="7890607576220714932">"פינג"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"תוצאה:"</string>
+    <string name="latency_title" msgid="963052613947017009">"עדיפות לזמן האחזור"</string>
+    <string name="bw_title" msgid="3902162973688221344">"עדיפות לרוחב הפס"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"רכישת רשת פרימיום"</string>
+    <string name="network_available" msgid="4780293262690730734">"תוצאה: הרשת המבוקשת זמינה"</string>
+    <string name="network_requested" msgid="5646123922691865991">"תוצאה: הבקשה לרשת נשלחה"</string>
+    <string name="network_released" msgid="2992280481133877025">"תוצאה: הרשת שוחררה"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"תוצאה: הרשת לא שוחררה"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"תוצאה: חריגה ברכישת פרמיה לרשת"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"תוצאה: התקבלה תוצאה ריקה בניסיון לרכוש פרמיה לרשת"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"תוצאה: אי אפשר לרכוש את הפרמיה לרשת"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"תוצאה: רכישת פרמיה לרשת מתבצעת…"</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-ja/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-ja/strings.xml
index 229ff5d..a265867 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-ja/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-ja/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"ネットワークをリクエストする"</string>
+    <string name="release_network" msgid="174252378593535238">"ネットワークを解放する"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"結果:"</string>
+    <string name="latency_title" msgid="963052613947017009">"レイテンシを優先する"</string>
+    <string name="bw_title" msgid="3902162973688221344">"帯域幅を優先する"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"ネットワーク プレミアムを購入"</string>
+    <string name="network_available" msgid="4780293262690730734">"結果: リクエストされたネットワークが利用できるようになりました。"</string>
+    <string name="network_requested" msgid="5646123922691865991">"結果: ネットワークがリクエストされました。"</string>
+    <string name="network_released" msgid="2992280481133877025">"結果: ネットワークが解放されました。"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"結果: ネットワークを解放できませんでした。"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"結果: ネットワーク プレミアム購入時に例外が発生しました。"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"結果: ネットワーク プレミアムの購入時に空の結果が返されました。"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"結果: ネットワーク プレミアムを購入できません。"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"結果: ネットワーク プレミアムの購入処理中です。"</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-ka/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-ka/strings.xml
index 8d91ed0..1543a21 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-ka/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-ka/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"მოგესალმებით, ეს ცარიელი ფრაგმენტია"</string>
+    <string name="request_network" msgid="8945235490804849914">"მოთხოვნილი ქსელი"</string>
+    <string name="release_network" msgid="174252378593535238">"გამოშვების ქსელი"</string>
+    <string name="ping" msgid="7890607576220714932">"ზუზუნი"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"შედეგი:"</string>
+    <string name="latency_title" msgid="963052613947017009">"უპირატესობა მიანიჭეთ რეაგირების დროს"</string>
+    <string name="bw_title" msgid="3902162973688221344">"პრიორიტეტული გამტარუნარიანობა"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"შეიძინეთ ქსელის პრემიუმი"</string>
+    <string name="network_available" msgid="4780293262690730734">"შედეგი: მოთხოვნილი ქსელი უკვე ხელმისაწვდომია!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"შედეგი: ქსელი მოთხოვნილია!"</string>
+    <string name="network_released" msgid="2992280481133877025">"შედეგი: ქსელი გათავისუფლდა!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"შედეგი: ქსელის გათავისუფლება ვერ მოხერხდა"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"შედეგი: გამონაკლისი ქსელის პრემიუმის შეძენისას!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"შედეგი: მიიღეთ ცარიელი შედეგი ქსელის პრემიუმის შეძენისას!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"შედეგი: ქსელის პრემია არ არის ხელმისაწვდომი შესაძენად!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"შედეგი:მიმდინარეობს ქსელის პრემიუმ შესყიდვა ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-kk/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-kk/strings.xml
index 229ff5d..1dac729 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-kk/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-kk/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Желіні сұрау"</string>
+    <string name="release_network" msgid="174252378593535238">"Желіні шығару"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Нәтиже:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Кідіріске басымдық беру"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Өткізу мүмкіндігіне басымдық беру"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Премиум желіні сатып алу"</string>
+    <string name="network_available" msgid="4780293262690730734">"Нәтиже: сұралған желіні қазір пайдалануға болады!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Нәтиже: желі сұралды!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Нәтиже: желі шығарылды!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Нәтиже: желі шығарылмады!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Нәтиже: премиум желіні сатып алу кезінде ерекше жағдай шықты!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Нәтиже: премиум желіні сатып алу кезінде бос нәтиже шықты!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Нәтиже: премиум желіні сатып алу мүмкін емес!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Нәтиже: премиум желіні сатып алу процесі жүріп жатыр…"</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-km/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-km/strings.xml
index 229ff5d..1c4002a 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-km/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-km/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"ស្នើសុំបណ្ដាញ"</string>
+    <string name="release_network" msgid="174252378593535238">"ដកបណ្ដាញចេញ"</string>
+    <string name="ping" msgid="7890607576220714932">"ភីង"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"លទ្ធផល៖"</string>
+    <string name="latency_title" msgid="963052613947017009">"ផ្ដល់អាទិភាពការ​ពន្យារ"</string>
+    <string name="bw_title" msgid="3902162973688221344">"ផ្ដល់អាទិភាពកម្រិត​បញ្ជូន"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"ទិញបណ្ដាញលំដាប់ខ្ពស់"</string>
+    <string name="network_available" msgid="4780293262690730734">"លទ្ធផល៖ ឥឡូវនេះអាចប្រើបណ្ដាញដែលបានស្នើសុំបានហើយ!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"លទ្ធផល៖ បានស្នើសុំបណ្ដាញ!"</string>
+    <string name="network_released" msgid="2992280481133877025">"លទ្ធផល៖ បានដកបណ្ដាញចេញ!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Result: Failed to release the network!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"លទ្ធផល៖ ការលើកលែង នៅពេលទិញបណ្ដាញលំដាប់ខ្ពស់!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Result: Got empty result when purchasing network premium!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Result: The network premium is not available for purchase!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"លទ្ធផល៖ ការទិញបណ្ដាញលំដាប់ខ្ពស់កំពុងដំណើរការ ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-kn/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-kn/strings.xml
index 13a202b..1c06a91 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-kn/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-kn/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"ಹಲೋ, ಖಾಲಿ ಫ್ರಾಗ್ಮೆಂಟ್"</string>
+    <string name="request_network" msgid="8945235490804849914">"ನೆಟ್‌ವರ್ಕ್‌ಗಾಗಿ ವಿನಂತಿಸಿ"</string>
+    <string name="release_network" msgid="174252378593535238">"ನೆಟ್‌ವರ್ಕ್ ಅನ್ನು ಬಿಡುಗಡೆ ಮಾಡಿ"</string>
+    <string name="ping" msgid="7890607576220714932">"ಪಿಂಗ್"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"ಫಲಿತಾಂಶ:"</string>
+    <string name="latency_title" msgid="963052613947017009">"ವಿಳಂಬವನ್ನು ಆದ್ಯತೆಗೊಳಿಸಿ"</string>
+    <string name="bw_title" msgid="3902162973688221344">"ಬ್ಯಾಂಡ್‌ವಿಡ್ತ್‌ ಆದ್ಯತೆಗೊಳಿಸಿ"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"ನೆಟ್‌ವರ್ಕ್ ಪ್ರೀಮಿಯಂ ಖರೀದಿಸಿ"</string>
+    <string name="network_available" msgid="4780293262690730734">"ಫಲಿತಾಂಶ: ವಿನಂತಿಸಿದ ನೆಟ್‌ವರ್ಕ್ ಈಗ ಲಭ್ಯವಿದೆ!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"ಫಲಿತಾಂಶ: ನೆಟ್‌ವರ್ಕ್‌ಗಾಗಿ ವಿನಂತಿಸಲಾಗಿದೆ!"</string>
+    <string name="network_released" msgid="2992280481133877025">"ಫಲಿತಾಂಶ: ನೆಟ್‌ವರ್ಕ್ ಅನ್ನು ಬಿಡುಗಡೆ ಮಾಡಲಾಗಿದೆ!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"ಫಲಿತಾಂಶ: ನೆಟ್‌ವರ್ಕ್ ಅನ್ನು ಬಿಡುಗಡೆ ಮಾಡಲು ವಿಫಲವಾಗಿದೆ!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"ಫಲಿತಾಂಶ: ನೆಟ್‌ವರ್ಕ್ ಪ್ರೀಮಿಯಂ ಅನ್ನು ಖರೀದಿಸುವಾಗ ದೊರೆಯುವ ವಿನಾಯಿತಿ!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"ಫಲಿತಾಂಶ: ನೆಟ್‌ವರ್ಕ್ ಪ್ರೀಮಿಯಂ ಅನ್ನು ಖರೀದಿಸುವಾಗ ಫಲಿತಾಂಶವು ದೊರೆತಿಲ್ಲ!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"ಫಲಿತಾಂಶ: ನೆಟ್‌ವರ್ಕ್ ಪ್ರೀಮಿಯಂ ಖರೀದಿಗೆ ಲಭ್ಯವಿಲ್ಲ!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"ಫಲಿತಾಂಶ: ನೆಟ್‌ವರ್ಕ್ ಪ್ರೀಮಿಯಂ ಖರೀದಿ ಪ್ರಕ್ರಿಯೆ ಪ್ರಗತಿಯಲ್ಲಿದೆ ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-ko/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-ko/strings.xml
index 229ff5d..78199c8 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-ko/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-ko/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"네트워크 요청"</string>
+    <string name="release_network" msgid="174252378593535238">"네트워크 해제"</string>
+    <string name="ping" msgid="7890607576220714932">"핑"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"결과:"</string>
+    <string name="latency_title" msgid="963052613947017009">"지연 시간 우선순위 지정"</string>
+    <string name="bw_title" msgid="3902162973688221344">"대역폭의 우선순위 지정"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Network Premium 구매"</string>
+    <string name="network_available" msgid="4780293262690730734">"결과: 요청된 네트워크를 지금 사용할 수 있습니다."</string>
+    <string name="network_requested" msgid="5646123922691865991">"결과: 네트워크가 요청되었습니다."</string>
+    <string name="network_released" msgid="2992280481133877025">"결과: 네트워크가 해제되었습니다."</string>
+    <string name="network_release_failed" msgid="256471231420029151">"결과: 네트워크 해제에 실패했습니다."</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"결과: 네트워크 프리미엄 구매 시 예외 발생"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"결과: 네트워크 프리미엄을 구매할 때 결과가 비어 있습니다."</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"결과: 네트워크 프리미엄을 구매할 수 없습니다."</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"결과: 네트워크 프리미엄 구매가 진행 중입니다."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-ky/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-ky/strings.xml
index 229ff5d..8e9fd3d 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-ky/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-ky/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Тармак сурамы"</string>
+    <string name="release_network" msgid="174252378593535238">"Тармакты артка кайтаруу"</string>
+    <string name="ping" msgid="7890607576220714932">"Хрусталь"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Натыйжа:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Күтүү убакытына артыкчылык берүү"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Өткөрүү жөндөмдүүлүгүнө артыкчылык берүү"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Премиум тармагын сатып алуу"</string>
+    <string name="network_available" msgid="4780293262690730734">"Натыйжа: Суралган тармак азыр жеткиликтүү."</string>
+    <string name="network_requested" msgid="5646123922691865991">"Натыйжа: Тармак суралды."</string>
+    <string name="network_released" msgid="2992280481133877025">"Натыйжа: Тармак артка кайтарылды."</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Натыйжа: Тармак артка кайтарылган жок."</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Натыйжа: Премиум тармагын сатып алууда өзгөчө учур чыкты."</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Натыйжа: Премиум тармагын сатып алууда жыйынтык көрсөтүлгөн жок."</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Натыйжа: Премиум тармагы сатылбайт."</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Натыйжа: Премиум тармагы сатылып алынууда."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-lo/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-lo/strings.xml
index 3d47ad6..03812e7 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-lo/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-lo/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"​ສະ​ບາຍ​ດີ​ຈຸດ​ແຕກທີ່​ຫວ່າງ​ເປົ່າ"</string>
+    <string name="request_network" msgid="8945235490804849914">"ຮ້ອງຂໍເຄືອຂ່າຍ"</string>
+    <string name="release_network" msgid="174252378593535238">"ປ່ອຍເຄືອຂ່າຍ"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Result:"</string>
+    <string name="latency_title" msgid="963052613947017009">"ຈັດລຳດັບຄວາມສຳຄັນເວລາຕອບສະໜອງ"</string>
+    <string name="bw_title" msgid="3902162973688221344">"ຈັດລຳດັບຄວາມສຳຄັນແບນວິດ"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"ຊື້ເຄືອຂ່າຍ Premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"ຜົນຮັບ: ຕອນນີ້ເຄືອຂ່າຍທີ່ຮ້ອງຂໍໃຊ້ໄດ້ແລ້ວ!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Result: The network has been requested!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Result: The network has been released!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Result: Failed to release the network!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Result: Exception when purchasing network premium!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Result: Got empty result when purchasing network premium!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Result: The network premium is not available for purchase!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Result: The network premium purchase is in progress ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-lt/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-lt/strings.xml
index 509fd2d..4d6c73e 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-lt/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-lt/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Sveiki, tuščias fragmentas"</string>
+    <string name="request_network" msgid="8945235490804849914">"Pateikti tinklo užklausą"</string>
+    <string name="release_network" msgid="174252378593535238">"Išleisti tinklą"</string>
+    <string name="ping" msgid="7890607576220714932">"Ryšio patikra"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Rezultatas:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Suteikti prioritetą delsai"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Suteikti prioritetą pralaidumui"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Įsigyti tinklą „Premium“"</string>
+    <string name="network_available" msgid="4780293262690730734">"Rezultatas: tinklas, dėl kurio pateikta užklausa, dabar pasiekiamas!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Rezultatas: pateikta tinklo užklausa!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Rezultatas: tinklas išleistas!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Rezultatas: nepavyko išleisti tinklo!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Rezultatas: išimtis įsigyjant tinklą „Premium“!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Rezultatas: gautas tuščias rezultatas įsigyjant tinklą „Premium“!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Rezultatas: tinklo „Premium“ negalima įsigyti!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Rezultatas: vykdomas tinklo „Premium“ įsigijimas..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-lv/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-lv/strings.xml
index 229ff5d..3f24cf5 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-lv/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-lv/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Pieprasīt tīklu"</string>
+    <string name="release_network" msgid="174252378593535238">"Atbrīvot tīklu"</string>
+    <string name="ping" msgid="7890607576220714932">"Ehotestēt"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Rezultāts:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Prioritāte latentumam"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Prioritāte joslas platumam"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Iegādāties tīkla maksas abonementu"</string>
+    <string name="network_available" msgid="4780293262690730734">"Rezultāts: pieprasītais tīkls tagad ir pieejams."</string>
+    <string name="network_requested" msgid="5646123922691865991">"Rezultāts: tīkls ir pieprasīts."</string>
+    <string name="network_released" msgid="2992280481133877025">"Rezultāts: tīkls ir atbrīvots."</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Rezultāts: neizdevās atbrīvot tīklu."</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Rezultāts: iegādājoties tīkla maksas abonementu, radās izņēmums."</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Rezultāts: iegādājoties tīkla maksas abonementu, tika iegūts tukšs rezultāts."</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Rezultāts: tīkla maksas abonementu nevar iegādāties."</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Rezultāts: notiek tīkla maksas abonementa iegāde…"</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-mk/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-mk/strings.xml
index 229ff5d..41c891f 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-mk/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-mk/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Побарајте мрежа"</string>
+    <string name="release_network" msgid="174252378593535238">"Исклучете мрежа"</string>
+    <string name="ping" msgid="7890607576220714932">"Пинг"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Резултат:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Prioritize Latency"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Prioritize Bandwidth"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Купете премиум-мрежа"</string>
+    <string name="network_available" msgid="4780293262690730734">"Result: The requested network is available now!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Резултат: мрежата е побарана!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Резултат: мрежата е исклучена!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Result: Failed to release the network!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Резултат: исклучок при купување премиум-мрежа!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Резултат: се доби празен резултат при купување премиум-мрежа!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Резултат: премиум-мрежата не е достапна за купување!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Резултат: купувањето на премиум-мрежата е во тек …"</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-ml/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-ml/strings.xml
index 47ca9c8..bc8e8c5 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-ml/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-ml/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"ഹലോ ബ്ലാങ്ക് ഫ്രാഗ്‌മെന്റ്"</string>
+    <string name="request_network" msgid="8945235490804849914">"ഒരു നെറ്റ്‌വർക്ക് അഭ്യർത്ഥിക്കുക"</string>
+    <string name="release_network" msgid="174252378593535238">"നെറ്റ്‌വർക്ക് റിലീസ് ചെയ്യുക"</string>
+    <string name="ping" msgid="7890607576220714932">"പിംഗ്"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"ഫലം:"</string>
+    <string name="latency_title" msgid="963052613947017009">"പ്രതികരണ സമയത്തിന് മുൻഗണന നൽകുക"</string>
+    <string name="bw_title" msgid="3902162973688221344">"ബാൻഡ്‌വിഡ്‌ത്തിന് മുൻഗണന നൽകുക"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"നെറ്റ്‌വർക്ക് പ്രീമിയം വാങ്ങുക"</string>
+    <string name="network_available" msgid="4780293262690730734">"ഫലം: അഭ്യർത്ഥിച്ച നെറ്റ്‌വർക്ക് ഇപ്പോൾ ലഭ്യമാണ്!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"ഫലം: നെറ്റ്‌വർക്കിന് അഭ്യർത്ഥിച്ചു!"</string>
+    <string name="network_released" msgid="2992280481133877025">"ഫലം: നെറ്റ്‌വർക്ക് റിലീസ് ചെയ്തിരിക്കുന്നു!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"ഫലം: നെറ്റ്‌വർക്ക് റിലീസ് ചെയ്യാനായില്ല!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"ഫലം: നെറ്റ്‌വർക്ക് പ്രീമിയം വാങ്ങുമ്പോൾ ഒഴിവാക്കുന്നവ!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"ഫലം: നെറ്റ്‌വർക്ക് പ്രീമിയം വാങ്ങുമ്പോൾ ഫലം ലഭിക്കുന്നില്ല!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"ഫലം: നെറ്റ്‌വർക്ക് പ്രീമിയം വാങ്ങുന്നതിന് ലഭ്യമല്ല!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"ഫലം: നെറ്റ്‌വർക്ക് പ്രീമിയം വാങ്ങൽ പുരോഗമിക്കുന്നു ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-mn/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-mn/strings.xml
index 1aa5138..117cd3a 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-mn/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-mn/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Сайн байна уу хоосон хэсэг"</string>
+    <string name="request_network" msgid="8945235490804849914">"Сүлжээний хүсэлт тавих"</string>
+    <string name="release_network" msgid="174252378593535238">"Сүлжээ шинээр гаргах"</string>
+    <string name="ping" msgid="7890607576220714932">"Пинг"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Үр дүн:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Хоцролтыг чухалчлах"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Зурвасын өргөнийг чухалчлах"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Сүлжээний премиумийг худалдан авах"</string>
+    <string name="network_available" msgid="4780293262690730734">"Үр дүн: Хүсэлт тавьсан сүлжээ одоо боломжтой боллоо!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Үр дүн: Сүлжээний хүсэлт тавьсан!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Үр дүн: Сүлжээг шинээр гаргалаа!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Үр дүн: Сүлжээг шинээр гаргаж чадсангүй!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Үр дүн: Сүлжээний премиумийг худалдан авах үед гажилт гарлаа!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Үр дүн: Сүлжээний премиумийг худалдан авах үед хоосон илэрц авсан!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Үр дүн: Сүлжээний премиумийг худалдан авах боломжгүй!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Үр дүн: Сүлжээний премиумийг худалдан авч байна ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-mr/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-mr/strings.xml
index 7fbe792..35347b6 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-mr/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-mr/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"हॅलो ब्लँक फ्रॅग्मेंट"</string>
+    <string name="request_network" msgid="8945235490804849914">"नेटवर्कची विनंती करा"</string>
+    <string name="release_network" msgid="174252378593535238">"नेटवर्क रिलीझ करा"</string>
+    <string name="ping" msgid="7890607576220714932">"पिंग"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"परिणाम:"</string>
+    <string name="latency_title" msgid="963052613947017009">"लेटन्सी ला प्राधान्य द्या"</string>
+    <string name="bw_title" msgid="3902162973688221344">"बँडविड्थ ला प्राधान्य द्या"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"नेटवर्क प्रीमियमची खरेदी"</string>
+    <string name="network_available" msgid="4780293262690730734">"परिणाम: विनंती केलेले नेटवर्क आता उपलब्ध आहे!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"परिणाम: नटवर्कची विनंती केली आहे!"</string>
+    <string name="network_released" msgid="2992280481133877025">"परिणाम: नेटवर्क रिलीझ केले आहे!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"परिणाम: नेटवर्क रिलीझ करता आले नाही!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"परिणाम: नेटवर्क प्रीमियम खरेदी करताना एक्सेप्शन!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"परिणाम: नेटवर्क प्रीमियम खरेदी करताना कोणताही परिणाम आढळला नाही!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"परिणाम: नेटवर्क प्रीमियम खरेदी करण्यासाठी उपलब्ध नाही!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"परिणाम: नेटवर्क प्रीमियम खरेदी करणे प्रगतीपथावर आहे..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-ms/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-ms/strings.xml
index b928cd6..cfb7de6 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-ms/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-ms/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Helo cebisan kosong"</string>
+    <string name="request_network" msgid="8945235490804849914">"Minta Rangkaian"</string>
+    <string name="release_network" msgid="174252378593535238">"Lepaskan Rangkaian"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Hasil:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Utamakan Kependaman"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Utamakan Lebar Jalur"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Beli Network Premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Hasil: Rangkaian yang diminta kini tersedia!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Hasil: Rangkaian telah diminta!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Hasil: Rangkaian telah dilepaskan!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Hasil: Gagal mengeluarkan rangkaian!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Hasil: Pengecualian apabila membeli network premium!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Hasil: Tiada hasil apabila membeli network premium!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Hasil: Network premium tidak tersedia untuk pembelian!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Hasil: Pembelian network premium sedang diproses ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-my/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-my/strings.xml
index 229ff5d..a5c81f6 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-my/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-my/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Request Network"</string>
+    <string name="release_network" msgid="174252378593535238">"Release Network"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Result:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Prioritize Latency"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Prioritize Bandwidth"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Purchase Network Premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Result: The requested network is available now!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Result: The network has been requested!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Result: The network has been released!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Result: Failed to release the network!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Result: Exception when purchasing network premium!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Result: Got empty result when purchasing network premium!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Result: The network premium is not available for purchase!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Result: The network premium purchase is in progress ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-nb/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-nb/strings.xml
index 3d601ab..abb1af4 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-nb/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-nb/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hei, tomt fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Forespør nettverk"</string>
+    <string name="release_network" msgid="174252378593535238">"Frigi nettverk"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Resultat:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Prioriter tidsforsinkelser"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Prioriter båndbredde"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Kjøp premiumnettverk"</string>
+    <string name="network_available" msgid="4780293262690730734">"Resultat: Det forespurte nettverket er tilgjengelig nå."</string>
+    <string name="network_requested" msgid="5646123922691865991">"Resultat: Nettverket er forespurt."</string>
+    <string name="network_released" msgid="2992280481133877025">"Resultat: Nettverket er frigitt."</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Resultat: Kunne ikke frigi nettverket."</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Resultat: Unntak ved kjøp av premiumnettverk."</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Resultat: Fikk tomt resultat ved kjøp av premiumnettverk."</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Resultat: Premiumnettverket er ikke tilgjengelig for kjøp."</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Resultat: Kjøp av premiumnettverk pågår …"</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-ne/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-ne/strings.xml
index 229ff5d..cb2d561 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-ne/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-ne/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"नेटवर्क अनुरोध गर्नुहोस्"</string>
+    <string name="release_network" msgid="174252378593535238">"नेटवर्क रिलिज गर्नुहोस्"</string>
+    <string name="ping" msgid="7890607576220714932">"पिङ"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"परिणाम:"</string>
+    <string name="latency_title" msgid="963052613947017009">"ल्याटेन्सीलाई प्राथमिकता दिनुहोस्"</string>
+    <string name="bw_title" msgid="3902162973688221344">"ब्यान्डविथलाई प्राथमिकता दिनुहोस्"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Network Premium खरिद गर्नुहोस्"</string>
+    <string name="network_available" msgid="4780293262690730734">"परिणाम: अनुरोध गरिएको नेटवर्क अब उपलब्ध भएको छ!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"परिणाम: नेटवर्क अनुरोध गरिएको छ!"</string>
+    <string name="network_released" msgid="2992280481133877025">"परिणाम: नेटवर्क रिलिज गरिएको छ!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"परिणाम: नेटवर्क रिलिज गर्न सकिएन!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"परिणाम: Network Premium खरिद गर्दा अपवाद भयो!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"परिणाम: Network Premium खरिद गर्दा कुनै पनि परिणाम प्राप्त भएन!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"परिणाम: Network Premium खरिद गर्न मिल्दैन!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"परिणाम: Network Premium खरिद गरिँदै छ …"</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-nl/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-nl/strings.xml
index 5d10fc6..9d98130 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-nl/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-nl/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hallo leeg fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Netwerk aanvragen"</string>
+    <string name="release_network" msgid="174252378593535238">"Netwerk vrijgeven"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Resultaat:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Vertraging prioriteit geven"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Bandbreedte prioriteit geven"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Netwerkpremium kopen"</string>
+    <string name="network_available" msgid="4780293262690730734">"Resultaat: Het gevraagde netwerk is nu beschikbaar."</string>
+    <string name="network_requested" msgid="5646123922691865991">"Resultaat: Het netwerk is aangevraagd."</string>
+    <string name="network_released" msgid="2992280481133877025">"Resultaat: Het netwerk is vrijgegeven."</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Resultaat: Het netwerk kan niet worden vrijgegeven."</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Resultaat: Uitzondering bij kopen van netwerkpremium."</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Resultaat: Er is een leeg resultaat geretourneerd bij het kopen van netwerkpremium."</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Resultaat: Het netwerkpremium kan niet worden gekocht."</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Resultaat: Netwerkpremium wordt gekocht..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-or/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-or/strings.xml
index 229ff5d..287aa01 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-or/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-or/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Networkର ଅନୁରୋଧ କରନ୍ତୁ"</string>
+    <string name="release_network" msgid="174252378593535238">"Network ରିଲିଜ କରନ୍ତୁ"</string>
+    <string name="ping" msgid="7890607576220714932">"ପିଂ"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"ଫଳାଫଳ:"</string>
+    <string name="latency_title" msgid="963052613947017009">"ଲେଟେନ୍ସିକୁ ପ୍ରାଥମିକତା ଦିଅନ୍ତୁ"</string>
+    <string name="bw_title" msgid="3902162973688221344">"ବେଣ୍ଡୱିଡଥକୁ ପ୍ରାଥମିକତା ଦିଅନ୍ତୁ"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Network Premium କିଣନ୍ତୁ"</string>
+    <string name="network_available" msgid="4780293262690730734">"ଫଳାଫଳ: ଅନୁରୋଧ କରାଯାଇଥିବା ନେଟୱାର୍କଟି ବର୍ତ୍ତମାନ ଉପଲବ୍ଧ ଅଛି!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"ଫଳାଫଳ: ନେଟୱାର୍କର ଅନୁରୋଧ କରାଯାଇଛି!"</string>
+    <string name="network_released" msgid="2992280481133877025">"ଫଳାଫଳ: ନେଟୱାର୍କକୁ ରିଲିଜ କରାଯାଇଛି!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"ଫଳାଫଳ: ନେଟୱାର୍କକୁ ରିଲିଜ କରିବାରେ ବିଫଳ ହୋଇଛି!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"ଫଳାଫଳ: Network Premium କିଣିବା ବେଳେ ବ୍ୟତିକ୍ରମ!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"ଫଳାଫଳ: Network Premium କିଣିବା ବେଳେ ଖାଲି ଫଳାଫଳ ମିଳିଲା!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"ଫଳାଫଳ: Network Premium କ୍ରୟ ପାଇଁ ଉପଲବ୍ଧ ନାହିଁ!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"ଫଳାଫଳ: Network Premium କିଣିବାର ପ୍ରକ୍ରିୟା ଚାଲିଛି ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-pa/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-pa/strings.xml
index 229ff5d..e210500 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-pa/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-pa/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Network ਦੀ ਬੇਨਤੀ ਕਰੋ"</string>
+    <string name="release_network" msgid="174252378593535238">"Network ਰਿਲੀਜ਼ ਕਰੋ"</string>
+    <string name="ping" msgid="7890607576220714932">"ਪਿੰਗ"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"ਨਤੀਜਾ:"</string>
+    <string name="latency_title" msgid="963052613947017009">"ਵਿਲੰਬਤਾ ਨੂੰ ਤਰਜੀਹ ਦਿਓ"</string>
+    <string name="bw_title" msgid="3902162973688221344">"ਬੈਂਡਵਿਡਥ ਨੂੰ ਤਰਜੀਹ ਦਿਓ"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Network Premium ਖਰੀਦੋ"</string>
+    <string name="network_available" msgid="4780293262690730734">"ਨਤੀਜਾ: ਬੇਨਤੀ ਕੀਤਾ ਨੈੱਟਵਰਕ ਹੁਣ ਉਪਲਬਧ ਹੈ!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"ਨਤੀਜਾ: ਨੈੱਟਵਰਕ ਦੇ ਲਈ ਬੇਨਤੀ ਕੀਤੀ ਗਈ ਹੈ!"</string>
+    <string name="network_released" msgid="2992280481133877025">"ਨਤੀਜਾ: ਨੈੱਟਵਰਕ ਨੂੰ ਰਿਲੀਜ਼ ਕੀਤਾ ਗਿਆ ਹੈ!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"ਨਤੀਜਾ: ਨੈੱਟਵਰਕ ਨੂੰ ਰਿਲੀਜ਼ ਕਰਨਾ ਅਸਫਲ ਰਿਹਾ!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"ਨਤੀਜਾ: ਨੈੱਟਵਰਕ ਪ੍ਰੀਮੀਅਮ ਖਰੀਦਣ ਵੇਲੇ ਅਪਵਾਦ!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"ਨਤੀਜਾ: ਨੈੱਟਵਰਕ ਪ੍ਰੀਮੀਅਮ ਖਰੀਦਣ ਵੇਲੇ ਖਾਲੀ ਨਤੀਜਾ ਮਿਲਿਆ!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"ਨਤੀਜਾ: ਨੈੱਟਵਰਕ ਪ੍ਰੀਮੀਅਮ ਖਰੀਦ ਲਈ ਉਪਲਬਧ ਨਹੀਂ ਹੈ!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"ਨਤੀਜਾ: ਨੈੱਟਵਰਕ ਪ੍ਰੀਮੀਅਮ ਦੀ ਖਰੀਦ ਜਾਰੀ ਹੈ ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-pl/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-pl/strings.xml
index 0bf147b..21b1a78 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-pl/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-pl/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Tutaj jest pusty fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Poproś o dostęp do sieci"</string>
+    <string name="release_network" msgid="174252378593535238">"Zwolnij sieć"</string>
+    <string name="ping" msgid="7890607576220714932">"Dzyń"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Efekt:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Nadaj priorytet czasowi oczekiwania"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Nadaj priorytet przepustowości"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Kup sieć Premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Efekt: żądana sieć jest już dostępna"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Efekt: zażądano dostępu do sieci"</string>
+    <string name="network_released" msgid="2992280481133877025">"Efekt: sieć została zwolniona"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Efekt: nie udało się zwolnić sieci"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Wynik: przy zakupie sieci premium pojawia się wyjątek"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Wynik: brak wyników w przypadku zakupu sieci premium"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Efekt: nie można kupić sieci premium"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Wynik: trwa kupowanie sieci premium…"</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-pt-rPT/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-pt-rPT/strings.xml
index b94a687..31c2720 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-pt-rPT/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-pt-rPT/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Olá, fragmento em branco"</string>
+    <string name="request_network" msgid="8945235490804849914">"Pedir rede"</string>
+    <string name="release_network" msgid="174252378593535238">"Lançar rede"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Resultado:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Priorizar latência"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Priorizar largura de banda"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Comprar serviço premium de rede"</string>
+    <string name="network_available" msgid="4780293262690730734">"Resultado: a rede pedida já está disponível!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Resultado: a rede foi pedida!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Resultado: a rede foi lançada!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Resultado: falha ao lançar a rede!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Resultado: exceção ao comprar o serviço premium de rede!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Resultado: obteve um resultado vazio ao comprar o serviço premium de rede!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Resultado: o serviço premium de rede não está disponível para compra!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Resultado: a compra do serviço premium de rede está em curso…"</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-pt/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-pt/strings.xml
index 229ff5d..b0b4b51 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-pt/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-pt/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Rede da solicitação"</string>
+    <string name="release_network" msgid="174252378593535238">"Rede de lançamento"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Resultado:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Priorizar a latência"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Priorizar a largura de banda"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Comprar Rede Premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Resultado: a rede solicitada já está disponível."</string>
+    <string name="network_requested" msgid="5646123922691865991">"Resultado: a rede foi solicitada."</string>
+    <string name="network_released" msgid="2992280481133877025">"Resultado: a rede foi liberada."</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Resultado: falha ao liberar a rede."</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Resultado: exceção ao comprar uma rede Premium."</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Resultado: há um resultado vazio ao comprar a rede Premium."</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Resultado: a rede Premium não está disponível para compra."</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Resultado: a compra da rede Premium está em andamento..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-ro/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-ro/strings.xml
index 229ff5d..a5c81f6 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-ro/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-ro/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Request Network"</string>
+    <string name="release_network" msgid="174252378593535238">"Release Network"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Result:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Prioritize Latency"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Prioritize Bandwidth"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Purchase Network Premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Result: The requested network is available now!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Result: The network has been requested!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Result: The network has been released!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Result: Failed to release the network!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Result: Exception when purchasing network premium!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Result: Got empty result when purchasing network premium!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Result: The network premium is not available for purchase!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Result: The network premium purchase is in progress ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-ru/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-ru/strings.xml
index 229ff5d..7763c62 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-ru/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-ru/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Запросить сеть"</string>
+    <string name="release_network" msgid="174252378593535238">"Освободить сеть"</string>
+    <string name="ping" msgid="7890607576220714932">"Запрос ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Результат."</string>
+    <string name="latency_title" msgid="963052613947017009">"Минимизировать задержку"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Минимизировать нагрузку на сеть"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Купить премиальную подписку на использование сети"</string>
+    <string name="network_available" msgid="4780293262690730734">"Результат: запрошенная сеть сейчас доступна."</string>
+    <string name="network_requested" msgid="5646123922691865991">"Результат: сеть запрошена."</string>
+    <string name="network_released" msgid="2992280481133877025">"Результат: сеть освобождена."</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Результат: не удалось освободить сеть."</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Результат: при попытке купить премиальную подписку на использование сети возникло исключение."</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Результат: получен пустой результат при попытке купить премиальную подписку на использование сети."</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Результат: премиальная подписка на использование сети недоступна для покупки."</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Результат: выполняется покупка премиальной подписки на использование сети."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-si/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-si/strings.xml
index 7c88afe..ed91dd7 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-si/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-si/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"ආයුබෝවන් හිස් කොටස"</string>
+    <string name="request_network" msgid="8945235490804849914">"ජාලය ඉල්ලන්න"</string>
+    <string name="release_network" msgid="174252378593535238">"ජාලය මුදා හරින්න"</string>
+    <string name="ping" msgid="7890607576220714932">"පිං"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"ප්‍රතිඵලය:"</string>
+    <string name="latency_title" msgid="963052613947017009">"පමාවට ප්‍රමුඛත්වය දෙන්න"</string>
+    <string name="bw_title" msgid="3902162973688221344">"කලාප පළලට ප්‍රමුඛත්වය දෙන්න"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"ජාල ප්‍රිමියම් මිල දී ගන්න"</string>
+    <string name="network_available" msgid="4780293262690730734">"ප්‍රතිඵලය: ඉල්ලූ ජාලය දැන් තිබේ!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"ප්‍රතිඵලය: ජාලය ඉල්ලා ඇත!"</string>
+    <string name="network_released" msgid="2992280481133877025">"ප්‍රතිඵලය: ජාලය මුදා හැර ඇත!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"ප්‍රතිඵලය: ජාලය මුදා හැරීමට අසමත් විය!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"ප්‍රතිඵලය: ජාල ප්‍රිමියම් මිල දී ගැනීමේ දී ව්‍යතිරේකයක්!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"ප්‍රතිඵලය: ජාල ප්‍රිමියම් මිල දී ගැනීමේ දී හිස් ප්‍රතිඵලයක් ලැබිණි!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"ප්‍රතිඵලය: ජාල ප්‍රිමියම් මිල දී ගැනීමට නොමැත!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"ප්‍රතිඵලය: ජාල ප්‍රිමියම් මිල දී ගැනීම සිදු වෙමින් පවතී ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-sk/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-sk/strings.xml
index 229ff5d..89628b4 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-sk/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-sk/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Vyžiadať sieť"</string>
+    <string name="release_network" msgid="174252378593535238">"Vydať sieť"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Výsledok:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Uprednostniť latenciu"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Uprednostniť rýchlosť pripojenia"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Kúpiť prémiovú sieť"</string>
+    <string name="network_available" msgid="4780293262690730734">"Výsledok: požadovaná sieť je už k dispozícii"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Výsledok: sieť bola vyžiadaná"</string>
+    <string name="network_released" msgid="2992280481133877025">"Výsledok: sieť bola vydaná"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Výsledok: sieť sa nepodarilo vydať"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Výsledok: výnimka pri nákupe prémiovej siete"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Výsledok: prázdny výsledok pri nákupe prémiovej siete"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Výsledok: prémiová sieť nie je k dispozícii na zakúpenie"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Výsledok: prebieha nákup prémiovej siete…"</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-sl/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-sl/strings.xml
index b3fd35a..0b94379 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-sl/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-sl/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Prazen del za pozdrav"</string>
+    <string name="request_network" msgid="8945235490804849914">"Zahtevanje omrežja"</string>
+    <string name="release_network" msgid="174252378593535238">"Sprostitev omrežja"</string>
+    <string name="ping" msgid="7890607576220714932">"Zven"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Rezultat:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Podelitev prednosti zakasnitvi"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Podelitev prednosti pasovni širini"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Nakup omrežne naročnine"</string>
+    <string name="network_available" msgid="4780293262690730734">"Rezultat: Zahtevano omrežje je zdaj na voljo."</string>
+    <string name="network_requested" msgid="5646123922691865991">"Rezultat: Omrežje je bilo zahtevano."</string>
+    <string name="network_released" msgid="2992280481133877025">"Rezultat: Omrežje je sproščeno."</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Rezultat: Sprostitev omrežja ni uspela."</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Rezultat: Izjema pri nakupu omrežne naročnine."</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Rezultat: Pri nakupu omrežne naročnine je prišlo do praznega rezultata."</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Rezultat: Omrežna naročnina ni na voljo za nakup."</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Rezultat: Nakup omrežne naročnine je v teku ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-sq/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-sq/strings.xml
index 229ff5d..ccbe35a 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-sq/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-sq/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Kërko rrjetin"</string>
+    <string name="release_network" msgid="174252378593535238">"Publiko rrjetin"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Rezultati:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Jepi përparësi vonesës"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Jepi përparësi gjerësisë së bandës"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Bli rrjetin premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Rezultati: Rrjeti i kërkuar ofrohet tani!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Rezultati: Rrjeti është kërkuar!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Rezultati: Rrjeti është publikuar!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Rezultati: Publikimi i rrjetit dështoi!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Rezultati: Përjashtim kur blihet rrjeti premium!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Rezultati: U mor një rezultat bosh kur u ble rrjeti premium!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Rezultati: Rrjeti premium nuk ofrohet për blerje!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Rezultati: Blerja e rrjetit premium është në vazhdim..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-sr/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-sr/strings.xml
index 229ff5d..60ba624 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-sr/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-sr/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Затражите мрежу"</string>
+    <string name="release_network" msgid="174252378593535238">"Објавите мрежу"</string>
+    <string name="ping" msgid="7890607576220714932">"Пинг"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Резултат:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Дајте приоритет кашњењу"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Дајте приоритет пропусном опсегу"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Купите Premium мрежу"</string>
+    <string name="network_available" msgid="4780293262690730734">"Резултат: Захтевана мрежа је тренутно доступна!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Резултат: Мрежа је затражена!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Резултат: Мрежа је објављена!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Резултат: Објављивање мреже није успело!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Резултат: Изузетак при куповини Premium мреже!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Резултат: Резултат је празан када купујете Premium мрежу!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Резултат: Premium мрежа није доступна за куповину!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Резултат: Куповина Premium мреже је у току..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-sv/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-sv/strings.xml
index 229ff5d..a5c81f6 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-sv/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-sv/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Request Network"</string>
+    <string name="release_network" msgid="174252378593535238">"Release Network"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Result:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Prioritize Latency"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Prioritize Bandwidth"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Purchase Network Premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Result: The requested network is available now!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Result: The network has been requested!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Result: The network has been released!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Result: Failed to release the network!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Result: Exception when purchasing network premium!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Result: Got empty result when purchasing network premium!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Result: The network premium is not available for purchase!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Result: The network premium purchase is in progress ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-sw/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-sw/strings.xml
index 5cc6a6a..c01aa3a 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-sw/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-sw/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Kipande cha salamu kisichokuwa na kitu"</string>
+    <string name="request_network" msgid="8945235490804849914">"Request Network"</string>
+    <string name="release_network" msgid="174252378593535238">"Release Network"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Result:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Prioritize Latency"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Prioritize Bandwidth"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Purchase Network Premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Result: The requested network is available now!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Result: The network has been requested!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Result: The network has been released!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Result: Failed to release the network!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Result: Exception when purchasing network premium!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Result: Got empty result when purchasing network premium!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Result: The network premium is not available for purchase!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Result: The network premium purchase is in progress ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-ta/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-ta/strings.xml
index 229ff5d..2a05673 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-ta/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-ta/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"நெட்வொர்க்கைக் கோரு"</string>
+    <string name="release_network" msgid="174252378593535238">"நெட்வொர்க்கை வெளியிடு"</string>
+    <string name="ping" msgid="7890607576220714932">"பிங்"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"முடிவு:"</string>
+    <string name="latency_title" msgid="963052613947017009">"தாமதத்திற்கு முன்னுரிமை வழங்கு"</string>
+    <string name="bw_title" msgid="3902162973688221344">"இணைய வேகத்திற்கு முன்னுரிமை வழங்கு"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"நெட்வொர்க் பிரீமியத்தை வாங்கு"</string>
+    <string name="network_available" msgid="4780293262690730734">"முடிவு: கோரப்பட்ட நெட்வொர்க் இப்போது கிடைக்கிறது!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"முடிவு: நெட்வொர்க் கோரப்பட்டுள்ளது!"</string>
+    <string name="network_released" msgid="2992280481133877025">"முடிவு: நெட்வொர்க் வெளியிடப்பட்டுள்ளது!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"முடிவு: நெட்வொர்க்கை வெளியிட முடியவில்லை!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"முடிவு: நெட்வொர்க் பிரீமியம் வாங்கும்போது விதிவிலக்கு!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"முடிவு: நெட்வொர்க் பிரீமியம் வாங்கும்போது முடிவு எதுவும் கிடைக்கவில்லை!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"முடிவு: வாங்குவதற்கு நெட்வொர்க் பிரீமியம் கிடைக்கவில்லை!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"முடிவு: நெட்வொர்க் பிரீமியம் வாங்கப்படுகிறது..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-te/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-te/strings.xml
index ad9cef8..43d9a00 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-te/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-te/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"హలో ఖాళీ విడిభాగము"</string>
+    <string name="request_network" msgid="8945235490804849914">"రిక్వెస్ట్ నెట్‌వర్క్"</string>
+    <string name="release_network" msgid="174252378593535238">"నెట్‌వర్క్‌ను రిలీజ్ చేయండి"</string>
+    <string name="ping" msgid="7890607576220714932">"పింగ్"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"ఫలితం:"</string>
+    <string name="latency_title" msgid="963052613947017009">"ప్రతిస్పందన సమయానికి ప్రాధాన్యత ఇవ్వండి"</string>
+    <string name="bw_title" msgid="3902162973688221344">"బ్యాండ్‌విడ్త్‌కు ప్రాధాన్యత ఇవ్వండి"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"ప్రీమియం నెట్‌వర్క్‌ను కొనుగోలు చేయండి"</string>
+    <string name="network_available" msgid="4780293262690730734">"ఫలితం: రిక్వెస్ట్ చేసిన నెట్‌వర్క్ ఇప్పుడు అందుబాటులో ఉంది!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"ఫలితం: నెట్‌వర్క్ రిక్వెస్ట్ చేయబడింది!"</string>
+    <string name="network_released" msgid="2992280481133877025">"ఫలితం: నెట్‌వర్క్ రిలీజ్ చేయబడింది!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"ఫలితం: నెట్‌వర్క్‌ను రిలీజ్ చేయడంలో విఫలమైంది!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"ఫలితం: ప్రీమియం నెట్‌వర్క్‌ను కొనుగోలు చేసేటప్పుడు అరుదైన ఘటన సంభవించింది!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"ఫలితం: ప్రీమియం నెట్‌వర్క్‌ను కొనుగోలు చేసినప్పుడు ఖాళీ ఫలితం వచ్చింది!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"ఫలితం: కొనుగోలు కోసం ప్రీమియం నెట్‌వర్క్ అందుబాటులో లేదు!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"ఫలితం: ప్రీమియం నెట్‌వర్క్ కొనుగోలు ప్రోగ్రెస్‌లో ఉంది ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-th/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-th/strings.xml
index 229ff5d..f0dbee8 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-th/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-th/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"ขอใช้งานเครือข่าย"</string>
+    <string name="release_network" msgid="174252378593535238">"เผยแพร่เครือข่าย"</string>
+    <string name="ping" msgid="7890607576220714932">"ใช้คำสั่ง ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"ผลลัพธ์:"</string>
+    <string name="latency_title" msgid="963052613947017009">"ตั้งเป็นเวลาในการตอบสนองสำคัญ"</string>
+    <string name="bw_title" msgid="3902162973688221344">"ตั้งเป็นแบนด์วิดท์สำคัญ"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"ซื้อเครือข่ายระดับพรีเมียม"</string>
+    <string name="network_available" msgid="4780293262690730734">"ผลลัพธ์: เครือข่ายที่ต้องการพร้อมใช้งานแล้ว"</string>
+    <string name="network_requested" msgid="5646123922691865991">"ผลลัพธ์: ขอใช้งานเครือข่ายแล้ว"</string>
+    <string name="network_released" msgid="2992280481133877025">"ผลลัพธ์: เผยแพร่เครือข่ายแล้ว"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"ผลลัพธ์: เผยแพร่เครือข่ายไม่สําเร็จ"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"ผลลัพธ์: ข้อยกเว้นในการซื้อเครือข่ายระดับพรีเมียม"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"ผลลัพธ์: ได้ผลลัพธ์ว่างเปล่าเมื่อซื้อเครือข่ายระดับพรีเมียม"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"ผลลัพธ์: เครือข่ายระดับพรีเมียมยังไม่พร้อมให้จำหน่าย"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"ผลลัพธ์: กําลังดําเนินการซื้อเครือข่ายระดับพรีเมียม ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-tl/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-tl/strings.xml
index 229ff5d..50897f6 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-tl/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-tl/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Hilingin ang Network"</string>
+    <string name="release_network" msgid="174252378593535238">"I-release ang Network"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Resulta:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Isapriyoridad ang Latency"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Isapriyoridad ang Bandwidth"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Bilhin ang Network Premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Resulta: Available na ang hiniling na network!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Resulta: Hiniling na ang network!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Resulta: Na-release na ang network!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Resulta: Hindi na-release ang network!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Resulta: Nagkakaroon ng exception noong binili ang network premium!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Resulta: Walang nakuhang resulta noong binili ang network premium!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Resulta: Hindi available ang network premium para bilhin!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Resulta: Kasalukuyang binibili ang network premium..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-tr/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-tr/strings.xml
index 1e18a88..d8c2751 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-tr/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-tr/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Merhaba boş bölüm"</string>
+    <string name="request_network" msgid="8945235490804849914">"Request Network"</string>
+    <string name="release_network" msgid="174252378593535238">"Release Network"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Result:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Prioritize Latency"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Prioritize Bandwidth"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Purchase Network Premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Result: The requested network is available now!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Result: The network has been requested!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Result: The network has been released!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Result: Failed to release the network!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Result: Exception when purchasing network premium!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Result: Got empty result when purchasing network premium!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Result: The network premium is not available for purchase!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Result: The network premium purchase is in progress ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-uk/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-uk/strings.xml
index 0219615..a5f6921 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-uk/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-uk/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Пустий фрагмент із привітанням"</string>
+    <string name="request_network" msgid="8945235490804849914">"Надіслати запит на мережу"</string>
+    <string name="release_network" msgid="174252378593535238">"Випустити мережу"</string>
+    <string name="ping" msgid="7890607576220714932">"Перевірити"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Результат:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Надати пріоритет затримці"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Надати пріоритет пропускній спроможності"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Придбати преміум-доступ до мережі"</string>
+    <string name="network_available" msgid="4780293262690730734">"Результат: потрібна мережа тепер доступна."</string>
+    <string name="network_requested" msgid="5646123922691865991">"Результат: надіслано запит на мережу."</string>
+    <string name="network_released" msgid="2992280481133877025">"Результат: мережу звільнено."</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Результат: не вдалося звільнити мережу."</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Результат: виняток під час покупки преміум-доступу до мережі."</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Результат: під час покупки преміум-доступу до мережі отримано пустий результат."</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Результат: преміум-доступ до мережі недоступний для купівлі."</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Результат: триває процес купівлі преміум-доступу до мережі."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-ur/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-ur/strings.xml
index 229ff5d..1068cf1 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-ur/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-ur/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"نیٹ ورک کی درخواست کریں"</string>
+    <string name="release_network" msgid="174252378593535238">"نیٹ ورک ریلیز کریں"</string>
+    <string name="ping" msgid="7890607576220714932">"پنگ"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"نتیجہ:"</string>
+    <string name="latency_title" msgid="963052613947017009">"تاخیر کو ترجیح دیں"</string>
+    <string name="bw_title" msgid="3902162973688221344">"بینڈوتھ کو ترجیح دیں"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"نیٹ ورک پریمیم خریدیں"</string>
+    <string name="network_available" msgid="4780293262690730734">"نتیجہ: درخواست کردہ نیٹ ورک اب دستیاب ہے!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"نتیجہ: نیٹ ورک کی درخواست کی گئی ہے!"</string>
+    <string name="network_released" msgid="2992280481133877025">"نتیجہ: نیٹ ورک ریلیز کر دیا گیا ہے!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"نتیجہ: نیٹ ورک ریلیز کرنے میں ناکام!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"نتیجہ: نیٹ ورک پریمیم کی خریداری کرتے وقت استثنا!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"نتیجہ: نیٹ ورک پریمیم کی خریداری کرتے وقت خالی نتیجہ ملا!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"نتیجہ: نیٹ ورک پریمیم خریداری کے لیے دستیاب نہیں ہے!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"نتیجہ: نیٹ ورک پریمیم خریداری جاری ہے..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-uz/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-uz/strings.xml
index 229ff5d..a0d4547 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-uz/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-uz/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Tarmoqni talab qilish"</string>
+    <string name="release_network" msgid="174252378593535238">"Tarmoqni chiqarish"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Natija:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Kechikish vaqti ustuvorligi"</string>
+    <string name="bw_title" msgid="3902162973688221344">"O‘tkazuvchanlik qobiliyati ustuvorligi"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Tarmoq premiumni xarid qilish"</string>
+    <string name="network_available" msgid="4780293262690730734">"Natija: Talab qilingan tarmoq hozir mavjud!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Natija: Tarmoq talab qilindi!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Natija: Tarmoq chiqarildi!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Natija: Tarmoqni chiqarib bo‘lmadi!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Natija: Tarmoq premiumni xarid qilishda istisno!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Natija: Tarmoq premiumni xarid qilayotganda bo‘sh natijaga erishildi!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Natija: Tarmoq premiumni xarid qilib bo‘lmaydi!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Natija: Tarmoq premium xaridi davom etmoqda ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-vi/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-vi/strings.xml
index 229ff5d..75bb2a3 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-vi/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-vi/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Yêu cầu mạng"</string>
+    <string name="release_network" msgid="174252378593535238">"Phát hành mạng"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Kết quả:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Ưu tiên độ trễ"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Ưu tiên băng thông"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Mua dịch vụ đặc biệt cho mạng"</string>
+    <string name="network_available" msgid="4780293262690730734">"Kết quả: Mạng bạn yêu cầu hiện đã sử dụng được!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Kết quả: Mạng đã được yêu cầu!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Kết quả: Mạng đã được phát hành!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Kết quả: Không phát hành được mạng!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Kết quả: Ngoại lệ khi mua dịch vụ đặc biệt cho mạng!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Kết quả: Đã nhận kết quả không có nội dung khi mua dịch vụ đặc biệt cho mạng!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Kết quả: Không thể mua dịch vụ đặc biệt cho mạng!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Kết quả: Đang xử lý yêu cầu mua dịch vụ đặc biệt cho mạng ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-zh-rCN/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-zh-rCN/strings.xml
index 229ff5d..0f22142 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-zh-rCN/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-zh-rCN/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"请求网络"</string>
+    <string name="release_network" msgid="174252378593535238">"释放网络"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"结果:"</string>
+    <string name="latency_title" msgid="963052613947017009">"划分延迟时间优先级"</string>
+    <string name="bw_title" msgid="3902162973688221344">"划分带宽优先级"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"购买 Network Premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"结果:请求的网络现已可用!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"结果:已请求网络!"</string>
+    <string name="network_released" msgid="2992280481133877025">"结果:已释放网络!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"结果:未能释放网络!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"结果:购买 Network Premium 时出现异常!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"结果:购买 Network Premium 时获得空的结果!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"结果:无法购买 Network Premium!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"结果:正在购买 Network Premium…"</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-zh-rHK/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-zh-rHK/strings.xml
index 93c0492..18e7286 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-zh-rHK/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-zh-rHK/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"歡迎詞空白片段"</string>
+    <string name="request_network" msgid="8945235490804849914">"要求網絡"</string>
+    <string name="release_network" msgid="174252378593535238">"釋出網絡"</string>
+    <string name="ping" msgid="7890607576220714932">"Ping"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"結果:"</string>
+    <string name="latency_title" msgid="963052613947017009">"以延遲時間為優先"</string>
+    <string name="bw_title" msgid="3902162973688221344">"以頻寬為優先"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"購買進階網絡"</string>
+    <string name="network_available" msgid="4780293262690730734">"結果:要求的網絡現可使用!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"結果:已要求網絡!"</string>
+    <string name="network_released" msgid="2992280481133877025">"結果:已釋出網絡!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"結果:無法釋出網絡!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"結果:購買進階網絡時出現例外情況!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"結果:購買進階網絡時獲得空白結果!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Result: The network premium is not available for purchase!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"結果:進階網絡購買過程正在進行…"</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-zh-rTW/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-zh-rTW/strings.xml
index 229ff5d..3307122 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-zh-rTW/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-zh-rTW/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"要求網路"</string>
+    <string name="release_network" msgid="174252378593535238">"發布網路"</string>
+    <string name="ping" msgid="7890607576220714932">"連線偵測 (ping)"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"結果:"</string>
+    <string name="latency_title" msgid="963052613947017009">"優先處理延遲"</string>
+    <string name="bw_title" msgid="3902162973688221344">"優先處理頻寬"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"購買網路付費項目"</string>
+    <string name="network_available" msgid="4780293262690730734">"結果:要求的網路現已可供使用!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"結果:已要求網路!"</string>
+    <string name="network_released" msgid="2992280481133877025">"結果:已發布網路!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"結果:無法發布網路!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"結果:購買網路付費項目時發生例外狀況!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"結果:購買網路付費項目時收到空白結果!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"結果:無法購買網路付費項目!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"結果:正在購買網路付費項目..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values-zu/strings.xml b/testapps/TestSliceApp/app/src/main/res/values-zu/strings.xml
index 229ff5d..3f329f3 100644
--- a/testapps/TestSliceApp/app/src/main/res/values-zu/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values-zu/strings.xml
@@ -3,4 +3,20 @@
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_name" msgid="1265450418387661962">"TestSliceApp"</string>
     <string name="hello_blank_fragment" msgid="1245093642770491175">"Hello blank fragment"</string>
+    <string name="request_network" msgid="8945235490804849914">"Cela Inethiwekhi"</string>
+    <string name="release_network" msgid="174252378593535238">"Khulula Inethiwekhi"</string>
+    <string name="ping" msgid="7890607576220714932">"Qhweba"</string>
+    <string name="result_prefix" msgid="3522796186427501399">"Umphumela:"</string>
+    <string name="latency_title" msgid="963052613947017009">"Beka kuqala Ukubambezeleka"</string>
+    <string name="bw_title" msgid="3902162973688221344">"Beka kuqala Umkhawulokudonsa"</string>
+    <string name="cbs_title" msgid="5234410535569935600">"I-CBS"</string>
+    <string name="purchase" msgid="7843181995697372128">"Thenga Inethiwekhi ye-Premium"</string>
+    <string name="network_available" msgid="4780293262690730734">"Umphumela: Inethiwekhi eceliwe isiyatholakala manje!"</string>
+    <string name="network_requested" msgid="5646123922691865991">"Umphumela: Inethiwekhi iceliwe!"</string>
+    <string name="network_released" msgid="2992280481133877025">"Umphumela: Inethiwekhi isikhishiwe!"</string>
+    <string name="network_release_failed" msgid="256471231420029151">"Umphumela: Yehlulekile ukukhipha inethiwekhi!!!"</string>
+    <string name="purchase_exception" msgid="8876841120055716671">"Umphumela: Okuhlukile lapho uthenga nethiwekhi ye-premium!!!"</string>
+    <string name="purchase_empty_result" msgid="7497824191649973928">"Umphumela: Uthole umphumela ongenalutho lapho uthenga wenethiwekhi ye-premium!!!"</string>
+    <string name="premium_not_available" msgid="7346368693802644748">"Umphumela: Inethiwekhi ye-premium ayitholakaleli ukuthengwa!!!"</string>
+    <string name="purchase_in_progress" msgid="5450288183685032424">"Umphumela: Ukuthengwa kwenethiwekhi ye-premium kuyaqhubeka ..."</string>
 </resources>
diff --git a/testapps/TestSliceApp/app/src/main/res/values/strings.xml b/testapps/TestSliceApp/app/src/main/res/values/strings.xml
index c2bb089..4990cec 100644
--- a/testapps/TestSliceApp/app/src/main/res/values/strings.xml
+++ b/testapps/TestSliceApp/app/src/main/res/values/strings.xml
@@ -1,5 +1,20 @@
-<resources>
+<resources xmlns:tools="http://schemas.android.com/tools">
   <string name="app_name">TestSliceApp</string>
-  <!-- TODO: Remove or change this placeholder text -->
   <string name="hello_blank_fragment">Hello blank fragment</string>
+  <string name="request_network">Request Network</string>
+  <string name="release_network">Release Network</string>
+  <string name="ping">Ping</string>
+  <string name="result_prefix">Result: </string>
+  <string name="latency_title">Prioritize Latency</string>
+  <string name="bw_title">Prioritize Bandwidth</string>
+  <string name="cbs_title">CBS</string>
+  <string name="purchase">Purchase Network Premium</string>
+  <string name="network_available">Result: The requested network is available now!</string>
+  <string name="network_requested">Result: The network has been requested!</string>
+  <string name="network_released">Result: The network has been released!</string>
+  <string name="network_release_failed">Result: Failed to release the network!!!</string>
+  <string name="purchase_exception">Result: Exception when purchasing network premium!!!</string>
+  <string name="purchase_empty_result">Result: Got empty result when purchasing network premium!!!</string>
+  <string name="premium_not_available">Result: The network premium is not available for purchase!!!</string>
+  <string name="purchase_in_progress">Result: The network premium purchase is in progress ...</string>
 </resources>
\ No newline at end of file
diff --git a/tests/src/com/android/TelephonyTestBase.java b/tests/src/com/android/TelephonyTestBase.java
index ffda81b..d72d85e 100644
--- a/tests/src/com/android/TelephonyTestBase.java
+++ b/tests/src/com/android/TelephonyTestBase.java
@@ -24,10 +24,16 @@
 
 import com.android.internal.telephony.PhoneConfigurationManager;
 
+import org.junit.After;
+import org.junit.Before;
 import org.junit.Rule;
 import org.mockito.junit.MockitoJUnit;
 import org.mockito.junit.MockitoRule;
 
+import java.lang.reflect.Field;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.Executor;
 import java.util.concurrent.TimeUnit;
@@ -40,6 +46,10 @@
 
     protected TestContext mContext;
 
+    private final HashMap<InstanceKey, Object> mOldInstances = new HashMap<>();
+    private final LinkedList<InstanceKey> mInstanceKeys = new LinkedList<>();
+
+    @Before
     public void setUp() throws Exception {
         mContext = spy(new TestContext());
         // Set up the looper if it does not exist on the test thread.
@@ -56,9 +66,11 @@
         }
     }
 
+    @After
     public void tearDown() throws Exception {
         // Ensure there are no static references to handlers after test completes.
         PhoneConfigurationManager.unregisterAllMultiSimConfigChangeRegistrants();
+        restoreInstances();
     }
 
     protected final boolean waitForExecutorAction(Executor executor, long timeoutMillis) {
@@ -108,6 +120,61 @@
         }
     }
 
+    protected synchronized void replaceInstance(final Class c, final String instanceName,
+            final Object obj, final Object newValue)
+            throws Exception {
+        Field field = c.getDeclaredField(instanceName);
+        field.setAccessible(true);
+
+        InstanceKey key = new InstanceKey(c, instanceName, obj);
+        if (!mOldInstances.containsKey(key)) {
+            mOldInstances.put(key, field.get(obj));
+            mInstanceKeys.add(key);
+        }
+        field.set(obj, newValue);
+    }
+
+    private synchronized void restoreInstances() throws Exception {
+        Iterator<InstanceKey> it = mInstanceKeys.descendingIterator();
+
+        while (it.hasNext()) {
+            InstanceKey key = it.next();
+            Field field = key.mClass.getDeclaredField(key.mInstName);
+            field.setAccessible(true);
+            field.set(key.mObj, mOldInstances.get(key));
+        }
+
+        mInstanceKeys.clear();
+        mOldInstances.clear();
+    }
+
+    private static class InstanceKey {
+        public final Class mClass;
+        public final String mInstName;
+        public final Object mObj;
+        InstanceKey(final Class c, final String instName, final Object obj) {
+            mClass = c;
+            mInstName = instName;
+            mObj = obj;
+        }
+
+        @Override
+        public int hashCode() {
+            return (mClass.getName().hashCode() * 31 + mInstName.hashCode()) * 31;
+        }
+
+        @Override
+        public boolean equals(Object obj) {
+            if (obj == null || obj.getClass() != getClass()) {
+                return false;
+            }
+
+            InstanceKey other = (InstanceKey) obj;
+            return (other.mClass == mClass && other.mInstName.equals(mInstName)
+                    && other.mObj == mObj);
+        }
+    }
+
     protected TestContext getTestContext() {
         return mContext;
     }
diff --git a/tests/src/com/android/TestContext.java b/tests/src/com/android/TestContext.java
index 7edbed9..7c3a842 100644
--- a/tests/src/com/android/TestContext.java
+++ b/tests/src/com/android/TestContext.java
@@ -31,6 +31,7 @@
 import android.os.Looper;
 import android.os.PersistableBundle;
 import android.os.Process;
+import android.os.UserManager;
 import android.telecom.TelecomManager;
 import android.telephony.CarrierConfigManager;
 import android.telephony.SubscriptionManager;
@@ -58,6 +59,7 @@
     @Mock TelephonyManager mMockTelephonyManager;
     @Mock SubscriptionManager mMockSubscriptionManager;
     @Mock ImsManager mMockImsManager;
+    @Mock UserManager mMockUserManager;
 
     private SparseArray<PersistableBundle> mCarrierConfigs = new SparseArray<>();
 
@@ -147,6 +149,9 @@
             case(Context.TELEPHONY_IMS_SERVICE) : {
                 return mMockImsManager;
             }
+            case(Context.USER_SERVICE) : {
+                return mMockUserManager;
+            }
         }
         return null;
     }
@@ -165,6 +170,9 @@
         if (serviceClass == SubscriptionManager.class) {
             return Context.TELEPHONY_SUBSCRIPTION_SERVICE;
         }
+        if (serviceClass == UserManager.class) {
+            return Context.USER_SERVICE;
+        }
         return null;
     }
 
diff --git a/tests/src/com/android/phone/CarrierConfigLoaderTest.java b/tests/src/com/android/phone/CarrierConfigLoaderTest.java
index 60c3a84..9c425d6 100644
--- a/tests/src/com/android/phone/CarrierConfigLoaderTest.java
+++ b/tests/src/com/android/phone/CarrierConfigLoaderTest.java
@@ -192,6 +192,7 @@
      * will return the right config in the XML.
      */
     @Test
+    @Ignore("b/257169357")
     public void testUpdateConfigForPhoneId_simLoaded_withCachedConfigInXml() throws Exception {
         // Bypass case if default subId is not supported by device to reduce flakiness
         if (!SubscriptionManager.isValidPhoneId(SubscriptionManager.getPhoneId(DEFAULT_SUB_ID))) {
diff --git a/tests/src/com/android/phone/ImsStateCallbackControllerTest.java b/tests/src/com/android/phone/ImsStateCallbackControllerTest.java
index 60374bc..2bd87be 100644
--- a/tests/src/com/android/phone/ImsStateCallbackControllerTest.java
+++ b/tests/src/com/android/phone/ImsStateCallbackControllerTest.java
@@ -52,6 +52,7 @@
 import android.testing.TestableLooper;
 import android.util.Log;
 
+import com.android.TelephonyTestBase;
 import com.android.ims.FeatureConnector;
 import com.android.ims.ImsManager;
 import com.android.ims.RcsFeatureManager;
@@ -70,13 +71,12 @@
 import org.mockito.invocation.InvocationOnMock;
 import org.mockito.stubbing.Answer;
 
-import java.lang.reflect.Field;
 import java.util.concurrent.Executor;
 
 /**
  * Unit tests for RcsProvisioningMonitor
  */
-public class ImsStateCallbackControllerTest {
+public class ImsStateCallbackControllerTest extends TelephonyTestBase {
     private static final String TAG = "ImsStateCallbackControllerTest";
     private static final int FAKE_SUB_ID_BASE = 0x0FFFFFF0;
 
@@ -189,6 +189,7 @@
             mLooper.destroy();
             mLooper = null;
         }
+        super.tearDown();
     }
 
     @Test
@@ -952,13 +953,6 @@
         }
     }
 
-    private static void replaceInstance(final Class c,
-            final String instanceName, final Object obj, final Object newValue) throws Exception {
-        Field field = c.getDeclaredField(instanceName);
-        field.setAccessible(true);
-        field.set(obj, newValue);
-    }
-
     private void makeFakeActiveSubIds(int count) {
         final int[] subIds = new int[count];
         for (int i = 0; i < count; i++) {
diff --git a/tests/src/com/android/phone/NotificationMgrTest.java b/tests/src/com/android/phone/NotificationMgrTest.java
index a6ee276..3e8cf28 100644
--- a/tests/src/com/android/phone/NotificationMgrTest.java
+++ b/tests/src/com/android/phone/NotificationMgrTest.java
@@ -62,6 +62,7 @@
 import android.os.UserManager;
 import android.telecom.TelecomManager;
 import android.telephony.CarrierConfigManager;
+import android.telephony.NetworkRegistrationInfo;
 import android.telephony.ServiceState;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
@@ -69,9 +70,15 @@
 import android.testing.AndroidTestingRunner;
 import android.testing.TestableLooper;
 
+import com.android.TelephonyTestBase;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneConstants;
 import com.android.internal.telephony.PhoneFactory;
+import com.android.internal.telephony.ServiceStateTracker;
+import com.android.internal.telephony.SignalStrengthController;
+import com.android.internal.telephony.data.DataConfigManager;
+import com.android.internal.telephony.data.DataNetworkController;
+import com.android.internal.telephony.data.DataSettingsManager;
 import com.android.internal.telephony.util.NotificationChannelController;
 
 import org.junit.Before;
@@ -81,15 +88,14 @@
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
-import java.lang.reflect.Field;
+import java.util.Collections;
 
 /**
  * Unit Test for NotificationMgr
  */
 @RunWith(AndroidTestingRunner.class)
 @TestableLooper.RunWithLooper
-public class NotificationMgrTest {
-
+public class NotificationMgrTest extends TelephonyTestBase {
     private static final int TEST_SUB_ID = 1;
     private static final long SERIAL_NUMBER_OF_USER = 1234567L;
     private static final String TEST_LABEL_CF = "test_call_forwarding";
@@ -111,8 +117,14 @@
     @Mock NotificationManager mNotificationManager;
     @Mock SubscriptionInfo mSubscriptionInfo;
     @Mock Resources mResources;
+    @Mock Context mMockedContext;
+    @Mock ServiceStateTracker mServiceStateTracker;
     @Mock ServiceState mServiceState;
     @Mock CarrierConfigManager mCarrierConfigManager;
+    @Mock DataNetworkController mDataNetworkController;
+    @Mock DataSettingsManager mDataSettingsManager;
+    @Mock DataConfigManager mDataConfigManager;
+    @Mock SignalStrengthController mSignalStrengthController;
 
     private Phone[] mPhones;
     private NotificationMgr mNotificationMgr;
@@ -123,6 +135,23 @@
         mPhones = new Phone[]{mPhone};
         replaceInstance(PhoneFactory.class, "sPhones", null, mPhones);
         when(mPhone.getPhoneType()).thenReturn(PhoneConstants.PHONE_TYPE_GSM);
+        when(mPhone.getContext()).thenReturn(mMockedContext);
+        when(mMockedContext.getResources()).thenReturn(mResources);
+        when(mPhone.getServiceState()).thenReturn(mServiceState);
+        when(mServiceState.getNetworkRegistrationInfo(anyInt(), anyInt())).thenReturn(
+                new NetworkRegistrationInfo.Builder()
+                        .setAccessNetworkTechnology(TelephonyManager.NETWORK_TYPE_LTE)
+                        .setRegistrationState(NetworkRegistrationInfo.REGISTRATION_STATE_HOME)
+                        .build());
+        when(mPhone.getServiceStateTracker()).thenReturn(mServiceStateTracker);
+        mServiceStateTracker.mSS = mServiceState;
+        when(mPhone.getSignalStrengthController()).thenReturn(mSignalStrengthController);
+        when(mPhone.getDataNetworkController()).thenReturn(mDataNetworkController);
+        when(mDataNetworkController.getInternetDataDisallowedReasons()).thenReturn(
+                Collections.emptyList());
+        when(mDataNetworkController.getDataConfigManager()).thenReturn(mDataConfigManager);
+        when(mPhone.getDataSettingsManager()).thenReturn(mDataSettingsManager);
+        when(mDataSettingsManager.isDataEnabledForReason(anyInt())).thenReturn(true);
         when(mApp.getSharedPreferences(anyString(), anyInt())).thenReturn(mSharedPreferences);
 
         when(mApp.getPackageName()).thenReturn(TEST_PACKAGE_NAME);
@@ -157,8 +186,7 @@
     }
 
     @Test
-    public void testUpdateCfi_visible_noActiveSubscription_notificationNeverSent()
-            throws Exception {
+    public void testUpdateCfi_visible_noActiveSubscription_notificationNeverSent() {
         // Given no active subscription available
         when(mSubscriptionManager.getActiveSubscriptionInfo(eq(TEST_SUB_ID))).thenReturn(null);
 
@@ -170,7 +198,7 @@
     }
 
     @Test
-    public void testUpdateCfi_visible_hasActiveSub_singleSIM_notificationSent() throws Exception {
+    public void testUpdateCfi_visible_hasActiveSub_singleSIM_notificationSent() {
         when(mTelephonyManager.getPhoneCount()).thenReturn(1);
         when(mSubscriptionManager.getActiveSubscriptionInfo(eq(TEST_SUB_ID))).thenReturn(
                 mSubscriptionInfo);
@@ -181,8 +209,7 @@
     }
 
     @Test
-    public void testUpdateCfi_visible_hasActiveSub_multiSIM_notificationSentWithoutDisplayName()
-            throws Exception {
+    public void testUpdateCfi_visible_hasActiveSub_multiSIM_notificationSentWithoutDisplayName() {
         when(mTelephonyManager.getPhoneCount()).thenReturn(2);
         when(mSubscriptionManager.getActiveSubscriptionInfo(eq(TEST_SUB_ID))).thenReturn(
                 mSubscriptionInfo);
@@ -194,8 +221,7 @@
     }
 
     @Test
-    public void testUpdateCfi_visible_hasActiveSub_multiSIM_notificationSentWithDisplayName()
-            throws Exception {
+    public void testUpdateCfi_visible_hasActiveSub_multiSIM_notificationSentWithDisplayName() {
         when(mTelephonyManager.getPhoneCount()).thenReturn(2);
         when(mSubscriptionManager.getActiveSubscriptionInfo(eq(TEST_SUB_ID))).thenReturn(
                 mSubscriptionInfo);
@@ -207,8 +233,7 @@
     }
 
     @Test
-    public void testUpdateCfi_invisible_hasUnmanagedProfile_notificationCanceled()
-            throws Exception {
+    public void testUpdateCfi_invisible_hasUnmanagedProfile_notificationCanceled() {
         when(mUserManager.isManagedProfile(anyInt())).thenReturn(false);
 
         mNotificationMgr.updateCfi(TEST_SUB_ID, /*visible=*/false, /*isFresh=*/false);
@@ -217,8 +242,7 @@
     }
 
     @Test
-    public void testUpdateCfi_invisible_allProfilesAreManaged_notificationNeverCanceled()
-            throws Exception {
+    public void testUpdateCfi_invisible_allProfilesAreManaged_notificationNeverCanceled() {
         when(mUserManager.isManagedProfile(anyInt())).thenReturn(true);
 
         mNotificationMgr.updateCfi(TEST_SUB_ID, /*visible=*/false, /*isFresh=*/false);
@@ -227,7 +251,7 @@
     }
 
     @Test
-    public void testShowDataRoamingNotification_roamingOn() throws Exception {
+    public void testShowDataRoamingNotification_roamingOn() {
         mNotificationMgr.showDataRoamingNotification(TEST_SUB_ID, /*roamingOn=*/true);
 
         verifyNotificationSentWithChannelId(
@@ -235,7 +259,7 @@
     }
 
     @Test
-    public void testShowDataRoamingNotification_roamingOff() throws Exception {
+    public void testShowDataRoamingNotification_roamingOff() {
         mNotificationMgr.showDataRoamingNotification(TEST_SUB_ID, /*roamingOn=*/false);
 
         verifyNotificationSentWithChannelId(
@@ -250,8 +274,7 @@
     }
 
     @Test
-    public void testUpdateNetworkSelection_justOutOfService_notificationNeverSent()
-            throws Exception {
+    public void testUpdateNetworkSelection_justOutOfService_notificationNeverSent() {
         prepareResourcesForNetworkSelection();
 
         mNotificationMgr.updateNetworkSelection(ServiceState.STATE_OUT_OF_SERVICE, TEST_SUB_ID);
@@ -265,8 +288,7 @@
     }
 
     @Test
-    public void testUpdateNetworkSelection_oosEnoughTime_selectionVisibleToUser_notificationSent()
-            throws Exception {
+    public void testUpdateNetworkSelection_oosEnoughTime_selectionVisibleToUser_notificationSent() {
         prepareResourcesForNetworkSelection();
         when(mTelephonyManager.isManualNetworkSelectionAllowed()).thenReturn(true);
         PersistableBundle config = new PersistableBundle();
@@ -288,8 +310,7 @@
     }
 
     @Test
-    public void testUpdateNetworkSelection_invalidSubscription_notificationNotSent()
-            throws Exception {
+    public void testUpdateNetworkSelection_invalidSubscription_notificationNotSent() {
         prepareResourcesForNetworkSelection();
         when(mTelephonyManager.isManualNetworkSelectionAllowed()).thenReturn(true);
         PersistableBundle config = new PersistableBundle();
@@ -312,8 +333,7 @@
     }
 
     @Test
-    public void testUpdateNetworkSelection_nullCarrierConfig_notificationNotSent()
-            throws Exception {
+    public void testUpdateNetworkSelection_nullCarrierConfig_notificationNotSent() {
         prepareResourcesForNetworkSelection();
 
         when(mCarrierConfigManager.getConfigForSubId(TEST_SUB_ID)).thenReturn(null);
@@ -329,8 +349,7 @@
     }
 
     @Test
-    public void testUpdateNetworkSelection_userNotAllowedToChooseOperator_notificationNotSent()
-            throws Exception {
+    public void testUpdateNetworkSelection_userNotAllowedToChooseOperator_notificationNotSent() {
         prepareResourcesForNetworkSelection();
 
         PersistableBundle config = new PersistableBundle();
@@ -353,8 +372,8 @@
     }
 
     @Test
-    public void testUpdateNetworkSelection_OverrideHideCarrierNetworkSelection_notificationNotSent()
-            throws Exception {
+    public void
+            testUpdateNetworkSelection_OverrideHideCarrierNetworkSelection_notificationNotSent() {
         prepareResourcesForNetworkSelection();
 
         PersistableBundle config = new PersistableBundle();
@@ -401,8 +420,7 @@
     }
 
     @Test
-    public void testUpdateNetworkSelection_worldMode_userSetLTE_notificationNotSent()
-            throws Exception {
+    public void testUpdateNetworkSelection_worldMode_userSetLTE_notificationNotSent() {
         prepareResourcesForNetworkSelection();
 
         PersistableBundle config = new PersistableBundle();
@@ -431,8 +449,7 @@
     }
 
     @Test
-    public void testUpdateNetworkSelection_worldMode_userSetTDSCDMA_notSupported_notifNotSent()
-            throws Exception {
+    public void testUpdateNetworkSelection_worldMode_userSetTDSCDMA_notSupported_notifNotSent() {
         prepareResourcesForNetworkSelection();
 
         PersistableBundle config = new PersistableBundle();
@@ -462,8 +479,7 @@
     }
 
     @Test
-    public void testUpdateNetworkSelection_worldMode_userSetWCDMA_notificationSent()
-            throws Exception {
+    public void testUpdateNetworkSelection_worldMode_userSetWCDMA_notificationSent() {
         prepareResourcesForNetworkSelection();
 
         PersistableBundle config = new PersistableBundle();
@@ -494,8 +510,7 @@
     }
 
     @Test
-    public void testUpdateNetworkSelection_worldPhone_networkSelectionNotHide_notificationSent()
-            throws Exception {
+    public void testUpdateNetworkSelection_worldPhone_networkSelectionNotHide_notificationSent() {
         prepareResourcesForNetworkSelection();
 
         PersistableBundle config = new PersistableBundle();
@@ -519,8 +534,7 @@
     }
 
     @Test
-    public void testUpdateNetworkSelection_gsmBasicOptionOn_notificationSent()
-            throws Exception {
+    public void testUpdateNetworkSelection_gsmBasicOptionOn_notificationSent() {
         prepareResourcesForNetworkSelection();
 
         PersistableBundle config = new PersistableBundle();
@@ -545,8 +559,7 @@
     }
 
     @Test
-    public void testUpdateNetworkSelection_gsmBasicOptionOff_notificationNotSent()
-            throws Exception {
+    public void testUpdateNetworkSelection_gsmBasicOptionOff_notificationNotSent() {
         prepareResourcesForNetworkSelection();
 
         PersistableBundle config = new PersistableBundle();
@@ -569,8 +582,7 @@
     }
 
     @Test
-    public void testShowLimitedSimFunctionWarningNotification_forTheFirstTime_notificationSent()
-            throws Exception {
+    public void testShowLimitedSimFunctionWarningNotification_forTheFirstTime_notificationSent() {
         when(mResources.getText(R.string.limited_sim_function_notification_message)).thenReturn(
                 CARRIER_NAME);
         when(mResources.getText(
@@ -584,8 +596,8 @@
     }
 
     @Test
-    public void testShowLimitedSimFunctionWarningNotification_consecutiveCall_notificationSentOnce()
-            throws Exception {
+    public void
+            testShowLimitedSimFunctionWarningNotification_consecutiveCall_notificationSentOnce() {
         when(mResources.getText(R.string.limited_sim_function_notification_message)).thenReturn(
                 CARRIER_NAME);
         when(mResources.getText(
@@ -602,8 +614,7 @@
     }
 
     @Test
-    public void testDismissLimitedSimFunctionWarningNotification_noShowCalledBefore_noCancelSent()
-            throws Exception {
+    public void testDismissLimitedSimFunctionWarningNotification_noShowCalledBefore_noCancelSent() {
         // showLimitedSimFunctionWarningNotification was never called before
 
         mNotificationMgr.dismissLimitedSimFunctionWarningNotification(TEST_SUB_ID);
@@ -612,8 +623,7 @@
     }
 
     @Test
-    public void testDismissLimitedSimFunctionWarningNotification_showCalledBefore_cancelSent()
-            throws Exception {
+    public void testDismissLimitedSimFunctionWarningNotification_showCalledBefore_cancelSent() {
         when(mResources.getText(R.string.limited_sim_function_notification_message)).thenReturn(
                 CARRIER_NAME);
         when(mResources.getText(
@@ -651,11 +661,4 @@
         when(mApp.getString(R.string.mobile_network_settings_class)).thenReturn(
                 MOBILE_NETWORK_SELECTION_CLASS);
     }
-
-    private static void replaceInstance(final Class c,
-            final String instanceName, final Object obj, final Object newValue) throws Exception {
-        Field field = c.getDeclaredField(instanceName);
-        field.setAccessible(true);
-        field.set(obj, newValue);
-    }
 }
diff --git a/tests/src/com/android/phone/PhoneInterfaceManagerTest.java b/tests/src/com/android/phone/PhoneInterfaceManagerTest.java
index 08bdb9b..6e4a65f 100644
--- a/tests/src/com/android/phone/PhoneInterfaceManagerTest.java
+++ b/tests/src/com/android/phone/PhoneInterfaceManagerTest.java
@@ -17,11 +17,22 @@
 package com.android.phone;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertThrows;
+import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.anyInt;
+import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.doThrow;
+import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
 
-import android.content.pm.PackageManager;
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.res.Resources;
 import android.telephony.RadioAccessFamily;
 import android.telephony.TelephonyManager;
 
@@ -33,11 +44,9 @@
 import com.android.internal.telephony.RILConstants;
 
 import org.junit.Before;
-import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
 
 import java.util.Locale;
 
@@ -47,23 +56,24 @@
 @RunWith(AndroidJUnit4.class)
 public class PhoneInterfaceManagerTest extends TelephonyTestBase {
     private PhoneInterfaceManager mPhoneInterfaceManager;
+    private SharedPreferences mSharedPreferences;
 
     @Mock
     PhoneGlobals mPhoneGlobals;
     @Mock
     Phone mPhone;
-    @Mock
-    PackageManager mPackageManager;
 
     @Before
     @UiThreadTest
     public void setUp() throws Exception {
         super.setUp();
-        MockitoAnnotations.initMocks(this);
-        doReturn(mPackageManager).when(mPhoneGlobals).getPackageManager();
-        doReturn(false).when(mPackageManager).hasSystemFeature(
-                PackageManager.FEATURE_TELEPHONY_IMS);
-        mPhoneInterfaceManager = PhoneInterfaceManager.init(mPhoneGlobals);
+        // Note that PhoneInterfaceManager is a singleton. Calling init gives us a handle to the
+        // global singleton, but the context that is passed in is unused if the phone app is already
+        // alive on a test devices. You must use the spy to mock behavior. Mocks stemming from the
+        // passed context will remain unused.
+        mPhoneInterfaceManager = spy(PhoneInterfaceManager.init(mPhoneGlobals));
+        mSharedPreferences = mPhoneInterfaceManager.getSharedPreferences();
+        mSharedPreferences.edit().remove(Phone.PREF_NULL_CIPHER_AND_INTEGRITY_ENABLED).commit();
     }
 
     @Test
@@ -91,18 +101,126 @@
     }
 
     @Test
-    @Ignore("b/254731907")
+    public void matchLocaleFromSupportedLocaleList_inputLocaleChangeToSupportedLocale_notMatched() {
+        Context context = mock(Context.class);
+        when(mPhone.getContext()).thenReturn(context);
+        Resources resources = mock(Resources.class);
+        when(context.getResources()).thenReturn(resources);
+        when(resources.getStringArray(anyInt()))
+                .thenReturn(new String[]{"fi-FI", "ff-Adlm-BF", "en-US"});
+
+        // Input empty string, then return default locale of ICU.
+        String resultInputEmpty = mPhoneInterfaceManager.matchLocaleFromSupportedLocaleList(mPhone,
+                Locale.forLanguageTag(""));
+
+        assertEquals("und", resultInputEmpty);
+
+        // Input en, then look up the matched supported locale. No matched, so return input locale.
+        String resultOnlyLanguage = mPhoneInterfaceManager.matchLocaleFromSupportedLocaleList(
+                mPhone,
+                Locale.forLanguageTag("en"));
+
+        assertEquals("en", resultOnlyLanguage);
+    }
+
+    @Test
     public void matchLocaleFromSupportedLocaleList_inputLocaleChangeToSupportedLocale() {
+        Context context = mock(Context.class);
+        when(mPhone.getContext()).thenReturn(context);
+        Resources resources = mock(Resources.class);
+        when(context.getResources()).thenReturn(resources);
+        when(resources.getStringArray(anyInt())).thenReturn(new String[]{"zh-Hant-TW"});
+
         // Input zh-TW, then look up the matched supported locale, zh-Hant-TW, instead.
-        String result1 = mPhoneInterfaceManager.matchLocaleFromSupportedLocaleList(
+        String resultInputZhTw = mPhoneInterfaceManager.matchLocaleFromSupportedLocaleList(mPhone,
                 Locale.forLanguageTag("zh-TW"));
 
-        assertEquals(result1, "zh-Hant-TW");
+        assertEquals("zh-Hant-TW", resultInputZhTw);
+
+        when(resources.getStringArray(anyInt())).thenReturn(
+                new String[]{"fi-FI", "ff-Adlm-BF", "ff-Latn-BF"});
 
         // Input ff-BF, then find the matched supported locale, ff-Latn-BF, instead.
-        String result2 = mPhoneInterfaceManager.matchLocaleFromSupportedLocaleList(
+        String resultFfBf = mPhoneInterfaceManager.matchLocaleFromSupportedLocaleList(mPhone,
                 Locale.forLanguageTag("ff-BF"));
 
-        assertEquals(result2, "ff-Latn-BF");
+        assertEquals("ff-Latn-BF", resultFfBf);
+    }
+
+    @Test
+    public void setNullCipherAndIntegrityEnabled_successfullyEnable() {
+        doReturn(201).when(mPhoneInterfaceManager).getHalVersion(anyInt());
+        doNothing().when(mPhoneInterfaceManager).enforceModifyPermission();
+        assertFalse(mSharedPreferences.contains(Phone.PREF_NULL_CIPHER_AND_INTEGRITY_ENABLED));
+
+        mPhoneInterfaceManager.setNullCipherAndIntegrityEnabled(true);
+
+        assertTrue(
+                mSharedPreferences.getBoolean(Phone.PREF_NULL_CIPHER_AND_INTEGRITY_ENABLED, false));
+    }
+
+    @Test
+    public void setNullCipherAndIntegrityEnabled_successfullyDisable() {
+        doReturn(201).when(mPhoneInterfaceManager).getHalVersion(anyInt());
+        doNothing().when(mPhoneInterfaceManager).enforceModifyPermission();
+        assertFalse(mSharedPreferences.contains(Phone.PREF_NULL_CIPHER_AND_INTEGRITY_ENABLED));
+
+        mPhoneInterfaceManager.setNullCipherAndIntegrityEnabled(false);
+
+        assertFalse(
+                mSharedPreferences.getBoolean(Phone.PREF_NULL_CIPHER_AND_INTEGRITY_ENABLED, true));
+    }
+
+    @Test
+    public void setNullCipherAndIntegrityEnabled_lackingNecessaryHal() {
+        doReturn(101).when(mPhoneInterfaceManager).getHalVersion(anyInt());
+        doNothing().when(mPhoneInterfaceManager).enforceModifyPermission();
+
+        assertThrows(UnsupportedOperationException.class, () -> {
+            mPhoneInterfaceManager.setNullCipherAndIntegrityEnabled(true);
+        });
+
+    }
+
+    @Test
+    public void setNullCipherAndIntegrityEnabled_lackingPermissions() {
+        doReturn(201).when(mPhoneInterfaceManager).getHalVersion(anyInt());
+        doThrow(SecurityException.class).when(mPhoneInterfaceManager).enforceModifyPermission();
+
+        assertThrows(SecurityException.class, () -> {
+            mPhoneInterfaceManager.setNullCipherAndIntegrityEnabled(true);
+        });
+    }
+
+    @Test
+    public void isNullCipherAndIntegrityPreferenceEnabled() {
+        doReturn(201).when(mPhoneInterfaceManager).getHalVersion(anyInt());
+        doNothing().when(mPhoneInterfaceManager).enforceModifyPermission();
+
+        assertTrue(mPhoneInterfaceManager.isNullCipherAndIntegrityPreferenceEnabled());
+        mPhoneInterfaceManager.setNullCipherAndIntegrityEnabled(false);
+        assertFalse(
+                mSharedPreferences.getBoolean(Phone.PREF_NULL_CIPHER_AND_INTEGRITY_ENABLED, true));
+    }
+
+    @Test
+    public void isNullCipherAndIntegrityPreferenceEnabled_lackingNecessaryHal() {
+        doReturn(101).when(mPhoneInterfaceManager).getHalVersion(anyInt());
+        doNothing().when(mPhoneInterfaceManager).enforceModifyPermission();
+
+        assertThrows(UnsupportedOperationException.class, () -> {
+            mPhoneInterfaceManager.isNullCipherAndIntegrityPreferenceEnabled();
+        });
+
+    }
+
+    @Test
+    public void isNullCipherAndIntegrityPreferenceEnabled_lackingPermissions() {
+        doReturn(201).when(mPhoneInterfaceManager).getHalVersion(anyInt());
+        doThrow(SecurityException.class).when(mPhoneInterfaceManager).enforceReadPermission();
+
+        assertThrows(SecurityException.class, () -> {
+            mPhoneInterfaceManager.isNullCipherAndIntegrityPreferenceEnabled();
+        });
     }
 }
diff --git a/tests/src/com/android/phone/PhoneUtilsTest.java b/tests/src/com/android/phone/PhoneUtilsTest.java
index eb4c248..b5ff0dc 100644
--- a/tests/src/com/android/phone/PhoneUtilsTest.java
+++ b/tests/src/com/android/phone/PhoneUtilsTest.java
@@ -22,29 +22,26 @@
 import static org.mockito.Mockito.when;
 
 import android.content.ComponentName;
+import android.os.UserHandle;
 import android.telecom.PhoneAccountHandle;
 import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 
 import androidx.test.runner.AndroidJUnit4;
 
+import com.android.TelephonyTestBase;
 import com.android.internal.telephony.GsmCdmaPhone;
 import com.android.internal.telephony.Phone;
 import com.android.internal.telephony.PhoneFactory;
 
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.MockitoAnnotations;
 
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.HashMap;
-
 @RunWith(AndroidJUnit4.class)
-public class PhoneUtilsTest {
+public class PhoneUtilsTest extends TelephonyTestBase {
     @Mock
     private SubscriptionManager mMockSubscriptionManager;
     @Mock
@@ -59,37 +56,6 @@
     private PhoneAccountHandle mPhoneAccountHandleTest = new PhoneAccountHandle(
             PSTN_CONNECTION_SERVICE_COMPONENT, mPhoneAccountHandleIdString);
 
-    private HashMap<InstanceKey, Object> mOldInstances = new HashMap<InstanceKey, Object>();
-
-    private ArrayList<InstanceKey> mInstanceKeys = new ArrayList<InstanceKey>();
-
-    private static class InstanceKey {
-        public final Class mClass;
-        public final String mInstName;
-        public final Object mObj;
-        InstanceKey(final Class c, final String instName, final Object obj) {
-            mClass = c;
-            mInstName = instName;
-            mObj = obj;
-        }
-
-        @Override
-        public int hashCode() {
-            return (mClass.getName().hashCode() * 31 + mInstName.hashCode()) * 31;
-        }
-
-        @Override
-        public boolean equals(Object obj) {
-            if (obj == null || !(obj instanceof InstanceKey)) {
-                return false;
-            }
-
-            InstanceKey other = (InstanceKey) obj;
-            return (other.mClass == mClass && other.mInstName.equals(mInstName)
-                    && other.mObj == mObj);
-        }
-    }
-
     @Before
     public void setUp() throws Exception {
         MockitoAnnotations.initMocks(this);
@@ -100,37 +66,6 @@
         replaceInstance(PhoneFactory.class, "sPhones", null, mPhones);
     }
 
-    @After
-    public void tearDown() throws Exception {
-        restoreInstance(PhoneFactory.class, "sPhones", null);
-    }
-
-    protected synchronized void replaceInstance(final Class c, final String instanceName,
-            final Object obj, final Object newValue)
-            throws Exception {
-        Field field = c.getDeclaredField(instanceName);
-        field.setAccessible(true);
-
-        InstanceKey key = new InstanceKey(c, instanceName, obj);
-        if (!mOldInstances.containsKey(key)) {
-            mOldInstances.put(key, field.get(obj));
-            mInstanceKeys.add(key);
-        }
-        field.set(obj, newValue);
-    }
-
-    protected synchronized void restoreInstance(final Class c, final String instanceName,
-            final Object obj) throws Exception {
-        InstanceKey key = new InstanceKey(c, instanceName, obj);
-        if (mOldInstances.containsKey(key)) {
-            Field field = c.getDeclaredField(instanceName);
-            field.setAccessible(true);
-            field.set(obj, mOldInstances.get(key));
-            mOldInstances.remove(key);
-            mInstanceKeys.remove(key);
-        }
-    }
-
     @Test
     public void testIsPhoneAccountActive() throws Exception {
         assertTrue(PhoneUtils.isPhoneAccountActive(
@@ -148,6 +83,15 @@
         PhoneAccountHandle phoneAccountHandleTest = new PhoneAccountHandle(
                 PSTN_CONNECTION_SERVICE_COMPONENT, mPhoneAccountHandleIdString);
         assertEquals(phoneAccountHandleTest, PhoneUtils.makePstnPhoneAccountHandleWithPrefix(
-                mPhoneAccountHandleIdString, "", false));
+                mPhoneAccountHandleIdString, "", false, null));
+    }
+
+    @Test
+    public void testMakePstnPhoneAccountHandleWithPrefixForAnotherUser() throws Exception {
+        UserHandle userHandle = new UserHandle(10);
+        PhoneAccountHandle phoneAccountHandleTest = new PhoneAccountHandle(
+                PSTN_CONNECTION_SERVICE_COMPONENT, mPhoneAccountHandleIdString, userHandle);
+        assertEquals(phoneAccountHandleTest, PhoneUtils.makePstnPhoneAccountHandleWithPrefix(
+                mPhoneAccountHandleIdString, "", false, userHandle));
     }
 }
diff --git a/tests/src/com/android/phone/SlicePurchaseControllerTest.java b/tests/src/com/android/phone/SlicePurchaseControllerTest.java
new file mode 100644
index 0000000..ebcf15d
--- /dev/null
+++ b/tests/src/com/android/phone/SlicePurchaseControllerTest.java
@@ -0,0 +1,649 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.phone;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyBoolean;
+import static org.mockito.Mockito.anyInt;
+import static org.mockito.Mockito.anyString;
+import static org.mockito.Mockito.clearInvocations;
+import static org.mockito.Mockito.doCallRealMethod;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+
+import android.content.Context;
+import android.content.Intent;
+import android.content.IntentFilter;
+import android.os.AsyncResult;
+import android.os.Handler;
+import android.os.HandlerThread;
+import android.os.Message;
+import android.os.PersistableBundle;
+import android.telephony.CarrierConfigManager;
+import android.telephony.ServiceState;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
+import android.telephony.data.NetworkSliceInfo;
+import android.telephony.data.NetworkSlicingConfig;
+import android.testing.TestableLooper;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.TelephonyTestBase;
+import com.android.internal.telephony.CommandsInterface;
+import com.android.internal.telephony.Phone;
+import com.android.phone.slice.PremiumNetworkEntitlementApi;
+import com.android.phone.slice.PremiumNetworkEntitlementResponse;
+import com.android.phone.slice.SlicePurchaseController;
+import com.android.phone.slice.SlicePurchaseController.SlicePurchaseControllerBroadcastReceiver;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.ArgumentCaptor;
+import org.mockito.Mock;
+
+import java.util.Collections;
+import java.util.Map;
+
+@RunWith(AndroidJUnit4.class)
+public class SlicePurchaseControllerTest extends TelephonyTestBase {
+    private static final String TAG = "SlicePurchaseControllerTest";
+    private static final int PHONE_ID = 0;
+    private static final long NOTIFICATION_TIMEOUT = 1000;
+    private static final long PURCHASE_CONDITION_TIMEOUT = 2000;
+    private static final long NETWORK_SETUP_TIMEOUT = 3000;
+    private static final long THROTTLE_TIMEOUT = 4000;
+
+    @Mock Phone mPhone;
+    @Mock Context mMockedContext;
+    @Mock CarrierConfigManager mCarrierConfigManager;
+    @Mock CommandsInterface mCommandsInterface;
+    @Mock ServiceState mServiceState;
+    @Mock PremiumNetworkEntitlementApi mPremiumNetworkEntitlementApi;
+
+    private SlicePurchaseController mSlicePurchaseController;
+    private SlicePurchaseControllerBroadcastReceiver mBroadcastReceiver;
+    private PersistableBundle mBundle;
+    private PremiumNetworkEntitlementResponse mEntitlementResponse;
+    private Handler mHandler;
+    private TestableLooper mTestableLooper;
+    @TelephonyManager.PurchasePremiumCapabilityResult private int mResult;
+
+    @Before
+    public void setUp() throws Exception {
+        super.setUp();
+        HandlerThread handlerThread = new HandlerThread("SlicePurchaseControllerTest");
+        handlerThread.start();
+        mHandler = new Handler(handlerThread.getLooper()) {
+            @Override
+            public void handleMessage(Message msg) {
+                AsyncResult ar = (AsyncResult) msg.obj;
+                mResult = (int) ar.result;
+            }
+        };
+        mTestableLooper = new TestableLooper(mHandler.getLooper());
+
+        doReturn(PHONE_ID).when(mPhone).getPhoneId();
+        doReturn(mMockedContext).when(mPhone).getContext();
+        doReturn(mServiceState).when(mPhone).getServiceState();
+        mPhone.mCi = mCommandsInterface;
+
+        doReturn(Context.CARRIER_CONFIG_SERVICE).when(mMockedContext)
+                .getSystemServiceName(eq(CarrierConfigManager.class));
+        doReturn(mCarrierConfigManager).when(mMockedContext)
+                .getSystemService(eq(Context.CARRIER_CONFIG_SERVICE));
+        mBundle = new PersistableBundle();
+        doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt());
+
+        // create a spy to mock final PendingIntent methods
+        SlicePurchaseController slicePurchaseController =
+                new SlicePurchaseController(mPhone, mHandler.getLooper());
+        mSlicePurchaseController = spy(slicePurchaseController);
+        doReturn(null).when(mSlicePurchaseController).createPendingIntent(
+                anyString(), anyInt(), anyBoolean());
+        replaceInstance(SlicePurchaseController.class, "sInstances", mSlicePurchaseController,
+                Map.of(PHONE_ID, mSlicePurchaseController));
+        replaceInstance(SlicePurchaseController.class, "mPremiumNetworkEntitlementApi",
+                mSlicePurchaseController, mPremiumNetworkEntitlementApi);
+        mEntitlementResponse = new PremiumNetworkEntitlementResponse();
+        doReturn(mEntitlementResponse).when(mPremiumNetworkEntitlementApi)
+                .checkEntitlementStatus(anyInt());
+    }
+
+    @Test
+    public void testCreatePendingIntent() {
+        doCallRealMethod().when(mSlicePurchaseController).createPendingIntent(
+                anyString(), anyInt(), anyBoolean());
+        try {
+            mSlicePurchaseController.createPendingIntent(
+                    "com.android.phone.slice.action.SLICE_PURCHASE_APP_RESPONSE_CANCELED",
+                    TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY,
+                    true);
+        } catch (Exception expected) {
+            return;
+        }
+        fail("Expected createPendingIntent to throw an exception");
+    }
+
+    @Test
+    public void testIsPremiumCapabilityAvailableForPurchase() {
+        assertFalse(mSlicePurchaseController.isPremiumCapabilityAvailableForPurchase(
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY));
+
+        // all conditions met
+        doReturn((int) TelephonyManager.NETWORK_TYPE_BITMASK_NR).when(mPhone)
+                .getCachedAllowedNetworkTypesBitmask();
+        mBundle.putIntArray(CarrierConfigManager.KEY_SUPPORTED_PREMIUM_CAPABILITIES_INT_ARRAY,
+                new int[]{TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY});
+        mBundle.putString(CarrierConfigManager.KEY_PREMIUM_CAPABILITY_PURCHASE_URL_STRING,
+                SlicePurchaseController.SLICE_PURCHASE_TEST_FILE);
+        doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt());
+        doReturn(SubscriptionManager.getDefaultDataSubscriptionId()).when(mPhone).getSubId();
+
+        // retry to verify available
+        assertTrue(mSlicePurchaseController.isPremiumCapabilityAvailableForPurchase(
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY));
+    }
+
+    @Test
+    public void testIsUrlValid() {
+        // all other conditions met
+        doReturn((int) TelephonyManager.NETWORK_TYPE_BITMASK_NR).when(mPhone)
+                .getCachedAllowedNetworkTypesBitmask();
+        mBundle.putIntArray(CarrierConfigManager.KEY_SUPPORTED_PREMIUM_CAPABILITIES_INT_ARRAY,
+                new int[]{TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY});
+        doReturn(SubscriptionManager.getDefaultDataSubscriptionId()).when(mPhone).getSubId();
+
+        String[] invalidUrls = new String[] {
+                null,
+                "",
+                "www.google.com",
+                "htt://www.google.com",
+                "http//www.google.com",
+                "http:/www.google.com",
+                "file:///android_asset/",
+                "file:///android_asset/slice_store_test.html"
+        };
+        for (String url : invalidUrls) {
+            mBundle.putString(CarrierConfigManager.KEY_PREMIUM_CAPABILITY_PURCHASE_URL_STRING, url);
+            doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt());
+            assertFalse(mSlicePurchaseController.isPremiumCapabilityAvailableForPurchase(
+                    TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY));
+        }
+
+        mBundle.putString(CarrierConfigManager.KEY_PREMIUM_CAPABILITY_PURCHASE_URL_STRING,
+                SlicePurchaseController.SLICE_PURCHASE_TEST_FILE);
+        doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt());
+        assertTrue(mSlicePurchaseController.isPremiumCapabilityAvailableForPurchase(
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY));
+    }
+
+    @Test
+    public void testPurchasePremiumCapabilityResultFeatureNotSupported() {
+        mSlicePurchaseController.purchasePremiumCapability(
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
+                mHandler.obtainMessage());
+        mTestableLooper.processAllMessages();
+        assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_FEATURE_NOT_SUPPORTED,
+                mResult);
+
+        // retry after enabling feature
+        doReturn((int) TelephonyManager.NETWORK_TYPE_BITMASK_NR).when(mPhone)
+                .getCachedAllowedNetworkTypesBitmask();
+
+        mSlicePurchaseController.purchasePremiumCapability(
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
+                mHandler.obtainMessage());
+        mTestableLooper.processAllMessages();
+        assertNotEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_FEATURE_NOT_SUPPORTED,
+                mResult);
+    }
+
+    @Test
+    public void testPurchasePremiumCapabilityResultCarrierDisabled() {
+        doReturn((int) TelephonyManager.NETWORK_TYPE_BITMASK_NR).when(mPhone)
+                .getCachedAllowedNetworkTypesBitmask();
+
+        mSlicePurchaseController.purchasePremiumCapability(
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
+                mHandler.obtainMessage());
+        mTestableLooper.processAllMessages();
+        assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_DISABLED, mResult);
+
+        // retry after enabling carrier configs
+        mBundle.putIntArray(CarrierConfigManager.KEY_SUPPORTED_PREMIUM_CAPABILITIES_INT_ARRAY,
+                new int[]{TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY});
+        mBundle.putString(CarrierConfigManager.KEY_PREMIUM_CAPABILITY_PURCHASE_URL_STRING,
+                SlicePurchaseController.SLICE_PURCHASE_TEST_FILE);
+        doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt());
+
+        mSlicePurchaseController.purchasePremiumCapability(
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
+                mHandler.obtainMessage());
+        mTestableLooper.processAllMessages();
+        assertNotEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_DISABLED,
+                mResult);
+    }
+
+    @Test
+    public void testPurchasePremiumCapabilityResultNotDefaultDataSubscription() {
+        doReturn((int) TelephonyManager.NETWORK_TYPE_BITMASK_NR).when(mPhone)
+                .getCachedAllowedNetworkTypesBitmask();
+        mBundle.putIntArray(CarrierConfigManager.KEY_SUPPORTED_PREMIUM_CAPABILITIES_INT_ARRAY,
+                new int[]{TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY});
+        mBundle.putString(CarrierConfigManager.KEY_PREMIUM_CAPABILITY_PURCHASE_URL_STRING,
+                SlicePurchaseController.SLICE_PURCHASE_TEST_FILE);
+        doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt());
+
+        mSlicePurchaseController.purchasePremiumCapability(
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
+                mHandler.obtainMessage());
+        mTestableLooper.processAllMessages();
+        assertEquals(
+                TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_NOT_DEFAULT_DATA_SUBSCRIPTION,
+                mResult);
+
+        // retry on default data subscription
+        doReturn(SubscriptionManager.getDefaultDataSubscriptionId()).when(mPhone).getSubId();
+
+        mSlicePurchaseController.purchasePremiumCapability(
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
+                mHandler.obtainMessage());
+        mTestableLooper.processAllMessages();
+        assertNotEquals(
+                TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_NOT_DEFAULT_DATA_SUBSCRIPTION,
+                mResult);
+    }
+
+    @Test
+    public void testPurchasePremiumCapabilityResultNetworkNotAvailable() {
+        doReturn((int) TelephonyManager.NETWORK_TYPE_BITMASK_NR).when(mPhone)
+                .getCachedAllowedNetworkTypesBitmask();
+        mBundle.putIntArray(CarrierConfigManager.KEY_SUPPORTED_PREMIUM_CAPABILITIES_INT_ARRAY,
+                new int[]{TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY});
+        mBundle.putString(CarrierConfigManager.KEY_PREMIUM_CAPABILITY_PURCHASE_URL_STRING,
+                SlicePurchaseController.SLICE_PURCHASE_TEST_FILE);
+        doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt());
+        doReturn(SubscriptionManager.getDefaultDataSubscriptionId()).when(mPhone).getSubId();
+
+        mSlicePurchaseController.purchasePremiumCapability(
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
+                mHandler.obtainMessage());
+        mTestableLooper.processAllMessages();
+        assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_NETWORK_NOT_AVAILABLE,
+                mResult);
+
+        // retry with valid network
+        doReturn(TelephonyManager.NETWORK_TYPE_NR).when(mServiceState).getDataNetworkType();
+
+        mSlicePurchaseController.purchasePremiumCapability(
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
+                mHandler.obtainMessage());
+        mTestableLooper.processAllMessages();
+        assertNotEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_NETWORK_NOT_AVAILABLE,
+                mResult);
+    }
+
+    @Test
+    public void testPurchasePremiumCapabilityResultEntitlementCheckFailed() {
+        doReturn((int) TelephonyManager.NETWORK_TYPE_BITMASK_NR).when(mPhone)
+                .getCachedAllowedNetworkTypesBitmask();
+        mBundle.putIntArray(CarrierConfigManager.KEY_SUPPORTED_PREMIUM_CAPABILITIES_INT_ARRAY,
+                new int[]{TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY});
+        mBundle.putString(CarrierConfigManager.KEY_PREMIUM_CAPABILITY_PURCHASE_URL_STRING,
+                SlicePurchaseController.SLICE_PURCHASE_TEST_FILE);
+        doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt());
+        doReturn(SubscriptionManager.getDefaultDataSubscriptionId()).when(mPhone).getSubId();
+        doReturn(TelephonyManager.NETWORK_TYPE_NR).when(mServiceState).getDataNetworkType();
+        doReturn(null).when(mPremiumNetworkEntitlementApi).checkEntitlementStatus(anyInt());
+
+        mSlicePurchaseController.purchasePremiumCapability(
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
+                mHandler.obtainMessage());
+        mTestableLooper.processAllMessages();
+        assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_ENTITLEMENT_CHECK_FAILED,
+                mResult);
+
+        // retry with provisioned response
+        mEntitlementResponse.mProvisionStatus =
+                PremiumNetworkEntitlementResponse.PREMIUM_NETWORK_PROVISION_STATUS_PROVISIONED;
+        doReturn(mEntitlementResponse).when(mPremiumNetworkEntitlementApi)
+                .checkEntitlementStatus(anyInt());
+
+        mSlicePurchaseController.purchasePremiumCapability(
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
+                mHandler.obtainMessage());
+        mTestableLooper.processAllMessages();
+        assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED,
+                mResult);
+
+        // retry with provisioning response
+        mEntitlementResponse.mProvisionStatus =
+                PremiumNetworkEntitlementResponse.PREMIUM_NETWORK_PROVISION_STATUS_IN_PROGRESS;
+        doReturn(mEntitlementResponse).when(mPremiumNetworkEntitlementApi)
+                .checkEntitlementStatus(anyInt());
+
+        mSlicePurchaseController.purchasePremiumCapability(
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
+                mHandler.obtainMessage());
+        mTestableLooper.processAllMessages();
+        assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_IN_PROGRESS,
+                mResult);
+
+        // retry with disallowed response and throttling
+        mEntitlementResponse.mProvisionStatus =
+                PremiumNetworkEntitlementResponse.PREMIUM_NETWORK_PROVISION_STATUS_NOT_PROVISIONED;
+        mEntitlementResponse.mEntitlementStatus =
+                PremiumNetworkEntitlementResponse.PREMIUM_NETWORK_ENTITLEMENT_STATUS_INCOMPATIBLE;
+        doReturn(mEntitlementResponse).when(mPremiumNetworkEntitlementApi)
+                .checkEntitlementStatus(anyInt());
+        mBundle.putLong(CarrierConfigManager
+                .KEY_PREMIUM_CAPABILITY_PURCHASE_CONDITION_BACKOFF_HYSTERESIS_TIME_MILLIS_LONG,
+                PURCHASE_CONDITION_TIMEOUT);
+        doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt());
+
+        mSlicePurchaseController.purchasePremiumCapability(
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
+                mHandler.obtainMessage());
+        mTestableLooper.processAllMessages();
+        assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_ENTITLEMENT_CHECK_FAILED,
+                mResult);
+
+        // retry to verify throttled
+        mSlicePurchaseController.purchasePremiumCapability(
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
+                mHandler.obtainMessage());
+        mTestableLooper.processAllMessages();
+        assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED, mResult);
+
+        // retry with valid entitlement check to verify unthrottled
+        mTestableLooper.moveTimeForward(PURCHASE_CONDITION_TIMEOUT);
+        mTestableLooper.processAllMessages();
+
+        testPurchasePremiumCapabilityResultSuccess();
+    }
+
+    @Test
+    public void testPurchasePremiumCapabilityResultAlreadyInProgress() {
+        sendValidPurchaseRequest();
+
+        mSlicePurchaseController.purchasePremiumCapability(
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
+                mHandler.obtainMessage());
+        mTestableLooper.processAllMessages();
+        assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_IN_PROGRESS,
+                mResult);
+
+        // retry to verify same result
+        mSlicePurchaseController.purchasePremiumCapability(
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
+                mHandler.obtainMessage());
+        mTestableLooper.processAllMessages();
+        assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_IN_PROGRESS,
+                mResult);
+    }
+
+    @Test
+    public void testPurchasePremiumCapabilityResultSuccess() {
+        sendValidPurchaseRequest();
+
+        Intent intent = new Intent();
+        intent.setAction("com.android.phone.slice.action.SLICE_PURCHASE_APP_RESPONSE_SUCCESS");
+        intent.putExtra(SlicePurchaseController.EXTRA_PHONE_ID, PHONE_ID);
+        intent.putExtra(SlicePurchaseController.EXTRA_PREMIUM_CAPABILITY,
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY);
+        mBroadcastReceiver.onReceive(mMockedContext, intent);
+        mTestableLooper.processAllMessages();
+        assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_SUCCESS, mResult);
+
+        // retry tested in testPurchasePremiumCapabilityResultPendingNetworkSetup
+    }
+
+    @Test
+    public void testPurchasePremiumCapabilityResultPendingNetworkSetup() {
+        testPurchasePremiumCapabilityResultSuccess();
+
+        mSlicePurchaseController.purchasePremiumCapability(
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
+                mHandler.obtainMessage());
+        mTestableLooper.processAllMessages();
+        assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_PENDING_NETWORK_SETUP,
+                mResult);
+
+        // retry to verify unthrottled
+        mTestableLooper.moveTimeForward(NETWORK_SETUP_TIMEOUT);
+        mTestableLooper.processAllMessages();
+
+        testPurchasePremiumCapabilityResultSuccess();
+    }
+
+    @Test
+    public void testPurchasePremiumCapabilityResultAlreadyPurchased() {
+        testPurchasePremiumCapabilityResultSuccess();
+
+        // TODO: implement slicing config logic properly
+        NetworkSlicingConfig slicingConfig = new NetworkSlicingConfig(Collections.emptyList(),
+                Collections.singletonList(new NetworkSliceInfo.Builder()
+                        .setStatus(NetworkSliceInfo.SLICE_STATUS_ALLOWED).build()));
+        mSlicePurchaseController.obtainMessage(2 /* EVENT_SLICING_CONFIG_CHANGED */,
+                new AsyncResult(null, slicingConfig, null)).sendToTarget();
+        mTestableLooper.processAllMessages();
+
+        mSlicePurchaseController.purchasePremiumCapability(
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
+                mHandler.obtainMessage());
+        mTestableLooper.processAllMessages();
+        assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED,
+                mResult);
+
+        // retry to verify same result
+        mSlicePurchaseController.purchasePremiumCapability(
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
+                mHandler.obtainMessage());
+        mTestableLooper.processAllMessages();
+        assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_ALREADY_PURCHASED,
+                mResult);
+
+        // retry to verify purchase expired
+        slicingConfig = new NetworkSlicingConfig(Collections.emptyList(), Collections.emptyList());
+        mSlicePurchaseController.obtainMessage(2 /* EVENT_SLICING_CONFIG_CHANGED */,
+                new AsyncResult(null, slicingConfig, null)).sendToTarget();
+        mTestableLooper.processAllMessages();
+
+        testPurchasePremiumCapabilityResultSuccess();
+    }
+
+    @Test
+    public void testPurchasePremiumCapabilityResultTimeout() {
+        sendValidPurchaseRequest();
+
+        mTestableLooper.moveTimeForward(NOTIFICATION_TIMEOUT);
+        mTestableLooper.processAllMessages();
+        assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_TIMEOUT, mResult);
+
+        // retry to verify throttled
+        mSlicePurchaseController.purchasePremiumCapability(
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
+                mHandler.obtainMessage());
+        mTestableLooper.processAllMessages();
+        assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED, mResult);
+
+        // retry to verify unthrottled
+        mTestableLooper.moveTimeForward(THROTTLE_TIMEOUT);
+        mTestableLooper.processAllMessages();
+
+        testPurchasePremiumCapabilityResultSuccess();
+    }
+
+    @Test
+    public void testPurchasePremiumCapabilityResultUserCanceled() {
+        sendValidPurchaseRequest();
+
+        Intent intent = new Intent();
+        intent.setAction("com.android.phone.slice.action.SLICE_PURCHASE_APP_RESPONSE_CANCELED");
+        intent.putExtra(SlicePurchaseController.EXTRA_PHONE_ID, PHONE_ID);
+        intent.putExtra(SlicePurchaseController.EXTRA_PREMIUM_CAPABILITY,
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY);
+        mBroadcastReceiver.onReceive(mMockedContext, intent);
+        mTestableLooper.processAllMessages();
+        assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_USER_CANCELED, mResult);
+
+        // retry to verify throttled
+        mSlicePurchaseController.purchasePremiumCapability(
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
+                mHandler.obtainMessage());
+        mTestableLooper.processAllMessages();
+        assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED, mResult);
+
+        // retry to verify unthrottled
+        mTestableLooper.moveTimeForward(THROTTLE_TIMEOUT);
+        mTestableLooper.processAllMessages();
+
+        testPurchasePremiumCapabilityResultSuccess();
+    }
+
+    @Test
+    public void testPurchasePremiumCapabilityResultCarrierError() {
+        sendValidPurchaseRequest();
+
+        Intent intent = new Intent();
+        intent.setAction(
+                "com.android.phone.slice.action.SLICE_PURCHASE_APP_RESPONSE_CARRIER_ERROR");
+        intent.putExtra(SlicePurchaseController.EXTRA_PHONE_ID, PHONE_ID);
+        intent.putExtra(SlicePurchaseController.EXTRA_PREMIUM_CAPABILITY,
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY);
+        intent.putExtra(SlicePurchaseController.EXTRA_FAILURE_CODE,
+                SlicePurchaseController.FAILURE_CODE_SERVER_UNREACHABLE);
+        mBroadcastReceiver.onReceive(mMockedContext, intent);
+        mTestableLooper.processAllMessages();
+        assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_CARRIER_ERROR, mResult);
+
+        // retry to verify throttled
+        mSlicePurchaseController.purchasePremiumCapability(
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
+                mHandler.obtainMessage());
+        mTestableLooper.processAllMessages();
+        assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_THROTTLED, mResult);
+
+        // retry to verify unthrottled
+        mTestableLooper.moveTimeForward(PURCHASE_CONDITION_TIMEOUT);
+        mTestableLooper.processAllMessages();
+
+        testPurchasePremiumCapabilityResultSuccess();
+    }
+
+    @Test
+    public void testPurchasePremiumCapabilityResultRequestFailed() {
+        sendValidPurchaseRequest();
+
+        Intent intent = new Intent();
+        intent.setAction(
+                "com.android.phone.slice.action.SLICE_PURCHASE_APP_RESPONSE_REQUEST_FAILED");
+        intent.putExtra(SlicePurchaseController.EXTRA_PHONE_ID, PHONE_ID);
+        intent.putExtra(SlicePurchaseController.EXTRA_PREMIUM_CAPABILITY,
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY);
+        mBroadcastReceiver.onReceive(mMockedContext, intent);
+        mTestableLooper.processAllMessages();
+        assertEquals(TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_REQUEST_FAILED, mResult);
+
+        // retry to verify no throttling
+        testPurchasePremiumCapabilityResultSuccess();
+    }
+
+    @Test
+    public void testPurchasePremiumCapabilityResultNotDefaultDataSubscriptionResponse() {
+        sendValidPurchaseRequest();
+
+        Intent intent = new Intent();
+        intent.setAction("com.android.phone.slice.action."
+                + "SLICE_PURCHASE_APP_RESPONSE_NOT_DEFAULT_DATA_SUBSCRIPTION");
+        intent.putExtra(SlicePurchaseController.EXTRA_PHONE_ID, PHONE_ID);
+        intent.putExtra(SlicePurchaseController.EXTRA_PREMIUM_CAPABILITY,
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY);
+        mBroadcastReceiver.onReceive(mMockedContext, intent);
+        mTestableLooper.processAllMessages();
+        assertEquals(
+                TelephonyManager.PURCHASE_PREMIUM_CAPABILITY_RESULT_NOT_DEFAULT_DATA_SUBSCRIPTION,
+                mResult);
+
+        // retry to verify no throttling
+        testPurchasePremiumCapabilityResultSuccess();
+    }
+
+    private void sendValidPurchaseRequest() {
+        clearInvocations(mMockedContext);
+
+        // feature supported
+        doReturn((int) TelephonyManager.NETWORK_TYPE_BITMASK_NR).when(mPhone)
+                .getCachedAllowedNetworkTypesBitmask();
+        // carrier supported
+        mBundle.putIntArray(CarrierConfigManager.KEY_SUPPORTED_PREMIUM_CAPABILITIES_INT_ARRAY,
+                new int[]{TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY});
+        mBundle.putString(CarrierConfigManager.KEY_PREMIUM_CAPABILITY_PURCHASE_URL_STRING,
+                SlicePurchaseController.SLICE_PURCHASE_TEST_FILE);
+        mBundle.putLong(CarrierConfigManager
+                .KEY_PREMIUM_CAPABILITY_NOTIFICATION_DISPLAY_TIMEOUT_MILLIS_LONG,
+                NOTIFICATION_TIMEOUT);
+        mBundle.putLong(CarrierConfigManager.KEY_PREMIUM_CAPABILITY_NETWORK_SETUP_TIME_MILLIS_LONG,
+                NETWORK_SETUP_TIMEOUT);
+        mBundle.putLong(CarrierConfigManager
+                .KEY_PREMIUM_CAPABILITY_NOTIFICATION_BACKOFF_HYSTERESIS_TIME_MILLIS_LONG,
+                THROTTLE_TIMEOUT);
+        mBundle.putLong(CarrierConfigManager
+                .KEY_PREMIUM_CAPABILITY_PURCHASE_CONDITION_BACKOFF_HYSTERESIS_TIME_MILLIS_LONG,
+                PURCHASE_CONDITION_TIMEOUT);
+        doReturn(mBundle).when(mCarrierConfigManager).getConfigForSubId(anyInt());
+        // default data subscription
+        doReturn(SubscriptionManager.getDefaultDataSubscriptionId()).when(mPhone).getSubId();
+        // network available
+        doReturn(TelephonyManager.NETWORK_TYPE_NR).when(mServiceState).getDataNetworkType();
+        // entitlement check passed
+        mEntitlementResponse.mEntitlementStatus =
+                PremiumNetworkEntitlementResponse.PREMIUM_NETWORK_ENTITLEMENT_STATUS_ENABLED;
+        doReturn(mEntitlementResponse).when(mPremiumNetworkEntitlementApi)
+                .checkEntitlementStatus(anyInt());
+
+        // send purchase request
+        mSlicePurchaseController.purchasePremiumCapability(
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY, TAG,
+                mHandler.obtainMessage());
+        mTestableLooper.processAllMessages();
+
+        // verify that the purchase request was sent successfully
+        ArgumentCaptor<Intent> intentCaptor = ArgumentCaptor.forClass(Intent.class);
+        verify(mMockedContext).sendBroadcast(intentCaptor.capture());
+        Intent intent = intentCaptor.getValue();
+        assertEquals(SlicePurchaseController.ACTION_START_SLICE_PURCHASE_APP, intent.getAction());
+        assertTrue(mSlicePurchaseController.hasMessages(4 /* EVENT_PURCHASE_TIMEOUT */,
+                TelephonyManager.PREMIUM_CAPABILITY_PRIORITIZE_LATENCY));
+
+        // capture the broadcast receiver to fake responses from the slice purchase application
+        ArgumentCaptor<SlicePurchaseControllerBroadcastReceiver> broadcastReceiverCaptor =
+                ArgumentCaptor.forClass(SlicePurchaseControllerBroadcastReceiver.class);
+        verify(mMockedContext).registerReceiver(
+                broadcastReceiverCaptor.capture(), any(IntentFilter.class));
+        mBroadcastReceiver = broadcastReceiverCaptor.getValue();
+    }
+}
diff --git a/tests/src/com/android/phone/Telephony2gUpdaterTest.java b/tests/src/com/android/phone/Telephony2gUpdaterTest.java
new file mode 100644
index 0000000..3443767
--- /dev/null
+++ b/tests/src/com/android/phone/Telephony2gUpdaterTest.java
@@ -0,0 +1,153 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.phone;
+
+import static org.mockito.Mockito.anyInt;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.os.UserManager;
+import android.telephony.SubscriptionInfo;
+import android.telephony.SubscriptionManager;
+import android.telephony.TelephonyManager;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import com.android.TelephonyTestBase;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.concurrent.Executor;
+import java.util.concurrent.Executors;
+
+@RunWith(AndroidJUnit4.class)
+public class Telephony2gUpdaterTest extends TelephonyTestBase {
+    private Telephony2gUpdater mTelephony2gUpdater;
+    private Executor mExecutor;
+
+    private UserManager mMockUserManager;
+    private TelephonyManager mMockTelephonyManager;
+    private SubscriptionManager mMockSubscriptionManager;
+
+    // 2G Bitmask is 0b10000000_01001011
+    private static final long BASE_NETWORK = 0b11111111_11111111;
+    private static final long EXPECTED_DISABLED = 0b01111111_10110100;
+    private static final long EXPECTED_ENABLED = 0b11111111_11111111;
+
+
+    @Before
+    public void setUp() throws Exception {
+        super.setUp();
+
+        mMockTelephonyManager = mContext.getSystemService(TelephonyManager.class);
+        mMockUserManager = mContext.getSystemService(UserManager.class);
+        mMockSubscriptionManager = mContext.getSystemService(SubscriptionManager.class);
+
+        mExecutor = Executors.newSingleThreadExecutor();
+        mTelephony2gUpdater = new Telephony2gUpdater(mExecutor,
+                getTestContext(), BASE_NETWORK);
+    }
+
+    @Test
+    public void handleUserRestrictionsChanged_noSubscriptions_noAllowedNetworksChanged() {
+        when(mMockSubscriptionManager.getAvailableSubscriptionInfoList()).thenReturn(
+                new ArrayList<>());
+        mTelephony2gUpdater.handleUserRestrictionsChanged(getTestContext());
+        verify(mMockTelephonyManager, never()).setAllowedNetworkTypesForReason(anyInt(), anyInt());
+    }
+
+    @Test
+    public void handleUserRestrictionsChanged_nullSubscriptions_noAllowedNetworksChanged() {
+        when(mMockSubscriptionManager.getAvailableSubscriptionInfoList()).thenReturn(null);
+        mTelephony2gUpdater.handleUserRestrictionsChanged(getTestContext());
+        verify(mMockTelephonyManager, never()).setAllowedNetworkTypesForReason(anyInt(), anyInt());
+    }
+
+    @Test
+    public void handleUserRestrictionsChanged_oneSubscription_allowedNetworksUpdated() {
+        TelephonyManager tmSubscription1 = mock(TelephonyManager.class);
+        when(mMockSubscriptionManager.getAvailableSubscriptionInfoList()).thenReturn(
+                Collections.singletonList(getSubInfo(1)));
+        when(mMockTelephonyManager.createForSubscriptionId(1)).thenReturn(tmSubscription1);
+        when(mMockUserManager.hasUserRestriction(UserManager.DISALLOW_CELLULAR_2G)).thenReturn(
+                true);
+
+        mTelephony2gUpdater.handleUserRestrictionsChanged(getTestContext());
+
+        System.out.println(TelephonyManager.convertNetworkTypeBitmaskToString(11L));
+        verify(tmSubscription1, times(1)).setAllowedNetworkTypesForReason(
+                TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER_RESTRICTIONS, EXPECTED_DISABLED);
+    }
+
+    @Test
+    public void handleUserRestrictionsChanged_manySubscriptionsDisallow2g_allowedNetworkUpdated() {
+
+        // Two subscriptions are available
+        when(mMockSubscriptionManager.getAvailableSubscriptionInfoList()).thenReturn(
+                Arrays.asList(getSubInfo(1), getSubInfo(2)));
+        TelephonyManager tmSubscription1 = mock(TelephonyManager.class);
+        TelephonyManager tmSubscription2 = mock(TelephonyManager.class);
+        when(mMockTelephonyManager.createForSubscriptionId(1)).thenReturn(tmSubscription1);
+        when(mMockTelephonyManager.createForSubscriptionId(2)).thenReturn(tmSubscription2);
+        // 2g is disallowed
+        when(mMockUserManager.hasUserRestriction(UserManager.DISALLOW_CELLULAR_2G)).thenReturn(
+                true);
+
+        mTelephony2gUpdater.handleUserRestrictionsChanged(getTestContext());
+
+        verify(tmSubscription1, times(1)).setAllowedNetworkTypesForReason(
+                TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER_RESTRICTIONS, EXPECTED_DISABLED);
+        verify(tmSubscription1, times(1)).setAllowedNetworkTypesForReason(
+                TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER_RESTRICTIONS, EXPECTED_DISABLED);
+    }
+
+    @Test
+    public void handleUserRestrictionsChanged_manySubscriptionsAllow2g_allowedNetworkUpdated() {
+
+        // Two subscriptions are available
+        when(mMockSubscriptionManager.getAvailableSubscriptionInfoList()).thenReturn(
+                Arrays.asList(getSubInfo(1), getSubInfo(2)));
+        TelephonyManager tmSubscription1 = mock(TelephonyManager.class);
+        TelephonyManager tmSubscription2 = mock(TelephonyManager.class);
+        when(mMockTelephonyManager.createForSubscriptionId(1)).thenReturn(tmSubscription1);
+        when(mMockTelephonyManager.createForSubscriptionId(2)).thenReturn(tmSubscription2);
+
+        // 2g is allowed
+        when(mMockUserManager.hasUserRestriction(UserManager.DISALLOW_CELLULAR_2G)).thenReturn(
+                false);
+
+        mTelephony2gUpdater.handleUserRestrictionsChanged(getTestContext());
+
+        verify(tmSubscription1, times(1)).setAllowedNetworkTypesForReason(
+                TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER_RESTRICTIONS, EXPECTED_ENABLED);
+        verify(tmSubscription1, times(1)).setAllowedNetworkTypesForReason(
+                TelephonyManager.ALLOWED_NETWORK_TYPES_REASON_USER_RESTRICTIONS, EXPECTED_ENABLED);
+    }
+
+    private SubscriptionInfo getSubInfo(int id) {
+        return new SubscriptionInfo(id, "890126042XXXXXXXXXXX", 0, "T-mobile", "T-mobile", 0, 255,
+                "12345", 0, null, "310", "260", "156", false, null, null);
+    }
+}
diff --git a/tests/src/com/android/phone/ecc/EccDataTest.java b/tests/src/com/android/phone/ecc/EccDataTest.java
index a52e2e7..baa4c7b 100644
--- a/tests/src/com/android/phone/ecc/EccDataTest.java
+++ b/tests/src/com/android/phone/ecc/EccDataTest.java
@@ -66,7 +66,7 @@
                 assertThat(loadedNumbers.contains(eccInfo.phoneNumber)).isFalse();
                 assertThat(eccInfo.types).isNotEmpty();
                 loadedNumbers.add(eccInfo.phoneNumber);
-                if (eccInfo.isNormalRouted) {
+                if (eccInfo.routing == ProtobufEccData.EccInfo.Routing.NORMAL) {
                     loadedMncs.clear();
                     for (String mnc : eccInfo.normalRoutingMncs) {
                         assertThat(mnc).isNotEmpty();
diff --git a/tests/src/com/android/services/telephony/DisconnectCauseUtilTest.java b/tests/src/com/android/services/telephony/DisconnectCauseUtilTest.java
index 28a7b02..969622a 100644
--- a/tests/src/com/android/services/telephony/DisconnectCauseUtilTest.java
+++ b/tests/src/com/android/services/telephony/DisconnectCauseUtilTest.java
@@ -38,19 +38,14 @@
 import com.android.internal.telephony.PhoneFactory;
 import com.android.phone.common.R;
 
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 import org.mockito.Mock;
 import org.mockito.Mockito;
 
-import java.lang.reflect.Field;
-import java.util.ArrayList;
-import java.util.HashMap;
 import java.util.Locale;
 
-
 @RunWith(AndroidJUnit4.class)
 public class DisconnectCauseUtilTest extends TelephonyTestBase {
 
@@ -60,42 +55,11 @@
 
     // dynamic
     private Context mContext;
-    private HashMap<InstanceKey, Object> mOldInstances = new HashMap<InstanceKey, Object>();
-    private ArrayList<InstanceKey> mInstanceKeys = new ArrayList<InstanceKey>();
 
     //Mocks
     @Mock
     private GsmCdmaPhone mMockPhone;
 
-    // inner classes
-    private static class InstanceKey {
-        public final Class mClass;
-        public final String mInstName;
-        public final Object mObj;
-
-        InstanceKey(final Class c, final String instName, final Object obj) {
-            mClass = c;
-            mInstName = instName;
-            mObj = obj;
-        }
-
-        @Override
-        public int hashCode() {
-            return (mClass.getName().hashCode() * 31 + mInstName.hashCode()) * 31;
-        }
-
-        @Override
-        public boolean equals(Object obj) {
-            if (obj == null || !(obj instanceof InstanceKey)) {
-                return false;
-            }
-
-            InstanceKey other = (InstanceKey) obj;
-            return (other.mClass == mClass && other.mInstName.equals(mInstName)
-                    && other.mObj == mObj);
-        }
-    }
-
     @Before
     public void setUp() throws Exception {
         super.setUp();
@@ -106,15 +70,6 @@
         setSinglePhone();
     }
 
-    @After
-    public void tearDown() throws Exception {
-        // restoreInstance.
-        // Not doing so will potentially "confuse" other tests with the mocked instance
-        restoreInstance(PhoneFactory.class, "sPhones", null);
-        super.tearDown();
-    }
-
-
     /**
      * Verifies that a call drop due to loss of WIFI results in a disconnect cause of error and that
      * the label, description and tone are all present.
@@ -176,33 +131,6 @@
         replaceInstance(PhoneFactory.class, "sPhones", null, mPhones);
     }
 
-
-    protected synchronized void replaceInstance(final Class c, final String instanceName,
-            final Object obj, final Object newValue)
-            throws Exception {
-        Field field = c.getDeclaredField(instanceName);
-        field.setAccessible(true);
-
-        InstanceKey key = new InstanceKey(c, instanceName, obj);
-        if (!mOldInstances.containsKey(key)) {
-            mOldInstances.put(key, field.get(obj));
-            mInstanceKeys.add(key);
-        }
-        field.set(obj, newValue);
-    }
-
-    protected synchronized void restoreInstance(final Class c, final String instanceName,
-            final Object obj) throws Exception {
-        InstanceKey key = new InstanceKey(c, instanceName, obj);
-        if (mOldInstances.containsKey(key)) {
-            Field field = c.getDeclaredField(instanceName);
-            field.setAccessible(true);
-            field.set(obj, mOldInstances.get(key));
-            mOldInstances.remove(key);
-            mInstanceKeys.remove(key);
-        }
-    }
-
     private Resources getResourcesForLocale(Context context, Locale locale) {
         Configuration config = new Configuration();
         config.setToDefaults();
diff --git a/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java b/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
index f2209db..85be48d 100644
--- a/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
+++ b/tests/src/com/android/services/telephony/TelephonyConnectionServiceTest.java
@@ -192,6 +192,54 @@
     /**
      * Prerequisites:
      * - MSIM Device, two slots with SIMs inserted
+     * - Slot 0 is IN_SERVICE, Slot 1 is OUT_OF_SERVICE (emergency calls only)
+     * - Slot 1 is in Emergency SMS Mode
+     *
+     * Result: getFirstPhoneForEmergencyCall returns the slot 1 phone
+     */
+    @Test
+    @SmallTest
+    public void testEmergencySmsModeSimEmergencyOnly() {
+        Phone slot0Phone = makeTestPhone(SLOT_0_PHONE_ID, ServiceState.STATE_IN_SERVICE,
+                false /*isEmergencyOnly*/);
+        Phone slot1Phone = makeTestPhone(SLOT_1_PHONE_ID, ServiceState.STATE_OUT_OF_SERVICE,
+                true /*isEmergencyOnly*/);
+        setDefaultPhone(slot0Phone);
+        setupDeviceConfig(slot0Phone, slot1Phone, SLOT_0_PHONE_ID);
+        setEmergencySmsMode(slot1Phone, true);
+
+        Phone resultPhone = mTestConnectionService.getFirstPhoneForEmergencyCall();
+
+        assertEquals(slot1Phone, resultPhone);
+    }
+
+    /**
+     * Prerequisites:
+     * - MSIM Device, two slots with SIMs inserted
+     * - Slot 0 is IN_SERVICE, Slot 1 is OUT_OF_SERVICE
+     * - Slot 1 is in Emergency SMS Mode
+     *
+     * Result: getFirstPhoneForEmergencyCall returns the slot 0 phone
+     */
+    @Test
+    @SmallTest
+    public void testEmergencySmsModeSimOutOfService() {
+        Phone slot0Phone = makeTestPhone(SLOT_0_PHONE_ID, ServiceState.STATE_IN_SERVICE,
+                false /*isEmergencyOnly*/);
+        Phone slot1Phone = makeTestPhone(SLOT_1_PHONE_ID, ServiceState.STATE_OUT_OF_SERVICE,
+                false /*isEmergencyOnly*/);
+        setDefaultPhone(slot0Phone);
+        setupDeviceConfig(slot0Phone, slot1Phone, SLOT_0_PHONE_ID);
+        setEmergencySmsMode(slot1Phone, true);
+
+        Phone resultPhone = mTestConnectionService.getFirstPhoneForEmergencyCall();
+
+        assertEquals(slot0Phone, resultPhone);
+    }
+
+    /**
+     * Prerequisites:
+     * - MSIM Device, two slots with SIMs inserted
      * - Users default Voice SIM choice is IN_SERVICE
      *
      * Result: getFirstPhoneForEmergencyCall returns the default Voice SIM choice.
@@ -214,6 +262,52 @@
     /**
      * Prerequisites:
      * - MSIM Device, two slots with SIMs inserted
+     * - Users default data SIM choice is OUT_OF_SERVICE (emergency calls only)
+     *
+     * Result: getFirstPhoneForEmergencyCall returns the default data SIM choice.
+     */
+    @Test
+    @SmallTest
+    public void testDefaultDataSimEmergencyOnly() {
+        Phone slot0Phone = makeTestPhone(SLOT_0_PHONE_ID, ServiceState.STATE_IN_SERVICE,
+                false /*isEmergencyOnly*/);
+        Phone slot1Phone = makeTestPhone(SLOT_1_PHONE_ID, ServiceState.STATE_OUT_OF_SERVICE,
+                true /*isEmergencyOnly*/);
+        setDefaultPhone(slot0Phone);
+        setupDeviceConfig(slot0Phone, slot1Phone, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+        setDefaultDataPhoneId(SLOT_1_PHONE_ID);
+
+        Phone resultPhone = mTestConnectionService.getFirstPhoneForEmergencyCall();
+
+        assertEquals(slot1Phone, resultPhone);
+    }
+
+    /**
+     * Prerequisites:
+     * - MSIM Device, two slots with SIMs inserted
+     * - Users default data SIM choice is OUT_OF_SERVICE
+     *
+     * Result: getFirstPhoneForEmergencyCall does not return the default data SIM choice.
+     */
+    @Test
+    @SmallTest
+    public void testDefaultDataSimOutOfService() {
+        Phone slot0Phone = makeTestPhone(SLOT_0_PHONE_ID, ServiceState.STATE_IN_SERVICE,
+                false /*isEmergencyOnly*/);
+        Phone slot1Phone = makeTestPhone(SLOT_1_PHONE_ID, ServiceState.STATE_OUT_OF_SERVICE,
+                false /*isEmergencyOnly*/);
+        setDefaultPhone(slot0Phone);
+        setupDeviceConfig(slot0Phone, slot1Phone, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+        setDefaultDataPhoneId(SLOT_1_PHONE_ID);
+
+        Phone resultPhone = mTestConnectionService.getFirstPhoneForEmergencyCall();
+
+        assertEquals(slot0Phone, resultPhone);
+    }
+
+    /**
+     * Prerequisites:
+     * - MSIM Device, two slots with SIMs inserted
      * - Slot 0 is OUT_OF_SERVICE, Slot 1 is OUT_OF_SERVICE (emergency calls only)
      *
      * Result: getFirstPhoneForEmergencyCall returns the slot 1 phone
@@ -1433,6 +1527,24 @@
         assertFalse(tc1.wasDisconnected);
     }
 
+    /**
+     * Verifies that TelephonyManager is used to determine whether a connection is Emergency when
+     * creating an outgoing connection.
+     */
+    @Test
+    @SmallTest
+    public void testIsEmergencyDeterminedByTelephonyManager() {
+        ConnectionRequest connectionRequest = new ConnectionRequest.Builder()
+                .setAccountHandle(PHONE_ACCOUNT_HANDLE_1)
+                .setAddress(TEST_ADDRESS)
+                .build();
+        mConnection = mTestConnectionService.onCreateOutgoingConnection(
+                PHONE_ACCOUNT_HANDLE_1, connectionRequest);
+
+        verify(mTelephonyManagerProxy)
+                .isCurrentEmergencyNumber(TEST_ADDRESS.getSchemeSpecificPart());
+    }
+
     private SimpleTelephonyConnection createTestConnection(PhoneAccountHandle handle,
             int properties, boolean isEmergency) {
         SimpleTelephonyConnection connection = new SimpleTelephonyConnection();
@@ -1615,10 +1727,18 @@
         when(mPhoneFactoryProxy.getPhone(eq(SLOT_1_PHONE_ID))).thenReturn(slot1Phone);
     }
 
+    private void setDefaultDataPhoneId(int defaultDataPhoneId) {
+        when(mSubscriptionManagerProxy.getDefaultDataPhoneId()).thenReturn(defaultDataPhoneId);
+    }
+
     private void setPhoneRadioAccessFamily(Phone phone, int radioAccessFamily) {
         when(phone.getRadioAccessFamily()).thenReturn(radioAccessFamily);
     }
 
+    private void setEmergencySmsMode(Phone phone, boolean isInEmergencySmsMode) {
+        when(phone.isInEmergencySmsMode()).thenReturn(isInEmergencySmsMode);
+    }
+
     private void setPhoneSlotState(int slotId, int slotState) {
         when(mSubscriptionManagerProxy.getSimStateForSlotIdx(slotId)).thenReturn(slotState);
     }