Merge "Add an exported flag in manifest"
diff --git a/README b/README
index 4467aa9..af1366f 100644
--- a/README
+++ b/README
@@ -8,10 +8,10 @@
 folder. Two ways to configure per-network configuration. Preferred way is
 carrier_config_carrierid_<carrierid>_<carriername>.xml
 AOSP carrier ID assignments can be found at
-https://android.googlesource.com/platform/packages/providers/TelephonyProvider/+/master/assets/carrier_list.textpb
+https://android.googlesource.com/platform/packages/providers/TelephonyProvider/+/master/assets/latest_carrier_id/carrier_list.textpb
 use carrier_config_mccmnc_<mccmnc>.xml only if there is no matching carrier id.
 
 This app uses a CarrierIdentifier to read the appropriate config snippets from the assets folder.
 
 If you make changes to the XML files, run the unit tests to ensure they can still be parsed:
-    runtest carrierconfig-unit
\ No newline at end of file
+    runtest carrierconfig-unit
diff --git a/assets/carrier_config_carrierid_10000_Tracfone-ATT.xml b/assets/carrier_config_carrierid_10000_Tracfone-ATT.xml
new file mode 100644
index 0000000..38de8fe
--- /dev/null
+++ b/assets/carrier_config_carrierid_10000_Tracfone-ATT.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<carrier_config>
+    <boolean name="carrier_default_data_roaming_enabled_bool" value="true"/>
+    <string-array name="carrier_certificate_string_array" num="3">
+        <item value="E751E163E91E041382839556D31302DB7058C44D9DF1B5B27FC43BD8F0EE2BBA"/>
+        <item value="4AD124DE517BC6BA915B88C17F0AADF764469842156325C26B7CD8B888C41C71"/>
+        <item value="55BB3B316919620008AA76A4891E90384BFF2A76AE95C395FE738C2AC609F13F"/>
+    </string-array>
+</carrier_config>
diff --git a/assets/carrier_config_carrierid_10001_Tracfone-TMO.xml b/assets/carrier_config_carrierid_10001_Tracfone-TMO.xml
new file mode 100644
index 0000000..38de8fe
--- /dev/null
+++ b/assets/carrier_config_carrierid_10001_Tracfone-TMO.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<carrier_config>
+    <boolean name="carrier_default_data_roaming_enabled_bool" value="true"/>
+    <string-array name="carrier_certificate_string_array" num="3">
+        <item value="E751E163E91E041382839556D31302DB7058C44D9DF1B5B27FC43BD8F0EE2BBA"/>
+        <item value="4AD124DE517BC6BA915B88C17F0AADF764469842156325C26B7CD8B888C41C71"/>
+        <item value="55BB3B316919620008AA76A4891E90384BFF2A76AE95C395FE738C2AC609F13F"/>
+    </string-array>
+</carrier_config>
diff --git a/assets/carrier_config_carrierid_10008_Tracfone-VZW.xml b/assets/carrier_config_carrierid_10008_Tracfone-VZW.xml
new file mode 100644
index 0000000..38de8fe
--- /dev/null
+++ b/assets/carrier_config_carrierid_10008_Tracfone-VZW.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<carrier_config>
+    <boolean name="carrier_default_data_roaming_enabled_bool" value="true"/>
+    <string-array name="carrier_certificate_string_array" num="3">
+        <item value="E751E163E91E041382839556D31302DB7058C44D9DF1B5B27FC43BD8F0EE2BBA"/>
+        <item value="4AD124DE517BC6BA915B88C17F0AADF764469842156325C26B7CD8B888C41C71"/>
+        <item value="55BB3B316919620008AA76A4891E90384BFF2A76AE95C395FE738C2AC609F13F"/>
+    </string-array>
+</carrier_config>
diff --git a/assets/carrier_config_carrierid_1187_AT&T.xml b/assets/carrier_config_carrierid_1187_AT&T.xml
index 313d5c4..5e39c3c 100644
--- a/assets/carrier_config_carrierid_1187_AT&T.xml
+++ b/assets/carrier_config_carrierid_1187_AT&T.xml
@@ -49,4 +49,5 @@
         <item value="352|emergency calls over wifi not allowed in this location|1622"/>
         <item value="332|service not allowed in this location|1623"/>
     </string-array>
+    <string name="5g_icon_display_grace_period_string" value="connected_mmwave,any,30"/>
 </carrier_config>
diff --git a/assets/carrier_config_carrierid_1581_au.xml b/assets/carrier_config_carrierid_1581_au.xml
index 0833acd..28e55d3 100644
--- a/assets/carrier_config_carrierid_1581_au.xml
+++ b/assets/carrier_config_carrierid_1581_au.xml
@@ -3,4 +3,8 @@
     <boolean name="carrier_supports_ss_over_ut_bool" value="true"/>
     <boolean name="show_4g_for_lte_data_icon_bool" value="true"/>
     <boolean name="allow_emergency_numbers_in_call_log_bool" value="true"/>
+    <string name="5g_icon_display_grace_period_string"
+        value="connected_mmwave,legacy,15;connected,legacy,15;
+        connected_mmwave,not_restricted_rrc_con,15;connected,not_restricted_rrc_con,15;
+        not_restricted_rrc_idle,legacy,15;not_restricted_rrc_idle,not_restricted_rrc_con,15"/>
 </carrier_config>
diff --git a/assets/carrier_config_carrierid_1839_Verizon-Wireless.xml b/assets/carrier_config_carrierid_1839_Verizon-Wireless.xml
index cd13d42..f0a4fb9 100644
--- a/assets/carrier_config_carrierid_1839_Verizon-Wireless.xml
+++ b/assets/carrier_config_carrierid_1839_Verizon-Wireless.xml
@@ -164,4 +164,8 @@
         <item value="82"/>
         <item value="83"/>
     </int-array>
+    <string name="5g_icon_display_grace_period_string"
+        value="connected_mmwave,any,3;not_restricted_rrc_idle,not_restricted_rrc_con,2"/>
+    <string name="5g_icon_display_secondary_grace_period_string"
+        value="connected_mmwave,not_restricted_rrc_idle,60"/>
 </carrier_config>
diff --git a/assets/carrier_config_carrierid_1894_SoftBank.xml b/assets/carrier_config_carrierid_1894_SoftBank.xml
index 3e8ca59..1df823e 100644
--- a/assets/carrier_config_carrierid_1894_SoftBank.xml
+++ b/assets/carrier_config_carrierid_1894_SoftBank.xml
@@ -15,4 +15,8 @@
     <int name="volte_replacement_rat_int" value="3"/>
     <int name="ims_dtmf_tone_delay_int" value="215"/>
     <string name="default_vm_number_string">1416</string>
+    <string name="5g_icon_display_grace_period_string"
+        value="connected_mmwave,legacy,31;connected,legacy,31;
+        connected_mmwave,not_restricted_rrc_con,31;connected,not_restricted_rrc_con,31;
+        not_restricted_rrc_idle,legacy,15;not_restricted_rrc_idle,not_restricted_rrc_con,15"/>
 </carrier_config>
diff --git a/assets/carrier_config_carrierid_1913_Telcel.xml b/assets/carrier_config_carrierid_1913_Telcel.xml
index 3d7463a..b9d7504 100644
--- a/assets/carrier_config_carrierid_1913_Telcel.xml
+++ b/assets/carrier_config_carrierid_1913_Telcel.xml
@@ -7,4 +7,21 @@
     <string-array name="carrier_certificate_string_array" num="1">
       <item value="7D7226772D4F6D778FEF53A36BE15AD78D8D9D4BC4CE00C5F2E3216C19480FA0"/>
     </string-array>
+
+    <string-array name="carrier_data_call_permanent_failure_strings" num="14">
+        <item value="OPERATOR_BARRED"/>
+        <item value="MISSING_UNKNOWN_APN"/>
+        <item value="UNKNOWN_PDP_ADDRESS_TYPE"/>
+        <item value="ACTIVATION_REJECT_GGSN"/>
+        <item value="SERVICE_OPTION_NOT_SUPPORTED"/>
+        <item value="NSAPI_IN_USE"/>
+        <item value="ONLY_IPV4_ALLOWED"/>
+        <item value="ONLY_IPV6_ALLOWED"/>
+        <item value="PROTOCOL_ERRORS"/>
+        <item value="RADIO_POWER_OFF"/>
+        <item value="TETHERED_CALL_ACTIVE"/>
+        <item value="RADIO_NOT_AVAILABLE"/>
+        <item value="UNACCEPTABLE_NETWORK_PARAMETER"/>
+        <item value="SIGNAL_LOST"/>
+    </string-array>
 </carrier_config>
diff --git a/assets/carrier_config_carrierid_1_T-Mobile-US.xml b/assets/carrier_config_carrierid_1_T-Mobile-US.xml
index 362b3cb..c7abc0d 100644
--- a/assets/carrier_config_carrierid_1_T-Mobile-US.xml
+++ b/assets/carrier_config_carrierid_1_T-Mobile-US.xml
@@ -25,4 +25,7 @@
     <string-array name="wfc_operator_error_codes_string_array" num="1">
         <item value="REG09|0"/>
     </string-array>
+    <string name="5g_icon_display_grace_period_string"
+        value="connected_mmwave,any,30;connected,any,30;not_restricted_rrc_idle,any,30;
+        not_restricted_rrc_con,any,30"/>
 </carrier_config>
diff --git a/assets/carrier_config_carrierid_2022_Tracfone.xml b/assets/carrier_config_carrierid_2022_Tracfone.xml
new file mode 100644
index 0000000..38de8fe
--- /dev/null
+++ b/assets/carrier_config_carrierid_2022_Tracfone.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<carrier_config>
+    <boolean name="carrier_default_data_roaming_enabled_bool" value="true"/>
+    <string-array name="carrier_certificate_string_array" num="3">
+        <item value="E751E163E91E041382839556D31302DB7058C44D9DF1B5B27FC43BD8F0EE2BBA"/>
+        <item value="4AD124DE517BC6BA915B88C17F0AADF764469842156325C26B7CD8B888C41C71"/>
+        <item value="55BB3B316919620008AA76A4891E90384BFF2A76AE95C395FE738C2AC609F13F"/>
+    </string-array>
+</carrier_config>
diff --git a/assets/carrier_config_carrierid_2063_Family-Mobile.xml b/assets/carrier_config_carrierid_2063_Family-Mobile.xml
new file mode 100644
index 0000000..38de8fe
--- /dev/null
+++ b/assets/carrier_config_carrierid_2063_Family-Mobile.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<carrier_config>
+    <boolean name="carrier_default_data_roaming_enabled_bool" value="true"/>
+    <string-array name="carrier_certificate_string_array" num="3">
+        <item value="E751E163E91E041382839556D31302DB7058C44D9DF1B5B27FC43BD8F0EE2BBA"/>
+        <item value="4AD124DE517BC6BA915B88C17F0AADF764469842156325C26B7CD8B888C41C71"/>
+        <item value="55BB3B316919620008AA76A4891E90384BFF2A76AE95C395FE738C2AC609F13F"/>
+    </string-array>
+</carrier_config>
diff --git a/assets/carrier_config_carrierid_2064_GoSmart.xml b/assets/carrier_config_carrierid_2064_GoSmart.xml
new file mode 100644
index 0000000..38de8fe
--- /dev/null
+++ b/assets/carrier_config_carrierid_2064_GoSmart.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<carrier_config>
+    <boolean name="carrier_default_data_roaming_enabled_bool" value="true"/>
+    <string-array name="carrier_certificate_string_array" num="3">
+        <item value="E751E163E91E041382839556D31302DB7058C44D9DF1B5B27FC43BD8F0EE2BBA"/>
+        <item value="4AD124DE517BC6BA915B88C17F0AADF764469842156325C26B7CD8B888C41C71"/>
+        <item value="55BB3B316919620008AA76A4891E90384BFF2A76AE95C395FE738C2AC609F13F"/>
+    </string-array>
+</carrier_config>
diff --git a/assets/carrier_config_carrierid_2078_Simple-Mobile.xml b/assets/carrier_config_carrierid_2078_Simple-Mobile.xml
new file mode 100644
index 0000000..38de8fe
--- /dev/null
+++ b/assets/carrier_config_carrierid_2078_Simple-Mobile.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="utf-8" standalone="yes"?>
+<carrier_config>
+    <boolean name="carrier_default_data_roaming_enabled_bool" value="true"/>
+    <string-array name="carrier_certificate_string_array" num="3">
+        <item value="E751E163E91E041382839556D31302DB7058C44D9DF1B5B27FC43BD8F0EE2BBA"/>
+        <item value="4AD124DE517BC6BA915B88C17F0AADF764469842156325C26B7CD8B888C41C71"/>
+        <item value="55BB3B316919620008AA76A4891E90384BFF2A76AE95C395FE738C2AC609F13F"/>
+    </string-array>
+</carrier_config>
diff --git a/assets/carrier_config_carrierid_3_Telekom.xml b/assets/carrier_config_carrierid_3_Telekom.xml
index efee211..80258b4 100644
--- a/assets/carrier_config_carrierid_3_Telekom.xml
+++ b/assets/carrier_config_carrierid_3_Telekom.xml
@@ -2,4 +2,7 @@
 <carrier_config>
     <boolean name="carrier_default_wfc_ims_roaming_enabled_bool" value="true"/>
     <boolean name="carrier_supports_ss_over_ut_bool" value="true"/>
+    <string name="5g_icon_display_grace_period_string"
+        value="connected_mmwave,any,10;connected,any,10;not_restricted_rrc_idle,any,10;
+        not_restricted_rrc_con,any,10"/>
 </carrier_config>
diff --git a/src/com/android/carrierconfig/DefaultCarrierConfigService.java b/src/com/android/carrierconfig/DefaultCarrierConfigService.java
index 611e193..2248a9c 100644
--- a/src/com/android/carrierconfig/DefaultCarrierConfigService.java
+++ b/src/com/android/carrierconfig/DefaultCarrierConfigService.java
@@ -3,6 +3,7 @@
 import android.annotation.Nullable;
 import android.os.Build;
 import android.os.PersistableBundle;
+import android.os.SystemProperties;
 import android.service.carrier.CarrierIdentifier;
 import android.service.carrier.CarrierService;
 import android.telephony.TelephonyManager;
@@ -52,7 +53,7 @@
      * {@link TelephonyManager#getSimCarrierId()}. NOTE: config files named after mccmnc
      * are for those without a matching carrier id and should be renamed to carrier id once the
      * missing IDs are added to
-     * <a href="https://android.googlesource.com/platform/packages/providers/TelephonyProvider/+/master/assets/carrier_list.textpb">carrier id list</a>
+     * <a href="https://android.googlesource.com/platform/packages/providers/TelephonyProvider/+/master/assets/latest_carrier_id/carrier_list.textpb">carrier id list</a>
      *
      * First, look for file named after
      * carrier_config_carrierid_<carrierid>_<carriername>.xml if carrier id is not
@@ -222,6 +223,8 @@
      *   <li>spn: {@link CarrierIdentifier#getSpn}</li>
      *   <li>imsi: {@link CarrierIdentifier#getImsi}</li>
      *   <li>device: {@link Build.DEVICE}</li>
+     *   <li>vendorSku: {@link SystemConfig.VENDOR_SKU_PROPERTY}</li>
+     *   <li>hardwareSku: {@link SystemConfig.SKU_PROPERTY}</li>
      *   <li>cid: {@link CarrierIdentifier#getCarrierId()}
      *   or {@link CarrierIdentifier#getSpecificCarrierId()}</li>
      * </ul>
@@ -239,6 +242,10 @@
      */
     static boolean checkFilters(XmlPullParser parser, CarrierIdentifier id) {
         boolean result = true;
+        String vendorSkuProperty = SystemProperties.get(
+            "ro.boot.product.vendor.sku", "");
+        String hardwareSkuProperty = SystemProperties.get(
+            "ro.boot.product.hardware.sku", "");
         for (int i = 0; i < parser.getAttributeCount(); ++i) {
             String attribute = parser.getAttributeName(i);
             String value = parser.getAttributeValue(i);
@@ -264,6 +271,14 @@
                 case "device":
                     result = result && value.equalsIgnoreCase(Build.DEVICE);
                     break;
+                case "vendorSku":
+                    result = result &&
+                            value.equalsIgnoreCase(vendorSkuProperty);
+                    break;
+                case "hardwareSku":
+                    result = result &&
+                            value.equalsIgnoreCase(hardwareSkuProperty);
+                    break;
                 case "cid":
                     result = result && ((Integer.parseInt(value) == id.getCarrierId())
                             || (Integer.parseInt(value) == id.getSpecificCarrierId()));
diff --git a/tests/src/com/android/carrierconfig/CarrierConfigTest.java b/tests/src/com/android/carrierconfig/CarrierConfigTest.java
index 4b78fd6..c1a045c 100644
--- a/tests/src/com/android/carrierconfig/CarrierConfigTest.java
+++ b/tests/src/com/android/carrierconfig/CarrierConfigTest.java
@@ -68,6 +68,8 @@
                                 case "spn":
                                 case "imsi":
                                 case "device":
+                                case "vendorSku":
+                                case "hardwareSku":
                                 case "cid":
                                 case "name":
                                     break;