Override Carrier 2032 5G plus network type

- Add config to override Carrier 2032 network type "5G+"

Bug: 377907543
Flag: EXEMPT bugfix
Test: Manual testing
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:1df5b322339685ed14c1446571b54a0165ab6962)
Merged-In: I83302a7fd8a860dd0c2acd76b6142ea1aa5b6ae5
Change-Id: I83302a7fd8a860dd0c2acd76b6142ea1aa5b6ae5
diff --git a/packages/SettingsLib/res/values/config.xml b/packages/SettingsLib/res/values/config.xml
index 3c3de04..502eb6c 100644
--- a/packages/SettingsLib/res/values/config.xml
+++ b/packages/SettingsLib/res/values/config.xml
@@ -41,4 +41,15 @@
     <string name="config_avatar_picker_class" translatable="false">
         com.android.avatarpicker.ui.AvatarPickerActivity
     </string>
+
+    <array name="config_override_carrier_5g_plus">
+        <item>@array/carrier_2032_5g_plus</item>
+    </array>
+
+    <integer-array name="carrier_2032_5g_plus">
+        <!-- carrier id: 2032 -->
+        <item>2032</item>
+        <!-- network type: "5G+" -->
+        <item>@string/data_connection_5g_plus_carrier_2032</item>
+    </integer-array>
 </resources>
\ No newline at end of file
diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml
index eaf155d..0cb4f2d 100644
--- a/packages/SettingsLib/res/values/strings.xml
+++ b/packages/SettingsLib/res/values/strings.xml
@@ -1718,6 +1718,8 @@
 
     <!-- Content description of the data connection type 5G+. [CHAR LIMIT=NONE] -->
     <string name="data_connection_5g_plus" translatable="false">5G+</string>
+    <!-- Content description of the data connection type 5G+ for carrier 2032. [CHAR LIMIT=NONE] -->
+    <string name="data_connection_5g_plus_carrier_2032" translatable="false">5G+</string>
 
     <!-- Content description of the data connection type Carrier WiFi. [CHAR LIMIT=NONE] -->
     <string name="data_connection_carrier_wifi">W+</string>
diff --git a/packages/SettingsLib/src/com/android/settingslib/mobile/MobileMappings.java b/packages/SettingsLib/src/com/android/settingslib/mobile/MobileMappings.java
index b7108c9..cf52eb3 100644
--- a/packages/SettingsLib/src/com/android/settingslib/mobile/MobileMappings.java
+++ b/packages/SettingsLib/src/com/android/settingslib/mobile/MobileMappings.java
@@ -15,11 +15,14 @@
  */
 package com.android.settingslib.mobile;
 
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.res.Resources;
+import android.content.res.TypedArray;
 import android.os.PersistableBundle;
 import android.telephony.Annotation;
 import android.telephony.CarrierConfigManager;
+import android.telephony.SubscriptionInfo;
 import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyDisplayInfo;
 import android.telephony.TelephonyManager;
@@ -196,9 +199,9 @@
         networkToIconLookup.put(toDisplayIconKey(
                 TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_NSA),
                 TelephonyIcons.NR_5G);
-        networkToIconLookup.put(toDisplayIconKey(
-                TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_ADVANCED),
-                TelephonyIcons.NR_5G_PLUS);
+        networkToIconLookup.put(
+                toDisplayIconKey(TelephonyDisplayInfo.OVERRIDE_NETWORK_TYPE_NR_ADVANCED),
+                config.mobileIconGroup5gPlus);
         networkToIconLookup.put(toIconKey(
                 TelephonyManager.NETWORK_TYPE_NR),
                 TelephonyIcons.NR_5G);
@@ -217,6 +220,7 @@
         public boolean hideLtePlus = false;
         public boolean hspaDataDistinguishable;
         public boolean alwaysShowDataRatIcon = false;
+        public MobileIconGroup mobileIconGroup5gPlus = TelephonyIcons.NR_5G_PLUS;
 
         /**
          * Reads the latest configs.
@@ -250,9 +254,54 @@
                 config.hideLtePlus = b.getBoolean(
                         CarrierConfigManager.KEY_HIDE_LTE_PLUS_DATA_ICON_BOOL);
             }
+
+            SubscriptionManager subscriptionManager =
+                    context.getSystemService(SubscriptionManager.class);
+            if (subscriptionManager != null) {
+                SubscriptionInfo subInfo = subscriptionManager.getDefaultDataSubscriptionInfo();
+                if (subInfo != null) {
+                    readMobileIconGroup5gPlus(subInfo.getCarrierId(), res, config);
+                }
+            }
             return config;
         }
 
+        @SuppressLint("ResourceType")
+        private static void readMobileIconGroup5gPlus(int carrierId, Resources res, Config config) {
+            int networkTypeResId = 0;
+            TypedArray groupArray;
+            try {
+                groupArray = res.obtainTypedArray(R.array.config_override_carrier_5g_plus);
+            } catch (Resources.NotFoundException e) {
+                return;
+            }
+            for (int i = 0; i < groupArray.length() && networkTypeResId == 0; i++) {
+                int groupId = groupArray.getResourceId(i, 0);
+                if (groupId == 0) {
+                    continue;
+                }
+                TypedArray carrierArray;
+                try {
+                    carrierArray = res.obtainTypedArray(groupId);
+                } catch (Resources.NotFoundException e) {
+                    continue;
+                }
+                int groupCarrierId = carrierArray.getInt(0, 0);
+                if (groupCarrierId == carrierId) {
+                    networkTypeResId = carrierArray.getResourceId(1, 0);
+                }
+                carrierArray.recycle();
+            }
+            groupArray.recycle();
+
+            if (networkTypeResId != 0) {
+                config.mobileIconGroup5gPlus = new MobileIconGroup(
+                        TelephonyIcons.NR_5G_PLUS.name,
+                        networkTypeResId,
+                        TelephonyIcons.NR_5G_PLUS.dataType);
+            }
+        }
+
         /**
          * Returns true if this config and the other config are semantically equal.
          *