Data connection for carrier specific APN

Implement the following features to support carrier network connection.
This commit is to define the carrier config for each features.

1. Sets default preferred APN
2. Uses dun APN when using Preset APN in roaming network

Also, fixed that to use only APNs with the same set id as preferred
APN.

Test: Manual
Bug: 147969062
Merged-in: If1e6d2bf58de39c22caa901fcd90fb11f104d900
Change-Id: If1e6d2bf58de39c22caa901fcd90fb11f104d900
(cherry picked from commit b9beb0d1afda6327b1c7645ac20a016f08e5744e)
diff --git a/core/java/android/provider/Telephony.java b/core/java/android/provider/Telephony.java
index 2c66910..718f2de 100644
--- a/core/java/android/provider/Telephony.java
+++ b/core/java/android/provider/Telephony.java
@@ -3954,9 +3954,7 @@
         public static final String APN_SET_ID = "apn_set_id";
 
         /**
-         * Possible value for the {@link #APN_SET_ID} field. By default APNs will not belong to a
-         * set. If the user manually selects an APN without apn set id, there is no need to
-         * prioritize any specific APN set ids.
+         * Possible value for the {@link #APN_SET_ID} field. By default APNs are added to set 0.
          * <p>Type: INTEGER</p>
          * @hide
          */
@@ -3964,6 +3962,15 @@
         public static final int NO_APN_SET_ID = 0;
 
         /**
+         * Possible value for the {@link #APN_SET_ID} field.
+         * APNs with MATCH_ALL_APN_SET_ID will be used regardless of any set ids of
+         * the selected APN.
+         * <p>Type: INTEGER</p>
+         * @hide
+         */
+        public static final int MATCH_ALL_APN_SET_ID = -1;
+
+        /**
          * A unique carrier id associated with this APN
          * {@see TelephonyManager#getSimCarrierId()}
          * <p>Type: STRING</p>
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index 06f4c2a..2795f93 100755
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -3877,10 +3877,23 @@
      * Indicating whether DUN APN should be disabled when the device is roaming. In that case,
      * the default APN (i.e. internet) will be used for tethering.
      *
+     * This config is only available when using Preset APN(not user edited) as Preferred APN.
+     *
      * @hide
      */
-    public static final String KEY_DISABLE_DUN_APN_WHILE_ROAMING =
-            "disable_dun_apn_while_roaming";
+    public static final String KEY_DISABLE_DUN_APN_WHILE_ROAMING_WITH_PRESET_APN_BOOL =
+            "disable_dun_apn_while_roaming_with_preset_apn_bool";
+
+    /**
+     * Where there is no preferred APN, specifies the carrier's default preferred APN.
+     * Specifies the {@link android.provider.Telephony.Carriers.APN} of the default preferred apn.
+     *
+     * This config is only available with Preset APN(not user edited).
+     *
+     * @hide
+     */
+    public static final String KEY_DEFAULT_PREFERRED_APN_NAME_STRING =
+            "default_preferred_apn_name_string";
 
     /** The default value for every variable. */
     private final static PersistableBundle sDefaults;
@@ -4417,7 +4430,8 @@
                 "ims:2", "cbs:2", "ia:2", "emergency:2", "mcx:3", "xcap:3"
         });
         sDefaults.putStringArray(KEY_MISSED_INCOMING_CALL_SMS_PATTERN_STRING_ARRAY, new String[0]);
-        sDefaults.putBoolean(KEY_DISABLE_DUN_APN_WHILE_ROAMING, false);
+        sDefaults.putBoolean(KEY_DISABLE_DUN_APN_WHILE_ROAMING_WITH_PRESET_APN_BOOL, false);
+        sDefaults.putString(KEY_DEFAULT_PREFERRED_APN_NAME_STRING, "");
     }
 
     /**